Browse Source

湘雅三医院:规则合并

wangsy 3 years ago
parent
commit
5dbdb7fc72
52 changed files with 627 additions and 241 deletions
  1. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0493.java
  2. 5 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0170.java
  3. 9 10
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0181.java
  4. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0185.java
  5. 13 12
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0193.java
  6. 5 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02905.java
  7. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02972.java
  8. 1 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03110.java
  9. 39 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03195.java
  10. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/behospitalized/BEH0079.java
  11. 80 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/behospitalized/BEH02902.java
  12. 1 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/behospitalized/BEH0454.java
  13. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/clinicalblood/CLI0308.java
  14. 54 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/crisisvaluereport/CRI0383.java
  15. 28 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/deathcasediscuss/DEAC0100.java
  16. 19 14
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/deathcasediscuss/DEAC0108.java
  17. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/difficultcasediscuss/DIF0121.java
  18. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/difficultcasediscuss/DIF0553.java
  19. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP0183.java
  20. 9 7
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03237.java
  21. 7 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03238.java
  22. 7 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03239.java
  23. 5 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03240.java
  24. 3 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03241.java
  25. 2 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03242.java
  26. 8 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03245.java
  27. 6 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03246.java
  28. 5 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03247.java
  29. 10 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03248.java
  30. 9 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03250.java
  31. 4 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03255.java
  32. 10 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03260.java
  33. 3 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03261.java
  34. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03262.java
  35. 3 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03263.java
  36. 9 8
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03265.java
  37. 15 11
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03266.java
  38. 5 7
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03267.java
  39. 21 19
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03268.java
  40. 21 13
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03269.java
  41. 10 8
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03276.java
  42. 12 11
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03277.java
  43. 9 7
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03278.java
  44. 6 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03279.java
  45. 9 8
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03280.java
  46. 0 7
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03282.java
  47. 56 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/operationdiscussion/OPE0322.java
  48. 64 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/operationdiscussion/OPE0353.java
  49. 23 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0123.java
  50. 3 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0134.java
  51. 3 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0139.java
  52. 2 0
      public/src/main/java/com/lantone/qc/pub/Content.java

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

@@ -36,13 +36,13 @@ public class BEH0493 extends QCCatalogue {
             return;
         }
         PacsLabel pacsLabel = inputInfo.getBeHospitalizedDoc().getPacsLabel();
