Kaynağa Gözat

宁海妇幼修改规则合并

wangsy 4 yıl önce
ebeveyn
işleme
4393486afa
47 değiştirilmiş dosya ile 732 ekleme ve 186 silme
  1. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0009.java
  2. 5 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0182.java
  3. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0210.java
  4. 6 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0211.java
  5. 6 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0214.java
  6. 5 2
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0247.java
  7. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0249.java
  8. 3 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP02837.java
  9. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0008.java
  10. 50 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0041.java
  11. 71 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0042.java
  12. 47 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0052.java
  13. 68 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH02966.java
  14. 116 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0376.java
  15. 39 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/firstpagerecord/FIRP0163.java
  16. 92 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/leavehospital/LEA0149.java
  17. 4 18
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/operationdiscussion/OPE02930.java
  18. 10 10
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/operationdiscussion/OPE0369.java
  19. 9 7
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/preoperativediscussion/PRE0328.java
  20. 6 3
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/threelevelward/THR02900.java
  21. 1 10
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/threelevelward/THR03090.java
  22. 1 0
      public/src/main/java/com/lantone/qc/pub/Content.java
  23. 5 0
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoBeHospitalizedDocTrans.java
  24. 2 0
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoFirstCourseRecordDocTrans.java
  25. 1 0
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoLeaveHospitalDocTrans.java
  26. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoOperationDocTrans.java
  27. 28 35
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoBeHospitalizedHtmlAnalysis.java
  28. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoClinicBloodEffectHtmlAnalysis.java
  29. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoClinicalBloodHtmlAnalysis.java
  30. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoConsultationHtmlAnalysis.java
  31. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoConsultationRecordHtmlAnalysis.java
  32. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoCrisisValueReportHtmlAnalysis.java
  33. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoCriticallyIllNoticeHtmlAnalysis.java
  34. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoDeathCaseDiscussHtmlAnalysis.java
  35. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoDeathRecordHtmlAnalysis.java
  36. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoDifficultCaseDiscussHtmlAnalysis.java
  37. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoDutyShiftSystemHtmlAnalysis.java
  38. 15 5
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoFirstCourseRecordHtmlAnalysis.java
  39. 2 2
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoLeaveHospitalHtmlAnalysis.java
  40. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoOperationHtmlAnalysis.java
  41. 70 66
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoOperationRecordHtmlAnalysis.java
  42. 6 6
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoPreoperativeHtmlAnalysis.java
  43. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoRescueHtmlAnalysis.java
  44. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoStagesSummaryHtmlAnalysis.java
  45. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoThreeLevelWardHtmlAnalysis.java
  46. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoTransferIntoHtmlAnalysis.java
  47. 1 1
      trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoTransferOutHtmlAnalysis.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) {

+ 5 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0182.java

@@ -25,6 +25,11 @@ public class FIRP0182 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String bingDiag = firstpageStructureMap.get(Content.pathologyDiagnose);
+            String cost = firstpageStructureMap.get(Content.pathologyDiagnoseCost);
+            if (StringUtil.isBlank(cost)) {
+                status.set("0");
+                return;
+            }
             if (StringUtil.isNotBlank(bingDiag) && !bingDiag.equals("[]")) {
                 status.set("0");
             }

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

@@ -10,7 +10,7 @@ import org.springframework.stereotype.Component;
 import java.util.Map;
 
 /**
- * @ClassName : FIRP0211
+ * @ClassName : FIRP0210
  * @Description : 居住电话未填写
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28ss

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

@@ -22,7 +22,12 @@ public class FIRP0211 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String dischargeTime = firstpageStructureMap.get(Content.work_unit_phone);
-            if(StringUtil.isBlank(dischargeTime)){
+            //工作单位 (无工作单位者无需填写单位邮编、电话及地址)
+            String workUnit = firstpageStructureMap.get(Content.work_unit);
+            if (StringUtil.isBlank(workUnit) || "—".equals(workUnit)) {
+                return;
+            }
+            if (StringUtil.isBlank(dischargeTime) || "—".equals(dischargeTime)) {
                 status.set("-1");
             }
 

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

@@ -22,7 +22,12 @@ public class FIRP0214 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String dischargeTime = firstpageStructureMap.get(Content.work_unit_zipcode);
-            if(StringUtil.isBlank(dischargeTime)){
+            //工作单位 (无工作单位者无需填写单位邮编、电话及地址)
+            String workUnit = firstpageStructureMap.get(Content.work_unit);
+            if (StringUtil.isBlank(workUnit) || "—".equals(workUnit)) {
+                return;
+            }
+            if (StringUtil.isBlank(dischargeTime) || "—".equals(dischargeTime)) {
                 status.set("-1");
             }
 

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

@@ -18,10 +18,13 @@ import java.util.Map;
 public class FIRP0247 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
+        if (inputInfo.getRescueDocs() == null || inputInfo.getRescueDocs().size() == 0) {
+            return;
+        }
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            if(firstpageStructureMap != null){
-                if(StringUtils.isEmpty(firstpageStructureMap.get("病人抢救次数"))){
+            if (firstpageStructureMap != null) {
+                if (StringUtils.isEmpty(firstpageStructureMap.get("病人抢救次数"))) {
                     status.set("-1");
                 }
             }

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

@@ -18,6 +18,9 @@ import java.util.Map;
 public class FIRP0249 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
+        if (inputInfo.getRescueDocs() == null || inputInfo.getRescueDocs().size() == 0) {
+            return;
+        }
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             if(firstpageStructureMap != null){

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

@@ -25,7 +25,9 @@ public class FIRP02837 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String age = firstpageStructureMap.get(Content.age);
-            if (!CatalogueUtil.isEmpty(age)) {
+            String newbornAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
+            String newbornAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
+            if (!CatalogueUtil.isEmpty(age) || !CatalogueUtil.isEmpty(newbornAgeMonths) || !CatalogueUtil.isEmpty(newbornAgeDays)) {
                 status.set("0");
             }
         }

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0008.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.hospital.ninghaifuyou.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.Clinical;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+/**
+ * @ClassName : BEH0008
+ * @Description :主诉症状超过3个
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0008 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null) {
+            return;
+        }
+        String chiefText = chiefLabel.getText();
+        if (StringUtil.isBlank(chiefText)) {
+            return;
+        }
+        List<Clinical> clinicals = chiefLabel.getClinicals();
+        if (clinicals != null && clinicals.size() > 3) {
+            status.set("-1");
+            return;
+        }
+
+    }
+}

+ 50 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0041.java

@@ -0,0 +1,50 @@
+package com.lantone.qc.kernel.catalogue.hospital.ninghaifuyou.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.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @Description: 个人史未填写
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0041 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            status.set("0");
+            return;
+        }
+        //宁还妇幼新生儿不判断此规则
+        if(inputInfo.getFirstPageRecordDoc() != null){
+            Map<String, String> firstPageRecordStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            if(StringUtil.isNotBlank(firstPageRecordStructureMap.get("新生儿出生天数"))){
+                return;
+            }
+        }
+
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        //以台州为例,个人史细分很多结构化信息,取其一
+        if (StringUtils.isNotEmpty(structureMap.get("出生、生长史"))
+                || StringUtils.isNotEmpty(structureMap.get("疫区居留史"))
+                || StringUtils.isNotEmpty(structureMap.get("冶游史"))
+                || StringUtils.isNotEmpty(structureMap.get("工作性质"))
+                || StringUtils.isNotEmpty(structureMap.get("化学及放射性毒物接触史"))) {
+            status.set("0");
+            return;
+        }
+
+        if (StringUtil.isNotBlank(inputInfo.getBeHospitalizedDoc().getPersonalLabel().getText())) {
+            status.set("0");
+        }
+    }
+
+}

+ 71 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0042.java

@@ -0,0 +1,71 @@
+package com.lantone.qc.kernel.catalogue.hospital.ninghaifuyou.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.entity.Address;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * @Description: 出生地未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0042 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if(inputInfo.getBeHospitalizedDoc() == null){
+            status.set("0");
+            return;
+        }
+        //宁还妇幼新生儿不判断此规则
+        if(inputInfo.getFirstPageRecordDoc() != null){
+            Map<String, String> firstPageRecordStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            if(StringUtil.isNotBlank(firstPageRecordStructureMap.get("新生儿出生天数"))){
+                return;
+            }
+        }
+
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("出生地"))) {
+            status.set("0");
+            return;
+        }
+
+        String text = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getText();
+        if (StringUtil.isBlank(text)) {
+            return;
+        }
+        List<Address> addresses = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getAddresses();
+        if (ListUtil.isNotEmpty(addresses)) {
+            long count = addresses.stream().filter(i -> {
+                boolean flag = false;
+                if (i != null && StringUtil.isNotBlank(i.getName())) {
+                    if (i.getName().indexOf("出生") > -1) {
+                        flag = true;
+                    } else {
+                        Pattern pattern = Pattern.compile("[\\s\\S]*(出生|生长)[\\s\\S]{0,5}" + i.getName() + "[\\s\\S]*");
+                        flag = pattern.matcher(text).matches();
+                    }
+                }
+                return flag;
+            }).count();
+            if (count > 0) {
+                status.set("0");
+            }
+        }
+        if (text.contains("出生")|| text.contains("见旧病历") || text.contains("见既往病历")) {
+            status.set("0");
+        }
+    }
+
+}

+ 47 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0052.java

@@ -0,0 +1,47 @@
+package com.lantone.qc.kernel.catalogue.hospital.ninghaifuyou.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;
+
+/**
+ * @Description: 婚育史未填写
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0052 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        //宁还妇幼新生儿不判断此规则
+        if(inputInfo.getFirstPageRecordDoc() != null){
+            Map<String, String> firstPageRecordStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            if(StringUtil.isNotBlank(firstPageRecordStructureMap.get("新生儿出生天数"))){
+                return;
+            }
+        }
+        Map<String, String> BehStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        String marry = BehStructureMap.get("婚姻");
+        if (StringUtil.isBlank(marry)) {
+            marry = BehStructureMap.get("婚姻状况");
+        }
+        if (StringUtil.isNotBlank(marry) && marry.contains("未婚")) {
+            status.set("0");
+            return;
+        }
+        if (inputInfo.getBeHospitalizedDoc().getMaritalLabel() == null
+                || StringUtil.isNotBlank(inputInfo.getBeHospitalizedDoc().getMaritalLabel().getText())) {
+            status.set("0");
+        }
+    }
+
+}

+ 68 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH02966.java

@@ -0,0 +1,68 @@
+package com.lantone.qc.kernel.catalogue.hospital.ninghaifuyou.behospitalized;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : BEH02966
+ * @Description :  患者病历书写与性别不符(入院记录)
+ * @Author : 胡敬
+ * @Date: 2020-06-13 15:51
+ */
+@Component
+public class BEH02966 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+
+        //宁还妇幼新生儿不判断此规则
+        if(inputInfo.getFirstPageRecordDoc() != null){
+            Map<String, String> firstPageRecordStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            if(StringUtil.isNotBlank(firstPageRecordStructureMap.get("新生儿出生天数"))){
+                return;
+            }
+        }
+
+        Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        String gender = beHospitalStructureMap.get("性别");
+        if (StringUtil.isBlank(gender)) {
+            return;
+        }
+        List<String> noMatchWords = null;
+        if (gender.contains("男")) {
+            /* 男性不合理词 */
+            noMatchWords = Lists.newArrayList("阴道", "宫颈", "子宫", "宫底", "胎位", "胎数", "胎心",
+                    "宫缩", "宫口", "输卵管", "卵巢", "输卵管", "阴唇", "阴蒂", "阴道前庭", "前庭大腺", "处女膜");
+        } else if (gender.contains("女")) {
+            /* 女性不合理词 */
+            noMatchWords = Lists.newArrayList("睾丸", "阴茎", "精索", "包皮", "附睾", "输精管",
+                    "射精管", "尿道海绵体", "冠状沟", "精阜", "精囊腺");
+        }
+        if (noMatchWords == null || noMatchWords.size() == 0) {
+            return;
+        }
+
+        List<String> keys = Lists.newArrayList("主诉", "现病史", "既往史", "个人史", "体格检查", "一般情况"
+                , "初步诊断", "专科体格检查", "神经系统检查", "实验室检查", "影像学检查");
+        String text = CatalogueUtil.structureMapJoin(beHospitalStructureMap, keys);
+
+        for (String noMatchWord : noMatchWords) {
+            if (text.contains(noMatchWord)) {
+                status.set("-1");
+                info.set(noMatchWord);
+                return;
+            }
+        }
+    }
+}

