Procházet zdrojové kódy

Merge remote-tracking branch 'origin/beilun/dev' into beilun/dev

fangqw před 4 roky
rodič
revize
47ec60ef35

+ 84 - 16
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/behospitalized/BEH02980.java

@@ -6,9 +6,7 @@ import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
 import com.lantone.qc.kernel.structure.ai.ModelAI;
 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.model.entity.GeneralDesc;
-import com.lantone.qc.pub.model.entity.Negative;
+import com.lantone.qc.pub.model.entity.*;
 import com.lantone.qc.pub.model.label.DiagLabel;
 import com.lantone.qc.pub.model.label.PastLabel;
 import com.lantone.qc.pub.model.label.PresentLabel;
@@ -39,7 +37,7 @@ public class BEH02980 extends QCCatalogue {
 
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getBeHospitalizedDoc() == null){
+        if (inputInfo.getBeHospitalizedDoc() == null) {
             return;
         }
         PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
@@ -66,12 +64,11 @@ public class BEH02980 extends QCCatalogue {
                         if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
                             if (isContains(presentDiag.getHospitalDiagName()) && !isFilter(presentDiag.getHospitalDiagName())) {
                                 String dgname = presentDiag.getHospitalDiagName();
-                                if (presentDiag.getNegative()==null) {
+                                if (presentDiag.getNegative() == null) {
                                     if (!pos_diags.contains(dgname)) {
                                         pos_diags.add(dgname);
                                     }
-                                }
-                                else {
+                                } else {
                                     if (!neg_diags.contains(dgname)) {
                                         neg_diags.add(dgname);
                                     }
@@ -83,9 +80,14 @@ public class BEH02980 extends QCCatalogue {
             }
         }
 
-
         if (pastLabel != null && StringUtils.isNotEmpty(pastLabel.getText())) {
             extract_diags(pastLabel.getDiags(), pos_diags, neg_diags);
+            //过敏史
+            extract_Allergy(pastLabel.getAllergies(), pos_diags, neg_diags);
+            //食物过敏史
+            extract_AllergyFoods(pastLabel.getAllergyFoods(), pos_diags, neg_diags);
+            //药物过敏史
+            extract_Medicine(pastLabel.getAllergyMedicines(), pos_diags, neg_diags);
         } else {
             //例如邵逸夫 台州这种结构化数据,判断高血压 和 糖尿病是否有冲突
             List<Diag> pastDiags = new ArrayList<>();
@@ -106,7 +108,7 @@ public class BEH02980 extends QCCatalogue {
             diag = new Diag();
             diag.setName("糖尿病");
             diag.setHospitalDiagName("糖尿病");
-            if  (StringUtils.isNotEmpty(a1) && "否认".equals(a1)) {
+            if (StringUtils.isNotEmpty(a1) && "否认".equals(a1)) {
                 Negative negative = new Negative();
                 negative.setName("否认");
                 pastDiags.add(diag);
@@ -123,13 +125,24 @@ public class BEH02980 extends QCCatalogue {
         String infoStr = "";
         int matchSum = 0;
         ModelAI modelAI = new ModelAI();
-
         for (String negdiag : neg_diags) {
             JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(negdiag, pos_diags, false
                     , "diagnose", chiefPresentSimilarityServiceClient);
             if (jsonArray.size() == 2) {
                 /* 相似度最高症状 */
                 String dgname = jsonArray.getString(0);
+                if ("糖尿病".equals(negdiag) && "妊娠期糖尿病".equals(dgname)) {
+                    continue;
+                }
+                if ("高血压史".equals(negdiag) && "高血压病".equals(dgname)) {
+                    matchSum++;
+                    if (StringUtils.isEmpty(infoStr)) {
+                        infoStr = negdiag;
+                    } else {
+                        infoStr = infoStr + "," + negdiag;
+                    }
+                    continue;
+                }
                 /* 相似度分数 */
                 double likeRate = jsonArray.getDoubleValue(1);
                 if (likeRate > 0.99) {
@@ -139,7 +152,7 @@ public class BEH02980 extends QCCatalogue {
                     } else {
                         infoStr = infoStr + "," + negdiag;
                     }
-                    break;
+                    continue;
                 }
             }
         }
@@ -150,24 +163,79 @@ public class BEH02980 extends QCCatalogue {
 
     }
 
-
-    private List<String> extract_diags(List<Diag> diags, List<String> pos_diags, List<String> neg_diags ) {
+    //疾病史
+    private List<String> extract_diags(List<Diag> diags, List<String> pos_diags, List<String> neg_diags) {
         List<String> dgs = new ArrayList<>();
-        for (Diag dg:diags) {
+        for (Diag dg : diags) {
             String dgname = dg.getHospitalDiagName();
-            if (dg.getNegative()==null) {
+            if (dg.getNegative() == null) {
+                if (!pos_diags.contains(dgname)) {
+                    pos_diags.add(dgname);
+                }
+            } else {
+                if (!neg_diags.contains(dgname)) {
+                    neg_diags.add(dgname);
+                    dgs.add(dgname);
+                }
+            }
+        }
+        return dgs;
+    }
+
+    //过敏史
+    private List<String> extract_Allergy(List<Allergy> allergys, List<String> pos_diags, List<String> neg_diags) {
+        List<String> dgs = new ArrayList<>();
+        for (Allergy dg : allergys) {
+            String dgname = dg.getName();
+            if (dg.getNegative() == null) {
                 if (!pos_diags.contains(dgname)) {
                     pos_diags.add(dgname);
                 }
+            } else {
+                if (!neg_diags.contains(dgname)) {
+                    neg_diags.add(dgname);
+                    dgs.add(dgname);
+                }
             }
-            else {
+        }
+        return dgs;
+    }
+
+    //食物过敏史
+    private List<String> extract_AllergyFoods(List<AllergyFood> allergyFoods, List<String> pos_diags, List<String> neg_diags) {
+        List<String> dgs = new ArrayList<>();
+        for (AllergyFood af : allergyFoods) {
+            String dgname = af.getName();
+            if (af.getNegative() == null) {
+                if (!pos_diags.contains(dgname)) {
+                    pos_diags.add(dgname);
+                }
+            } else {
                 if (!neg_diags.contains(dgname)) {
                     neg_diags.add(dgname);
                     dgs.add(dgname);
                 }
             }
         }
+        return dgs;
+    }
 
+    //药物过敏史
+    private List<String> extract_Medicine(List<AllergyMedicine> allergyMedicines, List<String> pos_diags, List<String> neg_diags) {
+        List<String> dgs = new ArrayList<>();
+        for (AllergyMedicine am : allergyMedicines) {
+            String dgname = am.getName();
+            if (am.getNegative() == null) {
+                if (!pos_diags.contains(dgname)) {
+                    pos_diags.add(dgname);
+                }
+            } else {
+                if (!neg_diags.contains(dgname)) {
+                    neg_diags.add(dgname);
+                    dgs.add(dgname);
+                }
+            }
+        }
         return dgs;
     }
 

+ 3 - 0
trans/src/main/java/com/lantone/qc/trans/yiwu/YiWuBeHospitalizedDocTrans.java

@@ -237,8 +237,11 @@ public class YiWuBeHospitalizedDocTrans extends ModelDocTrans {
             "患者籍贯=出生地",
             "他=其他",
             "入院诊断1=初步诊断",
+            "入院诊断=初步诊断",
             "出院诊断1=出院诊断",
             "主刀医师签名=初步诊断医师签名",
+            "brjbxx.lxdh=联系电话",
+            "疾病史=既往史",
             "诊断和诊断修正=修正诊断"
     );