Преглед изворни кода

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

MarkHuang пре 5 година
родитељ
комит
c0541da2af
21 измењених фајлова са 231 додато и 96 уклоњено
  1. 1 0
      kernel/src/main/java/com/lantone/qc/kernel/analysis/QCAnalysis.java
  2. 43 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0011.java
  3. 20 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02909.java
  4. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02966.java
  5. 3 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02969.java
  6. 12 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0382.java
  7. 43 39
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0099.java
  8. 43 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0095.java
  9. 7 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC02970.java
  10. 6 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0500.java
  11. 24 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0192.java
  12. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02972.java
  13. 3 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0148.java
  14. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA02968.java
  15. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02967.java
  16. 7 7
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/BeHospitalizedAI.java
  17. 8 8
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/FirstCourseRecordAI.java
  18. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/LeaveHospitalAI.java
  19. 2 0
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessDiag.java
  20. 1 0
      public/src/main/java/com/lantone/qc/pub/model/entity/Diag.java
  21. 2 1
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathRecordDocTrans.java

+ 1 - 0
kernel/src/main/java/com/lantone/qc/kernel/analysis/QCAnalysis.java

@@ -46,6 +46,7 @@ public class QCAnalysis {
         try {
             aiAnalyze.aiProcess(inputInfo);
         } catch (Exception e) {
+            System.out.println("出错病历号:" + inputInfo.getMedicalRecordInfoDoc().getStructureMap().get("behospitalCode"));
             throw new AIException("AI模型执行错误:" + e.getMessage());
         }
         long t3 = System.currentTimeMillis();

+ 43 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0011.java

@@ -56,12 +56,18 @@ public class BEH0011 extends QCCatalogue {
                     String lastGeneral = generals.get(generals.size() - 1).getName();
                     int lastGeneralIndex = presentText.indexOf(lastGeneral);
                     for (Diag presentDiag : presentDiags) {
-                        if (presentDiag.getNegative() != null) {
+                        if (presentDiag.getNegative() != null || presentDiag.getHospitalDiagName().contains("否认")) {
                             continue;
                         }
                         /* 现病史中一般情况之后的疾病名称 */
                         if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
-                            presentPastDiags.add(presentDiag.getHospitalDiagName());
+                            if (presentDiag.getHospitalDiagName().contains("心")
+                                    || presentDiag.getHospitalDiagName().contains("糖")
+                                    || presentDiag.getHospitalDiagName().contains("脑萎缩")
+                                    || presentDiag.getHospitalDiagName().contains("慢性")
+                                    || presentDiag.getHospitalDiagName().contains("血")) {
+                                presentPastDiags.add(presentDiag.getHospitalDiagName());
+                            }
                         }
                     }
                 }
@@ -75,8 +81,9 @@ public class BEH0011 extends QCCatalogue {
         /* 取初步诊断中疾病名称 */
         List<String> initDiags = new ArrayList<>();
         List<Diag> initialDiagDiags = initialDiagLabel.getDiags();
-        addDiagHospitalName(initDiags, initialDiagDiags);
+        addInitDiagHospitalName(initDiags, initialDiagDiags);
 
+        String infoStr = "";
         int matchSum = 0;
         ModelAI modelAI = new ModelAI();
         for (String presentPastDiag : presentPastDiags) {
@@ -87,12 +94,17 @@ public class BEH0011 extends QCCatalogue {
                 String symptom = jsonArray.getString(0);
                 /* 相似度分数 */
                 double likeRate = jsonArray.getDoubleValue(1);
-                if (likeRate > 0.9) {
+                if (likeRate > 0.85) {
                     matchSum++;
+                } else {
+                    infoStr = concatInfo(infoStr, presentPastDiag);
                 }
+            } else {
+                infoStr = concatInfo(infoStr, presentPastDiag);
             }
         }
-        if (matchSum == presentPastDiags.size()){
+        info.set(infoStr);
+        if (matchSum == presentPastDiags.size()) {
             status.set("0");
         }
         /*
@@ -102,7 +114,33 @@ public class BEH0011 extends QCCatalogue {
          */
     }
 
+    private String concatInfo(String infoStr, String presentPastDiag) {
+        if (StringUtil.isBlank(infoStr)) {
+            infoStr += presentPastDiag;
+        } else {
+            if (!infoStr.contains(presentPastDiag)) {
+                infoStr += "," + presentPastDiag;
+            }
+        }
+        return infoStr;
+    }
+
     private void addDiagHospitalName(List<String> presentPastDiag, List<Diag> pastDiags) {
+        for (Diag pastDiag : pastDiags) {
+            if (pastDiag.getNegative() != null) {
+                continue;
+            }
+            if (pastDiag.getHospitalDiagName().contains("心")
+                    || pastDiag.getHospitalDiagName().contains("糖")
+                    || pastDiag.getHospitalDiagName().contains("脑萎缩")
+                    || pastDiag.getHospitalDiagName().contains("慢性")
+                    || pastDiag.getHospitalDiagName().contains("血")) {
+                presentPastDiag.add(pastDiag.getHospitalDiagName());
+            }
+        }
+    }
+
+    private void addInitDiagHospitalName(List<String> presentPastDiag, List<Diag> pastDiags) {
         for (Diag pastDiag : pastDiags) {
             if (pastDiag.getNegative() != null) {
                 continue;

+ 20 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02909.java

@@ -32,6 +32,10 @@ public class BEH02909 extends QCCatalogue {
             status.set("0");
             return;
         }
+        /*if (drugsCurrentlyInUse.contains("见现病史")) {
+            status.set("0");
+            return;
+        }*/
         /*List<String> drug = getDrug(drugsCurrentlyInUse);*/
         PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
         if (presentLabel == null) {
@@ -50,7 +54,7 @@ public class BEH02909 extends QCCatalogue {
                 for (Medicine medicine : medicines) {
                     /* 现病史中一般情况之后的药品名称,并且不包含不详 */
                     if (presentText.indexOf(medicine.getName()) > lastGeneralIndex && !medicine.getName().contains("不详")) {
-                        drugFromPresent.add(medicine.getName());
+                        drugFromPresent.add(medicine.getName().replaceAll("[“”药物]",""));
                     }
                 }
             }
@@ -58,18 +62,33 @@ public class BEH02909 extends QCCatalogue {
         if (drugFromPresent.size() == 0) {
             status.set("0");
         } else {
+            String infoStr = "";
             int matchSum = 0;
             for (String drug : drugFromPresent) {
                 if (drugsCurrentlyInUse.contains(drug)) {
                     matchSum++;
+                } else {
+                    infoStr = concatInfo(infoStr,drug);
                 }
             }
+            info.set(infoStr);
             if (matchSum == drugFromPresent.size()) {
                 status.set("0");
             }
         }
     }
 
+    private String concatInfo(String infoStr, String drug) {
+        if (StringUtil.isBlank(infoStr)) {
+            infoStr += drug;
+        } else {
+            if (!infoStr.contains(drug)) {
+                infoStr += "," + drug;
+            }
+        }
+        return infoStr;
+    }
+
     private List<String> getDrug(String drugsCurrentlyInUse) {
         List<String> drugs = new ArrayList<>();
         String medicine = "药物名称", usage = "用法", continueUse = "本次住院是否继续使用";

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02966.java

@@ -34,7 +34,7 @@ public class BEH02966 extends QCCatalogue {
         List<String> noMatchWords = null;
         if (gender.contains("男")) {
             /* 男性不合理词 */
-            noMatchWords = Lists.newArrayList("阴道", "宫颈", "子宫", "附件", "宫底", "胎位", "胎数", "胎心",
+            noMatchWords = Lists.newArrayList("阴道", "宫颈", "子宫", "宫底", "胎位", "胎数", "胎心",
                     "宫缩", "宫口", "胎膜", "输卵管", "卵巢", "输卵管", "阴唇", "阴蒂", "阴道前庭", "前庭大腺", "处女膜");
         } else if (gender.contains("女")) {
             /* 女性不合理词 */

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02969.java

@@ -29,10 +29,11 @@ public class BEH02969 extends QCCatalogue {
             return;
         }
         treatPlan = StringUtil.isBlank(treatPlan) ? "" : treatPlan;
-        treatmentMonitoringPlan = StringUtil.isBlank(treatmentMonitoringPlan) ? "" : treatPlan;
+        treatmentMonitoringPlan = StringUtil.isBlank(treatmentMonitoringPlan) ? "" : treatmentMonitoringPlan;
         String text = treatPlan + "," + treatmentMonitoringPlan;
-        if (text.contains("生命体征") && (!text.contains("血压") || !text.contains("心率"))) {
+        if (text.contains("生命体征") && !text.contains("血压") && !text.contains("心率")) {
             status.set("-1");
+            info.set("需测血压、心率");
         }
     }
 }

+ 12 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0382.java

@@ -7,6 +7,7 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.CrisisValueReportDoc;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
@@ -30,13 +31,18 @@ public class CON0382 extends QCCatalogue {
                 if (StringUtil.isBlank(crisisValueReportDoc.getStructureMap().get("危急值记录内容"))) {
                     String record_time = crisisValueReportDoc.getStructureMap().get("记录时间");
                     String receive_time = crisisValueReportDoc.getStructureMap().get("接收时间");
-                    String crisisVal = crisisValueReportDoc.getStructureMap().get("危急值记录内容").trim();
-
-                    Date record = StringUtil.parseDateTime(record_time);
-                    Date receive = StringUtil.parseDateTime(receive_time);
-                    if (crisisVal.length()==0 || CatalogueUtil.compareTime(receive, record, 6*60L) ) {
-                        status.set("-1");
+                    String crisisVal =null;
+                    if(crisisValueReportDoc.getStructureMap().get("危急值记录内容") != null){
+                        crisisVal = crisisValueReportDoc.getStructureMap().get("危急值记录内容").trim();
+                    }
+                    if(record_time != null && receive_time != null && crisisVal != null){
+                        Date record = StringUtil.parseDateTime(record_time);
+                        Date receive = StringUtil.parseDateTime(receive_time);
+                        if (crisisVal.length()==0 || CatalogueUtil.compareTime(receive, record, 6*60L) ) {
+                            status.set("-1");
+                        }
                     }
+
                 }
             });
         }

+ 43 - 39
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0099.java

@@ -1,40 +1,44 @@
-package com.lantone.qc.kernel.catalogue.deathcasediscuss;
-
-import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
-import com.lantone.qc.pub.model.InputInfo;
-import com.lantone.qc.pub.model.OutputInfo;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @ClassName : DEAC0099
- * @Description : 死亡病例讨论记录中无主诉
- * @Author : 胡敬
- * @Date: 2020-03-19 09:35
- */
-@Component
-public class DEAC0099 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
-        if (inputInfo.getDeathCaseDiscussDoc() != null && inputInfo.getDeathCaseDiscussDoc().getStructureMap() != null
-                && inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getChiefLabel() != null) {
-            Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
-            String chiefText = inputInfo.getBeHospitalizedDoc().getChiefLabel().getText();
-            String admissionStatus = deathCaseDiscussStructureMap.get("入院情况");
-            if (CatalogueUtil.isEmpty(admissionStatus) || CatalogueUtil.isEmpty(chiefText)) {
-                return;
-            }
-            chiefText = CatalogueUtil.removeSpecialChar(chiefText).replace("。", "");
-            admissionStatus = CatalogueUtil.removeSpecialChar(admissionStatus).replace("。", "");
-            if (!admissionStatus.contains(chiefText)) {
-                status.set("-1");
-            }
-            //处理台州的
-            if (admissionStatus.contains("患者因")) {
-                status.set("0");
-            }
-        }
-    }
+package com.lantone.qc.kernel.catalogue.deathcasediscuss;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : DEAC0099
+ * @Description : 死亡病例讨论记录中无主诉
+ * @Author : 胡敬
+ * @Date: 2020-03-19 09:35
+ */
+@Component
+public class DEAC0099 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getDeathCaseDiscussDoc() != null && inputInfo.getDeathCaseDiscussDoc().getStructureMap() != null
+                && inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getChiefLabel() != null) {
+            Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
+            String chiefText = inputInfo.getBeHospitalizedDoc().getChiefLabel().getText();
+            String admissionStatus = deathCaseDiscussStructureMap.get("入院情况");
+            if (CatalogueUtil.isEmpty(admissionStatus) || CatalogueUtil.isEmpty(chiefText)) {
+                return;
+            }
+            chiefText = CatalogueUtil.removeSpecialChar(chiefText).replace("。", "");
+            if(StringUtils.isNotEmpty(chiefText)){
+                return;
+            }
+            admissionStatus = CatalogueUtil.removeSpecialChar(admissionStatus).replace("。", "");
+            if (!admissionStatus.contains(chiefText)) {
+                status.set("-1");
+            }
+            //处理台州的
+            if (admissionStatus.contains("患者因")) {
+                status.set("0");
+            }
+        }
+    }
 }

+ 43 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0095.java

@@ -31,7 +31,7 @@ public class FIRC0095 extends QCCatalogue {
     ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
 
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if (inputInfo.getBeHospitalizedDoc() == null) {
+        if (inputInfo.getFirstCourseRecordDoc() == null) {
             status.set("0");
             return;
         }
@@ -53,12 +53,18 @@ public class FIRC0095 extends QCCatalogue {
                     String lastGeneral = generals.get(generals.size() - 1).getName();
                     int lastGeneralIndex = presentText.indexOf(lastGeneral);
                     for (Diag presentDiag : presentDiags) {
-                        if (presentDiag.getNegative() != null) {
+                        if (presentDiag.getNegative() != null || presentDiag.getHospitalDiagName().contains("否认")) {
                             continue;
                         }
                         /* 现病史中一般情况之后的疾病名称 */
                         if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
-                            presentPastDiags.add(presentDiag.getHospitalDiagName());
+                            if (presentDiag.getHospitalDiagName().contains("心")
+                                    || presentDiag.getHospitalDiagName().contains("糖")
+                                    || presentDiag.getHospitalDiagName().contains("脑萎缩")
+                                    || presentDiag.getHospitalDiagName().contains("慢性")
+                                    || presentDiag.getHospitalDiagName().contains("血")) {
+                                presentPastDiags.add(presentDiag.getHospitalDiagName());
+                            }
                         }
                     }
                 }
@@ -72,8 +78,9 @@ public class FIRC0095 extends QCCatalogue {
         /* 取初步诊断中疾病名称 */
         List<String> initDiags = new ArrayList<>();
         List<Diag> initialDiagDiags = initialDiagLabel.getDiags();
-        addDiagHospitalName(initDiags, initialDiagDiags);
+        addInitDiagHospitalName(initDiags, initialDiagDiags);
 
+        String infoStr = "";
         int matchSum = 0;
         ModelAI modelAI = new ModelAI();
         for (String presentPastDiag : presentPastDiags) {
@@ -84,11 +91,16 @@ public class FIRC0095 extends QCCatalogue {
                 String symptom = jsonArray.getString(0);
                 /* 相似度分数 */
                 double likeRate = jsonArray.getDoubleValue(1);
-                if (likeRate > 0.9) {
+                if (likeRate > 0.85) {
                     matchSum++;
+                } else {
+                    infoStr = concatInfo(infoStr, presentPastDiag);
                 }
+            } else {
+                infoStr = concatInfo(infoStr, presentPastDiag);
             }
         }
+        info.set(infoStr);
         if (matchSum == presentPastDiags.size()) {
             status.set("0");
         }
@@ -99,7 +111,33 @@ public class FIRC0095 extends QCCatalogue {
          */
     }
 
+    private String concatInfo(String infoStr, String presentPastDiag) {
+        if (StringUtil.isBlank(infoStr)) {
+            infoStr += presentPastDiag;
+        } else {
+            if (!infoStr.contains(presentPastDiag)) {
+                infoStr += "," + presentPastDiag;
+            }
+        }
+        return infoStr;
+    }
+
     private void addDiagHospitalName(List<String> presentPastDiag, List<Diag> pastDiags) {
+        for (Diag pastDiag : pastDiags) {
+            if (pastDiag.getNegative() != null) {
+                continue;
+            }
+            if (pastDiag.getHospitalDiagName().contains("心")
+                    || pastDiag.getHospitalDiagName().contains("糖")
+                    || pastDiag.getHospitalDiagName().contains("脑萎缩")
+                    || pastDiag.getHospitalDiagName().contains("慢性")
+                    || pastDiag.getHospitalDiagName().contains("血")) {
+                presentPastDiag.add(pastDiag.getHospitalDiagName());
+            }
+        }
+    }
+
+    private void addInitDiagHospitalName(List<String> presentPastDiag, List<Diag> pastDiags) {
         for (Diag pastDiag : pastDiags) {
             if (pastDiag.getNegative() != null) {
                 continue;

+ 7 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC02970.java

@@ -20,20 +20,21 @@ import java.util.Map;
 public class FIRC02970 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getBeHospitalizedDoc() == null) {
+        if (inputInfo.getFirstCourseRecordDoc() == null) {
             return;
         }
-        Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-        String treatPlan = beHospitalStructureMap.get("诊疗计划");
-        String treatmentMonitoringPlan = beHospitalStructureMap.get("治疗监测计划");
+        Map<String, String> firstCourseRecordStructureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();
+        String treatPlan = firstCourseRecordStructureMap.get("诊疗计划");
+        String treatmentMonitoringPlan = firstCourseRecordStructureMap.get("治疗监测计划");
         if (StringUtil.isBlank(treatPlan) && StringUtil.isBlank(treatmentMonitoringPlan)) {
             return;
         }
         treatPlan = StringUtil.isBlank(treatPlan) ? "" : treatPlan;
-        treatmentMonitoringPlan = StringUtil.isBlank(treatmentMonitoringPlan) ? "" : treatPlan;
+        treatmentMonitoringPlan = StringUtil.isBlank(treatmentMonitoringPlan) ? "" : treatmentMonitoringPlan;
         String text = treatPlan + "," + treatmentMonitoringPlan;
-        if (text.contains("生命体征") && (!text.contains("血压") || !text.contains("心率"))) {
+        if (text.contains("生命体征") && !text.contains("血压") && !text.contains("心率")) {
             status.set("-1");
+            info.set("需测血压、心率");
         }
     }
 }

+ 6 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0500.java

@@ -7,6 +7,7 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -53,8 +54,11 @@ public class FIRC0500 extends QCCatalogue {
                 return;
             }
         }
-        if (firstCourseRecordDoc.getText().contains(chief_text)) {
-            status.set("0");
+        if(StringUtils.isNotBlank(firstCourseRecordDoc.getText())){
+            if (firstCourseRecordDoc.getText().contains(chief_text)) {
+                status.set("0");
+            }
         }
+
     }
 }

+ 24 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0192.java

@@ -1,14 +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.doc.FirstPageRecordDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -20,6 +25,9 @@ import java.util.Map;
  */
 @Component
 public class FIRP0192 extends QCCatalogue {
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
@@ -32,17 +40,29 @@ public class FIRP0192 extends QCCatalogue {
         if (mapList != null && mapList.size() > 0) {
             Map<String, String> op = mapList.get(0);
             String oName = op.get(Content.operative_name);
+            ModelAI modelAI = new ModelAI();
             String operationName = "";
             for (OperationDoc operationDoc : operationDocs) {
                 if (operationDoc.getOperationRecordDoc() != null) {
                     operationName = operationDoc.getOperationRecordDoc().getStructureMap().get("手术名称");
                 }
-                if (StringUtil.isBlank(operationName) && operationDoc.getOperationDiscussionDoc() != null){
+                if (StringUtil.isBlank(operationName) && operationDoc.getOperationDiscussionDoc() != null) {
                     operationName = operationDoc.getOperationDiscussionDoc().getStructureMap().get("手术名称");
                 }
-                if (StringUtil.isNotBlank(operationName) && !operationName.contains(oName)){
-                    status.set("-1");
-                    return;
+                if (StringUtil.isNotBlank(operationName)) {
+                    String[] operationNames = operationName.split("\\+");
+                    JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(oName, Arrays.asList(operationNames), false
+                            , "operation", chiefPresentSimilarityServiceClient);
+                    if (jsonArray.size() == 2) {
+                        /* 相似度最高手术 */
+                        String operation = jsonArray.getString(0);
+                        /* 相似度分数 */
+                        double likeRate = jsonArray.getDoubleValue(1);
+                        if (likeRate < 0.9) {
+                            status.set("-1");
+                            return;
+                        }
+                    }
                 }
             }
         }

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

@@ -26,7 +26,7 @@ public class FIRP02972 extends QCCatalogue {
             String address = firstpageStructureMap.get(Content.current_address);
             if (!CatalogueUtil.isEmpty(address)) {
                 String suffix = (address.length()<=5)?address:(address.substring(address.length()-5));
-                Pattern p = Pattern.compile("[0-9一二三四五六七八九]");
+                Pattern p = Pattern.compile("[0-9一二三四五六七八九0123456789]");
                 Matcher m = p.matcher(suffix);
                 if (!m.find()) {
                     status.set("-1");

+ 3 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0148.java

@@ -35,13 +35,12 @@ public class LEA0148 extends QCCatalogue {
         if (StringUtil.isNotBlank(timeQm) && StringUtil.isNotBlank(timeCy)) {
             Date timeQmDate = StringUtil.parseDateTime(timeQm);
             Date timeCyDate = StringUtil.parseDateTime(timeCy);
-            if (timeQmDate == null && timeCyDate == null) {
-                status.set("0");
-                return;
-            }
             if (!CatalogueUtil.compareTime(timeCyDate, timeQmDate, 24 * 60L)) {
                 status.set("0");
             }
+        }else {
+            status.set("0");
+            return;
         }
     }
 }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA02968.java

@@ -34,7 +34,7 @@ public class LEA02968 extends QCCatalogue {
         List<String> noMatchWords = null;
         if (gender.contains("男")) {
             /* 男性不合理词 */
-            noMatchWords = Lists.newArrayList("阴道", "宫颈", "子宫", "附件", "宫底", "胎位", "胎数", "胎心",
+            noMatchWords = Lists.newArrayList("阴道", "宫颈", "子宫", "宫底", "胎位", "胎数", "胎心",
                     "宫缩", "宫口", "胎膜", "输卵管", "卵巢", "输卵管", "阴唇", "阴蒂", "阴道前庭", "前庭大腺", "处女膜");
         } else if (gender.contains("女")) {
             /* 女性不合理词 */

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02967.java

@@ -34,7 +34,7 @@ public class THR02967 extends QCCatalogue {
         List<String> noMatchWords = null;
         if (gender.contains("男")) {
             /* 男性不合理词 */
-            noMatchWords = Lists.newArrayList("阴道", "宫颈", "子宫", "附件", "宫底", "胎位", "胎数", "胎心",
+            noMatchWords = Lists.newArrayList("阴道", "宫颈", "子宫", "宫底", "胎位", "胎数", "胎心",
                     "宫缩", "宫口", "胎膜", "输卵管", "卵巢", "输卵管", "阴唇", "阴蒂", "阴道前庭", "前庭大腺", "处女膜");
         } else if (gender.contains("女")) {
             /* 女性不合理词 */

+ 7 - 7
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/BeHospitalizedAI.java

@@ -125,23 +125,23 @@ public class BeHospitalizedAI extends ModelAI {
                 putContent(crfContent, medicalTextType.get(3), pacs_text, Content.pacs);//辅助检查(暂用主诉现病史模型,之后会新训练单独模型再做修改)
             }
             if (beHospitalizedDoc.getInitialDiagLabel().isCrfLabel()) {
-                if (StringUtil.isNotBlank(initial_diag_text) && CatalogueUtil.numberExist(initial_diag_text)) {
-                    initial_diag_text = CatalogueUtil.removeBetweenWordSpace(initial_diag_text);
+                if (StringUtil.isNotBlank(initial_diag_text)) {
+                    /*initial_diag_text = CatalogueUtil.removeBetweenWordSpace(initial_diag_text);*/
+                    putContent(crfContent, medicalTextType.get(6), initial_diag_text, Content.initial_diag);//初步诊断
                 }
-                putContent(crfContent, medicalTextType.get(6), initial_diag_text, Content.initial_diag);//初步诊断
             }
             if (StringUtils.isNotEmpty(revised_diag_text) && beHospitalizedDoc.getRevisedDiagLabel().isCrfLabel()) {
                 //修正诊断
-                if (CatalogueUtil.numberExist(initial_diag_text)) {
+                /*if (CatalogueUtil.numberExist(initial_diag_text)) {
                     revised_diag_text = CatalogueUtil.removeBetweenWordSpace(revised_diag_text);
-                }
+                }*/
                 putContent(crfContent, medicalTextType.get(6), revised_diag_text, Content.revised_diag);
             }
             if (StringUtils.isNotEmpty(supple_diag_text) && beHospitalizedDoc.getSuppleDiagLabel().isCrfLabel()) {
                 //补充诊断
-                if (CatalogueUtil.numberExist(initial_diag_text)) {
+                /*if (CatalogueUtil.numberExist(initial_diag_text)) {
                     supple_diag_text = CatalogueUtil.removeBetweenWordSpace(supple_diag_text);
-                }
+                }*/
                 putContent(crfContent, medicalTextType.get(6), supple_diag_text, Content.supple_diag);
             }
             JSONObject midData = loadAI(inputInfo.isUseCrfCache(), inputInfo.getMedicalRecordInfoDoc().getStructureMap().get("behospitalCode"), crfContent, crfServiceClient);

+ 8 - 8
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/FirstCourseRecordAI.java

@@ -49,15 +49,15 @@ public class FirstCourseRecordAI extends ModelAI {
             //初步诊断
             if (StringUtils.isNotEmpty(structureMap.get(Content.initial_diag))) {
                 String initial_diag = structureMap.get(Content.initial_diag);
-                if (CatalogueUtil.numberExist(initial_diag)) {
+                /*if (CatalogueUtil.numberExist(initial_diag)) {
                     initial_diag = CatalogueUtil.removeBetweenWordSpace(structureMap.get(Content.initial_diag));
-                }
+                }*/
                 putContent(crfContent, medicalTextType.get(1), initial_diag, Content.initial_diag);
             } else if (firstCourseRecordDoc.getInitialDiagLabel() != null && StringUtil.isNotBlank(firstCourseRecordDoc.getInitialDiagLabel().getText())) {
                 String initial_diag = firstCourseRecordDoc.getInitialDiagLabel().getText();
-                if (CatalogueUtil.numberExist(initial_diag)) {
+                /*if (CatalogueUtil.numberExist(initial_diag)) {
                     initial_diag = CatalogueUtil.removeBetweenWordSpace(firstCourseRecordDoc.getInitialDiagLabel().getText());
-                }
+                }*/
                 putContent(crfContent, medicalTextType.get(1), initial_diag, Content.initial_diag);
             }
 
@@ -66,15 +66,15 @@ public class FirstCourseRecordAI extends ModelAI {
             //鉴别诊断
             if (StringUtils.isNotEmpty(structureMap.get("鉴别诊断"))) {
                 String diffDiag = structureMap.get("鉴别诊断");
-                if (CatalogueUtil.numberExist(diffDiag)) {
+                /*if (CatalogueUtil.numberExist(diffDiag)) {
                     diffDiag = CatalogueUtil.removeBetweenWordSpace(diffDiag);
-                }
+                }*/
                 putContent(crfContent, medicalTextType.get(1), diffDiag, "鉴别诊断");
             } else if (firstCourseRecordDoc.getDifferentialDiagLabel() != null && StringUtil.isNotBlank(firstCourseRecordDoc.getDifferentialDiagLabel().getText())) {
                 String diffDiag = firstCourseRecordDoc.getDifferentialDiagLabel().getText();
-                if (CatalogueUtil.numberExist(diffDiag)) {
+                /*if (CatalogueUtil.numberExist(diffDiag)) {
                     diffDiag = CatalogueUtil.removeBetweenWordSpace(diffDiag);
-                }
+                }*/
                 putContent(crfContent, medicalTextType.get(1), diffDiag, "鉴别诊断");
             }
             //诊疗计划

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/LeaveHospitalAI.java

@@ -50,9 +50,9 @@ public class LeaveHospitalAI extends ModelAI {
                 //出院诊断
                 if (StringUtil.isNotBlank(leaveHospitalStructureMap.get(Content.dischargeDiag))) {
                     String dischargeDiag = leaveHospitalStructureMap.get(Content.dischargeDiag);
-                    if (CatalogueUtil.numberExist(dischargeDiag)) {
+                    /*if (CatalogueUtil.numberExist(dischargeDiag)) {
                         dischargeDiag = CatalogueUtil.removeBetweenWordSpace(dischargeDiag);
-                    }
+                    }*/
                     putContent(crfContent, medicalTextType.get(1), dischargeDiag, Content.dischargeDiag);
                 }
             }

+ 2 - 0
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessDiag.java

@@ -5,6 +5,7 @@ import com.lantone.qc.kernel.structure.ai.model.EntityEnum;
 import com.lantone.qc.kernel.structure.ai.model.Lemma;
 import com.lantone.qc.kernel.util.DiagEnhancer;
 import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.entity.PD;
 import com.lantone.qc.pub.model.entity.Possible;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -26,6 +27,7 @@ public class EntityProcessDiag extends EntityProcess {
                 if (lemma.isHaveChildren()) {
                     diag.setNegative(findNegative(lemma));//阴性
                     diag.setPossible(findT(lemma, new Possible(), EntityEnum.POSSIBLE.toString()));//可能的
+                    diag.setPd(findT(lemma, new PD(), EntityEnum.TIME.toString()));//时间
                 }
                 diags.add(diag);
             }

+ 1 - 0
public/src/main/java/com/lantone/qc/pub/model/entity/Diag.java

@@ -16,5 +16,6 @@ public class Diag extends General {
     private String hospitalDiagName;    //医院疾病名称
     private Possible possible;
     private Negative negative;
+    private PD pd;
     private String ICD;
 }

+ 2 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathRecordDocTrans.java

@@ -39,7 +39,8 @@ public class TaiZhouDeathRecordDocTrans extends ModelDocTrans {
             "初步诊断=入院诊断",
             "诊治经过=诊疗经过",
             "本人姓名=姓名",
-            "现病史- 发病情况=发病情况"
+            "现病史- 发病情况=发病情况",
+            "医生=记录医师"
     );
 
 }