Explorar el Código

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

wangfeng hace 5 años
padre
commit
960a864b38
Se han modificado 75 ficheros con 51398 adiciones y 51166 borrados
  1. 59 20
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0011.java
  2. 8 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0012.java
  3. 5 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02956.java
  4. 5 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02957.java
  5. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02966.java
  6. 39 10
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02980.java
  7. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH03007.java
  8. 24 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0422.java
  9. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0440.java
  10. 15 9
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0441.java
  11. 13 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0444.java
  12. 4 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0492.java
  13. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0299.java
  14. 12 9
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0307.java
  15. 8 8
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0308.java
  16. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0309.java
  17. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0569.java
  18. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0534.java
  19. 14 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0383.java
  20. 13 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0384.java
  21. 14 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0386.java
  22. 49 43
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0099.java
  23. 9 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0114.java
  24. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0115.java
  25. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0556.java
  26. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0557.java
  27. 5 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0558.java
  28. 6 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathrecord/DEAR0339.java
  29. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0598.java
  30. 23 14
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0084.java
  31. 59 21
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0095.java
  32. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC02970.java
  33. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0497.java
  34. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0500.java
  35. 3 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0170.java
  36. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0204.java
  37. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0205.java
  38. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0206.java
  39. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0212.java
  40. 9 7
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0226.java
  41. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0242.java
  42. 22 20
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0248.java
  43. 35 26
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0250.java
  44. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0251.java
  45. 4 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0253.java
  46. 4 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0260.java
  47. 4 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0262.java
  48. 4 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0264.java
  49. 4 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0266.java
  50. 9 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02885.java
  51. 9 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02886.java
  52. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0150.java
  53. 3 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0151.java
  54. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0152.java
  55. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0153.java
  56. 16 12
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0154.java
  57. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA02968.java
  58. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0396.java
  59. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0323.java
  60. 52 69
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0587.java
  61. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0636.java
  62. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0651.java
  63. 0 85
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0587.java
  64. 15 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0682.java
  65. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/ModelAI.java
  66. 25357 25357
      kernel/src/main/resources/cache/3/concept_diag_properties.dict
  67. 25357 25357
      kernel/src/main/resources/cache/3/hospital_diag_info.dict
  68. 1 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouClinicalBloodDocTrans.java
  69. 3 1
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCrisisValueReportDocTrans.java
  70. 3 1
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathCaseDiscussDocTrans.java
  71. 1 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathRecordDocTrans.java
  72. 2 1
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstCourseRecordDocTrans.java
  73. 9 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstPageRecordDocTrans.java
  74. 6 3
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouOperationDocTrans.java
  75. 1 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouRescueDocTrans.java

+ 59 - 20
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0011.java

@@ -13,13 +13,11 @@ import com.lantone.qc.pub.model.label.DiagLabel;
 import com.lantone.qc.pub.model.label.PastLabel;
 import com.lantone.qc.pub.model.label.PresentLabel;
 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.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @ClassName : BEH0011
