Browse Source

宁波中医院: 无业人员地址、电话未填写不扣分逻辑兼容

chengyao 3 years ago
parent
commit
03d1291d19

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0211.java

@@ -24,7 +24,7 @@ public class FIRP0211 extends QCCatalogue {
             String dischargeTime = firstpageStructureMap.get(Content.work_unit_phone);
             //工作单位 (无工作单位者无需填写单位邮编、电话及地址)
             String workUnit = firstpageStructureMap.get(Content.work_unit);
-            if (StringUtil.isBlank(workUnit) || "—".equals(workUnit)) {
+            if (StringUtil.isBlank(workUnit) || "—".equals(workUnit)|| "-".equals(workUnit)) {
                 return;
             }
             if (StringUtil.isBlank(dischargeTime) || "—".equals(dischargeTime)) {

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0214.java

@@ -24,7 +24,7 @@ public class FIRP0214 extends QCCatalogue {
             String dischargeTime = firstpageStructureMap.get(Content.work_unit_zipcode);
             //工作单位 (无工作单位者无需填写单位邮编、电话及地址)
             String workUnit = firstpageStructureMap.get(Content.work_unit);
-            if (StringUtil.isBlank(workUnit) || "—".equals(workUnit)) {
+            if (StringUtil.isBlank(workUnit) || "—".equals(workUnit) || "-".equals(workUnit)) {
                 return;
             }
             if (StringUtil.isBlank(dischargeTime) || "—".equals(dischargeTime)) {

+ 141 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ningbozhongyi/firstpagerecord/FIRP0178.java

@@ -0,0 +1,141 @@
+package com.lantone.qc.kernel.catalogue.hospital.ningbozhongyi.firstpagerecord;
+
+import com.alibaba.fastjson.JSONArray;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
+import com.lantone.qc.kernel.client.SimilarityServiceClient;
+import com.lantone.qc.kernel.structure.ai.ModelAI;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0178
+ * @Description :出院其他诊断不完全
+ * @Author : 胡敬
+ * @Date: 2020-03-16 14:01
+ */
+@Component
+public class FIRP0178 extends QCCatalogue {
+    @Autowired
+    SimilarityServiceClient similarityServiceClient;
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getLeaveHospitalDoc() != null) {
+            String mainDiagnosis = "";
+            Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+            List<Map<String, String>> dischargeDiag = (List) firstpageStructureMap.get(Content.dischargeDiag);
+            if (ListUtil.isEmpty(dischargeDiag)) {
+                return;
+            }
+            if (dischargeDiag.get(0) != null) {
+                mainDiagnosis = dischargeDiag.get(0).get("诊断名称");
+            }
+
+            /* 病案首页出院小结诊断 除去主诊断*/
+            List<String> firstpageLeaveDiags = getFirstPageDiag(dischargeDiag);
+            if (ListUtil.isEmpty(firstpageLeaveDiags)) {
+                return;
+            }
+
+            /*DiagLabel leaveDiagLabel = inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel();
+            if (leaveDiagLabel == null) {
+                return;
+            }
+            List<Diag> leaveDiags = leaveDiagLabel.getDiags();
+            List<String> leaveDiagsStr = putDiagToList(leaveDiags);*/
+            //出院小结得出院诊断,模型提取出现问题,需要手动以1.2.3.为界限切开
+            Map<String, String> leavehospitalStructureMap = inputInfo.getLeaveHospitalDoc().getStructureMap();
+            String leaveDiag = leavehospitalStructureMap.get("出院诊断");
+            if(leavehospitalStructureMap.containsKey("出院诊断规则") && StringUtil.isNotBlank(leavehospitalStructureMap.get("出院诊断规则"))){
+                 leaveDiag = leavehospitalStructureMap.get("出院诊断规则");
+                leavehospitalStructureMap.remove("出院诊断规则");
+            }
+
+            List<String> leaveDiagsStr = cut(leaveDiag, mainDiagnosis);
+
+            /* 修改为疾病相似度模型 */
+            ModelAI modelAI = new ModelAI();
+            String infoStr = "";
+            //最主要是给医生提醒,看是否有出院诊断漏写
+            for (int i = 1; i < leaveDiagsStr.size(); i++) {
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(leaveDiagsStr.get(i), firstpageLeaveDiags, false
+                        , "diagnose", chiefPresentSimilarityServiceClient);
+                if (jsonArray.size() == 2) {
+                    /* 相似度分数 */
+                    double likeRate = jsonArray.getDoubleValue(1);
+                    if (likeRate < 0.9) {
+                        infoStr = CatalogueUtil.concatInfo(infoStr, leaveDiagsStr.get(i));
+                    }
+                } else if (jsonArray.size() == 0) {
+                    infoStr = CatalogueUtil.concatInfo(infoStr, leaveDiagsStr.get(i));
+                }
+            }
+            if (StringUtil.isNotBlank(infoStr)) {
+                status.set("-1");
+                info.set(infoStr);
+            }
+        }
+    }
+
+    private List<String> getFirstPageDiag(List<Map<String, String>> dischargeDiag) {
+        List<String> firstpageDiag = new ArrayList<>();
+        for (int i = 0; i < dischargeDiag.size(); i++) {
+            if ("主要诊断".equals(dischargeDiag.get(i).get("诊断类别"))) {
+                continue;
+            }
+            String diagnoseName = dischargeDiag.get(i).get(Content.diagnoseName);
+            if (StringUtil.isBlank(diagnoseName) || "-".equals(diagnoseName)) { // 诊断名称为空不算
+                continue;
+            }
+            // 去重
+            if (!firstpageDiag.contains(diagnoseName)) {
+                firstpageDiag.add(diagnoseName);
+            }
+        }
+        return firstpageDiag;
+    }
+
+//    private List<String> putDiagToList(List<Diag> diagList) {
+//        List<String> diags = new ArrayList<>();
+//        for (Diag diag : diagList) {
+//            // 去重
+//            if (!diags.contains(diag.getHospitalDiagName())) {
+//                diags.add(diag.getHospitalDiagName());
+//            }
+//        }
+//        return diags;
+//    }
+
+    private List<String> cut(String leaveDiag, String mainDiagnosis) {
+        List<String> diags = new ArrayList<>();
+        if (leaveDiag != null) {
+            String[] leaveDiags = leaveDiag.split(",?,?[0-9]\\.");
+            for (String string : leaveDiags) {
+                if (!string.isEmpty()) {
+                    if (string.equals(mainDiagnosis)) {
+                        diags.add(0, string);
+                    } else {
+                        // 去重
+                        if (!diags.contains(string)) {
+                            diags.add(string);
+                        }
+                    }
+                }
+            }
+        }
+        return diags;
+    }
+}

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ningbozhongyi/util/NingBoZhongYiLeaveHospitalHtmlAnalysis.java

@@ -79,7 +79,7 @@ public class NingBoZhongYiLeaveHospitalHtmlAnalysis implements NingBoZhongYiHtml
 
                 }
                 if(StringUtil.isNotBlank(sb.toString())){
-                    structureMap.put("出院诊断",sb.toString());
+                    structureMap.put("出院诊断规则",sb.toString());
                 }
             }
             CommonAnalysisUtil.extractDateByTitle(structureMap, "时间");