浏览代码

1.门急诊诊断与现病史不一致加入诊断相似度模型判断

hujing 5 年之前
父节点
当前提交
4196a19b69
共有 1 个文件被更改,包括 57 次插入1 次删除
  1. 57 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0173.java

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

@@ -1,13 +1,19 @@
 package com.lantone.qc.kernel.catalogue.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.structure.ai.ModelAI;
 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.model.entity.Diag;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -21,6 +27,9 @@ import java.util.stream.Collectors;
  */
 @Component
 public class FIRP0173 extends QCCatalogue {
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         if (inputInfo.getFirstPageRecordDoc() == null || inputInfo.getBeHospitalizedDoc() == null) {
             status.set("0");
@@ -35,8 +44,21 @@ public class FIRP0173 extends QCCatalogue {
             }
             //现病史所有诊断
             List<Diag> presentDiags = inputInfo.getBeHospitalizedDoc().getPresentLabel().getDiags();
+
+            /* 现病史阳性诊断与病案首页门急诊诊断走相似度模型 */
+            boolean isSimilar = false;
+            List<Diag> presentNotNegDiag = presentDiags.stream().filter(diag -> diag.getNegative() == null).collect(Collectors.toList());
+            List<String> presentNotNegDiags = getStringList(presentNotNegDiag);
+            for (String diag : outpatientEmergencyDiag.split(" ")) {
+                isSimilar = isSimilar(diag, presentNotNegDiags);
+                if (isSimilar) {
+                    status.set("0");
+                    return;
+                }
+            }
+
             for (Diag diag : presentDiags) {
-                if (diag.getNegative() != null){
+                if (diag.getNegative() != null) {
                     continue;
                 }
                 if (diag.getHospitalDiagName().equals(outpatientEmergencyDiag)) {
@@ -44,12 +66,46 @@ public class FIRP0173 extends QCCatalogue {
                     return;
                 }
             }
+
             List<Diag> presentPossibleDiag = presentDiags.stream().filter(diag -> diag.getPossible() != null).collect(Collectors.toList());
             if (presentPossibleDiag.size() > 0) {
                 if (presentPossibleDiag.get(0).getHospitalDiagName().equals(outpatientEmergencyDiag)) {
                     status.set("0");
                 }
             }
+            /* 现病史可能诊断与病案首页门急诊诊断走相似度模型 */
+            List<String> presentPossibleDiags = getStringList(presentPossibleDiag);
+            for (String diag : outpatientEmergencyDiag.split(" ")) {
+                isSimilar = isSimilar(diag, presentPossibleDiags);
+                if (isSimilar) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+    }
+
+    private boolean isSimilar(String diag1, List<String> diagList) {
+        ModelAI modelAI = new ModelAI();
+        JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(diag1, diagList, false
+                , "diagnose", chiefPresentSimilarityServiceClient);
+        if (jsonArray.size() == 2) {
+            /* 相似度分数 */
+            double likeRate = jsonArray.getDoubleValue(1);
+            return likeRate > 0.8;
+        }
+        return false;
+    }
+
+    private List<String> getStringList(List<Diag> diags) {
+        List<String> diagStringList = new ArrayList<>();
+        for (Diag diag : diags) {
+            String hospitalDiagName = diag.getHospitalDiagName();
+            if (StringUtil.isBlank(hospitalDiagName)) {
+                continue;
+            }
+            diagStringList.add(hospitalDiagName);
         }
+        return diagStringList;
     }
 }