Explorar o código

合并:邵逸夫规则初步并入北仑

rengb %!s(int64=4) %!d(string=hai) anos
pai
achega
3b8c4fd21d
Modificáronse 100 ficheiros con 6204 adicións e 0 borrados
  1. 80 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0001.java
  2. 125 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0002.java
  3. 40 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0003.java
  4. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0004.java
  5. 71 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0005.java
  6. 72 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0006.java
  7. 62 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0007.java
  8. 38 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0008.java
  9. 71 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0009.java
  10. 74 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0010.java
  11. 472 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0011.java
  12. 55 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0013.java
  13. 97 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0014.java
  14. 45 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0015.java
  15. 49 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0016.java
  16. 52 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0018.java
  17. 62 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0019.java
  18. 59 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0020.java
  19. 51 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0021.java
  20. 44 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0022.java
  21. 47 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0023.java
  22. 55 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0024.java
  23. 57 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0029.java
  24. 62 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0031.java
  25. 47 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0032.java
  26. 54 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0034.java
  27. 54 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0035.java
  28. 59 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0039.java
  29. 69 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0043.java
  30. 50 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0044.java
  31. 51 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0046.java
  32. 51 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0050.java
  33. 51 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0051.java
  34. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0052.java
  35. 60 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0053.java
  36. 102 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0058.java
  37. 54 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0068.java
  38. 70 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0070.java
  39. 59 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0072.java
  40. 31 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02855.java
  41. 66 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02860.java
  42. 109 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02887.java
  43. 65 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02902.java
  44. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02903.java
  45. 124 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02909.java
  46. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02918.java
  47. 35 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02978.java
  48. 192 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02980.java
  49. 51 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02988.java
  50. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH03002.java
  51. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH03003.java
  52. 40 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH03005.java
  53. 82 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0372.java
  54. 96 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0375.java
  55. 105 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0376.java
  56. 84 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0378.java
  57. 92 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0397.java
  58. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0400.java
  59. 35 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0401.java
  60. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0407.java
  61. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0411.java
  62. 39 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0412.java
  63. 65 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0414.java
  64. 38 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0417.java
  65. 21 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0420.java
  66. 45 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0422.java
  67. 35 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0440.java
  68. 77 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0441.java
  69. 70 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0442.java
  70. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0448.java
  71. 104 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0449.java
  72. 35 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0450.java
  73. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0458.java
  74. 37 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0473.java
  75. 39 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0474.java
  76. 38 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0492.java
  77. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0493.java
  78. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0495.java
  79. 40 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0299.java
  80. 61 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0300.java
  81. 58 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0305.java
  82. 49 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0306.java
  83. 96 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI03063.java
  84. 48 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0309.java
  85. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0562.java
  86. 48 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0563.java
  87. 48 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0564.java
  88. 48 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0565.java
  89. 70 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0280.java
  90. 73 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0281.java
  91. 51 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0382.java
  92. 107 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0526.java
  93. 59 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0528.java
  94. 52 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0536.java
  95. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0538.java
  96. 44 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0539.java
  97. 44 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0540.java
  98. 44 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0541.java
  99. 44 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0542.java
  100. 0 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0543.java

+ 80 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0001.java

@@ -0,0 +1,80 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.PD;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0001
+ * @Description : 症状缺少时间描述(只要有时间就可以)
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0001 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null) {
+            status.set("0");
+            return;
+        }
+        String chiefText = chiefLabel.getText();
+        if (StringUtil.isBlank(chiefText)) {
+            status.set("0");
+            return;
+        }
+        if (StringUtil.isNotBlank(chiefText) && (chiefText.contains("检查") || chiefText.contains("术后") || chiefText.contains("药物"))) {
+            status.set("0");
+            return;
+        } else {
+            List<PD> pds = chiefLabel.getPds();
+            if (pds != null && pds.size() > 0) {
+                for (PD pd : pds) {
+                    String pdName = pd.getName();
+                    if (StringUtil.isNotBlank(pdName)) {
+                        if (pdName.contains("天") || pdName.contains("周") || pdName.contains("月")
+                                || pdName.contains("时") || pdName.contains("秒") || pdName.contains("半年")
+                                || pdName.contains("日") || pdName.contains("今") || pdName.contains("余年")
+                                || pdName.contains("年") || pdName.contains("分") || isDate(pdName)) {
+                            status.set("0");
+                            break;
+                        }
+                    }
+                }
+            }
+            /*List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getChiefLabel().getClinicals();
+            if (clinicals.size() > 0) {
+                for (Clinical clinical : clinicals) {
+                    String clinicalName = clinical.getName();
+                    List<PD> timestamp = clinical.getTimestamp();
+                    if (ListUtil.isEmpty(timestamp)) {
+                        if (StringUtils.isEmpty(info.get())) {
+                            info.set(clinicalName);
+                        } else {
+                            info.set(info.get() + "," + clinicalName);
+                        }
+                    }
+                }
+            }*/
+        }
+        /*if (StringUtils.isNotEmpty(info.get())) {
+            status.set("-1");
+        }*/
+    }
+
+    private boolean isDate(String pdName) {
+        String regex = "[0-9]{4}.?[0-9]{2}.?[0-9]{2}";
+        return pdName.matches(regex);
+    }
+}

+ 125 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0002.java

@@ -0,0 +1,125 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.alibaba.fastjson.JSONArray;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
+import com.lantone.qc.kernel.structure.ai.ModelAI;
+import com.lantone.qc.dbanaly.util.KernelConstants;
+import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
+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.model.entity.Clinical;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0002
+ * @Description : 主诊断与主诉不符
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0002 extends QCCatalogue {
+    @Autowired
+    private SpecialStorageUtil specialStorageUtil;
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (beHospitalizedDoc == null) {
+            status.set("0");
+            return;
+        }
+        boolean bool = false;
+        ChiefLabel chiefLabel = beHospitalizedDoc.getChiefLabel();
+        DiagLabel initialDiagLabel = beHospitalizedDoc.getInitialDiagLabel();
+        if (chiefLabel == null || initialDiagLabel == null) {
+            status.set("0");
+            return;
+        }
+        List<Diag> chiefDiags = chiefLabel.getDiags();
+        List<Diag> diags = initialDiagLabel.getDiags();
+        if (chiefDiags.size() > 0) {
+            for (Diag diag : chiefDiags) {
+                String hospitalDiagName = diag.getHospitalDiagName();
+                if (hospitalDiagName.contains("术后") || hospitalDiagName.contains("癌") ||
+                        hospitalDiagName.contains("瘤") || hospitalDiagName.contains("复诊")) {
+                    status.set("0");
+                    break;
+                }
+                {
+                    bool = true;
+                }
+            }
+        } else {
+            bool = true;
+        }
+        if (bool) {
+            String firstDiag = diags.get(0).getName();
+            String firstHDiag = diags.get(0).getHospitalDiagName();
+            String mainDiag = StringUtil.isBlank(firstHDiag) ? firstDiag : firstHDiag;
+            List<String> symptoms = null;
+            //Map<String, String> hostpital_standDiag = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DIAG_MAP);
+            //if (!hostpital_standDiag.containsKey(mainDiag)) {
+            //    status.set("0");
+            //    return;
+            //}
+            Map<String, Map<String, Object>> diagMap = specialStorageUtil.getJsonStringValue(KernelConstants.CONCEPT_DIAG_PROPERTY_MAP);
+            Map<String, Object> map = (Map<String, Object>) diagMap.get(mainDiag);
+            if (map != null && map.size() > 0) {
+                symptoms = (List<String>) map.get("symptoms");
+            }
+            if (symptoms == null) {
+                status.set("0");
+                return;
+            }
+            List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getChiefLabel().getClinicals();
+            if (clinicals != null && clinicals.size() > 0) {
+                String firstClinical = clinicals.get(0).getName();
+                /* 主诉现病史相似度算法接口 */
+                ModelAI modelAI = new ModelAI();
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firstClinical, symptoms, false
+                        , "chief_present", chiefPresentSimilarityServiceClient);
+                if (jsonArray.size() == 2) {
+                    /* 相似度最高症状 */
+                    String symptom = jsonArray.getString(0);
+                    /* 相似度分数 */
+                    double likeRate = jsonArray.getDoubleValue(1);
+                    if (likeRate > 0.9) {
+                        status.set("0");
+                    } else {
+                        status.set("-1");
+                        info.set(symptom);
+                    }
+                }
+
+                //if (symptoms.contains(firstClinical)) {
+                //    status.set("0");
+                //}
+                //for (Clinical clinical : clinicals) {
+                //    String clinicalName = clinical.getName();
+                //    if (symptoms != null && !symptoms.contains(clinicalName)) {
+                //        if (StringUtils.isEmpty(info.get())) {
+                //            info.set(clinicalName);
+                //        } else {
+                //            info.set(info.get() + "," + clinicalName);
+                //        }
+                //    }
+                //}
+            }
+            //if (StringUtils.isEmpty(info.get())) {
+            //    status.set("0");
+            //}
+        }
+    }
+}

+ 40 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0003.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.Clinical;
+import com.lantone.qc.pub.model.entity.PD;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0003
+ * @Description : 主诉字数超过20个字
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0003 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getBeHospitalizedDoc().getChiefLabel() == null) {
+            status.set("0");
+            return;
+        }
+        String chiefText = inputInfo.getBeHospitalizedDoc().getChiefLabel().getText();
+        if (StringUtil.isNotBlank(chiefText)) {
+            String s = chiefText.trim();
+            int chiefTextLength = s.length();
+            if (chiefTextLength <= 20) {
+                status.set("0");
+            }
+        } else {
+            status.set("0");
+        }
+    }
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0004.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+
+/**
+ * @ClassName : BEH0004
+ * @Description : 入院记录个人基本信息缺项或信息错误
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0004 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+
+        status.set("0");
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if(structureMap != null){
+            String basePassage = structureMap.get("个人基本信息");
+            if(StringUtils.isNotEmpty(basePassage)){
+                String[] baseFilds = basePassage.split(",");
+                for (String fild:baseFilds) {
+                    if(StringUtils.isBlank(structureMap.get(fild))){
+                        status.set("-1");
+                        break;
+                    }
+                }
+            }
+        }
+
+    }
+}

+ 71 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0005.java

@@ -0,0 +1,71 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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.entity.PD;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0005
+ * @Description :主诉症状时间描述前后不合理
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0005 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        List<Integer> timeIndex = new ArrayList<>();
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null) {
+            return;
+        }
+        List<PD> pds = chiefLabel.getPds();
+        String chiefText = chiefLabel.getText();
+        if (StringUtil.isNotBlank(chiefText)) {
+//            chiefText = chiefText.replace("月经", "");/* 月经这个词会影响逻辑判断,这里把月经这个词去除 */
+            if (chiefText.contains("检查") || chiefText.contains("术后")
+                    || chiefText.contains("药物") || chiefText.contains("月经") || chiefText.contains("停经")) {
+                return;
+            } else {
+                List<String> words = Lists.newArrayList("年", "月", "周", "天", "日", "时", "分");
+                String name;
+                for (PD pd : pds) {
+                    name = pd.getName();
+                    if (StringUtil.isBlank(name)) {
+                        continue;
+                    }
+                    for (int i = 0; i < words.size(); i++) {
+                        String word = words.get(i);
+                        if (name.contains(word)) {
+                            timeIndex.add(i);
+                            break;
+                        }
+                    }
+                }
+            }
+            if (timeIndex.size() <= 1) {
+                return;
+            }
+            for (int i = 0; i < timeIndex.size(); i++) {
+                for (int j = i + 1; j < timeIndex.size(); j++) {
+                    if (timeIndex.get(i) > timeIndex.get(j)) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+}

+ 72 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0006.java

@@ -0,0 +1,72 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.PD;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0006
+ * @Description :主诉症状缺少近期时间描述
+ * 1.张志勇提议如果主诉中包含术后不报
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0006 extends QCCatalogue {
+    private List<String> containList = Arrays.asList("半年", "术后");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+//        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null || StringUtil.isBlank(chiefLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        String chiefText = chiefLabel.getText();
+        if (StringUtil.isNotBlank(chiefText)) {
+            for (String fild : containList) {
+                if (chiefText.contains(fild)) {
+                    status.set("0");
+                    return;
+                }
+            }
+            List<PD> pds = chiefLabel.getPds();
+            if (pds != null && pds.size() > 0) {
+                if (pds.size() == 2) {
+                    status.set("0");
+                    return;
+                }
+                for (PD pd : pds) {
+                    String pdName = pd.getName();
+                    if (!CatalogueUtil.isEmpty(pdName)) {
+                        if (pdName.contains("天") || pdName.contains("周") || pdName.contains("月")
+                                || pdName.contains("时") || pdName.contains("半年") || pdName.contains("秒")
+                                || pdName.contains("分") || pdName.contains("日") || pdName.contains("今")
+                                || pdName.contains("1年") || pdName.contains("一年")) {
+                            status.set("0");
+                            break;
+                        }
+                    }
+                }
+            } else {
+                if (StringUtil.isNotBlank(chiefLabel.getText())) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 62 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0007.java

@@ -0,0 +1,62 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Clinical;
+import com.lantone.qc.pub.model.entity.PD;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0007
+ * @Description :主诉症状时间描述模糊
+ * 主诉中不能出现数天,数月,数年等带“数”字这种描述,如果出现,均视为模糊不清
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0007 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null || StringUtil.isBlank(chiefLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        String chiefText = chiefLabel.getText();
+        if ((chiefText.contains("检查") || chiefText.contains("术后") || chiefText.contains("药物"))) {
+            status.set("0");
+        } else {
+            List<Clinical> clinicals = chiefLabel.getClinicals();
+            if (clinicals.size() > 0) {
+                Clinical clinical = clinicals.get(0);
+                List<PD> timestamp = clinical.getTimestamp();
+                if (timestamp.size() > 0) {
+                    for (PD pd : timestamp) {
+                        String value = pd.getValue();
+                        String unit = pd.getUnit();
+                        if (StringUtils.isEmpty(unit) && value.contains("数")) {
+                            status.set("-1");
+                            break;
+                        } else {
+                            status.set("0");
+                        }
+                    }
+                } else {
+                    status.set("0");
+                }
+            } else {
+                status.set("0");
+            }
+        }
+    }
+}

+ 38 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0008.java

@@ -0,0 +1,38 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Clinical;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0008
+ * @Description :主诉症状超过3个
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0008 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null || StringUtil.isBlank(chiefLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        List<Clinical> clinicals = chiefLabel.getClinicals();
+        if (clinicals != null && clinicals.size() <= 3) {
+            status.set("0");
+        }
+
+    }
+}

+ 71 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0009.java

@@ -0,0 +1,71 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Clinical;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0009
+ * @Description :主诉缺少主症状
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0009 extends QCCatalogue {
+    private List<String> containList = Arrays.asList("检查", "术后", "药物", "发现", "误服", "确诊", "经", "异常", "诊断"
+            , "示", "超", "伤", "术", "复查", "体检", "血透", "血液透析");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null) {
+            status.set("0");
+            return;
+        }
+        String chiefText = chiefLabel.getText();
+        if (StringUtil.isNotBlank(chiefText)) {
+            for (String word : containList) {
+                if (chiefText.contains(word)) {
+                    status.set("0");
+                    return;
+                }
+            }
+            List<Clinical> clinicals = chiefLabel.getClinicals();
+            if (clinicals != null && clinicals.size() > 0) {
+                status.set("0");
+                return;
+            }
+            List<Diag> diags = chiefLabel.getDiags();
+            if (diags.size() > 0) {
+                status.set("0");
+                return;
+            }
+            if (diags != null && diags.size() > 0) {
+                for (Diag diag : diags) {
+                    String hospitalDiagName = diag.getHospitalDiagName();
+                    if (hospitalDiagName.contains("术后") || hospitalDiagName.contains("癌") ||
+                            hospitalDiagName.contains("瘤") || hospitalDiagName.contains("复诊")) {
+                        status.set("0");
+                        break;
+                    }
+                }
+            }
+        } else {
+            status.set("0");
+        }
+    }
+}

+ 74 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0010.java

@@ -0,0 +1,74 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0010
+ * @Description : 主诉中出现诊断名称(病理确诊:如肿瘤疾病、再入院除外)
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0010 extends QCCatalogue {
+    private List<String> containList = Arrays.asList("癌", "瘤", "复诊", "术后", "化疗后", "发现", "体检", "检查", "确诊"
+            , "诊断", "复查", "复发", "示", "超", "CT", "血透", "血液透析");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null) {
+            status.set("0");
+            return;
+        }
+        String chiefText = chiefLabel.getText();
+        if (StringUtil.isNotBlank(chiefText)) {
+            for (String word : containList) {
+                if (chiefText.contains(word)) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+        List<Diag> diags = chiefLabel.getDiags();
+        /*
+        if (diags != null && diags.size() > 0) {
+            Iterator<Diag> diagIterator = diags.iterator();
+            while (diagIterator.hasNext()) {
+                Diag diag = diagIterator.next();
+                String diagName = diag.getHospitalDiagName();
+                for (String word: containList) {
+                    if (diagName.contains(word)){
+                        diagIterator.remove();
+                        break;
+                    }
+                }
+            }
+        }
+         */
+        if (diags != null && diags.size() > 0) {
+            status.set("-1");
+            for (Diag diag : diags) {
+                if (StringUtil.isEmpty(info.get())) {
+                    info.set(diag.getHospitalDiagName());
+                } else {
+                    info.set(info.get() + "," + diag.getHospitalDiagName());
+                }
+            }
+        }
+
+    }
+}

+ 472 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0011.java