-        if (pacsLabel != null && StringUtil.isNotBlank(pacsLabel.getText())) {
+        if (pacsLabel != null && StringUtil.isNotBlank(pacsLabel.getText()) && !"。".equals(pacsLabel.getText())) {
             status.set("0");
         }
     }
 
     private String getKeyByHopitalId() {
-        switch (Content.hospital_Id){
+        switch (Content.hospital_Id) {
             case "1":
             case "2":
                 return "辅助检查结果";

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

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

+ 9 - 10
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0181.java

@@ -13,27 +13,26 @@ import java.util.Map;
 /**
  * @ClassName : FIRP0181
  * @Description :未填写
- *  * @Author : 损伤、中毒的外部原因未填写
+ * * @Author : 损伤、中毒的外部原因未填写
  * @Date: 2020-03-16 11:33
  */
 @Component
 public class FIRP0181 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if (inputInfo.getFirstCourseRecordDoc() == null) {
+        if (inputInfo.getFirstPageRecordDoc() == null) {
             status.set("0");
             return;
         }
-        if (inputInfo.getFirstPageRecordDoc() == null) {
+
+        if (inputInfo.getFirstCourseRecordDoc() != null) {
             status.set("0");
             return;
         }
-        if (inputInfo.getFirstCourseRecordDoc() != null) {
-            Map<String, String> structureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();
-            String EDStr = structureMap.get("病例特点");
-            if (StringUtil.isNotBlank(EDStr) && !EDStr.contains("损伤中毒")) {
-                status.set("0");
-                return;
-            }
+        Map<String, String> structureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();
+        String EDStr = structureMap.get("病例特点");
+        if (StringUtil.isNotBlank(EDStr) && !EDStr.contains("损伤中毒")) {
+            status.set("0");
+            return;
         }
 
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {

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

@@ -18,7 +18,7 @@ import java.util.Map;
 
 /**
  * @ClassName : FIRP0185
- * @Description :药物过敏史未在首页中填报
+ * @Description :药物过敏与既往史不一致
  * @Author : 胡敬
  * @Date: 2020-03-18 14:07
  */

+ 13 - 12
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0193.java

@@ -27,24 +27,25 @@ public class FIRP0193 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
-        if (firstPageRecordDoc == null){
+        if (firstPageRecordDoc == null) {
             return;
         }
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
         List<String> operations = new ArrayList<>();
         List<String> operations_first = new ArrayList<>();
-        if (ListUtil.isNotEmpty(operationDocs)) {
-            for (OperationDoc opd : operationDocs) {
-                OperationDiscussionDoc operationDiscussionDoc = opd.getOperationDiscussionDoc();
-                if (operationDiscussionDoc == null) {
-                    continue;
-                }
-                String operativeMethod = operationDiscussionDoc.getStructureMap().get("手术方式");
-                if (StringUtil.isBlank(operativeMethod)){
-                    continue;
-                }
-                operations.add(operativeMethod);
+        if (operationDocs == null) {
+            return;
+        }
+        for (OperationDoc opd : operationDocs) {
+            OperationDiscussionDoc operationDiscussionDoc = opd.getOperationDiscussionDoc();
+            if (operationDiscussionDoc == null) {
+                continue;
+            }
+            String operativeMethod = operationDiscussionDoc.getStructureMap().get("手术方式");
+            if (StringUtil.isBlank(operativeMethod)) {
+                continue;
             }
+            operations.add(operativeMethod);
         }
         Map<String, Object> firstPageRecordDocStructureMap = firstPageRecordDoc.getStructureExtMap();
         List<Map<String, String>> mapList = (List<Map<String, String>>) firstPageRecordDocStructureMap.get(Content.operative_information);

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

@@ -33,8 +33,12 @@ public class FIRP02905 extends QCCatalogue {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String outWay = firstpageStructureMap.get(Content.outWay);
             String name = firstpageStructureMap.get(Content.receivingOrganization);
+            if (StringUtil.isBlank(outWay)) {
+                status.set("0");
+                return;
+            }
             //医嘱离院不需要接受机构(宁海一院)
-            if (StringUtil.isNotBlank(outWay) && ("医嘱离院".equals(outWay) || "死亡".equals(outWay))) {
+            if (StringUtil.isNotBlank(outWay) && ("医嘱离院".equals(outWay) || "死亡".equals(outWay) || "非医嘱离院".equals(outWay))) {
                 status.set("0");
                 return;
             }

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

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

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

@@ -5,14 +5,10 @@ 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.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
 import com.lantone.qc.pub.util.DateUtil;
-import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -26,8 +22,7 @@ public class FIRP03110 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
-        if (firstPageRecordDoc!=null) {
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstPageRecordMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String admisDate = firstPageRecordMap.get(Content.dischargeTime);
             String recordTime = firstPageRecordMap.get("创建时间");

+ 39 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03195.java

@@ -0,0 +1,39 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP03195
+ * @Description :病理诊断编码未填写
+ * @Author : wsy
+ * @Date: 2021-03-16 20:11
+ */
+@Component
+public class FIRP03195 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getFirstPageRecordDoc() == null) {
+            status.set("0");
+            return;
+        }
+        if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String bingDiag = firstpageStructureMap.get(Content.pathologyDiagnose);
+            String cost = firstpageStructureMap.get(Content.pathologyDiagnoseCost);
+            String code = firstpageStructureMap.get("病理诊断编码");
+            if (StringUtil.isBlank(cost) || "0".equals(cost)) {
+                status.set("0");
+                return;
+            }
+            if (StringUtil.isNotBlank(bingDiag) && !bingDiag.equals("[]") && StringUtil.isNotBlank(code)) {
+                status.set("0");
+            }
+        }
+    }
+}

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/behospitalized/BEH0079.java

@@ -25,11 +25,11 @@ public class BEH0079 extends QCCatalogue {
         }
         Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
         String vitalLabelSpecial = structureMap.get("专科检查");
-        if(StringUtil.isNotBlank(vitalLabelSpecial)){
+        if (StringUtil.isNotBlank(vitalLabelSpecial) && !"。".equals(vitalLabelSpecial)) {
             status.set("0");
             return;
         }
-        if(vitalLabelSpecial.contains("null")){
+        if (vitalLabelSpecial.contains("null")) {
             status.set("0");
             return;
         }

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

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

+ 1 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/behospitalized/BEH0454.java

@@ -39,8 +39,7 @@ public class BEH0454 extends QCCatalogue {
         }
         if (StringUtils.isNotEmpty(pastLabel.getHeathCondition()) || pastLabel.getText().contains("既往")
                 || pastLabel.getText().contains("详见原病历") || pastLabel.getText().contains("健康状况")
-                || pastLabel.getText().contains("见旧病历") || pastLabel.getText().contains("平素健康")
-                || pastLabel.getText().contains("平素体健")) {
+                || pastLabel.getText().contains("见旧病历") || pastLabel.getText().contains("平素")) {
             status.set("0");
             return;
         }

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/clinicalblood/CLI0308.java

@@ -31,11 +31,11 @@ public class CLI0308 extends QCCatalogue {
             String regexSec = "[\\s\\S]*(?=输血过程).{0,25}((?=发热)|(?=胸闷)|(?=过敏反应))[\\s\\S]*";
             for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
                 Map<String, String> cliBStructureMap = cliB.getStructureMap();
-                if ((StringUtils.isNotEmpty(cliBStructureMap.get("病历内容")) &&( cliBStructureMap.get("病历内容").matches(regex) ||cliBStructureMap.get("病历内容").matches(regexSec)))
-                        ||StringUtils.isNotEmpty(cliBStructureMap.get("病历内容")) && (cliBStructureMap.get("病历内容").contains("不良反应")
-                        || cliBStructureMap.get("病历内容").contains("不适") || cliBStructureMap.get("病历内容").contains("未见"))) {
+                if ((StringUtils.isNotEmpty(cliBStructureMap.get("病历内容")) && (cliBStructureMap.get("病历内容").matches(regex) || cliBStructureMap.get("病历内容").matches(regexSec)
+                        || cliBStructureMap.get("病历内容").contains("不良反应") || cliBStructureMap.get("病历内容").contains("不适") || cliBStructureMap.get("病历内容").contains("未见")
+                        || cliBStructureMap.get("病历内容").contains("未觉") || cliBStructureMap.get("病历内容").contains("无")))) {
                     status.set("0");
-                }else {
+                } else {
                     return;
                 }
             }

+ 54 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/crisisvaluereport/CRI0383.java

@@ -0,0 +1,54 @@
+package com.lantone.qc.kernel.catalogue.hospital.changshaxy.crisisvaluereport;
+
+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.CrisisValueReportDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @Description: 危急值记录中无报告时间
+ * @author: rengb
+ * @time: 2020/3/19 19:54
+ */
+@Component
+public class CRI0383 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
+        if (ListUtil.isNotEmpty(crisisValueReportDocs)) {
+            crisisValueReportDocs.forEach(crisisValueReportDoc -> {
+                if (StringUtil.isNotBlank(crisisValueReportDoc.getStructureMap().get("病历内容"))) {
+                    /* 湘雅三院相应数据需从危急值内容中截取 */
+                    String reportDate = getReportDate(crisisValueReportDoc.getStructureMap().get("病历内容"));
+                    if (StringUtil.isBlank(reportDate)) {
+                        status.set("-1");
+                    }
+                }
+            });
+        }
+    }
+
+    private String getReportDate(String str) {
+        if (StringUtil.isNotBlank(str)) {
+            Pattern pattern = Pattern.compile("[0-9]{4}年[0-9]+月[0-9]+日[0-9]+时[0-9]+分 " +
+                    "|[0-9]+:[0-9]+ " +
+                    "|[0-9]{4}-[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+ " +
+                    "|[0-9]{4}年[0-9]+月[0-9]+日[0-9]+ [0-9]+:[0-9]+");
+            Matcher matcher = pattern.matcher(str);
+            if (matcher.find()) {
+                return matcher.group(0);
+            }
+        }
+        return "";
+    }
+
+}

+ 28 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/deathcasediscuss/DEAC0100.java

@@ -0,0 +1,28 @@
+package com.lantone.qc.kernel.catalogue.hospital.changshaxy.deathcasediscuss;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : DEAC0100
+ * @Description : 死亡病例讨论记录中无入院情况
+ * @Author : 胡敬
+ * @Date: 2020-03-19 09:38
+ */
+@Component
+public class DEAC0100 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getDeathCaseDiscussDoc() != null && inputInfo.getDeathCaseDiscussDoc().getStructureMap() != null) {
+            Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
+            if (CatalogueUtil.isEmpty(deathCaseDiscussStructureMap.get("病史简介"))) {
+                status.set("-1");
+            }
+        }
+    }
+}

+ 19 - 14
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/deathcasediscuss/DEAC0108.java

@@ -22,21 +22,26 @@ import java.util.Map;
 public class DEAC0108 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-
-        if (inputInfo.getFirstPageRecordDoc() == null || inputInfo.getFirstPageRecordDoc().getStructureMap() == null) {
-            return;
-        }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
-        Map<String, String> FirstPageStructure = inputInfo.getFirstPageRecordDoc().getStructureMap();
-        String outWay = FirstPageStructure.get(Content.outWay);
-        String medicalOrderName = FirstPageStructure.get(Content.medicalOrderName);
-
-
-        if (((!CatalogueUtil.isEmpty(medicalOrderName) && medicalOrderName.contains("死亡") && (!medicalOrderName.contains("死亡蛋白") ||
-                (!CatalogueUtil.isEmpty(outWay) && outWay.contains("死亡")))) || deathRecordDoc != null) &&
-                (inputInfo.getDeathCaseDiscussDoc() == null || inputInfo.getDeathCaseDiscussDoc().getStructureMap().size() == 0)) {
-            status.set("-1");
-            return;
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> FirstPageStructure = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String outWay = FirstPageStructure.get(Content.outWay);
+            //判断患者是否死亡
+            if (CatalogueUtil.isEmpty(outWay) || !outWay.contains("死亡")) {
+                return;
+            }
+            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+            if (doctorAdviceDocs.size() == 0) {
+                return;
+            }
+            long count = doctorAdviceDocs.stream().filter(x -> x.getStructureMap().get("医嘱项目名称").contains("死亡")).count();
+            if ((count > 0 || outWay.contains("死亡")) && (inputInfo.getDeathCaseDiscussDoc() == null || inputInfo.getDeathCaseDiscussDoc().getStructureMap().size() == 0)) {
+                status.set("-1");
+            }
+            if ((inputInfo.getDeathCaseDiscussDoc() == null || inputInfo.getDeathCaseDiscussDoc().getStructureMap().size() == 0)
+                    && deathRecordDoc != null) {
+                status.set("-1");
+            }
         }
     }
 }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/difficultcasediscuss/DIF0121.java

@@ -28,7 +28,7 @@ public class DIF0121 extends QCCatalogue {
         if (difficultCaseDiscussDocs != null && difficultCaseDiscussDocs.size() > 0) {
             for (DifficultCaseDiscussDoc dcdd : difficultCaseDiscussDocs) {
                 Map<String, String> dcddStructureMap = dcdd.getStructureMap();
-                String diisDate = dcddStructureMap.get("主持人小结意见");
+                String diisDate = dcddStructureMap.get("主持人小结");
                 if (CatalogueUtil.isEmpty(diisDate)) {
                     status.set("-1");
                     break;

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/difficultcasediscuss/DIF0553.java

@@ -29,7 +29,7 @@ public class DIF0553 extends QCCatalogue {
         if (difficultCaseDiscussDocs != null && difficultCaseDiscussDocs.size() > 0) {
             for (DifficultCaseDiscussDoc dcdd : difficultCaseDiscussDocs) {
                 Map<String, String> dcddStructureMap = dcdd.getStructureMap();
-                String diisDate = dcddStructureMap.get("记录医生签名");
+                String diisDate = dcddStructureMap.get("记录医生");
                 if (CatalogueUtil.isEmpty(diisDate)) {
                     status.set("-1");
                     break;

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP0183.java

@@ -29,7 +29,7 @@ public class FIRP0183 extends QCCatalogue {
                 return;
             }
             if (!CatalogueUtil.compareToken(s, s1)) {
-                status.set("-1");
+//                status.set("-1");
             }
         }
     }

+ 9 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03237.java

@@ -27,16 +27,18 @@ public class FIRP03237 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String admissionTime = firstpageStructureMap.get(Content.admisTime);
+            if (admissionTime.equals("-")) {
+                status.set("0");
+                return;
+            }
             //创建SimpleDateFormat对象实例并定义好转换格式
             // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            Date date=null;
+            Date date = null;
             try {
-                date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(admissionTime);
-                if (!admissionTime.equals("-")){
-                    status.set("-1");
-                    return;
-                }
-            }catch (Exception e) {
+                date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(admissionTime);
+                status.set("0");
+                return;
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }

+ 7 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03238.java

@@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+
 /**
  * @ClassName : FIRP03238
  * @Description : 血型填写不在值域范围内
@@ -18,14 +19,15 @@ import java.util.Map;
  */
 @Component
 public class FIRP03238 extends QCCatalogue {
-    private List<String>Rh_list= Arrays.asList("A型","B型","O型","AB型","不详","未查");
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    private List<String> Rh_list = Arrays.asList("A型", "B型", "O型", "AB型", "不详", "未查", "-");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            if (structureMap!=null){
+            if (structureMap != null) {
                 String bloodType = structureMap.get("血型");
-                if (StringUtil.isNotBlank(bloodType) || !Rh_list.contains(bloodType) || !"-".equals(bloodType)){
+                if (StringUtil.isNotBlank(bloodType) && !Rh_list.contains(bloodType)) {
                     status.set("-1");
                     return;
                 }

+ 7 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03239.java

@@ -20,23 +20,24 @@ import java.util.Map;
  */
 @Component
 public class FIRP03239 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             Map<String, String> structureMap1 = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String admissionTime = structureMap.get(Content.admisTime);
             String dischargeTime = structureMap1.get(Content.dischargeTime);
             //病案首页入院时间和病案首页的出院时间比较,大于出院时间则报错
-            if (StringUtil.isNotBlank(admissionTime) && StringUtil.isNotBlank(dischargeTime)){
+            if (StringUtil.isBlank(admissionTime) || StringUtil.isBlank(dischargeTime)) {
                 status.set("0");
+                return;
             }
-            //SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
             try {
-                if (CatalogueUtil.compareDate(admissionTime,admissionTime,-1)){
+                if (CatalogueUtil.compareDate(admissionTime, dischargeTime, -1)) {
                     status.set("-1");
                 }
-            }catch (Exception e) {
+            } catch (Exception e) {
                 e.printStackTrace();
             }
         }

+ 5 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03240.java

@@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+
 /**
  * @ClassName : FIRP03240
  * @Description : 是否有31天再住院计划填写错误
@@ -18,16 +19,17 @@ import java.util.Map;
  */
 @Component
 public class FIRP03240 extends QCCatalogue {
-    public  List<String> codeTables = Arrays.asList("有","无");
+    public List<String> codeTables = Arrays.asList("有", "无", "-");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() == null) {
-            status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String days = firstpageStructureMap.get("三十一天内再住院计划");
-            if (StringUtil.isNotBlank(days) || !days.equals("-") || codeTables.contains(days)){
+            if (StringUtil.isNotBlank(days) && !codeTables.contains(days)) {
                 status.set("-1");
                 return;
             }

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03241.java

@@ -17,14 +17,15 @@ import java.util.Map;
 @Component
 public class FIRP03241 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() == null) {
-            status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String days = firstpageStructureMap.get("三十一天内再住院计划");
             String objective = firstpageStructureMap.get("再住院目的");
-            if (StringUtil.isBlank(objective)){
+            if (StringUtil.isNotBlank(days) && "有".equals(days) && StringUtil.isBlank(objective)) {
                 status.set("-1");
                 return;
             }

+ 2 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03242.java

@@ -27,13 +27,10 @@ public class FIRP03242 extends QCCatalogue {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String objective = firstpageStructureMap.get("再住院目的");
             String rehospitalization = firstpageStructureMap.get(Content.reHospitalization);
-            if (StringUtil.isNotBlank(objective) && StringUtil.isNotBlank(rehospitalization)){
+            if (StringUtil.isBlank(objective) || StringUtil.isBlank(rehospitalization)) {
                 status.set("0");
             }
-            if (rehospitalization.equals("有") && !objective.equals("-")){
-                status.set("-1");
-            }
-            if (rehospitalization.equals("否") && objective.equals("-")){
+            if (rehospitalization.equals("有") && objective.equals("-")) {
                 status.set("-1");
             }
         }

+ 8 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03245.java

@@ -7,6 +7,8 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -17,20 +19,22 @@ import java.util.Map;
  */
 @Component
 public class FIRP03245 extends QCCatalogue {
+    public List<String> wordlist = Arrays.asList("有", "无");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() == null) {
-            status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String medicine = firstpageStructureMap.get(Content.drugAllergy);
-            if (StringUtil.isNotBlank(medicine)) {
-                status.set("0");
+            if (StringUtil.isBlank(medicine)) {
+                return;
             }
 
             //有或无,取值不能为“-”
-            if(medicine.equals("有") || medicine.equals("无")|| !medicine.equals("-")){
+            if (!wordlist.contains(medicine)) {
                 status.set("-1");
             }
         }

+ 6 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03246.java

@@ -20,21 +20,21 @@ import java.util.regex.Pattern;
 @Component
 public class FIRP03246 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() == null) {
-            status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String phone = firstpageStructureMap.get(Content.contact_phone);
-            if (StringUtil.isNotBlank(phone)) {
-                status.set("0");
+            if (StringUtil.isBlank(phone) || phone.equals("-")) {
+                return;
             }
             //匹配所有手机号码
-            String regex="^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$";
-            Pattern pattern=Pattern.compile(regex);
+            String regex = "^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$";
+            Pattern pattern = Pattern.compile(regex);
             Matcher matcher = pattern.matcher(phone);
-            if (matcher.find() || !phone.equals("-")){
+            if (matcher.find()) {
                 status.set("-1");
             }
         }

+ 5 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03247.java

@@ -18,18 +18,19 @@ import java.util.Map;
 @Component
 public class FIRP03247 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() == null) {
-            status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String address = firstpageStructureMap.get(Content.contact_address);
-            if (StringUtil.isNotBlank(address)) {
-                status.set("0");
+            if (StringUtil.isBlank(address)) {
+                return;
             }
-            if (!address.equals("-")){
+            if (address.equals("-")) {
                 status.set("-1");
+                return;
             }
         }
     }

+ 10 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03248.java

@@ -19,22 +19,26 @@ import java.util.regex.Pattern;
 @Component
 public class FIRP03248 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() == null) {
-            status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String workPhone = firstpageStructureMap.get("工作单位电话");
-            if (StringUtil.isBlank(workPhone)) {
+            if (StringUtil.isBlank(workPhone) || workPhone.contains("-")) {
                 return;
             }
-            //匹配电话或手机号码,如果大于15位则报错
-            String regex="^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\\\d{8}$";
+            //电话号码超过15位报错
+            if (workPhone.length() > 15) {
+                status.set("-1");
+                return;
+            }
+            //匹配电话或手机号码
+            String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\\\d{8}$";
             Pattern pattern = Pattern.compile(regex);
             Matcher matcher = pattern.matcher(workPhone);
-            //电话号码超过15位报错
-            if (matcher.find() && workPhone.length()<15){
+            if (matcher.find()) {
                 status.set("-1");
             }
         }

+ 9 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03250.java

@@ -18,10 +18,11 @@ import java.util.Map;
  */
 @Component
 public class FIRP03250 extends QCCatalogue {
-    private List<String> person_list = Arrays.asList("本人或户主","配偶","子","女","孙子","孙女","外孙子","外孙女","父母","祖父母或外祖父母","兄弟姐妹","同事同学","其他");
+    private List<String> person_list = Arrays.asList("-","本人或户主", "配偶", "子", "女", "孙子", "孙女", "外孙子", "外孙女", "父母", "祖父母或外祖父母", "兄弟姐妹", "同事同学", "其他");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() == null) {
-            status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
@@ -29,14 +30,16 @@ public class FIRP03250 extends QCCatalogue {
             String contactName = firstpageStructureMap.get("联系人姓名");
             String relationship = firstpageStructureMap.get("联系人关系");
             String name = firstpageStructureMap.get("姓名");
-            if (StringUtil.isNotBlank(name) &&StringUtil.isNotBlank(contactName)){
-                status.set("0");
+            if (StringUtil.isBlank(name) || StringUtil.isBlank(contactName)) {
+                return;
             }
-            if (person_list.contains(relationship) && StringUtil.isNotBlank(relationship) || !relationship.equals("-")){
+            if (name.equals(relationship)) {
                 status.set("-1");
+                return;
             }
-            if (contactName.equals(name) || !relationship.equals("本人或户主")){
+            if (!person_list.contains(relationship) && StringUtil.isNotBlank(relationship)) {
                 status.set("-1");
+                return;
             }
         }
     }

+ 4 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03255.java

@@ -22,6 +22,10 @@ public class FIRP03255 extends QCCatalogue {
             status.set("0");
             return;
         }
+        if(inputInfo.getOperationDocs() == null){
+            status.set("0");
+            return;
+        }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String info = firstpageStructureMap.get(Content.operative_information);

+ 10 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03260.java

@@ -8,6 +8,8 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -18,19 +20,21 @@ import java.util.Map;
  */
 @Component
 public class FIRP03260 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    private List<String> wordlist = Arrays.asList("农民", "自由职业者", "个体经营者", "无业人员", "学生", "其他");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()==null){
+        if (inputInfo.getFirstPageRecordDoc() == null) {
             return;
         }
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String workUnit = structureMap.get(Content.work_unit);
             String job = structureMap.get(Content.job);
-            if (StringUtil.isNotBlank(job) || "农名".contains(job) || "无业人员".contains(job) || "学生".contains(job)){
-                status.set("-1");
+            if (StringUtil.isBlank(job) || wordlist.contains(job)) {
+                return;
             }
-            if (StringUtil.isNotBlank(workUnit) && workUnit.equals("-")){
+            if (StringUtil.isBlank(workUnit) || workUnit.equals("-")) {
                 status.set("-1");
             }
         }

+ 3 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03261.java

@@ -17,12 +17,12 @@ import java.util.Map;
  */
 @Component
 public class FIRP03261 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String householdAddress = structureMap.get(Content.household_address);
-            if (StringUtil.isNotBlank(householdAddress) && !householdAddress.equals("-")){
+            if (StringUtil.isNotBlank(householdAddress) && householdAddress.equals("-")) {
                 status.set("-1");
             }
         }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03262.java

@@ -22,7 +22,7 @@ public class FIRP03262 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String telephone = structureMap.get(Content.current_address_phone);
-            if (StringUtil.isNotBlank(telephone) && !telephone.equals("-")){
+            if (StringUtil.isNotBlank(telephone) && telephone.equals("-")){
                 status.set("-1");
             }
         }

+ 3 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03263.java

@@ -17,12 +17,12 @@ import java.util.Map;
  */
 @Component
 public class FIRP03263 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String currentAddress = structureMap.get(Content.current_address);
-            if (StringUtil.isNotBlank(currentAddress) && !currentAddress.equals("-")){
+            if (StringUtil.isNotBlank(currentAddress) && currentAddress.equals("-")) {
                 status.set("-1");
             }
         }

+ 9 - 8
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03265.java

@@ -19,19 +19,20 @@ import java.util.Map;
  */
 @Component
 public class FIRP03265 extends QCCatalogue {
-    public List<String> nation_list = Arrays.asList("汉族","蒙古族","回族","藏族","维吾尔族","苗族","彝族","壮族","布依族","朝鲜族","满族","侗族","瑶族"
-    ,"白族","土家族","哈尼族","哈萨克族","傣族","黎族","傈僳族","佤族","畲族","高山族","拉祜族","水族","东乡族","纳西族","景颇族","柯尔克孜族","土族","达斡尔族","仫佬族","羌族","布朗族"
-            ,"撒拉族","毛难族","仡佬族","锡伯族","阿昌族","普米族","塔吉克族","怒族","乌孜别克族","俄罗斯族","鄂温克族","德昂族","保安族","裕固族","京族","塔塔尔族","独龙族"
-            ,"鄂伦春族","赫哲族","门巴族","珞巴族","基诺族","其他","外籍人士");
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    public List<String> nation_list = Arrays.asList("汉族", "蒙古族", "回族", "藏族", "维吾尔族", "苗族", "彝族", "壮族", "布依族", "朝鲜族", "满族", "侗族", "瑶族"
+            , "白族", "土家族", "哈尼族", "哈萨克族", "傣族", "黎族", "傈僳族", "佤族", "畲族", "高山族", "拉祜族", "水族", "东乡族", "纳西族", "景颇族", "柯尔克孜族", "土族", "达斡尔族", "仫佬族", "羌族", "布朗族"
+            , "撒拉族", "毛难族", "仡佬族", "锡伯族", "阿昌族", "普米族", "塔吉克族", "怒族", "乌孜别克族", "俄罗斯族", "鄂温克族", "德昂族", "保安族", "裕固族", "京族", "塔塔尔族", "独龙族"
+            , "鄂伦春族", "赫哲族", "门巴族", "珞巴族", "基诺族", "其他", "外籍人士", "-");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String nation = structureMap.get(Content.nation);
-            if (StringUtil.isNotBlank(nation)){
+            if (StringUtil.isBlank(nation)) {
                 status.set("0");
             }
-            if (!nation.equals("-") || nation_list.size()>0 || nation_list.contains(nation)) {
+            if (!nation_list.contains(nation)) {
                 status.set("-1");
                 return;
             }

+ 15 - 11
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03266.java

@@ -19,22 +19,26 @@ import java.util.Map;
  */
 @Component
 public class FIRP03266 extends QCCatalogue {
-    public List<String> place_list = Arrays.asList("北京市","天津市","河北省","山西省","内蒙古","辽宁省",
-            "吉林省","黑龙江省","上海市","江苏省","浙江省","安徽省","福建省","江西省","山东省","河南省",
-            "湖北省","湖南省","广东省","广西省","海南省","四川省","重庆市","贵州省","云南省","西藏","陕西省",
-            "甘肃省","青海省","宁夏","新疆","台湾","香港特别行政区","澳门","外籍");
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
-        status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+    public List<String> place_list = Arrays.asList("北京", "天津", "河北", "山西", "内蒙古", "辽宁",
+            "吉林", "黑龙江", "上海", "江苏", "浙江", "安徽", "福建", "江西", "山东", "河南",
+            "湖北", "湖南", "广东", "广西", "海南", "四川", "重庆", "贵州", "云南", "西藏", "陕西",
+            "甘肃", "青海", "宁夏", "新疆", "台湾", "香港特别行政区", "澳门", "外籍");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String nativePlace = structureMap.get(Content.native_place);
-            if (StringUtil.isNotBlank(nativePlace)){
+            if (StringUtil.isBlank(nativePlace)) {
                 status.set("0");
-            }
-            if (place_list.size()>0 && place_list.contains(nativePlace)) {
-                status.set("-1");
                 return;
             }
+            for (String place : place_list) {
+                if (nativePlace.contains(place)) {
+                    status.set("0");
+                    return;
+                }
+            }
         }
     }
 }

+ 5 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03267.java

@@ -20,18 +20,16 @@ import java.util.Map;
  */
 @Component
 public class FIRP03267 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()==null) {
+        if (inputInfo.getFirstPageRecordDoc() == null) {
             return;
         }
-        FirstPageRecordDoc firstPageRecordDoc=new FirstPageRecordDoc();
-        if (firstPageRecordDoc.getStructureMap()!=null){
-            FirstPageRecordDoc pageRecordDoc = inputInfo.getFirstPageRecordDoc();
-            Map<String, String> structureMap = pageRecordDoc.getStructureMap();
+        if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             if (structureMap != null) {
                 String birthPlace = structureMap.get("出生地");
-                if (StringUtil.isNotEmpty(birthPlace) || !birthPlace.equals("-")){
+                if (StringUtil.isNotEmpty(birthPlace) && birthPlace.equals("-")) {
                     status.set("-1");
                     return;
                 }

+ 21 - 19
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03268.java

@@ -6,6 +6,7 @@ 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.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -18,31 +19,32 @@ import java.util.Map;
  */
 @Component
 public class FIRP03268 extends QCCatalogue {
-    private List<String> category_list= Arrays.asList("预防保健科","全科医疗科","内科","呼吸内科专业","消化内科专业","神经内科专业","心血管内科专业","血液内科专业"
-    ,"肾病学专业","内分泌专业","免疫学专业","变态反应专业","老年病专业","其他","外科","普通外科专业","肝脏移植项目","胰腺移植项目","小肠移植项目"
-    ,"神经外科专业","骨科专业","泌尿外科专业","肾脏移植项目","胸外科专业","肺脏移植项目","心脏大血管外科专业","心脏移植项目","烧伤科专业","整形外科专业"
-    ,"妇产科","妇科专业","产科专业","计划生育专业","优生学专业","生殖健康与不孕症专业","妇女保健科","青春期保健专业","围产期保健专业","更年期保健专业","妇女心理卫生专业"
-    ,"妇女营养专业","儿科","新生儿专业","小儿传染病专业","小儿消化专业","小儿呼吸专业","小儿心脏病专业","小儿肾病专业","小儿血液病专业","小儿神经病学专业"
-    ,"小儿内分泌专业","小儿遗传病专业","小儿免疫专业","小儿外科","小儿普通外科专业","小儿骨科专业","小儿泌尿外科专业","小儿胸心外科专业","小儿神经外科专业","儿童保健科"
-    ,"儿童生长发育专业","儿童营养专业","儿童心理卫生专业","儿童五官保健专业","儿童康复专业","眼科","耳鼻咽喉科","耳科专业","鼻科专业","咽喉科专业","口腔科","口腔内科专业"
-    ,"口腔颌面外科专业","正畸专业","口腔修复专业","口腔预防保健专业","皮肤科","皮肤病专业","性传播疾病专业","医疗美容科","精神科","精神病专业","精神卫生专业","药物依赖专业"
-    ,"精神康复专业","社区防治专业","临床心理专业","司法精神专业","传染科","肠道传染病专业","呼吸道传染病专业","肝炎专业","虫媒传染病专业","动物源性传染病专业","蠕虫病专业"
-    ,"结核病科","地方病科","肿瘤科","急诊医学科","康复医学科","运动医学科","职业病科","职业中毒专业","尘肺专业","放射病专业","物理因素损伤专业","职业健康监护专业",
-            "临终关怀科","特种医学与军事医学科","麻醉科","疼痛科","重症医学科","医学检验科","临床体液、血液专业","临床微生物学专业","临床生化检验专业","临床免疫、血清学专业",
-            "临床细胞分子遗传学专业","病理科","医学影像科","X线诊断专业","CT诊断专业","磁共振成像诊断专业","核医学专业","超声诊断专业","心电诊断专业","脑电及脑血流图诊断专业"
-    ,"神经肌肉电图专业","介入放射学专业","放射治疗专业","中医科","内科专业","外科专业","妇产科专业","儿科专业","皮肤科专业","眼科专业","耳鼻咽喉科专业","口腔科专业","肿瘤科专业"
-    ,"骨伤科专业","肛肠科专业","老年病科专业","针灸科专业","推拿科专业","康复医学专业","急诊科专业","预防保健科专业","民族医学科","维吾尔医学","藏医学","蒙医学","彝医学"
-    ,"傣医学","中西医结合科","其他业务科室");
+    private List<String> category_list = Arrays.asList("预防保健科", "全科医疗科", "内科", "呼吸内科专业", "消化内科专业", "神经内科专业", "心血管内科专业", "血液内科专业"
+            , "肾病学专业", "内分泌专业", "免疫学专业", "变态反应专业", "老年病专业", "其他", "外科", "普通外科专业", "肝脏移植项目", "胰腺移植项目", "小肠移植项目"
+            , "神经外科专业", "骨科专业", "泌尿外科专业", "肾脏移植项目", "胸外科专业", "肺脏移植项目", "心脏大血管外科专业", "心脏移植项目", "烧伤科专业", "整形外科专业"
+            , "妇产科", "妇科专业", "产科专业", "计划生育专业", "优生学专业", "生殖健康与不孕症专业", "妇女保健科", "青春期保健专业", "围产期保健专业", "更年期保健专业", "妇女心理卫生专业"
+            , "妇女营养专业", "儿科", "新生儿专业", "小儿传染病专业", "小儿消化专业", "小儿呼吸专业", "小儿心脏病专业", "小儿肾病专业", "小儿血液病专业", "小儿神经病学专业"
+            , "小儿内分泌专业", "小儿遗传病专业", "小儿免疫专业", "小儿外科", "小儿普通外科专业", "小儿骨科专业", "小儿泌尿外科专业", "小儿胸心外科专业", "小儿神经外科专业", "儿童保健科"
+            , "儿童生长发育专业", "儿童营养专业", "儿童心理卫生专业", "儿童五官保健专业", "儿童康复专业", "眼科", "耳鼻咽喉科", "耳科专业", "鼻科专业", "咽喉科专业", "口腔科", "口腔内科专业"
+            , "口腔颌面外科专业", "正畸专业", "口腔修复专业", "口腔预防保健专业", "皮肤科", "皮肤病专业", "性传播疾病专业", "医疗美容科", "精神科", "精神病专业", "精神卫生专业", "药物依赖专业"
+            , "精神康复专业", "社区防治专业", "临床心理专业", "司法精神专业", "传染科", "肠道传染病专业", "呼吸道传染病专业", "肝炎专业", "虫媒传染病专业", "动物源性传染病专业", "蠕虫病专业"
+            , "结核病科", "地方病科", "肿瘤科", "急诊医学科", "康复医学科", "运动医学科", "职业病科", "职业中毒专业", "尘肺专业", "放射病专业", "物理因素损伤专业", "职业健康监护专业",
+            "临终关怀科", "特种医学与军事医学科", "麻醉科", "疼痛科", "重症医学科", "医学检验科", "临床体液、血液专业", "临床微生物学专业", "临床生化检验专业", "临床免疫、血清学专业",
+            "临床细胞分子遗传学专业", "病理科", "医学影像科", "X线诊断专业", "CT诊断专业", "磁共振成像诊断专业", "核医学专业", "超声诊断专业", "心电诊断专业", "脑电及脑血流图诊断专业"
+            , "神经肌肉电图专业", "介入放射学专业", "放射治疗专业", "中医科", "内科专业", "外科专业", "妇产科专业", "儿科专业", "皮肤科专业", "眼科专业", "耳鼻咽喉科专业", "口腔科专业", "肿瘤科专业"
+            , "骨伤科专业", "肛肠科专业", "老年病科专业", "针灸科专业", "推拿科专业", "康复医学专业", "急诊科专业", "预防保健科专业", "民族医学科", "维吾尔医学", "藏医学", "蒙医学", "彝医学"
+            , "傣医学", "中西医结合科", "其他业务科室", "-");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null&&inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             if (structureMap != null) {
                 String dischargeDepartment = structureMap.get("出院科别");
-                if (StringUtil.isNotBlank(dischargeDepartment)){
-                    status.set("0");
+                if (StringUtil.isBlank(dischargeDepartment)) {
+                    return;
                 }
-                if (!dischargeDepartment.equals("-") || category_list.contains(dischargeDepartment)){
+                if (!category_list.contains(dischargeDepartment)) {
                     status.set("-1");
                     return;
                 }

+ 21 - 13
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03269.java

@@ -3,6 +3,7 @@ package com.lantone.qc.kernel.catalogue.hospital.changshaxy.firstpagerecord;
 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.DateUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 import rx.subjects.PublishSubject;
@@ -12,6 +13,7 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Map;
+
 /**
  * @ClassName : FIRP03269
  * @Description : 实际住院天数填写错误
@@ -22,46 +24,52 @@ import java.util.Map;
 public class FIRP03269 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             Map<String, String> structureMap1 = inputInfo.getFirstPageRecordDoc().getStructureMap();
             Map<String, String> structureMap2 = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            if (structureMap!=null && structureMap1!=null && structureMap2!=null){
+            if (structureMap != null && structureMap1 != null && structureMap2 != null) {
                 String actual = structureMap.get("实际住院天数");
                 String dischargeTime = structureMap1.get("出院时间");
                 String admissionTime = structureMap2.get("入院时间");
-                if (StringUtil.isNotBlank(actual) || !actual.equals("-")){
+                if (StringUtil.isNotBlank(actual) && actual.equals("-")) {
                     status.set("-1");
+                    return;
                 }
                 if (StringUtil.isNotBlank(admissionTime) && StringUtil.isNotBlank(dischargeTime)) {
                     Date date = StringUtil.parseDateTime(dischargeTime);
                     Date date1 = StringUtil.parseDateTime(admissionTime);
-                    daysBetween(date1,date);
-                    status.set("-1");
-                    return;
+                    if (date == null || date1 == null) {
+                        return;
+                    }
+                    int i = daysBetween(DateUtil.dateZeroClear(date1), DateUtil.dateZeroClear(date));
+                    if (Integer.parseInt(actual) != i) {
+                        status.set("-1");
+                        return;
+                    }
                 }
             }
-
         }
     }
+
     /**
      * 计算两个日期之间相差的天数
+     *
      * @param smdate 较小的时间
      * @param bdate  较大的时间
      * @return 相差天数
      * @throws ParseException
      */
-    public static int daysBetween(Date smdate, Date bdate) throws ParseException
-    {
-        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
-        smdate=sdf.parse(sdf.format(smdate));
-        bdate=sdf.parse(sdf.format(bdate));
+    public static int daysBetween(Date smdate, Date bdate) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        smdate = sdf.parse(sdf.format(smdate));
+        bdate = sdf.parse(sdf.format(bdate));
         Calendar cal = Calendar.getInstance();
         cal.setTime(smdate);
         long time1 = cal.getTimeInMillis();
         cal.setTime(bdate);
         long time2 = cal.getTimeInMillis();
-        long between_days=(time2-time1)/(1000*3600*24);
+        long between_days = (time2 - time1) / (1000 * 3600 * 24);
         return Integer.parseInt(String.valueOf(between_days));
     }
 }

+ 10 - 8
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03276.java

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+
 /**
  * @ClassName : FIRP03276
  * @Description : 医疗付费方式填写错误
@@ -17,18 +18,19 @@ import java.util.Map;
  */
 @Component
 public class FIRP03276 extends QCCatalogue {
-    private List<String> payment_Method = Arrays.asList("本市城镇职工基本医疗保险","外埠城镇职工基本医疗保险","本市城乡居民基本医疗保险","外埠城镇居民基本医疗保险",
-            "本市新型农村合作医疗","外埠新型农村合作医疗","贫困救助","商业医疗保险","全公费","全自费","其他社会保险","其他");
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    private List<String> payment_Method = Arrays.asList("本市城镇职工基本医疗保险", "外埠城镇职工基本医疗保险", "本市城乡居民基本医疗保险", "外埠城镇居民基本医疗保险",
+            "本市新型农村合作医疗", "外埠新型农村合作医疗", "贫困救助", "商业医疗保险", "全公费", "全自费", "其他社会保险", "其他", "-");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            if (structureMap!=null && structureMap.size() > 0){
+            if (structureMap != null && structureMap.size() > 0) {
                 String medicalPaymentMethod = structureMap.get("医疗付费方式");
-                if (StringUtil.isNotBlank(medicalPaymentMethod)){
-                    status.set("0");
+                if (StringUtil.isBlank(medicalPaymentMethod)) {
+                    return;
                 }
-                if (payment_Method.contains(medicalPaymentMethod) || !"-".equals(medicalPaymentMethod)){
+                if (!payment_Method.contains(medicalPaymentMethod)) {
                     status.set("-1");
                     return;
                 }

+ 12 - 11
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03277.java

@@ -8,6 +8,7 @@ import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
+
 /**
  * @ClassName : FIRP03277
  * @Description : 患者姓名填写错误
@@ -16,17 +17,17 @@ import java.util.Map;
  */
 @Component
 public class FIRP03277 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-       if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
-           Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-           if (structureMap != null){
-               String name = structureMap.get("姓名");
-               if (StringUtil.isNotEmpty(name) || !name.equals("-")){
-                   status.set("-1");
-                   return;
-               }
-           }
-       }
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            if (structureMap != null) {
+                String name = structureMap.get("姓名");
+                if (StringUtil.isNotEmpty(name) && name.equals("-")) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
     }
 }

+ 9 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03278.java

@@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+
 /**
  * @ClassName : FIRP03278
  * @Description :职业填写错误
@@ -18,21 +19,22 @@ import java.util.Map;
  */
 @Component
 public class FIRP03278 extends QCCatalogue {
-    private List<String>job_list= Arrays.asList("国家公务员","专业技术人员","职员","企业管理人员","工人","农民","学生","现役军人","自由职业者","个体经营者","无业人员"
-    ,"退(离)休人员","其他");
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    private List<String> job_list = Arrays.asList("国家公务员", "专业技术人员", "职员", "企业管理人员", "工人", "农民", "学生", "现役军人", "自由职业者", "个体经营者", "无业人员"
+            , "退(离)休人员", "其他", "-");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            if (structureMap != null){
+            if (structureMap != null) {
                 String job = structureMap.get(Content.job);
-                if (StringUtil.isNotEmpty(job)){
+                if (StringUtil.isEmpty(job)) {
                     status.set("0");
                 }
                 /**
                  * 职业填写超出值域范围
                  */
-                if (job_list.contains(job) || !job.equals("-")){
+                if (!job_list.contains(job)) {
                     status.set("-1");
                     return;
                 }

+ 6 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03279.java

@@ -19,16 +19,17 @@ import java.util.Map;
  */
 @Component
 public class FIRP03279 extends QCCatalogue {
-    public List<String> marry_list = Arrays.asList("未婚","已婚","丧偶","离婚","其他");
-    public void start(InputInfo inputInfo, OutputInfo outputInfo){
+    public List<String> marry_list = Arrays.asList("未婚", "已婚", "丧偶", "离婚", "其他", "-");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc()!=null && inputInfo.getFirstPageRecordDoc().getStructureMap()!=null){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> structureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String marry = structureMap.get(Content.marry);
-            if (StringUtil.isNotBlank(marry)){
+            if (StringUtil.isBlank(marry)) {
                 status.set("0");
             }
-            if (!marry.equals("-") || marry_list.size()>0 && marry_list.contains(marry)) {
+            if (!marry_list.contains(marry)) {
                 status.set("-1");
                 return;
             }

+ 9 - 8
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03280.java

@@ -7,6 +7,7 @@ import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
+
 /**
  * @ClassName : FIRP03280
  * @Description : 联系人姓名填写错误
@@ -16,8 +17,8 @@ import java.util.Map;
 @Component
 public class FIRP03280 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() == null) {
-            status.set("0");
             return;
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
@@ -25,15 +26,15 @@ public class FIRP03280 extends QCCatalogue {
             String contactName = firstpageStructureMap.get("联系人姓名");
             String relationship = firstpageStructureMap.get("联系人关系");
             String name = firstpageStructureMap.get("姓名");
-            if (StringUtil.isNotBlank(name) &&StringUtil.isNotBlank(contactName)){
-                status.set("0");
-            }
-            if (relationship.contains("本人或户主") && StringUtil.isNotBlank(relationship) || !relationship.equals("-")){
-                status.set("-1");
+            if (StringUtil.isBlank(name) || StringUtil.isBlank(contactName) || contactName.contains("-")) {
+                return;
             }
-            if (!contactName.equals(name)){
-                status.set("-1");
+            if (StringUtil.isNotBlank(relationship) && relationship.contains("本人或户主")) {
+                if (!contactName.equals(name)) {
+                    status.set("-1");
+                }
             }
+
         }
     }
 }

+ 0 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/firstpagerecord/FIRP03282.java

@@ -30,13 +30,6 @@ public class FIRP03282 extends QCCatalogue {
                     return;
                 }
             }
-            if (structureMap1!=null){
-                String diagnosis = structureMap1.get("病理诊断");
-                if (StringUtil.isEmpty(diagnosis) || diagnosis.equals("-")){
-                    status.set("-1");
-                    return;
-                }
-            }
         }
 
     }

+ 56 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/operationdiscussion/OPE0322.java

@@ -0,0 +1,56 @@
+package com.lantone.qc.kernel.catalogue.hospital.changshaxy.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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @Description: 手术患者无手术记录
+ * @author: Mark
+ * @time: 2020/04/04 11:22
+ */
+@Component
+public class OPE0322 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        //先判断医嘱里有无手术
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        if (doctorAdviceDocs.size() == 0) {
+            return;
+        }
+        long cou = inputInfo.getOperationDocs().stream().map(OperationDoc::getOperationRecordDoc).filter(Objects::nonNull).count();
+        for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+            String name = dad.getStructureMap().get("医嘱项目名称");
+            String daStartDateStr = dad.getStructureMap().get("医嘱开始时间");
+            if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(daStartDateStr), new Date(), 48 * 60L)) {
+                return;
+            }
+            if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
+                    || name.contains("特殊病人手术使用一次性卫生材料") || name.contains("人免疫缺陷病毒抗体检测免费") || name.contains("手术标本") || name.contains("手术科")) {
+                continue;
+            }
+            if (name.contains("手术") && cou == 0) {
+                info.set("医嘱时间" + daStartDateStr);
+                status.set("-1");
+                return;
+            }
+        }
+        /*long cou = inputInfo.getOperationDocs().stream().map(i -> i.getOperationRecordDoc()).filter(i -> i != null).count();
+        if (cou == 0) {
+            status.set("-1");
+        }*/
+    }
+
+}

+ 64 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/operationdiscussion/OPE0353.java

@@ -0,0 +1,64 @@
+package com.lantone.qc.kernel.catalogue.hospital.changshaxy.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.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.label.OperationDiscussionLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description: 术后首次病程记录未记录处理及注意事项
+ * @author: 胡敬
+ * @time: 2020/3/24 13:28
+ */
+@Component
+public class OPE0353 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        //医嘱
+        //        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        //        if (ListUtil.isEmpty(doctorAdviceDocs)) {
+        //            return;
+        //        }
+        //        boolean isOperativePatient = CatalogueUtil.isOperativePatients(doctorAdviceDocs);
+        //        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        //        if (isOperativePatient) {
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (operationDocs == null || operationDocs.size() == 0) {
+            return;
+        }
+        if (ListUtil.isEmpty(operationDocs)) {
+            return;
+        }
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+            if (operationDiscussionDoc == null) {
+                continue;
+            }
+            String record = operationDiscussionDoc.getStructureMap().get("病程内容");
+            if (StringUtil.isBlank(record)) {
+                continue;
+            }
+            if (record.contains("指示") || record.contains("注意")) {
+                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)
+                    && StringUtil.isBlank(treatPlan)) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+
+}

+ 23 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0123.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.MedicalRecordInfoDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
@@ -21,22 +22,38 @@ import java.util.Map;
 public class THR0123 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
+        String admisTime = "";
+        MedicalRecordInfoDoc medicalRecordInfoDoc = inputInfo.getMedicalRecordInfoDoc();
+        if (medicalRecordInfoDoc != null && medicalRecordInfoDoc.getStructureMap() != null) {
+            //入院日期
+            admisTime = medicalRecordInfoDoc.getStructureMap().get("behospitalDate");
+            if (StringUtil.isNotBlank(admisTime) && inputInfo.getBeHospitalizedDoc() == null) {
+                if (!CatalogueUtil.compareTime(
+                        StringUtil.parseDateTime(admisTime),
+                        StringUtil.parseDateTime(DateUtil.nowString()),
+                        Long.valueOf(24 * 60))) {//如果入院还未过24小时规则不判断
+                    return;
+                }
+                status.set("-1");
+                return;
+            }
+        }
         if (inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getStructureMap() != null) {
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-            String admisDate = beHospitalStructureMap.get(Content.admisDate);
+            admisTime = beHospitalStructureMap.get(Content.admisDate);
             String recordTime = beHospitalStructureMap.get("记录日期");
-            if (CatalogueUtil.isEmpty(admisDate) || CatalogueUtil.isEmpty(recordTime)) {
+            if (CatalogueUtil.isEmpty(admisTime) || CatalogueUtil.isEmpty(recordTime)) {
                 return;
             }
-            if(!CatalogueUtil.compareTime(
-                    StringUtil.parseDateTime(admisDate),
+            if (!CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(admisTime),
                     StringUtil.parseDateTime(DateUtil.nowString()),
-                    Long.valueOf(24 * 60))){//如果入院还未过24小时规则不判断
+                    Long.valueOf(24 * 60))) {//如果入院还未过24小时规则不判断
                 return;
             }
 
             if (CatalogueUtil.compareTime(
-                    StringUtil.parseDateTime(admisDate),
+                    StringUtil.parseDateTime(admisTime),
                     StringUtil.parseDateTime(recordTime),
                     Long.valueOf(24 * 60))) {
                 status.set("-1");

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0134.java

@@ -40,8 +40,9 @@ public class THR0134 extends QCCatalogue {
         String recordDateStr = firstAttendStructureMap.get("查房日期");
         String content = firstAttendStructureMap.get("病情记录");
         if (content.contains("诊断明确") || content.contains("目前诊断") || content.contains("目前考虑") || content.contains("当前诊断") ||
-                content.contains("考虑诊断") || content.contains("诊断考虑") || content.contains("诊断基本明确") || content.contains("初步诊断") ||
-                content.contains("诊断为") || regexFind(content, "诊断", "基本明确")) {
+                content.contains("考虑诊断") || content.contains("诊断考虑") || content.contains("诊断基本明确") || content.contains("初步诊断")
+                || content.contains("诊断考虑") || content.contains("明确病情") || content.contains("诊断为") || content.contains("症状")
+                || regexFind(content, "诊断", "明确")) {
             status.set("0");
             return;
         }

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0139.java

@@ -40,8 +40,9 @@ public class THR0139 extends QCCatalogue {
         String recordDateStr = firstDirectStructureMap.get("查房日期");
         String content = firstDirectStructureMap.get("病情记录");
         if (content.contains("诊断明确") || content.contains("目前诊断") || content.contains("目前考虑") || content.contains("当前诊断") ||
-                content.contains("考虑诊断") || content.contains("诊断考虑") || content.contains("诊断基本明确") || content.contains("初步诊断") ||
-                content.contains("诊断为") || regexFind(content, "诊断", "基本明确")) {
+                content.contains("考虑诊断") || content.contains("诊断考虑") || content.contains("诊断基本明确") || content.contains("初步诊断")
+                || content.contains("诊断考虑") || content.contains("明确病情") || content.contains("诊断为") || content.contains("症状")
+                || regexFind(content, "诊断", "明确")) {
             status.set("0");
             return;
         }

+ 2 - 0
public/src/main/java/com/lantone/qc/pub/Content.java

@@ -238,6 +238,8 @@ public class Content {
     public static final String brainInjuryComaAfterMins="颅脑损伤患者昏迷后分钟";
     public static final String daCode="医嘱转院机构名称";
     public static final String reHospitalization="三十一天内再住院计划";
+    //判断
+    public static final String cancellationOrder = "作废";
 
     //病理诊疗最低费用
     public static final double pathologicalFee= 68.00;