Parcourir la source

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

wangfeng il y a 5 ans
Parent
commit
a9736a6426
46 fichiers modifiés avec 43768 ajouts et 2886 suppressions
  1. 31 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02914.java
  2. 2 13
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0494.java
  3. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0495.java
  4. 2 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0385.java
  5. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0387.java
  6. 3 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0556.java
  7. 10 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0296.java
  8. 12 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0599.java
  9. 5 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0187.java
  10. 14 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0196.java
  11. 5 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0213.java
  12. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0248.java
  13. 7 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0273.java
  14. 8 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02904.java
  15. 7 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02992.java
  16. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0520.java
  17. 30 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0146.java
  18. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0150.java
  19. 4 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0508.java
  20. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0651.java
  21. 54 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03028.java
  22. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0636.java
  23. 13 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0125.java
  24. 13 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0126.java
  25. 23 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02880.java
  26. 1 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02931.java
  27. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03014.java
  28. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03015.java
  29. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03016.java
  30. 3 24
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03017.java
  31. 5 5
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03020.java
  32. 24 7
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0701.java
  33. 62 1
      kernel/src/main/java/com/lantone/qc/kernel/util/CatalogueUtil.java
  34. 3 3
      kernel/src/main/resources/application.yml
  35. 141 77
      kernel/src/main/resources/cache/2/concept_clinic_bodypart_properties.dict
  36. 20224 0
      kernel/src/main/resources/cache/2/concept_diag_properties.dict
  37. 20224 0
      kernel/src/main/resources/cache/2/hospital_diag_info.dict
  38. 2612 2612
      kernel/src/main/resources/cache/2/hospital_doctor_info.dict
  39. 141 77
      kernel/src/main/resources/cache/3/concept_clinic_bodypart_properties.dict
  40. 5 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfBeHospitalizedDocTrans.java
  41. 4 0
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfLeaveHospitalDocTrans.java
  42. 7 1
      trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfThreeLevelWardDocTrans.java
  43. 1 1
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouConsultationDocTrans.java
  44. 2 1
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDifficultCaseDiscussDocTrans.java
  45. 7 5
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstPageRecordDocTrans.java
  46. 1 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouOperationDocTrans.java

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

@@ -0,0 +1,31 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : BEH02914
+ * @Description :  影像学检查未填写
+ * @Author : 胡敬
+ * @Date: 2020-07-03 10:42
+ */
+@Component
+public class BEH02914 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        String check = beHospitalStructureMap.get("影像学检查");
+        if (StringUtil.isBlank(check)) {
+            status.set("-1");
+        }
+    }
+}

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

@@ -1,16 +1,12 @@
 package com.lantone.qc.kernel.catalogue.behospitalized;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.dbanaly.util.KernelConstants;
-import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
-import com.lantone.qc.pub.util.SpringContextUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
-import java.util.Map;
-
 /**
  * @ClassName : BEH0494
  * @Description :  入院记录由非执业医师填写
@@ -29,14 +25,7 @@ public class BEH0494 extends QCCatalogue {
             doctorName = inputInfo.getBeHospitalizedDoc().getStructureMap().get("签名");
         }
         if (StringUtils.isNotEmpty(doctorName)) {
-            SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
-            Map<String, Object> surgeon = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP);
-            if (surgeon == null) {
-                return;
-            }
-            Map<String, String> doctor = (Map) surgeon.get(doctorName);
-            String occup = doctor.get("occup");
-            if (StringUtils.isNotEmpty(occup) && "1".equals(occup)) {
+            if (CatalogueUtil.isOccup(doctorName)) {
                 status.set("0");
                 return;
             }

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0495.java

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

+ 2 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0385.java

@@ -6,7 +6,7 @@ import com.lantone.qc.pub.model.OutputInfo;
 import org.springframework.stereotype.Component;
 
 /**
- * @Description:
+ * @Description: 危急值记录中无临床意义
  * @author: rengb
  * @time: 2020/3/19 19:54
  */
@@ -15,7 +15,6 @@ public class CRI0385 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-
+        status.set("0");
     }
-
 }

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

@@ -9,7 +9,7 @@ import org.springframework.stereotype.Component;
 import java.util.List;
 
 /**
- * @Description:
+ * @Description: 危急值记录中无效果观察
  * @author: rengb
  * @time: 2020/3/19 19:54
  */
@@ -18,8 +18,8 @@ public class CRI0387 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
 
     }
-
 }

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