@@ -0,0 +1,472 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.alibaba.fastjson.JSONArray;
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
+import com.lantone.qc.kernel.structure.ai.ModelAI;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+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.Pacs;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.model.label.PacsLabel;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
+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.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName : BEH0011
+ * @Description : 初步诊断不完整
+ * 原逻辑 --初步诊断没有既往史里的慢性疾病
+ * 现逻辑 --检查现病史中一般情况之后的疾病名称,既往史中的疾病名称是否都在初步诊断里
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Slf4j
+@Component
+public class BEH0011 extends QCCatalogue {
+    //    @Autowired
+    //    private SpecialStorageUtil specialStorageUtil;
+    @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");
+            return;
+        }
+        //现病史
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        //初步诊断
+        DiagLabel initialDiagLabel = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel();
+        //修正诊断
+        DiagLabel revisedDiagLabel = inputInfo.getBeHospitalizedDoc().getRevisedDiagLabel();
+        //补充诊断
+        DiagLabel suppleDiagLabel = inputInfo.getBeHospitalizedDoc().getSuppleDiagLabel();
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        PacsLabel pacsLabel = inputInfo.getBeHospitalizedDoc().getPacsLabel();
+        if (initialDiagLabel == null) {
+            status.set("0");
+            return;
+        }
+        Set<String> presentPastDiags = new HashSet<>();
+        if (presentLabel != null) {
+            List<GeneralDesc> generals = presentLabel.getGenerals();
+            if (generals.size() > 0) {
+                String presentText = presentLabel.getText();
+                List<Diag> presentDiags = presentLabel.getDiags();
+                /* 取现病史中一般情况之后的疾病名称 */
+                if (StringUtil.isNotBlank(presentText) && presentDiags.size() > 0) {
+                    String lastGeneral = generals.get(generals.size() - 1).getName();
+                    int lastGeneralIndex = presentText.indexOf(lastGeneral);
+                    for (Diag presentDiag : presentDiags) {
+                        if (presentDiag.getNegative() != null || presentDiag.getHospitalDiagName().contains("否认")) {
+                            continue;
+                        }
+                        /* 现病史中一般情况之后的疾病名称 */
+                        if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
+                            if (isContains(presentDiag.getHospitalDiagName()) && !isFilter(presentDiag.getHospitalDiagName())) {
+                                presentPastDiags.add(presentDiag.getHospitalDiagName());
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        /* 取既往史中疾病名称 */
+        if (pastLabel != null && StringUtils.isNotEmpty(pastLabel.getText())) {
+            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);
+        }
+
+        /* 取辅检中疾病名称 */
+        if (pacsLabel != null) {
+            List<Pacs> pacses = pacsLabel.getPacses();
+            if (pacses != null && pacses.size() > 0) {
+                List<List<Diag>> pacsDiags = pacses.stream().map(Pacs::getDiags).filter(x -> x.size() > 0).collect(Collectors.toList());
+                if (pacsDiags.size() > 1) {
+                    List<Diag> diagList = pacsDiags.get(pacsDiags.size() - 1);
+                    //把辅检提取出的疾病去除包含术后之后的疾病放入presentPastDiags
+                    Set<String> diagStringList = diagList.stream().map(Diag::getHospitalDiagName).filter(x -> StringUtil.isNotBlank(x) && !x.contains("术后")).collect(Collectors.toSet());
+                    presentPastDiags.addAll(diagStringList);
+                }
+            }
+        }
+
+        /* 取初步诊断中疾病名称 */
+        List<String> initDiags = new ArrayList<>();
+        List<Diag> initialDiagDiags = initialDiagLabel.getDiags();
+        addInitDiagHospitalName(initDiags, initialDiagDiags);
+
+        /* 取修正诊断中疾病名称 */
+        if (revisedDiagLabel != null) {
+            List<Diag> revisedDiagDiags = revisedDiagLabel.getDiags();
+            addInitDiagHospitalName(initDiags, revisedDiagDiags);
+        }
+
+        /* 取补充诊断中疾病名称 */
+        if (suppleDiagLabel != null) {
+            List<Diag> suppleDiagDiags = suppleDiagLabel.getDiags();
+            addInitDiagHospitalName(initDiags, suppleDiagDiags);
+        }
+
+        if (initDiags.size() > 0) {
+            initDiags = initDiags.stream().distinct().collect(Collectors.toList());
+        }
+
+        String infoStr = "";
+        /*先两两对比,能对上就删除,对不上的再走相似度模型*/
+        Iterator<String> iterator = presentPastDiags.iterator();
+        while (iterator.hasNext()) {
+            String presentPastDiag = iterator.next();
+            for (String initDiag : initDiags) {
+                if (presentPastDiag.equals(initDiag) || presentPastDiag.contains(initDiag) || initDiag.contains(presentPastDiag)) {
+                    iterator.remove();
+                    break;
+                }
+            }
+        }
+        int matchSum = 0;
+        ModelAI modelAI = new ModelAI();
+        for (String presentPastDiag : presentPastDiags) {
+            JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(presentPastDiag, initDiags, false
+                    , "diagnose", chiefPresentSimilarityServiceClient);
+            if (jsonArray.size() == 2) {
+                /* 相似度最高症状 */
+                String symptom = jsonArray.getString(0);
+                /* 相似度分数 */
+                double likeRate = jsonArray.getDoubleValue(1);
+                if (likeRate > 0.85) {
+                    matchSum++;
+                } else if (symptom.contains(presentPastDiag) || presentPastDiag.contains(symptom)) {
+                    matchSum++;
+                } else {
+                    infoStr = CatalogueUtil.concatInfo(infoStr, presentPastDiag);
+                }
+            } else {
+                infoStr = CatalogueUtil.concatInfo(infoStr, presentPastDiag);
+            }
+        }
+        info.set(infoStr);
+        if (matchSum == presentPastDiags.size()) {
+            status.set("0");
+        }
+        lackDiabetesFeritin(initDiags, presentLabel.getText(), inputInfo.getBeHospitalizedDoc().getStructureMap().get("长期用药"), inputInfo.getBeHospitalizedDoc().getStructureMap().get("外院用药"), inputInfo.getMedicalRecordInfoDoc().getStructureMap().get("behospitalCode"));
+        /*
+        if (initDiags.containsAll(presentPastDiags)) {
+            status.set("0");
+        }
+         */
+    }
+
+    private void addDiagHospitalName(Set<String> presentPastDiag, List<Diag> pastDiags) {
+        for (Diag pastDiag : pastDiags) {
+            if (pastDiag.getNegative() != null) {
+                continue;
+            }
+            if (isContains(pastDiag.getHospitalDiagName()) && !isFilter(pastDiag.getHospitalDiagName())) {
+                presentPastDiag.add(pastDiag.getHospitalDiagName());
+            }
+        }
+    }
+
+    private void addInitDiagHospitalName(List<String> presentPastDiag, List<Diag> pastDiags) {
+        for (Diag pastDiag : pastDiags) {
+            if (pastDiag.getNegative() != null) {
+                continue;
+            }
+            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());
+        if (pastLabel.getDiags() != null) {
+            List<Diag> diags = pastLabel.getDiags().stream().filter(diag -> diag.getNegative() == null).collect(Collectors.toList());
+            List<String> initDiags = Arrays.asList(initDiagText.split(","));
+            if (diags.size() > 0) {
+                for (Diag diag : diags) {
+                    Map<String, Object> map = (Map<String, Object>) diagMap.get(diag.getName());
+                    if (map != null && map.size() > 0) {
+                        String chronic = (String) map.get("chronic");//1是慢病
+                        if ("1".equals(chronic) && !initDiags.contains(diag.getName())) {
+                            if (StringUtils.isEmpty(info.get())) {
+                                info.set(diag.getName());
+                            } else {
+                                info.set(info.get() + "," + diag.getName());
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if (StringUtils.isEmpty(info.get())) {
+            status.set("0");
+        }
+     */
+
+    //糖尿病、高血压药品过滤
+    private void lackDiabetesFeritin(List<String> initDiags, String... texts) {
+        String checkText = "";
+        if (StringUtil.isNotBlank(texts[0])) {
+            checkText += texts[0] + "。";
+        }
+        if (StringUtil.isNotBlank(texts[1])) {
+            checkText += texts[1] + "。";
+        }
+        if (StringUtil.isNotBlank(texts[2])) {
+            checkText += texts[2] + "。";
+        }
+        if (StringUtil.isBlank(checkText)) {
+            return;
+        }
+        long diabetes = initDiags.stream().filter(x -> x.contains("糖尿病")).count();
+        for (String diabetesDrug : diabetesDrugs) {
+            if (checkText.contains(diabetesDrug) && checkText.contains("糖尿病") && diabetes == 0) {
+                if (StringUtil.isBlank(info.get()) || !info.get().contains("糖尿病")) {
+                    info.set(CatalogueUtil.concatInfo(info.get(), "糖尿病"));
+                    status.set("-1");
+                    log.error("初步诊断不完整:" + texts[3]);
+                }
+                break;
+            }
+        }
+        long hypertension = initDiags.stream().filter(x -> x.contains("高血压")).count();
+        for (String feritinDrug : feritinDrugs) {
+            if (checkText.contains(feritinDrug) && checkText.contains("高血压") && hypertension == 0) {
+                if (StringUtil.isBlank(info.get()) || !info.get().contains("高血压")) {
+                    info.set(CatalogueUtil.concatInfo(info.get(), "高血压"));
+                    status.set("-1");
+                    log.error("初步诊断不完整:" + texts[3]);
+                }
+                break;
+            }
+        }
+    }
+
+    //糖尿病药
+    private List<String> diabetesDrugs = Lists.newArrayList(
+            "重组人胰岛素",
+            "重组赖脯胰岛素",
+            "谷赖胰岛素",
+            "赖脯胰岛素",
+            "门冬胰岛素",
+            "生物合成人胰岛素",
+            "胰岛素",
+            "低精蛋白锌胰岛素",
+            "精蛋白生物合成人胰岛素",
+            "精蛋白锌重组人胰岛素",
+            "精蛋白重组人胰岛素",
+            "德谷门冬双胰岛素",
+            "30/70混合重组人胰岛素",
+            "50/50混合重组人胰岛素",
+            "精蛋白生物合成人胰岛素(预混30R)",
+            "精蛋白锌胰岛素(30R)",
+            "精蛋白锌混合重组赖脯胰岛素(50R)",
+            "精蛋白锌混合重组赖脯胰岛素(25R)",
+            "精蛋白重组人胰岛素(预混30/70)",
+            "精蛋白重组人胰岛素(50/50)",
+            "精蛋白锌重组人胰岛素(40/60)",
+            "门冬胰岛素30",
+            "门冬胰岛素50",
+            "重组甘精胰岛素",
+            "地特胰岛素",
+            "德谷胰岛素",
+            "甘精胰岛素",
+            "精蛋白锌胰岛素",
+            "米格列奈钙",
+            "那格列奈",
+            "瑞格列奈",
+            "吡格列酮二甲双胍",
+            "二甲双胍格列呲嗪",
+            "二甲双胍格列齐特",
+            "二甲双胍格列本脲Ⅰ",
+            "二甲双胍格列本脲Ⅱ",
+            "二甲双胍格列吡嗪",
+            "二甲双胍维格列汀",
+            "利格列汀二甲双胍",
+            "瑞格列奈二甲双胍",
+            "沙格列汀二甲双胍",
+            "西格列汀二甲双胍",
+            "格列本脲",
+            "格列吡嗪",
+            "格列喹酮",
+            "格列美脲",
+            "格列齐特",
+            "格列齐特Ⅱ",
+            "甲苯磺丁脲",
+            "吡格列酮",
+            "罗格列酮",
+            "二甲双胍",
+            "阿卡波糖",
+            "伏格列波糖",
+            "依帕司他",
+            "硫辛酸",
+            "艾塞那肽",
+            "贝那鲁肽",
+            "度拉糖肽",
+            "聚乙二醇洛塞那肽",
+            "利拉鲁肽",
+            "利司那肽",
+            "阿格列汀",
+            "利格列汀",
+            "沙格列汀",
+            "维格列汀",
+            "西格列汀"
+    );
+    //高血压药
+    private List<String> feritinDrugs = Lists.newArrayList(
+            "贝那普利",
+            "福辛普利",
+            "卡托普利",
+            "喹那普利",
+            "赖诺普利",
+            "雷米普利",
+            "咪达普利",
+            "培哚普利",
+            "依那普利",
+            "贝那普利氢氯噻嗪",
+            "复方卡托普利",
+            "赖诺普利氢氯噻嗪",
+            "培哚普利吲达帕胺",
+            "依那普利氢氯噻嗪",
+            "氨氯地平贝那普利Ⅱ",
+            "氨氯地平贝那普利Ⅰ",
+            "培哚普利氨氯地平",
+            "依那普利叶酸",
+            "奥美沙坦",
+            "阿利沙坦",
+            "厄贝沙坦",
+            "坎地沙坦",
+            "氯沙坦",
+            "替米沙坦",
+            "缬沙坦",
+            "奥美沙坦酯氢氯噻嗪",
+            "厄贝沙坦氢氯噻嗪",
+            "坎地氢噻",
+            "氯沙坦氢氯噻嗪",
+            "替米沙坦氢氯噻嗪",
+            "缬沙坦氢氯噻嗪",
+            "奥美沙坦氨氯地平",
+            "替米沙坦氨氯地平",
+            "缬沙坦氨氯地平",
+            "沙库巴曲缬沙坦",
+            "氨氯地平阿托伐他汀钙",
+            "多沙唑嗪",
+            "萘哌地尔",
+            "哌唑嗪",
+            "乌拉地尔",
+            "乌拉地尔氯化钠",
+            "卡维地洛",
+            "阿夫唑嗪",
+            "赛洛多辛",
+            "坦洛新",
+            "特拉唑嗪",
+            "复方利血平",
+            "复方利血平氨苯蝶啶",
+            "复方双嗪利血平",
+            "复方四嗪利血平",
+            "复方双肼屈嗪",
+            "复方盐酸阿米洛利",
+            "氨苯蝶啶氢氯噻嗪",
+            "氢氯噻嗪",
+            "复方地巴唑氢氯噻嗪",
+            "复方三嗪芦丁",
+            "地尔硫䓬",
+            "洛美利嗪",
+            "阿折地平",
+            "氨氯地平",
+            "氨氯地平叶酸",
+            "贝尼地平",
+            "非洛地平",
+            "拉西地平",
+            "乐卡地平",
+            "马尼地平",
+            "门冬氨酸氨氯地平",
+            "尼卡地平",
+            "尼莫地平",
+            "尼群地平",
+            "尼群洛尔",
+            "尼索地平",
+            "尼卡地平氯化钠",
+            "尼卡地平葡萄糖",
+            "硝苯地平",
+            "西尼地平",
+            "硝苯地平Ⅰ",
+            "硝苯地平Ⅱ",
+            "硝苯地平Ⅲ",
+            "硝苯地平(Ⅳ)",
+            "左旋氨氯地平",
+            "氨苯蝶啶"
+    );
+
+}

+ 55 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0013.java

@@ -0,0 +1,55 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.entity.Clinical;
+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.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0013
+ * @Description :  现病史缺少有鉴别意义的阴性症状
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0013 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        //现病史
+        PresentLabel presentLabel = beHospitalizedDoc.getPresentLabel();
+        if (presentLabel == null || StringUtil.isBlank(presentLabel.getText()) || "。".equals(presentLabel.getText())) {
+            return;
+        }
+        String text = presentLabel.getText();
+        if (StringUtil.isNotBlank(text)) {
+            if ((text.contains("无") || text.contains("否认")) && !text.contains("诱因")) {
+                return;
+            }
+        }
+        List<Clinical> clinicalNegative = new ArrayList<>();
+        List<Clinical> clinicals = presentLabel.getClinicals();
+        if (clinicals.size() > 0) {
+            for (Clinical clinical : clinicals) {
+                if (clinical.getNegative() != null) {
+                    clinicalNegative.add(clinical);
+                }
+            }
+        }
+        if (clinicalNegative.size() == 0) {
+            status.set("-1");
+        }
+    }
+}

+ 97 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0014.java

@@ -0,0 +1,97 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.entity.Cause;
+import com.lantone.qc.pub.model.entity.Clinical;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0014
+ * @Description :  现病史症状缺少诱因
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0014 extends QCCatalogue {
+    private List<String> containList = Arrays.asList("体检", "发现", "检查", "因", "确诊", "诊断", "复查", "术后"
+            , "药物", "误服", "查", "撞", "伤", "月经", "暴力", "超", "术");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        /*List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getPresentLabel().getClinicals();
+        if(clinicals.size()>0){
+            Clinical clinical = clinicals.get(0);
+            String clinicalName = clinical.getName();
+            Cause cause = clinical.getCause();
+            if(cause == null){
+                info.set(clinicalName);
+            }else {
+                status.set("0");
+            }
+        }*/
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        if (presentLabel == null || StringUtil.isBlank(presentLabel.getText()) || "。".equals(presentLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        List<Clinical> clinicals = presentLabel.getClinicals();
+        if (ListUtil.isNotEmpty(clinicals)) {
+            for (Clinical clinical : clinicals) {
+                if (clinical.getCause() != null) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+        //硬规则匹配 前30个字有"体检"或"发现"或"检查"(containList)字样
+        String present = presentLabel.getText();
+        if (StringUtils.isNotEmpty(present)) {
+            if (present.length() > 30) {
+                present = present.substring(0, 30);
+            }
+            present = present.replaceAll("[\"“”]", "");
+            for (String word : containList) {
+                if (present.contains(word)) {
+                    status.set("0");
+                    return;
+                }
+            }
+            //模型在现病史前30个字里能提出来疾病,那也可以算有诱因
+            List<Diag> presentDiags = presentLabel.getDiags();
+            if (presentDiags.size() > 0) {
+                for (Diag diag : presentDiags) {
+                    String hospitalDiagName = diag.getHospitalDiagName();
+                    if (StringUtil.isBlank(hospitalDiagName)) {
+                        continue;
+                    }
+                    if (present.contains(hospitalDiagName)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+
+        List<Cause> causes = presentLabel.getCauses();
+        if (causes != null && causes.size() > 0) {
+            status.set("0");
+        }
+    }
+}

+ 45 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0015.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.BodyPart;
+import com.lantone.qc.pub.model.entity.Clinical;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0015
+ * @Description :  现病史症状缺少部位,只判断现病史中的第一个症状
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0015 extends QCCatalogue {
+    @Autowired
+    private SpecialStorageUtil specialStorageUtil;
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            return;
+        }
+        List<String> clinicalList = (List<String>) specialStorageUtil.getJsonStringValue(KernelConstants.CONCEPT_CLINIC_BODYPART_PROPERTIES_LIST);
+        List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getPresentLabel().getClinicals();
+        if(clinicals.size()>0){
+            Clinical clinical = clinicals.get(0);
+            if(clinicalList.contains(clinical.getName())){
+                BodyPart bodyPart = clinical.getBodyPart();
+                if(bodyPart == null){
+                    status.set("-1");
+                    info.set(clinical.getName());
+                }
+            }
+
+        }
+    }
+}

+ 49 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0016.java

@@ -0,0 +1,49 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.dbanaly.lt.entity.Clinic;
+import com.lantone.qc.dbanaly.lt.facade.ClinicFacade;
+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.Clinical;
+import com.lantone.qc.pub.model.entity.Property;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH0016
+ * @Description :  现病史症状缺少性质
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0016 extends QCCatalogue {
+    @Autowired
+    private ClinicFacade clinicFacade;
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getBeHospitalizedDoc().getPresentLabel() == null) {
+            return;
+        }
+        List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getPresentLabel().getClinicals();
+        if (clinicals.size() > 0) {
+            Clinical clinical = clinicals.get(0);
+            String clinicalName = clinical.getName();
+            if (StringUtil.isNotBlank(clinicalName)) {
+                Clinic clinic = clinicFacade.clinicCache(clinicalName);
+                if (clinic != null && clinic.getHasProperty() == 1) {
+                    Property property = clinical.getProperty();
+                    if (property == null) {
+                        status.set("-1");
+                        info.set(clinicalName);
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 52 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0018.java

@@ -0,0 +1,52 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.PD;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0018
+ * @Description :现病史症状缺少近期时间描述
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0018 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        List<PD> pds = presentLabel.getPds();
+        if (pds != null && pds.size() > 0) {
+            for (PD pd : pds) {
+                String pdName = pd.getName();
+                if (StringUtil.isNotBlank(pdName)) {
+                    if (pdName.contains("天") || pdName.contains("周") || pdName.contains("月")
+                            || pdName.contains("时") || pdName.contains("秒") || pdName.contains("半年")
+                            || pdName.contains("日") || pdName.contains("今") || pdName.contains("余年")
+                            || pdName.contains("年") || pdName.contains("分") || isDate(pdName)) {
+                        status.set("0");
+                        break;
+                    }
+                }
+            }
+        }
+
+    }
+
+    private boolean isDate(String pdName) {
+        String regex = "[0-9]{4}.?[0-9]{2}.?[0-9]{2}";
+        return pdName.matches(regex);
+    }
+}
+

+ 62 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0019.java

@@ -0,0 +1,62 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.dbanaly.lt.entity.Clinic;
+import com.lantone.qc.dbanaly.lt.facade.ClinicFacade;
+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.Clinical;
+import com.lantone.qc.pub.model.entity.Degree;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH0019
+ * @Description :  现病史症状缺少程度
+ * crf模型中只标注到修饰的程度,需要用词库去配出哪些是程度。
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0019 extends QCCatalogue {
+    @Autowired
+    private ClinicFacade clinicFacade;
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getBeHospitalizedDoc().getPresentLabel() == null) {
+            return;
+        }
+        List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getPresentLabel().getClinicals();
+        if (clinicals.size() > 0) {
+            Clinical clinical = clinicals.get(0);
+            String clinicalName = clinical.getName();
+            if (StringUtil.isNotBlank(clinicalName)) {
+//                long start = System.currentTimeMillis();
+                Clinic clinic = clinicFacade.clinicCache(clinicalName);
+//                long end = System.currentTimeMillis();
+//                System.out.println("取kl_clinic缓存时间:" + (end-start));
+                if (clinic != null && clinic.getHasDegree() == 1) {
+                    Degree degree = clinical.getDegree();
+                    if (degree == null) {
+                        status.set("-1");
+                        info.set(clinicalName);
+                    }
+
+                    if (clinicals.size() > 1) {
+                        String secondeName = clinicals.get(1).getName();
+                        String presentText = inputInfo.getBeHospitalizedDoc().getPresentLabel().getText();
+                        String subTxt = presentText.substring(presentText.indexOf(clinicalName), presentText.indexOf(secondeName));
+                        if (subTxt.indexOf("忍") > -1) {
+                            status.set("0");
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 59 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0020.java

@@ -0,0 +1,59 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.dbanaly.lt.entity.Clinic;
+import com.lantone.qc.dbanaly.lt.facade.ClinicFacade;
+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.Clinical;
+import com.lantone.qc.pub.model.entity.Modification;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH0020
+ * @Description :  现病史症状缺少缓解情况
+ * crf模型中只标注趋势,需要用词库去配出哪些是缓解情况。
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0020 extends QCCatalogue {
+    @Autowired
+    private ClinicFacade clinicFacade;
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getBeHospitalizedDoc().getPresentLabel() == null) {
+            return;
+        }
+        List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getPresentLabel().getClinicals();
+        if (clinicals.size() > 0) {
+            Clinical clinical = clinicals.get(0);
+            String clinicalName = clinical.getName();
+            if (StringUtil.isNotBlank(clinicalName)) {
+                Clinic clinic = clinicFacade.clinicCache(clinicalName);
+                if (clinic != null && clinic.getHasRelieve() == 1) {
+                    Modification modification = clinical.getModification();
+                    if (modification == null || !modification.getName().contains("缓")) {
+                        status.set("-1");
+                        info.set(clinicalName);
+                    }
+
+                    if (clinicals.size() > 1) {
+                        String secondeName = clinicals.get(1).getName();
+                        String presentText = inputInfo.getBeHospitalizedDoc().getPresentLabel().getText();
+                        String subTxt = presentText.substring(presentText.indexOf(clinicalName), presentText.indexOf(secondeName));
+                        if (subTxt.indexOf("好转") > -1) {
+                            status.set("0");
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 51 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0021.java

@@ -0,0 +1,51 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.dbanaly.lt.entity.Clinic;
+import com.lantone.qc.dbanaly.lt.facade.ClinicFacade;
+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.Clinical;
+import com.lantone.qc.pub.model.entity.Modification;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH0021
+ * @Description :  现病史症状缺少加剧情况
+ * crf模型中只标注趋势,需要用词库去配出哪些是加剧情况。
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0021 extends QCCatalogue {
+    @Autowired
+    private ClinicFacade clinicFacade;
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getBeHospitalizedDoc().getPresentLabel() == null) {
+            return;
+        }
+        List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getPresentLabel().getClinicals();
+        if (clinicals.size() > 0) {
+            Clinical clinical = clinicals.get(0);
+            String clinicalName = clinical.getName();
+            if (StringUtil.isNotBlank(clinicalName)) {
+                Clinic clinic = clinicFacade.clinicCache(clinicalName);
+                if (clinic != null && clinic.getHasAggravate() == 1) {
+                    Modification modification = clinical.getModification();
+                    if (modification == null || (!modification.getName().contains("严重") && !modification.getName().contains("加剧")
+                            && !modification.getName().contains("加重"))) {
+                        status.set("-1");
+                        info.set(clinicalName);
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 44 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0022.java

@@ -0,0 +1,44 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.General;
+import com.lantone.qc.pub.model.entity.GeneralDesc;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0022
+ * @Description :  现病史缺少发病以来一般情况描述
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0022 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        if (presentLabel == null) {
+            status.set("0");
+            return;
+        }
+        List<GeneralDesc> generals = presentLabel.getGenerals();
+        if (generals != null && generals.size() > 0) {
+            status.set("0");
+            return;
+        }
+        List<General> gens = inputInfo.getBeHospitalizedDoc().getPresentLabel().getGens();
+        if (gens != null && gens.size() > 0) {
+            status.set("0");
+            return;
+        }
+
+    }
+}

+ 47 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0023.java

@@ -0,0 +1,47 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Lis;
+import com.lantone.qc.pub.model.entity.Medicine;
+import com.lantone.qc.pub.model.entity.Operation;
+import com.lantone.qc.pub.model.entity.Pacs;
+import com.lantone.qc.pub.model.entity.Treat;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0023
+ * @Description :  现病史未描述入院前有无相关治疗检查
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0023 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        if (presentLabel == null) {
+            return;
+        }
+        List<Lis> lises = presentLabel.getLises();
+        List<Pacs> pacses = presentLabel.getPacses();
+        List<Treat> treats = presentLabel.getTreats();
+        List<Operation> operations = presentLabel.getOperations();
+        List<Medicine> medicines = presentLabel.getMedicines();
+        if (lises.size() == 0 && pacses.size() == 0 && treats.size() == 0 && operations.size() == 0 && medicines.size() == 0) {
+            status.set("-1");
+        }
+        //添加硬规则
+        if (inputInfo.getBeHospitalizedDoc().getPresentLabel().getText().contains("未予以重视")) {
+            status.set("0");
+        }
+    }
+}

+ 55 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0024.java

@@ -0,0 +1,55 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Wound;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 外伤史未填写
+ * @author: rengb
+ * @time: 2020/3/10 13:53
+ */
+@Component
+public class BEH0024 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        //台州结构化
+        Map<String, String> behStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(behStructureMap.get("手术外伤史"))) {
+            status.set("0");
+            return;
+        }
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        /* 如果既往史为空或者既往史文本为空,则不报错 */
+        if (pastLabel == null || StringUtil.isBlank(pastLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        List<Wound> wounds = pastLabel.getWounds();
+        if (ListUtil.isNotEmpty(wounds)) {
+            if (wounds.stream().map(i -> i.getName()).filter(i -> StringUtil.isNotBlank(i)).count() > 0) {
+                status.set("0");
+                return;
+            }
+        }
+        //硬规则匹配
+        String pastLabelText = pastLabel.getText();
+        if (pastLabelText.contains("外伤") || pastLabelText.contains("详见原病历")) {
+            status.set("0");
+        }
+    }
+}

+ 57 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0029.java

@@ -0,0 +1,57 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.entity.Vaccinate;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 预防接种史未填写
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0029 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        //台州结构化
+        Map<String, String> structureMap = beHospitalizedDoc.getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("预防接种史"))) {
+            status.set("0");
+            return;
+        }
+        PastLabel pastLabel = beHospitalizedDoc.getPastLabel();
+        /* 如果既往史为空或者既往史文本为空,则不报错 */
+        if (pastLabel == null || StringUtil.isBlank(pastLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        String pastText = pastLabel.getText();
+        if (pastText.contains("详见原病历") || pastText.contains("预防接种史")) {
+            status.set("0");
+            return;
+        }
+        List<Vaccinate> vaccinates = pastLabel.getVaccinates();
+        if (ListUtil.isNotEmpty(vaccinates)) {
+            if (vaccinates.stream().map(i -> i.getName()).filter(i -> StringUtil.isNotBlank(i)).count() > 0) {
+                status.set("0");
+            }
+        }
+    }
+
+}

+ 62 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0031.java

@@ -0,0 +1,62 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.ListUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 慢病史未填写
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0031 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("高血压"))) {
+            status.set("0");
+            return;
+        }
+
+        if (ListUtil.isNotEmpty(
+                CatalogueUtil.filterDiagsByNature(
+                        inputInfo.getBeHospitalizedDoc().getPastLabel().getDiags(),
+                        "chronic",
+                        "1"
+                )
+        )) {
+            status.set("0");
+        }
+        //硬规则匹配
+        String text = inputInfo.getBeHospitalizedDoc().getPastLabel().getText();
+        if (StringUtils.isNotEmpty(text)) {
+            List<String> words = Lists.newArrayList("高血压", "糖尿病", "阿尔茨海默病", "帕金森", "冠心病心律失常型"
+                    , "冠状动脉性心脏病", "冠状动脉粥样硬化性心脏病", "慢性肾炎综合征", "肾病", "慢性肾衰竭", "肾功能异常", "哮喘"
+                    , "肺结核", "腹膜透析", "慢性阻塞性肺病", "精神分裂症", "分裂情感性精神病", "双相情感障碍,目前为缓解状态", "前列腺增生"
+                    , "高脂血症", "高低密度脂蛋白胆固醇血症", "高胆固醇血症", "高甘油三酯血症", "骨质疏松", "慢性乙型病毒性肝炎"
+                    , "慢性庚型肝炎", "慢性肝炎", "慢性丁型肝炎", "慢性病毒性肝炎", "慢性丙型病毒性肝炎", "酒精性肝病", "脂肪肝"
+                    , "肝硬化", "肝恶性肿瘤", "肝恶性细胞瘤", "肝病", "类风湿性关节炎", "心脑血管", "内分泌");
+            for (String word : words) {
+                if (text.contains(word)) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+    }
+
+}

+ 47 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0032.java

@@ -0,0 +1,47 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 疾病名未标引号
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0032 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            return;
+        }
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        List<Diag> diags = pastLabel.getDiags();
+        if (ListUtil.isEmpty(diags)) {
+            return;
+        }
+        List<String> wtDiagNames = CatalogueUtil.noInQuotes(
+                diags.stream().filter(diag -> diag.getNegative() == null).map(i -> i.getHospitalDiagName()).filter(i -> StringUtil.isNotEmpty(i)).distinct().collect(Collectors.toList()),
+                pastLabel.getText().replace("“","\"").replace("”","\"")
+        );
+        if (ListUtil.isNotEmpty(wtDiagNames)) {
+            status.set("-1");
+            for (String wtDiagName : wtDiagNames) {
+                info.set(info.get() + wtDiagName + " ");
+            }
+        }
+    }
+
+}

+ 54 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0034.java

@@ -0,0 +1,54 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.Operation;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 手术名称未标引号
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0034 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            return;
+        }
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        List<Operation> operations = pastLabel.getOperations();
+        if (ListUtil.isEmpty(operations)) {
+            return;
+        }
+        List<String> wtOperationNames = CatalogueUtil.noInQuotes(
+                operations.stream()
+                        .filter(i ->
+                                i != null && StringUtil.isNotBlank(i.getName()) && i.getNegative() == null
+                                        && !"手术史".equals(i.getName())  && !"手术".equals(i.getName()) && !"手术治疗".equals(i.getName())
+                        )
+                        .map(i -> i.getName())
+                        .distinct()
+                        .collect(Collectors.toList()),
+                pastLabel.getText().replace("“","\"").replace("”","\"")
+        );
+        if (ListUtil.isNotEmpty(wtOperationNames)) {
+            status.set("-1");
+            for (String wtOperationName : wtOperationNames) {
+                info.set(info.get() + wtOperationName + " ");
+            }
+        }
+    }
+
+}

+ 54 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0035.java

@@ -0,0 +1,54 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.Allergy;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 过敏药物未标引号
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0035 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            return;
+        }
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        List<Allergy> allergies = pastLabel.getAllergies();
+        if (ListUtil.isEmpty(allergies)) {
+            return;
+        }
+
+        List<String> wtAmNames = CatalogueUtil.noInQuotes(
+                allergies.stream().filter(
+                        i -> i != null && StringUtil.isNotBlank(i.getName()) && i.getNegative() == null
+                                && i.getAllergyMedicine() != null && StringUtil.isNotBlank(i.getAllergyMedicine().getName()))
+                        .map(i -> i.getAllergyMedicine().getName()).distinct().collect(Collectors.toList()),
+                pastLabel.getText()
+        );
+        if(wtAmNames.contains("止痛片")){
+            return;
+        }
+        if (ListUtil.isNotEmpty(wtAmNames)) {
+            status.set("-1");
+            for (String wtAmName : wtAmNames) {
+                info.set(info.get() + wtAmName + " ");
+            }
+        }
+    }
+
+}

+ 59 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0039.java

@@ -0,0 +1,59 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Allergy;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description: 食物过敏史描述不完整
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0039 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        if (pastLabel == null) {
+            return;
+        }
+        String pastText = pastLabel.getText();
+        if (StringUtil.isNotBlank(pastText) && pastText.contains("食物过敏史")) {
+            return;
+        }
+        List<Allergy> allergies = pastLabel.getAllergies();
+        if (ListUtil.isEmpty(allergies)) {
+            return;
+        }
+        for (Allergy allergy : allergies) {
+            if (allergy == null
+                    || StringUtil.isBlank(allergy.getName())
+                    || allergy.getAllergyFood() == null
+                    || StringUtil.isBlank(allergy.getAllergyFood().getName())) {
+                continue;
+            }
+            if ((allergy.getNegative() == null || StringUtil.isBlank(allergy.getNegative().getName()))
+                    && (allergy.getAllergyFood().getPd() == null || StringUtil.isBlank(allergy.getAllergyFood().getPd().getName()))
+                    && (allergy.getAllergyFood().getDegree() == null || StringUtil.isBlank(allergy.getAllergyFood().getDegree().getName()))
+                    && (allergy.getAllergyFood().getAllergyDesc() == null || StringUtil.isBlank(allergy.getAllergyFood().getAllergyDesc().getName()))) {
+                info.set(info.get() + allergy.getAllergyFood().getName() + " ");
+            }
+        }
+        if (StringUtil.isNotBlank(info.get())) {
+            status.set("-1");
+        }
+    }
+
+}

+ 69 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0043.java

@@ -0,0 +1,69 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Address;
+import com.lantone.qc.pub.model.label.PersonalLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * @Description: 居住地未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0043 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        //台州结构化
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("联系地址")) || StringUtils.isNotEmpty(structureMap.get("现住址"))) {
+            status.set("0");
+            return;
+        }
+
+        PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
+        if (personalLabel == null) {
+            status.set("0");
+            return;
+        }
+        String text = personalLabel.getText();
+        if (StringUtil.isBlank(text) || text.contains("居住") || text.contains("生长") || text.contains("生活")
+                || text.contains("详见原病历")) {
+            status.set("0");
+            return;
+        }
+        List<Address> addresses = personalLabel.getAddresses();
+        if (ListUtil.isNotEmpty(addresses)) {
+            long count = addresses.stream().filter(i -> {
+                boolean flag = false;
+                if (i != null && StringUtil.isNotBlank(i.getName())) {
+                    if (i.getName().indexOf("居住") > -1) {
+                        flag = true;
+                    } else {
+                        Pattern pattern = Pattern.compile("[\\s\\S]*(居住|生长)[\\s\\S]{0,5}" + i.getName() + "[\\s\\S]*");
+                        flag = pattern.matcher(text).matches();
+                    }
+                }
+                return flag;
+            }).count();
+            if (count > 0) {
+                status.set("0");
+            }
+        }
+    }
+
+}

+ 50 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0044.java

@@ -0,0 +1,50 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.EpidemicArea;
+import com.lantone.qc.pub.model.label.PersonalLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Description: 疫区接触史未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0044 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            status.set("0");
+            return;
+        }
+        //台州结构化
+        Map<String, String> structureMap_beh = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if(StringUtils.isNotEmpty(structureMap_beh.get("疫区居留史"))){
+            status.set("0");
+            return;
+        }
+        PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
+        if (personalLabel == null || StringUtil.isBlank(personalLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        String personalText = personalLabel.getText();
+        if (personalText.contains("详见原病历")) {
+            status.set("0");
+            return;
+        }
+        EpidemicArea epidemicArea = personalLabel.getEpidemicArea();
+        if (epidemicArea != null && StringUtil.isNotBlank(epidemicArea.getName())) {
+            status.set("0");
+        }
+    }
+
+}

+ 51 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0046.java

@@ -0,0 +1,51 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Smoking;
+import com.lantone.qc.pub.model.label.PersonalLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Description: 吸烟史未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0046 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        //台州结构化
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("吸烟"))) {
+            status.set("0");
+            return;
+        }
+        PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
+        if (personalLabel == null) {
+            status.set("0");
+            return;
+        }
+        String personalText = personalLabel.getText();
+        if (StringUtil.isNotBlank(personalText) && (personalText.contains("偶有") || personalText.contains("烟")
+                || personalText.contains("详见原病历"))) {
+            status.set("0");
+            return;
+        }
+        Smoking smoking = personalLabel.getSmoking();
+        if (smoking != null && StringUtil.isNotBlank(smoking.getName())) {
+            status.set("0");
+        }
+    }
+
+}

