Browse Source

Merge remote-tracking branch 'origin/hb/beilun' into hb/beilun

daiyi 3 năm trước cách đây
mục cha
commit
e03df3bb90
60 tập tin đã thay đổi với 1263 bổ sung125 xóa
  1. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0009.java
  2. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0010.java
  3. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0029.java
  4. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0058.java
  5. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0072.java
  6. 4 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0372.java
  7. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0441.java
  8. 2 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0119.java
  9. 3 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC03086.java
  10. 2 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0160.java
  11. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0161.java
  12. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0162.java
  13. 2 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0166.java
  14. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0175.java
  15. 2 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0248.java
  16. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0250.java
  17. 72 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03196.java
  18. 74 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03197.java
  19. 222 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ningbozhenhai/threelevelward/THR0127.java
  20. 2 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/behospitalized/BEH02902.java
  21. 59 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/firstpagerecord/FIRP0190.java
  22. 115 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/leavehospital/LEA0149.java
  23. 1 1
      kernel/src/main/resources/bootstrap.yml
  24. 133 0
      kernel/src/main/resources/cache/21/concept_clinic_bodypart_properties.dict
  25. 0 0
      kernel/src/main/resources/cache/21/concept_diag_properties.dict
  26. 0 0
      kernel/src/main/resources/cache/21/hospital_diag_info.dict
  27. 0 0
      kernel/src/main/resources/cache/21/hospital_doctor_info.dict
  28. 133 0
      kernel/src/main/resources/cache/22/concept_clinic_bodypart_properties.dict
  29. 0 0
      kernel/src/main/resources/cache/22/concept_diag_properties.dict
  30. 0 0
      kernel/src/main/resources/cache/22/hospital_diag_info.dict
  31. 0 0
      kernel/src/main/resources/cache/22/hospital_doctor_info.dict
  32. 133 0
      kernel/src/main/resources/cache/23/concept_clinic_bodypart_properties.dict
  33. 0 0
      kernel/src/main/resources/cache/23/concept_diag_properties.dict
  34. 0 0
      kernel/src/main/resources/cache/23/hospital_diag_info.dict
  35. 0 0
      kernel/src/main/resources/cache/23/hospital_doctor_info.dict
  36. 133 0
      kernel/src/main/resources/cache/24/concept_clinic_bodypart_properties.dict
  37. 0 0
      kernel/src/main/resources/cache/24/concept_diag_properties.dict
  38. 0 0
      kernel/src/main/resources/cache/24/hospital_diag_info.dict
  39. 0 0
      kernel/src/main/resources/cache/24/hospital_doctor_info.dict
  40. 3 3
      kernel/src/main/resources/kernel.properties
  41. 2 2
      trans/src/main/java/com/lantone/qc/trans/ningbozhenhai/util/OperationRecordHtmlAnalysis.java
  42. 6 21
      trans/src/main/java/com/lantone/qc/trans/ningbozhongyi/util/NingBoZhongYiLeaveHospitalHtmlAnalysis.java
  43. 1 0
      trans/src/main/java/com/lantone/qc/trans/shengzhouyy/ClinicalBloodDocTrans.java
  44. 0 1
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyBeHospitalizedDocTrans.java
  45. 2 1
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyConsultationDocTrans.java
  46. 2 3
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyCrisisValueReportDocTrans.java
  47. 8 1
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyCriticallyIllNoticeDocTrans.java
  48. 5 6
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyDeathCaseDiscussDocTrans.java
  49. 9 3
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyDeathRecordDocTrans.java
  50. 1 1
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyDifficultCaseDiscussDocTrans.java
  51. 4 3
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyLeaveHospitalDocTrans.java
  52. 39 21
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyOperationDocTrans.java
  53. 1 0
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyRescueDocTrans.java
  54. 1 1
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyStagesSummaryDocTrans.java
  55. 5 0
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyBeHospitalizedHtmlAnalysis.java
  56. 11 9
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyCriticallyIllNoticeHtmlAnalysis.java
  57. 7 3
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyDeathCaseDiscussHtmlAnalysis.java
  58. 10 5
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyDeathRecordHtmlAnalysis.java
  59. 3 3
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyLeaveHospitalHtmlAnalysis.java
  60. 35 22
      trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyPreoperativeHtmlAnalysis.java

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