@@ -21,9 +21,9 @@ import java.util.Map;
 public class DEAC0556 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null) {
-            Map<String, String> deathRecordStructureMap = inputInfo.getDeathRecordDoc().getStructureMap();
-            String deathTime = deathRecordStructureMap.get("参加讨论人员");
+        if (inputInfo.getDeathCaseDiscussDoc() != null) {
+            Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
+            String deathTime = deathCaseDiscussStructureMap.get("参加讨论人员");
             if (CatalogueUtil.isEmpty(deathTime)) {
                 status.set("-1");
             }

+ 10 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0296.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.kernel.catalogue.dutyshiftsystem;
 
 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.LeaveHospitalDoc;
@@ -192,9 +193,15 @@ public class DUT0296 extends QCCatalogue {
             from.setTime(dateIn);
             Calendar to = Calendar.getInstance();
             to.setTime(dateOut);
-            int fromMonth = from.get(Calendar.DAY_OF_YEAR);
-            int toMonth = to.get(Calendar.DAY_OF_YEAR);
-            day = toMonth - fromMonth;
+            long timeS,timeE,timeDiff = 0;
+            try {
+                timeS = from.getTimeInMillis();
+                timeE = to.getTimeInMillis();
+                timeDiff = (timeE - timeS) / (1000 * 60* 60 * 24);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            day = (int) timeDiff;
         } catch (Exception e) {
             e.printStackTrace();
         }

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

@@ -2,6 +2,7 @@ package com.lantone.qc.kernel.catalogue.dutyshiftsystem;
 
 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.ThreeLevelWardDoc;
@@ -48,8 +49,18 @@ public class DUT0599 extends QCCatalogue {
                 continue;
             }
             Date rollInRecordDate = StringUtil.parseDateTime(rollInRecordDateStr);
-            rollInDay = new ArrayList<>();
+            if (inputInfo.getLeaveHospitalDoc() != null) {
+                Map<String, String> leaveHospitalStructureMap = inputInfo.getLeaveHospitalDoc().getStructureMap();
+                String dischargeTime = leaveHospitalStructureMap.get(Content.dischargeTime);
+                //如果住院天数小于3天则不判断该条规则
+                if ( rollInRecordDate != null && StringUtil.isNotBlank(dischargeTime)) {
+                    if (!CatalogueUtil.compareTime(rollInRecordDate, StringUtil.parseDateTime(dischargeTime), 3 * 24 * 60L)) {
+                        continue;
+                    }
+                }
+            }
             for (int i = 1; i <= 3; i++) {
+                rollInDay = new ArrayList<>();
                 Date wardRecordDay = DateUtil.dateZeroClear(DateUtil.addDate(rollInRecordDate, i));
                 rollInDay.add(wardRecordDay);
             }

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

@@ -27,7 +27,11 @@ public class FIRP0187 extends QCCatalogue {
         Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
         String outWay = firstpageStructureMap.get(Content.outWay);
         String deadAutopsy = firstpageStructureMap.get(Content.deadAutopsy);
-        if (StringUtils.isEmpty(outWay) && StringUtils.isEmpty(deadAutopsy)) {
+        if(CatalogueUtil.isSpecialChar(deadAutopsy)){
+            status.set("0");
+            return;
+        }
+        if (StringUtils.isEmpty(outWay) || StringUtils.isEmpty(deadAutopsy)) {
             status.set("0");
             return;
         }

+ 14 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0196.java

@@ -18,6 +18,10 @@ import java.util.Map;
 @Component
 public class FIRP0196 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();
@@ -27,12 +31,17 @@ public class FIRP0196 extends QCCatalogue {
             String brainInjuryComaAfterDays = firstpageStructureMap.get(Content.brainInjuryComaAfterDays);
             String brainInjuryComaAfterHours = firstpageStructureMap.get(Content.brainInjuryComaAfterHours);
             String brainInjuryComaAfterMins = firstpageStructureMap.get(Content.brainInjuryComaAfterMins);
+            String regex = "([1-9]\\d*\\.?\\d*)|(0\\.\\d*[1-9])";
+            if (StringUtil.isNotBlank(brainInjuryComaBeforeDays) && !brainInjuryComaBeforeDays.matches(regex)
+                && StringUtil.isNotBlank(brainInjuryComaAfterDays) && !brainInjuryComaAfterDays.matches(regex)) {
+                return ;
+            }
             if (StringUtil.isBlank(brainInjuryComaBeforeDays)
-                    || StringUtil.isBlank(brainInjuryComaBeforeHours)
-                    || StringUtil.isBlank(brainInjuryComaBeforeMins)
-                    || StringUtil.isBlank(brainInjuryComaAfterDays)
-                    || StringUtil.isBlank(brainInjuryComaAfterHours)
-                    || StringUtil.isBlank(brainInjuryComaAfterMins)
+                    && StringUtil.isBlank(brainInjuryComaBeforeHours)
+                    && StringUtil.isBlank(brainInjuryComaBeforeMins)
+                    && StringUtil.isBlank(brainInjuryComaAfterDays)
+                    && StringUtil.isBlank(brainInjuryComaAfterHours)
+                    && StringUtil.isBlank(brainInjuryComaAfterMins)
             ) {
                 status.set("-1");
             }

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

@@ -1,10 +1,10 @@
 package com.lantone.qc.kernel.catalogue.firstpagerecord;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -18,14 +18,16 @@ import java.util.Map;
 @Component
 public class FIRP0213 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 跟任燕青确认,/ 算是填写
+         */
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String dischargeTime = firstpageStructureMap.get(Content.household_address_zipcode);
-            if(CatalogueUtil.isEmpty(dischargeTime)){
+            if(StringUtil.isBlank(dischargeTime)){
                 status.set("-1");
             }
-
         }
     }
 }

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

@@ -28,6 +28,9 @@ public class FIRP0248 extends QCCatalogue {
             boolean match = false;
 
             String fpRescueNumStr = firstpageStructureMap.get("病人抢救次数");
+            if (StringUtil.isBlank(fpRescueNumStr)) {
+                return;
+            }
             if (StringUtil.isNotBlank(fpRescueNumStr) && CatalogueUtil.numbersOnly(fpRescueNumStr)) {
                 int fpRescueNum = Integer.parseInt(fpRescueNumStr);
                 if (fpRescueNum == rescueNum) {

+ 7 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0273.java

@@ -1,6 +1,7 @@
 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;
@@ -18,11 +19,17 @@ import java.util.Map;
 @Component
 public class FIRP0273 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 跟任燕青确认如果天数是“-”,则不报错
+         */
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String infantAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
             String infantAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
+            if (CatalogueUtil.isSpecialChar(infantAgeMonths)) {
+                return ;
+            }
             if (StringUtil.isNotBlank(infantAgeMonths) && Integer.parseInt(infantAgeMonths) > 0) {
                 status.set("-1");
             }

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

@@ -1,10 +1,10 @@
 package com.lantone.qc.kernel.catalogue.firstpagerecord;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -24,8 +24,13 @@ public class FIRP02904 extends QCCatalogue {
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            String name = firstpageStructureMap.get(Content.allergyDrug);
-            if (!CatalogueUtil.isEmpty(name)) {
+            String drugAllergy = firstpageStructureMap.get(Content.drugAllergy);
+            if (StringUtil.isBlank(drugAllergy) || "无".equals(drugAllergy)) {
+                status.set("0");
+                return;
+            }
+            String allergicDrugs = firstpageStructureMap.get(Content.allergyDrug);
+            if (StringUtil.isNotEmpty(allergicDrugs)) {
                 status.set("0");
             }
         }

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

@@ -24,16 +24,19 @@ public class FIRP02992 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getBeHospitalizedDoc() != null) {
             Map<String, String> fpStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            String fpDrugAllergy = fpStructureMap.get(Content.drugAllergy);
-            fpDrugAllergy = StringUtil.isBlank(fpDrugAllergy) ? "" : fpDrugAllergy;
+            if (StringUtil.isBlank(fpStructureMap.get(Content.drugAllergy))) {
+                return;
+            }
+            String fpAllergyDrug = fpStructureMap.get(Content.allergyDrug);
+            fpAllergyDrug = StringUtil.isBlank(fpAllergyDrug) ? "" : fpAllergyDrug;
 
             Map<String, String> beStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
             String beDrugAllergy = beStructureMap.get("过敏史");
             beDrugAllergy = StringUtil.isBlank(beDrugAllergy) ? "" : beDrugAllergy;
 
-            if (!fpDrugAllergy.equals(beDrugAllergy)) {
+            if (!fpAllergyDrug.equals(beDrugAllergy)) {
                 String regx = ";|;|,|,|、| ";
-                List<String> fpList = Lists.newArrayList(fpDrugAllergy.split(regx));
+                List<String> fpList = Lists.newArrayList(fpAllergyDrug.split(regx));
                 List<String> beList = Lists.newArrayList(beDrugAllergy.split(regx));
                 if (!ListUtil.equals(fpList, beList)) {
                     status.set("-1");

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

@@ -28,7 +28,7 @@ public class FIRP0520 extends QCCatalogue {
             Map<String, String> structureMap_fpr = firstPageRecordDoc.getStructureMap();
             String bhPhone = structureMap_bh.get("电话");
             String fprPhone = structureMap_fpr.get(Content.current_address_phone);
-            if (StringUtil.isBlank(bhPhone) || StringUtil.isBlank(fprPhone)) {
+            if (StringUtil.isBlank(bhPhone) || StringUtil.isBlank(fprPhone) || fprPhone.equals("-")) {
                 return;
             }
             if (!bhPhone.equals(fprPhone)) {

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

@@ -1,12 +1,17 @@
 package com.lantone.qc.kernel.catalogue.leavehospital;
 
+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.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
 import com.lantone.qc.pub.model.entity.Diag;
 import com.lantone.qc.pub.model.label.DiagLabel;
 import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -20,6 +25,8 @@ import java.util.List;
  */
 @Component
 public class LEA0146 extends QCCatalogue {
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         if (inputInfo.getBeHospitalizedDoc() != null && inputInfo.getLeaveHospitalDoc() != null) {
@@ -46,7 +53,28 @@ public class LEA0146 extends QCCatalogue {
                 putDiagToList(beHospitalizedDoc.getSuppleDiagLabel().getDiags(), beHospitalDiag); //其他诊断
             }
 
-            if (!leaveDiags.containsAll(beHospitalDiag)) {
+            String infoStr = "";
+            int matchSum = 0;
+            ModelAI modelAI = new ModelAI();
+            for (String beDiag : beHospitalDiag) {
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(beDiag, leaveDiags, false
+                        , "diagnose", chiefPresentSimilarityServiceClient);
+                if (jsonArray.size() == 2) {
+                    /* 相似度最高诊断 */
+                    String symptom = jsonArray.getString(0);
+                    /* 相似度分数 */
+                    double likeRate = jsonArray.getDoubleValue(1);
+                    if (likeRate > 0.85) {
+                        matchSum++;
+                    } else {
+                        infoStr = CatalogueUtil.concatInfo(infoStr, beDiag);
+                    }
+                } else {
+                    infoStr = CatalogueUtil.concatInfo(infoStr, beDiag);
+                }
+            }
+            info.set(infoStr);
+            if (matchSum != beHospitalDiag.size()) {
                 status.set("-1");
             }
         }
@@ -54,7 +82,7 @@ public class LEA0146 extends QCCatalogue {
 
     private void putDiagToList(List<Diag> diagList, List<String> beHospitalDiag) {
         for (Diag diag : diagList) {
-            beHospitalDiag.add(diag.getName());
+            beHospitalDiag.add(diag.getHospitalDiagName());
         }
     }
 }

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

@@ -27,7 +27,7 @@ public class LEA0150 extends QCCatalogue {
         if (deathRecordDoc != null) {
             status.set("0");
         } else {
-            String message = leaveHospitalDoc.getStructureMap().get("入院情况");
+            String message = leaveHospitalDoc.getStructureMap().get("主诉");
             if (StringUtil.isNotBlank(message)) {
                 status.set("0");
             }

+ 4 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA0508.java

@@ -7,6 +7,7 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
 import com.lantone.qc.pub.util.SpringContextUtil;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -43,6 +44,9 @@ public class LEA0508 extends QCCatalogue {
         }
         for (String doctorNameSplit : doctorName.split("\\s+")) {
             Map<String, String> doctor = (Map) surgeon.get(doctorNameSplit);
+            if (doctor == null || doctor.size() == 0) {
+                continue;
+            }
             String occup = doctor.get("occup");
             if (StringUtils.isNotEmpty(occup) && "1".equals(occup)) {
                 status.set("0");

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

@@ -15,13 +15,13 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * @ClassName : OPE0651
- * @Description : 术后首程未在手术结束1小时内完成
+ * @ClassName : OPE03026
+ * @Description : 术后首程未在手术结束15分钟内完成
  * @Author : 胡敬
  * @Date: 2020-03-30 17:03
  */
 @Component
-public class OPE0651 extends QCCatalogue {
+public class OPE03026 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
@@ -44,7 +44,7 @@ public class OPE0651 extends QCCatalogue {
             if (operationDate == null || date == null) {
                 continue;
             }
-            boolean compareTime = CatalogueUtil.compareTime(operationDate, date, 60L);
+            boolean compareTime = CatalogueUtil.compareTime(operationDate, date, 15L);
             if (compareTime) {
                 status.set("-1");
                 return;

+ 54 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03028.java

@@ -0,0 +1,54 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : OPE03028
+ * @Description : 术后首程未在术后1小时内完成(台州市立)
+ * @Author : 胡敬
+ * @Date: 2020-07-03 10:41
+ */
+@Component
+public class OPE03028 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (ListUtil.isEmpty(operationDocs)) {
+            return;
+        }
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+            if (operationDiscussionDoc == null) {
+                continue;
+            }
+            Map<String, String> operationDiscussionStructureMap = operationDiscussionDoc.getStructureMap();
+            String operationDateStr = operationDiscussionStructureMap.get("手术日期");
+            String dateStr = operationDiscussionStructureMap.get("记录日期");
+            if (CatalogueUtil.isEmpty(operationDateStr) || CatalogueUtil.isEmpty(dateStr)) {
+                continue;
+            }
+            Date operationDate = StringUtil.parseDateTime(operationDateStr);
+            Date date = StringUtil.parseDateTime(dateStr);
+            if (operationDate == null || date == null) {
+                continue;
+            }
+            boolean compareTime = CatalogueUtil.compareTime(operationDate, date, 60L);
+            if (compareTime) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

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

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

+ 13 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0125.java

@@ -10,6 +10,7 @@ import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -39,6 +40,18 @@ public class THR0125 extends QCCatalogue {
                 status.set("0");
                 return;
             }
+        }
+        if (inputInfo.getBeHospitalizedDoc() != null) {
+            Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            String admisTime = beHospitalStructureMap.get("入院日期");
+            if (CatalogueUtil.isEmpty(admisTime)) {
+                return;
+            }
+            //开始时间(入院时间)
+            Date beginDate = StringUtil.parseDateTime(admisTime);
+            if (beginDate == null) {
+                return;
+            }
             ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
             List<DirectorDoctorWardDoc> directorDoctorWardDocs = threeLevelWardDoc.getDirectorDoctorWardDocs();
             if (directorDoctorWardDocs.size() > 0) {
@@ -48,9 +61,6 @@ public class THR0125 extends QCCatalogue {
                     status.set("0");
                 }
             }
-        } else {
-            //没有出院小结,这条直接不报错
-            status.set("0");
         }
     }
 }

+ 13 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0126.java

@@ -46,6 +46,18 @@ public class THR0126 extends QCCatalogue {
                 status.set("0");
                 return;
             }
+        }
+        if (inputInfo.getBeHospitalizedDoc() != null) {
+            Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            String admisTime = beHospitalStructureMap.get("入院日期");
+            if (CatalogueUtil.isEmpty(admisTime)) {
+                return;
+            }
+            //开始时间(入院时间)
+            Date beginDate = StringUtil.parseDateTime(admisTime);
+            if (beginDate == null) {
+                return;
+            }
             /* 首次病程录如果是主治或者主任写的,也算主治查房 */
             FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
             if (firstCourseRecordDoc != null) {
@@ -68,16 +80,13 @@ public class THR0126 extends QCCatalogue {
                     status.set("0");
                 }
             }
-        } else {
-            //没有出院小结,这条直接不报错
-            status.set("0");
         }
     }
 
     private String getFirstCourseProfessor(FirstCourseRecordDoc firstCourseRecordDoc) {
         String professor = "";
         String doctorSign = firstCourseRecordDoc.getStructureMap().get("记录医师");
-        if (StringUtil.isBlank(doctorSign)){
+        if (StringUtil.isBlank(doctorSign)) {
             return professor;
         }
         SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");

+ 23 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02880.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.kernel.catalogue.threelevelward;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
@@ -13,6 +14,7 @@ import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName : THR0702
@@ -23,23 +25,35 @@ import java.util.List;
 @Component
 public class THR02880 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getThreeLevelWardDocs().size() == 0 || inputInfo.getFirstCourseRecordDoc() == null) {
-            status.set("0");
+            return;
         }
         List<DirectorDoctorWardDoc> directorDocs = inputInfo.getThreeLevelWardDocs().get(0).getDirectorDoctorWardDocs();
         FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
         String firstCourseDiffDiag = getDiffDiag(firstCourseRecordDoc);
         if (StringUtil.isBlank(firstCourseDiffDiag)) {
+            status.set("0");
             return;
         }
         if (directorDocs.size() == 0) {
-            status.set("0");
             return;
         }
         DirectorDoctorWardDoc firstDirectorDoc = directorDocs.get(0);
+        Map<String, String> firstAttendStructureMap = firstDirectorDoc.getStructureMap();
+        if (inputInfo.getBeHospitalizedDoc() != null) {
+            String admisDateStr = inputInfo.getBeHospitalizedDoc().getStructureMap().get("入院日期");
+            String recordDateStr = firstAttendStructureMap.get("查房日期");
+            if (CatalogueUtil.isEmpty(admisDateStr) || CatalogueUtil.isEmpty(recordDateStr)) {
+                return;
+            }
+            //如果首次查房超过72小时则不判断该条规则
+            if (CatalogueUtil.compareTime(StringUtil.parseDateTime(admisDateStr), StringUtil.parseDateTime(recordDateStr), 72 * 60L)) {
+                return;
+            }
+        }
         ThreeLevelWardLabel firstAttendLabel = firstDirectorDoc.getThreeLevelWardLabel();
         if (firstAttendLabel == null) {
-            status.set("0");
             return;
         }
         if (firstAttendLabel.getDiffDiag().size() != 0) {
@@ -49,7 +63,7 @@ public class THR02880 extends QCCatalogue {
                     continue;
                 }
                 if (firstCourseDiffDiag.equals(diffDiagName)) {
-                    status.set("0");
+                    status.set("-1");
                     return;
                 }
             }
@@ -57,9 +71,13 @@ public class THR02880 extends QCCatalogue {
         }
         if (StringUtil.isNotBlank(firstAttendLabel.getDiffDiagText())) {
             if (firstAttendLabel.getDiffDiagText().equals(firstCourseDiffDiag)) {
-                status.set("0");
+                status.set("-1");
             }
         }
+
+        if (firstAttendLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(firstAttendLabel.getDiffDiagText())){
+            status.set("0");
+        }
     }
 
     /**

+ 1 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02931.java

@@ -23,30 +23,26 @@ import java.util.Map;
 @Component
 public class THR02931 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getThreeLevelWardDocs().size() == 0 || inputInfo.getLeaveHospitalDoc() == null) {
-            status.set("0");
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
         DeathCaseDiscussDoc deathCaseDiscussDoc = inputInfo.getDeathCaseDiscussDoc();
         if (deathRecordDoc != null || deathCaseDiscussDoc != null) {
-            status.set("0");
             return;
         }
         LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
         String leaveDateStr = leaveHospitalDoc.getStructureMap().get("出院时间");
         if (StringUtil.isBlank(leaveDateStr)) {
-            status.set("0");
             return;
         }
         Date leaveDate = StringUtil.parseDateTime(leaveDateStr);
         if (leaveDate == null) {
-            status.set("0");
             return;
         }
         List<ThreeLevelWardDoc> allDoctorWradDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();
         if (allDoctorWradDocs.size() == 0) {
-            status.set("0");
             return;
         }
         int j = 0; //最后两次查房记录

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

@@ -85,7 +85,7 @@ public class THR03014 extends QCCatalogue {
             }
             List<String> resultInfos = new ArrayList<>();
             for (int j = 0; j < roundRecordEveryWeek.size(); j++) {
-                int attendNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), Content.attend);
+                int attendNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), Content.director);
                 if (attendNum == 0) {
                     //每7天无1次主治医师查房记录
                     status.set("-1");

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

@@ -38,12 +38,12 @@ public class THR03015 extends QCCatalogue {
             }
         }
 
-        boolean findIndications = false;
+        boolean findIndications = true;
         ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
         List<DirectorDoctorWardDoc> directorDoctorWardDocs = threeLevelWardDoc.getDirectorDoctorWardDocs();
         String jlDateStr, shDateStr, professor;
         for (DirectorDoctorWardDoc directorDoctorWardDoc : directorDoctorWardDocs) {
-            jlDateStr = directorDoctorWardDoc.getStructureMap().get("病历日期");
+            jlDateStr = directorDoctorWardDoc.getStructureMap().get("记录时间");
             shDateStr = directorDoctorWardDoc.getStructureMap().get("审核日期");
             professor = getProfessor(directorDoctorWardDoc.getStructureMap().get("审核人"));
             if (StringUtil.isBlank(professor)

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

@@ -63,7 +63,7 @@ public class THR03016 extends QCCatalogue {
             int hoursPerWeek = 3 * 24 * 60;
             String roundRecordThisWeek = "";
             List<String> roundRecordEveryWeek = new ArrayList<>();
-            beginDate = DateUtil.dateZeroClear(beginDate);//从入院记录当天0点开始算
+            beginDate = DateUtil.dateZeroClear(DateUtil.addDate(beginDate, 1));//从入院时间第二天0点开始算
             int i = 1;
             String lastWardDateRange = "";
             List<String> lastWardDateRangeList = new ArrayList<>();
@@ -153,5 +153,5 @@ public class THR03016 extends QCCatalogue {
         }
         return "";
     }
-    
+
 }

+ 3 - 24
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03017.java

@@ -1,14 +1,11 @@
 package com.lantone.qc.kernel.catalogue.threelevelward;
 
-import com.lantone.qc.dbanaly.util.KernelConstants;
-import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
 import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
-import com.lantone.qc.pub.util.SpringContextUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
@@ -38,16 +35,14 @@ public class THR03017 extends QCCatalogue {
             }
         }
 
-        boolean findIndications = false;
+        boolean findIndications = true;
         ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
         List<AttendingDoctorWardDoc> attendingDoctorWardDocs = threeLevelWardDoc.getAttendingDoctorWardDocs();
         String jlDateStr, shDateStr, professor;
         for (AttendingDoctorWardDoc attendingDoctorWardDoc : attendingDoctorWardDocs) {
-            jlDateStr = attendingDoctorWardDoc.getStructureMap().get("病历日期");
+            jlDateStr = attendingDoctorWardDoc.getStructureMap().get("记录时间");
             shDateStr = attendingDoctorWardDoc.getStructureMap().get("审核日期");
-            professor = getProfessor(attendingDoctorWardDoc.getStructureMap().get("审核人"));
-            if (StringUtil.isBlank(professor)
-                    || !professor.contains("主治")
+            if (!CatalogueUtil.isOccup(attendingDoctorWardDoc.getStructureMap().get("审核人"))
                     || CatalogueUtil.compareTime(StringUtil.parseDateTime(jlDateStr), StringUtil.parseDateTime(shDateStr), 48 * 60L)) {
                 findIndications = false;
                 break;
@@ -58,20 +53,4 @@ public class THR03017 extends QCCatalogue {
         }
     }
 
-    private String getProfessor(String doctorSign) {
-        String professor = "";
-        if (StringUtil.isBlank(doctorSign)) {
-            return professor;
-        }
-        SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
-        Map<String, Map<String, String>> surgeon = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP);
-        if (surgeon != null) {
-            Map<String, String> doctor = (Map) surgeon.get(doctorSign);
-            if (doctor != null) {
-                professor = doctor.get("professor");
-            }
-        }
-        return professor;
-    }
-
 }

+ 5 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03020.java

@@ -6,7 +6,7 @@ import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
-import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
+import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
@@ -40,10 +40,10 @@ public class THR03020 extends QCCatalogue {
                 return;
             }
             ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
-            List<AttendingDoctorWardDoc> attendingDoctorWardDocs = threeLevelWardDoc.getAttendingDoctorWardDocs();
-            if (attendingDoctorWardDocs.size() > 0) {
-                AttendingDoctorWardDoc firstAttending = attendingDoctorWardDocs.get(0);
-                String wardDateStr = firstAttending.getStructureMap().get("查房日期");
+            List<DirectorDoctorWardDoc> directorDoctorWardDocs = threeLevelWardDoc.getDirectorDoctorWardDocs();
+            if (directorDoctorWardDocs.size() > 0) {
+                DirectorDoctorWardDoc firstDirectorg = directorDoctorWardDocs.get(0);
+                String wardDateStr = firstDirectorg.getStructureMap().get("查房日期");
                 if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), StringUtil.parseDateTime(wardDateStr), 72 * 60L)) {
                     status.set("0");
                 }

+ 24 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0701.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.kernel.catalogue.threelevelward;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
@@ -12,6 +13,7 @@ import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName : THR0701
@@ -22,23 +24,35 @@ import java.util.List;
 @Component
 public class THR0701 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getThreeLevelWardDocs().size() == 0 || inputInfo.getFirstCourseRecordDoc() == null) {
-            status.set("0");
+            return;
         }
         List<AttendingDoctorWardDoc> attendDocs = inputInfo.getThreeLevelWardDocs().get(0).getAttendingDoctorWardDocs();
         FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
         String firstCourseDiffDiag = getDiffDiag(firstCourseRecordDoc);
         if (StringUtil.isBlank(firstCourseDiffDiag)) {
+            status.set("0");
             return;
         }
         if (attendDocs.size() == 0) {
-            status.set("0");
             return;
         }
         AttendingDoctorWardDoc firstAttendDoc = attendDocs.get(0);
+        Map<String, String> firstAttendStructureMap = firstAttendDoc.getStructureMap();
+        if (inputInfo.getBeHospitalizedDoc() != null) {
+            String admisDateStr = inputInfo.getBeHospitalizedDoc().getStructureMap().get("入院日期");
+            String recordDateStr = firstAttendStructureMap.get("查房日期");
+            if (CatalogueUtil.isEmpty(admisDateStr) || CatalogueUtil.isEmpty(recordDateStr)) {
+                return;
+            }
+            //如果首次查房超过48小时则不判断该条规则
+            if (CatalogueUtil.compareTime(StringUtil.parseDateTime(admisDateStr), StringUtil.parseDateTime(recordDateStr), 48 * 60L)) {
+                return;
+            }
+        }
         ThreeLevelWardLabel firstAttendLabel = firstAttendDoc.getThreeLevelWardLabel();
         if (firstAttendLabel == null) {
-            status.set("0");
             return;
         }
         if (firstAttendLabel.getDiffDiag().size() != 0) {
@@ -47,18 +61,21 @@ public class THR0701 extends QCCatalogue {
                 if (StringUtil.isBlank(diffDiagName)) {
                     continue;
                 }
-                if (firstCourseDiffDiag.equals(diffDiagName)) {
-                    status.set("0");
+                if (firstCourseDiffDiag.contains(diffDiagName)) {
+                    status.set("-1");
                     return;
                 }
             }
-
         }
         if (StringUtil.isNotBlank(firstAttendLabel.getDiffDiagText())) {
             if (firstAttendLabel.getDiffDiagText().equals(firstCourseDiffDiag)) {
-                status.set("0");
+                status.set("-1");
             }
         }
+
+        if (firstAttendLabel.getDiffDiag().size() == 0 && StringUtil.isBlank(firstAttendLabel.getDiffDiagText())){
+            status.set("0");
+        }
     }
 
     /**

+ 62 - 1
kernel/src/main/java/com/lantone/qc/kernel/util/CatalogueUtil.java

@@ -14,6 +14,7 @@ import com.lantone.qc.pub.util.SpringContextUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
 
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -449,7 +450,7 @@ public class CatalogueUtil {
                 Date operatorEndDate = StringUtil.parseDateTime(operatorEndDateStr);
                 if (operatorEndDate != null) {
                     long timeDifference = timeDifference(operatorEndDate, recordDate);
-                    if (timeDifference == 0){
+                    if (timeDifference == 0) {
                         continue;
                     }
                     if (timeDiff == 0 || timeDiff > timeDifference) {
@@ -478,6 +479,7 @@ public class CatalogueUtil {
 
     /**
      * 拼接info信息
+     *
      * @param infoStr
      * @param content
      * @return
@@ -492,4 +494,63 @@ public class CatalogueUtil {
         }
         return infoStr;
     }
+
+    /**
+     * 判断是否是特殊字符:“-”,“/”,"\"
+     *
+     * @param str
+     * @return
+     */
+    public static Boolean isSpecialChar(String str) {
+        if (("-").equals(str) || ("\\").equals(str) || ("/").equals(str)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 获取医生职称 主治  主任......
+     *
+     * @param doctorSign
+     * @return
+     */
+    public static String getProfessor(String doctorSign) {
+        String professor = "";
+        if (StringUtil.isBlank(doctorSign)) {
+            return professor;
+        }
+        SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
+        Map<String, Map<String, String>> surgeon = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP);
+        if (surgeon != null) {
+            Map<String, String> doctor = (Map) surgeon.get(doctorSign);
+            if (doctor != null) {
+                professor = doctor.get("professor");
+            }
+        }
+        return professor;
+    }
+
+    /**
+     * 判断医生是否是执业医师
+     *
+     * @param doctorSign
+     * @return
+     */
+    public static boolean isOccup(String doctorSign) {
+        if (StringUtil.isNotBlank(doctorSign)) {
+            SpecialStorageUtil specialStorageUtil = SpringContextUtil.getBean("specialStorageUtil");
+            Map<String, Map<String, String>> surgeon = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP);
+            if (surgeon != null) {
+                Map<String, String> doctor = (Map) surgeon.get(doctorSign);
+                if (doctor != null) {
+                    String occup = doctor.get("occup");
+                    if (StringUtils.isNotEmpty(occup) && "1".equals(occup)) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
 }

+ 3 - 3
kernel/src/main/resources/application.yml

@@ -18,13 +18,13 @@ qc:
   hospital_id: 1,2,3
 
 CRF:
-  url: http://192.168.3.150:3456/api/mr_info_ex/entity_predict
+  url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict
 
 Similarity:
-  url: http://192.168.3.150:3456/api/mr_info_ex/similarity
+  url: http://192.168.2.234:3456/api/mr_info_ex/similarity
 
 ChiefPresentSimilarity:
-  url: http://192.168.3.150:3456/api/mr_info_ex/chief_present_similarity
+  url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity
 
 logging:          # 日志
   config: classpath:logback-spring.xml

+ 141 - 77
kernel/src/main/resources/cache/2/concept_clinic_bodypart_properties.dict

@@ -1,84 +1,148 @@
-sjwPlFuzwYtdGy/Xru8l0w==
-sjwPlFuzwYuOwjk+wlafMb496h/s94Lp
-GaEOqMDeIR/A3JPjaU/OYQ==
-KUZ84E/l6BtIxYdpVp2d2udw4JKVz6fxOAPHyqzXUMY=
-ClvKDL868eyBa0I3oBBXTiLG5UIUjigm
-cpVuhYfN0VLL15lmAanTHLudBba0KZdGSmARnfpRl/s=
-tgLfZiBNXVfe46uqWooJfQ==
-+elokrz+5ZZ4nftSAgjXeP9VC/9mRBPm
-u18AKL/dfo8=
+pnIIwZAPIIPBAIkf/X0ufw==
+ovmPnAT+BYs=
 FXYCcRyAS3o=
-1y8RNUzpzDDA3JPjaU/OYQ==
-GDAzhKkwugqOwjk+wlafMb496h/s94Lp
-vVsbjXwCHtKFIWuMj59JFg==
-S00FGSMpzFYRJHHOrCiJIw==
 LQ4RQ5c6TvEfVJH7s8MZNQ==
 KkqtLy22gBtRq6Y4vkNXyQ==
-FpNKk6eB+A78k09Y7waUfQ==
-55LO8f+DGuqsZzaaPHDG7A==
-anCWsr9KEAcfVJH7s8MZNQ==
-Ms4itbwo4woHjnX6dZF4Ew==
-eE2lKBuqkGwbZW204O8pbL496h/s94Lp
-KPTiLOQlvfcHjnX6dZF4Ew==
-EHYxrOGlbsJINCuQrfA+Qw==
-IoIoNIGjGAkfVJH7s8MZNQ==
-TkKCqeWSukdcNzQgT7Qg/y/95Ux1UGf/
-5sS2G/r6ssUfVJH7s8MZNQ==
-Fz6WuGDyOlM=
-6BJE0DCYV4PN7oAmfhVFQqHIcEkBIHl+SmARnfpRl/s=
-ClvKDL868ewfVJH7s8MZNQ==
-IoIoNIGjGAmt+3FIqYSLwA==
-qjVzhjIuUT4fVJH7s8MZNQ==
-fAvCqq32iRGYkjXG21GhdA==
-Qz54IR1t0pxhD8mu55a07QB9XVjkemQO
-VDAaAfFpalOc8iRXg5Txmg==
-v2wP8zYN7yUfVJH7s8MZNQ==
-2O+0+BuTK7hnAFNeF32DwQ==
-LRQ8TiPskP8=
-MHWWVpSYUhZp84i3DCFu/g==
-4a+BNcRWzuwuxVbFLjJEww==
-yWJqJiL6qWQskpnR2QjFRA==
-LkBZ8uh2sivD7O64F4fyYD26Q3FauFTq
-vU9OSQNfzsdHGRV53JQHXTZxIOEr6XT/
-Z0A2kuK86msFZwSJa38bOw==
-qglFhT75KVY=
-J47wTSKVIotrynAbi7Nl7g==
-PSCtbA3GBCLqcUHlnbz5ig==
-pGzYL5VYctXxzUrAtKDMFg==
-J47wTSKVIotWP8N6Zu8teQ==
-hnOhzeqPs7c=
-FpNKk6eB+A60ivUVDCQonmb0NA6xAPvZ
-6eB67p+u3VA=
+u7zlp9tdgNmRKVPbAeWYEg==
+aC5xv6h4kt5c5OTNuAf37Q==
+eJVLnFBt3h4=
+QUV0SLvhn8MkVYph1YGRZQ==
 38rBhrBd2ZA=
 WlxWJO1bvWM=
-/UTzDiOxLWpNfh/SNay22g==
-PLBt3Oha1AAOSE8k2YZYMw==
-cA6kPjEpsoKKXDwNc4sbZv9VC/9mRBPm
-ubvY7WEHsf0HjnX6dZF4Ew==
-NI9su0Z8kvY=
-z5dpaPXQysM+03JbZpPE8K74oEbqwDfN
-e7OvqkV6Qx5DhU/YuJZA4A==
-vnSKQ0o1HZO5fhcvExqbXw==
-5j32mrEC41Q=
-teXiWF5i95089VmH6nOntT26Q3FauFTq
-C5DNXPfJ3MsXUKrj9yaJVQ==
-aBDrcQGdFjgXTO+Ia0kzAA==
-EyuDTtt1Nh1c5OTNuAf37Q==
-0NhZqdATkZ4=
+eE2lKBuqkGxc5OTNuAf37Q==
 1IKx7GtShHg=
-h/OwYNYyciw=
-kGg6y+QB2f8=
-et0S9LyTiS4MhEBuylTk2g==
-goFZ0v8zcPc=
 cA6kPjEpsoJc5OTNuAf37Q==
-BZNVMNz30Z00iPLsFnfW9Q==
-FUNtEl6WjOUfVJH7s8MZNQ==
-1boew8BvzsDzIpTnzy5Qnw==
-/CIzubCbNzzkzFf+CBlT64JiFWxfW6DV
-teXiWF5i953EeSAoaVSW+wBBqlZ1ciHqSmARnfpRl/s=
-CTNjqF5g7EIfVJH7s8MZNQ==
-OOQuqjL/h5M16D9aZjbrRw==
-ZfWBQ/To1p1p84i3DCFu/g==
-Q449MTqnm/c=
-xmHl5DY7FyM=
-hV3gMCbT8x+fXEA0j/uq7Q==
+Dp+xJKT1n8g=
+LAphuzvX0+1zUunA7M09Hw==
+wGKkm1Axrl8=
+KkqtLy22gBtRq6Y4vkNXyQ==
+sPonp8kD0PlDfsMr80o2tQ==
+Dp+xJKT1n8g=
+ZCI0+I1MKLGoU+yPtmhbJw==
+DOXrtCrKcXSFIWuMj59JFg==
+01OrraAAmcE=
+MfpZ5926ns4HjnX6dZF4Ew==
+eJVLnFBt3h4=
+MCVPu99GbLxp84i3DCFu/g==
+2Hhy8O0hODI=
+5r1+UeeRdz0fVJH7s8MZNQ==
+Q2fNzojA4fA=
+vW3dTpk0tFiQiw2jWjwfPA==
+MNTZtG8f9LQ=
+ogVQVbsCHOI=
+Ce2UXUa+3KsfVJH7s8MZNQ==
+wmRvRyr6N5yg1rmFJe9Z2g==
+V7VA3KYNqxQ=
+aC5xv6h4kt5c5OTNuAf37Q==
+Z0C+uRrbTghAxhoGdRmsYg==
+Rpy4rqBnq0xXxvYNaFTw2Q==
+I7vcOPzkQOo=
+MAJlaU83a4ioU+yPtmhbJw==
+uUfXVwqAQBs=
+TvEGDdLx11J/ufBPhFj0Ww==
+dn2Qsy3GvOgfVJH7s8MZNQ==
++ojTIp5v4bQHjnX6dZF4Ew==
+c06lMwdsMGY=
+zfymW7X/poA=
+hj3oPwd2A8wfVJH7s8MZNQ==
+6F5GQVOYgyui7/G0BOLWvmb0NA6xAPvZ
+eh0gnqWcoodAxhoGdRmsYg==
+HBi62z4VqkA=
+eOtp99ION5B/ufBPhFj0Ww==
+PQlTF2j6ne2bIZQhpl3bRg==
+W5f3x2qRae4=
+0dseB0FG4fk=
+9Oafm8Bskj0=
+z3AdaerZRVwfVJH7s8MZNQ==
+zdISnbEr02KedPJCHzSuhw==
+8wtXCXbnt2cfVJH7s8MZNQ==
+DvDTv3eRhQxM/KLa6uVUSQ==
+hK5uiQNYMutrynAbi7Nl7g==
+93ZjDiJwkDEcuBfsuGV26Q==
+H6hvNux0DMVfB2OTCSmksg==
+oapSrFpo1xzKZlVMzaya/w==
+cA6kPjEpsoJc5OTNuAf37Q==
+zK3IJj4OCNK63Wt9pi+oDw==
+eE2lKBuqkGxc5OTNuAf37Q==
+He8DX2NE4io=
+xrxCCtiW1kQ=
+1IKx7GtShHg=
+WlxWJO1bvWM=
+JB2E9WXZ5MgUCMxgY7oByw==
+enu6avlk5YoG1YmqGz3h9g==
+XvltMqvZ0rG4vnEZ8kLHbg==
+LQ4RQ5c6TvEfVJH7s8MZNQ==
+3IQA5HUrujc=
+13MHrUqG1pcfVJH7s8MZNQ==
+qDJCWQ+e+n6edPJCHzSuhw==
+xDC1Ti9ss3U=
+ovmPnAT+BYs=
+GgfSGissd7DNjYGroWncAQ==
+oujtg2YhATc=
+2IQUTK7lEyM=
+8iRAY6UGp0YVY3fFFOFg2g==
+Hif1tO4NCkk=
+pnIIwZAPIIPBAIkf/X0ufw==
+JJw0vZQlXuxp84i3DCFu/g==
+aGH61MJKMS7BAIkf/X0ufw==
+mA0dp7Zpk/MfVJH7s8MZNQ==
+el7aO7TjFOkHjnX6dZF4Ew==
+u7zlp9tdgNmRKVPbAeWYEg==
+9zqzljbiYu8=
+6kIlhnYnjOC/WZ1+qt48kw==
+bYP4eZXu1JMfVJH7s8MZNQ==
+38rBhrBd2ZA=
+/i2W9Ldeb+I=
+CMHCsSygook=
+J1XqrY7xMtY=
+oStcY3ItFdZp84i3DCFu/g==
+idBQS4aIrNa5fhcvExqbXw==
+DwvME4SMq1+bOR+EdoRoFg==
+tr3mC/s6c9sVY3fFFOFg2g==
+H45LTbfORk8=
+H8iHeeS1rXY=
+MOuKy1wkq4b7Dji9AZqQog==
+De0vhPcQSMBYGLQ8FmimcA==
+3BvyzjY734Zp84i3DCFu/g==
+HM89DEXwIpZbnoRDJ143bg==
+rz3JZr31IyPYt42Urg1Jzw==
+syl6GnJDiUoHjnX6dZF4Ew==
+aD5eU1o4MmM+03JbZpPE8K74oEbqwDfN
+OgJkiiRLMa0fVJH7s8MZNQ==
+36HIq5sBqNHNjYGroWncAQ==
+PTX9F+XFiHM=
+FXYCcRyAS3o=
+QqPqll5V3q+ken3TgiVM7Q==
+MgaLJr/9B1a4ACWlx8X4SA==
+SUTiIJK8tCefXEA0j/uq7Q==
+PV15+/MoQVT69Mxpvjn8ew==
++37KuiO62gI=
+OxBAAUKmMB00iPLsFnfW9Q==
+TkKCqeWSukfkqT33kNdg7XtqtAiTi3CE
++XIIOz+kxpCUAfTSDenAAg==
+noFHr1hkTNjL15F1MBXHSA==
+Az2U7M6QU8cHjnX6dZF4Ew==
+ypYq0llNvxtI/qHgUfgHEQ==
+JPNNI7Mn7GkOCoFD2N6+gg==
+0sR5tvt5nTkfVJH7s8MZNQ==
+qDsVL3hjCgxefGaE90oS7A==
+CCwoTxnngSQfVJH7s8MZNQ==
+imwDTINwXfjYlg1d8mP6iA==
+eXtihU+dgoH+XFxDriiYrA==
+qIWekMxNvsIfVJH7s8MZNQ==
+KZUjBH3QG1G82j8JYvRviu4snVNHMRDd
+qJUZMtAw/WiAhcQlN1BQqQ==
+lwGHWf1Es9kfVJH7s8MZNQ==
+H5rQ7wE9KYA=
+Ia0GAZyPZmQfVJH7s8MZNQ==
+QUV0SLvhn8MkVYph1YGRZQ==
+KSzY6T6+c7txOA0SFqxXjw==
+rmxr1ubN35NRq6Y4vkNXyQ==
+9ON7f+cfbFKQDSBz6+VqxQ==
+RRmtNZvkAQNdGy/Xru8l0w==
+tEpz4Ws2I3E=
+8d20YPKZX9MHjnX6dZF4Ew==
+KUKo8hZ4qfUfVJH7s8MZNQ==
+V8p/97BlQ1uBggh8N37P8g==
+6ByZH6ejZBQHjnX6dZF4Ew==
+GwjNkWrksZShsfR9iW7TiQ==

Fichier diff supprimé car celui-ci est trop grand
+ 20224 - 0
kernel/src/main/resources/cache/2/concept_diag_properties.dict


Fichier diff supprimé car celui-ci est trop grand
+ 20224 - 0
kernel/src/main/resources/cache/2/hospital_diag_info.dict


Fichier diff supprimé car celui-ci est trop grand
+ 2612 - 2612
kernel/src/main/resources/cache/2/hospital_doctor_info.dict


+ 141 - 77
kernel/src/main/resources/cache/3/concept_clinic_bodypart_properties.dict

@@ -1,84 +1,148 @@
-sjwPlFuzwYtdGy/Xru8l0w==
-sjwPlFuzwYuOwjk+wlafMb496h/s94Lp
-GaEOqMDeIR/A3JPjaU/OYQ==
-KUZ84E/l6BtIxYdpVp2d2udw4JKVz6fxOAPHyqzXUMY=
-ClvKDL868eyBa0I3oBBXTiLG5UIUjigm
-cpVuhYfN0VLL15lmAanTHLudBba0KZdGSmARnfpRl/s=
-tgLfZiBNXVfe46uqWooJfQ==
-+elokrz+5ZZ4nftSAgjXeP9VC/9mRBPm
-u18AKL/dfo8=
+pnIIwZAPIIPBAIkf/X0ufw==
+ovmPnAT+BYs=
 FXYCcRyAS3o=
-1y8RNUzpzDDA3JPjaU/OYQ==
-GDAzhKkwugqOwjk+wlafMb496h/s94Lp
-vVsbjXwCHtKFIWuMj59JFg==
-S00FGSMpzFYRJHHOrCiJIw==
 LQ4RQ5c6TvEfVJH7s8MZNQ==
 KkqtLy22gBtRq6Y4vkNXyQ==
-FpNKk6eB+A78k09Y7waUfQ==
-55LO8f+DGuqsZzaaPHDG7A==
-anCWsr9KEAcfVJH7s8MZNQ==
-Ms4itbwo4woHjnX6dZF4Ew==
-eE2lKBuqkGwbZW204O8pbL496h/s94Lp
-KPTiLOQlvfcHjnX6dZF4Ew==
-EHYxrOGlbsJINCuQrfA+Qw==
-IoIoNIGjGAkfVJH7s8MZNQ==
-TkKCqeWSukdcNzQgT7Qg/y/95Ux1UGf/
-5sS2G/r6ssUfVJH7s8MZNQ==
-Fz6WuGDyOlM=
-6BJE0DCYV4PN7oAmfhVFQqHIcEkBIHl+SmARnfpRl/s=
-ClvKDL868ewfVJH7s8MZNQ==
-IoIoNIGjGAmt+3FIqYSLwA==
-qjVzhjIuUT4fVJH7s8MZNQ==
-fAvCqq32iRGYkjXG21GhdA==
-Qz54IR1t0pxhD8mu55a07QB9XVjkemQO
-VDAaAfFpalOc8iRXg5Txmg==
-v2wP8zYN7yUfVJH7s8MZNQ==
-2O+0+BuTK7hnAFNeF32DwQ==
-LRQ8TiPskP8=
-MHWWVpSYUhZp84i3DCFu/g==
-4a+BNcRWzuwuxVbFLjJEww==
-yWJqJiL6qWQskpnR2QjFRA==
-LkBZ8uh2sivD7O64F4fyYD26Q3FauFTq
-vU9OSQNfzsdHGRV53JQHXTZxIOEr6XT/
-Z0A2kuK86msFZwSJa38bOw==
-qglFhT75KVY=
-J47wTSKVIotrynAbi7Nl7g==
-PSCtbA3GBCLqcUHlnbz5ig==
-pGzYL5VYctXxzUrAtKDMFg==
-J47wTSKVIotWP8N6Zu8teQ==
-hnOhzeqPs7c=
-FpNKk6eB+A60ivUVDCQonmb0NA6xAPvZ
-6eB67p+u3VA=
+u7zlp9tdgNmRKVPbAeWYEg==
+aC5xv6h4kt5c5OTNuAf37Q==
+eJVLnFBt3h4=
+QUV0SLvhn8MkVYph1YGRZQ==
 38rBhrBd2ZA=
 WlxWJO1bvWM=
-/UTzDiOxLWpNfh/SNay22g==
-PLBt3Oha1AAOSE8k2YZYMw==
-cA6kPjEpsoKKXDwNc4sbZv9VC/9mRBPm
-ubvY7WEHsf0HjnX6dZF4Ew==
-NI9su0Z8kvY=
-z5dpaPXQysM+03JbZpPE8K74oEbqwDfN
-e7OvqkV6Qx5DhU/YuJZA4A==
-vnSKQ0o1HZO5fhcvExqbXw==
-5j32mrEC41Q=
-teXiWF5i95089VmH6nOntT26Q3FauFTq
-C5DNXPfJ3MsXUKrj9yaJVQ==
-aBDrcQGdFjgXTO+Ia0kzAA==
-EyuDTtt1Nh1c5OTNuAf37Q==
-0NhZqdATkZ4=
+eE2lKBuqkGxc5OTNuAf37Q==
 1IKx7GtShHg=
-h/OwYNYyciw=
-kGg6y+QB2f8=
-et0S9LyTiS4MhEBuylTk2g==
-goFZ0v8zcPc=
 cA6kPjEpsoJc5OTNuAf37Q==
-BZNVMNz30Z00iPLsFnfW9Q==
-FUNtEl6WjOUfVJH7s8MZNQ==
-1boew8BvzsDzIpTnzy5Qnw==
-/CIzubCbNzzkzFf+CBlT64JiFWxfW6DV
-teXiWF5i953EeSAoaVSW+wBBqlZ1ciHqSmARnfpRl/s=
-CTNjqF5g7EIfVJH7s8MZNQ==
-OOQuqjL/h5M16D9aZjbrRw==
-ZfWBQ/To1p1p84i3DCFu/g==
-Q449MTqnm/c=
-xmHl5DY7FyM=
-hV3gMCbT8x+fXEA0j/uq7Q==
+Dp+xJKT1n8g=
+LAphuzvX0+1zUunA7M09Hw==
+wGKkm1Axrl8=
+KkqtLy22gBtRq6Y4vkNXyQ==
+sPonp8kD0PlDfsMr80o2tQ==
+Dp+xJKT1n8g=
+ZCI0+I1MKLGoU+yPtmhbJw==
+DOXrtCrKcXSFIWuMj59JFg==
+01OrraAAmcE=
+MfpZ5926ns4HjnX6dZF4Ew==
+eJVLnFBt3h4=
+MCVPu99GbLxp84i3DCFu/g==
+2Hhy8O0hODI=
+5r1+UeeRdz0fVJH7s8MZNQ==
+Q2fNzojA4fA=
+vW3dTpk0tFiQiw2jWjwfPA==
+MNTZtG8f9LQ=
+ogVQVbsCHOI=
+Ce2UXUa+3KsfVJH7s8MZNQ==
+wmRvRyr6N5yg1rmFJe9Z2g==
+V7VA3KYNqxQ=
+aC5xv6h4kt5c5OTNuAf37Q==
+Z0C+uRrbTghAxhoGdRmsYg==
+Rpy4rqBnq0xXxvYNaFTw2Q==
+I7vcOPzkQOo=
+MAJlaU83a4ioU+yPtmhbJw==
+uUfXVwqAQBs=
+TvEGDdLx11J/ufBPhFj0Ww==
+dn2Qsy3GvOgfVJH7s8MZNQ==
++ojTIp5v4bQHjnX6dZF4Ew==
+c06lMwdsMGY=
+zfymW7X/poA=
+hj3oPwd2A8wfVJH7s8MZNQ==
+6F5GQVOYgyui7/G0BOLWvmb0NA6xAPvZ
+eh0gnqWcoodAxhoGdRmsYg==
+HBi62z4VqkA=
+eOtp99ION5B/ufBPhFj0Ww==
+PQlTF2j6ne2bIZQhpl3bRg==
+W5f3x2qRae4=
+0dseB0FG4fk=
+9Oafm8Bskj0=
+z3AdaerZRVwfVJH7s8MZNQ==
+zdISnbEr02KedPJCHzSuhw==
+8wtXCXbnt2cfVJH7s8MZNQ==
+DvDTv3eRhQxM/KLa6uVUSQ==
+hK5uiQNYMutrynAbi7Nl7g==
+93ZjDiJwkDEcuBfsuGV26Q==
+H6hvNux0DMVfB2OTCSmksg==
+oapSrFpo1xzKZlVMzaya/w==
+cA6kPjEpsoJc5OTNuAf37Q==
+zK3IJj4OCNK63Wt9pi+oDw==
+eE2lKBuqkGxc5OTNuAf37Q==
+He8DX2NE4io=
+xrxCCtiW1kQ=
+1IKx7GtShHg=
+WlxWJO1bvWM=
+JB2E9WXZ5MgUCMxgY7oByw==
+enu6avlk5YoG1YmqGz3h9g==
+XvltMqvZ0rG4vnEZ8kLHbg==
+LQ4RQ5c6TvEfVJH7s8MZNQ==
+3IQA5HUrujc=
+13MHrUqG1pcfVJH7s8MZNQ==
+qDJCWQ+e+n6edPJCHzSuhw==
+xDC1Ti9ss3U=
+ovmPnAT+BYs=
+GgfSGissd7DNjYGroWncAQ==
+oujtg2YhATc=
+2IQUTK7lEyM=
+8iRAY6UGp0YVY3fFFOFg2g==
+Hif1tO4NCkk=
+pnIIwZAPIIPBAIkf/X0ufw==
+JJw0vZQlXuxp84i3DCFu/g==
+aGH61MJKMS7BAIkf/X0ufw==
+mA0dp7Zpk/MfVJH7s8MZNQ==
+el7aO7TjFOkHjnX6dZF4Ew==
+u7zlp9tdgNmRKVPbAeWYEg==
+9zqzljbiYu8=
+6kIlhnYnjOC/WZ1+qt48kw==
+bYP4eZXu1JMfVJH7s8MZNQ==
+38rBhrBd2ZA=
+/i2W9Ldeb+I=
+CMHCsSygook=
+J1XqrY7xMtY=
+oStcY3ItFdZp84i3DCFu/g==
+idBQS4aIrNa5fhcvExqbXw==
+DwvME4SMq1+bOR+EdoRoFg==
+tr3mC/s6c9sVY3fFFOFg2g==
+H45LTbfORk8=
+H8iHeeS1rXY=
+MOuKy1wkq4b7Dji9AZqQog==
+De0vhPcQSMBYGLQ8FmimcA==
+3BvyzjY734Zp84i3DCFu/g==
+HM89DEXwIpZbnoRDJ143bg==
+rz3JZr31IyPYt42Urg1Jzw==
+syl6GnJDiUoHjnX6dZF4Ew==
+aD5eU1o4MmM+03JbZpPE8K74oEbqwDfN
+OgJkiiRLMa0fVJH7s8MZNQ==
+36HIq5sBqNHNjYGroWncAQ==
+PTX9F+XFiHM=
+FXYCcRyAS3o=
+QqPqll5V3q+ken3TgiVM7Q==
+MgaLJr/9B1a4ACWlx8X4SA==
+SUTiIJK8tCefXEA0j/uq7Q==
+PV15+/MoQVT69Mxpvjn8ew==
++37KuiO62gI=
+OxBAAUKmMB00iPLsFnfW9Q==
+TkKCqeWSukfkqT33kNdg7XtqtAiTi3CE
++XIIOz+kxpCUAfTSDenAAg==
+noFHr1hkTNjL15F1MBXHSA==
+Az2U7M6QU8cHjnX6dZF4Ew==
+ypYq0llNvxtI/qHgUfgHEQ==
+JPNNI7Mn7GkOCoFD2N6+gg==
+0sR5tvt5nTkfVJH7s8MZNQ==
+qDsVL3hjCgxefGaE90oS7A==
+CCwoTxnngSQfVJH7s8MZNQ==
+imwDTINwXfjYlg1d8mP6iA==
+eXtihU+dgoH+XFxDriiYrA==
+qIWekMxNvsIfVJH7s8MZNQ==
+KZUjBH3QG1G82j8JYvRviu4snVNHMRDd
+qJUZMtAw/WiAhcQlN1BQqQ==
+lwGHWf1Es9kfVJH7s8MZNQ==
+H5rQ7wE9KYA=
+Ia0GAZyPZmQfVJH7s8MZNQ==
+QUV0SLvhn8MkVYph1YGRZQ==
+KSzY6T6+c7txOA0SFqxXjw==
+rmxr1ubN35NRq6Y4vkNXyQ==
+9ON7f+cfbFKQDSBz6+VqxQ==
+RRmtNZvkAQNdGy/Xru8l0w==
+tEpz4Ws2I3E=
+8d20YPKZX9MHjnX6dZF4Ew==
+KUKo8hZ4qfUfVJH7s8MZNQ==
+V8p/97BlQ1uBggh8N37P8g==
+6ByZH6ejZBQHjnX6dZF4Ew==
+GwjNkWrksZShsfR9iW7TiQ==

+ 5 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfBeHospitalizedDocTrans.java

@@ -17,6 +17,7 @@ import com.lantone.qc.pub.model.label.VitalLabelSpecial;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import com.lantone.qc.trans.shaoyf.util.ShaoyfOrdinaryAssistant;
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.List;
@@ -48,6 +49,10 @@ public class ShaoyfBeHospitalizedDocTrans extends ModelDocTrans {
             structureMap.put("入院时间", structureMap.get("入病房时间"));
         }
 
+        structureMap.put("签名", structureMap.get("医师签名"));
+        ShaoyfOrdinaryAssistant.techTitleDocRemove(structureMap, "签名");
+        ShaoyfOrdinaryAssistant.techTitleDocRemove(structureMap, "审核人");
+
         BeHospitalizedDoc beHospitalizedDoc = beHospitalizedDocGen(structureMap); // 不走共用
         beHospitalizedDoc.setPageData((Map) structureMap);
         return beHospitalizedDoc;

+ 4 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfLeaveHospitalDocTrans.java

@@ -6,6 +6,7 @@ import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import com.lantone.qc.trans.shaoyf.util.ShaoyfOrdinaryAssistant;
 
 import java.util.List;
 import java.util.Map;
@@ -26,6 +27,9 @@ public class ShaoyfLeaveHospitalDocTrans extends ModelDocTrans {
         sourceMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
         sourceMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
         Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+        structureMap.put("入院情况", structureMap.get("入院病情"));
+        structureMap.put("出院时间", structureMap.get("出院日期"));
+        ShaoyfOrdinaryAssistant.techTitleDocRemove(structureMap, "医师签名");
         LeaveHospitalDoc leaveHospitalDoc = new LeaveHospitalDoc();
         leaveHospitalDoc.setStructureMap(structureMap);
         leaveHospitalDoc.setPageData((Map) structureMap);

+ 7 - 1
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfThreeLevelWardDocTrans.java

@@ -12,10 +12,12 @@ import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
 import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
 import com.lantone.qc.pub.model.doc.ward.GeneralDoctorWardDoc;
 import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.MapUtil;
 import com.lantone.qc.pub.util.SpringContextUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import com.lantone.qc.trans.shaoyf.util.ShaoyfOrdinaryAssistant;
 import lombok.Setter;
 import org.apache.commons.lang3.StringUtils;
 
@@ -79,6 +81,7 @@ public class ShaoyfThreeLevelWardDocTrans extends ModelDocTrans {
             structureMap.put("查房标题", structureMap.get("上级查房医生职称"));
         }
 
+        structureMap.put("查房标题供页面显示", structureMap.get("查房标题"));
         String title = structureMap.get("查房标题");
         if (StringUtil.isNotBlank(title)) {
             if (title.contains("Attending") || title.contains("attending")) {
@@ -90,6 +93,10 @@ public class ShaoyfThreeLevelWardDocTrans extends ModelDocTrans {
             structureMap.put("查房标题", title);
         }
 
+        MapUtil.keyAssig(structureMap, "记录时间", "病历日期");
+        ShaoyfOrdinaryAssistant.techTitleDocRemove(structureMap, "审核人");
+        ShaoyfOrdinaryAssistant.techTitleDocRemove(structureMap, "记录医师");
+
         //总的查房记录 汇总
         ThreeLevelWardDoc allDoctorWradDoc = new ThreeLevelWardDoc();
         allDoctorWradDoc.setStructureMap(structureMap);
@@ -170,7 +177,6 @@ public class ShaoyfThreeLevelWardDocTrans extends ModelDocTrans {
     }
 
     private List<String> keyContrasts = Lists.newArrayList(
-            "事件日期=记录时间",
             "事件日期=查房日期",
             "简要病情=病情记录",
             "查房记录=病情记录",

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

@@ -148,7 +148,7 @@ public class TaiZhouConsultationDocTrans extends ModelDocTrans {
             "病史描述=病史回顾描述",
             "病历日期=会诊日期及时间",
             "记录及建议=会诊意见",
-            "临床科室1=临床科室",
+            "临床科室1=申请科室",
             "申请医生1=申请医生"
     );
 

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

@@ -46,7 +46,8 @@ public class TaiZhouDifficultCaseDiscussDocTrans extends ModelDocTrans {
             "讨论小结=结 论",
             "讨论意见=讨论内容",
             "事件日期=讨论时间",
-            "本人姓名=姓名"
+            "本人姓名=姓名",
+            "参加人员及职称(护士)=参加讨论者"
     );
 
 }

+ 7 - 5
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstPageRecordDocTrans.java

@@ -43,11 +43,13 @@ public class TaiZhouFirstPageRecordDocTrans extends ModelDocTrans {
         structureExtMap.put(Content.dischargeDiag, FastJsonUtils.getJsonToBean(content.get(Content.dischargeDiag), Object.class));
 
         List<Map<String, String>> dischargeDiag = (List) structureExtMap.get(Content.dischargeDiag);
-        for (Map<String, String> diag : dischargeDiag) {
-            String diagCategory = diag.get("诊断类别");
-            if (StringUtil.isNotBlank(diagCategory) && "1".equals(diagCategory)) {
-                diag.put("诊断类别", "主要诊断");
-                break;
+        if (dischargeDiag != null && dischargeDiag.size() > 0) {
+            for (Map<String, String> diag : dischargeDiag) {
+                String diagCategory = diag.get("诊断类别");
+                if (StringUtil.isNotBlank(diagCategory) && "1".equals(diagCategory)) {
+                    diag.put("诊断类别", "主要诊断");
+                    break;
+                }
             }
         }
         //        structureExtMap.put(Content.pathologyDiagnose, FastJsonUtils.getJsonToBean(content.get(Content.pathologyDiagnose), Object.class));

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

@@ -198,6 +198,7 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
             "主刀医师=主刀医师签名",
             "术前准备=术前准备内容",
             "注意事项=术前术后注意事项",
+            "其他术前相关情况=术前术后注意事项",
             "辅助检查结果=辅助检查",
             "术中、术后防范措施=可能意外和防范措施",
             "现病史- 发病情况=发病经过",