+ 51 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0050.java

@@ -0,0 +1,51 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Smoking;
+import com.lantone.qc.pub.model.entity.Usage;
+import com.lantone.qc.pub.model.label.PersonalLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 吸烟史患者描述不规范
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0050 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            status.set("0");
+            return;
+        }
+        PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
+        if (personalLabel == null){
+            status.set("0");
+            return;
+        }
+        String personalText = personalLabel.getText();
+        if (StringUtil.isNotBlank(personalText) && personalText.contains("偶有")){
+            status.set("0");
+            return;
+        }
+        Smoking smoking = personalLabel.getSmoking();
+        if (smoking == null
+                || StringUtil.isBlank(smoking.getName())
+                || (smoking.getNegative() != null && StringUtil.isNotBlank(smoking.getNegative().getName()))
+                || (smoking.getPd() != null && StringUtil.isNotBlank(smoking.getPd().getName()))
+                || (smoking.getUsage() != null && StringUtil.isNotBlank(smoking.getUsage().getName()))) {
+            status.set("0");
+        }
+        //出现用量实体,即认为规范
+        Usage usage = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getUsage();
+        if (usage != null && StringUtil.isNotEmpty(usage.getName())) {
+            status.set("0");
+        }
+    }
+
+}

+ 51 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0051.java

