Browse Source

Merge remote-tracking branch 'origin/dev'

louhr 5 years ago
parent
commit
b44ce42788
100 changed files with 2322 additions and 139 deletions
  1. 13 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/controller/DbController.java
  2. 24 1
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/changx/CxXmlUtil.java
  3. 39 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/comsis/RedisFacade.java
  4. 4 3
      dbanaly/src/main/java/com/lantone/qc/dbanaly/util/ModuleMappingUtil.java
  5. 10 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/util/RedisUtil.java
  6. 21 0
      dbanaly/src/main/java/com/lantone/qc/dbanaly/vo/CrfCacheRemoveVO.java
  7. 3 3
      dbanaly/src/main/resources/application-db.yml
  8. 22 6
      kernel/src/main/java/com/lantone/qc/kernel/analysis/QCAnalysis.java
  9. 4 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/QCCatalogue.java
  10. 5 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0009.java
  11. 3 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0012.java
  12. 32 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02813.java
  13. 31 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02855.java
  14. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02915.java
  15. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02916.java
  16. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02917.java
  17. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02918.java
  18. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02919.java
  19. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02920.java
  20. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02921.java
  21. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02922.java
  22. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02923.java
  23. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02924.java
  24. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02925.java
  25. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02926.java
  26. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02932.java
  27. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02933.java
  28. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02934.java
  29. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02935.java
  30. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02936.java
  31. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02937.java
  32. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02938.java
  33. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02939.java
  34. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02940.java
  35. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02941.java
  36. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02942.java
  37. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02943.java
  38. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02944.java
  39. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02945.java
  40. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02946.java
  41. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02947.java
  42. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02948.java
  43. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02949.java
  44. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02950.java
  45. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02951.java
  46. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02952.java
  47. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02953.java
  48. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02954.java
  49. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02955.java
  50. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02956.java
  51. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02957.java
  52. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02958.java
  53. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02959.java
  54. 37 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02960.java
  55. 33 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02961.java
  56. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02962.java
  57. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02963.java
  58. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02964.java
  59. 30 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02965.java
  60. 60 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02966.java
  61. 38 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02969.java
  62. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0378.java
  63. 3 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0424.java
  64. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0438.java
  65. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0457.java
  66. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0462.java
  67. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0467.java
  68. 11 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0474.java
  69. 20 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0573.java
  70. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/consultation/CON0533.java
  71. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0088.java
  72. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0096.java
  73. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC02910.java
  74. 39 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC02970.java
  75. 4 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0502.java
  76. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0185.java
  77. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0149.java
  78. 60 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA02968.java
  79. 9 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0508.java
  80. 15 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0514.java
  81. 3 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0559.java
  82. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/medicalwriting/MEDI02888.java
  83. 48 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02927.java
  84. 48 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02928.java
  85. 48 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02929.java
  86. 84 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02930.java
  87. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0323.java
  88. 30 21
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0350.java
  89. 3 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0351.java
  90. 3 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0353.java
  91. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0635.java
  92. 17 17
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0637.java
  93. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0638.java
  94. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0639.java
  95. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0644.java
  96. 3 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0648.java
  97. 1 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0650.java
  98. 61 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/preoperativediscussion/PRE0328.java
  99. 31 21
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0144.java
  100. 0 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02911.java

+ 13 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/controller/DbController.java

@@ -3,8 +3,11 @@ package com.lantone.qc.dbanaly.controller;
 import com.google.common.collect.Lists;
 import com.lantone.qc.dbanaly.facade.changx.ChangxXmlDataAnalysisFacade;
 import com.lantone.qc.dbanaly.facade.comsis.ModuleHelper;
+import com.lantone.qc.dbanaly.facade.comsis.RedisFacade;
 import com.lantone.qc.dbanaly.facade.taizhou.TaiZhouXmlDataAnalysisFacade;
+import com.lantone.qc.dbanaly.util.RedisUtil;
 import com.lantone.qc.dbanaly.vo.AnalyzeXmlVO;
+import com.lantone.qc.dbanaly.vo.CrfCacheRemoveVO;
 import com.lantone.qc.pub.res.Response;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -34,6 +37,8 @@ public class DbController {
     private ChangxXmlDataAnalysisFacade changxXmlDataAnalysisFacade;
     @Autowired
     private TaiZhouXmlDataAnalysisFacade taiZhouXmlDataAnalysisFacade;
+    @Autowired
+    private RedisFacade redisFacade;
 
     @ApiOperation(value = "模板信息加载")
     @PostMapping("loadModuleInfo")
@@ -61,4 +66,12 @@ public class DbController {
         return response;
     }
 
+    @ApiOperation(value = "crf缓存清理")
+    @PostMapping("crfCacheRemove")
+    public Response<Boolean> crfCacheRemove(@RequestBody CrfCacheRemoveVO crfCacheRemoveVO) {
+        Response response = new Response();
+        response.setData(redisFacade.crfCacheRemove(crfCacheRemoveVO));
+        return response;
+    }
+
 }

+ 24 - 1
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/changx/CxXmlUtil.java

@@ -65,7 +65,7 @@ public class CxXmlUtil {
      * @param nodePath 节点在xml中的路径位置
      * @return
      */
-    public static String getTextByNodePath(String xml, String nodePath) {
+    private static String getTextByNodePath(String xml, String nodePath) {
         String content = null;
         try {
             Document doc = DocumentHelper.parseText(xml);
@@ -76,6 +76,29 @@ public class CxXmlUtil {
         return content;
     }
 
+    /**
+     * 获取xml的文本内容
+     *
+     * @param xml
+     * @return
+     */
+    public static String getXmlText(String xml) {
+        String text = null;
+        String[] nodePaths = {
+                "//DocObjContent/Region/Content_Text",
+                "//DocObjContent/Region",
+                "//DocObjContent/Content_Text",
+                "//DocObjContent"
+        };
+        for (String nodePath : nodePaths) {
+            text = CxXmlUtil.getTextByNodePath(xml, nodePath);
+            if (StringUtil.isNotBlank(text)) {
+                break;
+            }
+        }
+        return text;
+    }
+
     /**
      * 判断key是否可用
      *

+ 39 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/facade/comsis/RedisFacade.java

@@ -0,0 +1,39 @@
+package com.lantone.qc.dbanaly.facade.comsis;
+
+import com.lantone.qc.dbanaly.util.RedisUtil;
+import com.lantone.qc.dbanaly.vo.CrfCacheRemoveVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Set;
+
+/**
+ * @Description:
+ * @author: rengb
+ * @time: 2020/6/17 16:57
+ */
+@Component
+public class RedisFacade {
+    @Autowired
+    private RedisUtil redisUtil;
+
+    public boolean crfCacheRemove(CrfCacheRemoveVO crfCacheRemoveVO) {
+        if (crfCacheRemoveVO.getHospitalId() == null) {
+            return true;
+        }
+        String prex = "crf_cache:" + crfCacheRemoveVO.getHospitalId() + ":";
+        Set<String> behospitalCodes = crfCacheRemoveVO.getBehospitalCodes();
+        if (behospitalCodes == null || behospitalCodes.size() == 0) {
+            behospitalCodes = redisUtil.keys(prex + "*");
+        } else {
+            for (String behospitalCode : behospitalCodes) {
+                behospitalCode = prex + behospitalCode;
+            }
+        }
+        behospitalCodes.forEach(behospitalCode -> {
+            redisUtil.del(behospitalCode);
+        });
+        return true;
+    }
+
+}

+ 4 - 3
dbanaly/src/main/java/com/lantone/qc/dbanaly/util/ModuleMappingUtil.java

@@ -2,6 +2,7 @@ package com.lantone.qc.dbanaly.util;
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
+import com.lantone.qc.pub.util.SpringContextUtil;
 import org.apache.commons.collections.MapUtils;
 
 import java.util.ArrayList;
@@ -18,11 +19,11 @@ import java.util.Set;
 public class ModuleMappingUtil {
 
     public static final Map<String, Map<Set<String>, String>> xmlDataTypeModuleInfo = Maps.newHashMap();
-    public static final ThreadLocal<String> hospitalIdThreadLocal = new ThreadLocal<>();
 
     public static String getXmlDataTypeModuleId(Map<String, String> sourceMap) {
+        SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
         if (MapUtils.isEmpty(sourceMap)
-                || MapUtils.isEmpty(xmlDataTypeModuleInfo.get(hospitalIdThreadLocal.get()))) {
+                || MapUtils.isEmpty(xmlDataTypeModuleInfo.get(specialStorageUtil.getHospitalIdThreadLocal().get()))) {
             return null;
         }
         Set<String> set = sourceMap.keySet();
@@ -34,7 +35,7 @@ public class ModuleMappingUtil {
             }
         });
         set = Sets.newLinkedHashSet(list);
-        return xmlDataTypeModuleInfo.get(hospitalIdThreadLocal.get()).get(set);
+        return xmlDataTypeModuleInfo.get(specialStorageUtil.getHospitalIdThreadLocal().get()).get(set);
     }
 
 }

+ 10 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/util/RedisUtil.java

@@ -665,4 +665,14 @@ public class RedisUtil {
         }
     }
 
+    /**
+     * 获取相关key
+     *
+     * @param pattern
+     * @return
+     */
+    public Set<String> keys(String pattern) {
+        return redisTemplate.keys(pattern);
+    }
+
 }