+ 116 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/behospitalized/BEH0376.java

@@ -0,0 +1,116 @@
+package com.lantone.qc.kernel.catalogue.hospital.ninghaifuyou.behospitalized;
+
+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.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.entity.Family;
+import com.lantone.qc.pub.model.label.MaritalLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 子女健康状况未描述
+ * @author: rengb
+ * @time: 2020/3/10 14:02
+ */
+@Component
+public class BEH0376 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        MaritalLabel maritalLabel = beHospitalizedDoc.getMaritalLabel();
+        //台州市结构化的
+        Map<String, String> structureMap_beh = beHospitalizedDoc.getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap_beh.get("子女健康状况"))) {
+            status.set("0");
+            return;
+        }
+        if (maritalLabel == null || StringUtils.isEmpty(maritalLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        //硬规则 匹配未育
+        String marry = structureMap_beh.get(Content.marry);
+        if (StringUtil.isBlank(marry)) {
+            marry = structureMap_beh.get("婚姻状况");
+        }
+        if ("未婚".equals(marry)) {
+            status.set("0");
+            return;
+        }
+        String maritalText = maritalLabel.getText();
+        if (StringUtil.isNotBlank(maritalText)) {
+            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生", "0子0女", "详见原病历",
+                    "无子女", "见旧病历", "见既往病历");
+            for (String word : words) {
+                if (maritalText.contains(word)) {
+                    status.set("0");
+                    return;
+                }
+            }
+            String regex = ".*\\d+-\\d+-\\d+-0.*";
+            if (maritalText.matches(regex)) {
+                status.set("0");
+                return;
+            }
+            if (maritalText.contains("孕 次")) {
+                maritalText = maritalText.substring(maritalText.indexOf("孕 次"));
+                if (maritalText.contains("健")) {
+                    status.set("0");
+                    return;
+                }
+            }
+        }
+        //未婚 无子女
+        if (maritalLabel.getMaritalStatus() != null && maritalLabel.getMaritalStatus().getName().contains("未婚")) {
+            status.set("0");
+            return;
+        }
+        List<Family> familyList = Lists.newArrayList();
+        List<Family> familiesFl = inputInfo.getBeHospitalizedDoc().getFamilyLabel().getFamilies();
+        List<Family> familiesMl = inputInfo.getBeHospitalizedDoc().getMaritalLabel().getFamily();
+        if (ListUtil.isNotEmpty(familiesFl)) {
+            familyList.addAll(familiesFl);
+        }
+        if (ListUtil.isNotEmpty(familiesMl)) {
+            familyList.addAll(familiesMl);
+        }
+
+        Pattern p = Pattern.compile("[儿子女兄弟姐妹]");
+        List<Family> filterFamilies = familyList
+                .stream()
+                .filter(
+                        i -> i != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && p.matcher(i.getName()).find()).collect(Collectors.toList());
+
+        for (Family family : filterFamilies) {
+            if (family.getDead() != null) {
+                status.set("0");
+                return;
+            } else if (family.getHealthCondition() != null && StringUtil.isNotBlank(family.getHealthCondition().getName())) {
+                status.set("0");
+                return;
+            } else if (family.getDiags() != null && family.getDiags().size() > 0) {
+                status.set("0");
+                return;
+            }
+        }
+    }
+
+}