@@ -36,6 +34,9 @@ public class BEH0011 extends QCCatalogue {
     @Autowired
     ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
 
+    private List<String> containList = Arrays.asList("脑萎缩", "慢性", "纤颤", "高血压", "糖尿", "冠状", "冠心病", "支架", "起搏器", "房颤", "风湿");
+    private List<String> filterList = Arrays.asList("心脏病", "低血糖", "急性", ";");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         if (inputInfo.getBeHospitalizedDoc() == null) {
             status.set("0");
@@ -64,14 +65,8 @@ public class BEH0011 extends QCCatalogue {
                         }
                         /* 现病史中一般情况之后的疾病名称 */
                         if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
-                            if (presentDiag.getHospitalDiagName().contains("心")
-                                    || presentDiag.getHospitalDiagName().contains("脑萎缩")
-                                    || presentDiag.getHospitalDiagName().contains("慢性")
-                                    || presentDiag.getHospitalDiagName().contains("血糖")) {
-                                if (!presentDiag.getHospitalDiagName().contains("心脏病")
-                                        && !presentDiag.getHospitalDiagName().contains("低血糖")) {
-                                    presentPastDiags.add(presentDiag.getHospitalDiagName());
-                                }
+                            if (isContains(presentDiag.getHospitalDiagName()) && !isFilter(presentDiag.getHospitalDiagName())) {
+                                presentPastDiags.add(presentDiag.getHospitalDiagName());
                             }
                         }
                     }
@@ -82,6 +77,29 @@ public class BEH0011 extends QCCatalogue {
         if (pastLabel != null) {
             List<Diag> pastDiags = pastLabel.getDiags();
             addDiagHospitalName(presentPastDiags, pastDiags);
+        } else {            //结构化数据
+            List<Diag> pastDiags = new ArrayList<>();
+
+            Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            String a1 = structureMap.get("高血压");
+            if (StringUtils.isNotEmpty(a1) && !"否认".equals(a1)) {
+                Diag diag = new Diag();
+                diag.setName("高血压");
+                diag.setHospitalDiagName("高血压");
+                if (!isHave(presentPastDiags, "高血压")) {
+                    pastDiags.add(diag);
+                }
+            }
+            a1 = structureMap.get("糖尿病");
+            if  (StringUtils.isNotEmpty(a1) && !"否认".equals(a1)) {
+                Diag diag = new Diag();
+                diag.setName("糖尿病");
+                diag.setHospitalDiagName("糖尿病");
+                if (!isHave(presentPastDiags, "糖尿病")) {
+                    pastDiags.add(diag);
+                }
+            }
+            addDiagHospitalName(presentPastDiags, pastDiags);
         }
         /* 取初步诊断中疾病名称 */
         List<String> initDiags = new ArrayList<>();
@@ -124,14 +142,8 @@ public class BEH0011 extends QCCatalogue {
             if (pastDiag.getNegative() != null) {
                 continue;
             }
-            if (pastDiag.getHospitalDiagName().contains("心")
-                    || pastDiag.getHospitalDiagName().contains("脑萎缩")
-                    || pastDiag.getHospitalDiagName().contains("慢性")
-                    || pastDiag.getHospitalDiagName().contains("血糖")) {
-                if (!pastDiag.getHospitalDiagName().contains("心脏病")
-                        && !pastDiag.getHospitalDiagName().contains("低血糖")) {
-                    presentPastDiag.add(pastDiag.getHospitalDiagName());
-                }
+            if (isContains(pastDiag.getHospitalDiagName()) && !isFilter(pastDiag.getHospitalDiagName())) {
+                presentPastDiag.add(pastDiag.getHospitalDiagName());
             }
         }
     }
@@ -144,6 +156,33 @@ public class BEH0011 extends QCCatalogue {
             presentPastDiag.add(pastDiag.getHospitalDiagName());
         }
     }
+
+    private boolean isHave(Set<String> presentDiag, String diagName) {
+        for (String haveDiag : presentDiag) {
+            if (haveDiag.contains(diagName) || diagName.contains(haveDiag)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean isContains(String diagName) {
+        for (String c : containList) {
+            if (diagName.contains(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean isFilter(String diagName) {
+        for (String c : filterList) {
+            if (diagName.contains(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
     /* 原逻辑
     Map<String, Map<String, Object>> diagMap = specialStorageUtil.getJsonStringValue(KernelConstants.CONCEPT_DIAG_PROPERTY_MAP);
     String initDiagText = CatalogueUtil.removeSpecialChar(initialDiagLabel.getText());

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

@@ -1,8 +1,8 @@
 package com.lantone.qc.kernel.catalogue.behospitalized;
 
-import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.dbanaly.util.KernelConstants;
 import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Diag;
@@ -35,19 +35,22 @@ public class BEH0012 extends QCCatalogue {
         }
         List<String> diags_out = new ArrayList<>();
         Map<String, String> hostpital_standDiag = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DIAG_MAP);
-        if (hostpital_standDiag == null){
+        if (hostpital_standDiag == null) {
             status.set("0");
             return;
         }
-        List<Diag> diags = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel().getDiags();
+        List<Diag> diags = null;
+        if (inputInfo.getBeHospitalizedDoc().getInitialDiagLabel() != null) {
+            diags = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel().getDiags();
+        }
         if (diags != null && diags.size() > 0) {
             for (Diag diag : diags) {
                 List<String> disList = Arrays.asList(strings);
                 for (String diagSplit : diag.getHospitalDiagName().split("、")) {
-                    if ("ACT".equals(diagSplit)){
+                    if ("ACT".equals(diagSplit)) {
                         continue;
                     }
-                    String hospitalDiagName = diagSplit.trim().replace("待查", "").replace("?","").replace("?","");
+                    String hospitalDiagName = diagSplit.trim().replace("待查", "").replace("?", "").replace("?", "");
                     if (hospitalDiagName.contains("伴")) {
                         hospitalDiagName = hospitalDiagName.substring(0, hospitalDiagName.indexOf("伴"));
                     }

+ 5 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02956.java

@@ -24,10 +24,11 @@ public class BEH02956 extends QCCatalogue {
         }
         Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
         String marry = beHospitalStructureMap.get("婚姻");
-        if (StringUtil.isNotBlank(marry) && "已婚".equals(marry)) {
-            if (StringUtil.isBlank(beHospitalStructureMap.get("结婚年龄"))) {
-                status.set("-1");
-            }
+        if (StringUtil.isNotBlank(marry) && "未婚".equals(marry)){
+            return;
+        }
+        if (StringUtil.isBlank(beHospitalStructureMap.get("结婚年龄"))) {
+            status.set("-1");
         }
     }
 }

+ 5 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02957.java

@@ -24,10 +24,11 @@ public class BEH02957 extends QCCatalogue {
         }
         Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
         String marry = beHospitalStructureMap.get("婚姻");
-        if (StringUtil.isNotBlank(marry) && "已婚".equals(marry)) {
-            if (StringUtil.isBlank(beHospitalStructureMap.get("夫妻关系"))) {
-                status.set("-1");
-            }
+        if (StringUtil.isNotBlank(marry) && "未婚".equals(marry)){
+            return;
+        }
+        if (StringUtil.isBlank(beHospitalStructureMap.get("夫妻关系"))) {
+            status.set("-1");
         }
     }
 }

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

@@ -13,7 +13,7 @@ import java.util.Map;
 
 /**
  * @ClassName : BEH02966
- * @Description :  入院记录查体与性别不匹配
+ * @Description :  患者病历书写与性别不符(入院记录)
  * @Author : 胡敬
  * @Date: 2020-06-13 15:51
  */
@@ -46,7 +46,7 @@ public class BEH02966 extends QCCatalogue {
         }
 
         List<String> keys = Lists.newArrayList("主诉", "现病史", "既往史", "个人史", "体格检查", "一般情况"
-                , "初步诊断", "专科体格检查", "神经系统检查");
+                , "初步诊断", "专科体格检查", "神经系统检查", "实验室检查", "影像学检查");
         String text = CatalogueUtil.structureMapJoin(beHospitalStructureMap, keys);
 
         for (String noMatchWord : noMatchWords) {

+ 39 - 10
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02980.java

@@ -8,15 +8,18 @@ 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.label.DiagLabel;
 import com.lantone.qc.pub.model.label.PastLabel;
 import com.lantone.qc.pub.model.label.PresentLabel;
 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;
 
 
 /**
@@ -38,14 +41,41 @@ public class BEH02980 extends QCCatalogue {
 
         List<String> pos_diags = new ArrayList<>();
         List<String> neg_diags = new ArrayList<>();
-        List<String> present_neg_diags = new ArrayList<>();
-        List<String> past_neg_diags = new ArrayList<>();
 
         if (presentLabel != null) {
-            present_neg_diags = extract_diags(presentLabel.getDiags(), pos_diags, neg_diags);
+            extract_diags(presentLabel.getDiags(), pos_diags, neg_diags);
         }
         if (pastLabel != null) {
-            past_neg_diags = extract_diags(pastLabel.getDiags(), pos_diags, neg_diags);
+            extract_diags(pastLabel.getDiags(), pos_diags, neg_diags);
+        } else {
+            //例如邵逸夫 台州这种结构化数据,判断高血压 和 糖尿病是否有冲突
+            List<Diag> pastDiags = new ArrayList<>();
+            Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            String a1 = structureMap.get("高血压");
+            Diag diag = new Diag();
+            diag.setName("高血压");
+            diag.setHospitalDiagName("高血压");
+            if (StringUtils.isNotEmpty(a1) && "否认".equals(a1)) {
+                Negative negative = new Negative();
+                negative.setName("否认");
+                pastDiags.add(diag);
+            } else if (StringUtils.isNotEmpty(a1) && !"否认".equals(a1)) {
+                pastDiags.add(diag);
+            }
+
+            a1 = structureMap.get("糖尿病");
+            diag = new Diag();
+            diag.setName("糖尿病");
+            diag.setHospitalDiagName("糖尿病");
+            if  (StringUtils.isNotEmpty(a1) && "否认".equals(a1)) {
+                Negative negative = new Negative();
+                negative.setName("否认");
+                pastDiags.add(diag);
+            } else if (StringUtils.isNotEmpty(a1) && !"否认".equals(a1)) {
+                pastDiags.add(diag);
+            }
+
+            extract_diags(pastDiags, pos_diags, neg_diags);
         }
         if (initialDiagLabel != null) {
             extract_diags(initialDiagLabel.getDiags(), pos_diags, neg_diags);
@@ -65,19 +95,18 @@ public class BEH02980 extends QCCatalogue {
                 double likeRate = jsonArray.getDoubleValue(1);
                 if (likeRate > 0.85) {
                     matchSum++;
-                    if (present_neg_diags.indexOf(negdiag)>=0) {
-                        infoStr = "现病史:\t" + negdiag;
-                    }
-                    else if (past_neg_diags.indexOf(negdiag)>=0) {
-                        infoStr = "既往史:\t" + negdiag;
+                    if (StringUtils.isEmpty(infoStr)) {
+                        infoStr = negdiag;
+                    } else {
+                        infoStr = infoStr + "," + negdiag;
                     }
                     break;
                 }
             }
         }
-        info.set(infoStr);
         if (matchSum > 0) {
             status.set("-1");
+            info.set(infoStr);
         }
 
     }

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH03007.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH03007
+ * @Description : 待查病例未列出可能性较大诊断
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH03007 extends QCCatalogue {
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        DiagLabel initialDiagLabel = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel();
+        if (initialDiagLabel == null || StringUtil.isBlank(initialDiagLabel.getText())) {
+            status.set("0");
+            return;
+        }
+
+        List<String> diags = Lists.newArrayList(initialDiagLabel.getText().split("\n"));
+        String firstDiag = diags.get(0);
+        if (!firstDiag.endsWith("待查")) {
+            status.set("0");
+            return;
+        }
+
+        if (diags.size() > 1) {
+            status.set("0");
+            return;
+        }
+    }
+
+}

+ 24 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0422.java

@@ -1,12 +1,13 @@
 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;
+import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
 import java.util.Map;
 
 
@@ -18,7 +19,27 @@ import java.util.Map;
 @Component
 public class BEH0422 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 记录日期比入院日期早就报错
+         */
         status.set("0");
-
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (beHospitalizedDoc == null) {
+            return;
+        }
+        Map<String, String> docStructureMap = beHospitalizedDoc.getStructureMap();
+        String admissionDateStr = docStructureMap.get("入院日期");
+        String recordDateStr = docStructureMap.get("记录日期");
+        if (StringUtil.isBlank(admissionDateStr) || StringUtil.isBlank(recordDateStr)) {
+            return;
+        }
+        Date admissionDate = StringUtil.parseDateTime(admissionDateStr);
+        Date recordDate = StringUtil.parseDateTime(recordDateStr);
+        if (admissionDate == null || recordDate == null) {
+            return;
+        }
+        if (admissionDate.after(recordDate)) {
+            status.set("-1");
+        }
     }
 }

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

@@ -25,7 +25,7 @@ public class BEH0440 extends QCCatalogue {
             return;
         }
         Map<String, String> bhMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-        if (StringUtil.isNotBlank(bhMap.get("户口地址"))) {
+        if (StringUtil.isNotBlank(bhMap.get("户口地址")) || StringUtil.isNotBlank(bhMap.get("联系地址"))) {
             status.set("0");
         }
     }

+ 15 - 9
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0441.java

@@ -32,10 +32,12 @@ public class BEH0441 extends QCCatalogue {
             status.set("0");
             return;
         }
+        List<String> words = Lists.newArrayList("胃纳", "食纳", "食欲", "未纳", "纳眠", "饮食", "纳眠"
+                ,"禁食","未食","鼻饲","食","吃","饮");
+        /*
         String presentText = presentLabel.getText();
         if (StringUtil.isNotBlank(presentText)) {
-            List<String> words = Lists.newArrayList("胃纳", "食纳", "食欲", "未纳", "纳眠", "饮食", "纳眠"
-                    ,"禁食","未食","鼻饲","食","吃","饮");
+
             for (String word : words) {
                 if (presentText.contains(word)) {
                     status.set("0");
@@ -43,6 +45,7 @@ public class BEH0441 extends QCCatalogue {
                 }
             }
         }
+         */
         List<GeneralDesc> generals = presentLabel.getGenerals();
         List<General> gens = presentLabel.getGens();
 
@@ -53,19 +56,22 @@ public class BEH0441 extends QCCatalogue {
 
         if (ListUtil.isNotEmpty(generals)) {
             for (GeneralDesc general : generals) {
-                if (general.getName().contains("纳") || general.getName().contains("饮食")
-                        || general.getName().contains("进食") || general.getName().contains("食欲")) {
-                    status.set("0");
-                    break;
+                for (String word : words) {
+                    if (general.getName().contains(word)) {
+                        status.set("0");
+                        return;
+                    }
                 }
             }
         }
 
         if (ListUtil.isNotEmpty(gens)) {
             for (General general : gens) {
-                if (general.getName().contains("纳") || general.getName().contains("饮食") || general.getName().contains("进食")) {
-                    status.set("0");
-                    break;
+                for (String word : words) {
+                    if (general.getName().contains(word)) {
+                        status.set("0");
+                        return;
+                    }
                 }
             }
         }

+ 13 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0444.java

@@ -32,6 +32,7 @@ public class BEH0444 extends QCCatalogue {
         PresentLabel presentLabel = beHospitalizedDoc.getPresentLabel();
         if (presentLabel != null) {
             List<String> words = Lists.newArrayList("神志", "神清", "神不清", "意识清", "意识不清", "昏迷","精神","意识");
+            /*
             String presentLabelText = presentLabel.getText();
             if (StringUtil.isNotBlank(presentLabelText)) {
                 for (String word : words) {
@@ -41,6 +42,8 @@ public class BEH0444 extends QCCatalogue {
                     }
                 }
             }
+
+             */
             List<GeneralDesc> generals = presentLabel.getGenerals();
             List<General> gens = presentLabel.getGens();
             if (ListUtil.isEmpty(generals) && ListUtil.isEmpty(gens)) {
@@ -49,18 +52,22 @@ public class BEH0444 extends QCCatalogue {
             }
             if (ListUtil.isNotEmpty(generals)) {
                 for (GeneralDesc general : generals) {
-                    if (general.getName().contains("精神") || general.getName().contains("神志")) {
-                        status.set("0");
-                        break;
+                    for (String word : words) {
+                        if (general.getName().contains(word)){
+                            status.set("0");
+                            return;
+                        }
                     }
                 }
             }
 
             if (ListUtil.isNotEmpty(gens)) {
                 for (General general : gens) {
-                    if (general.getName().contains("精神") || general.getName().contains("神志")) {
-                        status.set("0");
-                        break;
+                    for (String word : words) {
+                        if (general.getName().contains(word)){
+                            status.set("0");
+                            return;
+                        }
                     }
                 }
             }

+ 4 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0492.java

@@ -5,6 +5,7 @@ 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.label.LisLabel;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -28,6 +29,9 @@ public class BEH0492 extends QCCatalogue {
             if (lisLabel != null && CatalogueUtil.isEmpty(lisLabel.getText())) {
                 status.set("-1");
             }
+            if (StringUtil.isBlank(inputInfo.getBeHospitalizedDoc().getStructureMap().get("实验室检查"))){
+                status.set("-1");/* 台州市里医院结构化判断 */
+            }
         }
     }
 }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0299.java

@@ -28,7 +28,7 @@ public class CLI0299 extends QCCatalogue {
             st:
             for (DoctorAdviceDoc doc:doctorAdviceDocs) {
                 Map<String, String> structureMap = doc.getStructureMap();
-                if(structureMap.get("医嘱项目名称").contains("输血") && structureMap.get("医嘱处方类型").contains("治疗")){
+                if(structureMap.get("医嘱项目名称").contains("输血")){
                     if(ListUtil.isEmpty(clinicalBloodDocs)){
                         status.set("-1");
                         break st;

+ 12 - 9
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0307.java

@@ -22,24 +22,27 @@ public class CLI0307 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
 
         List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
-        if(ListUtil.isEmpty(clinicalBloodDocs)){
+        if (ListUtil.isEmpty(clinicalBloodDocs)) {
             status.set("0");
             return;
         }
-        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
-            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+        if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
+            int matchSum = 0;
+            for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
                 Map<String, String> cliBStructureMap = cliB.getStructureMap();
                 //台州
-                if(StringUtils.isNotEmpty(cliBStructureMap.get("输血计划"))){
-                    status.set("0");
-                    break;
+                if (StringUtils.isNotEmpty(cliBStructureMap.get("输血计划"))) {
+                    matchSum++;
+                    continue;
                 }
 
-                if(StringUtils.isNotEmpty(cliBStructureMap.get("输注种类、血型、数量"))){
-                    status.set("0");
-                    break;
+                if (StringUtils.isNotEmpty(cliBStructureMap.get("输注种类、血型、数量"))) {
+                    matchSum++;
                 }
             }
+            if (matchSum == clinicalBloodDocs.size()) {
+                status.set("0");
+            }
         }
 
     }

+ 8 - 8
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0308.java

@@ -35,16 +35,16 @@ public class CLI0308 extends QCCatalogue {
                     status.set("0");
                     break;
                 }
+
                 String infusion_process = cliBStructureMap.get("输注过程");
-                if (StringUtils.isEmpty(infusion_process)) {
-                    status.set("0");
-                    continue;
-                }
-                if (infusion_process.matches(regex) || infusion_process.contains("无") || infusion_process.contains("未见")) {
-                    status.set("0");
-                } else {
-                    status.set("-1");
+                if (StringUtils.isNotEmpty(infusion_process)) {
+                    if (infusion_process.matches(regex) || infusion_process.contains("无") || infusion_process.contains("未见")) {
+                        status.set("0");
+                    } else {
+                        status.set("-1");
+                    }
                 }
+
             }
         } else {
             status.set("0");

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0309.java

@@ -22,7 +22,7 @@ public class CLI0309 extends QCCatalogue {
         status.set("0");
         List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();//输血记录
         List<ClinicBloodEffectDoc> clinicBloodEffectDocs = inputInfo.getClinicBloodEffectDocs();//输血效果评价
-        if (ListUtil.isEmpty(clinicalBloodDocs) || ListUtil.isEmpty(clinicBloodEffectDocs)) {
+        if (ListUtil.isEmpty(clinicalBloodDocs)) {
             return;
         }
         if (clinicalBloodDocs.size() < clinicBloodEffectDocs.size()) {

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0569.java

@@ -52,7 +52,7 @@ public class CLI0569 extends QCCatalogue {
                 }
             }
             if (matchSum != clinicalBloodDocs.size()) {
-                status.set("0");
+                status.set("-1");
             }
         }
 

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0534.java

@@ -32,7 +32,7 @@ public class CON0534 extends QCCatalogue {
             }
             Map<String, String> consultationResultStructureMap = consultationApplicationDoc.getStructureMap();
             String consultationDateStr = consultationResultStructureMap.get("会诊科室");
-            if (CatalogueUtil.isEmpty(consultationDateStr)) {
+            if (CatalogueUtil.isEmpty(consultationDateStr) || "【会诊科室】".equals(consultationDateStr)) {
                 status.set("-1");
                 return;
             }

+ 14 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0383.java

@@ -24,11 +24,23 @@ public class CRI0383 extends QCCatalogue {
         List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
         if (ListUtil.isNotEmpty(crisisValueReportDocs)) {
             crisisValueReportDocs.forEach(crisisValueReportDoc -> {
-                if (StringUtil.isBlank(crisisValueReportDoc.getStructureMap().get("报告时间"))) {
-                    status.set("-1");
+                if (StringUtil.isNotBlank(crisisValueReportDoc.getStructureMap().get("内容"))) {
+                    /* 台州相应数据需从危急值内容中截取 */
+                    String reportDate = getReportDate(crisisValueReportDoc.getStructureMap().get("内容"));
+                    if (StringUtil.isBlank(reportDate)) {
+                        status.set("-1");
+                    }
                 }
             });
         }
     }
 
+    private String getReportDate(String str) {
+        String reportDate = "";
+        if (StringUtil.isNotBlank(str) && str.contains("于{") && str.contains("}接到")) {
+            reportDate = str.substring(str.indexOf("于{") + 2, str.indexOf("}接到"));
+        }
+        return reportDate;
+    }
+
 }

+ 13 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0384.java

@@ -24,11 +24,22 @@ public class CRI0384 extends QCCatalogue {
         List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
         if (ListUtil.isNotEmpty(crisisValueReportDocs)) {
             crisisValueReportDocs.forEach(crisisValueReportDoc -> {
-                if (StringUtil.isBlank(crisisValueReportDoc.getStructureMap().get("危急值记录内容"))) {
-                    status.set("-1");
+                if (StringUtil.isNotBlank(crisisValueReportDoc.getStructureMap().get("内容"))) {
+                    /* 台州相应数据需从危急值内容中截取 */
+                    String report = getReport(crisisValueReportDoc.getStructureMap().get("内容"));
+                    if (StringUtil.isBlank(report)) {
+                        status.set("-1");
+                    }
                 }
             });
         }
     }
 
+    private String getReport(String str) {
+        String reportDate = "";
+        if (StringUtil.isNotBlank(str) && str.contains("危急值报告:{") && str.contains("}。立即查看")) {
+            reportDate = str.substring(str.indexOf("危急值报告:{") + 7, str.indexOf("}。立即查看"));
+        }
+        return reportDate;
+    }
 }

+ 14 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0386.java

@@ -24,11 +24,23 @@ public class CRI0386 extends QCCatalogue {
         List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
         if (ListUtil.isNotEmpty(crisisValueReportDocs)) {
             crisisValueReportDocs.forEach(crisisValueReportDoc -> {
-                if (StringUtil.isBlank(crisisValueReportDoc.getStructureMap().get("病情分析及处理"))) {
-                    status.set("-1");
+                if (StringUtil.isNotBlank(crisisValueReportDoc.getStructureMap().get("内容"))) {
+                    /* 台州相应数据需从危急值内容中截取 */
+                    String report = getReport(crisisValueReportDoc.getStructureMap().get("内容"));
+                    if (StringUtil.isBlank(report)) {
+                        status.set("-1");
+                    }
                 }
             });
         }
     }
 
+    private String getReport(String str) {
+        String reportDate = "";
+        if (StringUtil.isNotBlank(str) && str.contains("给予{") && str.contains("},密切")) {
+            reportDate = str.substring(str.indexOf("给予{") + 3, str.indexOf("},密切"));
+        }
+        return reportDate;
+    }
+
 }

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

@@ -1,44 +1,50 @@
-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");
-            }
-        }
-    }
+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 com.lantone.qc.pub.util.StringUtil;
+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.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getChiefLabel() != null) {
+            Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
+            String deathCaseDiscussChief = deathCaseDiscussStructureMap.get("主诉");
+            if (StringUtil.isNotBlank(deathCaseDiscussChief)) {
+                return;
+            }
+
+            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");
+            }
+        }
+    }
 }

+ 9 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0114.java

@@ -4,6 +4,7 @@ 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.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -20,11 +21,16 @@ public class DEAC0114 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getDeathCaseDiscussDoc() != null && inputInfo.getDeathCaseDiscussDoc().getStructureMap() != null) {
             Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
+            String deathCause = deathCaseDiscussStructureMap.get("死亡原因");
+            boolean findDeathCause = false;
+            if (StringUtil.isNotBlank(deathCause)) {
+                findDeathCause = true;
+            }
             String discussionContent = deathCaseDiscussStructureMap.get("讨论内容");
-            if (CatalogueUtil.isEmpty(discussionContent)) {
-                return;
+            if (StringUtil.isNotEmpty(discussionContent) && discussionContent.contains("因")) {
+                findDeathCause = true;
             }
-            if (!discussionContent.contains("因")) {
+            if (!findDeathCause) {
                 status.set("-1");
             }
         }

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0115.java

@@ -20,7 +20,8 @@ public class DEAC0115 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getDeathCaseDiscussDoc() != null && inputInfo.getDeathCaseDiscussDoc().getStructureMap() != null) {
             Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
-            if (CatalogueUtil.isEmpty(deathCaseDiscussStructureMap.get("记录医师"))) {
+            String sign = deathCaseDiscussStructureMap.get("记录医师");
+            if (CatalogueUtil.isEmpty(sign)) {
                 status.set("-1");
             }
         }

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0556.java

@@ -12,13 +12,13 @@ import java.util.Date;
 import java.util.Map;
 
 /**
- * @ClassName : DEAR0556
+ * @ClassName : DEAC0556
  * @Description :  死亡病例讨论参加人员姓名及职称未填写
  * @Author :kwz
  * @Date: 2020-03-18 18:38
  */
 @Component
-public class DEAR0556 extends QCCatalogue {
+public class DEAC0556 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null) {

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0557.java

@@ -9,13 +9,13 @@ import org.springframework.stereotype.Component;
 import java.util.Map;
 
 /**
- * @ClassName : DEAR0557
+ * @ClassName : DEAC0557
  * @Description :  死亡病例讨论无具体讨论意见
  * @Author :kwz
  * @Date: 2020-03-18 18:38
  */
 @Component
-public class DEAR0557 extends QCCatalogue {
+public class DEAC0557 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null) {

+ 5 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0558.java

@@ -9,18 +9,18 @@ import org.springframework.stereotype.Component;
 import java.util.Map;
 
 /**
- * @ClassName : DEAR0558
+ * @ClassName : DEAC0558
  * @Description :  死亡病例讨论无主持人小结意见
  * @Author :kwz
  * @Date: 2020-03-18 18:38
  */
 @Component
-public class DEAR0558 extends QCCatalogue {
+public class DEAC0558 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null) {
-            Map<String, String> deathRecordStructureMap = inputInfo.getDeathRecordDoc().getStructureMap();
-            String deathTime = deathRecordStructureMap.get("结论");
+        if (inputInfo.getDeathCaseDiscussDoc() != null) {
+            Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
+            String deathTime = deathCaseDiscussStructureMap.get("结论");
             if (CatalogueUtil.isEmpty(deathTime)) {
                 status.set("-1");
             }

+ 6 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathrecord/DEAR0339.java

@@ -4,6 +4,7 @@ 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.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -21,9 +22,13 @@ public class DEAR0339 extends QCCatalogue {
         if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null
                 && inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getChiefLabel() != null) {
             Map<String, String> deathRecordStructureMap = inputInfo.getDeathRecordDoc().getStructureMap();
+            String deathChief = deathRecordStructureMap.get("主诉");
+            if (StringUtil.isNotBlank(deathChief)) {
+                return;
+            }
             String chiefText = inputInfo.getBeHospitalizedDoc().getChiefLabel().getText();
             String admissionStatus = deathRecordStructureMap.get("入院情况");
-            if (CatalogueUtil.isEmpty(admissionStatus) || CatalogueUtil.isEmpty(chiefText)) {
+            if (admissionStatus == null || CatalogueUtil.isEmpty(chiefText)) {
                 return;
             }
             chiefText = CatalogueUtil.removeSpecialChar(chiefText).replace("。", "");

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0598.java

@@ -40,7 +40,7 @@ public class DUT0598 extends QCCatalogue {
             }
             Date rollOutRecordDate = StringUtil.parseDateTime(rollInRecordDateStr);
             Date recordDate = StringUtil.parseDateTime(recordDateStr);
-            if (rollOutRecordDate != null && recordDate != null && !rollOutRecordDate.before(recordDate)) {
+            if (rollOutRecordDate != null && recordDate != null && rollOutRecordDate.before(recordDate)) {
                 boolean compareTime = CatalogueUtil.compareTime(rollOutRecordDate, recordDate, (long) 24 * 60);
                 if (compareTime) {
                     status.set("-1");

+ 23 - 14
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0084.java

@@ -1,10 +1,12 @@
 package com.lantone.qc.kernel.catalogue.firstcourserecord;
 
+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.doc.FirstCourseRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -21,41 +23,48 @@ public class FIRC0084 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> courseRecordDocStructureMap = firstCourseRecordDoc.getStructureMap();
-            if(courseRecordDocStructureMap != null){
+            if (courseRecordDocStructureMap != null) {
                 String identify_diag = courseRecordDocStructureMap.get("鉴别诊断");
                 String characteristic = courseRecordDocStructureMap.get("病例特点");
                 String initDiags = courseRecordDocStructureMap.get("初步诊断");
                 String condition = courseRecordDocStructureMap.get("诊断依据");
                 String pacs = courseRecordDocStructureMap.get("辅助检查");
+                if (StringUtil.isBlank(pacs)){
+                    pacs = getPacs(courseRecordDocStructureMap);
+                }
                 String tretment_plan = courseRecordDocStructureMap.get("诊疗计划");
-                if(StringUtils.isNotEmpty(tretment_plan)){
-                    if(CatalogueUtil.removeSpecialChar(tretment_plan).contains("同上")){
+                if (StringUtils.isNotEmpty(tretment_plan)) {
+                    if (CatalogueUtil.removeSpecialChar(tretment_plan).contains("同上")) {
                         status.set("-1");
                     }
-                }else if(StringUtils.isNotEmpty(identify_diag)){
-                    if(CatalogueUtil.removeSpecialChar(identify_diag).contains("同上")){
+                } else if (StringUtils.isNotEmpty(identify_diag)) {
+                    if (CatalogueUtil.removeSpecialChar(identify_diag).contains("同上")) {
                         status.set("-1");
                     }
-                }else if(StringUtils.isNotEmpty(characteristic)){
-                    if(CatalogueUtil.removeSpecialChar(characteristic).contains("同上")){
+                } else if (StringUtils.isNotEmpty(characteristic)) {
+                    if (CatalogueUtil.removeSpecialChar(characteristic).contains("同上")) {
                         status.set("-1");
                     }
-                }else if(StringUtils.isNotEmpty(initDiags)){
-                    if(CatalogueUtil.removeSpecialChar(initDiags).contains("同上")){
+                } else if (StringUtils.isNotEmpty(initDiags)) {
+                    if (CatalogueUtil.removeSpecialChar(initDiags).contains("同上")) {
                         status.set("-1");
                     }
-                }else if(StringUtils.isNotEmpty(condition)){
-                    if(CatalogueUtil.removeSpecialChar(condition).contains("同上")){
+                } else if (StringUtils.isNotEmpty(condition)) {
+                    if (CatalogueUtil.removeSpecialChar(condition).contains("同上")) {
                         status.set("-1");
                     }
-                }else if(StringUtils.isNotEmpty(pacs)){
-                    if(CatalogueUtil.removeSpecialChar(pacs).contains("同上")){
+                } else if (StringUtils.isNotEmpty(pacs)) {
+                    if (CatalogueUtil.removeSpecialChar(pacs).contains("同上")) {
                         status.set("-1");
                     }
                 }
             }
         }
     }
+
+    private String getPacs(Map<String, String> courseRecordDocStructureMap) {
+        return CatalogueUtil.structureMapJoin(courseRecordDocStructureMap, Lists.newArrayList("实验室检查", "影像学检查"));
+    }
 }

+ 59 - 21
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0095.java

@@ -13,13 +13,11 @@ import com.lantone.qc.pub.model.label.DiagLabel;
 import com.lantone.qc.pub.model.label.PastLabel;
 import com.lantone.qc.pub.model.label.PresentLabel;
 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.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @ClassName : FIRC0095
@@ -33,13 +31,16 @@ public class FIRC0095 extends QCCatalogue {
     @Autowired
     ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
 
+    private List<String> containList = Arrays.asList("脑萎缩", "慢性", "纤颤", "高血压", "糖尿", "冠状", "冠心病", "支架", "起搏器", "房颤", "风湿");
+    private List<String> filterList = Arrays.asList("心脏病", "低血糖", "急性", ";");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         if (inputInfo.getFirstCourseRecordDoc() == null) {
             status.set("0");
             return;
         }
         PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
-        DiagLabel initialDiagLabel = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel();
+        DiagLabel initialDiagLabel = inputInfo.getFirstCourseRecordDoc().getInitialDiagLabel();
         PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
         if (initialDiagLabel == null) {
             status.set("0");
@@ -61,14 +62,8 @@ public class FIRC0095 extends QCCatalogue {
                         }
                         /* 现病史中一般情况之后的疾病名称 */
                         if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
-                            if (presentDiag.getHospitalDiagName().contains("心")
-                                    || presentDiag.getHospitalDiagName().contains("脑萎缩")
-                                    || presentDiag.getHospitalDiagName().contains("慢性")
-                                    || presentDiag.getHospitalDiagName().contains("血糖")) {
-                                if (!presentDiag.getHospitalDiagName().contains("心脏病")
-                                        && !presentDiag.getHospitalDiagName().contains("低血糖")) {
-                                    presentPastDiags.add(presentDiag.getHospitalDiagName());
-                                }
+                            if (isContains(presentDiag.getHospitalDiagName()) && !isFilter(presentDiag.getHospitalDiagName())) {
+                                presentPastDiags.add(presentDiag.getHospitalDiagName());
                             }
                         }
                     }
@@ -79,6 +74,28 @@ public class FIRC0095 extends QCCatalogue {
         if (pastLabel != null) {
             List<Diag> pastDiags = pastLabel.getDiags();
             addDiagHospitalName(presentPastDiags, pastDiags);
+        } else {            //结构化数据
+            List<Diag> pastDiags = new ArrayList<>();
+            Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            String a1 = structureMap.get("高血压");
+            if (StringUtils.isNotEmpty(a1) && !"否认".equals(a1)) {
+                Diag diag = new Diag();
+                diag.setName("高血压");
+                diag.setHospitalDiagName("高血压");
+                if (!isHave(presentPastDiags, "高血压")) {
+                    pastDiags.add(diag);
+                }
+            }
+            a1 = structureMap.get("糖尿病");
+            if  (StringUtils.isNotEmpty(a1) && !"否认".equals(a1)) {
+                Diag diag = new Diag();
+                diag.setName("糖尿病");
+                diag.setHospitalDiagName("糖尿病");
+                if (!isHave(presentPastDiags, "糖尿病")) {
+                    pastDiags.add(diag);
+                }
+            }
+            addDiagHospitalName(presentPastDiags, pastDiags);
         }
         /* 取初步诊断中疾病名称 */
         List<String> initDiags = new ArrayList<>();
@@ -121,14 +138,8 @@ public class FIRC0095 extends QCCatalogue {
             if (pastDiag.getNegative() != null) {
                 continue;
             }
-            if (pastDiag.getHospitalDiagName().contains("心")
-                    || pastDiag.getHospitalDiagName().contains("脑萎缩")
-                    || pastDiag.getHospitalDiagName().contains("慢性")
-                    || pastDiag.getHospitalDiagName().contains("血糖")) {
-                if (!pastDiag.getHospitalDiagName().contains("心脏病")
-                        && !pastDiag.getHospitalDiagName().contains("低血糖")) {
-                    presentPastDiag.add(pastDiag.getHospitalDiagName());
-                }
+            if (isContains(pastDiag.getHospitalDiagName()) && !isFilter(pastDiag.getHospitalDiagName())) {
+                presentPastDiag.add(pastDiag.getHospitalDiagName());
             }
         }
     }
@@ -141,4 +152,31 @@ public class FIRC0095 extends QCCatalogue {
             presentPastDiag.add(pastDiag.getHospitalDiagName());
         }
     }
+
+    private boolean isHave(Set<String> presentDiag, String diagName) {
+        for (String haveDiag : presentDiag) {
+            if (haveDiag.contains(diagName) || diagName.contains(haveDiag)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean isContains(String diagName) {
+        for (String c : containList) {
+            if (diagName.contains(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean isFilter(String diagName) {
+        for (String c : filterList) {
+            if (diagName.contains(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
 }

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

@@ -28,7 +28,7 @@ public class FIRC02970 extends QCCatalogue {
             return;
         }
         Map<String, String> firstCourseRecordStructureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();
-        List<String> keys = Lists.newArrayList("需求评估", "预期目标", "诊疗计划", "治疗监测计划");
+        List<String> keys = Lists.newArrayList("需求评估", "预期目标", "诊疗计划", "治疗监测计划", "治疗计划", "检查计划");
         String text = structureMapJoin(firstCourseRecordStructureMap, keys);
         if (StringUtil.isNotBlank(text) && text.contains("生命体征") && !text.contains("血压") && !text.contains("心率") && !text.contains("心电监护")) {
             status.set("-1");

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0497.java

@@ -23,7 +23,7 @@ public class FIRC0497 extends QCCatalogue {
         if(firstCourseRecordDoc != null){
             Map<String, String> firstRecordMap = firstCourseRecordDoc.getStructureMap();
             if(firstRecordMap != null){
-                String morbidity_after = firstRecordMap.get("发病经过");
+                String morbidity_after = firstRecordMap.get("现病史");/* 台州将发病经过映射成现病史,以便于首程现病史相似度方便取值 */
                 if(morbidity_after != null){
                     if(CatalogueUtil.isEmpty(morbidity_after)){
                         status.set("-1");

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

@@ -40,7 +40,7 @@ public class FIRC0500 extends QCCatalogue {
 
         if (StringUtil.isNotBlank(firstCourseChief)) {
             firstCourseChief = firstCourseChief.replaceAll("[\\p{Punct}\\pP。]", "");
-            if (firstCourseChief.equals(chief_text)) { //首程主诉.equals(入院记录主诉)
+            if (firstCourseChief.contains(chief_text) || chief_text.contains(firstCourseChief)) { //首程主诉.equals(入院记录主诉)
                 status.set("0");
                 return;
             }

+ 3 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0170.java

@@ -19,15 +19,15 @@ import java.util.Map;
 @Component
 public class FIRP0170 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() == null){
-            status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String transferDept = firstpageStructureMap.get(Content.transferDept);
-            if (!StringUtils.isEmpty(transferDept)){
-                status.set("0");
+            if (StringUtils.isEmpty(transferDept) || "【转科科室】".equals(transferDept)){
+                status.set("-1");
             }
         }
     }

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

@@ -11,7 +11,7 @@ import java.util.Map;
 
 /**
  * @ClassName : FIRP0204
- * @Description : 籍贯没有填写
+ * @Description : 籍贯填写
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28ss
  */

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

@@ -11,7 +11,7 @@ import java.util.Map;
 
 /**
  * @ClassName : FIRP0205
- * @Description : 民族没有填写
+ * @Description : 民族填写
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28ss
  */

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

@@ -11,7 +11,7 @@ import java.util.Map;
 
 /**
  * @ClassName : FIRP0206
- * @Description : 职业没有填写
+ * @Description : 职业填写
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28ss
  */

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

@@ -11,7 +11,7 @@ import java.util.Map;
 
 /**
  * @ClassName : FIRP0212
- * @Description : 先地址邮编未填写
+ * @Description : 现住址邮编未填写
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28ss
  */

+ 9 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0226.java

@@ -1,12 +1,12 @@
 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 org.springframework.stereotype.Component;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -19,13 +19,15 @@ import java.util.Map;
 public class FIRP0226 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
-            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            String qc_date = firstpageStructureMap.get(Content.dischargeDiag);
-            if(CatalogueUtil.isEmpty(qc_date)){
-                status.set("-1");
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureExtMap() != null) {
+            Map<String, Object> structureExtMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+            Object dischargeDiagObj = structureExtMap.get(Content.dischargeDiag);
+            if (dischargeDiagObj != null) {
+                List<Map<String, String>> dischargeDiagList = (List) dischargeDiagObj;
+                if (dischargeDiagList.size() == 0) {
+                    status.set("-1");
+                }
             }
-
         }
     }
 }

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

@@ -23,7 +23,8 @@ public class FIRP0242 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String outDept = firstpageStructureMap.get(Content.outDept);
-            if(CatalogueUtil.isEmpty(outDept)){
+            /* 台州运行质控病案首页出院科室未填时默认为【出院科室】,希望之后his能直接处理掉默认值设为空 */
+            if(CatalogueUtil.isEmpty(outDept) || "【出院科室】".equals(outDept)){
                 status.set("-1");
             }
 

+ 22 - 20
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0248.java

@@ -5,10 +5,9 @@ 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.model.doc.RescueDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -23,35 +22,38 @@ import java.util.regex.Pattern;
 public class FIRP0248 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+        if (inputInfo.getFirstPageRecordDoc() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            int rescueNum = inputInfo.getRescueDocs().size();
+            boolean match = false;
+
+            String fpRescueNumStr = firstpageStructureMap.get("病人抢救次数");
+            if (StringUtil.isNotBlank(fpRescueNumStr) && CatalogueUtil.numbersOnly(fpRescueNumStr)) {
+                int fpRescueNum = Integer.parseInt(fpRescueNumStr);
+                if (fpRescueNum == rescueNum) {
+                    match = true;
+                }
+            }
             String name = firstpageStructureMap.get(Content.rescue_condition);
-            if (!CatalogueUtil.isEmpty(name)){
+            if (!CatalogueUtil.isEmpty(name)) {
                 String[] split = name.split("\\s+");
                 Pattern compile = Pattern.compile("(?<=抢救).*(?=次)");
                 Matcher matcher = compile.matcher(split[0]);
-                while (matcher.find()){
-                    try{
+                while (matcher.find()) {
+                    try {
                         String number = matcher.group(0);
-                        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
-                        if(rescueDocs != null && rescueDocs.size()>0){
-                            int size = rescueDocs.size();
-                            try{
-                                int num = Integer.parseInt(number);
-                                if(num != size){
-                                    status.set("-1");
-                                }
-                            }catch (Exception e){
-                                e.printStackTrace();
-                            }
-
+                        int num = Integer.parseInt(number);
+                        if (num == rescueNum) {
+                            match = true;
                         }
-                    }catch (Exception e){
+                    } catch (Exception e) {
                         e.printStackTrace();
                     }
                 }
+            }
 
-
+            if (!match) {
+                status.set("-1");
             }
         }
     }

+ 35 - 26
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0250.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.RescueDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -23,45 +24,53 @@ import java.util.regex.Pattern;
 public class FIRP0250 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getRescueDocs().size() > 0) {
+            List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+            int rescueNum = getRescueNum(rescueDocs);/* 抢救记录中抢救成功次数 */
+            boolean match = false;
+
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String successfulRescueTimes = firstpageStructureMap.get("病人抢救成功次数");
+            int successfulRescueTimesTZ = 0;
+            if (StringUtil.isNotBlank(successfulRescueTimes) && CatalogueUtil.numbersOnly(successfulRescueTimes)) {
+                successfulRescueTimesTZ = Integer.parseInt(successfulRescueTimes);
+            }
+            if (rescueNum == successfulRescueTimesTZ) {
+                match = true;
+            }
             String name = firstpageStructureMap.get(Content.rescue_condition);
-            if (!CatalogueUtil.isEmpty(name)){
+            if (StringUtil.isNotBlank(name)) {
                 String[] split = name.split("\\s+");
                 Pattern compile = Pattern.compile("(?<=成功).*(?=次)");
                 Matcher matcher = compile.matcher(split[0]);
-                while (matcher.find()){
-                    try{
+                while (matcher.find()) {
+                    try {
                         String number = matcher.group(0);
-                        int i = 0;
-                        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
-                        if(rescueDocs != null && rescueDocs.size()>0){
-                            for (RescueDoc re:rescueDocs
-                                 ) {
-                                Map<String, String> structureMap = re.getStructureMap();
-                                String qjgc = structureMap.get("抢救过程");
-                                if(!qjgc.contains("死亡")){
-                                    i++;
-                                }
-                            }
-
-                            try{
-                                int num = Integer.parseInt(number);
-                                if(num != i){
-                                    status.set("-1");
-                                }
-                            }catch (Exception e){
-                                e.printStackTrace();
-                            }
-
+                        int num = Integer.parseInt(number);
+                        if (num == rescueNum) {
+                            match = true;
                         }
-                    }catch (Exception e){
+                    } catch (Exception e) {
                         e.printStackTrace();
                     }
                 }
+            }
 
+            if (!match){
+                status.set("-1");
+            }
+        }
+    }
 
+    private int getRescueNum(List<RescueDoc> rescueDocs) {
+        int i = 0;
+        for (RescueDoc re : rescueDocs) {
+            Map<String, String> structureMap = re.getStructureMap();
+            String qjgc = structureMap.get("抢救过程");
+            if (!qjgc.contains("死亡")) {
+                i++;
             }
         }
+        return i;
     }
 }

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

@@ -25,7 +25,8 @@ public class FIRP0251 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String name = firstpageStructureMap.get(Content.single_disease_management);
-            if (!CatalogueUtil.isEmpty(name)){
+            /* 台州运行质控病案首页未填时有默认值,希望之后his能直接处理掉默认值,设为空 */
+            if (!CatalogueUtil.isEmpty(name) && !"【】".equals(name)){
                 status.set("0");
             }
         }

+ 4 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0253.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;
@@ -18,14 +18,15 @@ import java.util.Map;
 @Component
 public class FIRP0253 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if (inputInfo.getFirstPageRecordDoc() == null){
+        if (inputInfo.getFirstPageRecordDoc() == null) {
             status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String name = firstpageStructureMap.get(Content.clinical_pathway_management);
-            if (!CatalogueUtil.isEmpty(name)){
+            /* 台州运行质控病案首页未填时有默认值,希望之后his能直接处理掉默认值,设为空 */
+            if (StringUtil.isNotBlank(name) && !"【】".equals(name)) {
                 status.set("0");
             }
         }

+ 4 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0260.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;
@@ -21,7 +21,9 @@ public class FIRP0260 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            if (CatalogueUtil.isEmpty(firstpageStructureMap.get(Content.i_o))){
+            String iO = firstpageStructureMap.get(Content.i_o);
+            /* 台州运行质控病案首页未填时有默认值,希望之后his能直接处理掉默认值,设为空 */
+            if (StringUtil.isBlank(iO) || "【】".equals(iO)) {
                 status.set("-1");
             }
         }

+ 4 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0262.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;
@@ -21,7 +21,9 @@ public class FIRP0262 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            if (CatalogueUtil.isEmpty(firstpageStructureMap.get(Content.ob_oa))){
+            String obOa = firstpageStructureMap.get(Content.ob_oa);
+            /* 台州运行质控病案首页未填时有默认值,希望之后his能直接处理掉默认值,设为空 */
+            if (StringUtil.isBlank(obOa) || "【】".equals(obOa)) {
                 status.set("-1");
             }
         }

+ 4 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0264.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;
@@ -21,7 +21,9 @@ public class FIRP0264 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            if (CatalogueUtil.isEmpty(firstpageStructureMap.get(Content.clinical_pathology))){
+            String clinicalPathology = firstpageStructureMap.get(Content.clinical_pathology);
+            /* 台州运行质控病案首页未填时有默认值,希望之后his能直接处理掉默认值,设为空 */
+            if (StringUtil.isBlank(clinicalPathology) || "【】".equals(clinicalPathology)) {
                 status.set("-1");
             }
         }

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

@@ -5,6 +5,7 @@ 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;
@@ -21,7 +22,9 @@ public class FIRP0266 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            if (CatalogueUtil.isEmpty(firstpageStructureMap.get(Content.radiation_pathology))){
+            String radiationPathology = firstpageStructureMap.get(Content.radiation_pathology);
+            /* 台州运行质控病案首页未填时有默认值,希望之后his能直接处理掉默认值,设为空 */
+            if (StringUtil.isBlank(radiationPathology) || "【】".equals(radiationPathology)) {
                 status.set("-1");
             }
         }

+ 9 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02885.java

@@ -23,10 +23,15 @@ public class FIRP02885 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String zipcode = firstpageStructureMap.get(Content.household_address_zipcode);
-            if (StringUtil.isNotBlank(zipcode) && CatalogueUtil.numbersOnly(zipcode)) {
-                String regex = "^\\d{6}$";
-                if (!zipcode.matches(regex)) {
-                    status.set("-1");
+            if (StringUtil.isNotBlank(zipcode)) {
+                if ("-".equals(zipcode)) {
+                    return;
+                }
+                if (CatalogueUtil.numbersOnly(zipcode)) {
+                    String regex = "^\\d{6}$";
+                    if (!zipcode.matches(regex)) {
+                        status.set("-1");
+                    }
                 }
             }
         }

+ 9 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02886.java

@@ -23,10 +23,15 @@ public class FIRP02886 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String zipcode = firstpageStructureMap.get(Content.work_unit_zipcode);
-            if (StringUtil.isNotBlank(zipcode) && CatalogueUtil.numbersOnly(zipcode)) {
-                String regex = "^\\d{6}$";
-                if (!zipcode.matches(regex)) {
-                    status.set("-1");
+            if (StringUtil.isNotBlank(zipcode)) {
+                if ("-".equals(zipcode)) {
+                    return;
+                }
+                if (CatalogueUtil.numbersOnly(zipcode)) {
+                    String regex = "^\\d{6}$";
+                    if (!zipcode.matches(regex)) {
+                        status.set("-1");
+                    }
                 }
             }
         }

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

@@ -24,7 +24,7 @@ public class LEA0150 extends QCCatalogue {
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
-        if (deathRecordDoc == null || deathRecordDoc.getText() != null) {
+        if (deathRecordDoc != null) {
             status.set("0");
         } else {
             String message = leaveHospitalDoc.getStructureMap().get("入院情况");

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

@@ -24,11 +24,11 @@ public class LEA0151 extends QCCatalogue {
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
-        if (deathRecordDoc == null || deathRecordDoc.getText() != null) {
+        if (deathRecordDoc != null) {
             status.set("0");
         } else {
-            String text = leaveHospitalDoc.getBeHospitalizedLabel().getText();
-            if (!StringUtils.isBlank(text)) {
+            String message = leaveHospitalDoc.getStructureMap().get("入院诊断");
+            if (!StringUtils.isBlank(message)) {
                 status.set("0");
             }
         }

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

@@ -24,7 +24,7 @@ public class LEA0152 extends QCCatalogue {
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
-        if (deathRecordDoc == null || deathRecordDoc.getText() != null) {
+        if (deathRecordDoc != null) {
             status.set("0");
         } else {
             String message = leaveHospitalDoc.getStructureMap().get("诊治经过");

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

@@ -23,7 +23,7 @@ public class LEA0153 extends QCCatalogue {
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
-        if (deathRecordDoc == null || deathRecordDoc.getText() != null) {
+        if (deathRecordDoc != null) {
             status.set("0");
         } else {
             String message = leaveHospitalDoc.getStructureMap().get("出院情况");

+ 16 - 12
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0154.java

@@ -6,13 +6,14 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.DeathRecordDoc;
 import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
 import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
 
 /**
- * @Description: 出院记录内容缺出院(死亡)诊断
+ * @Description: 出院记录内容缺出院(死亡)诊断 出院记录内容缺出院诊断
  * @author: rengb
  * @time: 2020/3/10 13:53
  */
@@ -21,22 +22,25 @@ public class LEA0154 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
         LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
         if (leaveHospitalDoc == null) {
+            status.set("0");
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
-        if (deathRecordDoc == null || deathRecordDoc.getText() == null) {
-            Map<String, String> structureMap = leaveHospitalDoc.getStructureMap();
-            if(StringUtils.isNotEmpty(structureMap.get("出院诊断"))){
-                return;
-            }
-            DiagLabel leaveDiagLabel = leaveHospitalDoc.getLeaveDiagLabel();
-            if (leaveDiagLabel != null) {
-                if (StringUtils.isBlank(leaveDiagLabel.getText())) {
-                    status.set("-1");
-                }
+        if (deathRecordDoc != null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> structureMap = leaveHospitalDoc.getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("出院诊断"))) {
+            status.set("0");
+            return;
+        }
+        DiagLabel leaveDiagLabel = leaveHospitalDoc.getLeaveDiagLabel();
+        if (leaveDiagLabel != null) {
+            if (StringUtil.isNotBlank(leaveDiagLabel.getText())) {
+                status.set("0");
             }
         }
     }

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

@@ -46,7 +46,7 @@ public class LEA02968 extends QCCatalogue {
             return;
         }
         List<String> keys = Lists.newArrayList("入院诊断", "出院诊断", "入院情况", "诊治经过", "出院情况", "出院医嘱"
-                , "随访计划", "主诉", "专科检查", "健康教育");
+                , "随访计划", "主诉", "专科检查", "健康教育", "辅助检查", "影像学检查", "实验室检查");
         String text = CatalogueUtil.structureMapJoin(structureMap, keys);
 
         for (String noMatchWord : noMatchWords) {

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

@@ -24,7 +24,7 @@ public class LEA0396 extends QCCatalogue {
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
-        if (deathRecordDoc == null || deathRecordDoc.getText() == null) {
+        if (deathRecordDoc != null) {
             status.set("0");
         } else {
             String time = leaveHospitalDoc.getStructureMap().get("出院时间");

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

@@ -36,7 +36,7 @@ public class OPE0323 extends QCCatalogue {
                     long count = operationDocs.stream().filter(operationDoc -> {
                         boolean flag = false;
                         if (operationDoc.getOperationRecordDoc() != null) {
-                            String surgeon = operationDoc.getOperationRecordDoc().getStructureMap().get("手术医师");
+                            String surgeon = operationDoc.getOperationRecordDoc().getStructureMap().get("主刀医师");
                             String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("一助");
                             String signature = operationDoc.getOperationRecordDoc().getStructureMap().get("主刀医师签名");
                             if (StringUtil.isNotBlank(surgeon) && StringUtil.isNotBlank(assist1)) {

+ 52 - 69
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0587.java

@@ -1,102 +1,85 @@
 package com.lantone.qc.kernel.catalogue.operationdiscussion;
 
 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.ThreeLevelWardDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 /**
- * @author wangfeng
- * @Description: 术后没有连续记录3天
- * @date 2020-07-01 10:31
+ * @ClassName : THR0587
+ * @Description : 术后病程录没有连续记录3天
+ * @Author : 胡敬
+ * @Date: 2020-03-30 16:17
  */
 @Component
 public class OPE0587 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
-        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
         if (ListUtil.isEmpty(operationDocs) || ListUtil.isEmpty(threeLevelWardDocs)) {
             return;
         }
-        if (inputInfo.getMedicalRecordInfoDoc() == null || inputInfo.getMedicalRecordInfoDoc().getStructureMap().size() == 0) {
-            return;
-        }
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
-        //取出所有查房时间
-        List<String> roundsDate = new ArrayList<>();
-        for (ThreeLevelWardDoc t : threeLevelWardDocs) {
-            Date threeLevelDate = StringUtil.parseDateTime(t.getStructureMap().get("查房日期"));
-            roundsDate.add(formatter.format(threeLevelDate));
-        }
-
-        //取出出院时间
-        Map<String, String> structureMaps = inputInfo.getFirstPageRecordDoc().getStructureMap();
-        String leaveHospitalDate = structureMaps.get("出院时间") == null ? null : structureMaps.get("出院时间");
-        Date leaveDate = StringUtil.parseDateTime(leaveHospitalDate);
-        //没有出院时间, 直接退出
-        if (leaveHospitalDate != null) {
-        //取出病程信息里的手术信息的所有 手术日期
-        List<String> operDateList = new ArrayList<>();
-        for (OperationDoc opera : operationDocs) {
-            OperationRecordDoc operationRecordDoc = opera.getOperationRecordDoc();
-            String operDate = operationRecordDoc.getStructureMap().get("手术日期");
-            if (StringUtil.isNotBlank(operDate)) {
-                operDateList.add(operDate);
+        //所有查房记录的日期天
+        List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+        List<Date> wardRecordDayList = getWardRecordDay(allDoctorWradDocs);
+        String OperationEndDateStr = "";
+        //转入日期后应该有的查房记录的日期天
+        List<Date> rollInDay = null;
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
             }
-        }
-        if (operDateList.size() > 0) {
-            for (String operDates : operDateList) {
-                Date oper = StringUtil.parseDateTime(operDates);
-                //手术时间 减去 出院时间
-                long day = (leaveDate.getTime() - oper.getTime()) / (24 * 60 * 60 * 1000);
-                //时间大于三天才能判断有没有连续三天查房
-                if (day > 3) {
-                    List<String> operDatesNew = new ArrayList<>();
-                    //用手术时间加三天
-                    for (int i = 1; i < 4; i++) {
-                        Date firstTimeOfDay = DateUtil.getFirstTimeOfDay(DateUtil.addDay(oper, i));
-                        operDatesNew.add(formatter.format(firstTimeOfDay));
-                    }
-                    if (roundsDate.size() > 2) {//查房日期取出没有3天时间, 直接报错
-                        //去重
-                        List<String> listTemp = new ArrayList<String>();
-                        for (int i = 0; i < roundsDate.size(); i++) {
-                            if (!listTemp.contains(roundsDate.get(i))) {
-                                listTemp.add(roundsDate.get(i));
-                            }
-                        }
-                        int i = 0;
-                        //循环两个时间List,
-                        for (String str : operDatesNew) {
-                            for (String s : listTemp) {
-                                if (str.equals(s)) {
-                                    i++;
-                                }
-                            }
-                        }
-                        if (i < 3) {
-                            status.set("-1");
-                        }
-                    } else {
-                        status.set("-1");
-                        return;
-                    }
-                }
+            Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
+            OperationEndDateStr = operationRecordStructureMap.get("手术结束时间");
+            if (CatalogueUtil.isEmpty(OperationEndDateStr)) {
+                continue;
+            }
+            Date OperationEndDate = StringUtil.parseDateTime(OperationEndDateStr);
+            rollInDay = new ArrayList<>();
+            for (int i = 1; i <= 3; i++) {
+                Date wardRecordDay = DateUtil.dateZeroClear(DateUtil.addDate(OperationEndDate, i));
+                rollInDay.add(wardRecordDay);
+            }
+            if (!wardRecordDayList.containsAll(rollInDay)) {
+                status.set("-1");
+                return;
             }
         }
     }
+
+    /**
+     * 所有查房记录的日期天
+     *
+     * @param threeLevelWardDocs
+     */
+    private List<Date> getWardRecordDay(List<ThreeLevelWardDoc> threeLevelWardDocs) {
+        List<Date> dateRecordDay = new ArrayList<>();
+        String recordTime = "";
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
+            recordTime = rescueStructureMap.get("查房日期");
+            Date recordDate = StringUtil.parseDateTime(recordTime);
+            if (recordDate == null) {
+                continue;
+            }
+            dateRecordDay.add(DateUtil.dateZeroClear(recordDate));
+        }
+        return dateRecordDay;
     }
-}
+}

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

@@ -33,7 +33,7 @@ public class OPE0636 extends QCCatalogue {
                 long count = operationDocs.stream().filter(operationDoc -> {
                     boolean flag = false;
                     if (operationDoc.getOperationRecordDoc() != null
-                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("手术医师"))) {
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("主治医师"))) {
                         flag = true;
                     }
                     return flag;

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0651.java

@@ -35,7 +35,7 @@ public class OPE0651 extends QCCatalogue {
             }
             Map<String, String> operationDiscussionStructureMap = operationDiscussionDoc.getStructureMap();
             String operationDateStr = operationDiscussionStructureMap.get("手术日期");
-            String dateStr = operationDiscussionStructureMap.get("时间");
+            String dateStr = operationDiscussionStructureMap.get("记录日期");
             if (CatalogueUtil.isEmpty(operationDateStr) || CatalogueUtil.isEmpty(dateStr)) {
                 continue;
             }
@@ -44,7 +44,7 @@ public class OPE0651 extends QCCatalogue {
             if (operationDate == null || date == null) {
                 continue;
             }
-            boolean compareTime = CatalogueUtil.compareTime(operationDate, date, (long) 60);
+            boolean compareTime = CatalogueUtil.compareTime(operationDate, date, 60L);
             if (compareTime) {
                 status.set("-1");
                 return;

+ 0 - 85
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0587.java

@@ -1,85 +0,0 @@
-package com.lantone.qc.kernel.catalogue.threelevelward;
-
-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.ThreeLevelWardDoc;
-import com.lantone.qc.pub.model.doc.operation.OperationDoc;
-import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
-import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
-import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
-import com.lantone.qc.pub.util.DateUtil;
-import com.lantone.qc.pub.util.ListUtil;
-import com.lantone.qc.pub.util.StringUtil;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @ClassName : THR0587
- * @Description : 术后病程录没有连续记录3天
- * @Author : 胡敬
- * @Date: 2020-03-30 16:17
- */
-@Component
-public class THR0587 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
-        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
-        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
-        if (ListUtil.isEmpty(operationDocs) || ListUtil.isEmpty(threeLevelWardDocs)) {
-            return;
-        }
-        //所有查房记录的日期天
-        List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
-        List<Integer> wardRecordDayList = getWardRecordDay(allDoctorWradDocs);
-        String OperationEndDateStr = "";
-        //转入日期后应该有的查房记录的日期天
-        List<Integer> rollInDay = null;
-        for (OperationDoc operationDoc : operationDocs) {
-            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
-            if (operationRecordDoc == null) {
-                continue;
-            }
-            Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
-            OperationEndDateStr = operationRecordStructureMap.get("手术结束时间");
-            if (CatalogueUtil.isEmpty(OperationEndDateStr)) {
-                continue;
-            }
-            Date OperationEndDate = StringUtil.parseDateTime(OperationEndDateStr);
-            rollInDay = new ArrayList<>();
-            for (int i = 1; i <= 3; i++) {
-                int wardRecordDay = DateUtil.getDay(DateUtil.addDate(OperationEndDate, i));
-                rollInDay.add(wardRecordDay);
-            }
-            if (!wardRecordDayList.containsAll(rollInDay)) {
-                status.set("-1");
-                return;
-            }
-        }
-    }
-
-    /**
-     * 所有查房记录的日期天
-     *
-     * @param threeLevelWardDocs
-     */
-    private List<Integer> getWardRecordDay(List<ThreeLevelWardDoc> threeLevelWardDocs) {
-        List<Integer> dateRecordDay = new ArrayList<>();
-        String recordTime = "";
-        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
-            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
-            recordTime = rescueStructureMap.get("查房日期");
-            Date recordDate = StringUtil.parseDateTime(recordTime);
-            if (recordDate == null) {
-                continue;
-            }
-            dateRecordDay.add(DateUtil.getDay(recordDate));
-        }
-        return dateRecordDay;
-    }
-}

+ 15 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0682.java

@@ -21,6 +21,19 @@ import java.util.Map;
 @Component
 public class THR0682 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+        if (ListUtil.isEmpty(rescueDocs)) {
+            return;
+        }
+        for (RescueDoc rescueDoc : rescueDocs) {
+            Map<String, String> rescueStructureMap = rescueDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(rescueStructureMap.get("病情变化"))) {
+                status.set("-1");
+                return;
+            }
+        }
+        /*
         status.set("0");
         List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
         if (ListUtil.isEmpty(rescueDocs)) {
@@ -42,5 +55,7 @@ public class THR0682 extends QCCatalogue {
                 return;
             }
         }
+
+         */
     }
 }

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

@@ -251,7 +251,7 @@ public class ModelAI {
      */
     public JSONArray getChiefPresentSimilarOutputs(JSONArray predY) {
         JSONArray dataArr = new JSONArray();
-        if (predY.size() > 0) {
+        if (predY != null && predY.size() > 0) {
             dataArr = predY.getJSONArray(0);
         }
         return dataArr;

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 25357 - 25357
kernel/src/main/resources/cache/3/concept_diag_properties.dict


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 25357 - 25357
kernel/src/main/resources/cache/3/hospital_diag_info.dict


+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouClinicalBloodDocTrans.java

@@ -44,6 +44,7 @@ public class TaiZhouClinicalBloodDocTrans extends ModelDocTrans {
             "开始时间=输注开始",
             "医生=记录医师",
             "结束时间=输注结束",
+            "病历日期=记录时间",
             "内容=输注后效果评价"
     );
 

+ 3 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCrisisValueReportDocTrans.java

@@ -41,6 +41,8 @@ public class TaiZhouCrisisValueReportDocTrans extends ModelDocTrans {
         return crisisValueReportDoc;
     }
 
-    private List<String> keyContrasts = Lists.newArrayList();
+    private List<String> keyContrasts = Lists.newArrayList(
+            "病历日期=记录时间"
+    );
 
 }

+ 3 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathCaseDiscussDocTrans.java

@@ -41,7 +41,9 @@ public class TaiZhouDeathCaseDiscussDocTrans extends ModelDocTrans {
             "医生=记录医师",
             "本人姓名=姓名",
             "事件日期=讨论时间",
-            "当前诊断=死亡诊断"
+            "当前诊断=死亡诊断",
+            "病历日期=记录时间",
+            "讨论小结=结论"
     );
 
 }

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

@@ -40,6 +40,7 @@ public class TaiZhouDeathRecordDocTrans extends ModelDocTrans {
             "诊治经过=诊疗经过",
             "本人姓名=姓名",
             "现病史- 发病情况=发病情况",
+            "病历日期=记录时间",
             "医生=记录医师"
     );
 

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

@@ -79,7 +79,8 @@ public class TaiZhouFirstCourseRecordDocTrans extends ModelDocTrans {
 
     private List<String> keyContrasts = Lists.newArrayList(
                         "本人姓名=姓名",
-            "现病史- 发病情况=发病经过",
+            "现病史- 发病情况=现病史",
+            "现病史- 发病情况=现病史",
             "医生=医师签名",
             "治疗计划和措施=治疗计划",
             "体温(耳)=体温耳",

+ 9 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstPageRecordDocTrans.java

@@ -41,6 +41,15 @@ public class TaiZhouFirstPageRecordDocTrans extends ModelDocTrans {
         /* structureExtMap.put(Content.outpatientEmergencyDiag, FastJsonUtils.getJsonToBean(content.get(Content.outpatientEmergencyDiag), Object.class));*/
         structureExtMap.put(Content.operative_information, FastJsonUtils.getJsonToBean(content.get(Content.operative_information), Object.class));
         structureExtMap.put(Content.dischargeDiag, FastJsonUtils.getJsonToBean(content.get(Content.dischargeDiag), Object.class));
+
+        List<Map<String, String>> dischargeDiag = (List) structureExtMap.get(Content.dischargeDiag);
+        for (Map<String, String> diag : dischargeDiag) {
+            String diagCategory = diag.get("诊断类别");
+            if (StringUtil.isNotBlank(diagCategory) && "1".equals(diagCategory)) {
+                diag.put("诊断类别", "主要诊断");
+                break;
+            }
+        }
         //        structureExtMap.put(Content.pathologyDiagnose, FastJsonUtils.getJsonToBean(content.get(Content.pathologyDiagnose), Object.class));
         firstPageRecordDoc.setStructureExtMap(structureExtMap);
 

+ 6 - 3
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouOperationDocTrans.java

@@ -107,7 +107,10 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     private List<String> operationDiscussion_keyContrasts = Lists.newArrayList(
             "本人姓名=姓名",
             "开始时间=手术开始时间",
-            "结束时间=手术结束时间"
+            "结束时间=手术结束时间",
+            "书写日期=记录日期",
+            "注意事项=术后注意事项",
+            "治疗计划和措施=术后处理措施"
     );
 
 
@@ -149,8 +152,8 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     private List<String> operationRecord_keyContrasts = Lists.newArrayList(
             "结束时间=手术结束时间",
             "开始时间=手术开始时间",
-            "医生=手术医师",
-            "手术医师=主刀医师签名",
+            "医生=主刀医师签名",
+            "手术医师=主刀医师",
             "助手=一助",
             "本人姓名=姓名"
     );

+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouRescueDocTrans.java

@@ -43,6 +43,7 @@ public class TaiZhouRescueDocTrans extends ModelDocTrans {
 
     private List<String> keyContrasts = Lists.newArrayList(
             "事件日期=抢救开始时间",
+            "抢救病情=病情变化",
             "本人姓名=姓名"
     );