+ 21 - 0
dbanaly/src/main/java/com/lantone/qc/dbanaly/vo/CrfCacheRemoveVO.java

@@ -0,0 +1,21 @@
+package com.lantone.qc.dbanaly.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Set;
+
+/**
+ * @Description:
+ * @author: rengb
+ * @time: 2020/6/17 16:59
+ */
+@Setter
+@Getter
+public class CrfCacheRemoveVO {
+
+    private Long hospitalId;
+
+    private Set<String> behospitalCodes;
+
+}

+ 3 - 3
dbanaly/src/main/resources/application-db.yml

@@ -26,9 +26,9 @@ spring:
         use-global-data-source-stat: true
   redis:
     database: 10
-    host: 192.168.2.246
+    host: 192.168.2.121
     port: 6379
-    password:
+    password: lantone
     timeout: 2000
     lettuce:
       pool:
@@ -42,4 +42,4 @@ mybatis-plus:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 
-xml-is-encryped: false
+xml-is-encryped: true

+ 22 - 6
kernel/src/main/java/com/lantone/qc/kernel/analysis/QCAnalysis.java

@@ -1,17 +1,18 @@
 package com.lantone.qc.kernel.analysis;
 
 import com.google.common.collect.Maps;
+import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
 import com.lantone.qc.kernel.client.CRFServiceClient;
 import com.lantone.qc.kernel.client.SimilarityServiceClient;
 import com.lantone.qc.kernel.structure.ai.AIAnalyze;
 import com.lantone.qc.kernel.util.CatalogueUtil;
-import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
 import com.lantone.qc.pub.exception.AIException;
 import com.lantone.qc.pub.exception.CatalogueException;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.vo.QueryVo;
 import com.lantone.qc.trans.TransDispatch;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -23,6 +24,7 @@ import java.util.Map;
  * @Author : 楼辉荣
  * @Date: 2020-03-04 11:48
  */
