Переглянути джерело

Merge remote-tracking branch 'origin/dev'

hujing 5 роки тому
батько
коміт
200dd92907
21 змінених файлів з 197 додано та 141 видалено
  1. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0002.java
  2. 31 37
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0005.java
  3. 5 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0006.java
  4. 3 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0014.java
  5. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0017.java
  6. 6 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0069.java
  7. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0072.java
  8. 23 15
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0414.java
  9. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0441.java
  10. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0449.java
  11. 8 8
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0724.java
  12. 6 10
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0504.java
  13. 5 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0162.java
  14. 19 9
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0178.java
  15. 5 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0202.java
  16. 43 44
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0149.java
  17. 17 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0351.java
  18. 10 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0601.java
  19. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/BeHospitalizedAI.java
  20. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/ModelAI.java
  21. 1 0
      public/src/main/java/com/lantone/qc/pub/model/vo/ChiefPresentSimilarityVo.java

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

@@ -89,7 +89,8 @@ public class BEH0002 extends QCCatalogue {
                 String firstClinical = clinicals.get(0).getName();
                 /* 主诉现病史相似度算法接口 */
                 ModelAI modelAI = new ModelAI();
-                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firstClinical, symptoms, false, chiefPresentSimilarityServiceClient);
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firstClinical, symptoms, false
+                        , "chief_present", chiefPresentSimilarityServiceClient);
                 if (jsonArray.size() == 2) {
                     /* 相似度最高症状 */
                     String symptom = jsonArray.getString(0);

+ 31 - 37
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0005.java

@@ -1,17 +1,16 @@
 package com.lantone.qc.kernel.catalogue.behospitalized;
 
+import com.google.common.collect.Lists;
 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 com.lantone.qc.pub.model.entity.Clinical;
 import com.lantone.qc.pub.model.entity.PD;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 
 
 /**
@@ -23,48 +22,43 @@ import java.util.Map;
 @Component
 public class BEH0005 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if(inputInfo.getBeHospitalizedDoc() == null){
+        if (inputInfo.getBeHospitalizedDoc() == null) {
             status.set("0");
             return;
         }
-        List<Integer> time_index = new ArrayList<>();
-        String chief_text = inputInfo.getBeHospitalizedDoc().getChiefLabel().getText();
-        if(chief_text.contains("检查") || chief_text.contains("术后") || chief_text.contains("药物")){
+        List<Integer> timeIndex = new ArrayList<>();
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null) {
             status.set("0");
-        }else {
-            int year = chief_text.indexOf("年");
-            if (year != -1) {
-                time_index.add(year);
-            }
-            int month = chief_text.indexOf("月");
-            if (month != -1) {
-                time_index.add(month);
-            }
-            int week = chief_text.indexOf("周");
-            if (week != -1) {
-                time_index.add(week);
-            }
-            int day = chief_text.indexOf("天");
-            if (day != -1) {
-                time_index.add(day);
-            }
-            int ri = chief_text.indexOf("日");
-            if (ri != -1) {
-                time_index.add(ri);
-            }
-            int hour = chief_text.indexOf("时");
-            if (hour != -1) {
-                time_index.add(hour);
+            return;
+        }
+        List<PD> pds = chiefLabel.getPds();
+        String chiefText = chiefLabel.getText();
+        if (chiefText.contains("检查") || chiefText.contains("术后") || chiefText.contains("药物")) {
+            status.set("0");
+        } else {
+            List<String> words = Lists.newArrayList("年", "月", "周", "天", "日", "时");
+            String name;
+            for (PD pd : pds) {
+                name = pd.getName();
+                if (StringUtil.isNotBlank(name)) {
+                    for (String word : words) {
+                        if (name.contains(word)) {
+                            timeIndex.add(chiefText.indexOf(word));
+                            break;
+                        }
+                    }
+                }
             }
         }
-        if(time_index.size()>0){
-            int min = time_index.get(0);
-            for (Integer data:time_index) {
-                if(data<min){
+        if (timeIndex.size() > 0) {
+            int min = timeIndex.get(0);
+            for (Integer data : timeIndex) {
+                if (data < min) {
                     min = data;
                 }
             }
-            if(min == time_index.get(0)){
+            if (min == timeIndex.get(0)) {
                 status.set("0");
             }
         }

+ 5 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0006.java

@@ -31,13 +31,15 @@ public class BEH0006 extends QCCatalogue {
             return;
         }
         String chiefText = chiefLabel.getText();
-        if (StringUtil.isNotBlank(chiefText) && (chiefText.contains("复查")
-                || chiefText.contains("检查") || chiefText.contains("术后") || chiefText.contains("药物")
-                || chiefText.contains("发现") || chiefText.contains("半年"))) {
+        if (StringUtil.isNotBlank(chiefText) && chiefText.contains("半年")) {
             status.set("0");
         } else {
             List<PD> pds = chiefLabel.getPds();
             if (pds != null && pds.size() > 0) {
+                if (pds.size() == 2) {
+                    status.set("0");
+                    return;
+                }
                 for (PD pd : pds) {
                     String pdName = pd.getName();
                     if (!CatalogueUtil.isEmpty(pdName)) {

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

@@ -53,7 +53,9 @@ public class BEH0014 extends QCCatalogue {
             if (present.length() > 30) {
                 present = present.substring(0, 30);
             }
-            if (present.contains("体检") || present.contains("发现") || present.contains("检查") || present.contains("因")) {
+            if (present.contains("体检") || present.contains("发现") || present.contains("检查") || present.contains("因")
+                    || present.contains("确诊") || present.contains("诊断") || present.contains("复查") || present.contains("术后")
+                    || present.contains("药物")) {
                 status.set("0");
                 return;
             }

+ 3 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0017.java

@@ -56,5 +56,8 @@ public class BEH0017 extends QCCatalogue {
         } else {
             status.set("0");
         }
+        if (presentLabel.getPds().size() > 0) {
+            status.set("0");
+        }
     }
 }

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

@@ -25,11 +25,16 @@ public class BEH0069 extends QCCatalogue {
             return;
         }
         Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-        if (StringUtils.isNotEmpty(structureMap.get("家庭成员类似病史"))) {
+        if (StringUtils.isNotEmpty(structureMap.get("家庭成员类似病史"))
+                ||StringUtils.isNotEmpty(structureMap.get("外祖父母"))
+                ||StringUtils.isNotEmpty(structureMap.get("家族遗传病"))
+                ||StringUtils.isNotEmpty(structureMap.get("既往妊娠分娩情况"))
+                ||StringUtils.isNotEmpty(structureMap.get("近亲结婚史"))) {
             status.set("0");
             return;
         }
 
+
         if (inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getFamilyLabel() != null) {
             if (!CatalogueUtil.isEmpty(inputInfo.getBeHospitalizedDoc().getFamilyLabel().getText())) {
                 status.set("0");

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

@@ -31,7 +31,8 @@ public class BEH0072 extends QCCatalogue {
             String familyText = familyLabel.getText();
             if (StringUtil.isNotBlank(familyText)) {
                 familyText = familyText.substring(0, Math.min(10, familyText.length()));
-                if (familyText.contains("死因") || familyText.contains("原因") || familyText.contains("详")) {
+                if (familyText.contains("死因") || familyText.contains("原因") || familyText.contains("详")
+                || familyText.contains("因")) {
                     return;
                 }
             }

+ 23 - 15
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0414.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.kernel.catalogue.behospitalized;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+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;
@@ -20,26 +21,33 @@ import java.util.Map;
 public class BEH0414 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getFirstPageRecordDoc() == null) {
-            return;
-        }
-        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-        Map<String, String> firstStructMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-        String contactAddress_bh = structureMap.get("年龄");
-        String contactAddress_first = firstStructMap.get(Content.age);
-        if (StringUtil.isNotBlank(contactAddress_bh) && StringUtil.isNotBlank(contactAddress_first)) {
-            contactAddress_bh = removeUnit(contactAddress_bh);
-            contactAddress_first = removeUnit(contactAddress_first);
-            if (!contactAddress_first.equals(contactAddress_bh)) {
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null
+                && inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getStructureMap() != null) {
+            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            String firstAdmissionAge = firstpageStructureMap.get(Content.age);
+            String admissionAge = beHospitalStructureMap.get(Content.age);
+            if (StringUtil.isBlank(firstAdmissionAge) || StringUtil.isBlank(admissionAge)) {
+                status.set("0");
+                return;
+            }
+            int firstAdmissionAgeNum = removalUnit(firstAdmissionAge);
+            int admissionAgeNum = removalUnit(admissionAge);
+            if (firstAdmissionAgeNum != admissionAgeNum) {
                 status.set("-1");
             }
         }
     }
 
-    private String removeUnit(String str) {
-        if (str.contains("岁")) {
-            return str.replace("岁", "");
+    private int removalUnit(String admissionAge) {
+        int age = 0;
+        if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
+            admissionAge = admissionAge.replaceAll("[岁天]", "");
+        }
+        admissionAge = admissionAge.replaceAll("[^0-9]","");
+        if (CatalogueUtil.numbersOnly(admissionAge)) {
+            age = Integer.parseInt(admissionAge);
         }
-        return str;
+        return age;
     }
 }

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

@@ -34,7 +34,8 @@ public class BEH0441 extends QCCatalogue {
         }
         String presentText = presentLabel.getText();
         if (StringUtil.isNotBlank(presentText)) {
-            List<String> words = Lists.newArrayList("胃纳", "食纳", "食欲", "未纳", "纳眠", "饮食", "纳眠","禁食","未食","鼻饲");
+            List<String> words = Lists.newArrayList("胃纳", "食纳", "食欲", "未纳", "纳眠", "饮食", "纳眠"
+                    ,"禁食","未食","鼻饲","食","吃","饮");
             for (String word : words) {
                 if (presentText.contains(word)) {
                     status.set("0");

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

@@ -62,7 +62,8 @@ public class BEH0449 extends QCCatalogue {
                 List<String> clinicName = getClinicName(presentClinicals);
                 /* 文本相似度模型 */
                 ModelAI modelAI = new ModelAI();
-                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(chiefClinic, clinicName, false, chiefPresentSimilarityServiceClient);
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(chiefClinic, clinicName,
+                        false, "chief_present", chiefPresentSimilarityServiceClient);
                 if (jsonArray.size() == 2) {
                     double likeRate = jsonArray.getDoubleValue(1);
                     if (likeRate > 0.9) {

+ 8 - 8
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0724.java

@@ -54,10 +54,10 @@ public class BEH0724 extends QCCatalogue {
         if (ListUtil.isNotEmpty(allergies)) {
             if (firpAllergyMedicine.contains("无")) {
                 allergies = allergies.stream().filter(i -> i != null
-                                && i.getNegative() != null
-                                && StringUtil.isNotBlank(i.getName())
-                                && i.getAllergyMedicine() != null
-                                && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
+                        && i.getNegative() != null
+                        && StringUtil.isNotBlank(i.getName())
+                        && i.getAllergyMedicine() != null
+                        && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
                 ).collect(Collectors.toList());
                 /* 模型提出的药物过敏史内容有一个否定就算与病案首页的药物过敏:无 相同 */
                 if (allergies.size() > 0) {
@@ -65,16 +65,16 @@ public class BEH0724 extends QCCatalogue {
                 }
             } else {
                 allergies = allergies.stream().filter(i -> i != null
-                                && StringUtil.isNotBlank(i.getName())
-                                && i.getAllergyMedicine() != null
-                                && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
+                        && StringUtil.isNotBlank(i.getName())
+                        && i.getAllergyMedicine() != null
+                        && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
                 ).collect(Collectors.toList());
 
                 List<String> allergyMedicine = getAllergyMedicine(allergies);
                 /* 主诉现病史相似度算法接口 */
                 ModelAI modelAI = new ModelAI();
                 JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firpAllergyMedicine, allergyMedicine,
-                        false, chiefPresentSimilarityServiceClient);
+                        false, "chief_present", chiefPresentSimilarityServiceClient);
                 if (jsonArray.size() == 2) {
                     /* 相似度分数 */
                     double likeRate = jsonArray.getDoubleValue(1);

+ 6 - 10
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0504.java

@@ -1,10 +1,10 @@
 package com.lantone.qc.kernel.catalogue.firstcourserecord;
 
 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 com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -20,18 +20,14 @@ public class FIRC0504 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
-        if(firstCourseRecordDoc != null){
+        if (firstCourseRecordDoc != null) {
             Map<String, String> firstRecordMap = firstCourseRecordDoc.getStructureMap();
-            if(firstRecordMap != null){
-                String morbidity_after = firstRecordMap.get("治疗计划");
-                if(morbidity_after != null){
-                    if(CatalogueUtil.isEmpty(morbidity_after)){
-                        status.set("-1");
-                    }
-                }else {
+            if (firstRecordMap != null) {
+                String treatPlan = firstRecordMap.get("治疗计划");
+                if (StringUtil.isBlank(treatPlan)) {
                     status.set("-1");
                 }
             }
         }
     }
-    }
+}

+ 5 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0162.java

@@ -1,10 +1,10 @@
 package com.lantone.qc.kernel.catalogue.firstpagerecord;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-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.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -22,7 +22,10 @@ public class FIRP0162 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String idNumber = firstpageStructureMap.get(Content.idNumber);
-            if (!CatalogueUtil.isEmpty(idNumber)) {
+            if (StringUtil.isNotBlank(idNumber)) {
+                if ("-".equals(idNumber) || "—".equals(idNumber)) {
+                    return;
+                }
                 String regex = "\\d{15}|\\d{17}[\\dxX]";
                 if (!idNumber.matches(regex)) {
                     status.set("-1");

+ 19 - 9
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0178.java

@@ -2,6 +2,7 @@ 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.client.SimilarityServiceClient;
 import com.lantone.qc.kernel.structure.ai.ModelAI;
 import com.lantone.qc.pub.Content;
@@ -28,6 +29,8 @@ import java.util.Map;
 public class FIRP0178 extends QCCatalogue {
     @Autowired
     SimilarityServiceClient similarityServiceClient;
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
 
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
@@ -53,24 +56,31 @@ public class FIRP0178 extends QCCatalogue {
                 return;
             }
 
-            /* 目前相似度算法是针对文本的,在此处并不适用,如 截瘫 - 高位截瘫,相似度为0 */
+            /* 修改为疾病相似度模型 */
             ModelAI modelAI = new ModelAI();
             int matchDiagSum = 0;
             for (String firstpageLeaveDiag : firstpageLeaveDiags) {
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firstpageLeaveDiag, leaveDiagsStr, false
+                        , "diagnose", chiefPresentSimilarityServiceClient);
+                if (jsonArray.size() == 2) {
+                    /* 相似度最高症状 */
+                    String symptom = jsonArray.getString(0);
+                    /* 相似度分数 */
+                    double likeRate = jsonArray.getDoubleValue(1);
+                    if (likeRate > 0.9) {
+                        matchDiagSum++;
+                    }
+                }
+                /*
                 for (String leaveDiag : leaveDiagsStr) {
                     if (firstpageLeaveDiag.equals(leaveDiag) || leaveDiag.contains(firstpageLeaveDiag)) {
                         matchDiagSum++;
                         break;
-                    } else {
-                        JSONArray similarContent = new JSONArray();
-                        modelAI.putContent(similarContent, firstpageLeaveDiag, leaveDiag);
-                        double likeRate = modelAI.loadSimilarAI(similarContent, similarityServiceClient);
-                        if (likeRate > 0.9) {
-                            matchDiagSum++;
-                            break;
-                        }
                     }
                 }
+
+                 */
+
             }
 
             if (matchDiagSum != firstpageLeaveDiags.size()) {

+ 5 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0202.java

@@ -22,10 +22,13 @@ public class FIRP0202 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String newbornAdmisWeightStr = firstpageStructureMap.get(Content.newbornAdmisWeight);
-            if (CatalogueUtil.isEmpty(newbornAdmisWeightStr) || "-".equals(newbornAdmisWeightStr)|| "—".equals(newbornAdmisWeightStr)) {
+            if (CatalogueUtil.isEmpty(newbornAdmisWeightStr) || !CatalogueUtil.numbersOnly(newbornAdmisWeightStr)) {
                 return;
             }
-            int newbornAdmisWeight = Integer.parseInt(newbornAdmisWeightStr);
+            double newbornAdmisWeight = Double.parseDouble(newbornAdmisWeightStr);
+            if (newbornAdmisWeight / 1000 >= 1) {
+                newbornAdmisWeight = newbornAdmisWeight / 1000;
+            }
             if (newbornAdmisWeight <= 1 || newbornAdmisWeight >= 10) {
                 status.set("-1");
             }

+ 43 - 44
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0149.java

@@ -25,57 +25,56 @@ public class LEA0149 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
-        if (leaveHospitalDoc == null) {
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (leaveHospitalDoc == null || beHospitalizedDoc == null) {
             status.set("0");
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
-        if (deathRecordDoc == null || deathRecordDoc.getText() == null) {
-            BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
-            if (beHospitalizedDoc != null) {
-                Map<String, String> lhStructureMap = leaveHospitalDoc.getStructureMap();
-                ChiefLabel chiefLabel = beHospitalizedDoc.getChiefLabel();
-                if (lhStructureMap != null && chiefLabel != null) {
-                    String bhChief = CatalogueUtil.int2ChineseNum(chiefLabel.getText().replaceAll("[\\p{Punct}\\pP。-]", ""));
-                    String leaveChief = lhStructureMap.get("主诉");
-                    String bhThings = lhStructureMap.get("入院情况");
-                    if (StringUtil.isNotBlank(bhThings)){
-                        bhThings = CatalogueUtil.int2ChineseNum(bhThings.replaceAll("[\\p{Punct}\\pP。-]", ""));
-                    }
-
-                    //如果出院小结结构化数据能取出主诉,则直接用该主诉和入院记录主诉比较
-                    if (StringUtil.isNotBlank(leaveChief)) {
-                        leaveChief = leaveChief.replaceAll("[\\p{Punct}\\pP。-]", "");
-                        if (bhChief.equals(leaveChief)) {
-                            status.set("0");
-                            return;
-                        }
-                    }
-                    if (StringUtil.isNotBlank(bhThings) && bhThings.replace(" ","").contains(bhChief.replace(" ",""))) {
-                        status.set("0");
-                        return;
-                    }
-                    Pattern compile = Pattern.compile("(?<=2.).*(?=3.体格检查)");
-                    Matcher matcher = compile.matcher(bhThings);
-                    while (matcher.find()) {
-                        String number = matcher.group(0);
-                        if (CatalogueUtil.isEmpty(number)) {
-                            status.set("-1");
-                        }
-                    }
-                    //处理台州的
-                    if (bhThings.contains("患者因")) {
-                        status.set("0");
-                    }
-
+        if (deathRecordDoc != null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> lhStructureMap = leaveHospitalDoc.getStructureMap();
+        ChiefLabel chiefLabel = beHospitalizedDoc.getChiefLabel();
+        if (lhStructureMap != null && chiefLabel != null) {
+            String bhChief = CatalogueUtil.int2ChineseNum(chiefLabel.getText().replaceAll("[\\p{Punct}\\pP。-]", ""));
+            String leaveChief = lhStructureMap.get("主诉");
+            String bhThings = lhStructureMap.get("入院情况");
+            if (StringUtil.isNotBlank(bhThings)) {
+                bhThings = CatalogueUtil.int2ChineseNum(bhThings.replaceAll("[\\p{Punct}\\pP。-]", ""));
+            }
 
-                    //                    bhThings = bhThings.replaceAll("[\\p{Punct}\\pP]", "");
-                    //                    if (bhThings.indexOf(bhChief) < 0) {
-                    //                        status.set("-1");
-                    //                    }
+            //如果出院小结结构化数据能取出主诉,则直接用该主诉和入院记录主诉比较
+            if (StringUtil.isNotBlank(leaveChief)) {
+                leaveChief = leaveChief.replaceAll("[\\p{Punct}\\pP。-]", "");
+                if (bhChief.equals(leaveChief)) {
+                    status.set("0");
+                    return;
                 }
             }
-        }
+            if (StringUtil.isNotBlank(bhThings) && bhThings.replace(" ", "").contains(bhChief.replace(" ", ""))) {
+                status.set("0");
+                return;
+            }
+            Pattern compile = Pattern.compile("(?<=2.).*(?=3.体格检查)");
+            Matcher matcher = compile.matcher(bhThings);
+            while (matcher.find()) {
+                String number = matcher.group(0);
+                if (CatalogueUtil.isEmpty(number)) {
+                    status.set("-1");
+                }
+            }
+            //处理台州的
+            if (bhThings.contains("患者因")) {
+                status.set("0");
+            }
+
 
+            //                    bhThings = bhThings.replaceAll("[\\p{Punct}\\pP]", "");
+            //                    if (bhThings.indexOf(bhChief) < 0) {
+            //                        status.set("-1");
+            //                    }
+        }
     }
 }

+ 17 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0351.java

@@ -5,6 +5,7 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -42,7 +43,22 @@ public class OPE0351 extends QCCatalogue {
                 }
                 return flag;
             }).count();
-            if (count > 0) {
+            long matchCount = operationDocs.stream().filter(operationDoc -> {
+                boolean flag = false;
+                if (operationDoc.getOperationDiscussionDoc() != null
+                        && StringUtil.isNotBlank(operationDoc.getOperationDiscussionDoc().getText())
+                        && (operationDoc.getOperationDiscussionDoc().getText().contains("体温")
+                        || operationDoc.getOperationDiscussionDoc().getText().contains("呼吸")
+                        || operationDoc.getOperationDiscussionDoc().getText().contains("脉搏")
+                        || operationDoc.getOperationDiscussionDoc().getText().contains("血压")
+                        || operationDoc.getOperationDiscussionDoc().getText().contains("心率")
+                )) {
+                    flag = true;
+                }
+                return flag;
+            }).count();
+            /* count为术后首程中没有生命体征的数量,matchCount为术后首程包含体温 呼吸 脉搏 血压 心率这些词的数量 */
+            if (count > 0 && matchCount == 0) {
                 status.set("-1");
             }
         }

+ 10 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0601.java

@@ -6,6 +6,7 @@ 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.ThreeLevelWardDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -25,15 +26,22 @@ public class THR0601 extends QCCatalogue {
             return;
         }
         List<ThreeLevelWardDoc> allDoctorWradDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();//查房记录
-        String title;
+        String title, record;
         boolean findIndications = false;
         for (ThreeLevelWardDoc threeLevelWardDoc : allDoctorWradDocs) {
             Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
             title = CatalogueUtil.subTitle(rescueStructureMap.get("查房标题"));
-            if (!CatalogueUtil.isEmpty(title) && title.contains(Content.attend)) {
+            record = CatalogueUtil.subTitle(rescueStructureMap.get("病情记录"));
+            if (StringUtil.isNotBlank(title) && title.contains(Content.attend)) {
                 findIndications = true;
                 break;
             }
+            if (StringUtil.isNotBlank(title) && StringUtil.isNotBlank(record)
+                    && title.contains("共同照护讨论记录") && record.contains(Content.attend)) {
+                findIndications = true;
+                break;
+            }
+
         }
         if (!findIndications) {
             status.set("-1");

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

@@ -69,7 +69,8 @@ public class BeHospitalizedAI extends ModelAI {
             if (beHospitalizedDoc.getChiefLabel().isCrfLabel()) {
                 if (StringUtil.isNotBlank(chief_text)) {
                     chief_text = StringUtil.removeBlank(chief_text);
-                    putContent(crfContent, medicalTextType.get(3), chief_text, Content.chief);  //主诉
+                    /* 2020-06-08修改主诉模型为现病史模型 */
+                    putContent(crfContent, medicalTextType.get(7), chief_text, Content.chief);  //主诉
                 }
             }
             if (beHospitalizedDoc.getPresentLabel().isCrfLabel()) {

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

@@ -189,13 +189,14 @@ public class ModelAI {
      * @return
      */
     public JSONArray loadChiefPresentSimilarAI(String string1, List<String> string2, boolean directionCheck
-            , ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient) {
+            ,String modelName, ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient) {
         //存储CRF完整所需结构数据
         ChiefPresentSimilarityVo similarityVo = new ChiefPresentSimilarityVo();
         JSONObject data = new JSONObject();
         putContent(data, string1, string2);
         similarityVo.setData(data);
         similarityVo.setDirection_check(directionCheck);
+        similarityVo.setModel_name(modelName);
         //获取CRF模型返回数据
         JSONArray predY = getAnnotation(chiefPresentSimilarityServiceClient, similarityVo).getPred_y();
         return getChiefPresentSimilarOutputs(predY);

+ 1 - 0
public/src/main/java/com/lantone/qc/pub/model/vo/ChiefPresentSimilarityVo.java

@@ -9,4 +9,5 @@ import lombok.Setter;
 public class ChiefPresentSimilarityVo {
     private JSONObject data;
     private boolean direction_check;
+    private String model_name;
 }