@@ -22,7 +22,7 @@ import java.util.List;
 @Component
 public class BEH0009 extends QCCatalogue {
     private List<String> containList = Arrays.asList("检查", "术后", "药物", "发现", "误服", "确诊", "经", "异常", "诊断"
-            , "示", "超", "伤", "术", "复查", "体检", "血透", "血液透析","孕");
+            , "示", "超", "伤", "术", "复查", "体检", "血透", "血液透析","孕","农药");
 
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         if (inputInfo.getBeHospitalizedDoc() == null) {

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

@@ -21,7 +21,7 @@ import java.util.List;
 @Component
 public class BEH0010 extends QCCatalogue {
     private List<String> containList = Arrays.asList("癌", "瘤", "复诊", "术后", "化疗后", "发现", "体检", "检查", "确诊"
-            , "诊断", "复查", "复发", "示", "超", "CT", "血透", "血液透析");
+            , "诊断", "复查", "复发", "示", "超", "CT", "血透", "血液透析", "治疗后");
 
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");

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

@@ -48,7 +48,7 @@ public class BEH0029 extends QCCatalogue {
         }
         if (pastLabel != null) {
             String pastText = pastLabel.getText();
-            if (StringUtil.isNotBlank(pastText) && (pastText.contains("详见") || pastText.contains("预防接种") || pastText.contains("预防免疫接种")
+            if (StringUtil.isNotBlank(pastText) && (pastText.contains("详见") || pastText.contains("接种")|| pastText.contains("预防接种") || pastText.contains("预防免疫接种")
                     || pastText.contains("见旧病历") || pastText.contains("见既往病历"))) {
                 status.set("0");
                 return;
@@ -63,7 +63,7 @@ public class BEH0029 extends QCCatalogue {
         }
         if (personalLabel != null) {
             String personText = personalLabel.getText();
-            if (StringUtil.isNotBlank(personText) && (personText.contains("详见") || personText.contains("预防接种"))) {
+            if (StringUtil.isNotBlank(personText) && (personText.contains("详见") || personText.contains("接种")|| personText.contains("预防接种"))) {
                 status.set("0");
                 return;
             }

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

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

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

@@ -32,7 +32,7 @@ public class BEH0072 extends QCCatalogue {
             if (StringUtil.isNotBlank(familyText)) {
                 familyText = familyText.substring(0, Math.min(15, familyText.length()));
                 if (familyText.contains("死因") || familyText.contains("原因") || familyText.contains("详")
-                || familyText.contains("因") || familyText.contains("死于")) {
+                || familyText.contains("因") || familyText.contains("死于")|| familyText.contains("自然死")) {
                     return;
                 }
             }

+ 4 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0372.java

@@ -28,11 +28,12 @@ public class BEH0372 extends QCCatalogue {
         if (StringUtil.isBlank(bhbasicInfoStatus)) {
             bhbasicInfoStatus = inputInfo.getBeHospitalizedDoc().getStructureMap().get("婚姻");
         }
-        if (StringUtil.isBlank(basicInfoStatus) || basicInfoStatus.contains("详见") || StringUtil.isBlank(bhbasicInfoStatus)) {
+        if (StringUtil.isBlank(basicInfoStatus) || basicInfoStatus.contains("详见")
+                || basicInfoStatus.contains("见旧病历")|| basicInfoStatus.contains("见既往病历")|| StringUtil.isBlank(bhbasicInfoStatus)) {
             status.set("0");
             return;
         }
-
+        bhbasicInfoStatus = bhbasicInfoStatus.replace(" ", "");
         if (bhbasicInfoStatus.equals("未婚") && (basicInfoStatus.contains("未婚") || basicInfoStatus.contains("未结婚"))) {
             status.set("0");
             return;
@@ -51,7 +52,7 @@ public class BEH0372 extends QCCatalogue {
         }
 
         if ((bhbasicInfoStatus.equals("离婚") || bhbasicInfoStatus.equals("离异")) &&
-                (basicInfoStatus.contains("离异") || basicInfoStatus.equals("离婚"))) {
+                (basicInfoStatus.contains("离异") || basicInfoStatus.contains("离婚"))) {
             status.set("0");
             return;
         }

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

@@ -34,7 +34,7 @@ public class BEH0441 extends QCCatalogue {
             return;
         }
         List<String> words = Lists.newArrayList("胃纳", "食纳", "食欲", "未纳", "纳眠", "饮食", "睡眠"
-                , "禁食", "未食", "鼻饲", "饮", "未进食");
+                , "禁食", "未食", "鼻饲", "饮", "未进食", "开奶", "吃奶", "胃管");
         String presentText = presentLabel.getText();
         if (StringUtil.isNotBlank(presentText)) {
             for (String word : words) {

+ 2 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0119.java

@@ -43,6 +43,8 @@ public class DIF0119 extends QCCatalogue {
         {
             case "5":
                 return "参加人员的姓名及专业技术职务";
+            case "20":
+                return "参加人员的姓名及专业技术职务";
             default:
                 return "参加人员";
         }

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

@@ -41,7 +41,9 @@ public class FIRC03086 extends QCCatalogue {
             return;
         }
         //规则匹配增加
-        if (structureV.contains("护理") && (structureV.contains("一级") || structureV.contains("二级") || structureV.contains("三级") || structureV.contains("Ⅰ级") || structureV.contains("Ⅱ级") || structureV.contains("Ⅲ级"))) {
+        if (structureV.contains("护理") && (structureV.contains("一级") || structureV.contains("二级") || structureV.contains("三级") ||
+                structureV.contains("Ⅰ级") || structureV.contains("Ⅱ级") || structureV.contains("Ⅲ级") ||
+                structureV.contains("I级") || structureV.contains("II级") || structureV.contains("III级"))) {
             status.set("0");
             return;
         }

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

@@ -29,6 +29,8 @@ public class FIRP0160 extends QCCatalogue {
             if (StringUtil.isBlank(firstAdmissionGender) || StringUtil.isBlank(admissionGender)){
                 return;
             }
+            firstAdmissionGender = firstAdmissionGender.replace("性","");
+            admissionGender = admissionGender.replace("性","");
             if (!CatalogueUtil.compareToken(firstAdmissionGender,admissionGender)) {
                 status.set("-1");
             }

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

@@ -46,6 +46,9 @@ public class FIRP0161 extends QCCatalogue {
             if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
                 admissAge = admissionAge.substring(0, admissionAge.indexOf("岁"));
             }
+            if (StringUtil.isNotBlank(admissionAge) && !admissionAge.contains("岁")) {
+                admissAge = admissionAge;
+            }
             String firstadmissAge = "";
             if (StringUtil.isNotBlank(firstAdmissionAge) && firstAdmissionAge.contains("岁")) {
                 firstadmissAge = firstAdmissionAge.substring(0, firstAdmissionAge.indexOf("岁"));

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

@@ -19,7 +19,7 @@ import java.util.Map;
  */
 @Component
 public class FIRP0162 extends QCCatalogue {
-    private List<String> containList = Arrays.asList("-", "—", "拒", "无", "不详", "未上户口");
+    private List<String> containList = Arrays.asList("-", "—", "拒", "无", "不详", "未上户口","未提供");
 
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");

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

@@ -29,6 +29,8 @@ public class FIRP0166 extends QCCatalogue {
             if (StringUtil.isBlank(firstAdmissionMarry) || StringUtil.isBlank(admissionMarry)) {
                 return;
             }
+            firstAdmissionMarry = firstAdmissionMarry.replace("离异","离婚");
+            admissionMarry = admissionMarry.replace("离异","离婚");
             if (!CatalogueUtil.compareToken(firstAdmissionMarry, admissionMarry)) {
                 status.set("-1");
             }

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

@@ -55,6 +55,9 @@ public class FIRP0175 extends QCCatalogue {
                         if (firstpageleaveDiag.contains("伴")) {
                             firstpageleaveDiag = firstpageleaveDiag.substring(0, firstpageleaveDiag.indexOf("伴"));
                         }
+                        if(diags.contains(firstpageleaveDiag)){
+                            firstpageleaveDiag = firstpageleaveDiag.replaceAll("^[0-9]", "");
+                        }
                     }
                     break;
                 }

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

@@ -5,6 +5,8 @@ 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.RescueDoc;
+import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 

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

@@ -73,7 +73,8 @@ public class FIRP0250 extends QCCatalogue {
             // 跟医学部确认,从抢救措施中读取数据
             String key = getKeyByHospitalId();
             String qjgc = structureMap.get(key);
-            if (StringUtil.isNotBlank(qjgc) && !qjgc.contains("死亡")) {
+            String detail = structureMap.get("抢救结果");
+            if ((StringUtil.isNotBlank(qjgc) && !qjgc.contains("死亡")) ||  (StringUtil.isNotBlank(detail) && detail.equals("成功"))) {
                 i++;
             }
         }

+ 72 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03196.java

@@ -0,0 +1,72 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP03196
+ * @Description :  主要手术及操作麻醉方式未填写
+ * @Author : wsy
+ * @Date: 2022-2-9 15:51
+ */
+@Component
+public class FIRP03196 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        if (firstPageRecordDoc == null) {
+            return;
+        }
+        Map<String, Object> structureExtMap = firstPageRecordDoc.getStructureExtMap();
+        if (structureExtMap == null) {
+            return;
+        }
+        String operativeName = "";
+        String anesthesiaMode = "";
+        List<Map<String, String>> operative_information = (List<Map<String, String>>) structureExtMap.get(Content.operative_information);
+        if (operative_information == null || operative_information.size() == 0) {
+            return;
+        }
+        //手术名称
+        operativeName = operative_information.get(0).get(Content.operative_name);
+        //麻醉方式
+        anesthesiaMode = operative_information.get(0).get(Content.anesthesia_mode);
+
+        if (StringUtil.isNotBlank(anesthesiaMode)) {
+            return;
+        }
+
+        if (StringUtil.isBlank(operativeName)) {
+            return;
+        }
+
+        List<String> noMatchWords = Lists.newArrayList("其他周围血管药物洗脱支架置入","经皮降主动脉药物洗脱支架置入术","经皮周围动脉药物洗脱支架置入术",
+                "经皮周围静脉药物洗脱支架置入术","经皮尺动脉药物洗脱支架置入术","经皮腓动脉药物洗脱支架置入术","经皮肱动脉药物洗脱支架置入术","经皮桡动脉药物洗脱支架置入术",
+                "经皮上肢静脉药物洗脱支架置入术","经皮头臂静脉药物洗脱支架置入术","经皮外周动脉可降解支架置入术","锁骨下动脉药物洗脱支架置入术","股总动脉药物洗脱支架置入术",
+                "表浅股动脉药物洗脱支架置入","经皮股动脉药物洗脱支架置入术","颅外血管经皮血管成形术","经皮颈总动脉球囊扩张成形术","经皮颈静脉球囊扩张成形术","经皮颈动脉球囊扩张成形术",
+                "经皮椎动脉球囊扩张成形术","颅内血管经皮血管成形术","经皮大脑中动脉球囊扩张成形术","经皮大脑前动脉球囊扩张成形术","经皮大脑后动脉球囊扩张成形术","经皮椎动脉颅内段球囊扩张成形术",
+                "经皮颈内动脉颅内段球囊扩张成形术","经皮基底动脉球囊扩张成形术","经皮交通动脉血管球囊扩张成形术","颈动脉支架经皮置入术","经皮颈动脉远端保护装置置入术","经皮颈动脉覆膜支架置入术",
+                "经皮颈动脉药物洗脱支架置入术","脑保护伞下颈动脉支架置入术","其他颅外动脉支架经皮置入","经皮基底动脉支架置入术","经皮椎动脉支架置入术","经皮颅外动脉远端保护装置置入术",
+                "经皮椎动脉药物洗脱支架置入术","经皮椎动脉覆膜支架置入术","经皮椎动脉非药物洗脱支架置入术","颅内血管支架经皮置入","经皮颅内动脉支架置入术","经皮颅内动脉远端保护装置置入术",
+                "经皮颅内静脉窦支架置入术","经皮大脑前动脉支架置入术","经皮大脑后动脉支架置入术","经皮大脑中动脉支架置入术","经皮冠状动脉腔内血管成形术[PTCA]","经皮冠状动脉球囊扩张成形术",
+                "经皮冠状动脉药物球囊扩张成形术");
+
+        for (String noMatchWord : noMatchWords) {
+            if (operativeName.contains(noMatchWord) && StringUtil.isBlank(anesthesiaMode)) {
+                status.set("-1");
+                info.set(noMatchWord);
+                return;
+            }
+        }
+    }
+}

+ 74 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03197.java

@@ -0,0 +1,74 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP03197
+ * @Description :  其他手术及操作麻醉方式未填写
+ * @Author : wsy
+ * @Date: 2022-2-9 15:51
+ */
+@Component
+public class FIRP03197 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<String> noMatchWords = Lists.newArrayList("其他周围血管药物洗脱支架置入","经皮降主动脉药物洗脱支架置入术","经皮周围动脉药物洗脱支架置入术",
+                "经皮周围静脉药物洗脱支架置入术","经皮尺动脉药物洗脱支架置入术","经皮腓动脉药物洗脱支架置入术","经皮肱动脉药物洗脱支架置入术","经皮桡动脉药物洗脱支架置入术",
+                "经皮上肢静脉药物洗脱支架置入术","经皮头臂静脉药物洗脱支架置入术","经皮外周动脉可降解支架置入术","锁骨下动脉药物洗脱支架置入术","股总动脉药物洗脱支架置入术",
+                "表浅股动脉药物洗脱支架置入","经皮股动脉药物洗脱支架置入术","颅外血管经皮血管成形术","经皮颈总动脉球囊扩张成形术","经皮颈静脉球囊扩张成形术","经皮颈动脉球囊扩张成形术",
+                "经皮椎动脉球囊扩张成形术","颅内血管经皮血管成形术","经皮大脑中动脉球囊扩张成形术","经皮大脑前动脉球囊扩张成形术","经皮大脑后动脉球囊扩张成形术","经皮椎动脉颅内段球囊扩张成形术",
+                "经皮颈内动脉颅内段球囊扩张成形术","经皮基底动脉球囊扩张成形术","经皮交通动脉血管球囊扩张成形术","颈动脉支架经皮置入术","经皮颈动脉远端保护装置置入术","经皮颈动脉覆膜支架置入术",
+                "经皮颈动脉药物洗脱支架置入术","脑保护伞下颈动脉支架置入术","其他颅外动脉支架经皮置入","经皮基底动脉支架置入术","经皮椎动脉支架置入术","经皮颅外动脉远端保护装置置入术",
+                "经皮椎动脉药物洗脱支架置入术","经皮椎动脉覆膜支架置入术","经皮椎动脉非药物洗脱支架置入术","颅内血管支架经皮置入","经皮颅内动脉支架置入术","经皮颅内动脉远端保护装置置入术",
+                "经皮颅内静脉窦支架置入术","经皮大脑前动脉支架置入术","经皮大脑后动脉支架置入术","经皮大脑中动脉支架置入术","经皮冠状动脉腔内血管成形术[PTCA]","经皮冠状动脉球囊扩张成形术",
+                "经皮冠状动脉药物球囊扩张成形术");
+
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        if (firstPageRecordDoc == null) {
+            return;
+        }
+        Map<String, Object> structureExtMap = firstPageRecordDoc.getStructureExtMap();
+        if (structureExtMap == null) {
+            return;
+        }
+        String operativeName = "";
+        String anesthesiaMode = "";
+        List<Map<String, String>> operative_information = (List<Map<String, String>>) structureExtMap.get(Content.operative_information);
+        if (operative_information == null || operative_information.size() == 0) {
+            return;
+        }
+
+        for (int i = 1; i < operative_information.size(); i++) {
+            //手术名称
+            operativeName = operative_information.get(i).get(Content.operative_name);
+            //麻醉方式
+            anesthesiaMode = operative_information.get(i).get(Content.anesthesia_mode);
+            if (StringUtil.isNotBlank(anesthesiaMode)) {
+                return;
+            }
+
+            if (StringUtil.isBlank(operativeName)) {
+                return;
+            }
+
+            for (String noMatchWord : noMatchWords) {
+                if (operativeName.contains(noMatchWord) && StringUtil.isBlank(anesthesiaMode)) {
+                    status.set("-1");
+                    info.set(noMatchWord);
+                    return;
+                }
+            }
+        }
+    }
+}

+ 222 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ningbozhenhai/threelevelward/THR0127.java

@@ -0,0 +1,222 @@
+package com.lantone.qc.kernel.catalogue.hospital.ningbozhenhai.threelevelward;
+
+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.MedicalRecordInfoDoc;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0127
+ * @Description : 每周无2次副主任医师/主任医师查房记录
+ * @Author : 胡敬
+ * @Date: 2020-03-19 15:52
+ */
+@Component
+public class THR0127 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        MedicalRecordInfoDoc medicalRecordInfoDoc = inputInfo.getMedicalRecordInfoDoc();
+        if (medicalRecordInfoDoc != null && medicalRecordInfoDoc.getStructureMap() != null) {
+            //入院日期
+            String admisTime = medicalRecordInfoDoc.getStructureMap().get("behospitalDate");
+            //出院日期
+            String dischargeTime = medicalRecordInfoDoc.getStructureMap().get("leaveHospitalDate");
+            if (CatalogueUtil.isEmpty(admisTime)) {
+                return;
+            }
+            String presentTime = DateUtil.nowString();
+            //如果如果入院未超过7天则不判断该条规则
+            if (!CatalogueUtil.isEmpty(admisTime) && !CatalogueUtil.isEmpty(presentTime)) {
+                if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), StringUtil.parseDateTime(presentTime), (long) (7 * 24 * 60))) {
+                    return;
+                }
+            }
+            //如果住院天数小于7天则不判断该条规则
+            if (!CatalogueUtil.isEmpty(admisTime) && !CatalogueUtil.isEmpty(dischargeTime)) {
+                if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), StringUtil.parseDateTime(dischargeTime), (long) (7 * 24 * 60))) {
+                    return;
+                }
+            } else {
+                if (inputInfo.getThreeLevelWardDocs().size() == 0) {
+                    status.set("-1");
+                    return;
+                }
+            }
+
+            if (inputInfo.getBeHospitalizedDoc() != null && inputInfo.getThreeLevelWardDocs().size() > 0) {
+                if (CatalogueUtil.isEmpty(admisTime)) {
+                    return;
+                }
+                //开始时间(入院时间)
+                Date beginDate = StringUtil.parseDateTime(admisTime);
+                if (beginDate == null) {
+                    return;
+                }
+
+                ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
+                if (allDoctorWradDocs.size() == 0) {
+                    status.set("0");
+                    return;
+                }
+                Date lastRecordDate = getLastRecordDate(allDoctorWradDocs);
+                if (lastRecordDate == null) {
+                    return;
+                }
+                int hoursPerWeek = 7 * 24 * 60;
+                String roundRecordThisWeek = "";
+                List<String> roundRecordEveryWeek = new ArrayList<>();
+                beginDate = DateUtil.dateZeroClear(beginDate);//从入院记录当天0点开始算
+                int i = 1;
+                String lastWardDateRange = "";
+                List<String> lastWardDateRangeList = new ArrayList<>();
+                //每周的病历记录
+                while (i >= 1) {
+                    roundRecordThisWeek = extractWardRecord(inputInfo, allDoctorWradDocs, beginDate, hoursPerWeek, lastRecordDate);
+                    if (CatalogueUtil.isEmpty(roundRecordThisWeek)) {
+                        break;
+                    }
+                    //如果6天后日期大于出院日期,跳过
+                    if (StringUtil.isBlank(dischargeTime)) {
+                        dischargeTime = presentTime;
+                    }
+                    Date sixDate = DateUtil.addDate(beginDate, 7);
+                    if (StringUtil.parseDateTime(dischargeTime).before(sixDate)) {
+                        break;
+                    }
+                    lastWardDateRange = DateUtil.formatDate(beginDate) + "    ->    " + DateUtil.formatDate(DateUtil.addDay(sixDate, -1));
+                    lastWardDateRangeList.add(lastWardDateRange);
+                    roundRecordEveryWeek.add(roundRecordThisWeek);
+                    beginDate = DateUtil.addDate(beginDate, 7);
+                    i++;
+                }
+                if (roundRecordEveryWeek.size() == 0) {
+                    status.set("0");
+                    return;
+                }
+                List<String> resultInfos = new ArrayList<>();
+                for (int j = 0; j < roundRecordEveryWeek.size(); j++) {
+                    int directorNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), Content.director);
+                    int dept_doctorNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), Content.dept_doctor);
+                    //三级医师查房算一次主任查房
+                    String key = getKeyByHospitalId();
+                    int threeDoctorNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), key);
+                    //北仑内分泌科(主任携主任代主治)
+                    int endocrinologyTitleNum = endocrinologyTitleNum(roundRecordEveryWeek.get(j).split(","));
+                    int num = 2;
+                    if ("7".equals(Content.hospital_Id)) {
+                        num = 1;
+                    }
+                    if (directorNum + dept_doctorNum + threeDoctorNum + endocrinologyTitleNum < num) {
+                        //每周无2次主任医师查房记录/科主任查房记录
+                        status.set("-1");
+                        resultInfos.add(lastWardDateRangeList.get(j));
+                    }
+                }
+                if (resultInfos.size() > 0) {
+                    info.set(StringUtils.join(resultInfos.toArray(), ";"));
+                }
+            }
+        }
+    }
+
+    private String getKeyByHospitalId() {
+        switch (Content.hospital_Id) {
+            case "7":               //厦门
+                return "多学科联合";
+            case "35":               //长沙湘雅
+                return "上级";
+            default:
+                return "三级";
+        }
+    }
+
+    /**
+     * 北仑内分泌科主任主治处理
+     *
+     * @param srcText
+     * @return
+     */
+    private int endocrinologyTitleNum(String[] srcText) {
+        int count = 0;
+        for (String title : srcText) {
+            String regex = ".*主任.*主任.*主治.*";
+            if (title.matches(regex)) {
+                count++;
+            }
+        }
+        return count;
+    }
+
+    private Date getLastRecordDate(List<ThreeLevelWardDoc> allDoctorWradDocs) {
+        ThreeLevelWardDoc threeLevelWardDoc = allDoctorWradDocs.get(allDoctorWradDocs.size() - 1);
+        Map<String, String> lastWardDocStructureMap = threeLevelWardDoc.getStructureMap();
+        String wardDateStr = lastWardDocStructureMap.get("查房日期");
+        if (StringUtil.isNotBlank(wardDateStr)) {
+            return StringUtil.parseDateTime(wardDateStr);
+        }
+        return null;
+    }
+
+    /**
+     * 抽取duration分钟内所有查房标题
+     * 抽取一周内所有查房标题,若一周内记录少于6天,则返回""
+     *
+     * @param threeLevelWardDocs
+     * @param admisDate
+     * @param duration
+     * @return
+     */
+    private static String extractWardRecord(InputInfo inputInfo, List<ThreeLevelWardDoc> threeLevelWardDocs, Date admisDate, int duration, Date maxRecordDate) {
+        String recordTime = "", recordTitle = "", title = "";
+        List<Date> dateList = new ArrayList();
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> threeLevelWardStructureMap = threeLevelWardDoc.getStructureMap();
+            recordTime = threeLevelWardStructureMap.get("查房日期");
+            title = threeLevelWardStructureMap.get("文书标题");
+            if(StringUtil.isBlank(title)){
+                title = threeLevelWardStructureMap.get("查房标题");
+            }
+            if (StringUtil.isBlank(recordTime) || StringUtil.isBlank(title)) {
+                continue;
+            }
+            Date recordDate = StringUtil.parseDateTime(recordTime);
+            if (recordDate == null) {
+                continue;
+            }
+            /* 替换查房标题中主刀/一助的职称 */
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (title.contains("主刀") || title.contains("术后第")) {
+                String doctorTitle = CatalogueUtil.getDoctorTitle(operationDocs, recordDate, "主刀医师");
+                title = title.replace("主刀", doctorTitle).replace("术后第", doctorTitle);
+            } else if (title.contains("一助")) {
+                String doctorTitle = CatalogueUtil.getDoctorTitle(operationDocs, recordDate, "一助");
+                title = title.replace("一助", doctorTitle);
+            }
+            if (admisDate.before(recordDate) && !CatalogueUtil.compareTime(admisDate, recordDate, Long.valueOf(duration))) {
+                recordTitle += title + ",";
+                dateList.add(recordDate);
+            }
+        }
+        if (dateList.size() > 0) {
+            //dateList.sort(Date::compareTo);
+            if (!maxRecordDate.equals(dateList.get(dateList.size() - 1)) || CatalogueUtil.compareTime(admisDate, dateList.get(dateList.size() - 1), Long.valueOf(6 * 24 * 60))) {
+                return recordTitle;
+            }
+        }
+        return "";
+    }
+}

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/behospitalized/BEH02902.java

