Procházet zdrojové kódy

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

rengb před 5 roky
rodič
revize
ee07869d5c
67 změnil soubory, kde provedl 897 přidání a 140 odebrání
  1. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0024.java
  2. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0025.java
  3. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0026.java
  4. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0028.java
  5. 5 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0029.java
  6. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0030.java
  7. 1 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0034.java
  8. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0036.java
  9. 5 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0043.java
  10. 12 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0044.java
  11. 14 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0045.java
  12. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0046.java
  13. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0047.java
  14. 13 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0048.java
  15. 12 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0049.java
  16. 10 7
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0053.java
  17. 6 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0054.java
  18. 8 10
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0056.java
  19. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0058.java
  20. 14 12
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0073.java
  21. 65 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02902.java
  22. 1 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0375.java
  23. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0376.java
  24. 14 6
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0397.java
  25. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0445.java
  26. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0454.java
  27. 24 8
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0490.java
  28. 99 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0724.java
  29. 21 23
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0300.java
  30. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0308.java
  31. 14 13
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0569.java
  32. 10 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0190.java
  33. 69 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0195.java
  34. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0199.java
  35. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0201.java
  36. 21 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0222.java
  37. 2 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0252.java
  38. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0261.java
  39. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0263.java
  40. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0265.java
  41. 5 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0275.java
  42. 33 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02836.java
  43. 33 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02837.java
  44. 33 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02838.java
  45. 32 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02841.java
  46. 33 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02904.java
  47. 33 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02905.java
  48. 32 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02906.java
  49. 32 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02907.java
  50. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0146.java
  51. 7 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0147.java
  52. 24 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0370.java
  53. 3 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0134.java
  54. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0139.java
  55. 28 9
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/ThreeLevelWardAI.java
  56. 4 1
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/model/EntityEnum.java
  57. 16 0
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessThreeLevelWard.java
  58. 1 0
      public/src/main/java/com/lantone/qc/pub/Content.java
  59. 2 0
      public/src/main/java/com/lantone/qc/pub/model/InputInfo.java
  60. 19 0
      public/src/main/java/com/lantone/qc/pub/model/doc/MedicalRecordInfoDoc.java
  61. 3 1
      public/src/main/java/com/lantone/qc/pub/model/label/ThreeLevelWardLabel.java
  62. 1 0
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxBeHospitalizedDocTrans.java
  63. 2 1
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxClinicalBloodDocTrans.java
  64. 4 0
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxDocTrans.java
  65. 35 0
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxMedicalRecordInfoDocTrans.java
  66. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxThreeLevelWardDocTrans.java
  67. 1 1
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouThreeLevelWardDocTrans.java

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

@@ -48,7 +48,7 @@ public class BEH0024 extends QCCatalogue {
         }
         //硬规则匹配
         String pastLabelText = pastLabel.getText();
-        if (pastLabelText.contains("外伤")) {
+        if (pastLabelText.contains("外伤") || pastLabelText.contains("详见原病历")) {
             status.set("0");
         }
     }

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

@@ -48,7 +48,7 @@ public class BEH0025 extends QCCatalogue {
         }
         //规则硬匹配
         String pastLabelText = pastLabel.getText();
-        if (pastLabelText.contains("手术")) {
+        if (pastLabelText.contains("手术") || pastLabelText.contains("详见原病历")) {
             status.set("0");
         }
     }

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

@@ -39,7 +39,7 @@ public class BEH0026 extends QCCatalogue {
             return;
         }
         String pastText = pastLabel.getText();