@@ -0,0 +1,51 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Drinking;
+import com.lantone.qc.pub.model.entity.Usage;
+import com.lantone.qc.pub.model.label.PersonalLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 饮酒史患者描述不规范
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0051 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
+        if (personalLabel == null) {
+            status.set("0");
+            return;
+        }
+        String pastText = personalLabel.getText();
+        if (StringUtil.isNotBlank(pastText) && pastText.contains("饮酒")) {
+            status.set("0");
+            return;
+        }
+        Drinking drinking = personalLabel.getDrinking();
+        if (drinking == null
+                || StringUtil.isBlank(drinking.getName())
+                || (drinking.getNegative() != null && StringUtil.isNotBlank(drinking.getNegative().getName()))
+                || (drinking.getPd() != null && StringUtil.isNotBlank(drinking.getPd().getName()))
+                || (drinking.getUsage() != null && StringUtil.isNotBlank(drinking.getUsage().getName()))) {
+            status.set("0");
+        }
+        //出现用量实体,即认为规范
+        Usage usage = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getUsage();
+        if (usage != null && StringUtil.isNotEmpty(usage.getName())) {
+            status.set("0");
+        }
+    }
+
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0052.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 婚育史未填写
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0052 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            status.set("0");
+            return;
+        }
+        if(inputInfo.getBeHospitalizedDoc().getStructureMap().get("婚姻") != null
+                && inputInfo.getBeHospitalizedDoc().getStructureMap().get("婚姻").contains("未婚")){
+            status.set("0");
+            return;
+        }
+        if (inputInfo.getBeHospitalizedDoc().getMaritalLabel() == null
+                || StringUtil.isNotBlank(inputInfo.getBeHospitalizedDoc().getMaritalLabel().getText())) {
+            status.set("0");
+        }
+    }
+
+}

+ 60 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0053.java

@@ -0,0 +1,60 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+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.model.entity.Marryiage;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Description: 结婚年龄未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0053 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (beHospitalizedDoc == null) {
+            status.set("0");
+            return;
+        }
+        //先取一次结构化数据
+        Map<String, String> beHospitalizedStructureMap = beHospitalizedDoc.getStructureMap();
+        String marryiAgeStr = beHospitalizedStructureMap.get("结婚年龄");
+        if (StringUtil.isNotBlank(marryiAgeStr)) {
+            status.set("0");
+            return;
+        }
+        //硬规则 匹配未婚
+        String marry = beHospitalizedDoc.getStructureMap().get(Content.marry);
+        MaritalLabel maritalLabel = beHospitalizedDoc.getMaritalLabel();
+        if (maritalLabel == null || StringUtil.isBlank(maritalLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        String maritalText = maritalLabel.getText();
+        if ("未婚".equals(marry) || maritalText.contains("未婚") || maritalText.contains("详见原病历")) {
+            status.set("0");
+            return;
+        }
+        if (beHospitalizedDoc.getMaritalLabel() == null
+                || StringUtil.isBlank(beHospitalizedDoc.getMaritalLabel().getText())) {
+            status.set("0");
+        }
+
+        Marryiage marryiage = beHospitalizedDoc.getMaritalLabel().getMarryiage();
+        if (marryiage != null && StringUtil.isNotBlank(marryiage.getName())) {
+            status.set("0");
+        }
+    }
+
+}

+ 102 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0058.java

@@ -0,0 +1,102 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+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.model.entity.Family;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * @Description: 子女数量情况未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0058 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        //硬规则 匹配未育
+        String marry = beHospitalizedDoc.getStructureMap().get(Content.marry);
+        MaritalLabel maritalLabel = beHospitalizedDoc.getMaritalLabel();
+        if (maritalLabel == null) {
+            status.set("0");
+            return;
+        }
+        String maritalText = maritalLabel.getText();
+        if (StringUtil.isBlank(maritalText)) {
+            status.set("0");
+            return;
+        } else {
+            String regex = ".*\\d?子\\d?女.*";
+            boolean flag = maritalText.matches(regex);
+            regex = ".*\\d+-\\d+-\\d+-0.*";
+            boolean matches = maritalText.matches(regex);
+            if (flag || matches) {
+                status.set("0");
+                return;
+            }
+        }
+        //硬规则 匹配未育
+        if ("未婚".equals(marry)) {
+            status.set("0");
+            return;
+        }
+        if (StringUtil.isNotBlank(maritalText)) {
+            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生", "0子0女"
+                    , "0-0-0-0", "详见原病历");
+            for (String word : words) {
+                if (maritalText.contains(word)) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+        Map<String, String> structureMap = beHospitalizedDoc.getStructureMap();
+        String familyMembersHealth = structureMap.get("家庭成员健康情况");
+        List<Family> familyList = Lists.newArrayList();
+        List<Family> familiesFl = inputInfo.getBeHospitalizedDoc().getFamilyLabel().getFamilies();
+        List<Family> familiesMl = inputInfo.getBeHospitalizedDoc().getMaritalLabel().getFamily();
+        if (ListUtil.isNotEmpty(familiesFl)) {
+            familyList.addAll(familiesFl);
+        }
+        if (ListUtil.isNotEmpty(familiesMl)) {
+            familyList.addAll(familiesMl);
+        }
+        Pattern p = Pattern.compile("[儿子女]");
+        if (StringUtil.isNotBlank(familyMembersHealth)) {
+            if (p.matcher(familyMembersHealth).find()) {
+                status.set("0");
+                return;
+            }
+        }
+        long count = familyList
+                .stream()
+                .filter(
+                        i -> i != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && StringUtil.isContainNumber(i.getName())
+                                && p.matcher(i.getName()).find()
+                )
+                .count();
+        if (count > 0) {
+            status.set("0");
+        }
+    }
+
+}

+ 54 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0068.java

@@ -0,0 +1,54 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.MenstrualLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : BEH0068
+ * @Description : 月经史未描述白带情况
+ * @Author : 胡敬
+ * @Date: 2020-03-11 14:49
+ */
+@Component
+public class BEH0068 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        if (inputInfo.getBeHospitalizedDoc().getStructureMap().get("性别") == null
+                || inputInfo.getBeHospitalizedDoc().getStructureMap().get("性别").contains("男")) {
+            status.set("0"); //如果性别是男,就不报错
+        } else if (inputInfo.getBeHospitalizedDoc().getMenstrualLabel() == null
+                || inputInfo.getBeHospitalizedDoc().getMenstrualLabel().getText().contains("null")) {
+            status.set("0");
+        } else {
+            Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            if (StringUtil.isNotBlank(structureMap.get("白带"))) {
+                status.set("0");
+                return;
+            }
+            if (inputInfo.getBeHospitalizedDoc().getMenstrualLabel() != null) {
+                MenstrualLabel menstrualLabel = inputInfo.getBeHospitalizedDoc().getMenstrualLabel();
+                String text = menstrualLabel.getText();
+                if (StringUtil.isNotBlank(text) && (text.contains("未行经") || text.contains("未来潮") || text.contains("绝经"))) {
+                    status.set("0");
+                    return;
+                }
+                if (menstrualLabel.getLeukorrheas() == null) {
+                    return;
+                }
+                if (menstrualLabel.getLeukorrheas().size() > 0) {
+                    status.set("0");
+                }
+            }
+        }
+    }
+}

+ 70 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0070.java