@@ -65,8 +65,8 @@ public class BEH02902 extends QCCatalogue {
 
         /* 如果模型没找到时间实体,则直接取辅助检查前20个字,判断有没有院字 */
         if (!findPlace) {
-            String prefixText = pacsText.substring(0, Math.min(25, pacsText.length()));
-            if (prefixText.contains("院")) {
+            String prefixText = pacsText.trim().substring(0, Math.min(35, pacsText.length()));
+            if (prefixText.contains("院") || prefixText.contains("当地") || prefixText.contains("嵊州市") || prefixText.contains("科")) {
                 findPlace = true;
             }
         }

+ 59 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/firstpagerecord/FIRP0190.java

@@ -0,0 +1,59 @@
+package com.lantone.qc.kernel.catalogue.hospital.shengzhouyy.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.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0190
+ * @Description :Rh填写错误
+ * @Author : 胡敬
+ * @Date: 2020-03-18 13:35
+ */
+@Component
+public class FIRP0190 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() == null || inputInfo.getFirstPageRecordDoc().getStructureMap() == null
+                || inputInfo.getClinicalBloodDocs().size() == 0) {
+            return;
+        }
+        Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+        List<ClinicalBloodDoc> clinicalBloodDocList = inputInfo.getClinicalBloodDocs();
+        String rhFactor = firstpageStructureMap.get(Content.rhFactor);
+        if (CatalogueUtil.isEmpty(rhFactor)) {
+            return;
+        }
+        int matchSum = 0, noRhSum = 0;
+        for (ClinicalBloodDoc clinicalBloodDoc : clinicalBloodDocList) {
+            String text = clinicalBloodDoc.getText();
+            if (StringUtils.isEmpty(text)) {
+                continue;
+            }
+
+            String pattern = "[\\s\\S]*(?=RH)[^,;,;。]{0,3}((?=阴)|(?=阳))[\\s\\S]*";
+            if(!text.matches(pattern)){
+                noRhSum++;
+            }else{
+                matchSum++;
+                return;
+            }
+        }
+        /* 如果所有输血记录都没有rh记录(阴、阳),则不报错 */
+        if (noRhSum == clinicalBloodDocList.size()){
+            return;
+        }
+        if (matchSum == 0) {
+            status.set("-1");
+        }
+    }
+}