+ 39 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/firstpagerecord/FIRP0163.java

@@ -0,0 +1,39 @@
+package com.lantone.qc.kernel.catalogue.hospital.ninghaifuyou.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;
+
+/**
+ * @ClassName : FIRP0163
+ * @Description : 身份证项没有填写
+ * @Author : 胡敬
+ * @Date: 2020-03-14 17:28
+ */
+@Component
+public class FIRP0163 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getFirstPageRecordDoc() == null) {
+            status.set("0");
+            return;
+        }
+        if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String idNumber = firstpageStructureMap.get(Content.idNumber);
+            String dept = firstpageStructureMap.get("入院科别");
+            if (StringUtil.isNotBlank(dept) && "NICU".equals(dept)) {
+                status.set("0");
+                return;
+            }
+            if (!CatalogueUtil.isEmpty(idNumber)) {
+                status.set("0");
+            }
+        }
+    }
+}

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

@@ -0,0 +1,92 @@
+package com.lantone.qc.kernel.catalogue.hospital.ninghaifuyou.leavehospital;
+
+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.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 bhThings = lhStructureMap.get("入院情况");
+            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 (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");
+                }
+            }
+        }
+    }
+}

+ 4 - 18
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/operationdiscussion/OPE02930.java

@@ -38,12 +38,12 @@ public class OPE02930 extends QCCatalogue {
                 continue;
             }
             Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
-            String operationStartDateStr = operationRecordStructureMap.get("手术日期");
-            String operationEndDateStr = operationRecordStructureMap.get("手术日期");
+            String operationStartDateStr = operationRecordStructureMap.get("手术开始时间");
+            String operationEndDateStr = operationRecordStructureMap.get("手术结束时间");
             if (StringUtil.isEmpty(operationStartDateStr) || StringUtil.isEmpty(operationEndDateStr)) {
                 continue;
             }
-            if (!isDate(operationStartDateStr) || !isDate(operationEndDateStr)) {
+            if (StringUtil.parseDateTime(operationEndDateStr) == null) {
                 continue;
             }
             Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
@@ -60,7 +60,7 @@ public class OPE02930 extends QCCatalogue {
                     return;
                 }
 
-                if (!isDate(discussionRecordDateStr)) {
+                if (StringUtil.parseDateTime(discussionRecordDateStr) == null) {
                     status.set("0");
                     return;
                 }
@@ -74,18 +74,4 @@ public class OPE02930 extends QCCatalogue {
             }
         }
     }
-
-    /**
-     * 判断是否为日期
-     *
-     * @param dateStr
-     */
-    private boolean isDate(String dateStr) {
-        try {
-            StringUtil.parseDateTime(dateStr);
-            return true;
-        } catch (Exception e) {
-            return false;
-        }
-    }
 }

+ 10 - 10
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/operationdiscussion/OPE0369.java