@@ -0,0 +1,70 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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;
+import com.lantone.qc.pub.model.entity.Family;
+import com.lantone.qc.pub.model.label.FamilyLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName : BEH0070
+ * @Description : 家族史未描述是否有家族性遗传病史及传染病史
+ * @Author : 胡敬
+ * @Date: 2020-03-11 15:09
+ */
+@Component
+public class BEH0070 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        String familyText = structureMap.get("家族史");
+        if (StringUtil.isNotBlank(familyText)) {
+            familyText = StringUtil.removeBlank(familyText);
+            if (familyText.contains("家族遗传病") || familyText.contains("结核")) {
+                status.set("0");
+                return;
+            }
+        }
+        if (inputInfo.getBeHospitalizedDoc().getFamilyLabel() != null) {
+            FamilyLabel familyLabel = inputInfo.getBeHospitalizedDoc().getFamilyLabel();
+            List<Family> families = familyLabel.getFamilies();
+            if (ListUtil.isEmpty(families)) {
+                status.set("0");
+                return;
+            }
+            boolean isFindGeneticDiseaseKeyword = false, isFindDiagInfectious = false;
+            for (Family family : families) {
+                if (family.getGeneticDiseaseKeyword() != null && StringUtil.isNotBlank(family.getGeneticDiseaseKeyword().getName())) {
+                    isFindGeneticDiseaseKeyword = true;
+                }
+                if (family.getDiagInfectious() != null && StringUtil.isNotBlank(family.getDiagInfectious().getName())) {
+                    isFindDiagInfectious = true;
+                }
+                if (family.getDiags() != null) {
+                    List<Diag> diags = family.getDiags().stream().filter(diag ->
+                            (diag.getHospitalDiagName() != null && diag.getHospitalDiagName().contains("炎"))
+                                    || (diag.getHospitalDiagName() != null && diag.getHospitalDiagName().contains("核"))).collect(Collectors.toList());
+                    if (diags.size() > 0) {
+                        isFindDiagInfectious = true;
+                    }
+                }
+                if (isFindGeneticDiseaseKeyword || isFindDiagInfectious) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 59 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0072.java

@@ -0,0 +1,59 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Dead;
+import com.lantone.qc.pub.model.entity.Family;
+import com.lantone.qc.pub.model.label.FamilyLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH0072
+ * @Description : 家属有死亡者,未记录死亡原因
+ * @Author : 胡敬
+ * @Date: 2020-03-11 16:44
+ */
+@Component
+public class BEH0072 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getFamilyLabel() != null) {
+            FamilyLabel familyLabel = inputInfo.getBeHospitalizedDoc().getFamilyLabel();
+            if (familyLabel == null) {
+                return;
+            }
+            String familyText = familyLabel.getText();
+            if (StringUtil.isNotBlank(familyText)) {
+                familyText = familyText.substring(0, Math.min(10, familyText.length()));
+                if (familyText.contains("死因") || familyText.contains("原因") || familyText.contains("详")
+                || familyText.contains("因")) {
+                    return;
+                }
+            }
+            List<Family> families = familyLabel.getFamilies();
+            if (ListUtil.isEmpty(families)) {
+                return;
+            }
+            for (Family family : families) {
+                if (family.getDead() != null) {
+                    Dead dead = family.getDead();
+                    if (family.getName().contains("年迈") || dead.getNegative() != null) {
+                        continue;
+                    }
+                    if (dead.getDeadReason() != null || dead.getUnknow() != null) {
+                        return;
+                    } else {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+}

+ 31 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02855.java

@@ -0,0 +1,31 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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;
+
+
+/**
+ * @ClassName : BEH02855
+ * @Description : 过敏史未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-15 16:09
+ */
+@Component
+public class BEH02855 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> bhMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtil.isNotEmpty(bhMap.get("过敏史"))) {
+            status.set("0");
+        }
+    }
+}

+ 66 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02860.java

@@ -0,0 +1,66 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.PD;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH02860
+ * @Description :主诉时间应该为阿拉伯数字
+ * @Author : 胡敬
+ * @Date: 2020-04-29 09:57
+ */
+@Component
+public class BEH02860 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null || StringUtil.isBlank(chiefLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        List<String> arabicNumList = Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7"
+                , "8", "9", "半");
+        List<String> containList = Arrays.asList("零", "一", "二", "三", "四", "五", "六", "七"
+                , "八", "九", "十", "百", "千");
+        List<PD> pds = chiefLabel.getPds();
+        if (ListUtil.isNotEmpty(pds)) {
+            String name = null, value = null;
+            for (PD pd : pds) {
+                name = pd.getName();
+                value = pd.getValue();
+//                if (name.contains("半")) {
+//                    continue;
+//                }
+                for (String num : arabicNumList) {
+                    if (StringUtil.isNotBlank(name) && name.contains(num)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+                for (String word : containList) {
+                    if (StringUtil.isNotBlank(value) && value.contains(word)) {
+                        return;
+                    }
+                    if (StringUtil.isNotBlank(name) && name.contains(word)) {
+                        return;
+                    }
+                }
+            }
+        } else {
+            status.set("0");
+        }
+    }
+}

+ 109 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02887.java

@@ -0,0 +1,109 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.Diag;
+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.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName : BEH0738
+ * @Description: 患者病情前后描述不一致
+ * @author: 胡敬
+ * @time: 2020-05-08 16:45
+ */
+@Component
+public class BEH02887 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        List<Diag> presentDiags = null;
+        List<Diag> pastDiags = null;
+        List<Diag> initialDiags = null;
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        DiagLabel initialDiagLabel = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel();
+        if (presentLabel != null) {
+            presentDiags = presentLabel.getDiags();
+        }
+        if (pastLabel != null) {
+            pastDiags = pastLabel.getDiags();
+        }
+        if (initialDiagLabel != null) {
+            initialDiags = initialDiagLabel.getDiags();
+        }
+
+        if (presentDiags != null && pastDiags != null){
+            if (checkDiagDiff(presentDiags,pastDiags)){
+                status.set("-1");
+                return;
+            }
+        }
+
+        if (presentDiags != null && initialDiags != null){
+            if (checkDiagDiff(presentDiags,initialDiags)){
+                status.set("-1");
+                return;
+            }
+        }
+
+        if (pastDiags != null && initialDiags != null){
+            if (checkDiagDiff(pastDiags,initialDiags)){
+                status.set("-1");
+            }
+        }
+    }
+
+    /**
+     * 检查两个Diag列表是否前后描述不一致
+     * @param firstDiags
+     * @param secondDiags
+     * @return
+     */
+    private boolean checkDiagDiff(List<Diag> firstDiags, List<Diag> secondDiags) {
+        String firstDiagName = null, secondDiagName = null;
+        for (Diag firstDiag : firstDiags) {
+            firstDiagName = firstDiag.getHospitalDiagName();
+            if (StringUtil.isBlank(firstDiagName)) {
+                continue;
+            }
+            for (Diag secondDiag : secondDiags) {
+                secondDiagName = secondDiag.getHospitalDiagName();
+                if (StringUtil.isBlank(secondDiagName)) {
+                    continue;
+                }
+                if (firstDiagName.equals(secondDiagName)) {
+                    boolean checkNeg = checkNeg(firstDiag, secondDiag);
+                    if (!checkNeg) {
+                        //如果两个Diag一个为否定,一个不为否定,返回true
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    private boolean checkNeg(Diag firstDiag, Diag secondDiag) {
+        if (firstDiag.getNegative() == null && secondDiag.getNegative() == null) {
+            return true;
+        } else {
+            return firstDiag.getNegative() != null && secondDiag.getNegative() != null;
+        }
+    }
+
+
+}

+ 65 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02902.java

@@ -0,0 +1,65 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.PD;
+import com.lantone.qc.pub.model.entity.Pacs;
+import com.lantone.qc.pub.model.label.PacsLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH02902
+ * @Description : 辅助检查未注明地点
+ * @Author : 胡敬
+ * @Date: 2020-05-28 09:56
+ */
+@Component
+public class BEH02902 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+
+        PacsLabel pacsLabel = inputInfo.getBeHospitalizedDoc().getPacsLabel();
+        if (pacsLabel == null || StringUtil.isBlank(pacsLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        boolean findPlace = false;
+        String pacsText = pacsLabel.getText();
+        List<Pacs> pacses = pacsLabel.getPacses();
+        for (Pacs pacs : pacses) {
+            /* 时间为入院检查的时间,模型输出处理后结构为 name为空,pd不为空 */
+            if (pacs.getName() == null && pacs.getPd() != null) {
+                /* 模型先找到时间实体,找到后再从这个时间实体开始,往前往后找 */
+                PD pd = pacs.getPd();
+                String name = pd.getName();
+                int timeIndex = pacsText.indexOf(name);
+                String beforeTimeText = pacsText.substring(Math.max(timeIndex - 5, 0), timeIndex);
+                String afterTimeText = pacsText.substring(timeIndex + name.length(), timeIndex + name.length() + 10);
+                if (beforeTimeText.contains("院") || afterTimeText.contains("院")) {
+                    findPlace = true;
+                    break;
+                }
+            }
+        }
+
+        /* 如果模型没找到时间实体,则直接取辅助检查前20个字,判断有没有院字 */
+        if (!findPlace) {
+            String prefixText = pacsText.substring(0, Math.min(20, pacsText.length()));
+            if (prefixText.contains("院")) {
+                findPlace = true;
+            }
+        }
+
+        if (findPlace) {
+            status.set("0");
+        }
+    }
+}

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02903.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Pacs;
+import com.lantone.qc.pub.model.label.PacsLabel;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH02903
+ * @Description : 辅助检查未注明时间
+ * @Author : 胡敬
+ * @Date: 2020-05-28 09:56
+ */
+@Component
+public class BEH02903 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+
+        PacsLabel pacsLabel = inputInfo.getBeHospitalizedDoc().getPacsLabel();
+        if (pacsLabel == null) {
+            status.set("0");
+            return;
+        }
+
+        List<Pacs> pacses = pacsLabel.getPacses();
+        if (pacses != null && pacses.size() > 0) {
+            for (Pacs pacs : pacses) {
+                if (pacs.getName() == null && pacs.getPd() == null) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 124 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02909.java

@@ -0,0 +1,124 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.GeneralDesc;
+import com.lantone.qc.pub.model.entity.Medicine;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName : BEH02909
+ * @Description : 目前使用药物情况与现病史描述不一致
+ * 两者都不为空
+ *现病史中出现的药去目前使用药物情况找,如果找不到就报
+ * @Author : 胡敬
+ * @Date: 2020-06-11 16:10
+ */
+@Component
+public class BEH02909 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        String drugsCurrentlyInUse = inputInfo.getBeHospitalizedDoc().getStructureMap().get("长期用药");
+        drugsCurrentlyInUse += inputInfo.getBeHospitalizedDoc().getStructureMap().get("外院用药");
+        if (StringUtil.isBlank(drugsCurrentlyInUse)) {
+            status.set("0");
+            return;
+        }
+
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        if (presentLabel == null) {
+            status.set("0");
+            return;
+        }
+        List<String> drugFromPresent = new ArrayList<>();
+        List<GeneralDesc> generals = presentLabel.getGenerals();
+        if (generals.size() > 0) {
+            String presentText = presentLabel.getText();
+            List<Medicine> medicines = presentLabel.getMedicines();
+            /* 取现病史中一般情况之后的药品名称 */
+            if (StringUtil.isNotBlank(presentText) && medicines != null && medicines.size() > 0) {
+                String lastGeneral = generals.get(generals.size() - 1).getName();
+                int lastGeneralIndex = presentText.lastIndexOf(lastGeneral);
+                for (Medicine medicine : medicines) {
+                    /* 现病史中一般情况之后的药品名称,并且不包含不详 */
+                    int medicine_index = presentText.indexOf(medicine.getName());
+                    if (medicine_index > lastGeneralIndex && !medicine.getName().contains("不详")) {
+                        drugFromPresent.add(medicine.getName().replaceAll("[“”药物晨晚]",""));
+                    }
+                }
+            }
+        }
+        if (drugFromPresent.size() == 0) {
+            status.set("0");
+        } else {
+            String infoStr = "";
+            int matchSum = 0;
+            for (String drug : drugFromPresent) {
+                if (drugsCurrentlyInUse.contains(drug)) {
+                    matchSum++;
+                } else {
+                    infoStr = concatInfo(infoStr,drug);
+                }
+            }
+            info.set(infoStr);
+            if (matchSum == drugFromPresent.size()) {
+                status.set("0");
+            }
+        }
+    }
+
+    private String concatInfo(String infoStr, String drug) {
+        if (StringUtil.isBlank(infoStr)) {
+            infoStr += drug;
+        } else {
+            if (!infoStr.contains(drug)) {
+                infoStr += "," + drug;
+            }
+        }
+        return infoStr;
+    }
+
+    private List<String> getDrug(String drugsCurrentlyInUse) {
+        List<String> drugs = new ArrayList<>();
+        String medicine = "药物名称", usage = "用法", continueUse = "本次住院是否继续使用";
+        while (drugsCurrentlyInUse.length() > 0) {
+            if (drugsCurrentlyInUse.contains(medicine) && drugsCurrentlyInUse.contains(usage) && drugsCurrentlyInUse.contains(continueUse)) {
+                int medicineIndex = drugsCurrentlyInUse.indexOf(medicine);
+                int usageIndex = drugsCurrentlyInUse.indexOf(usage);
+                int continueUseIndex = drugsCurrentlyInUse.indexOf(continueUse);
+                String drug = drugsCurrentlyInUse.substring(medicineIndex + medicine.length() + 1, usageIndex);
+                if (StringUtil.isNotBlank(drug)) {
+                    drug = StringUtil.removeBlank(drug);
+                    drugs.add(drug);
+                }
+                drugsCurrentlyInUse = drugsCurrentlyInUse.substring(continueUseIndex + continueUse.length() + 1);
+            } else {
+                break;
+            }
+        }
+        return drugs;
+    }
+
+    private List<String> getDrugFromPresent(List<Medicine> medicines) {
+        List<String> drugs = new ArrayList<>();
+        String name;
+        for (Medicine medicine : medicines) {
+            name = medicine.getName();
+            if (StringUtil.isNotBlank(name)) {
+                drugs.add(name.replaceAll("[“”\"]", ""));
+            }
+        }
+        return drugs;
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02918.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : BEH02918
+ * @Description :  体格检查面容未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02918 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (beHospitalStructureMap.containsKey("面容") && StringUtil.isBlank(beHospitalStructureMap.get("面容"))) {
+            status.set("-1");
+        }
+    }
+}

+ 35 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02978.java

@@ -0,0 +1,35 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : BEH02978
+ * @Description : 药物过敏史描述与病案首页不一致(结构化数据)
+ * @Author : 楼辉荣
+ * @Date: 2020-06-20 15:00
+ */
+@Component
+public class BEH02978 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getFirstPageRecordDoc() == null) {
+            return;
+        }
+        String bhAllergy = inputInfo.getBeHospitalizedDoc().getStructureMap().get("过敏史");
+        String fipAllergy = inputInfo.getFirstPageRecordDoc().getStructureMap().get("过敏药物");
+        if (StringUtil.isBlank(bhAllergy) || StringUtil.isBlank(fipAllergy)){
+            return;
+        }
+
+        if (!bhAllergy.equals(fipAllergy)){
+            status.set("-1");
+        }
+    }
+}

+ 192 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02980.java

@@ -0,0 +1,192 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.alibaba.fastjson.JSONArray;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
+import com.lantone.qc.kernel.structure.ai.ModelAI;
+import com.lantone.qc.pub.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.Arrays;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH02980
+ * @Description : 病历前后描述不一致
+ * @Author : Mark
+ * @Date: 2020-06-23 11:02
+ */
+@Component
+public class BEH02980 extends QCCatalogue {
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
+
+    private List<String> containList = Arrays.asList("脑萎缩", "慢性", "纤颤", "高血压", "糖尿", "冠状", "冠心病", "支架", "起搏器", "房颤", "风湿");
+    private List<String> filterList = Arrays.asList("心脏病", "低血糖", "急性", ";", "门脉高压症", "高尿酸血症", "高脂血症");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        DiagLabel initialDiagLabel = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel();
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+
+        List<String> pos_diags = new ArrayList<>();
+        List<String> neg_diags = new ArrayList<>();
+        //现病史需要取一般情况之后疾病
+        if (presentLabel != null) {
+            List<GeneralDesc> generals = presentLabel.getGenerals();
+            if (generals.size() > 0) {
+                String presentText = presentLabel.getText();
+                List<Diag> presentDiags = presentLabel.getDiags();
+                /* 取现病史中一般情况之后的疾病名称 */
+                if (StringUtil.isNotBlank(presentText) && presentDiags.size() > 0) {
+                    String lastGeneral = generals.get(generals.size() - 1).getName();
+                    int lastGeneralIndex = presentText.indexOf(lastGeneral);
+                    for (Diag presentDiag : presentDiags) {
+                        if (presentDiag.getNegative() != null || presentDiag.getHospitalDiagName().contains("否认")) {
+                            continue;
+                        }
+                        /* 现病史中一般情况之后的疾病名称 */
+                        if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
+                            if (isContains(presentDiag.getHospitalDiagName()) && !isFilter(presentDiag.getHospitalDiagName())) {
+                                String dgname = presentDiag.getHospitalDiagName();
+                                if (presentDiag.getNegative()==null) {
+                                    if (!pos_diags.contains(dgname)) {
+                                        pos_diags.add(dgname);
+                                    }
+                                }
+                                else {
+                                    if (!neg_diags.contains(dgname)) {
+                                        neg_diags.add(dgname);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+
+        if (pastLabel != null && StringUtils.isNotEmpty(pastLabel.getText())) {
+            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("否认");
+                diag.setNegative(negative);
+                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("否认");
+                diag.setNegative(negative);
+                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);
+        }
+
+        String infoStr = "";
+        int matchSum = 0;
+        ModelAI modelAI = new ModelAI();
+
+        for (String negdiag : neg_diags) {
+            JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(negdiag, pos_diags, false
+                    , "diagnose", chiefPresentSimilarityServiceClient);
+            if (jsonArray.size() == 2) {
+                /* 相似度最高症状 */
+                String dgname = jsonArray.getString(0);
+                /* 相似度分数 */
+                double likeRate = jsonArray.getDoubleValue(1);
+                if (likeRate > 0.95) {
+                    matchSum++;
+                    if (StringUtils.isEmpty(infoStr)) {
+                        infoStr = negdiag;
+                    } else {
+                        infoStr = infoStr + "," + negdiag;
+                    }
+                    break;
+                }
+            }
+        }
+        if (matchSum > 0) {
+            status.set("-1");
+            info.set(infoStr);
+        }
+
+    }
+
+
+    private List<String> extract_diags(List<Diag> diags, List<String> pos_diags, List<String> neg_diags ) {
+        List<String> dgs = new ArrayList<>();
+        for (Diag dg:diags) {
+            if (isFilter(dg.getHospitalDiagName())) {
+                String dgname = dg.getHospitalDiagName();
+                if (dg.getNegative() == null) {
+                    if (!pos_diags.contains(dgname)) {
+                        pos_diags.add(dgname);
+                    }
+                } else {
+                    if (!neg_diags.contains(dgname)) {
+                        neg_diags.add(dgname);
+                        dgs.add(dgname);
+                    }
+                }
+            }
+        }
+
+        return dgs;
+    }
+
+    private 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;
+    }
+
+}

+ 51 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH02988.java

@@ -0,0 +1,51 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+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.springframework.stereotype.Component;
+
+/**
+ * @ClassName : BEH02988
+ * @Description :  主诉未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-23 19:35
+ */
+@Component
+public class BEH02988 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        //主诉
+        ChiefLabel chiefLabel = beHospitalizedDoc.getChiefLabel();
+        //现病史
+        PresentLabel presentLabel = beHospitalizedDoc.getPresentLabel();
+        //既往史
+        PastLabel pastLabel = beHospitalizedDoc.getPastLabel();
+        if (beHospitalizedDoc == null) {
+            return;
+        }
+        boolean isCorrectPresent = isPeriod(presentLabel.getText());
+        boolean isCorrectPast = isPeriod(pastLabel.getText());
+        if (StringUtil.isBlank(chiefLabel.getText()) && (isCorrectPresent || isCorrectPast)) {
+            status.set("-1");
+            return;
+        }
+        if (chiefLabel == null && StringUtil.isBlank(chiefLabel.getText())) {
+            status.set("-1");
+        }
+    }
+
+    private boolean isPeriod(String text) {
+        if (StringUtil.isNotBlank(text) && !"。".equals(text)) {
+            return true;
+        }
+        return false;
+    }
+}

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH03002.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+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.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author wangfeng
+ * @Description: 入院时间错误(具体到分)
+ * @date 2020-06-29 11:44
+ */
+@Component
+public class BEH03002 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (structureMap != null) {
+            String dateStr = structureMap.get(Content.admisDate);
+            if (dateStr!=null&&!dateStr.isEmpty()) {
+                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+                try {
+                    String replace = dateStr.replace('/', '-');
+                    Date d = formatter.parse(replace);
+                    status.set("0");
+                } catch (Exception e) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH03003.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+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.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-06-29 15:19
+ */
+@Component
+public class BEH03003 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (structureMap != null) {
+            String dateStr = structureMap.get("记录日期");
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+            try {
+                String replace = dateStr.replace('/', '-');
+                Date d = formatter.parse(replace);
+                status.set("0");
+            } catch (Exception e) {
+                status.set("-1");
+                return;
+            }
+        }
+
+    }
+}

+ 40 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH03005.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author wangfeng
+ * @Description:缺重要脏器疾病史
+ * @date 2020-06-29 15:46
+ */
+@Component
+public class BEH03005 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (structureMap != null) {
+            String[] strs = {"高血压","心脏病","糖尿病","脑血管疾病","呼吸系统疾病","肾脏疾病","肝脏疾病"};
+            for(String s :strs){
+                String s1 = structureMap.get(s).trim();
+                if(s1!=null&&StringUtil.isEmpty(s1)){
+                    status.set("-1");
+                }
+            }
+
+        }
+
+    }
+}

+ 82 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0372.java

@@ -0,0 +1,82 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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.entity.MaritalStatus;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Description: 婚姻状况前后不一致
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0372 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+
+        String basicInfoStatus = inputInfo.getBeHospitalizedDoc().getStructureMap().get("婚姻");
+        String bhbasicInfoStatus = inputInfo.getBeHospitalizedDoc().getStructureMap().get("婚姻状况");
+        if (StringUtil.isBlank(basicInfoStatus) || StringUtil.isBlank(bhbasicInfoStatus)) {
+            status.set("0");
+            return;
+        }
+
+        if (basicInfoStatus.equals(bhbasicInfoStatus)) {
+            status.set("0");
+            return;
+        }
+        String maritalStatus = "";
+        MaritalStatus mts = inputInfo.getBeHospitalizedDoc().getMaritalLabel().getMaritalStatus();
+        if (mts != null && StringUtil.isNotBlank(mts.getName())) {
+            maritalStatus = mts.getName();
+        }
+
+        if (chcekMaritalStatus(basicInfoStatus, maritalStatus)) {
+            status.set("0");
+            return;
+        }
+
+        //无婚育史
+        MaritalLabel maritalLabel = inputInfo.getBeHospitalizedDoc().getMaritalLabel();
+        if (maritalLabel == null || maritalLabel.getText() == null) {
+            status.set("0");
+        }
+    }
+
+    private boolean chcekMaritalStatus(String basicInfoStatus, String maritalStatus) {
+        if (basicInfoStatus.equals(maritalStatus)) {
+            return true;
+        }
+        boolean flag = false;
+        List<String> regxs = Lists.newArrayList(
+                "([\\s\\S]*离[\\s\\S]*婚[\\s\\S]*)|([\\s\\S]*离[\\s\\S]*异[\\s\\S]*)",
+                "([\\s\\S]*已[\\s\\S]*婚[\\s\\S]*)|([\\s\\S]*结[\\s\\S]*婚[\\s\\S]*)|([\\s\\S]*丧[\\s\\S]*偶[\\s\\S]*)",
+                "[\\s\\S]*未[\\s\\S]*婚[\\s\\S]*",
+                "[\\s\\S]*丧[\\s\\S]*偶[\\s\\S]*",
+                "[\\s\\S]*其[\\s\\S]*他[\\s\\S]*"
+        );
+        Pattern pt = null;
+        for (String regx : regxs) {
+            pt = Pattern.compile(regx);
+            if (pt.matcher(basicInfoStatus).find() && pt.matcher(maritalStatus).find()) {
+                flag = true;
+                break;
+            }
+        }
+        return flag;
+    }
+
+}