+ 115 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shengzhouyy/leavehospital/LEA0149.java

@@ -0,0 +1,115 @@
+package com.lantone.qc.kernel.catalogue.hospital.shengzhouyy.leavehospital;
+
+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.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.doc.DeathRecordDoc;
+import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @Description: 出院记录内容缺主诉
+ * @author: rengb
+ * @time: 2020/3/10 13:53
+ */
+@Component
+public class LEA0149 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (leaveHospitalDoc == null || beHospitalizedDoc == null) {
+            status.set("0");
+            return;
+        }
+        DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
+        if (deathRecordDoc != null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> lhStructureMap = leaveHospitalDoc.getStructureMap();
+        ChiefLabel chiefLabel = beHospitalizedDoc.getChiefLabel();
+        if (lhStructureMap != null && chiefLabel != null) {
+            String bhChief = CatalogueUtil.int2ChineseNum(chiefLabel.getText().replaceAll("[\\p{Punct}\\pP。-]", ""));
+            String leaveChief = lhStructureMap.get("主诉");
+            String key = getKeyByHospitalId();
+            String bhThings = lhStructureMap.get(key);
+            String reThings = lhStructureMap.get("入院原因");   //邵逸夫主诉在入院原因内
+            if (StringUtil.isNotBlank(bhThings)) {
+                bhThings = CatalogueUtil.int2ChineseNum(bhThings.replaceAll("[\\p{Punct}\\pP。-]", ""));
+                if (bhThings.contains("\n")) {
+                    bhThings = bhThings.replace("\n", "");
+                }
+            }
+            if (StringUtil.isNotBlank(reThings)) {
+                reThings = CatalogueUtil.int2ChineseNum(reThings.replaceAll("[\\p{Punct}\\pP。-]", ""));
+                if (reThings.contains("\n")) {
+                    reThings = reThings.replace("\n", "");
+                }
+            }
+
+            //如果出院小结结构化数据能取出主诉,则直接用该主诉和入院记录主诉比较
+            if (StringUtil.isNotBlank(leaveChief)) {
+                leaveChief = CatalogueUtil.int2ChineseNum(leaveChief.replaceAll("[\\p{Punct}\\pP。-]", ""));
+                if (bhChief.equals(leaveChief)) {
+                    status.set("0");
+                    return;
+                }
+            }
+            if (StringUtil.isNotBlank(bhThings) && bhThings.replace(" ", "").contains(bhChief.replace(" ", ""))) {
+                status.set("0");
+                return;
+            }
+            //邵逸夫主诉写在入院原因
+            if (StringUtil.isNotBlank(reThings) && reThings.replace(" ", "").contains(bhChief.replace(" ", ""))) {
+                status.set("0");
+                return;
+            }
+
+            if (StringUtil.isNotBlank(bhThings) && (bhThings.replace(" ", "").contains(bhChief.replace(" ", ""))
+                    || bhThings.replace(" ", "").contains(bhChief.replace(" ", "").replace("余", "")))) {
+                status.set("0");
+                return;
+            }
+            if (StringUtils.isNotBlank(bhThings)) {
+                Pattern compile = Pattern.compile("(?<=2.).*(?=3.体格检查)");
+                Matcher matcher = compile.matcher(bhThings);
+                while (matcher.find()) {
+                    String number = matcher.group(0);
+                    if (CatalogueUtil.isEmpty(number)) {
+                        status.set("-1");
+                    }
+                }
+                //处理台州的
+                if (bhThings.contains("患者因")) {
+                    status.set("0");
+                }
+            }
+
+
+            //                    bhThings = bhThings.replaceAll("[\\p{Punct}\\pP]", "");
+            //                    if (bhThings.indexOf(bhChief) < 0) {
+            //                        status.set("-1");
+            //                    }
+        }
+    }
+    private String getKeyByHospitalId() {
+        switch (Content.hospital_Id)
+        {
+            case "7":               //厦门
+                return "病史摘要";
+            default:
+                return "入院情况";
+        }
+    }
+}