@@ -64,8 +64,8 @@ public class OPE0369 extends QCCatalogue {
             for (OperationDoc operationDoc : operationDocs) {
                 if (operationDoc.getOperationRecordDoc() != null) {
                     Map<String, String> operationDocStructureMap = operationDoc.getOperationRecordDoc().getStructureMap();
-                    operationStartDate = operationDocStructureMap.get("手术日期");
-                    if (operationStartDate.contains("年月日")) {
+                    operationStartDate = operationDocStructureMap.get("手术开始时间");
+                    if (StringUtil.parseDateTime(operationStartDate) == null) {
                         continue;
                     }
                     if (StringUtil.isNotBlank(operationStartDate)) {
@@ -107,9 +107,9 @@ public class OPE0369 extends QCCatalogue {
                             if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(recordDateStr), date, Long.valueOf(24 * 60))
                                     && (
                                     ((StringUtil.isNotBlank(makeTitle) && makeTitle.contains("主刀")) || (StringUtil.isNotBlank(writTitle) && writTitle.contains("主刀")))
-                                    ||((StringUtil.isNotBlank(makeTitle) && makeTitle.contains("主任")) || (StringUtil.isNotBlank(writTitle) && writTitle.contains("主任")))
-                                    ||((StringUtil.isNotBlank(makeTitle) && makeTitle.contains("三级")) || (StringUtil.isNotBlank(writTitle) && writTitle.contains("三级")))
-                                    || ((StringUtil.isNotBlank(makeTitle) && makeTitle.contains("术前"))|| (StringUtil.isNotBlank(writTitle) && writTitle.contains("术前")))
+                                            || ((StringUtil.isNotBlank(makeTitle) && makeTitle.contains("主任")) || (StringUtil.isNotBlank(writTitle) && writTitle.contains("主任")))
+                                            || ((StringUtil.isNotBlank(makeTitle) && makeTitle.contains("三级")) || (StringUtil.isNotBlank(writTitle) && writTitle.contains("三级")))
+                                            || ((StringUtil.isNotBlank(makeTitle) && makeTitle.contains("术前")) || (StringUtil.isNotBlank(writTitle) && writTitle.contains("术前")))
                             )) {
                                 operateCount++;
                             }
@@ -143,22 +143,22 @@ public class OPE0369 extends QCCatalogue {
                 continue;
             }
             Map<String, String> structureMap = operationRecordDoc.getStructureMap();
-            String operationStartDateStr = structureMap.get("手术日期");
-            if (StringUtil.isNotBlank(operationStartDateStr) && !operationStartDateStr.contains("年月日")) {
+            String operationStartDateStr = structureMap.get("手术开始时间");
+            if (StringUtil.isNotBlank(operationStartDateStr) && StringUtil.parseDateTime(operationStartDateStr) != null) {
                 Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
                 operationStartDate = DateUtil.dateZeroClear(operationStartDate);
                 if (operationStartDate != null) {
                     /* 放第一个手术记录的日期到operationDateList */
                     if (operationDateList.size() == 0) {
                         operationDate = new HashMap<>();
-                        operationDate.put("手术日期", operationStartDate);
+                        operationDate.put("手术开始时间", operationStartDate);
                         operationDateList.add(operationDate);
                         continue;
                     }
                     /* 如果其中一个手术记录的开始时间到结束时间之间还包含另一个手术,就不往operationDateList里加 */
                     boolean findInnerOperation = false;
                     for (Map<String, Date> date : operationDateList) {
-                        Date listStartDate = DateUtil.dateZeroClear(date.get("手术日期"));
+                        Date listStartDate = DateUtil.dateZeroClear(date.get("手术开始时间"));
                         if (listStartDate.equals(operationStartDate)) {
                             findInnerOperation = true;
                             break;
@@ -166,7 +166,7 @@ public class OPE0369 extends QCCatalogue {
                     }
                     if (!findInnerOperation) {
                         operationDate = new HashMap<>();
-                        operationDate.put("手术日期", operationStartDate);
+                        operationDate.put("手术开始时间", operationStartDate);
                         operationDateList.add(operationDate);
                     }
                 }

+ 9 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/preoperativediscussion/PRE0328.java

@@ -5,10 +5,12 @@ import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
@@ -43,11 +45,11 @@ public class PRE0328 extends QCCatalogue {
             OperationRecordDoc operationRecordDoc = operationDocs.get(0).getOperationRecordDoc();
             String startTime = "";
             if (operationRecordDoc != null) {
-                startTime = operationRecordDoc.getStructureMap().get("手术日期");
+                startTime = operationRecordDoc.getStructureMap().get("手术开始时间");
             }
 
             if (StringUtil.isNotBlank(startTime) && StringUtil.isNotBlank(admisTime) &&
-                    !startTime.contains("年月日")) {
+                    StringUtil.parseDateTime(startTime) != null) {
                 if (!CatalogueUtil.compareTime(
                         StringUtil.parseDateTime(admisTime),
                         StringUtil.parseDateTime(startTime),
@@ -101,22 +103,22 @@ public class PRE0328 extends QCCatalogue {
                 continue;
             }
             Map<String, String> structureMap = operationRecordDoc.getStructureMap();
-            String operationStartDateStr = structureMap.get("手术日期");
-            if (StringUtil.isNotBlank(operationStartDateStr) && !operationStartDateStr.contains("年月日")) {
+            String operationStartDateStr = structureMap.get("手术开始时间");
+            if (StringUtil.isNotBlank(operationStartDateStr) && StringUtil.parseDateTime(operationStartDateStr) != null) {
                 Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
                 operationStartDate = DateUtil.dateZeroClear(operationStartDate);
                 if (operationStartDate != null) {
                     /* 放第一个手术记录的日期到operationDateList */
                     if (operationDateList.size() == 0) {
                         operationDate = new HashMap<>();
-                        operationDate.put("手术日期", operationStartDate);
+                        operationDate.put("手术开始时间", operationStartDate);
                         operationDateList.add(operationDate);
                         continue;
                     }
                     /* 如果其中一个手术记录的开始时间到结束时间之间还包含另一个手术,就不往operationDateList里加 */
                     boolean findInnerOperation = false;
                     for (Map<String, Date> date : operationDateList) {
-                        Date listStartDate = DateUtil.dateZeroClear(date.get("手术日期"));
+                        Date listStartDate = DateUtil.dateZeroClear(date.get("手术开始时间"));
                         if (listStartDate.equals(operationStartDate)) {
                             findInnerOperation = true;
                             break;
@@ -124,7 +126,7 @@ public class PRE0328 extends QCCatalogue {
                     }
                     if (!findInnerOperation) {
                         operationDate = new HashMap<>();
-                        operationDate.put("手术日期", operationStartDate);
+                        operationDate.put("手术开始时间", operationStartDate);
                         operationDateList.add(operationDate);
                     }
                 }

+ 6 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/threelevelward/THR02900.java

@@ -68,13 +68,16 @@ public class THR02900 extends QCCatalogue {
             } else {
                 firstAssistant = structureMap.get("一助");
                 //取得手术时间截取结束时间(格式 2020-07-24 10:30-2020-07-24 11:45)
-                opeEndTime = structureMap.get("手术日期");
-                if (StringUtil.isBlank(opeEndTime) || opeEndTime.contains("年月日")) {
+                opeEndTime = structureMap.get("手术结束时间");
+                if (StringUtil.isBlank(opeEndTime) || StringUtil.parseDateTime(opeEndTime) == null) {
                     continue;
                 }
             }
             String chiefSurgeon = structureMap.get("主刀医师");
-            if (chiefSurgeon.contains("、")) {
+            if (StringUtil.isBlank(chiefSurgeon)) {
+                chiefSurgeon = structureMap.get("手术人员");
+            }
+            if (StringUtil.isNotBlank(chiefSurgeon) && chiefSurgeon.contains("、")) {
                 chiefSurgeon = chiefSurgeon.split("、")[0];
             }
             Date opeEndDate = CatalogueUtil.parseStringDate(opeEndTime);

+ 1 - 10
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/ninghaifuyou/threelevelward/THR03090.java

@@ -40,16 +40,7 @@ public class THR03090 extends QCCatalogue {
         String operationStartDate = "";
         if (operationDocs.get(operationDocs.size() - 1).getOperationRecordDoc() != null) {
             Map<String, String> operationDocStructureMap = operationDocs.get(operationDocs.size() - 1).getOperationRecordDoc().getStructureMap();
-            operationStartDate = operationDocStructureMap.get("手术日期");
-            if (StringUtil.isNotBlank(operationStartDate)) {
-                if (operationStartDate.contains("结束")) {
-                    operationStartDate = operationStartDate.substring(0, operationStartDate.indexOf("结束")).replace("开始:", "");
-                }
-                if (operationStartDate.contains("年月日")) {
-                    operationStartDate = DateUtil.nowString();
-                }
-            }
-
+            operationStartDate = operationDocStructureMap.get("手术开始时间");
         }
 
         List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();

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

@@ -172,6 +172,7 @@ public class Content {
     public static final String leaveHospitalDoctorAdvice = "出院医嘱";
     public static final String dp_out = "损伤、中毒外部原因";
     public static final String pathologyDiagnose = "病理诊断";
+    public static final String pathologyDiagnoseCost = "病理诊断费";
     public static final String admitPath = "入院途径";
     public static final String admisTime = "入院时间"; //病案首页用
     public static final String admitDept = "入院科别";

+ 5 - 0
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoBeHospitalizedDocTrans.java

@@ -68,10 +68,15 @@ public class NingHaiFuYaoBeHospitalizedDocTrans extends ModelDocTrans {
             "户口地址=籍贯",
             "联系地址=住址",
             "入院时间=入院日期",
+            "婚姻状况=婚姻",
             "月经婚育史=婚育史",
+            "家庭史=家族史",
             "实验室检查=辅助检查",
+            "临床诊断=初步诊断",
             "初步诊断医师签名:=初步诊断医师签名",
+            "医师签名=初步诊断医师签名",
             "初步诊断医师签名:时 间:=初步诊断签名时间",
+            "日期=初步诊断签名时间",
             "补充诊断医师签名:时 间:=补充诊断签名时间",
             "补充诊断医师签名:=补充诊断医师签名"
     );

+ 2 - 0
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoFirstCourseRecordDocTrans.java

@@ -75,8 +75,10 @@ public class NingHaiFuYaoFirstCourseRecordDocTrans extends ModelDocTrans {
     private List<String> keyContrasts = Lists.newArrayList(
             "时间=病历日期",
             "病历特点=病例特点",
+            "一. 病例特点=病例特点",
             "入院查体=查体",
             "辅助检查=辅检",
+            "入院诊断=初步诊断",
             "医师签名=医生签名",
             "2.诊断依据=诊断依据",
             "3.鉴别诊断=鉴别诊断",

+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoLeaveHospitalDocTrans.java

@@ -74,6 +74,7 @@ public class NingHaiFuYaoLeaveHospitalDocTrans extends ModelDocTrans {
             "实际住院天数=住院天数",
             "入院情况=入院情况",
             "诊疗经过=诊治经过",
+            "住院经过=诊治经过",
             "诊治经过(入院情况、治疗经过及重要辅助检查)=诊治经过",
             "入院情况=病史摘要",
             "辅助检查=主要实验室检查及器械检验结果",

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoOperationDocTrans.java

@@ -210,7 +210,7 @@ public class NingHaiFuYaoOperationDocTrans extends ModelDocTrans {
             "手术经过=手术经过及处理",
             "手术经过(包括病人体位、切口处理、病灶所见及手术步骤等)=手术经过及处理",
             "术后诊断=术中后诊断",
-            "手术人员=主刀医师",
+            "主刀=主刀医师",
             "医师签名=记录医生",
             "患者手术后情况=患者术后情况",
             "麻醉人员=麻醉医师",

+ 28 - 35
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoBeHospitalizedHtmlAnalysis.java

@@ -27,7 +27,7 @@ public class NingHaiFuYaoBeHospitalizedHtmlAnalysis implements NingHaiFuYaoHtmlA
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;", " ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Document doc = Jsoup.parse(html);
@@ -47,12 +47,12 @@ public class NingHaiFuYaoBeHospitalizedHtmlAnalysis implements NingHaiFuYaoHtmlA
         return map;
     }
 
-    //宁海第一人民医院
+    //宁海妇保医院
     private void analysisBeHospitalized(Document doc, Map<String, String> map) {
-        List<String> titles = Lists.newArrayList("姓 名","姓名","现 住 址","身份证号码","性别", "性 别","生于","父母姓名","联系电话","住址", "住 址","年 龄","年龄","电话号码",
-                "出生地", "出 生 地", "职 业", "职业", "入院时间","户籍所在地","户口地址", "入院日期","记录时间","记录日期","民 族", "民族", "病史陈述者","职 业", "联系人及关系",
-                "婚 姻", "婚姻", "联系人电话","联 系 人", "主诉", "主 诉", "现 病 史","现病史", "既 往 史", "既往史", "出生史","个 人 史", "个人史", "婚 育 史",
-                "月 经 史", "月经婚育史", "家 族 史","一般测量","实验室检查", "特殊检查","临床诊断","记录医生", "初步诊断", "补充诊断","医师签名","日 期");
+        List<String> titles = Lists.newArrayList("姓 名", "姓名", "户籍地址", "现 住 址", "身份证号码", "性别", "性 别", "生于", "父母姓名", "联系电话", "住址", "住 址", "年 龄", "年龄", "联系地址",
+                "电话号码", "出生地", "出 生 地", "职 业", "职业", "产前检查", "入院时间", "户籍所在地", "户口地址", "入院日期", "记录时间", "记录日期", "民 族", "民族", "病史陈述者", "职 业", "联系人及关系",
+                "婚 姻", "婚姻", "婚姻状况", "孕/ 产次", "末次月经", "预 产 期", "联系人电话", "联 系 人", "联系人", "身份证号", "联系方式", "主诉", "主 诉", "现 病 史", "现病史", "既 往 史", "既往史", "既 往史", "既 往史 ", "系统回顾", "出生史", "个 人 史", "个人史", "月经史", "婚 育 史",
+                "月 经 史", "月经婚育史", "婚育史", "家 族 史", "家庭史", "家族史", "一般测量", "实验室检查", "特殊检查", "临床诊断", "记录医生", "初步诊断", "补充诊断", "医师签名", "日 期");
         String htmlContent = NingHaiFuYaoHtmlAnalysisUtil.blockDivToStr(doc.selectFirst("body").child(0).getElementById("main"), true);
         if (StringUtil.isNotBlank(htmlContent)) {
             htmlContent = htmlContent.replaceAll("[   ]", " ").replace("第 ( ) 页", "");
@@ -60,35 +60,30 @@ public class NingHaiFuYaoBeHospitalizedHtmlAnalysis implements NingHaiFuYaoHtmlA
             disDiagnose(map, Lists.newArrayList("初步诊断"), "医师签名:");
             disDiagnose(map, Lists.newArrayList("初步诊断医师签名:"), "时 间:");
             //入院记录 体格检查、补充及专科情况里获取辅助检查提取
-            getAuxiliary(map,Lists.newArrayList("体格检查","补充及专科情况","补充及专科情况"),htmlContent);
+            getAuxiliary(map, Lists.newArrayList("体格检查", "补充及专科情况", "补充及专科情况"), htmlContent);
             //婚育史特殊符号处理
 //            removeSymbol(map,"□","婚育史");
         }
     }
 
-    private void getAuxiliary(Map<String, String> map, ArrayList<String> newArrayList,String htmlContent) {
+    private void getAuxiliary(Map<String, String> map, ArrayList<String> newArrayList, String htmlContent) {
         CommonAnalysisUtil.html2StructureMapNoColon(newArrayList, htmlContent, map);
         //家族史其他内容清理
-        if(map.keySet().contains("家族史"))
-        {
+        if (map.keySet().contains("家族史")) {
             String fimaly = map.get("家族史");
-            if(map.keySet().contains("体格检查"))
-            {
-                removeMapVal(map,fimaly,"体格检查","家族史");
-                if(map.keySet().contains("补充及专科情况")&&StringUtil.isBlank(map.get("辅助检查")))
-                {
+            if (map.keySet().contains("体格检查")) {
+                removeMapVal(map, fimaly, "体格检查", "家族史");
+                if (map.keySet().contains("补充及专科情况") && StringUtil.isBlank(map.get("辅助检查"))) {
                     String auxiliary = map.get("补充及专科情况");
                     CommonAnalysisUtil.html2StructureMapNoColon(
-                            Lists.newArrayList("辅助检查"),auxiliary, map);
-                    if(map.get("辅助检查").contains("初步诊断")&&StringUtil.isNotBlank(map.get("初步诊断"))
-                            &&map.get("辅助检查").contains(map.get("初步诊断")))
-                    {
+                            Lists.newArrayList("辅助检查"), auxiliary, map);
+                    if (map.get("辅助检查").contains("初步诊断") && StringUtil.isNotBlank(map.get("初步诊断"))
+                            && map.get("辅助检查").contains(map.get("初步诊断"))) {
                         String val = map.get("辅助检查");
-                        if(val.contains(map.get("初步诊断")))
-                        {
-                            val = val.split("初步诊断")[0].replaceAll("初步诊断","")
-                                    .replaceAll(":","").trim();
-                            map.put("辅助检查",val);
+                        if (val.contains(map.get("初步诊断"))) {
+                            val = val.split("初步诊断")[0].replaceAll("初步诊断", "")
+                                    .replaceAll(":", "").trim();
+                            map.put("辅助检查", val);
 
                         }
                     }
@@ -98,26 +93,24 @@ public class NingHaiFuYaoBeHospitalizedHtmlAnalysis implements NingHaiFuYaoHtmlA
         }
     }
 
-    private void removeMapVal(Map<String, String> map, String val,String mapkey,String changeKey) {
-        if(val.contains(map.get(mapkey)))
-        {
-            val = val.split(map.get(mapkey))[0].replaceAll(mapkey,"").trim();
-            map.put(changeKey,val);
+    private void removeMapVal(Map<String, String> map, String val, String mapkey, String changeKey) {
+        if (val.contains(map.get(mapkey))) {
+            val = val.split(map.get(mapkey))[0].replaceAll(mapkey, "").trim();
+            map.put(changeKey, val);
         }
     }
 
     /**
      * @Author songxl
      * @Description map中特殊符号处理
-     * @Date  2021/4/8
-     * @Param [map,symbol,key]
+     * @Date 2021/4/8
+     * @Param [map, symbol, key]
      * @Return void
      * @MethodName removeSymbol
      */
-    private void removeSymbol(Map<String, String> map,String symbol,String key) {
-        if(map.keySet().contains(key))
-        {
-            map.put(key,map.get(key).replaceAll(symbol,"").trim());
+    private void removeSymbol(Map<String, String> map, String symbol, String key) {
+        if (map.keySet().contains(key)) {
+            map.put(key, map.get(key).replaceAll(symbol, "").trim());
         }
     }
 

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoClinicBloodEffectHtmlAnalysis.java

@@ -26,7 +26,7 @@ public class NingHaiFuYaoClinicBloodEffectHtmlAnalysis implements NingHaiFuYaoHt
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoClinicalBloodHtmlAnalysis.java

@@ -27,7 +27,7 @@ public class NingHaiFuYaoClinicalBloodHtmlAnalysis implements NingHaiFuYaoHtmlAn
                 "开始时间", "结束时间", "输血过程");
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoConsultationHtmlAnalysis.java

@@ -31,7 +31,7 @@ public class NingHaiFuYaoConsultationHtmlAnalysis implements NingHaiFuYaoHtmlAna
                     "会诊类型", "被邀医院", "被邀科室", "被邀医师", "申请时间", "患者病情及诊疗经过、申请会诊的理由及目的", "申请会诊科别",
                     "被邀会诊科别", "申请会诊医师", "会诊意见", "会诊时间", "科主任", "会诊到达时间", "查体", "会诊建议",
                     "会诊诊断", "由受邀医生填写,本次会诊是否必要","会诊科室", "会诊医师", "外院会诊医师所在医疗机构名称", "会诊医师所在医疗机构名称");
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             String htmlContent = null;

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoConsultationRecordHtmlAnalysis.java

@@ -24,7 +24,7 @@ public class NingHaiFuYaoConsultationRecordHtmlAnalysis implements NingHaiFuYaoH
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoCrisisValueReportHtmlAnalysis.java

@@ -24,7 +24,7 @@ public class NingHaiFuYaoCrisisValueReportHtmlAnalysis implements NingHaiFuYaoHt
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoCriticallyIllNoticeHtmlAnalysis.java

@@ -29,7 +29,7 @@ public class NingHaiFuYaoCriticallyIllNoticeHtmlAnalysis implements NingHaiFuYao
             List<String> titles = Lists.newArrayList("姓名", "性别", "年龄", "出生日期", "科室", "科别", "病区", "床号", "住院号",
                     "单位或地址", "联系电话", "初步诊断", "临床诊断", "病情摘要", "主要症状", "体格检查", "辅助检查", "告知医师签名",
                     "告知时间", "患方意见", "患方签名", "手印说明", "与患者关系", "患者(或被授权人)签名与患方关系", "医师签名", "时间", "签字时间");
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Document doc = Jsoup.parse(html);

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoDeathCaseDiscussHtmlAnalysis.java

@@ -25,7 +25,7 @@ public class NingHaiFuYaoDeathCaseDiscussHtmlAnalysis implements NingHaiFuYaoHtm
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTypeId = args[2];
             Document doc = Jsoup.parse(html);
             Element bigDivElement = doc.selectFirst("body").child(0).getElementById("main");

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoDeathRecordHtmlAnalysis.java

@@ -27,7 +27,7 @@ public class NingHaiFuYaoDeathRecordHtmlAnalysis implements NingHaiFuYaoHtmlAnal
         try {
             List<String> titles = Lists.newArrayList("入院日期", "入院时间", "死亡时间", "记录时间", "入院诊断", "入院情况",
                     "诊疗经过(重点记录病情演变、抢救经过)", "诊治经过", "死亡原因", "死亡诊断", "医师签字");
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Document doc = Jsoup.parse(html);

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoDifficultCaseDiscussHtmlAnalysis.java

@@ -27,7 +27,7 @@ public class NingHaiFuYaoDifficultCaseDiscussHtmlAnalysis implements NingHaiFuYa
         try {
             List<String> titles = Lists.newArrayList("姓名", "性别", "年龄", "出生日期", "科别", "住址(或单位)", "讨论日期",
                     "讨论主持人", "参加讨论人", "发言记录(包括病历简要、讨论意见及结论)", "病史简介", "讨论意见", "主持人小结意见", "记录者(签名)", "科主任(签名)");
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Document doc = Jsoup.parse(html);

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoDutyShiftSystemHtmlAnalysis.java

@@ -24,7 +24,7 @@ public class NingHaiFuYaoDutyShiftSystemHtmlAnalysis implements NingHaiFuYaoHtml
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");

+ 15 - 5
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoFirstCourseRecordHtmlAnalysis.java

@@ -25,21 +25,31 @@ public class NingHaiFuYaoFirstCourseRecordHtmlAnalysis implements NingHaiFuYaoHt
     public Map<String, String> analysis(String... args) {
         Map<String, String> structureMap = Maps.newLinkedHashMap();
         try {
-            List<String> titles = Lists.newArrayList("一. 病例特点", "二. 拟诊讨论",
-                    "诊断依据","初步诊断","鉴别诊断","诊疗计划","医师签名",
-                    "三. 诊疗计划","三、诊疗计划", "医师签名");
-            Document doc = Jsoup.parse(args[0]);
+            List<String> titles = Lists.newArrayList("一. 病例特点", "二. 拟诊讨论", "入院诊断",
+                    "诊断依据", "初步诊断", "鉴别诊断", "诊疗计划", "医师签名",
+                    "三. 诊疗计划", "三、诊疗计划", "医师签名");
+            Document doc = Jsoup.parse(args[0].replace("&nbsp;", " "));
             String htmlContent = NingHaiFuYaoHtmlAnalysisUtil.blockDivToStr(doc.selectFirst("body").child(0), true);
             if (StringUtil.isNotBlank(htmlContent)) {
+                htmlContent = htmlContent.replace(":", ":").replace("患者", " 患者");
+                String date = CommonAnalysisUtil.NHExtractDate(htmlContent);
+                if (date != null) {
+                    structureMap.put("病历日期", date);
+                    htmlContent = htmlContent.replace(date, "").trim();
+                }
+                if (!htmlContent.contains("一. 病例特点")) {
+                    htmlContent = "一. 病例特点:" + htmlContent;
+                }
                 CommonAnalysisUtil.html2StructureMap(titles, htmlContent, structureMap);
             }
             if (structureMap.containsKey("二.拟诊讨论")) {
                 List<String> listTitle = CommonAnalysisUtil.sortTitles(
                         Lists.newArrayList("1.初步诊断", "2.诊断依据", "3.鉴别诊断"
-                                ,"诊断依据","鉴别诊断","初步诊断"), structureMap.get("二.拟诊讨论")
+                                , "诊断依据", "鉴别诊断", "初步诊断"), structureMap.get("二.拟诊讨论")
                 );
                 CommonAnalysisUtil.cutByTitles(structureMap.get("二.拟诊讨论"), listTitle, 0, structureMap);
             }
+
             NingHaiFuYaoHtmlAnalysisUtil.insertModuleId(modeId, args[2], structureMap);
         } catch (Exception e) {
             log.error(e.getMessage(), e);

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoLeaveHospitalHtmlAnalysis.java

@@ -28,8 +28,8 @@ public class NingHaiFuYaoLeaveHospitalHtmlAnalysis implements NingHaiFuYaoHtmlAn
             List<String> titles = Lists.newArrayList("性别", "婚姻", "入院日期", "出院日期", "住院天数","入院诊断", "出院诊断","分娩日期",
                     "分娩方式", "诊治经过(入院情况、治疗经过及重要辅助检查)","手术指征", "入院情况", "辅助检查","诊治经过", "住院经过", "入院后检查化验结果",
                     "入院后化验检查结果", "诊疗经过", "治疗结果", "转归情况", "出院计划","出院情况","出院时情况", "治疗效果","治疗结果", "出院医嘱",
-                    "特殊资料检查号码","X光拍片","MRI","CT","病理切片","医师签字", "日期","主治医师","住院医师");
-            String html = args[0];
+                    "特殊资料检查号码","特殊检查资料号","X光拍片","MRI","CT","病理切片","医师签字", "日期","主治医师","住院医师");
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Document doc = Jsoup.parse(html);

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoOperationHtmlAnalysis.java

@@ -24,7 +24,7 @@ public class NingHaiFuYaoOperationHtmlAnalysis implements NingHaiFuYaoHtmlAnalys
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");

+ 70 - 66
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoOperationRecordHtmlAnalysis.java

@@ -28,17 +28,14 @@ public class NingHaiFuYaoOperationRecordHtmlAnalysis implements NingHaiFuYaoHtml
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;", " ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element headerElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("header");
             //宁海妇幼的手术记录header不是table
-            if(headerElement.selectFirst("tbody")==null)
-            {
+            if (headerElement.selectFirst("tbody") == null) {
                 analysisHeader(headerElement, map);
-            }
-            else
-            {
+            } else {
                 NingHaiFuYaoHtmlAnalysisUtil.tableStyle1InsertMap(Jsoup.parse(html).selectFirst("body").child(0).getElementById("header"), map);
             }
             map.forEach((key, value) -> map.put(key, value.replace("\n", "")));
@@ -70,35 +67,53 @@ public class NingHaiFuYaoOperationRecordHtmlAnalysis implements NingHaiFuYaoHtml
                 String operatorDateStr = map.get("手术日期");
                 if (operatorDateStr.contains("--")) {
                     String[] operatorDate = operatorDateStr.split("--");
-                    map.put("手术开始时间", operatorDate[0]);
-                    map.put("手术结束时间", operatorDate[1]);
+                    map.put("手术开始时间", operatorDate[0].replaceAll(":", ":")
+                            .replaceAll(": ", ":")
+                            .replaceAll(": ", ":"));
+                    map.put("手术结束时间", operatorDate[1].replaceAll(":", ":")
+                            .replaceAll(": ", ":")
+                            .replaceAll(": ", ":"));
                 }
             }
             //宁海产科手术记录处理
-            if(map.containsKey("开始")&&map.containsKey("结束")
-                    &&!map.containsKey("手术开始时间")&&!map.containsKey("手术结束时间")
-                    &&!map.containsKey("手术日期"))
-            {
+            if (map.containsKey("开始") && map.containsKey("结束")
+                    && !map.containsKey("手术开始时间") && !map.containsKey("手术结束时间")
+                    && !map.containsKey("手术日期")) {
                 map.put("手术开始时间", map.get("开始"));
                 String endTime = map.get("结束");
-                if(endTime.contains("手术名称"))
-                {
+                if (endTime.contains("手术名称")) {
                     CommonAnalysisUtil.html2StructureMapNoColon
-                            (Lists.newArrayList("手术名称","术前诊断","手术指征","术后诊断"),endTime,map);
+                            (Lists.newArrayList("手术名称", "术前诊断", "手术指征", "术后诊断"), endTime, map);
                     endTime = endTime.split("手术名称")[0].trim();
                 }
                 map.put("手术结束时间", endTime);
-                map.put("手术日期",map.get("手术开始时间"));
+                map.put("手术日期", map.get("手术开始时间"));
 
             }
 
-            if(map.containsKey("手术开始时间") && map.containsKey("手术结束时间")){
-                map.put("手术日期",map.get("手术开始时间"));
+            if (map.containsKey("手术开始时间") && map.containsKey("手术结束时间")) {
+                map.put("手术日期", map.get("手术开始时间") + "-" + map.get("手术结束时间"));
+            }
+            if (map.containsKey("手术时间")) {
+                if (map.get("手术时间").contains("--")) {
+
+                } else if (map.get("手术时间").contains("-")) {
+                    map.put("手术开始时间", map.get("手术时间").split("-")[0].replaceAll(":", ":")
+                            .replaceAll(": ", ":")
+                            .replaceAll(": ", ":"));
+                    map.put("手术结束时间", map.get("手术时间").split("-")[1].replaceAll(":", ":")
+                            .replaceAll(": ", ":")
+                            .replaceAll(": ", ":"));
+                }
+            }
+
+            if (map.containsKey("手术时间") && map.get("手术时间").contains("-")) {
+
             }
 
             //这些科室的手术时间写了好几种格式分别处理
 //           List<String> departmentList =  Lists.newArrayList("妇科","十六病区VIP");
-           getOperaTime(map,null);
+            getOperaTime(map, null);
             CommonAnalysisUtil.makeEmpty(map, "医生签名");
             NingHaiFuYaoHtmlAnalysisUtil.insertModuleId(modeId, recTypeId, map);
         } catch (Exception e) {
@@ -107,71 +122,60 @@ public class NingHaiFuYaoOperationRecordHtmlAnalysis implements NingHaiFuYaoHtml
         return map;
     }
 
-    private void getOperaTime(Map<String, String> map,List<String> departmentList) {
+    private void getOperaTime(Map<String, String> map, List<String> departmentList) {
 //        if(map.containsKey("病区")&&departmentList.contains(map.get("病区")))
-        if(map.containsKey("病区"))
-        {
+        if (map.containsKey("病区")) {
             //手术日期: 2021-01-06 手术时间: 上午
-            if(map.containsKey("手术日期")&&map.containsKey("手术时间"))
-            {
-                if(map.get("手术时间").contains(":")|map.get("手术时间").contains(": ")
-                                            |map.get("手术时间").contains(": "))
-                {
-                    map.put("手术时间",map.get("手术时间").replaceAll(":",":")
-                                                        .replaceAll(": ",":")
-                                                        .replaceAll(": ",":"));
+            if (map.containsKey("手术日期") && map.containsKey("手术时间")) {
+                if (map.get("手术时间").contains(":") | map.get("手术时间").contains(": ")
+                        | map.get("手术时间").contains(": ")) {
+                    map.put("手术时间", map.get("手术时间").replaceAll(":", ":")
+                            .replaceAll(": ", ":")
+                            .replaceAll(": ", ":"));
                 }
                 Pattern p = Pattern.compile("[0-9]+:[0-9][0-9]|[0-9][0-9]+:[0-9][0-9]");
                 Matcher m = p.matcher(map.get("手术时间"));
 
                 String pattern = "(上午|下午|晚上|凌晨|中午|晚)";
-                if(StringUtil.isNotBlank(map.get("手术时间"))&& Pattern.matches(pattern, map.get("手术时间"))){
-                    map.put("手术时间",map.get("手术日期"));
+                if (StringUtil.isNotBlank(map.get("手术时间")) && Pattern.matches(pattern, map.get("手术时间"))) {
+                    map.put("手术时间", map.get("手术日期"));
                 }
                 //如果手术时间为时刻没有具体某天例:(手术日期: 2021年01月05日 手术时间: 12:10)
-                else if(m.find())
-                {
-                    map.put("手术时间",map.get("手术日期")+m.group(0));
+                else if (m.find()) {
+                    map.put("手术时间", map.get("手术日期") + m.group(0));
                 }
             }
             //手术时间:2021-01-05 10:12-10:40 或 开始时间-结束时间 排除没有日期的手术时间10:12-10:40
             String operationStartDateStr = map.get("手术时间");
-            if(StringUtil.isNotBlank(operationStartDateStr)&&operationStartDateStr.contains("-")&&
-                    operationStartDateStr.length()>11)
-            {
+            if (StringUtil.isNotBlank(operationStartDateStr) && operationStartDateStr.contains("-") &&
+                    operationStartDateStr.length() > 11) {
                 //手术时间 -> 2021.01.1210:55--12:15
-                if(operationStartDateStr.contains("--"))
-                {
-                    operationStartDateStr = operationStartDateStr.substring(0,operationStartDateStr.lastIndexOf("--")).trim();
+                if (operationStartDateStr.contains("--")) {
+                    operationStartDateStr = operationStartDateStr.substring(0, operationStartDateStr.lastIndexOf("--")).trim();
+                } else {
+                    operationStartDateStr = operationStartDateStr.substring(0, operationStartDateStr.lastIndexOf("-")).trim();
                 }
-                else
-                {
-                    operationStartDateStr = operationStartDateStr.substring(0,operationStartDateStr.lastIndexOf("-")).trim();
-                }
-                if(StringUtil.parseDateTime(operationStartDateStr, Content.dateFormats)!=null)
-                {
-                    map.put("手术时间",operationStartDateStr);
+                if (StringUtil.parseDateTime(operationStartDateStr, Content.dateFormats) != null) {
+                    map.put("手术时间", operationStartDateStr);
                 }
             }
             //手术日期 -> 2021年01月15日15时25分- 2021年01月15日16时05分 无手术时间
-            if(map.containsKey("手术日期"))
-            {
+            if (map.containsKey("手术日期")) {
                 Pattern p = Pattern.compile("[0-9]{4}年[0-9]+月[0-9]+日[0-9]+时[0-9]+分");
                 Matcher m = p.matcher(map.get("手术日期"));
                 if (m.find()) {
-                    map.put("手术日期",m.group(0));
+                    map.put("手术日期", m.group(0));
                 }
             }
             //手术时间:2021-01-06 上午
-            if(map.containsKey("手术时间"))
-            {
-                map.put("手术时间",map.get("手术时间")
-                        .replaceAll("上午","")
-                        .replaceAll("下午","")
-                        .replaceAll("中午","")
-                        .replaceAll("晚上","")
-                        .replaceAll("晚","")
-                        .replaceAll("凌晨","").trim());
+            if (map.containsKey("手术时间")) {
+                map.put("手术时间", map.get("手术时间")
+                        .replaceAll("上午", "")
+                        .replaceAll("下午", "")
+                        .replaceAll("中午", "")
+                        .replaceAll("晚上", "")
+                        .replaceAll("晚", "")
+                        .replaceAll("凌晨", "").trim());
             }
         }
     }
@@ -183,13 +187,13 @@ public class NingHaiFuYaoOperationRecordHtmlAnalysis implements NingHaiFuYaoHtml
         String text = NingHaiFuYaoHtmlAnalysisUtil.blockDivToStr(bigDivElement, true);
         text = text.replaceAll("第1页", "");
         List<String> titles = Lists.newArrayList(
-                "姓名", "性别", "出生日期", "出生年月", "科别", "科室", "病区", "床号", "床位", "住院号","手术开始时间","手术结束时间",
-                "手术时间", "手术日期", "手术前诊断",  "手术中诊断", "手术后诊断","手术指征", "手术人员", "外邀指导专家","麻醉方式", "麻醉人员", "麻 醉 者", "洗手护士", "本次手术是否属于非计划再次手术", "接生者",
+                "姓名", "性别", "出生日期", "出生年月", "科别", "科室", "病区", "床号", "床位", "住院号", "手术开始时间", "手术结束时间",
+                "手术时间", "手术日期", "手术前诊断", "手术中诊断", "手术后诊断", "手术指征", "手术人员", "外邀指导专家", "麻醉方式", "麻醉人员", "麻 醉 者", "洗手护士", "本次手术是否属于非计划再次手术", "接生者",
                 "术前胎心", "手术名称", "术后诊断", "手术者及助手名称", "术中取病理标本", "麻醉方法", "手术经过(包括病人体位、切口处理、病灶所见及手术步骤等)",
-                "诊断手术/操作简要经过(包括术中有无并发症及具体描述和处理)", "手术经过","医师签名","麻 醉","术前诊断",
+                "诊断手术/操作简要经过(包括术中有无并发症及具体描述和处理)", "手术经过", "医师签名", "麻 醉", "术前诊断",
                 "医生签名", "记录时间", "时间", "手术/操作医生", "记录者", "术中输血", "术前宫颈准备日期", "药物名称及用法", "导管或其他", "插入深度",
                 "阴道填塞纱布条", "准备者", "取出日期", "手术方法", "术中特殊情况", "病理检查", "其他", "记录者", "手术者",
-                "检查子宫位置","开始","结束","LMP"
+                "检查子宫位置", "开始", "结束", "LMP"
         );
         titles = CommonAnalysisUtil.sortTitles(titles, text);
         CommonAnalysisUtil.cutByTitlesNoColon(text, titles, 0, map);
@@ -203,9 +207,9 @@ public class NingHaiFuYaoOperationRecordHtmlAnalysis implements NingHaiFuYaoHtml
         }*/
         String text = NingHaiFuYaoHtmlAnalysisUtil.blockDivToStr(bigDivElement, true);
         text = text.replaceAll("第1页", "")
-                .replaceAll("_____________________________________________________________________________________","");
+                .replaceAll("_____________________________________________________________________________________", "");
         List<String> titles = Lists.newArrayList(
-                "姓名", "病区", "床号", "住院号","年龄"
+                "姓名", "出生日期", "病区", "床号", "住院号", "年龄"
         );
         titles = CommonAnalysisUtil.sortTitles(titles, text);
         CommonAnalysisUtil.cutByTitlesNoColon(text, titles, 0, map);

+ 6 - 6
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoPreoperativeHtmlAnalysis.java

@@ -25,7 +25,7 @@ public class NingHaiFuYaoPreoperativeHtmlAnalysis implements NingHaiFuYaoHtmlAna
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");
@@ -49,19 +49,19 @@ public class NingHaiFuYaoPreoperativeHtmlAnalysis implements NingHaiFuYaoHtmlAna
         int index2 = text.lastIndexOf("主刀医师签名");
         if (index1 != -1 && index2 != -1) {
             text = text.substring(0, index1).replace("(如高血压病、冠心病、糖尿病、脑梗、心梗、心肺肝肾功能不全,口服抗凝药", "").replace("等)", "")
-                    .replace("(如腹腔镜可能改开腹等)", "").replace("(如腹腔镜可能改开腹", "").replace("皮瓣转移术可能的变更方案","")
+                    .replace("(如腹腔镜可能改开腹等)", "").replace("(如腹腔镜可能改开腹", "").replace("皮瓣转移术可能的变更方案", "")
                     .replace("四级手术、疑难手术等必须填写以下“具体讨论意见”,作为科室三大讨论本留存资料", "")
                     .replace("术后术后", "术后")
                     + text.substring(index1, index2).replace("签字时间", "经治医师签字时间:").replace("年月日时分", "")
                     + text.substring(index2).replace("签字时间", "主刀医师签字时间:").replace("年月日时分", "");
         }
         text = text.replace("术前讨论及术前小结", "").replace("讨论结论:", "").replace("年月日时\n" +
-                "分", "").replace("二、","");
+                "分", "").replace("二、", "");
         List<String> titles = Lists.newArrayList("姓名", "性别", "出生日期", "出生年月", "科别", "科室", "病区", "床号", "床位", "住院号",
-                "讨论时间", "讨论方式", "参加人员", "一、简要病情", "具体讨论意见","1.术前诊断","2.手术指征与禁忌征","3.可替代方案",
-                "1.术前诊断", "2.手术指征与禁忌征", "3.可替代方案", "4.拟施手术方式(名称)及可能的变更方案","4.拟施手术方式、名称及可能的变更","5.计划性多次手术",
+                "讨论时间", "讨论方式", "参加人员", "一、简要病情", "具体讨论意见", "1.术前诊断", "2.手术指征与禁忌征", "2.手术指征与禁忌症", "3.可替代方案",
+                "1.术前诊断", "2.手术指征与禁忌征", "3.可替代方案", "4.拟施手术方式(名称)及可能的变更方案", "4.拟施手术方式、名称及可能的变更", "5.计划性多次手术",
                 "5.本次手术是否属于计划性多次手术", "5.拟施麻醉方式", "6.术前特殊准备", "7.主要术中、术后风险及防范措施", "8.术中、术后注意事项(含护理事项)",
-                "5.计划性多次手术","6.拟施麻醉方式","7.术前特殊准备","8.主要术中、术后风险及防范措施","9.术中、术后注意事项(含护理事项)",
+                "5.计划性多次手术", "6.拟施麻醉方式", "7.术前特殊准备", "8.主要术中、术后风险及防范措施", "9.术中、术后注意事项(含护理事项)",
                 "6.拟施麻醉方式", "7.术前特殊准备", "8.主要术中、术后风险及防范措施", "9.术中、术后注意事项(含护理事项)",
                 "术前诊断", "手术指征", "拟施手术名称及方式", "拟施麻醉方式", "其他术前相关情况", "注意事项",
                 "经治医师签名", "经治医师签字时间", "主刀医师签名", "医生签名", "主刀医师签字时间", "签字时间");

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoRescueHtmlAnalysis.java

@@ -24,7 +24,7 @@ public class NingHaiFuYaoRescueHtmlAnalysis implements NingHaiFuYaoHtmlAnalysis
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoStagesSummaryHtmlAnalysis.java

@@ -24,7 +24,7 @@ public class NingHaiFuYaoStagesSummaryHtmlAnalysis implements NingHaiFuYaoHtmlAn
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoThreeLevelWardHtmlAnalysis.java

@@ -27,7 +27,7 @@ public class NingHaiFuYaoThreeLevelWardHtmlAnalysis implements NingHaiFuYaoHtmlA
     public Map<String, String> analysis(String... args) {
         Map<String, String> structureMap = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Document doc = Jsoup.parse(html);

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoTransferIntoHtmlAnalysis.java

@@ -24,7 +24,7 @@ public class NingHaiFuYaoTransferIntoHtmlAnalysis implements NingHaiFuYaoHtmlAna
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoTransferOutHtmlAnalysis.java

@@ -24,7 +24,7 @@ public class NingHaiFuYaoTransferOutHtmlAnalysis implements NingHaiFuYaoHtmlAnal
     public Map<String, String> analysis(String... args) {
         Map<String, String> map = Maps.newLinkedHashMap();
         try {
-            String html = args[0];
+            String html = args[0].replace("&nbsp;"," ");
             String recTitle = args[1];
             String recTypeId = args[2];
             Element bigDivElement = Jsoup.parse(html).selectFirst("body").child(0).getElementById("main");