+ 96 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0375.java

@@ -0,0 +1,96 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.Family;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 配偶健康状况未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0375 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        //硬规则 匹配未婚
+        String marry = inputInfo.getBeHospitalizedDoc().getStructureMap().get(Content.marry);
+        MaritalLabel maritalLabel = inputInfo.getBeHospitalizedDoc().getMaritalLabel();
+        if ("未婚".equals(marry) ||
+                (maritalLabel != null &&
+                (StringUtil.isBlank(maritalLabel.getText())
+                        || maritalLabel.getText().contains("未婚")
+                        || maritalLabel.getText().contains("离婚")
+                        || maritalLabel.getText().contains("离异")
+                        || maritalLabel.getText().contains("已故")
+                        || maritalLabel.getText().contains("丧偶")
+                        || maritalLabel.getText().contains("详见原病历")
+                )
+                )
+        ) {
+            status.set("0");
+            return;
+        }
+        //台州市结构化的
+        Map<String, String> structureMap_beh = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap_beh.get("配偶健康状况"))) {
+            status.set("0");
+            return;
+        }
+        List<Family> familyList = Lists.newArrayList();
+        if (inputInfo.getBeHospitalizedDoc().getFamilyLabel() != null){
+            List<Family> familiesFl = inputInfo.getBeHospitalizedDoc().getFamilyLabel().getFamilies();
+            if (ListUtil.isNotEmpty(familiesFl)) {
+                familyList.addAll(familiesFl);
+            }
+        }
+
+        if (inputInfo.getBeHospitalizedDoc().getMaritalLabel() != null){
+            List<Family> familiesMl = inputInfo.getBeHospitalizedDoc().getMaritalLabel().getFamily();
+            if (ListUtil.isNotEmpty(familiesMl)) {
+                familyList.addAll(familiesMl);
+            }
+        }
+
+
+        Pattern p = Pattern.compile("[配偶]");
+        List<Family> filterFamilies = familyList
+                .stream()
+                .filter(
+                        i -> i != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && p.matcher(i.getName()).find()).collect(Collectors.toList());
+
+        for (Family family : filterFamilies) {
+            if (family.getDead() != null) {
+                status.set("0");
+                return;
+            } else if (family.getHealthCondition() != null && StringUtil.isNotBlank(family.getHealthCondition().getName())) {
+                status.set("0");
+                return;
+            } else if (family.getDiags() != null && family.getDiags().size() > 0) {
+                status.set("0");
+                return;
+            }
+        }
+    }
+
+}

+ 105 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0376.java

@@ -0,0 +1,105 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+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.model.entity.Family;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 子女健康状况未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0376 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        MaritalLabel maritalLabel = beHospitalizedDoc.getMaritalLabel();
+        //台州市结构化的
+        Map<String, String> structureMap_beh = beHospitalizedDoc.getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap_beh.get("子女健康状况"))) {
+            status.set("0");
+            return;
+        }
+        if (maritalLabel == null || StringUtils.isEmpty(maritalLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        //硬规则 匹配未育
+        String marry = structureMap_beh.get(Content.marry);
+        if ("未婚".equals(marry)) {
+            status.set("0");
+            return;
+        }
+        String maritalText = maritalLabel.getText();
+        if (StringUtil.isNotBlank(maritalText)) {
+            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生", "0子0女", "详见原病历");
+            for (String word : words) {
+                if (maritalText.contains(word)) {
+                    status.set("0");
+                    return;
+                }
+            }
+            String regex = ".*\\d+-\\d+-\\d+-0.*";
+            if (maritalText.matches(regex)){
+                status.set("0");
+                return;
+            }
+        }
+        //未婚 无子女
+        if (maritalLabel.getMaritalStatus() != null && maritalLabel.getMaritalStatus().getName().contains("未婚")) {
+            status.set("0");
+            return;
+        }
+        List<Family> familyList = Lists.newArrayList();
+        List<Family> familiesFl = inputInfo.getBeHospitalizedDoc().getFamilyLabel().getFamilies();
+        List<Family> familiesMl = inputInfo.getBeHospitalizedDoc().getMaritalLabel().getFamily();
+        if (ListUtil.isNotEmpty(familiesFl)) {
+            familyList.addAll(familiesFl);
+        }
+        if (ListUtil.isNotEmpty(familiesMl)) {
+            familyList.addAll(familiesMl);
+        }
+
+        Pattern p = Pattern.compile("[儿子女]");
+        List<Family> filterFamilies = familyList
+                .stream()
+                .filter(
+                        i -> i != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && p.matcher(i.getName()).find()).collect(Collectors.toList());
+
+        for (Family family : filterFamilies) {
+            if (family.getDead() != null) {
+                status.set("0");
+                return;
+            } else if (family.getHealthCondition() != null && StringUtil.isNotBlank(family.getHealthCondition().getName())) {
+                status.set("0");
+                return;
+            } else if (family.getDiags() != null && family.getDiags().size() > 0) {
+                status.set("0");
+                return;
+            }
+        }
+    }
+
+}

+ 84 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0378.java

@@ -0,0 +1,84 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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.entity.Family;
+import com.lantone.qc.pub.model.label.FamilyLabel;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 配偶死亡原因未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0378 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        FamilyLabel familyLabel = inputInfo.getBeHospitalizedDoc().getFamilyLabel();
+        MaritalLabel maritalLabel = inputInfo.getBeHospitalizedDoc().getMaritalLabel();
+
+        if (familyLabel == null && maritalLabel == null) {
+            return;
+        }
+        List<Family> familiesFl = null;
+        List<Family> familiesMl = null;
+
+        if (familyLabel != null) {
+            familiesFl = familyLabel.getFamilies();
+            //规则匹配
+            String familyText = familyLabel.getText();
+            if (StringUtil.isNotBlank(familyText) && familyText.contains("自然死亡")) {
+                status.set("0");
+                return;
+            }
+        }
+        if (maritalLabel != null) {
+            familiesMl = maritalLabel.getFamily();
+        }
+        List<Family> familyList = Lists.newArrayList();
+
+        if (familiesFl != null && familiesFl.size() > 0) {
+            familyList.addAll(familiesFl);
+        }
+        if (familiesMl != null && familiesMl.size() > 0) {
+            familyList.addAll(familiesMl);
+        }
+
+        familyList = familyList
+                .stream()
+                .filter(
+                        i -> i != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && i.getName().contains("配偶")
+                                && i.getDead() != null
+                                && StringUtil.isNotBlank(i.getDead().getName())
+                )
+                .collect(Collectors.toList());
+
+        if (familyList.size() > 0) {
+            status.set("-1");
+            long count = familyList
+                    .stream()
+                    .filter(
+                            i -> (i.getDead().getDeadReason() != null && StringUtil.isNotBlank(i.getDead().getDeadReason().getName())) || StringUtil.isNotBlank(i.getDead().getUnknow().getName())
+                    )
+                    .count();
+            if (count > 0) {
+                status.set("0");
+            }
+        }
+    }
+}

+ 92 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0397.java

@@ -0,0 +1,92 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.entity.Family;
+import com.lantone.qc.pub.model.label.FamilyLabel;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 父母健康状况未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0397 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        Map<String, String> structureMap = beHospitalizedDoc.getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("家庭成员健康情况"))) {
+            status.set("0");
+            return;
+        }
+        FamilyLabel familyLabel = beHospitalizedDoc.getFamilyLabel();
+        MaritalLabel maritalLabel = beHospitalizedDoc.getMaritalLabel();
+
+        String familyText = "", maritalText = "";
+        List<Family> familiesFl = null;
+        List<Family> familiesMl = null;
+        if (familyLabel != null) {
+            familyText = familyLabel.getText();
+            familiesFl = familyLabel.getFamilies();
+        }
+        if (maritalLabel != null) {
+            maritalText = maritalLabel.getText();
+            familiesMl = maritalLabel.getFamily();
+        }
+        if (StringUtil.isNotBlank(familyText)){
+            familyText = StringUtil.removeBlank(familyText);
+        }
+        if ((StringUtil.isNotBlank(familyText) && (familyText.contains("父母") || familyText.contains("详见原病历")))
+                || (StringUtil.isNotBlank(maritalText) && (maritalText.contains("父母") || maritalText.contains("详见原病历")))) {
+            status.set("0");
+            return;
+        }
+        List<Family> familyList = Lists.newArrayList();
+        if (familiesFl != null && familiesFl.size() > 0) {
+            familyList.addAll(familiesFl);
+        }
+        if (familiesMl != null && familiesMl.size() > 0) {
+            familyList.addAll(familiesMl);
+        }
+
+        Pattern p = Pattern.compile("[父母爸妈]");
+        List<Family> filterFamilies = familyList
+                .stream()
+                .filter(
+                        i -> i != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && p.matcher(i.getName()).find()).collect(Collectors.toList());
+        for (Family family : filterFamilies) {
+            if (family.getDead() != null) {
+                status.set("0");
+                return;
+            } else if (family.getHealthCondition() != null && StringUtil.isNotBlank(family.getHealthCondition().getName())) {
+                status.set("0");
+                return;
+            } else if (family.getDiags() != null && family.getDiags().size() > 0) {
+                status.set("0");
+                return;
+            }
+        }
+    }
+
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0400.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.PastLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 既往史未填写
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0400 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        if (StringUtil.isBlank(pastLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        List<String> Str = Arrays.asList("咳嗽气喘史", "胸闷心悸史", "腹痛腹泻史", "多饮多尿史", "浮肿少尿史", "尿频尿痛史", "抽搐史", "出血史", "过敏史", "药物过敏史", "传染病史", "外伤手术史", "输血史", "重大疾病史和治疗史");
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        for (String s : Str) {
+            if (structureMap != null && structureMap.containsKey(s)) {
+                status.set("0");
+                return;
+            }
+        }
+
+        if (pastLabel != null && StringUtil.isNotBlank(pastLabel.getText())) {
+            status.set("0");
+        }
+    }
+}

+ 35 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0401.java

@@ -0,0 +1,35 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Collection;
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0401
+ * @Description : 入院记录姓名未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0401 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if(structureMap != null){
+            String name = structureMap.get("姓名");
+            if(CatalogueUtil.isEmpty(name)){
+                status.set("-1");
+            }
+        }
+
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0407.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0407
+ * @Description : 入院记录婚姻未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0407 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if(structureMap != null){
+            String name = structureMap.get("婚姻");
+            if(CatalogueUtil.isEmpty(name)){
+                status.set("-1");
+            }
+        }
+
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0411.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0411
+ * @Description :  入院记录记录日期未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0411 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if(structureMap != null){
+            String name = structureMap.get("记录日期");
+            if(CatalogueUtil.isEmpty(name)){
+                status.set("-1");
+            }
+        }
+
+    }
+}

+ 39 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0412.java

@@ -0,0 +1,39 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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 org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0412
+ * @Description :  入院记录姓名填写错误
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0412 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getFirstPageRecordDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        Map<String, String> firstStructMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+        if (structureMap != null && firstStructMap != null) {
+            String contactAddress_bh = structureMap.get("姓名");
+            String contactAddress_first = firstStructMap.get(Content.name);
+            if (!CatalogueUtil.isEmpty(contactAddress_bh) && !CatalogueUtil.isEmpty(contactAddress_first)) {
+                if (!contactAddress_first.equals(contactAddress_bh)) {
+                    status.set("-1");
+                }
+            }
+        }
+
+    }
+}

+ 65 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0414.java

@@ -0,0 +1,65 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0414
+ * @Description :  入院记录年龄填写错误
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0414 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null
+                && inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getStructureMap() != null) {
+            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            String firstAdmissionAge = firstpageStructureMap.get(Content.age);
+            /* 根据病案首页新生儿出生月数和新生儿出生天数拼接年龄 */
+            String newbornAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
+            String newbornAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
+            String newbornAgeStr = "";
+            int newbornAge = 0;
+            if (StringUtil.isNotBlank(newbornAgeMonths) && StringUtil.isNotBlank(newbornAgeDays)){
+                newbornAgeStr = newbornAgeMonths + newbornAgeDays;
+            }
+            if (StringUtil.isNotBlank(newbornAgeStr)){
+                newbornAge = removalUnit(newbornAgeStr);
+            }
+            String admissionAge = beHospitalStructureMap.get(Content.age);
+            if (StringUtil.isBlank(firstAdmissionAge) || StringUtil.isBlank(admissionAge)) {
+                status.set("0");
+                return;
+            }
+            int firstAdmissionAgeNum = removalUnit(firstAdmissionAge);
+            int admissionAgeNum = removalUnit(admissionAge);
+
+            if (firstAdmissionAgeNum != admissionAgeNum && newbornAge != admissionAgeNum) {
+                status.set("-1");
+            }
+        }
+    }
+
+    private int removalUnit(String admissionAge) {
+        int age = 0;
+        if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
+            admissionAge = admissionAge.replaceAll("[岁天]", "");
+        }
+        admissionAge = admissionAge.replaceAll("[^0-9]","");
+        if (CatalogueUtil.numbersOnly(admissionAge)) {
+            age = Integer.parseInt(admissionAge);
+        }
+        return age;
+    }
+}

+ 38 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0417.java

@@ -0,0 +1,38 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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 org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0417
+ * @Description : 入院记录出生地填写错误
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0417 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getFirstPageRecordDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        Map<String, String> firstStructMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+        if (structureMap != null && firstStructMap != null) {
+            String contactAddress_bh = structureMap.get("出生地");
+            String contactAddress_first = firstStructMap.get(Content.birth_address);
+            if (!CatalogueUtil.isEmpty(contactAddress_bh) && !CatalogueUtil.isEmpty(contactAddress_first)) {
+                if (!contactAddress_first.equals(contactAddress_bh)) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+}

+ 21 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0420.java

@@ -0,0 +1,21 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+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;
+
+
+/**
+ * @ClassName : BEH0420
+ * @Description :  入院记录病史陈述者填写错误
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0420 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+
+    }
+}

+ 45 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0422.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0422
+ * @Description :  入院记录记录日期填写错误
+ * @Date: 2020-03-06 17:28
+ */
+@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");
+        }
+    }
+}

+ 35 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0440.java

@@ -0,0 +1,35 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.Collection;
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0440
+ * @Description : 入院记录户口地址未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0440 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 邵逸夫有户口地址
+         */
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> bhMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtil.isNotBlank(bhMap.get("户口地址"))) {
+            status.set("0");
+        }
+    }
+}

+ 77 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0441.java