+ 1 - 1
kernel/src/main/resources/bootstrap.yml

@@ -21,7 +21,7 @@ spring:
     active: debug
 
 qc:
-  hospital_id: 1,2,3,4,5,6,7,8,10,13,15,20,34,35,36
+  hospital_id: 1,2,3,4,5,6,7,8,10,13,15,20,21,22,23,24,34,35,36
 
 logging:          # 日志
   config: classpath:logback-spring.xml

+ 133 - 0
kernel/src/main/resources/cache/21/concept_clinic_bodypart_properties.dict

@@ -0,0 +1,133 @@
+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==

+ 0 - 0
kernel/src/main/resources/cache/21/concept_diag_properties.dict


+ 0 - 0
kernel/src/main/resources/cache/21/hospital_diag_info.dict


+ 0 - 0
kernel/src/main/resources/cache/21/hospital_doctor_info.dict


+ 133 - 0
kernel/src/main/resources/cache/22/concept_clinic_bodypart_properties.dict

@@ -0,0 +1,133 @@
+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==

+ 0 - 0
kernel/src/main/resources/cache/22/concept_diag_properties.dict


+ 0 - 0
kernel/src/main/resources/cache/22/hospital_diag_info.dict


+ 0 - 0
kernel/src/main/resources/cache/22/hospital_doctor_info.dict


+ 133 - 0
kernel/src/main/resources/cache/23/concept_clinic_bodypart_properties.dict

@@ -0,0 +1,133 @@
+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==

+ 0 - 0
kernel/src/main/resources/cache/23/concept_diag_properties.dict


+ 0 - 0
kernel/src/main/resources/cache/23/hospital_diag_info.dict


+ 0 - 0
kernel/src/main/resources/cache/23/hospital_doctor_info.dict


+ 133 - 0
kernel/src/main/resources/cache/24/concept_clinic_bodypart_properties.dict

@@ -0,0 +1,133 @@
+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==

+ 0 - 0
kernel/src/main/resources/cache/24/concept_diag_properties.dict


+ 0 - 0
kernel/src/main/resources/cache/24/hospital_diag_info.dict


+ 0 - 0
kernel/src/main/resources/cache/24/hospital_doctor_info.dict


+ 3 - 3
kernel/src/main/resources/kernel.properties

@@ -1,7 +1,7 @@
 ################################ database ###################################
-mysql.redis.user = teamdata
-mysql.redis.password = jiO2rfnYhg
-mysql.redis.url = jdbc:mysql://192.168.2.121:3306/qc?useUnicode=true&characterEncoding=UTF-8&useSSL=false
+mysql.redis.user = root
+mysql.redis.password = LangT0ng@lt
+mysql.redis.url = jdbc:mysql://192.168.2.125:3307/qc?useUnicode=true&characterEncoding=UTF-8&useSSL=false
 
 mysql.test.user = root
 mysql.test.password = lantone

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/ningbozhenhai/util/OperationRecordHtmlAnalysis.java

@@ -41,11 +41,11 @@ public class OperationRecordHtmlAnalysis implements HtmlAnalysis {
 
     private void analysisGeneral(Element bigDivElement, Map<String, String> map) {
         String text = HtmlAnalysisUtil.blockDivToStr(bigDivElement, true);
-        text = text.replaceAll("第1页", "")
+        text = text.replaceAll("第1页", "").replace(" ", "")
                 .replace("(包括体位、切口处理经过,病灶所见及手术步骤等):", "");
         List<String> titles = Lists.newArrayList(
                 "姓名", "病区", "科室", "床号", "床位", "住院号", "手术开始时间", "手术结束时间", "术前诊断", "术 前 诊  断",
-                "手术名称", "手 术 名  称", "术中诊断", "术(中)后诊断", "手术人员", "手术主刀医师", "手 术 主 刀 医 师", "麻醉方式",
+                "手术名称", "手 术 名  称", "术中诊断", "术(中)后诊断", "手术人员", "手术主刀医师", "手 术 主 刀 医 师", "一助", "二助", "麻醉方式",
                 "麻 醉 方  式", "麻醉人员", "麻 醉 医  师", "手术风险评估(可选)", "NNIS分级", "手术类别(可选)", "手术标本", "冰冻切片结果",
                 "术中并发症", "术中失血量", "手术经过", "手术经过及处理(包括患者的体位、切口处理、病灶所见及手术步骤等)", "记录者签字", "主刀签字", "主刀医师签名",
                 "记录日期", "日期", "时间"

+ 6 - 21
trans/src/main/java/com/lantone/qc/trans/ningbozhongyi/util/NingBoZhongYiLeaveHospitalHtmlAnalysis.java

@@ -59,27 +59,12 @@ public class NingBoZhongYiLeaveHospitalHtmlAnalysis implements NingBoZhongYiHtml
                 String discharge = structureMap.get("出院诊断");
                 StringBuilder sb = new StringBuilder();
                 int num =0;
-                if(discharge.contains("中医诊断") && !discharge.contains("西医诊断")){
-                    String zdischarge = discharge.split("中医诊断")[1].replace(":","");
-                    num = extractDischarge(num, sb, zdischarge);
-
-                }
-                if(discharge.contains("中医诊断") && discharge.contains("西医诊断")){
-                    String zdischarge = discharge.split("西医诊断")[0].split("中医诊断")[1].replace(":","");
+                if(discharge.contains("西医诊断")){
                     String xdischarge = discharge.split("西医诊断")[1].replace(":","");
-                    num = extractDischarge(num,sb,zdischarge);
-                    String[] xleaveDiags = xdischarge.split(",?,?[0-9]\\.");
-                    for (String leaveDiag : xleaveDiags) {
-                        leaveDiag = leaveDiag.trim();
-                        if(StringUtil.isNotBlank(leaveDiag)){
-                            num++;
-                            sb.append(num+"."+leaveDiag.trim());
-                        }
+                    String sbStr = extractDischarge(num, sb, xdischarge);
+                    if(StringUtil.isNotBlank(sbStr)){
+                        structureMap.put("出院诊断规则",sbStr);
                     }
-
-                }
-                if(StringUtil.isNotBlank(sb.toString())){
-                    structureMap.put("出院诊断规则",sb.toString());
                 }
             }
             CommonAnalysisUtil.extractDateByTitle(structureMap, "时间");
@@ -90,7 +75,7 @@ public class NingBoZhongYiLeaveHospitalHtmlAnalysis implements NingBoZhongYiHtml
         return structureMap;
     }
 
-    public int extractDischarge( int num, StringBuilder sb,String zdischarge){
+    public String extractDischarge( int num, StringBuilder sb,String zdischarge){
         String rex =",?,?[0-9]\\.";
         boolean matches = zdischarge.matches(rex);
         String[] zleaveDiags = null;
@@ -110,6 +95,6 @@ public class NingBoZhongYiLeaveHospitalHtmlAnalysis implements NingBoZhongYiHtml
                 }
             }
         }
-        return num;
+        return sb.toString();
     }
 }