-        if (pastText.contains("食物过敏史")) {
+        if (pastText.contains("食物过敏史") || pastText.contains("详见原病历")) {
             status.set("0");
             return;
         }

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

@@ -39,7 +39,7 @@ public class BEH0028 extends QCCatalogue {
             return;
         }
         String pastText = pastLabel.getText();
-        if (pastText.contains("输血")) {
+        if (pastText.contains("输血") || pastText.contains("详见原病历")) {
             status.set("0");
             return;
         }

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

@@ -41,6 +41,11 @@ public class BEH0029 extends QCCatalogue {
             status.set("0");
             return;
         }
+        String pastText = pastLabel.getText();
+        if (pastText.contains("详见原病历") || pastText.contains("预防接种史")) {
+            status.set("0");
+            return;
+        }
         List<Vaccinate> vaccinates = pastLabel.getVaccinates();
         if (ListUtil.isNotEmpty(vaccinates)) {
             if (vaccinates.stream().map(i -> i.getName()).filter(i -> StringUtil.isNotBlank(i)).count() > 0) {

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

@@ -47,7 +47,7 @@ public class BEH0030 extends QCCatalogue {
             status.set("0");
         }
         String pastText = pastLabel.getText();
-        if (pastText.contains("肝炎") || pastText.contains("结核")) {
+        if (pastText.contains("肝炎") || pastText.contains("结核") || pastText.contains("详见原病历")) {
             status.set("0");
         }
     }

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

@@ -36,6 +36,7 @@ public class BEH0034 extends QCCatalogue {
                 operations.stream()
                         .filter(i ->
                                 i != null && StringUtil.isNotBlank(i.getName()) && i.getNegative() == null
+                                        && !"手术史".equals(i.getName())  && !"手术".equals(i.getName()) && !"手术治疗".equals(i.getName())
                         )
                         .map(i -> i.getName())
                         .distinct()

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

@@ -32,6 +32,9 @@ public class BEH0036 extends QCCatalogue {
             if (operation == null || StringUtil.isBlank(operation.getName())) {
                 continue;
             }
+            if ("手术史".equals(operation.getName()) || "手术".equals(operation.getName()) || "手术治疗".equals(operation.getName())) {
+                continue;
+            }
             if ((operation.getNegative() == null || StringUtil.isBlank(operation.getNegative().getName()))
                     && (operation.getPd() == null || StringUtil.isBlank(operation.getPd().getName()))
                     && (operation.getOperationResult() == null || StringUtil.isBlank(operation.getOperationResult().getName()))

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

@@ -24,24 +24,25 @@ public class BEH0043 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if(inputInfo.getBeHospitalizedDoc() == null){
+        if (inputInfo.getBeHospitalizedDoc() == null) {
             status.set("0");
             return;
         }
         //台州结构化
         Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-        if(StringUtils.isNotEmpty(structureMap.get("联系地址")) || StringUtils.isNotEmpty(structureMap.get("现住址"))){
+        if (StringUtils.isNotEmpty(structureMap.get("联系地址")) || StringUtils.isNotEmpty(structureMap.get("现住址"))) {
             status.set("0");
             return;
         }
 
         PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
-        if (personalLabel == null){
+        if (personalLabel == null) {
             status.set("0");
             return;
         }
         String text = personalLabel.getText();
-        if (StringUtil.isBlank(text) || text.contains("居住") || text.contains("生长") || text.contains("生活")) {
+        if (StringUtil.isBlank(text) || text.contains("居住") || text.contains("生长") || text.contains("生活")
+                || text.contains("详见原病历")) {
             status.set("0");
             return;
         }

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

@@ -4,6 +4,7 @@ import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.EpidemicArea;
+import com.lantone.qc.pub.model.label.PersonalLabel;
 import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
@@ -30,8 +31,17 @@ public class BEH0044 extends QCCatalogue {
             status.set("0");
             return;
         }
-
-        EpidemicArea epidemicArea = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getEpidemicArea();
+        PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
+        if (personalLabel == null || StringUtil.isBlank(personalLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        String personalText = personalLabel.getText();
+        if (personalText.contains("详见原病历")) {
+            status.set("0");
+            return;
+        }
+        EpidemicArea epidemicArea = personalLabel.getEpidemicArea();
         if (epidemicArea != null && StringUtil.isNotBlank(epidemicArea.getName())) {
             status.set("0");
         }

+ 14 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0045.java

@@ -4,6 +4,7 @@ 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.MaritalHistory;
+import com.lantone.qc.pub.model.label.PersonalLabel;
 import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
@@ -20,17 +21,27 @@ public class BEH0045 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if(inputInfo.getBeHospitalizedDoc() == null){
+        if (inputInfo.getBeHospitalizedDoc() == null) {
             status.set("0");
             return;
         }
         //台州结构化
         Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
-        if(StringUtils.isNotEmpty(structureMap.get("冶游史"))){
+        if (StringUtils.isNotEmpty(structureMap.get("冶游史"))) {
             status.set("0");
             return;
         }
-        MaritalHistory maritalHistory = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getMaritalHistory();
+        PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
+        if (personalLabel == null || StringUtil.isBlank(personalLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        String personalText = personalLabel.getText();
+        if (personalText.contains("冶游史") || personalText.contains("详见原病历")) {
+            status.set("0");
+            return;
+        }
+        MaritalHistory maritalHistory = personalLabel.getMaritalHistory();
         if (maritalHistory != null && StringUtil.isNotBlank(maritalHistory.getName())) {
             status.set("0");
         }

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

@@ -37,7 +37,8 @@ public class BEH0046 extends QCCatalogue {
             return;
         }
         String personalText = personalLabel.getText();
-        if (StringUtil.isNotBlank(personalText) && (personalText.contains("偶有") || personalText.contains("烟"))) {
+        if (StringUtil.isNotBlank(personalText) && (personalText.contains("偶有") || personalText.contains("烟")
+                || personalText.contains("详见原病历"))) {
             status.set("0");
             return;
         }

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

@@ -31,12 +31,12 @@ public class BEH0047 extends QCCatalogue {
             return;
         }
         PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
-        if (personalLabel == null) {
+        if (personalLabel == null || StringUtil.isBlank(personalLabel.getText())) {
             status.set("0");
             return;
         }
         String pastText = personalLabel.getText();
-        if (StringUtil.isNotBlank(pastText) && pastText.contains("饮酒")) {
+        if (pastText.contains("饮酒") || pastText.contains("详见原病历")) {
             status.set("0");
             return;
         }

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

@@ -4,6 +4,7 @@ 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.Contact;
+import com.lantone.qc.pub.model.label.PersonalLabel;
 import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
@@ -20,7 +21,7 @@ public class BEH0048 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if(inputInfo.getBeHospitalizedDoc() == null){
+        if (inputInfo.getBeHospitalizedDoc() == null) {
             status.set("0");
             return;
         }
@@ -30,7 +31,17 @@ public class BEH0048 extends QCCatalogue {
             return;
         }
 
-        Contact contact = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getContact();
+        PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
+        if (personalLabel == null || StringUtil.isBlank(personalLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        String personalText = personalLabel.getText();
+        if (personalText.contains("详见原病历")) {
+            status.set("0");
+            return;
+        }
+        Contact contact = personalLabel.getContact();
         if (contact != null && StringUtil.isNotBlank(contact.getName())) {
             status.set("0");
         }

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

@@ -4,6 +4,7 @@ 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.SpecialHobby;
+import com.lantone.qc.pub.model.label.PersonalLabel;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
@@ -21,7 +22,17 @@ public class BEH0049 extends QCCatalogue {
             status.set("0");
             return;
         }
-        SpecialHobby specialHobby = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getSpecialHobby();
+        PersonalLabel personalLabel = inputInfo.getBeHospitalizedDoc().getPersonalLabel();
+        if (personalLabel == null || StringUtil.isBlank(personalLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        String personalText = personalLabel.getText();
+        if (personalText.contains("详见原病历")) {
+            status.set("0");
+            return;
+        }
+        SpecialHobby specialHobby = personalLabel.getSpecialHobby();
         if (specialHobby != null && StringUtil.isNotEmpty(specialHobby.getName())) {
             status.set("0");
         }

+ 10 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0053.java

@@ -27,22 +27,25 @@ public class BEH0053 extends QCCatalogue {
             status.set("0");
             return;
         }
+        //先取一次结构化数据
+        Map<String, String> beHospitalizedStructureMap = beHospitalizedDoc.getStructureMap();
+        String marryiAgeStr = beHospitalizedStructureMap.get("结婚年龄");
+        if (StringUtil.isNotBlank(marryiAgeStr)) {
+            status.set("0");
+            return;
+        }
         //硬规则 匹配未婚
         String marry = beHospitalizedDoc.getStructureMap().get(Content.marry);
         MaritalLabel maritalLabel = beHospitalizedDoc.getMaritalLabel();
-        if ("未婚".equals(marry) || (maritalLabel != null &&
-                (StringUtil.isBlank(maritalLabel.getText()) || maritalLabel.getText().contains("未婚")))) {
+        if (maritalLabel == null || StringUtil.isBlank(maritalLabel.getText())) {
             status.set("0");
             return;
         }
-        //先取一次结构化数据
-        Map<String, String> beHospitalizedStructureMap = beHospitalizedDoc.getStructureMap();
-        String marryiAgeStr = beHospitalizedStructureMap.get("结婚年龄");
-        if (StringUtil.isNotBlank(marryiAgeStr)) {
+        String maritalText = maritalLabel.getText();
+        if ("未婚".equals(marry) || maritalText.contains("未婚") || maritalText.contains("详见原病历")) {
             status.set("0");
             return;
         }
-
         if (beHospitalizedDoc.getMaritalLabel() == null
                 || StringUtil.isBlank(beHospitalizedDoc.getMaritalLabel().getText())) {
             status.set("0");

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

@@ -26,8 +26,12 @@ public class BEH0054 extends QCCatalogue {
         //硬规则 未婚
         String marry = inputInfo.getBeHospitalizedDoc().getStructureMap().get(Content.marry);
         MaritalLabel maritalLabel = inputInfo.getBeHospitalizedDoc().getMaritalLabel();
-        if ("未婚".equals(marry) || (maritalLabel != null &&
-                (StringUtil.isBlank(maritalLabel.getText()) || maritalLabel.getText().contains("未婚")))) {
+        if (maritalLabel == null) {
+            status.set("0");
+            return;
+        }
+        if ("未婚".equals(marry) || StringUtil.isBlank(maritalLabel.getText()) || maritalLabel.getText().contains("未婚")
+                || maritalLabel.getText().contains("详见原病历")) {
             status.set("0");
             return;
         }

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

@@ -34,21 +34,19 @@ public class BEH0056 extends QCCatalogue {
             return;
         }
         //婚育史未填写,直接返回;
-        if (beHospitalizedDoc.getMaritalLabel() == null
-                || StringUtils.isEmpty(beHospitalizedDoc.getMaritalLabel().getText())) {
+        MaritalLabel maritalLabel = beHospitalizedDoc.getMaritalLabel();
+        if (maritalLabel == null || StringUtils.isEmpty(maritalLabel.getText())) {
             status.set("0");
             return;
         }
         //硬规则 匹配未婚
         String marry = structureMap.get(Content.marry);
-        MaritalLabel maritalLabel = beHospitalizedDoc.getMaritalLabel();
-        if (maritalLabel != null) {
-            String text = maritalLabel.getText();
-            if (StringUtil.isNotBlank(text)) {
-                if (text.contains("未婚") || text.contains("离异") || text.contains("离婚") || text.contains("丧偶") || "未婚".equals(marry)) {
-                    status.set("0");
-                    return;
-                }
+        String text = maritalLabel.getText();
+        if (StringUtil.isNotBlank(text)) {
+            if (text.contains("未婚") || text.contains("离异") || text.contains("离婚") || text.contains("丧偶")
+                    || "未婚".equals(marry) || text.contains("详见原病历")) {
+                status.set("0");
+                return;
             }
         }
         ConjugalRelation conjugalRelation = inputInfo.getBeHospitalizedDoc().getMaritalLabel().getConjugalRelation();

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

@@ -56,7 +56,8 @@ public class BEH0058 extends QCCatalogue {
             return;
         }
         if (StringUtil.isNotBlank(maritalText)) {
-            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生","0子0女");
+            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生", "0子0女"
+                    , "0-0-0-0", "详见原病历");
             for (String word : words) {
                 if (maritalText.contains(word)) {
                     status.set("0");

+ 14 - 12
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0073.java

@@ -6,7 +6,6 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Diag;
 import com.lantone.qc.pub.model.entity.Family;
 import com.lantone.qc.pub.model.label.FamilyLabel;
-import com.lantone.qc.pub.model.label.PastLabel;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -39,6 +38,11 @@ public class BEH0073 extends QCCatalogue {
             status.set("0");
             return;
         }
+        String familyText = familyLabel.getText();
+        if (familyText.contains("肝炎") || familyText.contains("结核") || familyText.contains("详见原病历")) {
+            status.set("0");
+            return;
+        }
         List<Family> families = familyLabel.getFamilies();
         if (ListUtil.isNotEmpty(families)) {
             for (Family family : families) {
@@ -46,23 +50,21 @@ public class BEH0073 extends QCCatalogue {
                     continue;
                 }
                 for (Diag diag : family.getDiags()) {
-                    if ((StringUtil.isNotBlank(diag.getName()) && (diag.getName().contains("肝炎") || diag.getName().contains("结核")))
-                            ||
-                            (StringUtil.isNotBlank(diag.getHospitalDiagName()) &&
-                                    (diag.getHospitalDiagName().contains("肝炎") || diag.getHospitalDiagName().contains("结核")))) {
+                    String hospitalDiagName = diag.getHospitalDiagName();
+                    String name = diag.getName();
+                    if (findDiag(hospitalDiagName) || findDiag(name)) {
                         status.set("0");
                         return;
                     }
                 }
             }
         }
-        //规则硬匹配
-        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
-        if (pastLabel != null) {
-            String pastLabelText = pastLabel.getText();
-            if (StringUtil.isNotBlank(pastLabelText) && (pastLabelText.contains("肝炎") || pastLabelText.contains("结核"))) {
-                status.set("0");
-            }
+    }
+
+    private boolean findDiag(String diagName) {
+        if (StringUtil.isBlank(diagName)) {
+            return false;
         }
+        return diagName.contains("肝炎") || diagName.contains("结核");
     }
 }

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

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

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

@@ -41,6 +41,7 @@ public class BEH0375 extends QCCatalogue {
                         || maritalLabel.getText().contains("离婚")
                         || maritalLabel.getText().contains("离异")
                         || maritalLabel.getText().contains("已故")
+                        || maritalLabel.getText().contains("详见原病历")
                 )
                 )
         ) {

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

@@ -52,7 +52,8 @@ public class BEH0376 extends QCCatalogue {
         }
         String maritalText = maritalLabel.getText();
         if (StringUtil.isNotBlank(maritalText)) {
-            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生","0子0女");
+            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生", "0子0女"
+                    , "0-0-0-0", "详见原病历");
             for (String word : words) {
                 if (maritalText.contains(word)) {
                     status.set("0");

+ 14 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0397.java

@@ -40,16 +40,24 @@ public class BEH0397 extends QCCatalogue {
         }
         FamilyLabel familyLabel = beHospitalizedDoc.getFamilyLabel();
         MaritalLabel maritalLabel = beHospitalizedDoc.getMaritalLabel();
-        String familyText = familyLabel.getText();
-        String maritalText = maritalLabel.getText();
-        if ((StringUtil.isNotBlank(familyText) && familyText.contains("父母"))
-                || (StringUtil.isNotBlank(maritalText) && maritalText.contains("父母"))) {
+
+        String familyText = "", maritalText = "";
+        List<Family> familiesFl = null;
+        List<Family> familiesMl = null;
+        if (familyLabel != null) {
+            familyText = familyLabel.getText();
+            familiesFl = familyLabel.getFamilies();
+        }
+        if (maritalLabel != null) {
+            maritalText = maritalLabel.getText();
+            familiesMl = maritalLabel.getFamily();
+        }
+        if ((StringUtil.isNotBlank(familyText) && (familyText.contains("父母") || familyText.contains("详见原病历")))
+                || (StringUtil.isNotBlank(maritalText) && maritalText.contains("父母") || maritalText.contains("详见原病历"))) {
             status.set("0");
             return;
         }
         List<Family> familyList = Lists.newArrayList();
-        List<Family> familiesFl = familyLabel.getFamilies();
-        List<Family> familiesMl = maritalLabel.getFamily();
         if (ListUtil.isNotEmpty(familiesFl)) {
             familyList.addAll(familiesFl);
         }

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

@@ -36,7 +36,7 @@ public class BEH0445 extends QCCatalogue {
         }
         String presentText = presentLabel.getText();
         if (StringUtil.isNotBlank(presentText)) {
-            List<String> words = Lists.newArrayList("睡眠", "未眠", "未睡", "未入眠", "入睡", "纳眠");
+            List<String> words = Lists.newArrayList("睡眠", "未眠", "未睡", "未入眠", "入睡", "纳眠", "夜眠");
             for (String word : words) {
                 if (presentText.contains(word)) {
                     status.set("0");

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

@@ -35,7 +35,8 @@ public class BEH0454 extends QCCatalogue {
             status.set("0");
             return;
         }
-        if (StringUtils.isNotEmpty(pastLabel.getHeathCondition()) || pastLabel.getText().contains("既往")) {
+        if (StringUtils.isNotEmpty(pastLabel.getHeathCondition()) || pastLabel.getText().contains("既往")
+                || pastLabel.getText().contains("详见原病历")) {
             status.set("0");
         }
     }

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

@@ -3,7 +3,6 @@ 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.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;
@@ -13,32 +12,37 @@ import java.util.List;
 
 
 /**
- * @ClassName : BEH0490
+ * @ClassName : BEH0491
  * @Description : 实验室检查未注明时间和地点
  * @Author : 胡敬
  * @Date: 2020-06-03 13:34
  */
 @Component
-public class BEH0490 extends QCCatalogue {
+public class BEH0491 extends QCCatalogue {
     @Override
     protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
         if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
             return;
         }
 
         PacsLabel pacsLabel = inputInfo.getBeHospitalizedDoc().getPacsLabel();
         if (pacsLabel == null || StringUtil.isBlank(pacsLabel.getText())) {
+            status.set("0");
             return;
         }
 
         String pacsText = pacsLabel.getText();
         List<Pacs> pacses = pacsLabel.getPacses();
+        boolean findTime = false, findPlace = false;
         for (Pacs pacs : pacses) {
-            if (pacs.getName() == null && pacs.getPd() == null) {
-                status.set("-1");
-                return;
-            } else {
+            /* 时间为入院检查的时间,模型输出处理后结构为 name为空,pd不为空 */
+            if (pacs.getName() == null && pacs.getPd() != null) {
+                findTime = true;
+                break;
+            }
+            /*
+            else {
                 PD pd = pacs.getPd();
                 if (pd == null) {
                     continue;
@@ -52,6 +56,18 @@ public class BEH0490 extends QCCatalogue {
                     return;
                 }
             }
+             */
+        }
+        String prefixText = pacsText.substring(0, Math.min(10, pacsText.length()));
+        if (prefixText.contains("院")) {
+            findPlace = true;
+        }
+        //内容硬匹配
+        if (prefixText.contains("缺") || prefixText.contains("未查")) {
+            findPlace = true;
+        }
+        if (findTime || findPlace) {
+            status.set("0");
         }
     }
 }

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

@@ -0,0 +1,99 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.alibaba.fastjson.JSONArray;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
+import com.lantone.qc.kernel.structure.ai.ModelAI;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.entity.Allergy;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 药物过敏史与病案首页不一致
+ * @author: 胡敬
+ * @time: 2020/06/03 17:28
+ */
+@Component
+public class BEH0724 extends QCCatalogue {
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (firstPageRecordDoc == null || beHospitalizedDoc == null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> firpStructureMap = firstPageRecordDoc.getStructureMap();
+        String firpAllergyMedicine = firpStructureMap.get("过敏药物");
+        if (StringUtil.isBlank(firpAllergyMedicine)) {
+            status.set("0");
+            return;
+        }
+        PastLabel pastLabel = beHospitalizedDoc.getPastLabel();
+        if (pastLabel == null) {
+            status.set("0");
+            return;
+        }
+
+        List<Allergy> allergies = pastLabel.getAllergies();
+        if (ListUtil.isNotEmpty(allergies)) {
+            if (firpAllergyMedicine.contains("无")) {
+                allergies = allergies.stream().filter(i -> i != null
+                                && i.getNegative() != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && i.getAllergyMedicine() != null
+                                && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
+                ).collect(Collectors.toList());
+                /* 模型提出的药物过敏史内容有一个否定就算与病案首页的药物过敏:无 相同 */
+                if (allergies.size() > 0) {
+                    status.set("0");
+                }
+            } else {
+                allergies = allergies.stream().filter(i -> i != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && i.getAllergyMedicine() != null
+                                && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
+                ).collect(Collectors.toList());
+
+                List<String> allergyMedicine = getAllergyMedicine(allergies);
+                /* 主诉现病史相似度算法接口 */
+                ModelAI modelAI = new ModelAI();
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firpAllergyMedicine, allergyMedicine,
+                        false, chiefPresentSimilarityServiceClient);
+                if (jsonArray.size() == 2) {
+                    /* 相似度分数 */
+                    double likeRate = jsonArray.getDoubleValue(1);
+                    if (likeRate > 0.9) {
+                        status.set("0");
+                    } else {
+                        status.set("-1");
+                    }
+                }
+            }
+        }
+    }
+
+    private List<String> getAllergyMedicine(List<Allergy> allergies) {
+        List<String> allergieStrList = new ArrayList<>();
+        for (Allergy allergieStr : allergies) {
+            allergieStrList.add(allergieStr.getAllergyMedicine().getName());
+        }
+        return allergieStrList;
+    }
+
+}

+ 21 - 23
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0300.java

@@ -23,37 +23,35 @@ import java.util.regex.Pattern;
 @Component
 public class CLI0300 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("-1");
+        status.set("0");
         List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
-        if(ListUtil.isEmpty(clinicalBloodDocs)){
-            status.set("0");
+        if (ListUtil.isEmpty(clinicalBloodDocs)) {
             return;
         }
-        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
-            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
-                Map<String, String> cliBStructureMap = cliB.getStructureMap();
-                String infusionReason;
-                //台州
-                if(StringUtils.isNotEmpty(cliBStructureMap.get("输血检验指标"))){
-                    infusionReason = cliBStructureMap.get("输血检验指标");
-                }else {
-                    infusionReason = cliBStructureMap.get("输注原因");
+        for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
+            Map<String, String> cliBStructureMap = cliB.getStructureMap();
+            String infusionReason;
+            //台州
+            if (StringUtils.isNotEmpty(cliBStructureMap.get("输血检验指标"))) {
+                infusionReason = cliBStructureMap.get("输血检验指标");
+            } else {
+                infusionReason = cliBStructureMap.get("输注原因");
+            }
+            if (StringUtils.isNotEmpty(infusionReason)) {
+                if (infusionReason.contains("白蛋白") || infusionReason.contains("凝血酶原复合物")) {
+                    continue;
                 }
-                if(StringUtils.isNotEmpty(infusionReason)){
-                    Pattern compile = Pattern.compile("([\\d]+[.\\d+]*)([a-zA-Z]+)(/[a-zA-Z]+)*");
-                    Matcher matcher = compile.matcher(infusionReason);
-                    if (matcher.find(0)){
-                        if (null!=matcher.group(1)) {
-                            Double val = Double.parseDouble(matcher.group(1));
-                            if (val <= 60.0) {
-                                status.set("0");
-                            }
+                Pattern compile = Pattern.compile("([\\d]+[.\\d+]*)([a-zA-Z]+)(/[a-zA-Z]+)*");
+                Matcher matcher = compile.matcher(infusionReason);
+                if (matcher.find(0)) {
+                    if (null != matcher.group(1)) {
+                        double val = Double.parseDouble(matcher.group(1));
+                        if (val > 100) {
+                            status.set("-1");
                         }
                     }
                 }
             }
-        } else {
-            status.set("0");
         }
     }
 }

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

@@ -31,7 +31,7 @@ public class CLI0308 extends QCCatalogue {
             for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
                 Map<String, String> cliBStructureMap = cliB.getStructureMap();
                 if (StringUtils.isNotEmpty(cliBStructureMap.get("输注后效果评价")) && (cliBStructureMap.get("输注后效果评价").contains("不良反应")
-                        || cliBStructureMap.get("输注后效果评价").contains("不适"))) {
+                        || cliBStructureMap.get("输注后效果评价").contains("不适") || cliBStructureMap.get("输注后效果评价").contains("未见"))) {
                     status.set("0");
                     break;
                 }
@@ -40,7 +40,7 @@ public class CLI0308 extends QCCatalogue {
                     status.set("0");
                     continue;
                 }
-                if (infusion_process.matches(regex) || infusion_process.contains("无")) {
+                if (infusion_process.matches(regex) || infusion_process.contains("无") || infusion_process.contains("未见")) {
                     status.set("0");
                 } else {
                     status.set("-1");

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

@@ -5,6 +5,7 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
 import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -22,37 +23,37 @@ import java.util.regex.Pattern;
 @Component
 public class CLI0569 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
         if (ListUtil.isEmpty(clinicalBloodDocs)) {
-            status.set("0");
             return;
         }
         if (clinicalBloodDocs != null && clinicalBloodDocs.size() > 0) {
+            int matchSum = 0;
             for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
                 Map<String, String> cliBStructureMap = cliB.getStructureMap();
                 //台州
                 if (StringUtils.isNotEmpty(cliBStructureMap.get("血型"))) {
-                    status.set("0");
-                    break;
+                    matchSum++;
+                    continue;
                 }
                 if (cliBStructureMap.containsKey("输注种类、血型、数量")) {
                     String bloodType = cliBStructureMap.get("输注种类、血型、数量");
-                    if (StringUtils.isEmpty(bloodType)) {
-                        status.set("-1");
-                        break;
-                    } else {
-                        if (bloodType.contains("白蛋白")) {
-                            status.set("0");
-                            continue;
-                        }
+                    if (StringUtils.isNotEmpty(bloodType) &&
+                            (bloodType.contains("白蛋白") || bloodType.contains("凝血酶原复合物"))) {
+                        matchSum++;
+                        continue;
                     }
                     Pattern compile = Pattern.compile("[a-zA-Z]+型");
-                    Matcher matcher = compile.matcher(cliBStructureMap.get("输注种类、血型、数量"));
+                    Matcher matcher = compile.matcher(StringUtil.removeBlank(cliBStructureMap.get("输注种类、血型、数量")));
                     if (matcher.find()) {
-                        status.set("0");
+                        matchSum++;
                     }
                 }
             }
+            if (matchSum != clinicalBloodDocs.size()) {
+                status.set("0");
+            }
         }
 
     }

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

@@ -32,13 +32,16 @@ public class FIRP0190 extends QCCatalogue {
         if (CatalogueUtil.isEmpty(rhFactor)) {
             return;
         }
-        int matchSum = 0;
+        int matchSum = 0, noRhSum = 0;
         for (ClinicalBloodDoc clinicalBloodDoc : clinicalBloodDocList) {
             String bloodType = clinicalBloodDoc.getStructureMap().get("输注种类、血型、数量");
             if (StringUtils.isEmpty(bloodType)) {
                 continue;
             }
-            if (bloodType.contains("白蛋白")) {
+            if (!bloodType.contains("阴") && !bloodType.contains("阳")) {
+                noRhSum++;
+            }
+            if (bloodType.contains("白蛋白") || bloodType.contains("凝血酶原复合物")) {
                 continue;
             }
             bloodType = bloodType.toUpperCase();
@@ -49,7 +52,11 @@ public class FIRP0190 extends QCCatalogue {
                 break;
             }
         }
-        if (matchSum == 0){
+        /* 如果所有输血记录都没有rh记录(阴、阳),则不报错 */
+        if (noRhSum == clinicalBloodDocList.size()){
+            return;
+        }
+        if (matchSum == 0) {
             status.set("-1");
         }
     }

+ 69 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0195.java

@@ -0,0 +1,69 @@
+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.model.doc.DeathCaseDiscussDoc;
+import com.lantone.qc.pub.model.doc.DeathRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0195
+ * @Description :离院方式选择错误
+ * @Author : 胡敬
+ * @Date: 2020-06-03 16:54
+ */
+@Component
+public class FIRP0195 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        /*FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();*/
+        DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
+        DeathCaseDiscussDoc deathCaseDiscussDoc = inputInfo.getDeathCaseDiscussDoc();
+        /* List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();*/
+        if (inputInfo.getFirstPageRecordDoc() == null) {
+            return;
+        }
+        Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+        String outWay = firstpageStructureMap.get(Content.outWay);
+        if (StringUtil.isBlank(outWay)) {
+            return;
+        }
+        String wardOutWay;
+        if (deathRecordDoc != null || deathCaseDiscussDoc != null) {
+            wardOutWay = "死亡";
+            if (!match(outWay, wardOutWay)) {
+                status.set("-1");
+            }
+        }
+
+        /*
+        if (threeLevelWardDocs.size() > 0) {
+            List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+            ThreeLevelWardDoc lastWardDoc = allDoctorWradDocs.get(allDoctorWradDocs.size() - 1);
+            List<ThreeLevelWardLabel> threeLevelWardLabels = lastWardDoc.getThreeLevelWardLabel();
+            if (threeLevelWardLabels.size() > 0) {
+                ThreeLevelWardLabel threeLevelWardLabel = threeLevelWardLabels.get(0);
+                if (threeLevelWardLabel != null) {
+                    wardOutWay = threeLevelWardLabel.getDischargeMode();
+                    if (StringUtil.isNotBlank(wardOutWay)) {
+                        if (!match(outWay, wardOutWay)) {
+                            status.set("-1");
+                        }
+                    }
+                }
+            }
+        }
+         */
+
+
+    }
+
+    private boolean match(String str1, String str2) {
+        return str1.equals(str2) || str1.contains(str2) || str2.contains(str1);
+    }
+}

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

@@ -21,11 +21,14 @@ public class FIRP0199 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            /*
             String infantAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
             String infantAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
             if (CatalogueUtil.isEmpty(infantAgeMonths) && CatalogueUtil.isEmpty(infantAgeDays)) {
                 return;
             }
+
+             */
             String newbornWeight = firstpageStructureMap.get(Content.newbornWeight);
             if (CatalogueUtil.isEmpty(newbornWeight)) {
                 status.set("-1");

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

@@ -21,11 +21,14 @@ public class FIRP0201 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            /*
             String infantAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
             String infantAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
             if (CatalogueUtil.isEmpty(infantAgeMonths) && CatalogueUtil.isEmpty(infantAgeDays)) {
                 return;
             }
+
+             */
             String newbornAdmisWeight = firstpageStructureMap.get(Content.newbornAdmisWeight);
             if (CatalogueUtil.isEmpty(newbornAdmisWeight)){
                 status.set("-1");

+ 21 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0222.java

@@ -1,10 +1,13 @@
 package com.lantone.qc.kernel.catalogue.firstpagerecord;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -19,6 +22,22 @@ import java.util.Map;
 public class FIRP0222 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        MedicalRecordInfoDoc medicalRecordInfoDoc = inputInfo.getMedicalRecordInfoDoc();
+        TransferRecordDoc transferRecordDocs = inputInfo.getTransferRecordDocs();
+        /* 如果有转入转出科室记录,则不判断 */
+        if (transferRecordDocs != null) {
+            return;
+        }
+        if (firstPageRecordDoc == null || medicalRecordInfoDoc == null) {
+            return;
+        }
+        Map<String, String> firpStructureMap = firstPageRecordDoc.getStructureMap();
+        Map<String, String> medStructureMap = medicalRecordInfoDoc.getStructureMap();
+        String admitDept = firpStructureMap.get(Content.admitDept);
+        String behDeptId = medStructureMap.get("behDeptId");
+        if (StringUtil.isNotBlank(admitDept) && StringUtil.isNotBlank(behDeptId) && !admitDept.equals(behDeptId)) {
+            status.set("-1");
+        }
     }
 }

+ 2 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0252.java

@@ -29,5 +29,7 @@ public class FIRP0252 extends QCCatalogue {
                 status.set("0");
             }
         }
+        /* 这条规则暂时无法做,默认不报错 */
+        status.set("0");
     }
 }

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

@@ -19,11 +19,14 @@ import java.util.Map;
 public class FIRP0261 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
+        /*
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             if (CatalogueUtil.isEmpty(firstpageStructureMap.get(Content.ob_oa))){
                 status.set("-1");
             }
         }
+        暂时判断不了这条规则,默认不报错
+         */
     }
 }

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

@@ -19,11 +19,14 @@ import java.util.Map;
 public class FIRP0263 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
+        /*
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             if (CatalogueUtil.isEmpty(firstpageStructureMap.get(Content.clinical_pathology))){
                 status.set("-1");
             }
         }
+        暂时判断不了这条规则,默认不报错
+         */
     }
 }

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

@@ -19,11 +19,14 @@ import java.util.Map;
 public class FIRP0265 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
+        /*
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             if (CatalogueUtil.isEmpty(firstpageStructureMap.get(Content.radiation_pathology))){
                 status.set("-1");
             }
         }
+        暂时判断不了这条规则,默认不报错
+         */
     }
 }

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

@@ -1,12 +1,10 @@
 package com.lantone.qc.kernel.catalogue.firstpagerecord;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.util.StringUtil;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -29,6 +27,9 @@ public class FIRP0275 extends QCCatalogue {
             Map<String, String> leaveHospitalStructureMap = inputInfo.getLeaveHospitalDoc().getStructureMap();
             String firstDischargeTime = firstpageStructureMap.get(Content.actualStay);//病案首页出院时间
             String dischargeTime = leaveHospitalStructureMap.get(Content.stayLength);//出院小结出院时间
+            if (StringUtil.isBlank(firstDischargeTime) || StringUtil.isBlank(dischargeTime)) {
+                return;
+            }
             String first = copileNum(firstDischargeTime);
             String disc = copileNum(dischargeTime);
             if (!first.equals(disc)) {
@@ -38,11 +39,11 @@ public class FIRP0275 extends QCCatalogue {
     }
 
     private String copileNum(String firstDischargeTime) {
-        String num= "";
+        String num = "";
         String compile = "([1-9]\\d*\\.?\\d*)|(0\\.\\d*[1-9])";
         Pattern compile1 = Pattern.compile(compile);
         Matcher matcher = compile1.matcher(firstDischargeTime);
-        while (matcher.find()){
+        while (matcher.find()) {
             num = matcher.group(0);
         }
         return num;

+ 33 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02836.java

@@ -0,0 +1,33 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP02836
+ * @Description : 出生日期未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-04 17:46
+ */
+@Component
+public class FIRP02836 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 birthDay = firstpageStructureMap.get("出生日期");
+            if (!CatalogueUtil.isEmpty(birthDay)) {
+                status.set("0");
+            }
+        }
+    }
+}

+ 33 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02837.java

@@ -0,0 +1,33 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP02837
+ * @Description : 年龄未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-04 17:45
+ */
+@Component
+public class FIRP02837 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 age = firstpageStructureMap.get(Content.age);
+            if (!CatalogueUtil.isEmpty(age)) {
+                status.set("0");
+            }
+        }
+    }
+}

+ 33 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02838.java

@@ -0,0 +1,33 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP02838
+ * @Description : 国籍未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-04 17:45
+ */
+@Component
+public class FIRP02838 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 nationality = firstpageStructureMap.get("国籍");
+            if (!CatalogueUtil.isEmpty(nationality)) {
+                status.set("0");
+            }
+        }
+    }
+}

+ 32 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02841.java

@@ -0,0 +1,32 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP02841
+ * @Description : 实际住院天数未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-04 17:45
+ */
+@Component
+public class FIRP02841 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 actualLengthOfStay = firstpageStructureMap.get("实际住院天数");
+            if (!CatalogueUtil.isEmpty(actualLengthOfStay)) {
+                status.set("0");
+            }
+        }
+    }
+}

+ 33 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02904.java

@@ -0,0 +1,33 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP02904
+ * @Description : 过敏药物未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-04 16:13
+ */
+@Component
+public class FIRP02904 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 name = firstpageStructureMap.get(Content.allergyDrug);
+            if (!CatalogueUtil.isEmpty(name)) {
+                status.set("0");
+            }
+        }
+    }
+}

+ 33 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02905.java

@@ -0,0 +1,33 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP02905
+ * @Description : 接收机构名称未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-04 16:14
+ */
+@Component
+public class FIRP02905 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 name = firstpageStructureMap.get(Content.receivingOrganization);
+            if (!CatalogueUtil.isEmpty(name)) {
+                status.set("0");
+            }
+        }
+    }
+}

+ 32 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02906.java

@@ -0,0 +1,32 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP02906
+ * @Description : 入院病房未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-04 17:45
+ */
+@Component
+public class FIRP02906 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 admissionWard = firstpageStructureMap.get("入院病房");
+            if (!CatalogueUtil.isEmpty(admissionWard)) {
+                status.set("0");
+            }
+        }
+    }
+}

+ 32 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02907.java

@@ -0,0 +1,32 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP02907
+ * @Description : 出院病房未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-04 17:45
+ */
+@Component
+public class FIRP02907 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 dischargeWard = firstpageStructureMap.get("出院病房");
+            if (!CatalogueUtil.isEmpty(dischargeWard)) {
+                status.set("0");
+            }
+        }
+    }
+}

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

@@ -14,7 +14,7 @@ import java.util.List;
 
 /**
  * @ClassName : LEA0146
- * @Description :出院其他诊断不完全
+ * @Description :出院诊断不完整
  * @Author : 胡敬
  * @Date: 2020-03-16 14:01
  */

+ 7 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0147.java

@@ -10,7 +10,6 @@ import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
 import com.lantone.qc.pub.model.entity.Diag;
 import com.lantone.qc.pub.model.label.DiagLabel;
 import com.lantone.qc.pub.util.ListUtil;
-import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -32,9 +31,9 @@ public class LEA0147 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
         if (leaveHospitalDoc == null) {
-            status.set("0");
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
@@ -45,12 +44,15 @@ public class LEA0147 extends QCCatalogue {
                 Map<String, Map<String, String>> hospitalDiagMap = redisUtil.getJsonStringValue(KernelConstants.HOSPITAL_DIAG_MAP);
                 if (ListUtil.isNotEmpty(diags) && hospitalDiagMap != null) {
                     List<String> diagnames = new ArrayList<>();
-                    for (Diag dg:diags) {
-                        if (hospitalDiagMap.get(dg.getHospitalDiagName())==null) {
+                    for (Diag dg : diags) {
+                        if ("其他的".equals(dg.getHospitalDiagName())) {
+                            continue;
+                        }
+                        if (hospitalDiagMap.get(dg.getHospitalDiagName()) == null) {
                             diagnames.add(dg.getHospitalDiagName());
                         }
                     }
-                    if (diagnames.size()>0) {
+                    if (diagnames.size() > 0) {
                         info.set(StringUtils.join(diagnames.toArray(), ","));
                         status.set("-1");
                     }

+ 24 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0370.java

@@ -3,7 +3,9 @@ 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.FirstCourseRecordDoc;
 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;
@@ -27,6 +29,8 @@ public class OPE0370 extends QCCatalogue {
         //        boolean isOperativePatient = CatalogueUtil.isOperativePatients(doctorAdviceDocs);
         boolean isOperativePatient = true;//是手术患者(暂时默认是)
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+
+        boolean emergencyOperation = findEmergencyOperation(inputInfo);
         if (operationDocs == null || operationDocs.size() < 1) {
             return;
         }
@@ -39,6 +43,14 @@ public class OPE0370 extends QCCatalogue {
                 j++;
             }
         }
+        /* 如果首次病程录的诊疗计划里有急诊手术,则手术记录的数量减一 */
+        if (emergencyOperation) {
+            i--;
+        }
+        if (i < 0) {
+            i = 0;
+        }
+        /* 手术记录数量和术前小结数量不一致则报错 */
         if (i != j) {
             status.set("-1");
             info.set("手术记录不一致");
@@ -54,4 +66,16 @@ public class OPE0370 extends QCCatalogue {
         //                return;
         //            }
     }
+
+    private boolean findEmergencyOperation(InputInfo inputInfo) {
+        FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
+        if (firstCourseRecordDoc != null) {
+            String treatPlan = firstCourseRecordDoc.getStructureMap().get("诊疗计划");
+            if (StringUtil.isNotBlank(treatPlan)) {
+                String regex = ".*急诊.*术.*";
+                return treatPlan.matches(regex);
+            }
+        }
+        return false;
+    }
 }

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

@@ -5,13 +5,14 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
 import com.lantone.qc.pub.model.label.ThreeLevelWardLabel;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
 
 /**
  * @ClassName : THR0134
- * @Description : 上级医师(主治医师)首次查房无补充诊断/初步诊断/修正诊断
+ * @Description : 上级医师(主治医师)首次查房无初步诊断
  * @Author : 胡敬
  * @Date: 2020-03-23 14:16
  */
@@ -33,7 +34,7 @@ public class THR0134 extends QCCatalogue {
             return;
         }
 
-        if (firstAttendLabel.getDiags().size() != 0) {
+        if (firstAttendLabel.getDiags().size() != 0 || StringUtil.isNotBlank(firstAttendLabel.getDiagText())) {
             status.set("0");
         }
 

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

@@ -5,6 +5,7 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
 import com.lantone.qc.pub.model.label.ThreeLevelWardLabel;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -33,7 +34,7 @@ public class THR0139 extends QCCatalogue {
             return;
         }
 
-        if (firstDirectLabel.getDiags().size() != 0) {
+        if (firstDirectLabel.getDiags().size() != 0 || StringUtil.isNotBlank(firstDirectLabel.getDiagText())) {
             status.set("0");
         }
     }

+ 28 - 9
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/ThreeLevelWardAI.java

@@ -65,6 +65,11 @@ public class ThreeLevelWardAI extends ModelAI {
         }
 
         List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();//所有查房记录
+        if (allDoctorWradDocs.size() > 0) {
+            Map<String, String> lastWardStructureMap = allDoctorWradDocs.get(allDoctorWradDocs.size() - 1).getStructureMap();
+            putContent(crfContent, medicalTextType.get(1), lastWardStructureMap.get("病情记录"), "末次查房");
+        }
+
         List<Map<String, String>> directorDifficultRecord = new ArrayList<>();
         //疑难患者副高及以上查房记录
         if (inputInfo.getDifficultCaseDiscussDocs().size() > 0) {
@@ -96,6 +101,10 @@ public class ThreeLevelWardAI extends ModelAI {
         if (midData.get(Content.director + "最后一次") != null) {
             putWardRoundCrfData(midData.getJSONObject(Content.director + "最后一次"), inputInfo, 0);//最后一次查房记录
         }
+        //最后一次查房记录模型输出
+        if (midData.get("末次查房") != null) {
+            putWardRoundCrfData(midData.getJSONObject("末次查房"), inputInfo, 0);//最后一次查房记录
+        }
         //疑难患者副高及以上查房记录模型输出
         if (inputInfo.getDifficultCaseDiscussDocs().size() > 0 && ListUtil.isNotEmpty(directorDifficultRecord)) {
             for (int i = 0; i < directorDifficultRecord.size(); i++) {
@@ -111,7 +120,7 @@ public class ThreeLevelWardAI extends ModelAI {
                 if (midData.get(Content.rescuingPatients + i) == null) {
                     continue;
                 }
-                putWardRoundCrfData(midData.getJSONObject(Content.difficultPatients + i), inputInfo, 3);//查房记录
+                putWardRoundCrfData(midData.getJSONObject(Content.rescuingPatients + i), inputInfo, 3);//查房记录
             }
         }
 
@@ -150,13 +159,23 @@ public class ThreeLevelWardAI extends ModelAI {
         threeLevelWardLabel.setSerious(serious);
         ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
         if (serious == 0) {//处理主治/主任查房记录
-            if (Content.attend.equals(detailTitle)) {
-                threeLevelWardDoc.getAttendingDoctorWardDocs().get(0).setThreeLevelWardLabel(threeLevelWardLabel);
-            } else if (Content.director.equals(detailTitle)) {
-                threeLevelWardDoc.getDirectorDoctorWardDocs().get(0).setThreeLevelWardLabel(threeLevelWardLabel);
-            } else if ((Content.director + "最后一次").equals(detailTitle)) {
-                List<DirectorDoctorWardDoc> director = threeLevelWardDoc.getDirectorDoctorWardDocs();
-                director.get(director.size() - 1).setThreeLevelWardLabel(threeLevelWardLabel);
+            switch (detailTitle) {
+                case Content.attend:
+                    threeLevelWardDoc.getAttendingDoctorWardDocs().get(0).setThreeLevelWardLabel(threeLevelWardLabel);
+                    break;
+                case Content.director:
+                    threeLevelWardDoc.getDirectorDoctorWardDocs().get(0).setThreeLevelWardLabel(threeLevelWardLabel);
+                    break;
+                case Content.director + "最后一次":
+                    List<DirectorDoctorWardDoc> director = threeLevelWardDoc.getDirectorDoctorWardDocs();
+                    director.get(director.size() - 1).setThreeLevelWardLabel(threeLevelWardLabel);
+                    break;
+                case "末次查房":
+                    List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
+                    List<ThreeLevelWardLabel> lastWardLebelList = new ArrayList<>();
+                    lastWardLebelList.add(threeLevelWardLabel);
+                    allDoctorWradDocs.get(allDoctorWradDocs.size() - 1).setThreeLevelWardLabel(lastWardLebelList);
+                    break;
             }
         } else {
             List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
@@ -257,7 +276,7 @@ public class ThreeLevelWardAI extends ModelAI {
         for (RescueDoc rescueDoc : rescueDocs) {
             Map<String, String> rescueStructureMap = rescueDoc.getStructureMap();
             recordTime = rescueStructureMap.get("抢救结束时间");
-            if(recordTime == null){
+            if (recordTime == null) {
                 continue;
             }
             Date recordDate = StringUtil.parseDateTime(recordTime);

+ 4 - 1
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/model/EntityEnum.java

@@ -28,7 +28,7 @@ public enum EntityEnum {
     TITLE_OF_OPERATIVE_FINDINGS("手术经过标题"), TITLE_OF_MEASURES_AFTER_OP("术后处理措施标题"),
     TITLE_OF_RISK_AFTER_OP("术后风险标题"), TITLE_OF_ATTENTION_AFTER_OP("术后注意事项标题"), VITAL("生命体征"),
     BETTER_FINDING("好转表现"),OUTCOME_TO_BETTER("转归情况-好转"),OUTCOME_CURE("转归情况-治愈"),POSITIVE_FINDING("阳性表现"),
-    INSPECTION_ITEMS("检查项目");
+    INSPECTION_ITEMS("检查项目"),DISCHARGE_MODE("出院方式");
 
     private String value;
 
@@ -232,6 +232,9 @@ public enum EntityEnum {
             case "检查项目":
                 entityEnum = EntityEnum.INSPECTION_ITEMS;
                 break;
+            case "出院方式":
+                entityEnum = EntityEnum.DISCHARGE_MODE;
+                break;
         }
         return entityEnum;
     }

+ 16 - 0
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessThreeLevelWard.java

@@ -55,6 +55,14 @@ public class EntityProcessThreeLevelWard extends EntityProcess {
             addDiag(threeLevelWardLabel, diagBasisSplit, diagLemmas);
         }
 
+        //诊断文本
+        if (titleText.get(EntityEnum.TITLE_FOR_DIAG.toString()) != null){
+            List<String> diagList = titleText.get(EntityEnum.TITLE_FOR_DIAG.toString());
+            String text = textJoin(content, diagList);
+            //诊断文本
+            threeLevelWardLabel.setDiagText(text);
+        }
+
         //鉴别诊断
         if (titleText.get(EntityEnum.TITLE_FOR_DIFF.toString()) != null) {
             List<String> diffDiagList = titleText.get(EntityEnum.TITLE_FOR_DIFF.toString());
@@ -112,6 +120,14 @@ public class EntityProcessThreeLevelWard extends EntityProcess {
         }
         threeLevelWardLabel.setTreatmentPlans(treatmentPlans);
 
+        //离院方式
+        List<Lemma> dischargeMode = createEntityTree(aiOut, EntityEnum.DISCHARGE_MODE.toString());
+        for (Lemma lemma : dischargeMode) {
+            String text = lemma.getText();
+            threeLevelWardLabel.setDischargeMode(text);
+        }
+
+
         //好转表现
         List<Lemma> betterFindingLemmas = createEntityTree(aiOut, EntityEnum.BETTER_FINDING.toString());
         List<BetterFinding> betterFindings = new ArrayList<>();

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

@@ -178,6 +178,7 @@ public class Content {
     public static final String dischargeTime = "出院时间";
     public static final String outDept = "出院科别";
     public static final String outHouse = "出院病房";
+    public static final String receivingOrganization = "接收机构名称";
     public static final String actualStay = "实际住院天数";//病案首页用
     public static final String drugAllergy = "药物过敏";
     public static final String allergyDrug = "过敏药物";

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

@@ -89,6 +89,8 @@ public class InputInfo {
     private List<ReasonableDiagnosisDoc> reasonableDiagnosisDocs = new ArrayList<>();
     //日常病程录
     private List<DailyCourseRecordDoc> dailyCourseRecordDocs = Lists.newArrayList();
+    //住院病历信息
+    private MedicalRecordInfoDoc medicalRecordInfoDoc;
 
     //新增记录
     public <T> void addDoc(List<T> list, T obj) {

+ 19 - 0
public/src/main/java/com/lantone/qc/pub/model/doc/MedicalRecordInfoDoc.java

@@ -0,0 +1,19 @@
+package com.lantone.qc.pub.model.doc;
+
+import com.lantone.qc.pub.model.label.CaseCharacteristicLabel;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.model.label.DiagnosisLabel;
+import com.lantone.qc.pub.model.label.TreatPlanLabel;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @ClassName : MedicalRecordInfoDoc
+ * @Description : 住院病历信息
+ * @Author : 胡敬
+ * @Date: 2020-06-03 15:46
+ */
+@Getter
+@Setter
+public class MedicalRecordInfoDoc extends ModelDoc {
+}

+ 3 - 1
public/src/main/java/com/lantone/qc/pub/model/label/ThreeLevelWardLabel.java

@@ -23,14 +23,16 @@ import java.util.List;
 @Getter
 @Setter
 public class ThreeLevelWardLabel {
-    int serious = 0;    //不严重患者:0,危重患者:1,疑难患者:2,抢救患者:3
+    int serious = 0;    //0:不严重患者,1:危重患者,2:疑难患者,3:抢救患者
     String title;   //医师职称
     List<Clinical> clinicals = new ArrayList<>();   //病史(临床表现)
     List<Sign> signs = new ArrayList<>();   //查体
     List<Diag> diffDiag = new ArrayList<>();   //鉴别诊断
     String diagBasisText;   //诊断依据文本
     String diffDiagText;    //鉴别诊断文本
+    String diagText;    //诊断文本
     List<Diag> diags = new ArrayList<>();   //补充诊断/初步诊断/修正诊断
+    String dischargeMode;  //离院方式
     List<TreatmentPlan> treatmentPlans = new ArrayList<>();   //诊疗计划
     List<BetterFinding> betterFindings = new ArrayList<>();   //好转表现
     List<OutcomeToBetter> outcomeToBetters = new ArrayList<>();   //转归情况-好转

+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/changx/ChangxBeHospitalizedDocTrans.java

@@ -113,6 +113,7 @@ public class ChangxBeHospitalizedDocTrans extends ModelDocTrans {
             "++++过敏史=过敏史",
             "++++输血史=输血史",
             "++++胸闷心悸史=胸闷心悸史",
+            "实验室检查++++辅助检查=辅助检查",
             "签名++++=医师签名",
             "兄弟姐妹健康状况++++兄弟姐妹=兄弟姐妹健康状况"
     );

+ 2 - 1
trans/src/main/java/com/lantone/qc/trans/changx/ChangxClinicalBloodDocTrans.java

@@ -41,7 +41,7 @@ public class ChangxClinicalBloodDocTrans extends ModelDocTrans {
         if (StringUtil.isBlank(text)) {
             text = CxXmlUtil.getTextByNodePath(content, "//DocObjContent/Region");
         }
-        Map<String, String> cutWordMap = Preproc.getCutWordMap(true, sourceTitles, text);
+        Map<String, String> cutWordMap = Preproc.getCutWordMap(true, sourceTitles, "");
         cutWordMap.putAll(structureMap);
         if (StringUtil.isNotBlank(structureMap.get("输注种类、血型、数量"))) {
             cutWordMap.put("输血成分及数量", structureMap.get("输注种类、血型、数量"));
@@ -73,6 +73,7 @@ public class ChangxClinicalBloodDocTrans extends ModelDocTrans {
             "输注结束=",
             "输注种类、血型、数量=",
             "输注过程=",
+            "++++复选框=输注方式",
             "签名++++=记录医师",
             "签名时间="
     );

+ 4 - 0
trans/src/main/java/com/lantone/qc/trans/changx/ChangxDocTrans.java

@@ -127,6 +127,10 @@ public class ChangxDocTrans extends DocTrans {
                 ChangxDailyCourseRecordDocTrans dailyCourseRecordDocTrans = new ChangxDailyCourseRecordDocTrans();
                 inputInfo.setDailyCourseRecordDocs(dailyCourseRecordDocTrans.extract(i));
             }
+            if (i.getTitle().equals("住院病历信息")) {
+                ChangxMedicalRecordInfoDocTrans medicalRecordInfoDocTrans = new ChangxMedicalRecordInfoDocTrans();
+                inputInfo.setMedicalRecordInfoDoc(medicalRecordInfoDocTrans.extract(i));
+            }
         }
         pageDataHandle(inputInfo);
         return inputInfo;

+ 35 - 0
trans/src/main/java/com/lantone/qc/trans/changx/ChangxMedicalRecordInfoDocTrans.java

@@ -0,0 +1,35 @@
+package com.lantone.qc.trans.changx;
+
+import com.google.common.collect.Maps;
+import com.lantone.qc.dbanaly.util.ModuleMappingUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 住院病历信息
+ * @author: 胡敬
+ * @time: 2020/6/3 15:45
+ */
+public class ChangxMedicalRecordInfoDocTrans extends ModelDocTrans {
+
+    @Override
+    public MedicalRecordInfoDoc extract(MedrecVo medrecVo) {
+        Map<String, String> content = (Map) ((List) medrecVo.getContent().get("content")).get(0);
+        MedicalRecordInfoDoc medicalRecordInfoDoc = new MedicalRecordInfoDoc();
+        medicalRecordInfoDoc.setStructureMap(content);
+        medicalRecordInfoDoc.setPageData(medrecVo.getContent());
+        return medicalRecordInfoDoc;
+    }
+
+}

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxThreeLevelWardDocTrans.java

@@ -105,7 +105,7 @@ public class ChangxThreeLevelWardDocTrans extends ModelDocTrans {
         String content = structureMap.get("病情记录");
         //标题有代字
         DirectorDoctorWardDoc directorDoctorWardDoc = null;
-        if ((StringUtils.isNotEmpty(subTitle(title)) && title.contains("主任")) || findDirector(title, content)) {
+        if ((StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主任")) || findDirector(title, content)) {
             directorDoctorWardDoc = new DirectorDoctorWardDoc();
             directorDoctorWardDoc.setStructureMap(structureMap);
             directorDoctorWardDoc.setPageData((Map) structureMap);
@@ -123,7 +123,7 @@ public class ChangxThreeLevelWardDocTrans extends ModelDocTrans {
         String content = structureMap.get("病情记录");
         AttendingDoctorWardDoc attendingDoctorWardDoc = null;
         //标题有代字
-        if ((StringUtils.isNotEmpty(subTitle(title)) && title.contains("主治")) || findAttend(title, content)) {
+        if ((StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主治")) || findAttend(title, content)) {
             attendingDoctorWardDoc = new AttendingDoctorWardDoc();
             attendingDoctorWardDoc.setStructureMap(structureMap);
             attendingDoctorWardDoc.setPageData((Map) structureMap);

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

@@ -39,7 +39,7 @@ public class TaiZhouThreeLevelWardDocTrans extends ModelDocTrans {
         String content = contentMap.get("xmlText").toString();
         Map<String, String> sourceMap = TzXmlUtil.getXmlToMapForTZ(content);
         sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
-        sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
+        //sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
 
         if (StringUtils.isEmpty(structureMap.get("查房日期"))) {