@@ -0,0 +1,77 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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.entity.General;
+import com.lantone.qc.pub.model.entity.GeneralDesc;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0441
+ * @Description :  现病史缺少发病以来食欲描述
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0441 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        if (presentLabel == null) {
+            status.set("0");
+            return;
+        }
+        List<String> words = Lists.newArrayList("胃纳", "食纳", "食欲", "未纳", "纳眠", "饮食", "睡眠"
+                , "禁食", "未食", "鼻饲", "饮", "奶");
+        String presentText = presentLabel.getText();
+        if (StringUtil.isNotBlank(presentText)) {
+            for (String word : words) {
+                if (presentText.contains(word)) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+        List<GeneralDesc> generals = presentLabel.getGenerals();
+        List<General> gens = presentLabel.getGens();
+
+        if (ListUtil.isEmpty(generals) && ListUtil.isEmpty(gens)) {
+            status.set("0");
+            return;
+        }
+
+        if (ListUtil.isNotEmpty(generals)) {
+            for (GeneralDesc general : generals) {
+                for (String word : words) {
+                    if (general.getName().contains(word)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+
+        if (ListUtil.isNotEmpty(gens)) {
+            for (General general : gens) {
+                for (String word : words) {
+                    if (general.getName().contains(word)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+
+    }
+}

+ 70 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0442.java

@@ -0,0 +1,70 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.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.entity.General;
+import com.lantone.qc.pub.model.entity.GeneralDesc;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0442
+ * @Description :  现病史缺少发病以来二便描述
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0442 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        if (presentLabel == null) {
+            status.set("0");
+            return;
+        }
+        String presentText = presentLabel.getText();
+        if (StringUtil.isNotBlank(presentText)) {
+            List<String> words = Lists.newArrayList("二便", "大小便", "小便", "大便", "尿","便秘","腹泻");
+            for (String word : words) {
+                if (presentText.contains(word)) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+
+        List<GeneralDesc> generals = presentLabel.getGenerals();
+        List<General> gens = presentLabel.getGens();
+        if (ListUtil.isEmpty(generals) && ListUtil.isEmpty(gens)) {
+            status.set("0");
+            return;
+        }
+
+        if (ListUtil.isNotEmpty(generals)) {
+            for (GeneralDesc general : generals) {
+                if (general.getName().contains("便") || general.getName().contains("尿")) {
+                    status.set("0");
+                    break;
+                }
+            }
+        }
+        if (ListUtil.isNotEmpty(gens)) {
+            for (General general : gens) {
+                if (general.getName().contains("便") || general.getName().contains("尿")) {
+                    status.set("0");
+                    break;
+                }
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0448.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.entity.Clinical;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0448
+ * @Description : 现病史症状缺少伴随症状
+ * @Author : Mark
+ * @Date: 2020-04-05 10:58
+ */
+@Component
+public class BEH0448 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (beHospitalizedDoc != null) {
+            List<Clinical> clinicals = beHospitalizedDoc.getPresentLabel().getClinicals();
+            if (clinicals.size() < 2) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 104 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0449.java

@@ -0,0 +1,104 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+import com.alibaba.fastjson.JSONArray;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
+import com.lantone.qc.kernel.structure.ai.ModelAI;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.entity.Clinical;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.util.ListUtil;
+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.stream.Collectors;
+
+
+/**
+ * @ClassName : BEH0449
+ * @Description : 现病史主症状与主诉症状不一致
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0449 extends QCCatalogue {
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        String chief_text = beHospitalizedDoc.getChiefLabel().getText();
+        String Present_text = beHospitalizedDoc.getPresentLabel().getText();
+        if (chief_text.contains("检查") || chief_text.contains("术后") || chief_text.contains("药物")
+                || chief_text.contains("发现") || chief_text.contains("体检") || chief_text.contains("确诊")
+                || chief_text.contains("复查") || chief_text.contains("诊断") || StringUtil.isBlank(chief_text)
+                || StringUtil.isBlank(Present_text) || "。".equals(Present_text)
+        ) {
+            status.set("0");
+            return;
+        } else {
+            List<Clinical> chiefClinicals = beHospitalizedDoc.getChiefLabel().getClinicals();
+            List<Clinical> presentClinicals = beHospitalizedDoc.getPresentLabel().getClinicals();
+            if (ListUtil.isNotEmpty(chiefClinicals) && ListUtil.isNotEmpty(presentClinicals)) {
+                Clinical chiefClinical = chiefClinicals.get(0);
+                String chiefClinic = chiefClinical.getName();
+                /* 去除阴性症状,只保留阳性症状 */
+                presentClinicals = presentClinicals.stream().filter(clinical -> clinical.getNegative() == null).collect(Collectors.toList());
+                for (Clinical cliPre : presentClinicals) {
+                    String presentClinical = cliPre.getName();
+                    if (chiefClinic.equals(presentClinical)) {
+                        status.set("0");
+                        return;
+                    } else if (presentClinical.contains(chiefClinic) || chiefClinic.contains(presentClinical)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+                List<String> clinicName = getClinicName(presentClinicals);
+                /* 文本相似度模型 */
+                ModelAI modelAI = new ModelAI();
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(chiefClinic, clinicName,
+                        false, "chief_present", chiefPresentSimilarityServiceClient);
+                if (jsonArray.size() == 2) {
+                    double likeRate = jsonArray.getDoubleValue(1);
+                    if (likeRate > 0.9) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+
+        String chiefDiag = "";
+        List<Diag> diags = beHospitalizedDoc.getChiefLabel().getDiags();
+        if (diags != null && diags.size() > 0) {
+            chiefDiag = diags.get(0).getHospitalDiagName();
+        }
+        String presentDiag = "";
+        diags = beHospitalizedDoc.getPresentLabel().getDiags();
+        if (diags != null && diags.size() > 0) {
+            presentDiag = diags.get(0).getHospitalDiagName();
+        }
+        if (StringUtils.isNotEmpty(chiefDiag) && StringUtils.isNotEmpty(presentDiag) && chiefDiag.equals(presentDiag)) {
+            status.set("0");
+        }
+    }
+
+    private List<String> getClinicName(List<Clinical> presentClinicals) {
+        List<String> clinicNames = new ArrayList<>();
+        for (Clinical clinical : presentClinicals) {
+            clinicNames.add(clinical.getName());
+        }
+        return clinicNames;
+    }
+}

+ 35 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0450.java

@@ -0,0 +1,35 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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 org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0450
+ * @Description :   现病史内容与首次病程内容雷同
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0450 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
+        if (firstCourseRecordDoc == null || firstCourseRecordDoc.getCaseCharacteristicLabel() == null) {
+            return;
+        }
+        double likeRate = firstCourseRecordDoc.getCaseCharacteristicLabel().getLikeRate();
+        if (likeRate > 0.95d) {
+            status.set("-1");
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0458.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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;
+
+
+/**
+ * @ClassName : BEH0458
+ * @Description :  既往史缺成瘾药物用药情况
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0458 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> bhMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (bhMap != null) {
+            String birthDate = bhMap.get("长期用药情况\\(包括可能成瘾的药物\\)");
+            String addictiveDrugs = bhMap.get("成瘾药物");
+            if (StringUtil.isBlank(birthDate) && StringUtil.isBlank(addictiveDrugs)) {
+                status.set("-1");
+            }
+        }
+
+    }
+}

+ 37 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0473.java

@@ -0,0 +1,37 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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;
+
+
+/**
+ * @ClassName : BEH0473
+ * @Description :  生命体征未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-26 19:30
+ */
+@Component
+public class BEH0473 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (structureMap != null) {
+            if (StringUtil.isNotBlank(structureMap.get("体温"))
+                    || StringUtil.isNotBlank(structureMap.get("脉搏"))
+                    || StringUtil.isNotBlank(structureMap.get("呼吸"))
+                    || StringUtil.isNotBlank(structureMap.get("血压"))) {
+                status.set("0");
+            }
+        }
+
+    }
+}

+ 39 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0474.java

@@ -0,0 +1,39 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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;
+
+
+/**
+ * @ClassName : BEH0474
+ * @Description :  体格检查一般情况未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-26 19:39
+ */
+@Component
+public class BEH0474 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        String mind = structureMap.get("神志水平");
+        String cooperation = structureMap.get("查体合作性");
+        String position = structureMap.get("体位");
+        String face = structureMap.get("面容");
+        String height = structureMap.get("身高");
+        String weight = structureMap.get("体重");
+        if (StringUtil.isBlank(mind) && StringUtil.isBlank(cooperation) && StringUtil.isBlank(position)
+                && StringUtil.isBlank(face) && StringUtil.isBlank(height) && StringUtil.isBlank(weight)) {
+            status.set("-1");
+        }
+
+    }
+}

+ 38 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0492.java

@@ -0,0 +1,38 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.label.LisLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0492
+ * @Description : 实验室检查未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-26 19:54
+ */
+@Component
+public class BEH0492 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        if (inputInfo.getBeHospitalizedDoc() != null) {
+            LisLabel lisLabel = inputInfo.getBeHospitalizedDoc().getLisLabel();
+            if (lisLabel != null && StringUtil.isNotBlank(lisLabel.getText())) {
+                status.set("0");
+                return;
+            }
+            if (StringUtil.isNotBlank(inputInfo.getBeHospitalizedDoc().getStructureMap().get("实验室检查"))){
+                status.set("0");/* 台州市里医院结构化判断 */
+            }
+        }
+    }
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0493.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.label.PacsLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0493
+ * @Description : 辅助检查未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-26 19:54
+ */
+@Component
+public class BEH0493 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        Map<String, String> structureMap = beHospitalizedDoc.getStructureMap();
+        String pacs = structureMap.get("辅助检查结果");
+        String laboratory = structureMap.get("实验室检查");
+        String image = structureMap.get("影像学检查");
+        if (StringUtil.isNotBlank(pacs) || StringUtil.isNotBlank(laboratory) || StringUtil.isNotBlank(image)) {
+            status.set("0");
+            return;
+        }
+        PacsLabel pacsLabel = inputInfo.getBeHospitalizedDoc().getPacsLabel();
+        if (pacsLabel != null && StringUtil.isNotBlank(pacsLabel.getText())) {
+            status.set("0");
+        }
+    }
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0495.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.behospitalized;
+
+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;
+
+/**
+ * @ClassName : BEH0495
+ * @Description : 入院记录由非执业医师书写,执业医师未在24小时内
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0495 extends QCCatalogue {
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        String qmPerson = structureMap.get("签名");
+        if (StringUtil.isBlank(qmPerson) || CatalogueUtil.isOccup(qmPerson)) {
+            return;
+        }
+
+        String shPerson = structureMap.get("审核人");
+        String jlDate = structureMap.get("记录日期");
+        String shDate = structureMap.get("审核日期");
+        /*boolean before = StringUtil.parseDateTime(shDate).before(StringUtil.parseDateTime(jlDate));
+        if(before){
+            status.set("-1");
+            return;
+        }*/
+        if (!CatalogueUtil.isOccup(shPerson) || CatalogueUtil.compareTime(StringUtil.parseDateTime(jlDate), StringUtil.parseDateTime(shDate), 24 * 60L)) {
+            status.set("-1");
+        }
+    }
+
+}

+ 40 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0299.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.RescueDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0001
+ * @Description : 无输血/血制品病程记录     和医嘱比较
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0299 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(ListUtil.isNotEmpty(doctorAdviceDocs)){
+            st:
+            for (DoctorAdviceDoc doc:doctorAdviceDocs) {
+                Map<String, String> structureMap = doc.getStructureMap();
+                if(structureMap.get("医嘱项目名称").contains("输血")){
+                    if(ListUtil.isEmpty(clinicalBloodDocs)){
+                        status.set("-1");
+                        break st;
+                    }
+                }
+            }
+        }
+    }
+}

+ 61 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0300.java

@@ -0,0 +1,61 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName : CLI0300
+ * @Description : 输血记录中输血指征不严格
+ * CRF缺少足够标注数据,使用规则判断输血原因是否有数字
+ * @Author : Mark
+ * @Date: 2020-04-05 16:56
+ */
+@Component
+public class CLI0300 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if (ListUtil.isEmpty(clinicalBloodDocs)) {
+            return;
+        }
+        for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
+            Map<String, String> cliBStructureMap = cliB.getStructureMap();
+            String infusionReason;
+            //台州
+            if (StringUtils.isNotEmpty(cliBStructureMap.get("输血检验指标"))) {
+                infusionReason = cliBStructureMap.get("输血检验指标");
+            } else {
+                infusionReason = cliBStructureMap.get("输注原因");
+            }
+            if (StringUtils.isNotEmpty(infusionReason)) {
+                if (infusionReason.contains("白蛋白") || infusionReason.contains("凝血酶原复合物")) {
+                    continue;
+                }
+                if ("其它".equals(infusionReason)) {
+                    status.set("-1");
+                    return;
+                }
+                Pattern compile = Pattern.compile("([\\d]+[.\\d+]*)([a-zA-Z]+)(/[a-zA-Z]+)*");
+                Matcher matcher = compile.matcher(infusionReason);
+                if (matcher.find(0)) {
+                    if (null != matcher.group(1)) {
+                        double val = Double.parseDouble(matcher.group(1));
+                        if (val > 100) {
+                            status.set("-1");
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 58 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0305.java

@@ -0,0 +1,58 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName : CLI0305
+ * @Description : 输血记录未在输注结束后24小时内完成
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0305 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        Boolean flag = false;
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
+            for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                String infusionEnd = cliBStructureMap.get("输注结束");
+                String recordDateStr = cliBStructureMap.get("记录时间");
+                if (StringUtils.isNotEmpty(infusionEnd) && StringUtils.isNotEmpty(recordDateStr)) {
+                    Date infusionEndDate = StringUtil.parseDateTime(infusionEnd);
+                    Date recordDate = StringUtil.parseDateTime(recordDateStr);
+                    if (infusionEndDate != null && recordDate != null) {
+                        if (infusionEndDate.after(recordDate)) {
+                            continue;
+                        }
+                        if (CatalogueUtil.compareTime(infusionEndDate, recordDate, 24 * 60L)) {
+                            flag = true;
+                            info.set(infusionEnd + " -> " + recordDateStr);
+                        }
+                    }
+                }
+            }
+        }
+        if(flag){
+            status.set("-1");
+        }
+    }
+}

+ 49 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0306.java

@@ -0,0 +1,49 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName : CLI0306
+ * @Description : 输血记录中无输血指征
+ * CRF缺少足够标注数据,使用规则判断输血原因是否有数字
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0306 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if (ListUtil.isEmpty(clinicalBloodDocs)) {
+            status.set("0");
+            return;
+        }
+        if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
+            for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                //台州
+                if (StringUtils.isNotEmpty(cliBStructureMap.get("输血检验指标"))) {
+                    status.set("0");
+                    break;
+                }
+                String infusionReason = cliBStructureMap.get("输注原因");
+                if (StringUtils.isNotEmpty(infusionReason)) {
+                    status.set("0");
+                }
+            }
+        } else {
+            status.set("0");
+        }
+
+    }
+}

+ 96 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI03063.java

@@ -0,0 +1,96 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.ClinicBloodEffectDoc;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationApplicationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+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.*;
+
+/**
+ * @ClassName : CLI0309
+ * @Description : 输血后效果评价未在24小时完成
+ * @Author : 王宇
+ * @Date: 2020-08-14 10:18
+ */
+@Component
+public class CLI03063 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();//输血记录
+        List<ClinicBloodEffectDoc> clinicBloodEffectDocs = inputInfo.getClinicBloodEffectDocs();//输血效果评价
+        if (ListUtil.isEmpty(clinicalBloodDocs)) {
+            return;
+        }
+        Iterator<ClinicalBloodDoc> clinicalBloodDocIterator = clinicalBloodDocs.iterator();
+        Iterator<ClinicBloodEffectDoc> clinicBloodEffectDocIterator = clinicBloodEffectDocs.iterator();
+        while (clinicalBloodDocIterator.hasNext()) {
+            if (!CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(clinicalBloodDocIterator.next().getStructureMap().get("记录时间")),
+                    StringUtil.parseDateTime(DateUtil.nowString()),
+                    Long.valueOf(24 * 60))) {//如果接收未超过24小时,规则不判断
+                clinicalBloodDocIterator.remove();
+            }
+        }
+        while (clinicBloodEffectDocIterator.hasNext()) {
+            if (!CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(clinicBloodEffectDocIterator.next().getStructureMap().get("记录时间")),
+                    StringUtil.parseDateTime(DateUtil.nowString()),
+                    Long.valueOf(24 * 60))) {//如果接收未超过24小时,规则不判断
+                clinicBloodEffectDocIterator.remove();
+            }
+        }
+        Collections.sort(clinicalBloodDocs, new Comparator<ClinicalBloodDoc>() {
+            public int compare(ClinicalBloodDoc o1, ClinicalBloodDoc o2) {
+                return o1.getStructureMap().get("记录时间")
+                        .compareTo(o2.getStructureMap().get("记录时间"));
+            }
+        });
+        Collections.sort(clinicBloodEffectDocs, new Comparator<ClinicBloodEffectDoc>() {
+            public int compare(ClinicBloodEffectDoc o1, ClinicBloodEffectDoc o2) {
+                return o1.getStructureMap().get("记录时间")
+                        .compareTo(o2.getStructureMap().get("记录时间"));
+            }
+        });
+        if (clinicalBloodDocs.size() != clinicBloodEffectDocs.size()) {
+            status.set("-1");
+            return;
+        }
+        for (ClinicalBloodDoc clinicalBloodDoc : clinicalBloodDocs) {
+            for (ClinicBloodEffectDoc clinicBloodEffectDoc : clinicBloodEffectDocs) {
+                if (CatalogueUtil.compareTime(
+                        StringUtil.parseDateTime(clinicalBloodDoc.getStructureMap().get("记录时间")),
+                        StringUtil.parseDateTime(clinicBloodEffectDoc.getStructureMap().get("记录时间")),
+                        Long.valueOf(1))) {//结果单时间要比申请单大的
+                    if (CatalogueUtil.compareTime(
+                            StringUtil.parseDateTime(clinicalBloodDoc.getStructureMap().get("记录时间")),
+                            StringUtil.parseDateTime(clinicBloodEffectDoc.getStructureMap().get("记录时间")),
+                            Long.valueOf(24 * 60))) {//未超过24小时
+                        status.set("-1");
+                        return ;
+                    }
+                }
+            }
+        }
+        /*
+        if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
+            for (ClinicBloodEffectDoc cliB : clinicBloodEffectDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if (StringUtils.isEmpty(cliBStructureMap.get("输注后效果评价"))) {
+                    status.set("-1");
+                    break;
+                }
+            }
+        }
+
+         */
+    }
+}

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0309.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.doc.ClinicBloodEffectDoc;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : CLI0309
+ * @Description : 无输血或使用血液制品后效果评价
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0309 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();//输血记录
+        List<ClinicBloodEffectDoc> clinicBloodEffectDocs = inputInfo.getClinicBloodEffectDocs();//输血效果评价
+        if (ListUtil.isEmpty(clinicalBloodDocs)) {
+            return;
+        }
+        if (clinicalBloodDocs.size() < clinicBloodEffectDocs.size()) {
+            return;
+        }
+        if (clinicalBloodDocs.size() != clinicBloodEffectDocs.size()) {
+            status.set("-1");
+            info.set("部分输血记录未找到对应输血后效果评价");
+        }
+        /*
+        if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
+            for (ClinicBloodEffectDoc cliB : clinicBloodEffectDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if (StringUtils.isEmpty(cliBStructureMap.get("输注后效果评价"))) {
+                    status.set("-1");
+                    break;
+                }
+            }
+        }
+
+         */
+    }
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0562.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0562
+ * @Description : 输血记录开始输血时间未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0562 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(ListUtil.isEmpty(clinicalBloodDocs)){
+            return;
+        }
+
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("输注开始")){
+                    if(StringUtils.isEmpty(cliBStructureMap.get("输注开始"))){
+                        status.set("-1");
+                        break;
+                    }
+                }else {
+                    status.set("-1");
+                    break;
+                }
+
+            }
+        }
+
+    }
+}

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0563.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0563
+ * @Description : 输血记录开始输血时间填写不规范
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0563 extends QCCatalogue {
+    public static String FORMAT_LONC_CN_MI = "yyyy/MM/dd HH:mm";
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("输注开始")){
+                    if(!StringUtils.isEmpty(cliBStructureMap.get("输注开始"))){
+                        try {
+                            //Date date_in = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(cliBStructureMap.get("输注开始"));
+                            Date date_in = StringUtil.parseDateTime(cliBStructureMap.get("输注开始"));
+                        } catch (Exception e) {
+                            status.set("-1");
+                            break;
+                        }
+                    }
+                }
+
+            }
+        }
+
+    }
+}

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0564.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName : CLI0564
+ * @Description : 输血记录输血结束时间未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0564 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(ListUtil.isEmpty(clinicalBloodDocs)){
+            return;
+        }
+
+        if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
+//            List<ClinicalBloodDoc> bloodDocs = clinicalBloodDocs.stream().filter(bloodDoc -> bloodDoc.getStructureMap().get("输血后效果评价") == null).collect(Collectors.toList());
+            for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if (cliBStructureMap.containsKey("输注结束")) {
+                    if (StringUtils.isEmpty(cliBStructureMap.get("输注结束"))) {
+                        status.set("-1");
+                        break;
+                    }
+                } else {
+                    status.set("-1");
+                    break;
+                }
+
+            }
+        }
+
+    }
+}

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/clinicalblood/CLI0565.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.clinicalblood;
+
+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.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0565
+ * @Description : 输血记录输血结束时间填写不规范
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0565 extends QCCatalogue {
+    public static String FORMAT_LONC_CN_MI = "yyyy/MM/dd HH:mm";
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("输注结束")){
+                    if(!StringUtils.isEmpty(cliBStructureMap.get("输注结束"))){
+                        try {
+                            //Date date_in = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(cliBStructureMap.get("输注结束"));
+                            Date date_in = StringUtil.parseDateTime(cliBStructureMap.get("输注结束"));
+                        } catch (Exception e) {
+                            status.set("-1");
+                            break;
+                        }
+                    }
+                }
+
+            }
+        }
+
+    }
+}