+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/shengzhouyy/ClinicalBloodDocTrans.java

@@ -48,6 +48,7 @@ public class ClinicalBloodDocTrans extends ModelDocTrans {
         }
 
         ClinicalBloodDoc clinicalBloodDoc = new ClinicalBloodDoc();
+        clinicalBloodDoc.setText(structureMap.get("原始文本"));
         clinicalBloodDoc.setStructureMap(structureMap);
         clinicalBloodDoc.setPageData((Map) structureMap);
         return clinicalBloodDoc;

+ 0 - 1
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyBeHospitalizedDocTrans.java

@@ -68,7 +68,6 @@ public class YuhangsyBeHospitalizedDocTrans extends ModelDocTrans {
             "医师签名=记录医生",
             "产科专科检查一般状况=专科检查",
             "补充及专科情况体温=专科检查",
-            "实验室检查=辅助检查",
             "民族\\宗教=民族"
     );
 

+ 2 - 1
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyConsultationDocTrans.java

@@ -117,7 +117,8 @@ public class YuhangsyConsultationDocTrans extends ModelDocTrans {
 
     private List<String> consultationRecord_keyContrasts = Lists.newArrayList(
             "会诊原因=会诊目的",
-            "医师会诊意见=会诊意见"
+            "医师会诊意见=简要病情",
+            "记录医师=记录医生"
     );
 
 

+ 2 - 3
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyCrisisValueReportDocTrans.java

@@ -66,9 +66,8 @@ public class YuhangsyCrisisValueReportDocTrans extends ModelDocTrans {
     }
 
     private List<String> keyContrasts = Lists.newArrayList(
-            "病历标题=标题",
-            "记录医师=医师签名",
-            "病情记录=病历内容"
+            "记录医师=记录医生",
+            "病情记录=病情分析及处理"
     );
 
 }

+ 8 - 1
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyCriticallyIllNoticeDocTrans.java

@@ -71,7 +71,14 @@ public class YuhangsyCriticallyIllNoticeDocTrans extends ModelDocTrans {
             "患者姓名=姓名",
             "现在我院=科别",
             "医护人员签名签名日期=医生签名时间",
-            "目前诊断为=当前诊断"
+            "目前诊断为=当前诊断",
+            "签名日期=病历日期",
+            "患者家属或患者的法定监护人、授权委托人意见:=患方意见",
+            "患者家属或患者的法定监护人意见:=患方意见",
+            "患者监护人签名=患者签名",
+            "患者授权亲属签名=患者签名",
+            "医护人员签名=告知医师签名",
+            "签名日期=患者签名时间"
     );
 
 }

+ 5 - 6
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyDeathCaseDiscussDocTrans.java

@@ -55,14 +55,13 @@ public class YuhangsyDeathCaseDiscussDocTrans extends ModelDocTrans {
 
     private List<String> keyContrasts = Lists.newArrayList(
             "患者姓名=姓名",
-            "病情摘要=病史简介",
-            "讨论日期=讨论时间",
-            "死亡主持人签名=主持人",
             "参加讨论人员(注明职称、职务)=参加人员",
+            "病情摘要=病史简介",
+            "汇报病情=病史简介",
             "讨论意见(对诊断、治疗、抢救的意见,死亡原因分析及经验教训等的记录)=讨论内容",
-            "记录者签名=记录医生",
-            "记录者签名日期=记录时间",
-            "总结=主持人小结"
+            "主持人小结意见=主持人小结",
+            "签名日期=记录时间",
+            "记录者签名=记录医生"
     );
 
 }

+ 9 - 3
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyDeathRecordDocTrans.java

@@ -56,12 +56,18 @@ public class YuhangsyDeathRecordDocTrans extends ModelDocTrans {
     }
 
     private List<String> keyContrasts = Lists.newArrayList(
+            //死亡记录
+            "住址=家庭住址",
             "入院时情况(简要病史、阳性体征、有关实验室及器械检查结果)=入院情况",
             "住院经过及抢救经过=诊疗经过",
+            "实验室及器械检查结果=医技检查",
             "尸体病理解剖情况=尸检",
-            "实验室检查=医技检查",
-            "实验室检查=医技检查",
-            "记录医师=记录医生"
+            "记录医师=记录医生",
+
+            //死亡记录(新)
+            "死亡时间=死亡日期",
+            "医师签名=记录医生",
+            "时间=记录时间"
     );
 
 }

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyDifficultCaseDiscussDocTrans.java

@@ -83,7 +83,7 @@ public class YuhangsyDifficultCaseDiscussDocTrans extends ModelDocTrans {
 
     private List<String> keyContrasts = Lists.newArrayList(
             "病历记录时间=记录时间",
-            "记录医师=记录医生签名",
+            "记录医师=记录医生",
             "病程内容=汇报病史"
     );
 

+ 4 - 3
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyLeaveHospitalDocTrans.java

@@ -66,10 +66,11 @@ public class YuhangsyLeaveHospitalDocTrans extends ModelDocTrans {
     private List<String> keyContrasts = Lists.newArrayList(
             "入院时间=入院日期",
             "出院时间=出院日期",
-            "入院情况=病史摘要",
+            "疗效评价=治疗结果",
             "住院经过=诊治经过",
-            "签名时间=时间",
-            "入院查体=主要实验室检查及器械检验结果"
+            "出院指导=出院计划",
+            "医师签名=记录医生",
+            "签名时间=记录时间"
     );
 
 }

+ 39 - 21
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyOperationDocTrans.java

@@ -130,10 +130,9 @@ public class YuhangsyOperationDocTrans extends ModelDocTrans {
     }
 
     private List<String> operationDiscussion_keyContrasts = Lists.newArrayList(
-            "病历日期=病历日期",
             "病历标题=标题",
-            "病情记录=术后注意事项",
-            "记录医=记录医生"
+            "病情记录=病程内容",
+            "记录医=记录医生"
     );
 
 
@@ -206,8 +205,6 @@ public class YuhangsyOperationDocTrans extends ModelDocTrans {
     private List<String> operationRecord_keyContrasts = Lists.newArrayList(
             "手术开始时间=开始时间",
             "术中诊断=术中后诊断",
-//            "麻醉医师=麻醉者",
-//            "麻醉方式=麻醉方法",
             "记录医师=记录医生",
             "记录医师签名时间=记录时间",
             "手术过程=手术经过及处理"
@@ -252,13 +249,7 @@ public class YuhangsyOperationDocTrans extends ModelDocTrans {
             YuhangsyHtmlAnalysis yhsyHtmlAnalysis = new YuhangsyPreoperativeHtmlAnalysis();
             Map<String, String> sourceMap = yhsyHtmlAnalysis.analysis(content, recTitle, recTypeId);
             if (MapUtils.isNotEmpty(sourceMap)) {
-                if (StringUtil.isNotBlank(sourceMap.get("文书标题")) && sourceMap.get("文书标题").equals("术前小结")) {
-                    structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, preoperativeDiscussion_keyContrasts2);
-                } else {
-                    structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, preoperativeDiscussion_keyContrasts);
-                }
-
-
+                structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, preoperativeDiscussion_keyContrasts);
                 structureMap.put("记录编号", contentMap.get("recId").toString());
                 structureMap.put("病历号", contentMap.get("behospitalCode") == null ? null : contentMap.get("behospitalCode").toString());
             }
@@ -304,15 +295,42 @@ public class YuhangsyOperationDocTrans extends ModelDocTrans {
     }
 
     private List<String> preoperativeDiscussion_keyContrasts = Lists.newArrayList(
-            "讨论时间=文书时间",
-            "讨论方式=病历内容",
-            "主刀医生签名=记录医生"
-    );
-    private List<String> preoperativeDiscussion_keyContrasts2 = Lists.newArrayList(
-            "病史摘要=病历内容",
-            "医生签名=记录医生",
-            "日期=文书时间"
-
+            //术前讨论术前小结
+            "参加人员的姓名及专业技术职务=参加人员",
+            "一、简要病情=简要病情",
+            "1、术前诊断=术前诊断",
+            "2、手术指征与禁忌症=手术指征",
+            "3、可替代方案=可替代的方案",
+            "4、拟施手术方式(名称)及可能的变更方案=拟施手术名称及方式",
+            "5、计划性多次手术=计划性多次手术",
+            "6、拟施麻醉方式=拟施麻醉方式",
+            "7、术前准备=术前准备",
+            "8、主要术中、术后风险及防范措施=风险及防范措施",
+            "9、术中、术后注意事项(含护理事项)=术中术后注意事项",
+            "11、主持人小结=讨论结论",
+            "主刀医生签名=医生签名",
+            "经治医师签名=医生签名",
+            "签字时间=记录时间",
+
+
+            //杭州市余杭区第三人民医院术前讨论
+            "时间=讨论时间",
+            "诊断依据=简要病情",
+            "手术适应症=手术指征",
+            "拟定手术方式=拟施手术名称及方式",
+            "拟定麻醉方式=拟施麻醉方式",
+            "术中、术后可能发生的意外=术中术后注意事项",
+            "防范措施=风险及防范措施",
+            "科室讨论意见=具体讨论意见",
+            "讨论结果=讨论结论",
+            "记录医师=医生签名",
+
+            //术前小结
+            "病史摘要=简要病情",
+            "拟施手术=拟施手术名称及方式",
+            "拟施麻醉=拟施麻醉方式",
+            "术中注意点=术中、术后注意事项",
+            "日期=记录时间"
     );
 
     /**********************************************手术知情同意书****************************************************/

+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyRescueDocTrans.java

@@ -68,6 +68,7 @@ public class YuhangsyRescueDocTrans extends ModelDocTrans {
     private List<String> keyContrasts = Lists.newArrayList(
             "病历标题=标题",
             "病情记录=抢救内容",
+            "医师签名=记录医生",
             "记录医师=记录医生"
     );
 

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/yuhangsy/YuhangsyStagesSummaryDocTrans.java

@@ -68,7 +68,7 @@ public class YuhangsyStagesSummaryDocTrans extends ModelDocTrans {
     private List<String> keyContrasts = Lists.newArrayList(
             "记录医师=记录医生",
             "病历标题=标题",
-            "病情记录=目前病情"
+            "病情记录=病历内容"
     );
 
 }

+ 5 - 0
trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyBeHospitalizedHtmlAnalysis.java

@@ -74,6 +74,11 @@ public class YuhangsyBeHospitalizedHtmlAnalysis implements YuhangsyHtmlAnalysis
         if(StringUtil.isNotBlank(structureMap.get("补充及专科情况体温"))){
             structureMap.put("补充及专科情况体温", "体温:"+structureMap.get("补充及专科情况体温"));
         }
+        //如果修正诊断带有医师签名
+        if(StringUtil.isNotBlank(structureMap.get("修正诊断"))&& structureMap.get("修正诊断").contains("医师签名")){
+            Integer index = structureMap.get("修正诊断").indexOf("医师签名");
+            structureMap.put("修正诊断", structureMap.get("修正诊断").substring(0,index));
+        }
     }
 
     //24小时出入院记录、24小时出入院记录(全院)、24小时入出院记录(全院通用)、24小时内入院死亡记录(全院通用)

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 11 - 9
trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyCriticallyIllNoticeHtmlAnalysis.java


+ 7 - 3
trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyDeathCaseDiscussHtmlAnalysis.java

@@ -31,9 +31,9 @@ public class YuhangsyDeathCaseDiscussHtmlAnalysis implements YuhangsyHtmlAnalysi
             String recTypeId = args[2];
             List<String> titles = Lists.newArrayList(
                     "患者姓名", "性别", "年龄", "婚姻", "出生地", "职业", "工作单位", "住址", "入院日期", "死亡日期", "讨论日期", "入院诊断", "死亡诊断",
-                    "参加讨论人员(注明职称、职务)",
-                    "病情摘要", "入科查体", "转入诊断", "讨论意见(对诊断、治疗、抢救的意见,死亡原因分析及经验教训等的记录)","总结",
-                    "死亡原因", "死亡主持人签名", "签名日期", "记录者签名"
+                    "参加讨论人员(注明职称、职务)", "病情摘要","汇报病情",
+                    "讨论意见(对诊断、治疗、抢救的意见,死亡原因分析及经验教训等的记录)","主持人小结意见",
+                    "死亡原因","主持人签名","签名日期", "记录者签名"
             );
             String htmlContent = YuhangsyCommonAnalysisUtil.html2String(html);
 
@@ -74,6 +74,10 @@ public class YuhangsyDeathCaseDiscussHtmlAnalysis implements YuhangsyHtmlAnalysi
                 map.put("记录者签名日期", name.substring(name.indexOf("签名日期:")));
             }
         }
+        //主持人从主持人签名中提取
+        if (map.containsKey("主持人签名")) {
+            map.put("主持人", map.get("记录者签名"));
+        }
     }
 
 }

+ 10 - 5
trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyDeathRecordHtmlAnalysis.java

@@ -33,18 +33,23 @@ public class YuhangsyDeathRecordHtmlAnalysis implements YuhangsyHtmlAnalysis {
             String recTitle = args[1];
             String recTypeId = args[2];
             List<String> titles = Lists.newArrayList(
-                    "姓名", "性别", "年龄", "婚姻", "职业", "民族", "工作单位", "住址", "入院日期", "入院诊断", "手术日期", "手术名称", "死亡日期", "住院天数", "死亡诊断",
-                    "入院时情况(简要病史、阳性体征、有关实验室及器械检查结果)", "实验室检查", "特殊检查", "住院经过及抢救经过", "死亡原因", "尸体病理解剖情况", "X线片号", "病理检验号",
-                    "主治医师签名", "科主任(副主任医师以上)", "医师签名"
+                    //死亡记录
+                    "姓名", "性别", "年龄", "婚姻", "职业", "民族", "工作单位", "住址",
+                    "入院日期", "入院诊断", "手术日期", "手术名称", "死亡日期", "住院天数", "死亡诊断",
+                    "入院时情况(简要病史、阳性体征、有关实验室及器械检查结果)", "主诉", "现病史", "实验室及器械检查结果","住院经过及抢救经过",
+                    "死亡原因", "尸体病理解剖情况", "X线片号", "病理检验号",
+                    "科主任(副主任医师以上)", "主治医师签名", "医师签名",
+
+                    //死亡记录(新)
+                    "入院时间","死亡时间","入院情况","入院诊断","诊疗经过","死亡原因","死亡诊断","医师签名","时间"
             );
             String htmlContent = YuhangsyCommonAnalysisUtil.html2String(html);
 
             if (StringUtil.isNotBlank(htmlContent)) {
                 YuhangsyCommonAnalysisUtil.html2StructureMap(titles, htmlContent, structureMap);
             }
-            // 解决时间显示 年 月 日 时
+            // 解决时间显示 年 月 日 时
             YuhangsyCommonAnalysisUtil.signatureTime1("时间", structureMap);
-            YuhangsyCommonAnalysisUtil.signatureTime1("日 期", structureMap);
             YuhangsyHtmlAnalysisUtil.insertModuleId(modeId, recTypeId, structureMap);
         } catch (Exception e) {
             log.error(e.getMessage(), e);

+ 3 - 3
trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyLeaveHospitalHtmlAnalysis.java

@@ -27,9 +27,9 @@ public class YuhangsyLeaveHospitalHtmlAnalysis implements YuhangsyHtmlAnalysis {
     public Map<String, String> analysis(String... args) {
         Map<String, String> structureMap = Maps.newLinkedHashMap();
         try {
-            List<String> titles = Lists.newArrayList("入院时间", "出院时间", "住院天数", "入院诊断",
-                    "出院诊断","主 诉", "入院情况", "入院查体", "住院经过", "出院情况", "出院医嘱","查体",
-                    "患者或患者授权亲属签名", "医师签名", "签名时间","日 期","出院指导"
+            List<String> titles = Lists.newArrayList("入院时间", "出院时间", "住院天数","疗效评价", "入院诊断",
+                    "出院诊断", "入院情况", "住院经过", "出院情况", "出院医嘱","出院指导",
+                    "患者或患者授权亲属签名", "医师签名", "签名时间"
             );
             String html = args[0];
             String recTitle = args[1];

+ 35 - 22
trans/src/main/java/com/lantone/qc/trans/yuhangsy/util/YuhangsyPreoperativeHtmlAnalysis.java

@@ -30,12 +30,22 @@ public class YuhangsyPreoperativeHtmlAnalysis implements YuhangsyHtmlAnalysis {
             String recTitle = args[1];
             String recTypeId = args[2];
             List<String> titles = Lists.newArrayList(
-//                    "讨论时间", "讨论方式", "参加人员的姓名及专业技术职务", "参加人员",
-//                    "简要病情", "入院查体", "术前诊断", "手术指征与禁忌症", "可替代方案", "拟施手术方式(名称)及可能的变更方案", "计划性多次手术", "拟麻醉方式", "拟施麻醉方式", "术前准备", "主要术中、术后风险及防范措施", "术中、术后注意事项(含护理事项)", "围术期预防性抗菌药使用",
-//                    "主刀医生签名", "分标记医生签名", "经治医师签名", "分主刀医师签名",
-                    "讨论时间","讨论方式","主刀医生签名", "分标记医生签名", "经治医师签名", "分主刀医师签名",
-                    "病史摘要", "医生签名", "日 期"
+                    //术前讨论术前小结
+                    "讨论时间", "讨论方式", "参加人员的姓名及专业技术职务", "一、简要病情",
+                    "二、讨论结论", "1、术前诊断", "2、手术指征与禁忌症", "3、可替代方案", "4、拟施手术方式(名称)及可能的变更方案", "5、计划性多次手术",
+                    "6、拟施麻醉方式", "7、术前准备", "8、主要术中、术后风险及防范措施", "9、术中、术后注意事项(含护理事项)",
+                    "10、围手术期预防性抗菌药物使用", "11、主持人小结",
+                    "主刀医生签名", "标记医生签名", "经治医师签名", "主刀医师签名","签字时间",
+
+                    //杭州市余杭区第三人民医院术前讨论
+                    "时间", "地点", "参加人员", "姓名", "性别", "年龄", "科别", "床号", "住院号", "术前诊断", "诊断依据", "手术适应症", "拟定手术方式", "拟定麻醉方式",
+                    "术前准备", "术中、术后可能发生的意外", "防范措施", "科室讨论意见", "讨论结果", "科主任签名", "记录医师",
+
+                    //术前小结
+                    "病史摘要", "术前诊断", "术前准备", "拟施手术", "拟施麻醉", "术中注意点", "家属谈话内容", "医生签名", "日 期"
             );
+
+
             String htmlContent = YuhangsyCommonAnalysisUtil.html2String(html);
 
             if (StringUtil.isNotBlank(htmlContent)) {
@@ -44,8 +54,19 @@ public class YuhangsyPreoperativeHtmlAnalysis implements YuhangsyHtmlAnalysis {
             // 解决医生签名显示 年 月 日 时
             signatureTime(map);
             map.put("文书标题", recTitle);
-            if (StringUtil.isNotBlank(map.get("主刀医生签名"))&&map.get("主刀医生签名").contains("签字时间")) {
-                map.put("主刀医生签名",map.get("主刀医生签名").substring(0,map.get("主刀医生签名").indexOf("签字时间")));
+            if (StringUtil.isNotBlank(map.get("记录医师")) && map.get("记录医师").contains("时间:")) {
+                map.put("签字时间", map.get("记录医师").substring(map.get("记录医师").indexOf("时间:") + "时间:".length()));
+                map.put("记录医师", map.get("记录医师").substring(0, map.get("记录医师").indexOf("时间:")));
+            }
+            if (StringUtil.isNotBlank(map.get("讨论时间"))) {
+                map.put("文书时间", map.get("讨论时间"));
+            }
+            if (StringUtil.isNotBlank(map.get("时间"))) {
+                map.put("文书时间", map.get("时间"));
+                map.put("记录时间", map.get("时间"));
+            }
+            if (StringUtil.isNotBlank(map.get("日期"))) {
+                map.put("文书时间", map.get("日期"));
             }
             YuhangsyHtmlAnalysisUtil.insertModuleId(modeId, recTypeId, map);
         } catch (Exception e) {
@@ -56,26 +77,18 @@ public class YuhangsyPreoperativeHtmlAnalysis implements YuhangsyHtmlAnalysis {
 
 
     /**
-     * 解决医生签名时间显示 年 月 日 时 分
+     * 解决签字时间显示 年 月 日 时 分
      *
      * @param map
      */
     private void signatureTime(Map<String, String> map) {
-        String goCureDoctor = map.get("经治医师签名");
-        String operateDoctor = map.get("主刀医生签名");
-        String goCureDoctor2 = map.get("分主刀医师签名");
-        String operateDoctor2 = map.get("分标记医生签名");
-        if (StringUtil.isNotBlank(goCureDoctor) && goCureDoctor.contains("年 月 日 时")) {
-            map.put("经治医师签名", goCureDoctor.replace("年 月 日 时", ""));
-        }
-        if (StringUtil.isNotBlank(operateDoctor) && operateDoctor.contains("年 月 日 时")) {
-            map.put("主刀医生签名", operateDoctor.replace("年 月 日 时", ""));
-        }
-        if (StringUtil.isNotBlank(goCureDoctor2) && goCureDoctor2.contains("年 月 日 时 分")) {
-            map.put("分主刀医师签名", goCureDoctor2.replace("年 月 日 时 分", ""));
+        String stringTime1 = map.get("签字时间");
+        String stringTime2 = map.get("时间");
+        if (StringUtil.isNotBlank(stringTime1) && stringTime1.contains("年 月 日 时 分")) {
+            map.put("签字时间", stringTime1.replace("年 月 日 时 分", ""));
         }
-        if (StringUtil.isNotBlank(operateDoctor2) && operateDoctor2.contains("年 月 日 时 分")) {
-            map.put("分标记医生签名", operateDoctor2.replace("年 月 日 时 分", ""));
+        if (StringUtil.isNotBlank(stringTime2) && stringTime2.contains("年 月 日 时 分")) {
+            map.put("时间", stringTime2.replace("年 月 日 时 分", ""));
         }
     }