+@Slf4j
 @Component
 public class QCAnalysis {
     @Autowired
@@ -35,7 +37,9 @@ public class QCAnalysis {
     public OutputInfo anlysis(QueryVo queryVo) throws AIException, CatalogueException, Exception {
         specialStorageUtil.getHospitalIdThreadLocal().set(queryVo.getHospitalId());
         OutputInfo outputInfo = new OutputInfo();
+        long t1 = System.currentTimeMillis();
         InputInfo inputInfo = TransDispatch.trans(queryVo);
+        long t2 = System.currentTimeMillis();
         inputInfo.setUseCrfCache(queryVo.isUseCrfCache());
         inputInfo.setInputCatalogueMap(queryVo.getInputCatalogueMap());
         AIAnalyze aiAnalyze = new AIAnalyze(crfServiceClient, similarityServiceClient);
@@ -44,12 +48,24 @@ public class QCAnalysis {
         } catch (Exception e) {
             throw new AIException("AI模型执行错误:" + e.getMessage());
         }
-        for (Map.Entry<String, Map<String, String>> entry : inputInfo.getInputCatalogueMap().entrySet()) {
-            if (CatalogueUtil.qcCatalogueMap.get(entry.getKey()) == null) {
-                continue;
+        long t3 = System.currentTimeMillis();
+//        for (Map.Entry<String, Map<String, String>> entry : inputInfo.getInputCatalogueMap().entrySet()) {
+//            if (CatalogueUtil.qcCatalogueMap.get(entry.getKey()) == null) {
+//                continue;
+//            }
+//            CatalogueUtil.qcCatalogueMap.get(entry.getKey()).execute(inputInfo, outputInfo);
+//        }
+        inputInfo.getInputCatalogueMap().entrySet().parallelStream().forEach(entry -> {
+            if (CatalogueUtil.qcCatalogueMap.get(entry.getKey()) != null) {
+                CatalogueUtil.qcCatalogueMap.get(entry.getKey()).execute(inputInfo, outputInfo);
             }
-            CatalogueUtil.qcCatalogueMap.get(entry.getKey()).execute(inputInfo, outputInfo);
-        }
+        });
+        long t4 = System.currentTimeMillis();
+
+        log.error(queryVo.getBehospitalInfo().getBehospitalCode() + "-----" + "trans层  耗时:" + (t2 - t1));
+        log.error(queryVo.getBehospitalInfo().getBehospitalCode() + "-----" + "CRF  耗时:" + (t3 - t2));
+        log.error(queryVo.getBehospitalInfo().getBehospitalCode() + "-----" + "所有规则  耗时:" + (t4 - t3));
+
         outputInfo.setPageData(inputInfo.getPageData());
         Map<String, Map<String, String>> result = outputInfo.getResult();
         Map<String, Map<String, String>> resultNew = Maps.newHashMap();

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

@@ -23,6 +23,7 @@ public class QCCatalogue {
     protected ThreadLocal<String> info = new ThreadLocal<String>();
 
     public void execute(InputInfo inputInfo, OutputInfo outputInfo) {
+//        long t1 = System.currentTimeMillis();
         if (outputInfo.getResult().get(className) != null) {
             return;
         }
@@ -35,8 +36,10 @@ public class QCCatalogue {
             start(inputInfo, outputInfo);
         } catch (Exception e) {
             variablePreset("-1", "");
-            log.info(e.getMessage() + "......类名:" + this.className);
+            log.error(e.getMessage() + "......类名:" + this.className);
         }
+//        long t2 = System.currentTimeMillis();
+//        log.error(inputInfo.getMedicalRecordInfoDoc().getStructureMap().get("behospitalCode") + "-----" + className + "(规则)  耗时:" + (t2 - t1));
         insertOpt(outputInfo);
     }
 

+ 5 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0009.java

@@ -52,6 +52,11 @@ public class BEH0009 extends QCCatalogue {
             if (StringUtil.isNotBlank(chiefText) && status.get().equals("-1")) {
                 List<Clinical> clinicals = chiefLabel.getClinicals();
                 if (clinicals.size() > 0) {
+                    /* 主诉中没有伴字,有症状即可 */
+                    if (!chiefText.contains("伴")){
+                        status.set("0");
+                        return;
+                    }
                     for (Clinical clinical : clinicals) {
                         indexMap.put(clinical.getName(), chiefText.indexOf(clinical.getName()));
                     }

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

@@ -40,7 +40,9 @@ public class BEH0012 extends QCCatalogue {
             for (Diag diag : diags) {
                 List<String> disList = Arrays.asList(strings);
                 for (String diagSplit : diag.getHospitalDiagName().split("、")) {
-
+                    if ("ACT".equals(diagSplit)){
+                        continue;
+                    }
                     String hospitalDiagName = diagSplit.trim().replace("待查", "").replace("?","").replace("?","");
                     if (hospitalDiagName.contains("伴")) {
                         hospitalDiagName = hospitalDiagName.substring(0, hospitalDiagName.indexOf("伴"));

+ 32 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02813.java

@@ -0,0 +1,32 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02813
+ * @Description :  手术外伤史未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-16 10:04
+ */
+@Component
+public class BEH02813 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        if (inputInfo.getBeHospitalizedDoc() != null) {
+            Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            if (StringUtil.isBlank(beHospitalStructureMap.get("手术外伤史"))) {
+                status.set("-1");
+            }
+        }
+    }
+}

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

@@ -0,0 +1,31 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.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");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02915.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02915
+ * @Description :  体格检查神志未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02915 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 (StringUtil.isBlank(beHospitalStructureMap.get("神志水平"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02916.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02916
+ * @Description :  体格检查查体合作性未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02916 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 (StringUtil.isBlank(beHospitalStructureMap.get("查体合作性"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02917.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02917
+ * @Description :  体格检查体位未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02917 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 (StringUtil.isBlank(beHospitalStructureMap.get("体位"))) {
+            status.set("-1");
+        }
+    }
+}

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

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 (StringUtil.isBlank(beHospitalStructureMap.get("面容"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02919.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02919
+ * @Description :  体格检查身高未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02919 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 (StringUtil.isBlank(beHospitalStructureMap.get("身高"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02920.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02920
+ * @Description :  体格检查体重未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02920 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 (StringUtil.isBlank(beHospitalStructureMap.get("体重"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02921.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02921
+ * @Description :  生命体征体温未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02921 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 (StringUtil.isBlank(beHospitalStructureMap.get("体温"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02922.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02922
+ * @Description :  生命体征脉搏未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02922 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 (StringUtil.isBlank(beHospitalStructureMap.get("桡动脉脉率"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02923.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02923
+ * @Description :  生命体征呼吸未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02923 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 (StringUtil.isBlank(beHospitalStructureMap.get("呼吸"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02924.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02924
+ * @Description :  生命体征血压未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02924 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 (StringUtil.isBlank(beHospitalStructureMap.get("血压"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02925.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02925
+ * @Description :  生命体征疼痛评分未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02925 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 (StringUtil.isBlank(beHospitalStructureMap.get("疼痛评分"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02926.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02926
+ * @Description :  婚育史中婚育状况未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02926 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 (StringUtil.isBlank(beHospitalStructureMap.get("婚姻"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02932.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02932
+ * @Description :  既往健康状况未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02932 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 (StringUtil.isBlank(beHospitalStructureMap.get("既往健康状况"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02933.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02933
+ * @Description :  既往糖尿病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02933 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 (StringUtil.isBlank(beHospitalStructureMap.get("糖尿病"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02934.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02934
+ * @Description :  既往高血压病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02934 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 (StringUtil.isBlank(beHospitalStructureMap.get("高血压"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02935.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02935
+ * @Description :  既往心脏病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02935 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 (StringUtil.isBlank(beHospitalStructureMap.get("心脏病"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02936.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02936
+ * @Description :  既往脑血管疾病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02936 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 (StringUtil.isBlank(beHospitalStructureMap.get("脑血管疾病"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02937.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02937
+ * @Description :  既往呼吸系统疾病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02937 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 (StringUtil.isBlank(beHospitalStructureMap.get("呼吸系统疾病"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02938.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02938
+ * @Description :  既往肾脏疾病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02938 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 (StringUtil.isBlank(beHospitalStructureMap.get("肾脏疾病"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02939.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02939
+ * @Description :  既往肝脏疾病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02939 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 (StringUtil.isBlank(beHospitalStructureMap.get("肝脏疾病"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02940.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02940
+ * @Description :  既往内科其他疾病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02940 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 (StringUtil.isBlank(beHospitalStructureMap.get("内科疾病史(其它)"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02941.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02941
+ * @Description :  既往药物食物中毒史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02941 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 (StringUtil.isBlank(beHospitalStructureMap.get("药物食物中毒史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02942.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02942
+ * @Description :  既往输血史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02942 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 (StringUtil.isBlank(beHospitalStructureMap.get("输血史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02943.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02943
+ * @Description :  既往结核病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02943 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 (StringUtil.isBlank(beHospitalStructureMap.get("结核病"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02944.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02944
+ * @Description :  既往病毒性肝炎病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02944 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 (StringUtil.isBlank(beHospitalStructureMap.get("病毒性肝炎"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02945.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02945
+ * @Description :  既往其他传染病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02945 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 (StringUtil.isBlank(beHospitalStructureMap.get("传染病史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02946.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02946
+ * @Description :  既往过敏史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02946 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 (StringUtil.isBlank(beHospitalStructureMap.get("过敏史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02947.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02947
+ * @Description :  既往预防接种史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02947 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 (StringUtil.isBlank(beHospitalStructureMap.get("预防接种史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02948.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02948
+ * @Description :  既往食物、药物中毒史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02948 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 (StringUtil.isBlank(beHospitalStructureMap.get("药物食物中毒史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02949.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02949
+ * @Description :  个人出生生长史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02949 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 (StringUtil.isBlank(beHospitalStructureMap.get("出生生长史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02950.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02950
+ * @Description :  冶游史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02950 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 (StringUtil.isBlank(beHospitalStructureMap.get("冶游史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02951.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02951
+ * @Description :  疫区居留史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02951 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 (StringUtil.isBlank(beHospitalStructureMap.get("疫区居留史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02952.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02952
+ * @Description :  工作性质未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02952 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 (StringUtil.isBlank(beHospitalStructureMap.get("工作性质"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02953.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02953
+ * @Description :  化学及放射性毒物接触史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02953 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 (StringUtil.isBlank(beHospitalStructureMap.get("化学及放射性毒物接触史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02954.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02954
+ * @Description :  吸烟史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02954 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 (StringUtil.isBlank(beHospitalStructureMap.get("吸烟"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02955.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02955
+ * @Description :  饮酒史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02955 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 (StringUtil.isBlank(beHospitalStructureMap.get("饮酒"))) {
+            status.set("-1");
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02956.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02956
+ * @Description : 结婚年龄未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02956 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();
+        String marry = beHospitalStructureMap.get("婚姻");
+        if (StringUtil.isNotBlank(marry) && "未婚".equals(marry)){
+            return;
+        }
+        if (StringUtil.isBlank(beHospitalStructureMap.get("结婚年龄"))) {
+            status.set("-1");
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02957.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02957
+ * @Description : 婚姻家庭关系未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02957 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();
+        String marry = beHospitalStructureMap.get("婚姻");
+        if (StringUtil.isNotBlank(marry) && "未婚".equals(marry)){
+            return;
+        }
+        if (StringUtil.isBlank(beHospitalStructureMap.get("夫妻关系"))) {
+            status.set("-1");
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02958.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02958
+ * @Description : 子女健康状况未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02958 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();
+        String marry = beHospitalStructureMap.get("婚姻");
+        if (StringUtil.isNotBlank(marry) && "未婚".equals(marry)){
+            return;
+        }
+        if (StringUtil.isBlank(beHospitalStructureMap.get("子女健康状况"))) {
+            status.set("-1");
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02959.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02959
+ * @Description : 配偶健康状况未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02959 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();
+        String marry = beHospitalStructureMap.get("婚姻");
+        if (StringUtil.isNotBlank(marry) && "未婚".equals(marry)){
+            return;
+        }
+        if (StringUtil.isBlank(beHospitalStructureMap.get("配偶健康状况"))) {
+            status.set("-1");
+        }
+    }
+}

+ 37 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02960.java

@@ -0,0 +1,37 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02960
+ * @Description : 生育史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02960 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();
+        String marry = beHospitalStructureMap.get("婚姻");
+        if (StringUtil.isNotBlank(marry) && "未婚".equals(marry)) {
+            return;
+        }
+        if (StringUtil.isBlank(beHospitalStructureMap.get("顺产(足月)"))
+                && StringUtil.isBlank(beHospitalStructureMap.get("早产"))
+                && StringUtil.isBlank(beHospitalStructureMap.get("流产"))
+                && StringUtil.isBlank(beHospitalStructureMap.get("存活"))) {
+            status.set("-1");
+        }
+    }
+}

+ 33 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02961.java

@@ -0,0 +1,33 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02961
+ * @Description : 月经史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02961 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 (StringUtil.isBlank(beHospitalStructureMap.get("月经初潮年龄"))
+                && StringUtil.isBlank(beHospitalStructureMap.get("经期天数"))
+                && StringUtil.isBlank(beHospitalStructureMap.get("月经周期"))
+                && StringUtil.isBlank(beHospitalStructureMap.get("绝经年龄"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02962.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02962
+ * @Description :  月经量及性质未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02962 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 (StringUtil.isBlank(beHospitalStructureMap.get("月经量"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02963.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02963
+ * @Description :  家庭成员类似疾病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02963 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 (StringUtil.isBlank(beHospitalStructureMap.get("家庭成员类似病史"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02964.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02964
+ * @Description :  家庭成员健康情况未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02964 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 (StringUtil.isBlank(beHospitalStructureMap.get("家庭成员健康情况"))) {
+            status.set("-1");
+        }
+    }
+}

+ 30 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02965.java

@@ -0,0 +1,30 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02965
+ * @Description :  家庭成员遗传性疾病史未填写(结构化数据)
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02965 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 (StringUtil.isBlank(beHospitalStructureMap.get("家庭成员遗传性疾病"))) {
+            status.set("-1");
+        }
+    }
+}

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

@@ -0,0 +1,60 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : BEH02966
+ * @Description :  入院记录查体与性别不匹配
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02966 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();
+        String gender = beHospitalStructureMap.get("性别");
+        if (StringUtil.isBlank(gender)) {
+            return;
+        }
+        List<String> noMatchWords = null;
+        if (gender.contains("男")) {
+            /* 男性不合理词 */
+            noMatchWords = Lists.newArrayList("阴道", "宫颈", "子宫", "附件", "宫底", "胎位", "胎数", "胎心",
+                    "宫缩", "宫口", "胎膜", "输卵管", "卵巢", "输卵管", "阴唇", "阴蒂", "阴道前庭", "前庭大腺", "处女膜");
+        } else if (gender.contains("女")) {
+            /* 女性不合理词 */
+            noMatchWords = Lists.newArrayList("睾丸", "阴囊", "阴茎", "精索", "包皮", "附睾", "输精管",
+                    "射精管", "尿道海绵体", "冠状沟", "前列腺", "精阜", "精囊腺");
+        }
+        if (noMatchWords == null || noMatchWords.size() == 0) {
+            return;
+        }
+
+        List<String> keys = Lists.newArrayList("主诉", "现病史", "既往史", "个人史", "体格检查", "一般情况"
+                , "初步诊断", "专科体格检查", "神经系统检查");
+        String text = CatalogueUtil.structureMapJoin(beHospitalStructureMap, keys);
+
+        for (String noMatchWord : noMatchWords) {
+            if (text.contains(noMatchWord)) {
+                status.set("-1");
+                info.set(noMatchWord);
+                return;
+            }
+        }
+    }
+}

+ 38 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02969.java

@@ -0,0 +1,38 @@
+package com.lantone.qc.kernel.catalogue.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 : BEH02969
+ * @Description :  入院记录中监测生命体征书写不规范
+ * @Author : 胡敬
+ * @Date: 2020-06-16 13:15
+ */
+@Component
+public class BEH02969 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();
+        String treatPlan = beHospitalStructureMap.get("诊疗计划");
+        String treatmentMonitoringPlan = beHospitalStructureMap.get("治疗监测计划");
+        if (StringUtil.isBlank(treatPlan) && StringUtil.isBlank(treatmentMonitoringPlan)) {
+            return;
+        }
+        treatPlan = StringUtil.isBlank(treatPlan) ? "" : treatPlan;
+        treatmentMonitoringPlan = StringUtil.isBlank(treatmentMonitoringPlan) ? "" : treatPlan;
+        String text = treatPlan + "," + treatmentMonitoringPlan;
+        if (text.contains("生命体征") && (!text.contains("测") || !text.contains("血压") || !text.contains("心率"))) {
+            status.set("-1");
+        }
+    }
+}

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

@@ -73,7 +73,7 @@ public class BEH0378 extends QCCatalogue {
             long count = familyList
                     .stream()
                     .filter(
-                            i -> i.getDead().getDeadReason() != null && StringUtil.isNotBlank(i.getDead().getDeadReason().getName())
+                            i -> (i.getDead().getDeadReason() != null && StringUtil.isNotBlank(i.getDead().getDeadReason().getName())) || StringUtil.isNotBlank(i.getDead().getUnknow().getName())
                     )
                     .count();
             if (count > 0) {

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

@@ -24,8 +24,9 @@ public class BEH0424 extends QCCatalogue {
         }
         Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
         if(structureMap != null){
-            String name = structureMap.get("电话");
-            if(CatalogueUtil.isEmpty(name)){
+            String phone = structureMap.get("电话");
+            String contactNumber = structureMap.get("联系人电话");
+            if(CatalogueUtil.isEmpty(phone) && CatalogueUtil.isEmpty(contactNumber)){
                 status.set("-1");
             }
         }

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

@@ -11,7 +11,7 @@ import java.util.Map;
 
 /**
  * @ClassName : BEH0438
- * @Description : 入院记录个人出生日期未填写
+ * @Description : 入院记录出生日期未填写
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28
  */

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

@@ -24,7 +24,7 @@ public class BEH0457 extends QCCatalogue {
         }
         Map<String, String> bhMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
         if (bhMap != null) {
-            String birthDate = bhMap.get("长期用药情况\\(包括可能成瘾的药物\\)");
+            String birthDate = bhMap.get("长期用药");
             if (birthDate != null) {
                 if (CatalogueUtil.isEmpty(birthDate)) {
                     status.set("-1");

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

@@ -24,7 +24,7 @@ public class BEH0462 extends QCCatalogue {
         }
         if (inputInfo.getBeHospitalizedDoc() != null) {
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-            if (StringUtil.isBlank(beHospitalStructureMap.get("心血管疾病"))) {
+            if (StringUtil.isBlank(beHospitalStructureMap.get("心病"))) {
                 status.set("-1");
             }
         }

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

@@ -24,7 +24,7 @@ public class BEH0467 extends QCCatalogue {
         }
         if (inputInfo.getBeHospitalizedDoc() != null) {
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-            if (StringUtil.isBlank(beHospitalStructureMap.get("内科疾病史-其它"))) {
+            if (StringUtil.isBlank(beHospitalStructureMap.get("内科疾病史(其它)"))) {
                 status.set("-1");
             }
         }

+ 11 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0474.java

@@ -4,6 +4,7 @@ import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -11,7 +12,7 @@ import java.util.Map;
 
 /**
  * @ClassName : BEH0474
- * @Description :  一般情况未填写
+ * @Description :  体格检查一般情况未填写
  * @Author : 胡敬
  * @Date: 2020-03-26 19:39
  */
@@ -23,10 +24,15 @@ public class BEH0474 extends QCCatalogue {
             return;
         }
         Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-        if (structureMap != null) {
-            if (CatalogueUtil.isEmpty(structureMap.get("一般情况"))) {
-                status.set("-1");
-            }
+        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");
         }
 
     }

+ 20 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0573.java

@@ -21,17 +21,32 @@ public class CLI0573 extends QCCatalogue {
     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) {
+        if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
+            for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
                 Map<String, String> cliBStructureMap = cliB.getStructureMap();
-                if(cliBStructureMap.containsKey("输注前评估")){
-                    if(StringUtils.isEmpty(cliBStructureMap.get("输注前评估"))){
+               /* if (cliBStructureMap.containsKey("输注前评估")) {
+                    if (StringUtils.isEmpty(cliBStructureMap.get("输注前评估"))
+                            && StringUtils.isEmpty(cliBStructureMap.get("输血检验指标"))
+                            && StringUtils.isEmpty(cliBStructureMap.get("输血项目"))
+                            && StringUtils.isEmpty(cliBStructureMap.get("输血目的"))
+                            && StringUtils.isEmpty(cliBStructureMap.get("输血计划"))) {
                         status.set("-1");
                         break;
                     }
-                }else {
+                } else {
                     status.set("-1");
                     break;
+                }*/
+
+                if (StringUtils.isEmpty(cliBStructureMap.get("输注前评估"))
+                        && StringUtils.isEmpty(cliBStructureMap.get("初步诊断"))
+                        && StringUtils.isEmpty(cliBStructureMap.get("输血检验指标"))
+                        && StringUtils.isEmpty(cliBStructureMap.get("输血项目"))
+                        && StringUtils.isEmpty(cliBStructureMap.get("输血目的"))
+                        && StringUtils.isEmpty(cliBStructureMap.get("输血计划"))) {
+                    status.set("-1");
+                    break;
+
                 }
 
             }

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

@@ -31,7 +31,7 @@ public class CON0533 extends QCCatalogue {
                 continue;
             }
             Map<String, String> consultationResultStructureMap = consultationApplicationDoc.getStructureMap();
-            String consultationDateStr = consultationResultStructureMap.get("会诊类");
+            String consultationDateStr = consultationResultStructureMap.get("会诊类");
             if (CatalogueUtil.isEmpty(consultationDateStr)) {
                 status.set("-1");
                 return;

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

@@ -28,7 +28,7 @@ public class FIRC0088 extends QCCatalogue {
         }
         Map<String, String> firstCourseStructureMap = firstCourseRecordDoc.getStructureMap();
         String diffDiag = firstCourseStructureMap.get("鉴别诊断");
-        if (StringUtil.isBlank(diffDiag)) {
+        if (StringUtil.isBlank(diffDiag) || diffDiag.contains("诊断明确") || diffDiag.contains("无需鉴别")) {
             return;
         }
         DiagLabel differentialDiagLabel = firstCourseRecordDoc.getDifferentialDiagLabel();

+ 3 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0096.java

@@ -40,6 +40,9 @@ public class FIRC0096 extends QCCatalogue {
                 if(diags != null && diags.size()>0){
                     for (Diag diag:diags) {
                         String hospitalDiagName = diag.getHospitalDiagName().trim().replace("待查","").replace("?","").replace("?","");
+                        if ("ACT".equals(hospitalDiagName)){
+                            continue;
+                        }
                         if (hospitalDiagName.contains("伴")){
                             hospitalDiagName = hospitalDiagName.substring(0,hospitalDiagName.indexOf("伴"));
                         }

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC02910.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.firstcourserecord;
+
+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.doc.FirstCourseRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRC02910
+ * @Description : 首次病程创建时间早于患者入院时间
+ * @Author : 胡敬
+ * @Date: 2020-06-12 14:12
+ */
+@Component
+public class FIRC02910 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (firstCourseRecordDoc == null || beHospitalizedDoc == null) {
+            return;
+        }
+        Map<String, String> firstRecordMap = firstCourseRecordDoc.getStructureMap();
+        Map<String, String> beHospitalizedMap = beHospitalizedDoc.getStructureMap();
+        String createDateStr = firstRecordMap.get("记录时间");
+        String beHospitalDateStr = beHospitalizedMap.get("入院日期");
+        if (StringUtil.isNotBlank(createDateStr) && StringUtil.isNotBlank(beHospitalDateStr)) {
+            Date createDate = StringUtil.parseDateTime(createDateStr);
+            Date beHospitalDate = StringUtil.parseDateTime(beHospitalDateStr);
+            if (createDate != null && beHospitalDate != null) {
+                if (createDate.before(beHospitalDate)) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+}

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

@@ -0,0 +1,39 @@
+package com.lantone.qc.kernel.catalogue.firstcourserecord;
+
+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.FirstCourseRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRC02970
+ * @Description : 首次病程记录中监测生命体征书写不规范
+ * @Author : 胡敬
+ * @Date: 2020-06-16 17:36
+ */
+@Component
+public class FIRC02970 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        String treatPlan = beHospitalStructureMap.get("诊疗计划");
+        String treatmentMonitoringPlan = beHospitalStructureMap.get("治疗监测计划");
+        if (StringUtil.isBlank(treatPlan) && StringUtil.isBlank(treatmentMonitoringPlan)) {
+            return;
+        }
+        treatPlan = StringUtil.isBlank(treatPlan) ? "" : treatPlan;
+        treatmentMonitoringPlan = StringUtil.isBlank(treatmentMonitoringPlan) ? "" : treatPlan;
+        String text = treatPlan + "," + treatmentMonitoringPlan;
+        if (text.contains("生命体征") && (!text.contains("测") || !text.contains("血压") || !text.contains("心率"))) {
+            status.set("-1");
+        }
+    }
+}

+ 4 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0502.java

@@ -6,6 +6,7 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
 import com.lantone.qc.pub.model.entity.Lis;
+import com.lantone.qc.pub.model.entity.Pacs;
 import com.lantone.qc.pub.model.label.TreatPlanLabel;
 import org.springframework.stereotype.Component;
 
@@ -14,7 +15,7 @@ import java.util.Map;
 
 /**
  * @ClassName : FIRC0502
- * @Description : 检查计划无化验项目名称
+ * @Description : 诊疗计划无化验或辅检项目名称
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28
  */
@@ -25,8 +26,8 @@ public class FIRC0502 extends QCCatalogue {
         FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
         if(firstCourseRecordDoc != null){
             TreatPlanLabel treatPlanLabel = firstCourseRecordDoc.getTreatPlanLabel();
-            List<Lis> lis = treatPlanLabel.getLis();
-            if(lis == null || lis.size() == 0){
+            List<Pacs> pacs = treatPlanLabel.getPacs();
+            if(pacs == null || pacs.size() == 0){
                 status.set("-1");
             }
 

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

@@ -5,6 +5,7 @@ import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
 import com.lantone.qc.pub.model.entity.AllergyMedicine;
 import com.lantone.qc.pub.model.label.PastLabel;
 import com.lantone.qc.pub.util.ListUtil;
@@ -25,12 +26,11 @@ import java.util.Map;
 public class FIRP0185 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) {
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getBeHospitalizedDoc() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String drugAllergy = firstpageStructureMap.get(Content.drugAllergy);
-
-            PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+            BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+            PastLabel pastLabel = beHospitalizedDoc.getPastLabel();
             List<AllergyMedicine> allergyMedicines = pastLabel.getAllergyMedicines();
             if (allergyMedicines.size() == 0 || CatalogueUtil.isEmpty(drugAllergy)) {
                 return;

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

@@ -47,7 +47,7 @@ public class LEA0149 extends QCCatalogue {
 
             //如果出院小结结构化数据能取出主诉,则直接用该主诉和入院记录主诉比较
             if (StringUtil.isNotBlank(leaveChief)) {
-                leaveChief = leaveChief.replaceAll("[\\p{Punct}\\pP。-]", "");
+                leaveChief = CatalogueUtil.int2ChineseNum(leaveChief.replaceAll("[\\p{Punct}\\pP。-]", ""));
                 if (bhChief.equals(leaveChief)) {
                     status.set("0");
                     return;

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

@@ -0,0 +1,60 @@
+package com.lantone.qc.kernel.catalogue.leavehospital;
+
+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.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : LEA02968
+ * @Description :  出院小结查体与性别不匹配
+ * @Author : 胡敬
+ * @Date: 2020-06-13 16:25
+ */
+@Component
+public class LEA02968 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getLeaveHospitalDoc() == null) {
+            return;
+        }
+
+        Map<String, String> structureMap = inputInfo.getLeaveHospitalDoc().getStructureMap();
+        String gender = structureMap.get("性别");
+        if (StringUtil.isBlank(gender)) {
+            return;
+        }
+        List<String> noMatchWords = null;
+        if (gender.contains("男")) {
+            /* 男性不合理词 */
+            noMatchWords = Lists.newArrayList("阴道", "宫颈", "子宫", "附件", "宫底", "胎位", "胎数", "胎心",
+                    "宫缩", "宫口", "胎膜", "输卵管", "卵巢", "输卵管", "阴唇", "阴蒂", "阴道前庭", "前庭大腺", "处女膜");
+        } else if (gender.contains("女")) {
+            /* 女性不合理词 */
+            noMatchWords = Lists.newArrayList("睾丸", "阴囊", "阴茎", "精索", "包皮", "附睾", "输精管",
+                    "射精管", "尿道海绵体", "冠状沟", "前列腺", "精阜", "精囊腺");
+        }
+
+        if (noMatchWords == null || noMatchWords.size() == 0) {
+            return;
+        }
+        List<String> keys = Lists.newArrayList("入院诊断", "出院诊断", "入院情况", "诊治经过", "出院情况", "出院医嘱"
+                , "随访计划", "主诉", "专科检查", "健康教育");
+        String text = CatalogueUtil.structureMapJoin(structureMap, keys);
+
+        for (String noMatchWord : noMatchWords) {
+            if (text.contains(noMatchWord)) {
+                status.set("-1");
+                info.set(noMatchWord);
+                return;
+            }
+        }
+    }
+}

+ 9 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0508.java

@@ -1,8 +1,8 @@
 package com.lantone.qc.kernel.catalogue.leavehospital;
 
-import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.dbanaly.util.KernelConstants;
 import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
@@ -34,16 +34,20 @@ public class LEA0508 extends QCCatalogue {
             status.set("0");
             return;
         }
+
         SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
         Map<String, Object> surgeon = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP);
         if (surgeon == null) {
             status.set("0");
             return;
         }
-        Map<String, String> doctor = (Map) surgeon.get(doctorName);
-        String occup = doctor.get("occup");
-        if (StringUtils.isNotEmpty(occup) && "1".equals(occup)) {
-            status.set("0");
+        for (String doctorNameSplit : doctorName.split("\\s+")) {
+            Map<String, String> doctor = (Map) surgeon.get(doctorNameSplit);
+            String occup = doctor.get("occup");
+            if (StringUtils.isNotEmpty(occup) && "1".equals(occup)) {
+                status.set("0");
+                return;
+            }
         }
     }
 }

+ 15 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0514.java

@@ -40,24 +40,33 @@ public class LEA0514 extends QCCatalogue {
                     return;
                 }
                 //首页出院诊断
-                List<Diag> dischargeDiags = new ArrayList<>();
+                List<String> dischargeDiags = new ArrayList<>();
                 for (Map<String, String> dischargeDiagMap : dischargeDiagStructure) {
                     String diagnoseName = dischargeDiagMap.get(Content.diagnoseName);
                     if (CatalogueUtil.isEmpty(diagnoseName)) {
                         continue;
                     }
-                    Diag diag = new Diag();
-                    diag.setName(diagnoseName);
-                    dischargeDiags.add(diag);
+                    dischargeDiags.add(diagnoseName);
                 }
                 if (leaveDiagLabel != null) {
                     //出院记录出院诊断
-                    List<Diag> beHospitalizedDiags = leaveDiagLabel.getDiags();
-                    if (!ListUtil.equals(beHospitalizedDiags, dischargeDiags)) {
+                    List<Diag> leaveDiags = leaveDiagLabel.getDiags();
+                    List<String> leaveDiagStrList = getDiagList(leaveDiags);
+                    if (!ListUtil.equals(leaveDiagStrList, dischargeDiags)) {
                         status.set("-1");
                     }
                 }
             }
         }
     }
+
+    private List<String> getDiagList(List<Diag> diags) {
+        List<String> diagList = new ArrayList<>();
+        for (Diag diag : diags) {
+            if (diag.getHospitalDiagName() != null) {
+                diagList.add(diag.getHospitalDiagName());
+            }
+        }
+        return diagList;
+    }
 }

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

@@ -29,7 +29,9 @@ public class LEA0559 extends QCCatalogue {
         if (deathRecordDoc == null || deathRecordDoc.getText() == null) {
             Map<String, String> structureMap = leaveHospitalDoc.getStructureMap();
             if (structureMap != null) {
-                if (StringUtils.isBlank(structureMap.get("出院带药"))) {
+                String dischargeWithMedicine = structureMap.get("出院带药");
+                String dischargeOrder = structureMap.get("出院医嘱");
+                if (StringUtils.isBlank(dischargeWithMedicine) && StringUtils.isBlank(dischargeOrder)) {
                     status.set("-1");
                 }
             }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/medicalwriting/MEDI02888.java

@@ -13,7 +13,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
- * @ClassName : NOT0720
+ * @ClassName : MEDI02888
  * @Description : 缺入院72小时内谈话记录
  * @Author : 胡敬
  * @Date: 2020-04-21 18:40

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02927.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+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.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 手术方式未填写
+ * @author: 胡敬
+ * @time: 2020/6/15 16:41
+ */
+@Component
+public class OPE02927 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+//        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+//        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if(operationDocs == null || operationDocs.size() == 0){
+            status.set("0");
+            return;
+        }
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getPreoperativeDiscussionDoc() != null
+                            && StringUtil.isBlank(operationDoc.getPreoperativeDiscussionDoc().getStructureMap().get("手术方式"))) {
+                        flag = true;
+                    }
+                    return flag;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+//    }
+
+}

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02928.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+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.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 手术名称未填写
+ * @author: 胡敬
+ * @time: 2020/6/15 16:41
+ */
+@Component
+public class OPE02928 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+//        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+//        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if(operationDocs == null || operationDocs.size() == 0){
+            status.set("0");
+            return;
+        }
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getPreoperativeDiscussionDoc() != null
+                            && StringUtil.isBlank(operationDoc.getPreoperativeDiscussionDoc().getStructureMap().get("手术名称"))) {
+                        flag = true;
+                    }
+                    return flag;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+//    }
+
+}

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02929.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+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.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 可能变更的术式未填写
+ * @author: 胡敬
+ * @time: 2020/6/15 16:41
+ */
+@Component
+public class OPE02929 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+//        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+//        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if(operationDocs == null || operationDocs.size() == 0){
+            status.set("0");
+            return;
+        }
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getPreoperativeDiscussionDoc() != null
+                            && StringUtil.isBlank(operationDoc.getPreoperativeDiscussionDoc().getStructureMap().get("可能的变更"))) {
+                        flag = true;
+                    }
+                    return flag;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+//    }
+
+}

+ 84 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02930.java

@@ -0,0 +1,84 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+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 : OPE02930
+ * @Description : 术后首次病程未即刻完成
+ * @Author : 胡敬
+ * @Date: 2020-06-15 17:30
+ */
+@Component
+public class OPE02930 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        //        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        //        if (isOperativePatient) {
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (operationDocs == null || operationDocs.size() == 0) {
+            status.set("0");
+            return;
+        }
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
+            String operationStartDateStr = operationRecordStructureMap.get("手术开始时间");
+            String operationEndDateStr = operationRecordStructureMap.get("手术结束时间");
+            if (StringUtil.isEmpty(operationStartDateStr) || StringUtil.isEmpty(operationEndDateStr)) {
+                continue;
+            }
+            Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
+            Date operationEndDate = StringUtil.parseDateTime(operationEndDateStr);
+            if (operationStartDate == null || operationEndDate == null) {
+                continue;
+            }
+            for (OperationDoc o : operationDocs) {
+                OperationDiscussionDoc operationDiscussionDoc = o.getOperationDiscussionDoc();
+                Map<String, String> structureMap = operationDiscussionDoc.getStructureMap();
+                String discussionStartDateStr = structureMap.get("手术开始时间");
+                String discussionEndDateStr = structureMap.get("手术结束时间");
+                if (StringUtil.isBlank(discussionStartDateStr) || StringUtil.isBlank(discussionEndDateStr)) {
+                    continue;
+                }
+                Date discussionStartDate = StringUtil.parseDateTime(discussionStartDateStr);
+                Date discussionEndDate = StringUtil.parseDateTime(discussionEndDateStr);
+                if (discussionStartDate == null || discussionEndDate == null) {
+                    continue;
+                }
+                if (operationStartDate.equals(discussionStartDate) && operationEndDate.equals(discussionEndDate)) {
+                    String discussionRecordDateStr = structureMap.get("记录时间");
+                    if (StringUtil.isBlank(discussionRecordDateStr)) {
+                        status.set("0");
+                        return;
+                    }
+                    Date discussionRecordDate = StringUtil.parseDateTime(discussionRecordDateStr);
+                    if (discussionRecordDate == null) {
+                        status.set("0");
+                        return;
+                    }
+
+                    if (CatalogueUtil.compareTime(discussionEndDate, discussionRecordDate, 15 * 60L)) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        }
+        //        }
+    }
+}

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

@@ -37,7 +37,7 @@ public class OPE0323 extends QCCatalogue {
                         boolean flag = false;
                         if (operationDoc.getOperationRecordDoc() != null) {
                             String surgeon = operationDoc.getOperationRecordDoc().getStructureMap().get("手术医师");
-                            String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("助手I");
+                            String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("助");
                             String signature = operationDoc.getOperationRecordDoc().getStructureMap().get("主刀医师签名");
                             if (StringUtil.isNotBlank(surgeon) && StringUtil.isNotBlank(assist1)) {
                                 String operator = surgeon + ", " + assist1;

+ 30 - 21
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0350.java

@@ -26,29 +26,38 @@ public class OPE0350 extends QCCatalogue {
         //            return;
         //        }
         //        boolean isOperativePatient = CatalogueUtil.isOperativePatients(doctorAdviceDocs);
-//        boolean isOperativePatient = true;//是手术患者(暂时默认是)
-//        if (isOperativePatient) {
-            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
-            if(operationDocs == null || operationDocs.size() == 0){
-                status.set("0");
-                return;
-            }
-            if (ListUtil.isNotEmpty(operationDocs)) {
-                long count = operationDocs.stream().filter(operationDoc -> {
-                    boolean flag = false;
-                    if (operationDoc.getOperationDiscussionDoc() != null
-                            && operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel() != null
-                            && (StringUtil.isBlank(operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getOperativeFindings())
-                            || operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getOperativeFindings().length() < 30)) {
-                        flag = true;
-                    }
-                    return flag;
-                }).count();
-                if (count > 0) {
-                    status.set("-1");
+        //        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        //        if (isOperativePatient) {
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (operationDocs == null || operationDocs.size() == 0) {
+            status.set("0");
+            return;
+        }
+        if (ListUtil.isNotEmpty(operationDocs)) {
+            long count = operationDocs.stream().filter(operationDoc -> {
+                boolean flag = false;
+                if (operationDoc.getOperationDiscussionDoc() != null
+                        && operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel() != null
+                        && (StringUtil.isBlank(operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getOperativeFindings())
+                        || operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getOperativeFindings().length() < 30)) {
+                    flag = true;
+                }
+                return flag;
+            }).count();
+
+            long structureCount = operationDocs.stream().filter(operationDoc -> {
+                boolean flag = false;
+                if (operationDoc.getOperationDiscussionDoc() != null
+                        && StringUtil.isBlank(operationDoc.getOperationDiscussionDoc().getStructureMap().get("手术经过"))) {
+                    flag = true;
                 }
+                return flag;
+            }).count();
+            if (count > 0 && structureCount > 0) {
+                status.set("-1");
             }
         }
-//    }
+    }
+    //    }
 
 }

+ 3 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0351.java

@@ -47,11 +47,9 @@ public class OPE0351 extends QCCatalogue {
                 boolean flag = false;
                 if (operationDoc.getOperationDiscussionDoc() != null
                         && StringUtil.isNotBlank(operationDoc.getOperationDiscussionDoc().getText())
-                        && (operationDoc.getOperationDiscussionDoc().getText().contains("体温")
-                        || operationDoc.getOperationDiscussionDoc().getText().contains("呼吸")
-                        || operationDoc.getOperationDiscussionDoc().getText().contains("脉搏")
-                        || operationDoc.getOperationDiscussionDoc().getText().contains("血压")
-                        || operationDoc.getOperationDiscussionDoc().getText().contains("心率")
+                        && (operationDoc.getOperationDiscussionDoc().getText().contains("°C")
+                        || operationDoc.getOperationDiscussionDoc().getText().contains("次/分")
+                        || operationDoc.getOperationDiscussionDoc().getText().contains("mmHg")
                 )) {
                     flag = true;
                 }

+ 3 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0353.java

@@ -48,12 +48,12 @@ public class OPE0353 extends QCCatalogue {
                     || operationDiscussionDoc.getStructureMap().get("术后注意事项") != null) {
                 continue;
             }
-
+            String treatPlan = operationDiscussionDoc.getStructureMap().get("治疗计划和措施");
             OperationDiscussionLabel operationDiscussionLabel = operationDiscussionDoc.getOperationDiscussionLabel();
             String measuresAfterOp = operationDiscussionLabel.getMeasuresAfterOp();
             String attentionAfterOp = operationDiscussionLabel.getAttentionAfterOp();
-            if (StringUtil.isBlank(measuresAfterOp) || measuresAfterOp.length() < 10
-                    || StringUtil.isBlank(attentionAfterOp) || attentionAfterOp.length() < 10) {
+            if ((StringUtil.isBlank(measuresAfterOp) || measuresAfterOp.length() < 10 || StringUtil.isBlank(attentionAfterOp) || attentionAfterOp.length() < 10)
+                    && StringUtil.isBlank(treatPlan)) {
                 status.set("-1");
                 return;
             }

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

@@ -33,7 +33,7 @@ public class OPE0635 extends QCCatalogue {
                 long count = operationDocs.stream().filter(operationDoc -> {
                     boolean flag = false;
                     if (operationDoc.getOperationRecordDoc() != null
-                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("手术经过及处理(包括患者的体位、切口处理、病灶所见及手术步骤等)"))) {
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("手术经过"))) {
                         flag = true;
                     }
                     return flag;

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

@@ -22,28 +22,28 @@ public class OPE0637 extends QCCatalogue {
     @Override
     protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
         status.set("0");
-//        boolean isOperativePatient = true;//是手术患者(暂时默认是)
-//        if (isOperativePatient) {
-            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
-        if(operationDocs == null || operationDocs.size() == 0){
+        //        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        //        if (isOperativePatient) {
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (operationDocs == null || operationDocs.size() == 0) {
             status.set("0");
             return;
         }
-            if (ListUtil.isNotEmpty(operationDocs)) {
-                long count = operationDocs.stream().filter(operationDoc -> {
-                    boolean flag = false;
-                    if (operationDoc.getOperationRecordDoc() != null
-                            && (StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("助手I"))
-                            || StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("助手II")))) {
-                        flag = true;
-                    }
-                    return flag;
-                }).count();
-                if (count > 0) {
-                    status.set("-1");
+        if (ListUtil.isNotEmpty(operationDocs)) {
+            long count = operationDocs.stream().filter(operationDoc -> {
+                boolean flag = false;
+                if (operationDoc.getOperationRecordDoc() != null
+                        && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("一助"))
+                        && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("助手II"))) {
+                    flag = true;
                 }
+                return flag;
+            }).count();
+            if (count > 0) {
+                status.set("-1");
             }
         }
-//    }
+    }
+    //    }
 
 }

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

@@ -33,7 +33,8 @@ public class OPE0638 extends QCCatalogue {
                 long count = operationDocs.stream().filter(operationDoc -> {
                     boolean flag = false;
                     if (operationDoc.getOperationRecordDoc() != null
-                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("器械护士"))) {
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("器械护士1"))
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("器械护士2"))) {
                         flag = true;
                     }
                     return flag;

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

@@ -33,7 +33,8 @@ public class OPE0639 extends QCCatalogue {
                 long count = operationDocs.stream().filter(operationDoc -> {
                     boolean flag = false;
                     if (operationDoc.getOperationRecordDoc() != null
-                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("巡回护士"))) {
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("巡回护士1"))
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("巡回护士2"))) {
                         flag = true;
                     }
                     return flag;

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

@@ -33,7 +33,7 @@ public class OPE0644 extends QCCatalogue {
                 long count = operationDocs.stream().filter(operationDoc -> {
                     boolean flag = false;
                     if (operationDoc.getOperationRecordDoc() != null
-                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("术中并发症"))) {
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("是否术中并发症"))) {
                         flag = true;
                     }
                     return flag;

+ 3 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0648.java

@@ -33,10 +33,10 @@ public class OPE0648 extends QCCatalogue {
                 long count = operationDocs.stream().filter(operationDoc -> {
                     boolean flag = false;
                     if (operationDoc.getOperationRecordDoc() != null) {
-                        String surgeon = operationDoc.getOperationRecordDoc().getStructureMap().get("手术医师");
-                        String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("助手I");
+                        String surgeon = operationDoc.getOperationRecordDoc().getStructureMap().get("主刀医师");
+                        String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("助");
                         String asssit2 = operationDoc.getOperationRecordDoc().getStructureMap().get("助手II");
-                        String signature = operationDoc.getOperationRecordDoc().getStructureMap().get("主刀医师签名");
+                        String signature = operationDoc.getOperationRecordDoc().getStructureMap().get("医生");
 
                         String operator = surgeon + ", " + assist1 + ", " + asssit2;
 

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

@@ -28,16 +28,13 @@ public class OPE0650 extends QCCatalogue {
             status.set("0");
             return;
         }
-        if (operationDocs.size() == 0) {
-            return;
-        }
         for (OperationDoc operationDoc : operationDocs) {
             OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
             if (operationDiscussionDoc == null) {
                 continue;
             }
             Map<String, String> operationDiscussionStructureMap = operationDiscussionDoc.getStructureMap();
-            if (CatalogueUtil.isEmpty(operationDiscussionStructureMap.get("手术方式"))) {
+            if (CatalogueUtil.isEmpty(operationDiscussionStructureMap.get("手术名称"))) {
                 status.set("-1");
                 return;
             }

+ 61 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/preoperativediscussion/PRE0328.java

@@ -6,11 +6,16 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 手术患者无术前讨论记录
@@ -35,11 +40,8 @@ public class PRE0328 extends QCCatalogue {
         boolean emergencyOperation = findEmergencyOperation(inputInfo);
         boolean emergencyOperationFromWardRecord = findEmergencyOperationFromWardRecord(inputInfo);
 
-        int i = 0, j = 0;
+        int i = getOperationSum(operationDocs), j = 0;
         for (OperationDoc operationDoc : operationDocs) {
-            if (operationDoc.getOperationRecordDoc() != null) {
-                i++;
-            }
             if (operationDoc.getPreoperativeDiscussionDoc() != null) {
                 j++;
             }
@@ -50,7 +52,7 @@ public class PRE0328 extends QCCatalogue {
                 j++;
             }
         }
-        if (i > 0 && i != j) {
+        if (i > 0 && i > j) {
             status.set("-1");
             info.set("手术记录不一致");
         }
@@ -86,4 +88,58 @@ public class PRE0328 extends QCCatalogue {
         return false;
     }
 
+    /**
+     * 获取手术记录次数
+     * @param operationDocs
+     * @return
+     */
+    private int getOperationSum(List<OperationDoc> operationDocs) {
+        List<Map<String, Date>> operationDateList = new ArrayList<>();
+        Map<String, Date> operationDate = null;
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> structureMap = operationRecordDoc.getStructureMap();
+            String operationStartDateStr = structureMap.get("手术开始时间");
+            String operationEndDateStr = structureMap.get("手术结束时间");
+            if (StringUtil.isNotBlank(operationStartDateStr) && StringUtil.isNotBlank(operationEndDateStr)) {
+                Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
+                Date operationEndDate = StringUtil.parseDateTime(operationEndDateStr);
+                if (operationStartDate != null && operationEndDate != null) {
+                    /* 放第一个手术记录的时间到operationDateList */
+                    if (operationDateList.size() == 0) {
+                        operationDate = new HashMap<>();
+                        operationDate.put("手术开始时间", operationStartDate);
+                        operationDate.put("手术结束时间", operationEndDate);
+                        operationDateList.add(operationDate);
+                        continue;
+                    }
+                    /* 如果其中一个手术记录的开始时间到结束时间之间还包含另一个手术,就不往operationDateList里加 */
+                    boolean findInnerOperation = false;
+                    for (Map<String, Date> date : operationDateList) {
+                        Date listStartDate = date.get("手术开始时间");
+                        Date listEndDate = date.get("手术结束时间");
+                        if (operationStartDate.before(listStartDate) && listEndDate.before(operationEndDate)){
+                            date.put("手术开始时间", operationStartDate);
+                            date.put("手术结束时间", operationEndDate);
+                        }
+                        if (listStartDate.before(operationStartDate) && operationEndDate.before(listEndDate)) {
+                            findInnerOperation = true;
+                            break;
+                        }
+                    }
+                    if (!findInnerOperation) {
+                        operationDate = new HashMap<>();
+                        operationDate.put("手术开始时间", operationStartDate);
+                        operationDate.put("手术结束时间", operationEndDate);
+                        operationDateList.add(operationDate);
+                    }
+                }
+            }
+        }
+        return operationDateList.size();
+    }
+
 }

+ 31 - 21
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0144.java

@@ -16,7 +16,7 @@ import java.util.Map;
 
 /**
  * @ClassName : THR0144
- * @Description : 患者出院前无主治医师/副主任医师/主任医师/科主任同意出院的病程记录
+ * @Description : 患者出院前无上级医师(主治及以上)同意出院的病程记录
  * @Author : 胡敬
  * @Date: 2020-03-19 17:20
  */
@@ -29,7 +29,7 @@ public class THR0144 extends QCCatalogue {
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
         DeathCaseDiscussDoc deathCaseDiscussDoc = inputInfo.getDeathCaseDiscussDoc();
-        if (deathRecordDoc != null || deathCaseDiscussDoc != null){
+        if (deathRecordDoc != null || deathCaseDiscussDoc != null) {
             status.set("0");
             return;
         }
@@ -38,25 +38,35 @@ public class THR0144 extends QCCatalogue {
             status.set("0");
             return;
         }
-        ThreeLevelWardDoc lastWardDoc = allDoctorWradDocs.get(allDoctorWradDocs.size() - 1);
-        Map<String, String> structureMap = lastWardDoc.getStructureMap();
-        String conditionRecord = structureMap.get("病情记录");
-        String treatmentPlan = structureMap.get("治疗计划和措施");
-        String title = structureMap.get("查房标题");
-        conditionRecord = StringUtil.isBlank(conditionRecord) ? "" : conditionRecord;
-        treatmentPlan = StringUtil.isBlank(treatmentPlan) ? "" : treatmentPlan;
-        //主任或主治查房 标题需要包含“主任”或“主治”,内容需要包含“出院”
-        if ((conditionRecord.contains("出院") || treatmentPlan.contains("出院") || conditionRecord.contains("转上级医院"))
-                && StringUtil.isNotBlank(title)
-                && (CatalogueUtil.subTitle(title).contains(Content.attend) || CatalogueUtil.subTitle(title).contains(Content.director))) {
-            status.set("0");
-        }
-        //普通查房 内容需要包含“上级”和“出院”
-        if (StringUtil.isBlank(title)
-                || (title.contains("日常查房记录") || title.contains("普通查房记录") || title.contains("日常病程记录"))
-                && conditionRecord.contains("上级")
-                && (conditionRecord.contains("出院") || treatmentPlan.contains("出院"))) {
-            status.set("0");
+        int j = 0; //最后两次查房记录
+        for (int i = allDoctorWradDocs.size() - 1; i > 0 && j < 2; i--) {
+            j++;
+            ThreeLevelWardDoc lastWardDoc = allDoctorWradDocs.get(i);
+            Map<String, String> structureMap = lastWardDoc.getStructureMap();
+            String conditionRecord = structureMap.get("病情记录");
+            String treatmentPlan = structureMap.get("治疗计划和措施");
+            String title = structureMap.get("查房标题");
+            if (StringUtil.isBlank(title) || title.contains("病理报告")) {
+                continue;
+            }
+            conditionRecord = StringUtil.isBlank(conditionRecord) ? "" : conditionRecord;
+            treatmentPlan = StringUtil.isBlank(treatmentPlan) ? "" : treatmentPlan;
+            //主任或主治查房 标题需要包含“主任”或“主治”,内容需要包含“出院”
+            if ((conditionRecord.contains("出院") || treatmentPlan.contains("出院") || conditionRecord.contains("转上级医院"))
+                    && (CatalogueUtil.subTitle(title).contains(Content.attend)
+                    || CatalogueUtil.subTitle(title).contains(Content.director)
+                    || CatalogueUtil.subTitle(title).contains("主刀"))) {
+                status.set("0");
+                return;
+            }
+            //普通查房 内容需要包含“上级”和“出院”
+            if (StringUtil.isBlank(title)
+                    || (title.contains("日常查房记录") || title.contains("普通查房记录") || title.contains("日常病程记录"))
+                    && conditionRecord.contains("上级")
+                    && (conditionRecord.contains("出院") || treatmentPlan.contains("出院"))) {
+                status.set("0");
+                return;
+            }
         }
     }
 }

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


Some files were not shown because too many files changed in this diff