+ 70 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0280.java

@@ -0,0 +1,70 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CON0280
+ * @Description : 普通会诊未在24小时内完成
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CON0280 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getConsultationDocs() == null || inputInfo.getDoctorAdviceDocs().size() == 0) {
+            return;
+        }
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        //医嘱按照医嘱开始时间排序
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        Collections.sort(doctorAdviceDocs, new Comparator<DoctorAdviceDoc>() {
+            public int compare(DoctorAdviceDoc o1, DoctorAdviceDoc o2) {
+                return o1.getStructureMap().get("医嘱开始时间")
+                        .compareTo(o2.getStructureMap().get("医嘱开始时间"));
+            }
+        });
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationResultsDoc consultationResultsDoc = consultationDoc.getConsultationResultsDoc();
+            if (consultationResultsDoc == null) {
+                continue;
+            }
+            Map<String, String> conStructureMap = consultationResultsDoc.getStructureMap();
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {//循环取最近一条医嘱和会诊申请单中的急会诊比较
+                Map<String, String> docStructureMap = doctorAdviceDoc.getStructureMap();
+                if (docStructureMap.get("医嘱项目名称") != null && docStructureMap.get("医嘱项目名称").contains("会诊")) {
+                    String applicationDateStr = docStructureMap.get("医嘱开始时间");
+                    String arrivalDateStr = conStructureMap.get("会诊时间");
+                    if (StringUtil.isBlank(applicationDateStr) || StringUtil.isBlank(arrivalDateStr)) {
+                        continue;
+                    }
+                    Date applicationDate = StringUtil.parseDateTime(applicationDateStr);
+                    Date arrivalDate = StringUtil.parseDateTime(arrivalDateStr);
+                    if (applicationDate == null || arrivalDate == null) {
+                        continue;
+                    }
+                    if (CatalogueUtil.compareTime(applicationDate, arrivalDate, (long) (24 * 60))) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+            //            String applicationDateStr = structureMap.get("会诊申请日期");
+            //            String arrivalDateStr = structureMap.get("会诊到达时间");
+        }
+    }
+}

+ 73 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0281.java

@@ -0,0 +1,73 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationRecordDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CON0281
+ * @Description : 急会诊未在十分钟内到达
+ * @Author : 王宇
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CON0281 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getConsultationDocs() == null) {
+            return;
+        }
+        //会诊单按日会诊申请日期排序
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        //医嘱按照医嘱开始时间排序
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        Collections.sort(doctorAdviceDocs, new Comparator<DoctorAdviceDoc>() {
+            public int compare(DoctorAdviceDoc o1, DoctorAdviceDoc o2) {
+                return o1.getStructureMap().get("医嘱开始时间")
+                        .compareTo(o2.getStructureMap().get("医嘱开始时间"));
+            }
+        });
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationResultsDoc consultationResultsDoc = consultationDoc.getConsultationResultsDoc();
+            if (consultationResultsDoc == null) {
+                continue;
+            }
+            Map<String, String> conStructureMap = consultationResultsDoc.getStructureMap();
+            if (conStructureMap.get("会诊类别") == null || !conStructureMap.get("会诊类别").contains("急会诊")) {
+                continue;
+            }
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {//循环取最近一条医嘱和会诊申请单中的急会诊比较
+                Map<String, String> docStructureMap = doctorAdviceDoc.getStructureMap();
+                if (docStructureMap.get("医嘱项目名称") != null && docStructureMap.get("医嘱项目名称").contains("会诊")) {
+                    String applicationDateStr = docStructureMap.get("医嘱开始时间");
+                    String arrivalDateStr = conStructureMap.get("会诊时间");
+                    if (StringUtil.isBlank(applicationDateStr) || StringUtil.isBlank(arrivalDateStr)) {
+                        continue;
+                    }
+                    Date applicationDate = StringUtil.parseDateTime(applicationDateStr);//医嘱开始时间
+                    Date arrivalDate = StringUtil.parseDateTime(arrivalDateStr);//会诊时间
+                    if (applicationDate == null || arrivalDate == null) {
+                        continue;
+                    }
+                    if (CatalogueUtil.compareTime(applicationDate, arrivalDate, 10L)) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+}

+ 51 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0382.java

@@ -0,0 +1,51 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.CrisisValueReportDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 化验结果为危急值的,6小时内危急值记录中没有体现危急值记录
+ * 在没有化验报告单之前,以记录时间和接收时间的比较为准
+ * @author: Mark
+ * @time: 2020/6/19 13:34
+ */
+@Component
+public class CON0382 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
+        if (ListUtil.isNotEmpty(crisisValueReportDocs)) {
+            crisisValueReportDocs.forEach(crisisValueReportDoc -> {
+                if (StringUtil.isBlank(crisisValueReportDoc.getStructureMap().get("危急值记录内容"))) {
+                    String record_time = crisisValueReportDoc.getStructureMap().get("记录时间");
+                    String receive_time = crisisValueReportDoc.getStructureMap().get("接收时间");
+                    String crisisVal =null;
+                    if(crisisValueReportDoc.getStructureMap().get("危急值记录内容") != null){
+                        crisisVal = crisisValueReportDoc.getStructureMap().get("危急值记录内容").trim();
+                    }
+                    if(record_time != null && receive_time != null && crisisVal != null){
+                        Date record = StringUtil.parseDateTime(record_time);
+                        Date receive = StringUtil.parseDateTime(receive_time);
+                        if (crisisVal.length()==0 || CatalogueUtil.compareTime(receive, record, 6*60L) ) {
+                            status.set("-1");
+                        }
+                    }
+
+                }
+            });
+        }
+    }
+
+}

+ 107 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0526.java

@@ -0,0 +1,107 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationApplicationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.*;
+
+/**
+ * @ClassName : CON0526
+ * @Description : 急会诊未在10分钟内到达
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CON0526 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        if (inputInfo.getConsultationDocs().size() == 0) {
+            return;
+        }
+        //会诊单按日会诊申请日期排序
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        //医嘱按照医嘱开始时间排序
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        Collections.sort(doctorAdviceDocs, new Comparator<DoctorAdviceDoc>() {
+            public int compare(DoctorAdviceDoc o1, DoctorAdviceDoc o2) {
+                return o1.getStructureMap().get("医嘱开始时间")
+                        .compareTo(o2.getStructureMap().get("医嘱开始时间"));
+            }
+        });
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationResultsDoc consultationResultsDoc = consultationDoc.getConsultationResultsDoc();
+            if (consultationResultsDoc == null) {
+                continue;
+            }
+            Map<String, String> conStructureMap = consultationResultsDoc.getStructureMap();
+            if (conStructureMap.get("会诊类别") == null || !conStructureMap.get("会诊类别").contains("急会诊")) {
+                continue;
+            }
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {//循环取最近一条医嘱和会诊申请单中的急会诊比较
+                Map<String, String> docStructureMap = doctorAdviceDoc.getStructureMap();
+                if (docStructureMap.get("医嘱项目名称") != null && docStructureMap.get("医嘱项目名称").contains("会诊")) {
+                    String applicationDateStr = docStructureMap.get("医嘱开始时间");
+                    String arrivalDateStr = conStructureMap.get("会诊时间");
+                    if (StringUtil.isBlank(applicationDateStr) || StringUtil.isBlank(arrivalDateStr)) {
+                        continue;
+                    }
+                    Date applicationDate = StringUtil.parseDateTime(applicationDateStr);//医嘱开始时间
+                    Date arrivalDate = StringUtil.parseDateTime(arrivalDateStr);//会诊时间
+                    if (applicationDate == null || arrivalDate == null) {
+                        continue;
+                    }
+                    if (CatalogueUtil.compareTime(applicationDate, arrivalDate, 10L)) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        }
+
+
+
+
+        
+
+        /*status.set("0");
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        if (consultationDocs.size() > 0) {
+            for (ConsultationDoc consulation : consultationDocs) {
+                ConsultationApplicationDoc consultationApplicationDoc = consulation.getConsultationApplicationDoc();
+                ConsultationResultsDoc consultationResultsDoc = consulation.getConsultationResultsDoc();
+                Map<String, String> applicationMap = consultationApplicationDoc.getStructureMap();
+                Map<String, String> resultMap = consultationResultsDoc.getStructureMap();
+                if (applicationMap != null && resultMap != null) {
+                    String applicationDate = applicationMap.get("申请日期");
+                    String resultDate = resultMap.get("会诊到达时间");
+                    if (applicationDate != null && resultDate != null) {
+                        Date date_in = StringUtil.parseDateTime(applicationDate);
+                        Date date_out = StringUtil.parseDateTime(resultDate);
+                        if (date_in == null || date_out == null) {
+                            return;
+                        }
+                        long times = date_out.getTime() - date_in.getTime();
+                        long day = times / (24 * 60 * 60 * 1000);
+                        long hour = (times / (60 * 60 * 1000) - day * 24);
+                        long min = ((times / (60 * 1000)) - day * 24 * 60 - hour * 60);
+                        long min1 = ((times / (60 * 1000)) - day * 24 * 60 - hour * 60);
+                        if (min1 > 10) {
+                            status.set("-1");
+                        }
+
+                    }
+                }
+            }
+        }*/
+
+    }
+}

+ 59 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0528.java

@@ -0,0 +1,59 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.doc.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationRecordDoc;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CON0528
+ * @Description : 无会诊记录单
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CON0528 extends QCCatalogue {
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        if (doctorAdviceDocs.size() == 0) {
+            return;
+        }
+        boolean findConsultation = false, findConsultationRemove = false;
+        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+            Map<String, String> doctStructureMap = doctorAdviceDoc.getStructureMap();
+            if (doctStructureMap.get("医嘱项目名称") != null) {
+                if (doctStructureMap.get("医嘱项目名称").contains("会诊")) {
+                    findConsultation = true;
+                }
+                if (doctStructureMap.get("医嘱项目名称").contains("会诊")
+                        && doctStructureMap.get("医嘱项目名称").contains("取消")) {
+                    findConsultationRemove = true;
+                }
+            }
+        }
+        //医嘱有会诊但没有取消会诊
+        if (findConsultation && !findConsultationRemove) {
+            if (consultationDocs.size() > 0) {
+                for (ConsultationDoc consulation : consultationDocs) {
+                    ConsultationRecordDoc consultationRecordDoc = consulation.getConsultationRecordDoc();
+                    if (consultationRecordDoc == null) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        } else {
+            status.set("0");
+        }
+    }
+}

+ 52 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0536.java

@@ -0,0 +1,52 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.consultation.ConsultationApplicationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CON0536
+ * @Description : 会诊申请单中会诊日期及时间填写不规范
+ * @Author : 胡敬
+ * @Date: 2020-03-28 10:20
+ */
+@Component
+public class CON0536 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        if (consultationDocs.size() == 0) {
+            return;
+        }
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationApplicationDoc consultationApplicationDoc = consultationDoc.getConsultationApplicationDoc();
+            if (consultationApplicationDoc == null) {
+                continue;
+            }
+            Map<String, String> consultationResultStructureMap = consultationApplicationDoc.getStructureMap();
+            if(consultationResultStructureMap.containsKey("会诊日期及时间")){
+                String consultationDateStr = consultationResultStructureMap.get("会诊日期及时间");
+                if (CatalogueUtil.isEmpty(consultationDateStr)) {
+                    continue;
+                }
+                Date consultationDate = StringUtil.parseDateTime(consultationDateStr, CatalogueUtil.processDateFormat(Content.dateFormats));
+
+                if (null == consultationDate) {
+                    status.set("-1");
+                    return;
+                }
+            }
+
+        }
+    }
+}

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0538.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CON0538
+ * @Description : 会诊结果单中申请科室未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-28 13:39
+ */
+@Component
+public class CON0538 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        if (consultationDocs.size() == 0) {
+            return;
+        }
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationResultsDoc consultationResultsDoc = consultationDoc.getConsultationResultsDoc();
+            if (consultationResultsDoc == null) {
+                continue;
+            }
+            Map<String, String> consultationResultStructureMap = consultationResultsDoc.getStructureMap();
+            if(consultationResultStructureMap.containsKey("申请科室")){
+                String consultationDateStr = consultationResultStructureMap.get("申请科室");
+                if (CatalogueUtil.isEmpty(consultationDateStr)) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 44 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0539.java

@@ -0,0 +1,44 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CON0539
+ * @Description : 会诊结果单中会诊类别未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-28 13:39
+ */
+@Component
+public class CON0539 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        if (consultationDocs.size() == 0) {
+            return;
+        }
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationResultsDoc consultationResultsDoc = consultationDoc.getConsultationResultsDoc();
+            if (consultationResultsDoc == null) {
+                continue;
+            }
+            Map<String, String> consultationResultStructureMap = consultationResultsDoc.getStructureMap();
+            if(consultationResultStructureMap.containsKey("会诊意见")){
+                String consultationDateStr = consultationResultStructureMap.get("会诊类别");
+                if (CatalogueUtil.isEmpty(consultationDateStr)) {
+                    status.set("-1");
+                    return;
+                }
+            }
+
+        }
+    }
+}

+ 44 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0540.java

@@ -0,0 +1,44 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CON0540
+ * @Description : 会诊结果单中申请医生未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-28 13:39
+ */
+@Component
+public class CON0540 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        if (consultationDocs.size() == 0) {
+            return;
+        }
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationResultsDoc consultationResultsDoc = consultationDoc.getConsultationResultsDoc();
+            if (consultationResultsDoc == null) {
+                continue;
+            }
+            Map<String, String> consultationResultStructureMap = consultationResultsDoc.getStructureMap();
+            if(consultationResultStructureMap.containsKey("申请医生")){
+                String consultationDateStr = consultationResultStructureMap.get("申请医生");
+                if (CatalogueUtil.isEmpty(consultationDateStr)) {
+                    status.set("-1");
+                    return;
+                }
+            }
+
+        }
+    }
+}

+ 44 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0541.java

@@ -0,0 +1,44 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CON0541
+ * @Description : 会诊结果单中会诊科室未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-28 13:39
+ */
+@Component
+public class CON0541 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        if (consultationDocs.size() == 0) {
+            return;
+        }
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationResultsDoc consultationResultsDoc = consultationDoc.getConsultationResultsDoc();
+            if (consultationResultsDoc == null) {
+                continue;
+            }
+            Map<String, String> consultationResultStructureMap = consultationResultsDoc.getStructureMap();
+            if(consultationResultStructureMap.containsKey("会诊意见")){
+                String consultationDateStr = consultationResultStructureMap.get("会诊科室");
+                if (CatalogueUtil.isEmpty(consultationDateStr)) {
+                    status.set("-1");
+                    return;
+                }
+            }
+
+        }
+    }
+}

+ 44 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0542.java

@@ -0,0 +1,44 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.consultation;
+
+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.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CON0542
+ * @Description : 会诊结果单中申请日期未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-28 13:39
+ */
+@Component
+public class CON0542 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ConsultationDoc> consultationDocs = inputInfo.getConsultationDocs();
+        if (consultationDocs.size() == 0) {
+            return;
+        }
+        for (ConsultationDoc consultationDoc : consultationDocs) {
+            ConsultationResultsDoc consultationResultsDoc = consultationDoc.getConsultationResultsDoc();
+            if (consultationResultsDoc == null) {
+                continue;
+            }
+            Map<String, String> consultationResultStructureMap = consultationResultsDoc.getStructureMap();
+            if(consultationResultStructureMap.containsKey("申请日期")){
+                String consultationDateStr = consultationResultStructureMap.get("申请日期");
+                if (CatalogueUtil.isEmpty(consultationDateStr)) {
+                    status.set("-1");
+                    return;
+                }
+            }
+
+        }
+    }
+}

+ 0 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/consultation/CON0543.java


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio