Prechádzať zdrojové kódy

Merge branch 'master' of http://192.168.2.236:10080/louhr/qc

louhr 5 rokov pred
rodič
commit
ed21426066
92 zmenil súbory, kde vykonal 4718 pridanie a 165 odobranie
  1. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0672.java
  2. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0673.java
  3. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0674.java
  4. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0675.java
  5. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0676.java
  6. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0677.java
  7. 34 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0678.java
  8. 28 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0679.java
  9. 32 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0556.java
  10. 29 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0557.java
  11. 29 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0558.java
  12. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathrecord/DEAR0561.java
  13. 52 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0597.java
  14. 54 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0598.java
  15. 82 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0599.java
  16. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0609.java
  17. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0610.java
  18. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0611.java
  19. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0613.java
  20. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0615.java
  21. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0621.java
  22. 44 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0575.java
  23. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0578.java
  24. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0579.java
  25. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0580.java
  26. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0581.java
  27. 44 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0649.java
  28. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0650.java
  29. 54 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0651.java
  30. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0652.java
  31. 84 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0587.java
  32. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0595.java
  33. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0601.java
  34. 110 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0602.java
  35. 47 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0603.java
  36. 45 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0606.java
  37. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0680.java
  38. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0681.java
  39. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0682.java
  40. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0683.java
  41. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0684.java
  42. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0685.java
  43. 0 1
      kernel/src/main/java/com/lantone/qc/kernel/web/controller/QCTestController.java
  44. 9 17
      public/src/main/java/com/lantone/qc/pub/model/InputInfo.java
  45. 1 1
      public/src/main/java/com/lantone/qc/pub/model/doc/AnesthesiaRelatedDoc.java
  46. 0 10
      public/src/main/java/com/lantone/qc/pub/model/doc/DoctorsAdviceDoc.java
  47. 1 1
      public/src/main/java/com/lantone/qc/pub/model/doc/InvasiveOperationDoc.java
  48. 1 1
      public/src/main/java/com/lantone/qc/pub/model/doc/MedicalWritingDoc.java
  49. 1 1
      public/src/main/java/com/lantone/qc/pub/model/doc/ReasonableDiagnosisDoc.java
  50. 2 1
      public/src/main/java/com/lantone/qc/pub/model/doc/transferrecord/TransferIntoDoc.java
  51. 2 1
      public/src/main/java/com/lantone/qc/pub/model/doc/transferrecord/TransferOutDoc.java
  52. 1 0
      public/src/main/java/com/lantone/qc/pub/model/doc/transferrecord/TransferRecordDoc.java
  53. 292 0
      public/src/main/java/com/lantone/qc/pub/model/keys/StructTypeStandardKeys.java
  54. 2 2
      public/src/main/java/com/lantone/qc/pub/model/keys/ModelStandardKeys.java
  55. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxBeHospitalizedDocTrans.java
  56. 2 0
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxConsultationDocTrans.java
  57. 47 12
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxCriticallyIllNoticeDocTrans.java
  58. 56 12
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxDifficultCaseDiscussDocTrans.java
  59. 1 1
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxDocTrans.java
  60. 47 12
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxDoctorAdviceDocTrans.java
  61. 2 2
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxLeaveHospitalDocTrans.java
  62. 42 10
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxNursingSystemDocTrans.java
  63. 47 12
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxSeriouslyIllNoticeDocTrans.java
  64. 47 12
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxStagesSummaryDocTrans.java
  65. 152 34
      trans/src/main/java/com/lantone/qc/trans/changx/ChangxTransferRecordDocTrans.java
  66. 6 11
      trans/src/main/java/com/lantone/qc/trans/comsis/Preproc.java
  67. 40 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouAnesthesiaRelatedDocTrans.java
  68. 367 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouBeHospitalizedDocTrans.java
  69. 40 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouClinicalBloodDocTrans.java
  70. 249 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouConsultationDocTrans.java
  71. 50 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCrisisValueReportDocTrans.java
  72. 65 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCriticallyIllNoticeDocTrans.java
  73. 73 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathCaseDiscussDocTrans.java
  74. 69 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathRecordDocTrans.java
  75. 40 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDifficultCaseDiscussDocTrans.java
  76. 89 4
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDocTrans.java
  77. 40 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDoctorAdviceDocTrans.java
  78. 40 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDutyShiftSystemDocTrans.java
  79. 75 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstCourseRecordDocTrans.java
  80. 211 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstPageRecordDocTrans.java
  81. 40 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouInvasiveOperationDocTrans.java
  82. 33 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouLeaveHospitalDocTrans.java
  83. 40 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouMedicalWritingDocTrans.java
  84. 33 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouNursingSystemDocTrans.java
  85. 156 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouOperationDocTrans.java
  86. 40 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouReasonableDiagnosisDocTrans.java
  87. 40 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouRescueDocTrans.java
  88. 65 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouSeriouslyIllNoticeDocTrans.java
  89. 82 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouStagesSummaryDocTrans.java
  90. 71 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouThreeLevelWardDocTrans.java
  91. 119 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouTransferRecordDocTrans.java
  92. 27 0
      trans/src/main/java/com/lantone/qc/trans/taizhou/util/TzXmlUtil.java

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0672.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.anesthesiarelated;
+
+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.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : ANES0672
+ * @Description : 麻醉记录无术前诊断
+ * @Author : 胡敬
+ * @Date: 2020-03-30 10:01
+ */
+public class ANES0672 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (ListUtil.isEmpty(anesthesiaRelatedDocs)) {
+            return;
+        }
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaRelatedStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(anesthesiaRelatedStructureMap.get("术前诊断"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0673.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.anesthesiarelated;
+
+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.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : ANES0673
+ * @Description : 麻醉记录无拟施手术
+ * @Author : 胡敬
+ * @Date: 2020-03-30 11:01
+ */
+public class ANES0673 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (ListUtil.isEmpty(anesthesiaRelatedDocs)) {
+            return;
+        }
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaRelatedStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(anesthesiaRelatedStructureMap.get("拟施手术"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0674.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.anesthesiarelated;
+
+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.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : ANES0674
+ * @Description : 麻醉记录无手术后诊断
+ * @Author : 胡敬
+ * @Date: 2020-03-30 11:05
+ */
+public class ANES0674 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (ListUtil.isEmpty(anesthesiaRelatedDocs)) {
+            return;
+        }
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaRelatedStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(anesthesiaRelatedStructureMap.get("手术后诊断"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0675.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.anesthesiarelated;
+
+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.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : ANES0675
+ * @Description : 麻醉记录无手术名称
+ * @Author : 胡敬
+ * @Date: 2020-03-30 11:05
+ */
+public class ANES0675 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (ListUtil.isEmpty(anesthesiaRelatedDocs)) {
+            return;
+        }
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaRelatedStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(anesthesiaRelatedStructureMap.get("手术名称"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0676.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.anesthesiarelated;
+
+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.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : ANES0676
+ * @Description : 麻醉记录无麻醉方法
+ * @Author : 胡敬
+ * @Date: 2020-03-30 11:05
+ */
+public class ANES0676 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (ListUtil.isEmpty(anesthesiaRelatedDocs)) {
+            return;
+        }
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaRelatedStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(anesthesiaRelatedStructureMap.get("麻醉方法"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0677.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.anesthesiarelated;
+
+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.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : ANES0677
+ * @Description : 麻醉记录无施麻醉者
+ * @Author : 胡敬
+ * @Date: 2020-03-30 11:05
+ */
+public class ANES0677 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (ListUtil.isEmpty(anesthesiaRelatedDocs)) {
+            return;
+        }
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaRelatedStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(anesthesiaRelatedStructureMap.get("施麻醉者"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 34 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0678.java

@@ -0,0 +1,34 @@
+package com.lantone.qc.kernel.catalogue.anesthesiarelated;
+
+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.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : ANES0678
+ * @Description : 麻醉记录未记录尿量
+ * @Author : 胡敬
+ * @Date: 2020-03-30 11:05
+ */
+public class ANES0678 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (ListUtil.isEmpty(anesthesiaRelatedDocs)) {
+            return;
+        }
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaRelatedStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(anesthesiaRelatedStructureMap.get("尿量"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 28 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0679.java

@@ -1,10 +1,34 @@
 package com.lantone.qc.kernel.catalogue.anesthesiarelated;
 
+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.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
 /**
  * @ClassName : ANES0679
- * @Description : 麻醉相关
- * @Author : 楼辉荣
- * @Date: 2020-03-28 17:33
+ * @Description : 麻醉记录未记录出血量
+ * @Author : 胡敬
+ * @Date: 2020-03-30 11:05
  */
-public class ANES0679 {
+public class ANES0679 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (ListUtil.isEmpty(anesthesiaRelatedDocs)) {
+            return;
+        }
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaRelatedStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(anesthesiaRelatedStructureMap.get("出血量"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
 }

+ 32 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0556.java

@@ -0,0 +1,32 @@
+package com.lantone.qc.kernel.catalogue.deathcasediscuss;
+
+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.Date;
+import java.util.Map;
+
+/**
+ * @ClassName : DEAR0556
+ * @Description :  死亡病例讨论参加人员姓名及职称未填写
+ * @Author :kwz
+ * @Date: 2020-03-18 18:38
+ */
+@Component
+public class DEAR0556 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null) {
+            Map<String, String> deathRecordStructureMap = inputInfo.getDeathRecordDoc().getStructureMap();
+            String deathTime = deathRecordStructureMap.get("参加讨论人员");
+            if (CatalogueUtil.isEmpty(deathTime)) {
+                status.set("-1");
+            }
+        }
+    }
+}

+ 29 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0557.java

@@ -0,0 +1,29 @@
+package com.lantone.qc.kernel.catalogue.deathcasediscuss;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : DEAR0557
+ * @Description :  死亡病例讨论无具体讨论意见
+ * @Author :kwz
+ * @Date: 2020-03-18 18:38
+ */
+@Component
+public class DEAR0557 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null) {
+            Map<String, String> deathRecordStructureMap = inputInfo.getDeathRecordDoc().getStructureMap();
+            String deathTime = deathRecordStructureMap.get("讨论内容");
+            if (!CatalogueUtil.isEmpty(deathTime) && !deathTime.contains("发言")) {
+                status.set("-1");
+            }
+        }
+    }
+}

+ 29 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAR0558.java

@@ -0,0 +1,29 @@
+package com.lantone.qc.kernel.catalogue.deathcasediscuss;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : DEAR0558
+ * @Description :  死亡病例讨论无主持人小结意见
+ * @Author :kwz
+ * @Date: 2020-03-18 18:38
+ */
+@Component
+public class DEAR0558 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null) {
+            Map<String, String> deathRecordStructureMap = inputInfo.getDeathRecordDoc().getStructureMap();
+            String deathTime = deathRecordStructureMap.get("结论");
+            if (CatalogueUtil.isEmpty(deathTime)) {
+                status.set("-1");
+            }
+        }
+    }
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathrecord/DEAR0561.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.deathrecord;
+
+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.FirstPageRecordDoc;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @ClassName : DEAR0561
+ * @Description : 死亡记录未在患者离院后24小时内完成
+ * @Author : 胡敬
+ * @Date: 2020-03-18 18:38
+ */
+@Component
+public class DEAR0561 extends QCCatalogue {
+    public static String FORMAT_LONC_CN_MI = "yyyy/MM/dd HH:mm";
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null) {
+            Map<String, String> deathRecordStructureMap = inputInfo.getDeathRecordDoc().getStructureMap();
+            if (!CatalogueUtil.isEmpty(deathRecordStructureMap.get("死亡时间"))) {
+                String deathDate = deathRecordStructureMap.get("死亡时间");
+                FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+                if(firstPageRecordDoc != null && firstPageRecordDoc.getStructureMap() != null){
+                    Map<String, String> firstPageMap = firstPageRecordDoc.getStructureMap();
+                    String outDate = firstPageMap.get("出院时间");
+                    if(outDate != null && deathDate != null){
+                        Date date_in = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(deathDate);
+                        Date date_out = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(outDate);
+                        int hours = (int) ((date_out.getTime() - date_in.getTime()) / (1000*3600));
+                        if(hours >24){
+                            status.set("-1");
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 52 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0597.java

@@ -0,0 +1,52 @@
+package com.lantone.qc.kernel.catalogue.dutyshiftsystem;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : DUT0597
+ * @Description : 转出记录未在转出前完成
+ * @Author : 胡敬
+ * @Date: 2020-03-30 15:06
+ */
+@Component
+public class DUT0597 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<TransferRecordDoc> transferRecordDocs = inputInfo.getTransferRecordDocs();
+        if (ListUtil.isEmpty(transferRecordDocs)) {
+            return;
+        }
+        String rollOutRecordDateStr = "", recordDateStr = "";
+        for (TransferRecordDoc transferRecordDoc : transferRecordDocs) {
+            TransferOutDoc transferOutDoc = transferRecordDoc.getTransferOutDoc();
+            if (transferOutDoc == null) {
+                continue;
+            }
+            Map<String, String> transferOutStructureMap = transferOutDoc.getStructureMap();
+            rollOutRecordDateStr = transferOutStructureMap.get("转科日期");
+            recordDateStr = transferOutStructureMap.get("书写时间");
+            if (CatalogueUtil.isEmpty(rollOutRecordDateStr) || CatalogueUtil.isEmpty(recordDateStr)) {
+                continue;
+            }
+            Date rollOutRecordDate = StringUtil.parseDateTime(rollOutRecordDateStr);
+            Date recordDate = StringUtil.parseDateTime(recordDateStr);
+            if (rollOutRecordDate != null && recordDate != null && !rollOutRecordDate.before(recordDate)) {
+                status.set("-1");
+                return;
+            }
+        }
+
+    }
+}

+ 54 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0598.java

@@ -0,0 +1,54 @@
+package com.lantone.qc.kernel.catalogue.dutyshiftsystem;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : DUT0598
+ * @Description : 接科记录未在24h内完成
+ * @Author : 胡敬
+ * @Date: 2020-03-30 15:06
+ */
+@Component
+public class DUT0598 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<TransferRecordDoc> transferRecordDocs = inputInfo.getTransferRecordDocs();
+        if (ListUtil.isEmpty(transferRecordDocs)) {
+            return;
+        }
+        String rollInRecordDateStr = "", recordDateStr = "";
+        for (TransferRecordDoc transferRecordDoc : transferRecordDocs) {
+            TransferOutDoc transferOutDoc = transferRecordDoc.getTransferOutDoc();
+            if (transferOutDoc == null) {
+                continue;
+            }
+            Map<String, String> transferOutStructureMap = transferOutDoc.getStructureMap();
+            rollInRecordDateStr = transferOutStructureMap.get("患者于");
+            recordDateStr = transferOutStructureMap.get("书写时间");
+            if (CatalogueUtil.isEmpty(rollInRecordDateStr) || CatalogueUtil.isEmpty(recordDateStr)) {
+                continue;
+            }
+            Date rollOutRecordDate = StringUtil.parseDateTime(rollInRecordDateStr);
+            Date recordDate = StringUtil.parseDateTime(recordDateStr);
+            if (rollOutRecordDate != null && recordDate != null && !rollOutRecordDate.before(recordDate)) {
+                boolean compareTime = CatalogueUtil.compareTime(rollOutRecordDate, recordDate, (long) 24 * 60);
+                if (compareTime) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 82 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/dutyshiftsystem/DUT0599.java

@@ -0,0 +1,82 @@
+package com.lantone.qc.kernel.catalogue.dutyshiftsystem;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
+import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : DUT0599
+ * @Description : 转科后病程录没有连续记录3天
+ * @Author : 胡敬
+ * @Date: 2020-03-30 15:06
+ */
+@Component
+public class DUT0599 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<TransferRecordDoc> transferRecordDocs = inputInfo.getTransferRecordDocs();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        if (ListUtil.isEmpty(transferRecordDocs) || ListUtil.isEmpty(threeLevelWardDocs)) {
+            return;
+        }
+        //所有查房记录的日期天
+        List<Integer> wardRecordDayList = getWardRecordDay(threeLevelWardDocs);
+        String rollInRecordDateStr = "";
+        //转入日期后应该有的查房记录的日期天
+        List<Integer> rollInDay = null;
+        for (TransferRecordDoc transferRecordDoc : transferRecordDocs) {
+            TransferOutDoc transferOutDoc = transferRecordDoc.getTransferOutDoc();
+            if (transferOutDoc == null) {
+                continue;
+            }
+            Map<String, String> transferOutStructureMap = transferOutDoc.getStructureMap();
+            rollInRecordDateStr = transferOutStructureMap.get("患者于");
+            if (CatalogueUtil.isEmpty(rollInRecordDateStr)) {
+                continue;
+            }
+            Date rollInRecordDate = StringUtil.parseDateTime(rollInRecordDateStr);
+            rollInDay = new ArrayList<>();
+            for (int i = 1; i <= 3; i++) {
+                int wardRecordDay = DateUtil.getDay(DateUtil.addDate(rollInRecordDate, i));
+                rollInDay.add(wardRecordDay);
+            }
+            if (!wardRecordDayList.containsAll(rollInDay)) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+
+    /**
+     * 所有查房记录的日期天
+     *
+     * @param threeLevelWardDocs
+     */
+    private List<Integer> getWardRecordDay(List<ThreeLevelWardDoc> threeLevelWardDocs) {
+        List<Integer> dateRecordDay = new ArrayList<>();
+        String recordTime = "";
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
+            recordTime = rescueStructureMap.get("查房日期");
+            Date recordDate = StringUtil.parseDateTime(recordTime);
+            if (recordDate == null) {
+                continue;
+            }
+            dateRecordDay.add(DateUtil.getDay(recordDate));
+        }
+        return dateRecordDay;
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0609.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.invasiveoperation;
+
+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.InvasiveOperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : INVA0609
+ * @Description : 操作记录无操作名称
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:31
+ */
+@Component
+public class INVA0609 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<InvasiveOperationDoc> invasiveOperationDocs = inputInfo.getInvasiveOperationDocs();
+        if (ListUtil.isEmpty(invasiveOperationDocs)) {
+            return;
+        }
+        for (InvasiveOperationDoc invasiveOperationDoc : invasiveOperationDocs) {
+            Map<String, String> invasiveOperationStructureMap = invasiveOperationDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(invasiveOperationStructureMap.get("操作名称"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0610.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.invasiveoperation;
+
+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.InvasiveOperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : INVA0610
+ * @Description : 操作记录无术前准备
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:31
+ */
+@Component
+public class INVA0610 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<InvasiveOperationDoc> invasiveOperationDocs = inputInfo.getInvasiveOperationDocs();
+        if (ListUtil.isEmpty(invasiveOperationDocs)) {
+            return;
+        }
+        for (InvasiveOperationDoc invasiveOperationDoc : invasiveOperationDocs) {
+            Map<String, String> invasiveOperationStructureMap = invasiveOperationDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(invasiveOperationStructureMap.get("术前准备"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0611.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.invasiveoperation;
+
+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.InvasiveOperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : INVA0611
+ * @Description : 操作记录无操作时间
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:31
+ */
+@Component
+public class INVA0611 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<InvasiveOperationDoc> invasiveOperationDocs = inputInfo.getInvasiveOperationDocs();
+        if (ListUtil.isEmpty(invasiveOperationDocs)) {
+            return;
+        }
+        for (InvasiveOperationDoc invasiveOperationDoc : invasiveOperationDocs) {
+            Map<String, String> invasiveOperationStructureMap = invasiveOperationDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(invasiveOperationStructureMap.get("操作时间"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0613.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.invasiveoperation;
+
+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.InvasiveOperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : INVA0613
+ * @Description : 操作记录无操作步骤
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:31
+ */
+@Component
+public class INVA0613 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<InvasiveOperationDoc> invasiveOperationDocs = inputInfo.getInvasiveOperationDocs();
+        if (ListUtil.isEmpty(invasiveOperationDocs)) {
+            return;
+        }
+        for (InvasiveOperationDoc invasiveOperationDoc : invasiveOperationDocs) {
+            Map<String, String> invasiveOperationStructureMap = invasiveOperationDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(invasiveOperationStructureMap.get("操作步骤"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0615.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.invasiveoperation;
+
+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.InvasiveOperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : INVA0615
+ * @Description : 操作记录无患者一般情况
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:31
+ */
+@Component
+public class INVA0615 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<InvasiveOperationDoc> invasiveOperationDocs = inputInfo.getInvasiveOperationDocs();
+        if (ListUtil.isEmpty(invasiveOperationDocs)) {
+            return;
+        }
+        for (InvasiveOperationDoc invasiveOperationDoc : invasiveOperationDocs) {
+            Map<String, String> invasiveOperationStructureMap = invasiveOperationDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(invasiveOperationStructureMap.get("患者一般情况"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0621.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.invasiveoperation;
+
+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.InvasiveOperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : INVA0621
+ * @Description : 操作医师未签名
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:29
+ */
+@Component
+public class INVA0621 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<InvasiveOperationDoc> invasiveOperationDocs = inputInfo.getInvasiveOperationDocs();
+        if (ListUtil.isEmpty(invasiveOperationDocs)) {
+            return;
+        }
+        for (InvasiveOperationDoc invasiveOperationDoc : invasiveOperationDocs) {
+            Map<String, String> invasiveOperationStructureMap = invasiveOperationDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(invasiveOperationStructureMap.get("操作医师签名"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 44 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0575.java

@@ -0,0 +1,44 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.PreoperativeDiscussionDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:  术前讨论及小结无简要病情
+ * @author: kwz
+ * @time: 2020/3/30 13:28
+ */
+public class OPE0575 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if(ListUtil.isNotEmpty(operationDocs)){
+            pre:
+            for (OperationDoc od:operationDocs) {
+                PreoperativeDiscussionDoc preoperativeDiscussionDoc = od.getPreoperativeDiscussionDoc();
+                if(preoperativeDiscussionDoc != null){
+                    Map<String, String> preMap = preoperativeDiscussionDoc.getStructureMap();
+                    if(preMap != null && preMap.containsKey("简要病情")){
+                        if(CatalogueUtil.isEmpty(preMap.get("简要病情"))){
+                            status.set("-1");
+                            break pre;
+                        }
+                    }else {
+                        status.set("-1");
+                        break pre;
+                    }
+                }
+            }
+        }
+    }
+}

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0578.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.PreoperativeDiscussionDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:  术前讨论记录未记录具体讨论意见
+ * @author: kwz
+ * @time: 2020/3/30 13:28
+ */
+public class OPE0578 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if(ListUtil.isNotEmpty(operationDocs)){
+            pre:
+            for (OperationDoc od:operationDocs) {
+                PreoperativeDiscussionDoc preoperativeDiscussionDoc = od.getPreoperativeDiscussionDoc();
+                if(preoperativeDiscussionDoc != null){
+                    Map<String, String> preMap = preoperativeDiscussionDoc.getStructureMap();
+                    if(preMap != null && preMap.containsKey("讨论结论")){
+                        if(CatalogueUtil.isEmpty(preMap.get("讨论结论"))){
+                            status.set("-1");
+                            break pre;
+                        }
+                    }else {
+                        status.set("-1");
+                        break pre;
+                    }
+                }
+            }
+        }
+    }
+}

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0579.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.PreoperativeDiscussionDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 术前讨论记录讨论日期未填写
+ * @author: kwz
+ * @time: 2020/3/30 13:28
+ */
+public class OPE0579 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if(ListUtil.isNotEmpty(operationDocs)){
+            pre:
+            for (OperationDoc od:operationDocs) {
+                PreoperativeDiscussionDoc preoperativeDiscussionDoc = od.getPreoperativeDiscussionDoc();
+                if(preoperativeDiscussionDoc != null){
+                    Map<String, String> preMap = preoperativeDiscussionDoc.getStructureMap();
+                    if(preMap != null && preMap.containsKey("讨论时间")){
+                        if(CatalogueUtil.isEmpty(preMap.get("讨论时间"))){
+                            status.set("-1");
+                            break pre;
+                        }
+                    }else {
+                        status.set("-1");
+                        break pre;
+                    }
+                }
+            }
+        }
+    }
+}

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0580.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.PreoperativeDiscussionDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 术前讨论记录未记录讨论者的姓名及职称
+ * @author: kwz
+ * @time: 2020/3/30 13:28
+ */
+public class OPE0580 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if(ListUtil.isNotEmpty(operationDocs)){
+            pre:
+            for (OperationDoc od:operationDocs) {
+                PreoperativeDiscussionDoc preoperativeDiscussionDoc = od.getPreoperativeDiscussionDoc();
+                if(preoperativeDiscussionDoc != null){
+                    Map<String, String> preMap = preoperativeDiscussionDoc.getStructureMap();
+                    if(preMap != null && preMap.containsKey("参加人员")){
+                        if(CatalogueUtil.isEmpty(preMap.get("参加人员"))){
+                            status.set("-1");
+                            break pre;
+                        }
+                    }else {
+                        status.set("-1");
+                        break pre;
+                    }
+                }
+            }
+        }
+    }
+}

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0581.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.PreoperativeDiscussionDoc;
+import com.lantone.qc.pub.util.ListUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 术前讨论无记录者签名
+ * @author: kwz
+ * @time: 2020/3/30 13:28
+ */
+public class OPE0581 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if(ListUtil.isNotEmpty(operationDocs)){
+            pre:
+            for (OperationDoc od:operationDocs) {
+                PreoperativeDiscussionDoc preoperativeDiscussionDoc = od.getPreoperativeDiscussionDoc();
+                if(preoperativeDiscussionDoc != null){
+                    Map<String, String> preMap = preoperativeDiscussionDoc.getStructureMap();
+                    if(preMap != null && preMap.containsKey("医生签名")){
+                        if(CatalogueUtil.isEmpty(preMap.get("医生签名"))){
+                            status.set("-1");
+                            break pre;
+                        }
+                    }else {
+                        status.set("-1");
+                        break pre;
+                    }
+                }
+            }
+        }
+    }
+}

+ 44 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0649.java

@@ -0,0 +1,44 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : OPE0649
+ * @Description : 术后首程麻醉方式未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-30 10:10
+ */
+@Component
+public class OPE0649 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (operationDocs.size() == 0) {
+                return;
+            }
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+                if (operationDiscussionDoc == null) {
+                    continue;
+                }
+                Map<String, String> operationDiscussionStructureMap = operationDiscussionDoc.getStructureMap();
+                if (CatalogueUtil.isEmpty(operationDiscussionStructureMap.get("麻醉方式"))) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0650.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : OPE0650
+ * @Description : 术后首程手术名称和方式未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-30 17:01
+ */
+@Component
+public class OPE0650 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (operationDocs.size() == 0) {
+                return;
+            }
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+                if (operationDiscussionDoc == null) {
+                    continue;
+                }
+                Map<String, String> operationDiscussionStructureMap = operationDiscussionDoc.getStructureMap();
+                if (CatalogueUtil.isEmpty(operationDiscussionStructureMap.get("手术方式"))) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

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

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

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0652.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : OPE0652
+ * @Description : 术后首程无患方签名
+ * @Author : 胡敬
+ * @Date: 2020-03-30 17:07
+ */
+@Component
+public class OPE0652 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (operationDocs.size() == 0) {
+                return;
+            }
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+                if (operationDiscussionDoc == null) {
+                    continue;
+                }
+                Map<String, String> operationDiscussionStructureMap = operationDiscussionDoc.getStructureMap();
+                if (CatalogueUtil.isEmpty(operationDiscussionStructureMap.get("患方签名"))) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+}

+ 84 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0587.java

@@ -0,0 +1,84 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
+import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0587
+ * @Description : 术后病程录没有连续记录3天
+ * @Author : 胡敬
+ * @Date: 2020-03-30 16:17
+ */
+@Component
+public class THR0587 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        if (ListUtil.isEmpty(operationDocs) || ListUtil.isEmpty(threeLevelWardDocs)) {
+            return;
+        }
+        //所有查房记录的日期天
+        List<Integer> wardRecordDayList = getWardRecordDay(threeLevelWardDocs);
+        String OperationEndDateStr = "";
+        //转入日期后应该有的查房记录的日期天
+        List<Integer> rollInDay = null;
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
+            OperationEndDateStr = operationRecordStructureMap.get("手术结束时间");
+            if (CatalogueUtil.isEmpty(OperationEndDateStr)) {
+                continue;
+            }
+            Date OperationEndDate = StringUtil.parseDateTime(OperationEndDateStr);
+            rollInDay = new ArrayList<>();
+            for (int i = 1; i <= 3; i++) {
+                int wardRecordDay = DateUtil.getDay(DateUtil.addDate(OperationEndDate, i));
+                rollInDay.add(wardRecordDay);
+            }
+            if (!wardRecordDayList.containsAll(rollInDay)) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+
+    /**
+     * 所有查房记录的日期天
+     *
+     * @param threeLevelWardDocs
+     */
+    private List<Integer> getWardRecordDay(List<ThreeLevelWardDoc> threeLevelWardDocs) {
+        List<Integer> dateRecordDay = new ArrayList<>();
+        String recordTime = "";
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
+            recordTime = rescueStructureMap.get("查房日期");
+            Date recordDate = StringUtil.parseDateTime(recordTime);
+            if (recordDate == null) {
+                continue;
+            }
+            dateRecordDay.add(DateUtil.getDay(recordDate));
+        }
+        return dateRecordDay;
+    }
+}

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

@@ -24,7 +24,7 @@ import java.util.Map;
 public class THR0595 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getSeriouslyIllNoticeDocs().size() == 0 || inputInfo.getThreeLevelWardDocs().size() == 0) {
+        if (inputInfo.getCriticallyIllNoticeDocs().size() == 0 || inputInfo.getThreeLevelWardDocs().size() == 0) {
             return;
         }
         //所有查房记录的日期天

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0601.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0601
+ * @Description : 整份病历无主治医师查房记录
+ * @Author : 胡敬
+ * @Date: 2020-03-25 10:21
+ */
+@Component
+public class THR0601 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getThreeLevelWardDocs().size() == 0) {
+            return;
+        }
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();//查房记录
+        String title;
+        boolean findIndications = false;
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
+            title = CatalogueUtil.subTitle(rescueStructureMap.get("查房标题"));
+            if (!CatalogueUtil.isEmpty(title) && title.contains(Content.indications)) {
+                findIndications = true;
+                break;
+            }
+        }
+        if (!findIndications) {
+            status.set("-1");
+        }
+    }
+}

+ 110 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0602.java

@@ -0,0 +1,110 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0602
+ * @Description : 主治医师在术后48小时内无查房记录
+ * @Author : 胡敬
+ * @Date: 2020-03-30 14:03
+ */
+@Component
+public class THR0602 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        if (ListUtil.isEmpty(operationDocs) || ListUtil.isEmpty(threeLevelWardDocs)) {
+            return;
+        }
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
+            String operationEndDateStr = operationRecordStructureMap.get("手术结束时间");
+            if (CatalogueUtil.isEmpty(operationEndDateStr)) {
+                continue;
+            }
+            Map<String, String> doctorRecord = extractWardRecord(
+                    threeLevelWardDocs,
+                    operationEndDateStr,
+                    48 * 60);
+            if (!doctorRecord.containsKey(Content.indications)) {
+                status.set("-1");
+                return;
+            }
+        }
+
+
+    }
+
+    /**
+     * 抽取住院duration分钟内查房记录并取第一条主治医师查房记录以及第一条主任/副主任医师查房记录
+     *
+     * @param threeLevelWardDocs
+     * @param admisTime
+     * @param duration
+     * @return
+     */
+    private static Map<String, String> extractWardRecord(List<ThreeLevelWardDoc> threeLevelWardDocs, String admisTime, int duration) {
+        Map<Date, String> dateRecord = new HashMap<>();
+        List<String> sortRecord = new ArrayList<>();
+        Map<String, String> doctorRecord = new HashMap<>();
+        String recordTime = "";
+        Date admisDate = StringUtil.parseDateTime(admisTime);
+        if (admisDate == null) {
+            return doctorRecord;
+        }
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> threeLevelWardStructureMap = threeLevelWardDoc.getStructureMap();
+            recordTime = threeLevelWardStructureMap.get("查房日期");
+            Date recordDate = StringUtil.parseDateTime(recordTime);
+            if (recordDate == null) {
+                continue;
+            }
+            if (admisDate.before(recordDate) && !CatalogueUtil.compareTime(admisDate, recordDate, Long.valueOf(duration))) {
+                String wardTitle = threeLevelWardStructureMap.get("查房标题");
+                wardTitle = StringUtil.isBlank(wardTitle) ? "" : wardTitle;
+                dateRecord.put(recordDate, wardTitle);
+            }
+        }
+        dateRecord.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEachOrdered(
+                x -> sortRecord.add(x.getValue())
+        );
+        //按时间排好序查房记录的第一条主治医师查房记录存进doctorRecord
+        for (String record : sortRecord) {
+            if (!CatalogueUtil.subTitle(record).contains(Content.indications)) {
+                continue;
+            }
+            doctorRecord.put(Content.indications, record);
+            break;
+        }
+        //按时间排好序查房记录的第一条主任医师/副主任医师查房记录存进doctorRecord
+        for (String record : sortRecord) {
+            if (!CatalogueUtil.subTitle(record).contains(Content.director)) {
+                continue;
+            }
+            doctorRecord.put(Content.director, record);
+            break;
+        }
+        return doctorRecord;
+    }
+}

+ 47 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0603.java

@@ -0,0 +1,47 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.CriticallyIllNoticeDoc;
+import com.lantone.qc.pub.model.doc.DifficultCaseDiscussDoc;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0603
+ * @Description : 对危重疑难病人的上级医师查房记录未精确到时分
+ * @Author : 胡敬
+ * @Date: 2020-03-30 14:13
+ */
+@Component
+public class THR0603 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<CriticallyIllNoticeDoc> criticallyIllNoticeDocs = inputInfo.getCriticallyIllNoticeDocs();
+        List<DifficultCaseDiscussDoc> difficultCaseDiscussDocs = inputInfo.getDifficultCaseDiscussDocs();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        if (ListUtil.isEmpty(criticallyIllNoticeDocs) && ListUtil.isEmpty(difficultCaseDiscussDocs) || ListUtil.isEmpty(threeLevelWardDocs)) {
+            return;
+        }
+        String wardRecordDateStr;
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
+            wardRecordDateStr = rescueStructureMap.get("查房日期");
+            Date wardRecordDate = StringUtil.parseDateTime(CatalogueUtil.removeSpecialChar(wardRecordDateStr)
+                    , CatalogueUtil.processDateFormat(Content.dateFormats));
+            if (null == wardRecordDate) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 45 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0606.java

@@ -0,0 +1,45 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.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.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0606
+ * @Description : 对抢救病人的上级医师查房记录未精确到时分
+ * @Author : 胡敬
+ * @Date: 2020-03-30 14:13
+ */
+@Component
+public class THR0606 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        if (ListUtil.isEmpty(rescueDocs) || ListUtil.isEmpty(threeLevelWardDocs)) {
+            return;
+        }
+        String wardRecordDateStr;
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
+            wardRecordDateStr = rescueStructureMap.get("查房日期");
+            Date wardRecordDate = StringUtil.parseDateTime(CatalogueUtil.removeSpecialChar(wardRecordDateStr)
+                    , CatalogueUtil.processDateFormat(Content.dateFormats));
+            if (null == wardRecordDate) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0680.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.RescueDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0680
+ * @Description : 抢救记录无病情变化情况
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:00
+ */
+@Component
+public class THR0680 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+        if (ListUtil.isEmpty(rescueDocs)) {
+            return;
+        }
+        for (RescueDoc rescueDoc : rescueDocs) {
+            Map<String, String> rescueStructureMap = rescueDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(rescueStructureMap.get("病情变化"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0681.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.RescueDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0681
+ * @Description : 抢救记录无记录时间
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:15
+ */
+@Component
+public class THR0681 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+        if (ListUtil.isEmpty(rescueDocs)) {
+            return;
+        }
+        for (RescueDoc rescueDoc : rescueDocs) {
+            Map<String, String> rescueStructureMap = rescueDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(rescueStructureMap.get("医师签名-时间"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0682.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.RescueDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0682
+ * @Description : 抢救记录无病情变化情况
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:14
+ */
+@Component
+public class THR0682 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+        if (ListUtil.isEmpty(rescueDocs)) {
+            return;
+        }
+        for (RescueDoc rescueDoc : rescueDocs) {
+            Map<String, String> rescueStructureMap = rescueDoc.getStructureMap();
+            String rescueDateStr = rescueStructureMap.get("抢救时间");
+            String doctorSognDateStr = rescueStructureMap.get("医师签名-时间");
+            if (CatalogueUtil.isEmpty(rescueDateStr) || CatalogueUtil.isEmpty(doctorSognDateStr)) {
+                continue;
+            }
+            rescueDateStr = rescueDateStr.split("[-—]")[1];
+            boolean compareTime = CatalogueUtil.compareTime(StringUtil.parseDateTime(rescueDateStr),
+                    StringUtil.parseDateTime(doctorSognDateStr),
+                    (long) (6 * 60));
+            if (compareTime) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0683.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.RescueDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0683
+ * @Description : 抢救记录未记录抢救时间
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:15
+ */
+@Component
+public class THR0683 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+        if (ListUtil.isEmpty(rescueDocs)) {
+            return;
+        }
+        for (RescueDoc rescueDoc : rescueDocs) {
+            Map<String, String> rescueStructureMap = rescueDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(rescueStructureMap.get("抢救时间"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0684.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.RescueDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0684
+ * @Description : 抢救记录未记录抢救措施
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:15
+ */
+@Component
+public class THR0684 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+        if (ListUtil.isEmpty(rescueDocs)) {
+            return;
+        }
+        for (RescueDoc rescueDoc : rescueDocs) {
+            Map<String, String> rescueStructureMap = rescueDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(rescueStructureMap.get("抢救措施"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0685.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.RescueDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0685
+ * @Description : 抢救记录未记录参加抢救医务人员姓名及职称
+ * @Author : 胡敬
+ * @Date: 2020-03-30 13:15
+ */
+@Component
+public class THR0685 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+        if (ListUtil.isEmpty(rescueDocs)) {
+            return;
+        }
+        for (RescueDoc rescueDoc : rescueDocs) {
+            Map<String, String> rescueStructureMap = rescueDoc.getStructureMap();
+            if (CatalogueUtil.isEmpty(rescueStructureMap.get("参加抢救的医务人员姓名及专业技术职称"))) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 0 - 1
kernel/src/main/java/com/lantone/qc/kernel/web/controller/QCTestController.java

@@ -6,7 +6,6 @@ import com.lantone.qc.kernel.util.CacheFileManager;
 import com.lantone.qc.kernel.util.KernelConstants;
 import com.lantone.qc.pub.jdbc.MysqlJdbc;
 import com.lantone.qc.pub.model.OutputInfo;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.model.vo.QueryVo;
 import com.lantone.qc.pub.res.Response;

+ 9 - 17
public/src/main/java/com/lantone/qc/pub/model/InputInfo.java

@@ -1,23 +1,7 @@
 package com.lantone.qc.pub.model;
 
 import com.google.common.collect.Maps;
-import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
-import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
-import com.lantone.qc.pub.model.doc.CrisisValueReportDoc;
-import com.lantone.qc.pub.model.doc.CriticallyIllNoticeDoc;
-import com.lantone.qc.pub.model.doc.DeathCaseDiscussDoc;
-import com.lantone.qc.pub.model.doc.DeathRecordDoc;
-import com.lantone.qc.pub.model.doc.DifficultCaseDiscussDoc;
-import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.DutyShiftSystemDoc;
-import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
-import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
-import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
-import com.lantone.qc.pub.model.doc.NursingSystemDoc;
-import com.lantone.qc.pub.model.doc.RescueDoc;
-import com.lantone.qc.pub.model.doc.SeriouslyIllNoticeDoc;
-import com.lantone.qc.pub.model.doc.StagesSummaryDoc;
-import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.*;
 import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
@@ -86,6 +70,14 @@ public class InputInfo {
     private List<StagesSummaryDoc> stagesSummaryDocs = new ArrayList<>();
     //查房记录
     private List<ThreeLevelWardDoc> threeLevelWardDocs = new ArrayList<>();
+    //麻醉相关
+    private List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = new ArrayList<>();
+    //有创操作记录
+    private List<InvasiveOperationDoc> invasiveOperationDocs = new ArrayList<>();
+    //病历书写规范
+    private List<MedicalWritingDoc> medicalWritingDocs = new ArrayList<>();
+    //诊疗合理性
+    private List<ReasonableDiagnosisDoc> reasonableDiagnosisDocs = new ArrayList<>();
 
     //新增记录
     public <T> void addDoc(List<T> list, T obj) {

+ 1 - 1
public/src/main/java/com/lantone/qc/pub/model/doc/AnesthesiaRelatedDoc.java

@@ -2,7 +2,7 @@ package com.lantone.qc.pub.model.doc;
 
 /**
  * @ClassName : AnesthesiaRelatedDoc
- * @Description :麻醉相关
+ * @Description :麻醉相关文档
  * @Author : 楼辉荣
  * @Date: 2020-03-30 10:08
  */

+ 0 - 10
public/src/main/java/com/lantone/qc/pub/model/doc/DoctorsAdviceDoc.java

@@ -1,10 +0,0 @@
-package com.lantone.qc.pub.model.doc;
-
-/**
- * @ClassName : DoctorsAdviceDoc
- * @Description : 医嘱信息
- * @Author : 楼辉荣
- * @Date: 2020-03-30 10:09
- */
-public class DoctorsAdviceDoc extends ModelDoc {
-}

+ 1 - 1
public/src/main/java/com/lantone/qc/pub/model/doc/InvasiveOperationDoc.java

@@ -2,7 +2,7 @@ package com.lantone.qc.pub.model.doc;
 
 /**
  * @ClassName : InvasiveOperationDoc
- * @Description : 有创操作记录
+ * @Description : 有创操作记录文档
  * @Author : 楼辉荣
  * @Date: 2020-03-30 10:13
  */

+ 1 - 1
public/src/main/java/com/lantone/qc/pub/model/doc/MedicalWritingDoc.java

@@ -2,7 +2,7 @@ package com.lantone.qc.pub.model.doc;
 
 /**
  * @ClassName : MedicalWritingDoc
- * @Description : 病历书写规范
+ * @Description : 病历书写规范文档
  * @Author : 楼辉荣
  * @Date: 2020-03-30 10:10
  */

+ 1 - 1
public/src/main/java/com/lantone/qc/pub/model/doc/ReasonableDiagnosisDoc.java

@@ -2,7 +2,7 @@ package com.lantone.qc.pub.model.doc;
 
 /**
  * @ClassName : ReasonableDiagnosisDoc
- * @Description : 诊疗合理性
+ * @Description : 诊疗合理性文档
  * @Author : 楼辉荣
  * @Date: 2020-03-30 10:12
  */

+ 2 - 1
public/src/main/java/com/lantone/qc/pub/model/doc/transferrecord/TransferIntoDoc.java

@@ -12,4 +12,5 @@ import lombok.Setter;
 @Getter
 @Setter
 public class TransferIntoDoc extends ModelDoc {
-}
+    private String transferRecordName;
+}

+ 2 - 1
public/src/main/java/com/lantone/qc/pub/model/doc/transferrecord/TransferOutDoc.java

@@ -12,4 +12,5 @@ import lombok.Setter;
 @Getter
 @Setter
 public class TransferOutDoc extends ModelDoc {
-}
+    private String transferRecordName;
+}

+ 1 - 0
public/src/main/java/com/lantone/qc/pub/model/doc/transferrecord/TransferRecordDoc.java

@@ -12,6 +12,7 @@ import lombok.Setter;
 @Setter
 public class TransferRecordDoc {
 
+    private String transferRecordName;
     private TransferIntoDoc transferIntoDoc;
     private TransferOutDoc transferOutDoc;
 

+ 292 - 0
public/src/main/java/com/lantone/qc/pub/model/keys/StructTypeStandardKeys.java

@@ -0,0 +1,292 @@
+package com.lantone.qc.pub.model.keys;
+
+import com.google.common.collect.Lists;
+
+import java.util.List;
+
+/**
+ * @Description: 各个模块标准key,各地公用
+ * @author: rengb
+ * @time: 2020/3/5 14:50
+ */
+public class StructTypeStandardKeys {
+
+    //各大模块的标准title
+    private static final List<String> model_titles = Lists.newArrayList(
+            "会诊",
+            "手术",
+            "转科记录",
+            "入院记录",
+            "输血/血制品病程记录",
+            "危急值记录",
+            "病危通知书",
+            "死亡病例讨论记录",
+            "死亡记录",
+            "疑难病例讨论记录",
+            "医嘱信息",
+            "值班交接制度",
+            "首次病程录",
+            "病案首页",
+            "出院小结",
+            "分级护理制度",
+            "抢救记录",
+            "病重通知书",
+            "阶段小结",
+            "查房记录"
+    );
+
+
+    //会诊-会诊记录的标准key
+    public static final List<String> consultationRecord = Lists.newArrayList(
+            "会诊情况",
+            "记录时间",
+            "记录医师"
+    );
+    //会诊-会诊申请单的标准key
+    public static final List<String> consultationApplication = Lists.newArrayList();
+    //会诊-会诊结果单的标准key
+    public static final List<String> consultationResults = Lists.newArrayList();
+
+
+    //手术-术后首次病程及谈话记录的标准key
+    public static final List<String> operationDiscussion = Lists.newArrayList(
+            "记录时间",
+            "手术时间",
+            "麻醉方式",
+            "手术方式",
+            "术中诊断",
+            "手术简要经过",
+            "患者术后情况",
+            "术后处理措施",
+            "术后可能出现的并发症及预防措施",
+            "术后注意事项",
+            "谈话医师签字",
+            "患者签名",
+            "患者签名时间",
+            "被授权人/代理人签名",
+            "代理人签名时间"
+    );
+    //手术-手术记录的标准key
+    public static final List<String> operationRecord = Lists.newArrayList(
+            "手术名称",
+            "麻醉方式",
+            "术前诊断",
+            "术后诊断",
+            "手术经过"
+    );
+    //手术-术前讨论、术前小结的标准key
+    public static final List<String> preoperativeDiscussion = Lists.newArrayList(
+            "讨论时间",
+            "讨论方式",
+            "参加人员",
+            "简要病情",
+            "讨论结论",
+            "经治医师签名",
+            "经治医师签字时间",
+            "主刀医师签名",
+            "主刀医师签字时间",
+            "手术指征",
+            "麻醉方式",
+            "术前准备内容",
+            "术前术后注意事项",
+            "可能意外和防范措施",
+            "拟行术式"
+    );
+
+
+    //转科记录-转入的标准key
+    public static final List<String> transferInto = Lists.newArrayList();
+    //转科记录-转出的标准key
+    public static final List<String> transferOut = Lists.newArrayList();
+
+
+    //入院记录的标准key
+    public static final List<String> beHospitalized = Lists.newArrayList(
+            "姓名",
+            "性别",
+            "年龄",
+            "民族",
+            "职业",
+            "出生地",
+            "婚姻",
+            "联系地址",
+            "病史陈述者",
+            "出生日期",
+            "户口地址",
+            "电话",
+            "入院日期",
+            "记录日期",
+            "主诉",
+            "现病史",
+            "既往史",
+            "个人史",
+            "婚育史",
+            "月经史",
+            "家族史",
+            "体格检查",
+            "专科体格检查",
+            "辅助检查",
+            "初步诊断",
+            "修正诊断",
+            "医师签名",
+            "补充诊断"
+    );
+
+    //输血/血制品病程记录的标准key
+    public static final List<String> clinicalBlood = Lists.newArrayList(
+            "输注原因",
+            "输注时间",
+            "输注开始",
+            "输注结束",
+            "输注种类、血型、数量",
+            "输注过程",
+            "输注后效果评价",
+            "记录医师",
+            "记录时间"
+    );
+
+    //危急值记录的标准key
+    public static final List<String> crisisValueReport = Lists.newArrayList(
+            "记录时间",
+            "记录医师",
+            "患者临床诊断",
+            "危急值记录内容",
+            "报告部门",
+            "报告人姓名",
+            "报告时间",
+            "接收人姓名",
+            "接收时间",
+            "病情分析及处理",
+            "医生签名",
+            "医生签名时间"
+    );
+
+    //病危通知书的标准key
+    public static final List<String> criticallyIllNotice = Lists.newArrayList();
+
+    //死亡病例讨论记录的标准key
+    public static final List<String> deathCaseDiscuss = Lists.newArrayList(
+            "记录时间",
+            "记录医师",
+            "入院时间",
+            "死亡时间",
+            "出院时间",
+            "入院诊断",
+            "死亡诊断",
+            "讨论时间",
+            "讨论地点",
+            "参加讨论人员",
+            "讨论主持人",
+            "讨论内容",
+            "死亡原因",
+            "结论"
+    );
+
+    //死亡记录的标准key
+    public static final List<String> deathRecord = Lists.newArrayList(
+            "姓名",
+            "性别",
+            "科别",
+            "床号",
+            "病案号",
+            "年龄",
+            "入院时间",
+            "死亡时间",
+            "入院情况",
+            "发病经过",
+            "入院诊断",
+            "诊疗经过",
+            "死亡原因",
+            "死亡诊断",
+            "记录医师",
+            "记录时间"
+    );
+
+    //疑难病例讨论记录的标准key
+    public static final List<String> difficultCaseDiscuss = Lists.newArrayList(
+            "记录时间",
+            "记录医师",
+            "入院时间",
+            "入院诊断",
+            "讨论时间",
+            "讨论地点",
+            "讨论目的",
+            "主持人",
+            "参加讨论者",
+            "讨论内容",
+            "结论"
+    );
+
+    //医嘱信息的标准key
+    public static final List<String> doctorAdvice = Lists.newArrayList();
+
+    //值班交接制度的标准key
+    public static final List<String> dutyShiftSystem = Lists.newArrayList(
+            "记录时间",
+            "记录医师"
+    );
+
+    //首次病程录的标准key
+    public static final List<String> firstCourseRecord = Lists.newArrayList(
+            "病例特点",
+            "初步诊断",
+            "诊断依据",
+            "鉴别诊断",
+            "诊疗计划",
+            "记录医师",
+            "记录时间"
+    );
+
+    //病案首页
+    public static final List<String> FirstPageRecord = Lists.newArrayList();
+
+    //出院小结的标准key
+    public static final List<String> leaveHospital = Lists.newArrayList(
+            "姓名",
+            "性别",
+            "年龄",
+            "床号",
+            "入院时间",
+            "出院时间",
+            "入院诊断",
+            "出院诊断",
+            "住院天数",
+            "入院情况",
+            "诊治经过",
+            "出院情况",
+            "出院医嘱",
+            "健康教育",
+            "随访计划",
+            "温馨提示",
+            "医师签名",
+            "签名时间"
+    );
+
+    //分级护理制度的标准key
+    public static final List<String> nursingSystem = Lists.newArrayList();
+
+    //抢救记录的标准key
+    public static final List<String> rescue = Lists.newArrayList(
+            "抢救时间",
+            "记录时间",
+            "记录医师",
+            "抢救过程",
+            "参与人员"
+    );
+
+    //病重通知书的标准key
+    public static final List<String> seriouslyIllNotice = Lists.newArrayList();
+
+    //阶段小结的标准key
+    public static final List<String> stagesSummary = Lists.newArrayList();
+
+    //查房记录的标准key
+    public static final List<String> threeLevelWard = Lists.newArrayList(
+            "查房标题",
+            "病情记录",
+            "查房日期",
+            "记录时间",
+            "记录医师"
+    );
+
+}

+ 2 - 2
public/src/main/java/com/lantone/qc/pub/model/keys/ModelStandardKeys.java

@@ -9,7 +9,7 @@ import java.util.List;
  * @author: rengb
  * @time: 2020/3/5 14:50
  */
-public class ModelStandardKeys {
+public class TextTypeStandardKeys {
 
     //各大模块的标准title
     private static final List<String> model_titles = Lists.newArrayList(
@@ -214,7 +214,7 @@ public class ModelStandardKeys {
             "主持人",
             "参加讨论者",
             "讨论内容",
-            "结 论"
+            "结论"
     );
 
     //医嘱信息的标准key

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

@@ -2,7 +2,7 @@ package com.lantone.qc.trans.changx;
 
 import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
+import com.lantone.qc.pub.model.keys.TextTypeStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.MapUtil;
@@ -36,7 +36,7 @@ public class ChangxBeHospitalizedDocTrans extends ModelDocTrans {
         content = content.substring(0, index3) + "\n" + content.substring(index3);
 
         List<String> targetTitles = Lists.newArrayList();
-        List<String> sourceTitles = ListUtil.isEmpty(medrecVo.getLabel()) ? ModelStandardKeys.beHospitalized : medrecVo.getLabel();
+        List<String> sourceTitles = ListUtil.isEmpty(medrecVo.getLabel()) ? TextTypeStandardKeys.beHospitalized : medrecVo.getLabel();
         sourceTitles.forEach(sourceTitle -> {
             String targetTitle = "";
             for (int index = 0; index < sourceTitle.length(); index++) {

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

@@ -187,6 +187,7 @@ public class ChangxConsultationDocTrans extends ModelDocTrans {
             "病程记录时间",
             "病程记录名称",
             "病程记录内容",
+            "记录时间",
             "记录医师"
     );
 
@@ -253,6 +254,7 @@ public class ChangxConsultationDocTrans extends ModelDocTrans {
             "病程记录时间",
             "病程记录名称",
             "病程记录内容",
+            "记录时间",
             "记录医师"
     );
 

+ 47 - 12
trans/src/main/java/com/lantone/qc/trans/changx/ChangxCriticallyIllNoticeDocTrans.java

@@ -2,9 +2,7 @@ package com.lantone.qc.trans.changx;
 
 import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.CriticallyIllNoticeDoc;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
-import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
 import com.lantone.qc.trans.comsis.Preproc;
@@ -24,18 +22,55 @@ public class ChangxCriticallyIllNoticeDocTrans extends ModelDocTrans {
         List<CriticallyIllNoticeDoc> retList = Lists.newArrayList();
         List<String> contents = (List) medrecVo.getContent().get("content");
         contents.forEach(content -> {
-            Map<String, String> structureMap =
-                    Preproc.extract_doc_pub(
-                            false,
-                            ListUtil.isEmpty(medrecVo.getLabel()) ? ModelStandardKeys.criticallyIllNotice : medrecVo.getLabel(),
-                            content
-                    );
-
-            CriticallyIllNoticeDoc criticallyIllNoticeDoc = ModelDocGenerate.criticallyIllNoticeDocGen(structureMap);
-            criticallyIllNoticeDoc.setText(content);
-            retList.add(criticallyIllNoticeDoc);
+            retList.add(getCriticallyIllNoticeDoc(content));
         });
         return retList;
     }
 
+    private CriticallyIllNoticeDoc getCriticallyIllNoticeDoc(String content) {
+        Map<String, String> pageData = Preproc.extract_doc_pub(true, pageDataTitles, content);
+        pageData.put("病程记录内容",
+                pageData.get("病程记录内容")
+                        .replace(pageData.get("病程记录时间"), "")
+                        .replace(pageData.get("病程记录名称"), "")
+        );
+
+        List<String> targetTitles = Lists.newArrayList();
+        sourceTitles.forEach(sourceTitle -> {
+            String targetTitle = "";
+            for (int index = 0; index < sourceTitle.length(); index++) {
+                if (index == sourceTitle.length() - 1) {
+                    targetTitle += sourceTitle.substring(index, index + 1);
+                } else {
+                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
+                }
+            }
+            targetTitles.add(targetTitle);
+        });
+
+        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
+        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+
+        CriticallyIllNoticeDoc criticallyIllNoticeDoc = ModelDocGenerate.criticallyIllNoticeDocGen(sourceMap);
+        criticallyIllNoticeDoc.setText(content);
+        criticallyIllNoticeDoc.setPageData((Map) pageData);
+
+        return criticallyIllNoticeDoc;
+    }
+
+    private List<String> pageDataTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录医师"
+    );
+
+    private List<String> sourceTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录时间",
+            "记录医师"
+    );
+
 }

+ 56 - 12
trans/src/main/java/com/lantone/qc/trans/changx/ChangxDifficultCaseDiscussDocTrans.java

@@ -2,9 +2,7 @@ package com.lantone.qc.trans.changx;
 
 import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.DifficultCaseDiscussDoc;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
-import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
 import com.lantone.qc.trans.comsis.Preproc;
@@ -24,18 +22,64 @@ public class ChangxDifficultCaseDiscussDocTrans extends ModelDocTrans {
         List<DifficultCaseDiscussDoc> retList = Lists.newArrayList();
         List<String> contents = (List) medrecVo.getContent().get("content");
         contents.forEach(content -> {
-            Map<String, String> structureMap =
-                    Preproc.extract_doc_pub(
-                            false,
-                            ListUtil.isEmpty(medrecVo.getLabel()) ? ModelStandardKeys.difficultCaseDiscuss : medrecVo.getLabel(),
-                            content
-                    );
-
-            DifficultCaseDiscussDoc difficultCaseDiscussDoc = ModelDocGenerate.difficultCaseDiscussDocGen(structureMap);
-            difficultCaseDiscussDoc.setText(content);
-            retList.add(difficultCaseDiscussDoc);
+            retList.add(getDifficultCaseDiscussDoc(content));
         });
         return retList;
     }
 
+    private DifficultCaseDiscussDoc getDifficultCaseDiscussDoc(String content) {
+        Map<String, String> pageData = Preproc.extract_doc_pub(true, pageDataTitles, content);
+        pageData.put("病程记录内容",
+                pageData.get("病程记录内容")
+                        .replace(pageData.get("病程记录时间"), "")
+                        .replace(pageData.get("病程记录名称"), "")
+        );
+
+        List<String> targetTitles = Lists.newArrayList();
+        sourceTitles.forEach(sourceTitle -> {
+            String targetTitle = "";
+            for (int index = 0; index < sourceTitle.length(); index++) {
+                if (index == sourceTitle.length() - 1) {
+                    targetTitle += sourceTitle.substring(index, index + 1);
+                } else {
+                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
+                }
+            }
+            targetTitles.add(targetTitle);
+        });
+
+        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
+        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+
+        DifficultCaseDiscussDoc difficultCaseDiscussDoc = ModelDocGenerate.difficultCaseDiscussDocGen(sourceMap);
+        difficultCaseDiscussDoc.setText(content);
+        difficultCaseDiscussDoc.setPageData((Map) pageData);
+
+        return difficultCaseDiscussDoc;
+    }
+
+    private List<String> pageDataTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录医师"
+    );
+
+    private List<String> sourceTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录时间",
+            "记录医师",
+            "入院时间",
+            "入院诊断",
+            "讨论时间",
+            "讨论地点",
+            "讨论目的",
+            "主持人",
+            "参加讨论者",
+            "讨论内容",
+            "结论"
+    );
+
 }

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

@@ -10,7 +10,7 @@ import com.lantone.qc.trans.DocTrans;
 import java.util.stream.Collectors;
 
 /**
- * @ClassName : TaiZhouDocTrans
+ * @ClassName : ChangxDocTrans
  * @Description :
  * @Author : 楼辉荣
  * @Date: 2020-03-03 19:47

+ 47 - 12
trans/src/main/java/com/lantone/qc/trans/changx/ChangxDoctorAdviceDocTrans.java

@@ -2,9 +2,7 @@ package com.lantone.qc.trans.changx;
 
 import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
-import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
 import com.lantone.qc.trans.comsis.Preproc;
@@ -24,18 +22,55 @@ public class ChangxDoctorAdviceDocTrans extends ModelDocTrans {
         List<DoctorAdviceDoc> retList = Lists.newArrayList();
         List<String> contents = (List) medrecVo.getContent().get("content");
         contents.forEach(content -> {
-            Map<String, String> structureMap =
-                    Preproc.extract_doc_pub(
-                            false,
-                            ListUtil.isEmpty(medrecVo.getLabel()) ? ModelStandardKeys.doctorAdvice : medrecVo.getLabel(),
-                            content
-                    );
-
-            DoctorAdviceDoc doctorAdviceDoc = ModelDocGenerate.doctorAdviceDocGen(structureMap);
-            doctorAdviceDoc.setText(content);
-            retList.add(doctorAdviceDoc);
+            retList.add(getDoctorAdviceDoc(content));
         });
         return retList;
     }
 
+    private DoctorAdviceDoc getDoctorAdviceDoc(String content) {
+        Map<String, String> pageData = Preproc.extract_doc_pub(true, pageDataTitles, content);
+        pageData.put("病程记录内容",
+                pageData.get("病程记录内容")
+                        .replace(pageData.get("病程记录时间"), "")
+                        .replace(pageData.get("病程记录名称"), "")
+        );
+
+        List<String> targetTitles = Lists.newArrayList();
+        sourceTitles.forEach(sourceTitle -> {
+            String targetTitle = "";
+            for (int index = 0; index < sourceTitle.length(); index++) {
+                if (index == sourceTitle.length() - 1) {
+                    targetTitle += sourceTitle.substring(index, index + 1);
+                } else {
+                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
+                }
+            }
+            targetTitles.add(targetTitle);
+        });
+
+        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
+        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+
+        DoctorAdviceDoc doctorAdviceDoc = ModelDocGenerate.doctorAdviceDocGen(sourceMap);
+        doctorAdviceDoc.setText(content);
+        doctorAdviceDoc.setPageData((Map) pageData);
+
+        return doctorAdviceDoc;
+    }
+
+    private List<String> pageDataTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录医师"
+    );
+
+    private List<String> sourceTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录时间",
+            "记录医师"
+    );
+
 }

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

@@ -2,7 +2,7 @@ package com.lantone.qc.trans.changx;
 
 import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
+import com.lantone.qc.pub.model.keys.TextTypeStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.trans.ModelDocTrans;
@@ -24,7 +24,7 @@ public class ChangxLeaveHospitalDocTrans extends ModelDocTrans {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
 
         List<String> targetTitles = Lists.newArrayList();
-        List<String> sourceTitles = ListUtil.isEmpty(medrecVo.getLabel()) ? ModelStandardKeys.leaveHospital : medrecVo.getLabel();
+        List<String> sourceTitles = ListUtil.isEmpty(medrecVo.getLabel()) ? TextTypeStandardKeys.leaveHospital : medrecVo.getLabel();
         sourceTitles.forEach(sourceTitle -> {
             String targetTitle = "";
             for (int index = 0; index < sourceTitle.length(); index++) {

+ 42 - 10
trans/src/main/java/com/lantone/qc/trans/changx/ChangxNursingSystemDocTrans.java

@@ -1,9 +1,8 @@
 package com.lantone.qc.trans.changx;
 
+import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.NursingSystemDoc;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
-import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
 import com.lantone.qc.trans.comsis.Preproc;
@@ -21,17 +20,50 @@ public class ChangxNursingSystemDocTrans extends ModelDocTrans {
     @Override
     public NursingSystemDoc extract(MedrecVo medrecVo) {
         String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
-        Map<String, String> structureMap =
-                Preproc.extract_doc_pub(
-                        false,
-                        ListUtil.isEmpty(medrecVo.getLabel()) ? ModelStandardKeys.nursingSystem : medrecVo.getLabel(),
-                        content
-                );
-
-        NursingSystemDoc nursingSystemDoc = ModelDocGenerate.nursingSystemDocGen(structureMap);
+
+        Map<String, String> pageData = Preproc.extract_doc_pub(true, pageDataTitles, content);
+        pageData.put("病程记录内容",
+                pageData.get("病程记录内容")
+                        .replace(pageData.get("病程记录时间"), "")
+                        .replace(pageData.get("病程记录名称"), "")
+        );
+
+        List<String> targetTitles = Lists.newArrayList();
+        sourceTitles.forEach(sourceTitle -> {
+            String targetTitle = "";
+            for (int index = 0; index < sourceTitle.length(); index++) {
+                if (index == sourceTitle.length() - 1) {
+                    targetTitle += sourceTitle.substring(index, index + 1);
+                } else {
+                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
+                }
+            }
+            targetTitles.add(targetTitle);
+        });
+
+        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
+        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+
+        NursingSystemDoc nursingSystemDoc = ModelDocGenerate.nursingSystemDocGen(sourceMap);
         nursingSystemDoc.setText(content);
+        nursingSystemDoc.setPageData((Map) pageData);
 
         return nursingSystemDoc;
     }
 
+    private List<String> pageDataTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录医师"
+    );
+
+    private List<String> sourceTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录时间",
+            "记录医师"
+    );
+
 }

+ 47 - 12
trans/src/main/java/com/lantone/qc/trans/changx/ChangxSeriouslyIllNoticeDocTrans.java

@@ -2,9 +2,7 @@ package com.lantone.qc.trans.changx;
 
 import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.SeriouslyIllNoticeDoc;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
-import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
 import com.lantone.qc.trans.comsis.Preproc;
@@ -24,18 +22,55 @@ public class ChangxSeriouslyIllNoticeDocTrans extends ModelDocTrans {
         List<SeriouslyIllNoticeDoc> retList = Lists.newArrayList();
         List<String> contents = (List) medrecVo.getContent().get("content");
         contents.forEach(content -> {
-            Map<String, String> structureMap =
-                    Preproc.extract_doc_pub(
-                            false,
-                            ListUtil.isEmpty(medrecVo.getLabel()) ? ModelStandardKeys.seriouslyIllNotice : medrecVo.getLabel(),
-                            content
-                    );
-
-            SeriouslyIllNoticeDoc seriouslyIllNoticeDoc = ModelDocGenerate.seriouslyIllNoticeDocGen(structureMap);
-            seriouslyIllNoticeDoc.setText(content);
-            retList.add(seriouslyIllNoticeDoc);
+            retList.add(getSeriouslyIllNoticeDoc(content));
         });
         return retList;
     }
 
+    private SeriouslyIllNoticeDoc getSeriouslyIllNoticeDoc(String content) {
+        Map<String, String> pageData = Preproc.extract_doc_pub(true, pageDataTitles, content);
+        pageData.put("病程记录内容",
+                pageData.get("病程记录内容")
+                        .replace(pageData.get("病程记录时间"), "")
+                        .replace(pageData.get("病程记录名称"), "")
+        );
+
+        List<String> targetTitles = Lists.newArrayList();
+        sourceTitles.forEach(sourceTitle -> {
+            String targetTitle = "";
+            for (int index = 0; index < sourceTitle.length(); index++) {
+                if (index == sourceTitle.length() - 1) {
+                    targetTitle += sourceTitle.substring(index, index + 1);
+                } else {
+                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
+                }
+            }
+            targetTitles.add(targetTitle);
+        });
+
+        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
+        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+
+        SeriouslyIllNoticeDoc seriouslyIllNoticeDoc = ModelDocGenerate.seriouslyIllNoticeDocGen(sourceMap);
+        seriouslyIllNoticeDoc.setText(content);
+        seriouslyIllNoticeDoc.setPageData((Map) pageData);
+
+        return seriouslyIllNoticeDoc;
+    }
+
+    private List<String> pageDataTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录医师"
+    );
+
+    private List<String> sourceTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录时间",
+            "记录医师"
+    );
+
 }

+ 47 - 12
trans/src/main/java/com/lantone/qc/trans/changx/ChangxStagesSummaryDocTrans.java

@@ -2,9 +2,7 @@ package com.lantone.qc.trans.changx;
 
 import com.google.common.collect.Lists;
 import com.lantone.qc.pub.model.doc.StagesSummaryDoc;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
-import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
 import com.lantone.qc.trans.comsis.Preproc;
@@ -24,18 +22,55 @@ public class ChangxStagesSummaryDocTrans extends ModelDocTrans {
         List<StagesSummaryDoc> retList = Lists.newArrayList();
         List<String> contents = (List) medrecVo.getContent().get("content");
         contents.forEach(content -> {
-            Map<String, String> structureMap =
-                    Preproc.extract_doc_pub(
-                            false,
-                            ListUtil.isEmpty(medrecVo.getLabel()) ? ModelStandardKeys.stagesSummary : medrecVo.getLabel(),
-                            content
-                    );
-
-            StagesSummaryDoc stagesSummaryDoc = ModelDocGenerate.stagesSummaryDocGen(structureMap);
-            stagesSummaryDoc.setText(content);
-            retList.add(stagesSummaryDoc);
+            retList.add(getStagesSummaryDoc(content));
         });
         return retList;
     }
 
+    private StagesSummaryDoc getStagesSummaryDoc(String content) {
+        Map<String, String> pageData = Preproc.extract_doc_pub(true, pageDataTitles, content);
+        pageData.put("病程记录内容",
+                pageData.get("病程记录内容")
+                        .replace(pageData.get("病程记录时间"), "")
+                        .replace(pageData.get("病程记录名称"), "")
+        );
+
+        List<String> targetTitles = Lists.newArrayList();
+        sourceTitles.forEach(sourceTitle -> {
+            String targetTitle = "";
+            for (int index = 0; index < sourceTitle.length(); index++) {
+                if (index == sourceTitle.length() - 1) {
+                    targetTitle += sourceTitle.substring(index, index + 1);
+                } else {
+                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
+                }
+            }
+            targetTitles.add(targetTitle);
+        });
+
+        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
+        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+
+        StagesSummaryDoc stagesSummaryDoc = ModelDocGenerate.stagesSummaryDocGen(sourceMap);
+        stagesSummaryDoc.setText(content);
+        stagesSummaryDoc.setPageData((Map) pageData);
+
+        return stagesSummaryDoc;
+    }
+
+    private List<String> pageDataTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录医师"
+    );
+
+    private List<String> sourceTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录时间",
+            "记录医师"
+    );
+
 }

+ 152 - 34
trans/src/main/java/com/lantone/qc/trans/changx/ChangxTransferRecordDocTrans.java

@@ -1,10 +1,11 @@
 package com.lantone.qc.trans.changx;
 
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import com.lantone.qc.pub.model.doc.transferrecord.TransferIntoDoc;
 import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
 import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
@@ -14,6 +15,7 @@ import com.lantone.qc.trans.comsis.Preproc;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * @Description: 转科记录文档生成
@@ -25,46 +27,162 @@ public class ChangxTransferRecordDocTrans extends ModelDocTrans {
     @Override
     public List<TransferRecordDoc> extract(MedrecVo medrecVo) {
         List<TransferRecordDoc> retList = Lists.newArrayList();
-        Map<String, Object> content = medrecVo.getContent();
-        Map<String, List<String>> labelMap = (Map) content.get("label");
-        List<String> transferIntoLabel = labelMap.get("转入");
-        List<String> transferOutLabel = labelMap.get("转出");
-        List<Map<String, String>> transferRecords = (List) content.get("content");
-
-        String transferIntoContent, transferOutContent;
-        Map<String, String> transferIntoStructureMap, transferOutStructureMap;
-        for (Map<String, String> transferRecord : transferRecords) {
+
+        Map<String, List<String>> contentMap = (Map) medrecVo.getContent().get("content");
+        if (contentMap == null) {
+            return retList;
+        }
+
+        Map<String, TransferIntoDoc> transferIntoDocMap = getTransferIntoDocMap(contentMap.get("转入"));
+        Map<String, TransferOutDoc> transferOutDocMap = getTransferOutDocMap(contentMap.get("转出"));
+
+        Set<String> transferRecordNameSet = Sets.newHashSet();
+        transferRecordNameSet.addAll(transferIntoDocMap.keySet());
+        transferRecordNameSet.addAll(transferOutDocMap.keySet());
+
+        transferRecordNameSet.forEach(transferRecordName -> {
             TransferRecordDoc transferRecordDoc = new TransferRecordDoc();
+            transferRecordDoc.setTransferRecordName(transferRecordName);
+            transferRecordDoc.setTransferIntoDoc(transferIntoDocMap.get(transferRecordName));
+            transferRecordDoc.setTransferOutDoc(transferOutDocMap.get(transferRecordName));
+            retList.add(transferRecordDoc);
+        });
+
+        return retList;
+    }
+
 
-            transferIntoContent = transferRecord.get("转入");
-            if (StringUtil.isNotBlank(transferIntoContent)) {
-                transferIntoStructureMap =
-                        Preproc.extract_doc_pub(
-                                false,
-                                ListUtil.isEmpty(transferIntoLabel) ? ModelStandardKeys.transferInto : transferIntoLabel,
-                                transferIntoContent
-                        );
-                TransferIntoDoc transferIntoDoc = ModelDocGenerate.transferIntoDocGen(transferIntoStructureMap);
-                transferIntoDoc.setText(transferIntoContent);
-                transferRecordDoc.setTransferIntoDoc(transferIntoDoc);
+    /**************************************************转入*******************************************************/
+    private Map<String, TransferIntoDoc> getTransferIntoDocMap(List<String> contents) {
+        Map<String, TransferIntoDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String transferRecordName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
             }
+            transferRecordName = index + "";
+            TransferIntoDoc transferIntoDoc = getTransferIntoDoc(content);
+            transferIntoDoc.setTransferRecordName(transferRecordName);
+            retMap.put(transferRecordName, transferIntoDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private TransferIntoDoc getTransferIntoDoc(String content) {
+        Map<String, String> pageData = Preproc.extract_doc_pub(true, transferInto_pageDataTitles, content);
+        pageData.put("病程记录内容",
+                pageData.get("病程记录内容")
+                        .replace(pageData.get("病程记录时间"), "")
+                        .replace(pageData.get("病程记录名称"), "")
+        );
 
-            transferOutContent = transferRecord.get("转出");
-            if (StringUtil.isNotBlank(transferOutContent)) {
-                transferOutStructureMap =
-                        Preproc.extract_doc_pub(
-                                false,
-                                ListUtil.isEmpty(transferOutLabel) ? ModelStandardKeys.transferOut : transferOutLabel,
-                                transferOutContent
-                        );
-                TransferOutDoc transferOutDoc = ModelDocGenerate.transferOutDocGen(transferOutStructureMap);
-                transferOutDoc.setText(transferOutContent);
-                transferRecordDoc.setTransferOutDoc(transferOutDoc);
+        List<String> targetTitles = Lists.newArrayList();
+        transferInto_sourceTitles.forEach(sourceTitle -> {
+            String targetTitle = "";
+            for (int index = 0; index < sourceTitle.length(); index++) {
+                if (index == sourceTitle.length() - 1) {
+                    targetTitle += sourceTitle.substring(index, index + 1);
+                } else {
+                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
+                }
             }
+            targetTitles.add(targetTitle);
+        });
 
-            retList.add(transferRecordDoc);
+        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
+        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+
+        TransferIntoDoc transferIntoDoc = ModelDocGenerate.transferIntoDocGen(sourceMap);
+        transferIntoDoc.setText(content);
+        transferIntoDoc.setPageData((Map) pageData);
+
+        return transferIntoDoc;
+    }
+
+    private List<String> transferInto_pageDataTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录医师"
+    );
+    private List<String> transferInto_sourceTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录时间",
+            "记录医师"
+    );
+
+
+    /**************************************************转出*******************************************************/
+    private Map<String, TransferOutDoc> getTransferOutDocMap(List<String> contents) {
+        Map<String, TransferOutDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
         }
-        return retList;
+        int index = 1;
+        String transferRecordName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            transferRecordName = index + "";
+            TransferOutDoc transferOutDoc = getTransferOutDoc(content);
+            transferOutDoc.setTransferRecordName(transferRecordName);
+            retMap.put(transferRecordName, transferOutDoc);
+            index++;
+        }
+        return retMap;
     }
 
+    private TransferOutDoc getTransferOutDoc(String content) {
+        Map<String, String> pageData = Preproc.extract_doc_pub(true, transferOut_pageDataTitles, content);
+        pageData.put("病程记录内容",
+                pageData.get("病程记录内容")
+                        .replace(pageData.get("病程记录时间"), "")
+                        .replace(pageData.get("病程记录名称"), "")
+        );
+
+        List<String> targetTitles = Lists.newArrayList();
+        transferOut_sourceTitles.forEach(sourceTitle -> {
+            String targetTitle = "";
+            for (int index = 0; index < sourceTitle.length(); index++) {
+                if (index == sourceTitle.length() - 1) {
+                    targetTitle += sourceTitle.substring(index, index + 1);
+                } else {
+                    targetTitle += sourceTitle.substring(index, index + 1) + "[\\s\\p{Zs}]*";
+                }
+            }
+            targetTitles.add(targetTitle);
+        });
+
+        Map<String, String> sourceMap = Preproc.extract_doc_pub(true, targetTitles, content);
+        sourceMap.put("记录时间", sourceMap.get("病程记录时间"));
+
+        TransferOutDoc transferOutDoc = ModelDocGenerate.transferOutDocGen(sourceMap);
+        transferOutDoc.setText(content);
+        transferOutDoc.setPageData((Map) pageData);
+
+        return transferOutDoc;
+    }
+
+    private List<String> transferOut_pageDataTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录医师"
+    );
+    private List<String> transferOut_sourceTitles = Lists.newArrayList(
+            "病程记录时间",
+            "病程记录名称",
+            "病程记录内容",
+            "记录时间",
+            "记录医师"
+    );
+
 }

+ 6 - 11
trans/src/main/java/com/lantone/qc/trans/comsis/Preproc.java

@@ -1,11 +1,6 @@
 package com.lantone.qc.trans.comsis;
 
-import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.lantone.qc.pub.model.keys.ModelStandardKeys;
-import com.lantone.qc.pub.util.FileUtil;
-import com.lantone.qc.pub.util.ListUtil;
-import com.lantone.qc.pub.util.StringUtil;
 
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -35,7 +30,7 @@ public class Preproc {
      * @return
      */
     public static Map<String, String> extract_doc_pub(boolean isProgress, List<String> title, String line) {
-//        line = line.replaceAll("[ *| *| *]*", "");
+        //        line = line.replaceAll("[ *| *| *]*", "");
         int pos = 0;
         int ln_pos = 0;
         String item = "";
@@ -47,8 +42,8 @@ public class Preproc {
 
         for (String key : title) {
             Pattern pattern = Pattern.compile(key);
-            Matcher matcher=pattern.matcher(line);
-            while(matcher.find()){
+            Matcher matcher = pattern.matcher(line);
+            while (matcher.find()) {
                 key = matcher.group(0);
             }
 
@@ -104,9 +99,9 @@ public class Preproc {
         }
         sections.put(lbl, item);
 
-        Map<String,String> sectionsNew = Maps.newHashMap();
-        sections.keySet().forEach(key->{
-            sectionsNew.put(key.replaceAll("[\\s\\p{Zs}]",""),sections.get(key));
+        Map<String, String> sectionsNew = Maps.newHashMap();
+        sections.keySet().forEach(key -> {
+            sectionsNew.put(key.replaceAll("[\\s\\p{Zs}]", ""), sections.get(key));
         });
 
         return sectionsNew;

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouAnesthesiaRelatedDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 麻醉相关文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+public class TaiZhouAnesthesiaRelatedDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<AnesthesiaRelatedDoc> extract(MedrecVo medrecVo) {
+        List<AnesthesiaRelatedDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getAnesthesiaRelatedDoc(content));
+        });
+        return retList;
+    }
+
+    private AnesthesiaRelatedDoc getAnesthesiaRelatedDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        AnesthesiaRelatedDoc anesthesiaRelatedDoc = new AnesthesiaRelatedDoc();
+        anesthesiaRelatedDoc.setStructureMap(structureMap);
+
+        return anesthesiaRelatedDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 367 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouBeHospitalizedDocTrans.java

@@ -0,0 +1,367 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 入院记录文档生成
+ * @author: rengb
+ * @time: 2020/3/5 15:47
+ */
+public class TaiZhouBeHospitalizedDocTrans extends ModelDocTrans {
+
+    @Override
+    public BeHospitalizedDoc extract(MedrecVo medrecVo) {
+        String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
+
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+        BeHospitalizedDoc beHospitalizedDoc = new BeHospitalizedDoc();
+        beHospitalizedDoc.setStructureMap(structureMap);
+
+        return beHospitalizedDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "结节=",
+            "月经周期=",
+            "脑膜刺激征=",
+            "一般健康状况=",
+            "蠕动波=",
+            "疫区居留史=",
+            "舌=",
+            "扁桃体=",
+            "瞳孔=",
+            "Laseque征=",
+            "婚姻状况=",
+            "肾触及=",
+            "鼻体检=",
+            "神志水平=",
+            "地址=",
+            "角膜=",
+            "肝边缘肋下=",
+            "心脏浊音界(右3肋间)=",
+            "瞳孔右侧=",
+            "心律=",
+            "肌力(左上肢)=",
+            "心率=",
+            "峡部=",
+            "腋下=",
+            "深反射=",
+            "药物食物中毒史=",
+            "本人姓名=",
+            "治疗=",
+            "周围血管征=",
+            "出生地址=",
+            "脉搏=",
+            "腹式呼吸=",
+            "预防接种史=",
+            "入病房时间=",
+            "病毒性肝炎=",
+            "颅神经=",
+            "现住址=",
+            "肢体形态=",
+            "皮下出血=",
+            "滑车上=",
+            "心脏浊音界(左3肋间)=",
+            "婚姻、月经及生育史=",
+            "眼球=",
+            "头颅外形=",
+            "浅表淋巴结体检=",
+            "肿大部位=",
+            "听力粗测=",
+            "扩张静脉及血流方向=",
+            "脾表面=",
+            "体位=",
+            "虹膜=",
+            "关节强直=",
+            "胆囊大小=",
+            "泌尿生殖=",
+            "四肢关节检查=",
+            "牙=",
+            "痛经=",
+            "叩诊音=",
+            "既往史=",
+            "神经系统检查=",
+            "鼻出血=",
+            "已饮酒=",
+            "齿列=",
+            "心前区异常搏动=",
+            "腹纹=",
+            "已吸烟=",
+            "病历号=",
+            "第I/II/III测量线上脾脏大小=",
+            "高血压=",
+            "气管位置=",
+            "浅反射=",
+            "心尖搏动震颤=",
+            "月经量=",
+            "胸部血管=",
+            "肝掌=",
+            "脾压痛=",
+            "死产=",
+            "肾脏检查=",
+            "家庭成员遗传性疾病=",
+            "心尖搏动=",
+            "面容=",
+            "感觉=",
+            "每日饮酒=",
+            "腹部疤痕=",
+            "肌力(右上肢)=",
+            "脾硬度=",
+            "医院=",
+            "就诊类别=",
+            "胸骨压痛=",
+            "专科检查=",
+            "肋下/剑突下=",
+            "每日吸烟=",
+            "意识=",
+            "心音=",
+            "颈软硬度=",
+            "肝结节=",
+            "呼吸运动=",
+            "腹股沟=",
+            "过敏史=",
+            "心脏浊音界(右2肋间)=",
+            "肝表面=",
+            "经期天数=",
+            "心尖搏动位置=",
+            "定向力=",
+            "生日=",
+            "心脏浊音界(左4肋间)=",
+            "四肢红肿=",
+            "耳体检=",
+            "头颅畸形=",
+            "胆囊压痛=",
+            "输血史=",
+            "结婚年龄=",
+            "腹壁静脉曲张=",
+            "触诊=",
+            "肺=",
+            "抗凝药物情况=",
+            "脊柱活动度=",
+            "审核=",
+            "咽=",
+            "浅表淋巴结=",
+            "活动=",
+            "出生、生长史=",
+            "肌力(右下肢)=",
+            "皮疹=",
+            "脾脏检查=",
+            "肝大小=",
+            "生命体征=",
+            "运动=",
+            "本人电话=",
+            "桡动脉脉率=",
+            "肝边缘剑突下=",
+            "皮疹部位=",
+            "体重=",
+            "语颤触觉=",
+            "额外心音=",
+            "胸廓=",
+            "移动性浊音=",
+            "子女健康状况=",
+            "颈动脉搏动=",
+            "胸部检查=",
+            "巩膜=",
+            "心脏叩诊=",
+            "腹部外形=",
+            "肝脏检查=",
+            "运动系统:步态=",
+            "毛发分布=",
+            "肝压痛=",
+            "心尖搏动感=",
+            "修正诊断=",
+            "肾移动度=",
+            "查体合作性=",
+            "主诉=",
+            "心脏杂音=",
+            "大病史腹部=",
+            "皮肤色泽=",
+            "肌力(左下肢)=",
+            "肾大小=",
+            "实验室检查=",
+            "存活=",
+            "肌张力=",
+            "婚姻=",
+            "心脏病=",
+            "性别=",
+            "腹部检查=",
+            "肝区叩击痛=",
+            "初步诊断=",
+            "头颈部=",
+            "心包摩擦感=",
+            "包块=",
+            "肝上界位于右锁骨中线=",
+            "病历状态=",
+            "肾压痛=",
+            "会诊申请=",
+            "肋间隙=",
+            "水肿=",
+            "唇=",
+            "声音=",
+            "心脏浊音界(左5肋间)=",
+            "肾硬度=",
+            "发育=",
+            "紧张度=",
+            "个人史=",
+            "耳廓=",
+            "心脏体检=",
+            "脐=",
+            "听诊=",
+            "化学及放射性毒物接触史=",
+            "麦氏点压痛=",
+            "颈静脉=",
+            "相对浊音界=",
+            "图片1=",
+            "图片2=",
+            "呼吸类型=",
+            "其它疾病情况=",
+            "肠鸣音=",
+            "结膜=",
+            "浅感觉=",
+            "营养会诊=",
+            "肛门直肠=",
+            "辅助检查结果=",
+            "脾质地=",
+            "绝经年龄=",
+            "肝脏疾病=",
+            "病历日期=",
+            "生殖器=",
+            "胆囊检查=",
+            "呼吸=",
+            "肺下界(肩胛下)=",
+            "呼吸频率/节律=",
+            "肛门直肠检查=",
+            "体温=",
+            "病理反射=",
+            "信息来源=",
+            "四肢杵状指=",
+            "手术外伤史=",
+            "职业=",
+            "长期用药=",
+            "颈抵抗=",
+            "白带=",
+            "结核病=",
+            "动脉壁弹性=",
+            "乳房对称度=",
+            "传染病史=",
+            "表情=",
+            "医生=",
+            "月经初潮年龄=",
+            "口腔体检=",
+            "Babinski征=",
+            "脊椎=",
+            "脾边缘距脐=",
+            "脊椎检查=",
+            "捻发感=",
+            "心脏浊音界(右5肋间)=",
+            "血压=",
+            "糖尿病=",
+            "生命体征(专科检查)=",
+            "肝颈回流征=",
+            "家族史=",
+            "脾边缘肋下=",
+            "锁骨上=",
+            "泌尿生殖检查=",
+            "肺下界移动度左=",
+            "其它异常=",
+            "心前区隆起=",
+            "呼吸音=",
+            "血管=",
+            "呼吸系统疾病=",
+            "副鼻窦压痛=",
+            "肌肉萎缩=",
+            "肺下界移动度右=",
+            "脊柱形态=",
+            "工作场所=",
+            "婚姻家庭关系和睦=",
+            "下肢曲张静脉=",
+            "联系人=",
+            "口腔粘膜=",
+            "顺产(足月)=",
+            "肾区叩痛=",
+            "输尿管压痛=",
+            "审核人=",
+            "外耳道分泌物=",
+            "胆囊触及=",
+            "流产=",
+            "蜘蛛痣=",
+            "月经规律=",
+            "瞳孔左侧=",
+            "腹部叩诊音=",
+            "肝质地=",
+            "配偶健康状况=",
+            "深感觉=",
+            "脾触及=",
+            "反跳痛=",
+            "事件基本信息=",
+            "家庭成员类似病史=",
+            "眼睑=",
+            "身高=",
+            "年龄=",
+            "疝=",
+            "目前仍需治疗的其他疾病=",
+            "心包摩擦音=",
+            "眼部体检=",
+            "血管节律=",
+            "皮肤弹性=",
+            "病人基本信息=",
+            "Murphy征=",
+            "腺叶=",
+            "吸烟=",
+            "冶游史=",
+            "肌肉压痛=",
+            "锁骨中线至前正中线=",
+            "头部体检=",
+            "临床科室=",
+            "饮酒=",
+            "压痛=",
+            "咽部粘膜=",
+            "现病史=",
+            "四肢关节=",
+            "康复会诊=",
+            "视力粗测右=",
+            "棘突叩击痛=",
+            "鼻通气=",
+            "足背动脉搏动=",
+            "早产=",
+            "民族=",
+            "一般情况=",
+            "腮腺=",
+            "皮肤体检=",
+            "工作性质=",
+            "影像学检查=",
+            "末次月经日期=",
+            "血管杂音=",
+            "乳突压痛=",
+            "补充诊断=",
+            "肾脏疾病=",
+            "瞳孔对光反射=",
+            "关系=",
+            "颈检查=",
+            "心脏浊音界(左2肋间)=",
+            "家庭成员健康情况=",
+            "气过水声=",
+            "营养=",
+            "鼻外形=",
+            "肋脊角叩击痛=",
+            "审核日期=",
+            "内科疾病史(其它)=",
+            "脑血管疾病=",
+            "甲状腺=",
+            "疼痛评分=",
+            "肝触及=",
+            "皮温及湿度=",
+            "视力粗测左=",
+            "运动系统:共济失调=",
+            "齿龈=",
+            "心脏浊音界(右4肋间)="
+    );
+
+}

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouClinicalBloodDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 输血/血制品病程记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:21
+ */
+public class TaiZhouClinicalBloodDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<ClinicalBloodDoc> extract(MedrecVo medrecVo) {
+        List<ClinicalBloodDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getClinicalBloodDoc(content));
+        });
+        return retList;
+    }
+
+    private ClinicalBloodDoc getClinicalBloodDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        ClinicalBloodDoc clinicalBloodDoc = new ClinicalBloodDoc();
+        clinicalBloodDoc.setStructureMap(structureMap);
+
+        return clinicalBloodDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

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

@@ -0,0 +1,249 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationApplicationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationRecordDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationResultsDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description: 会诊文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:22
+ */
+public class TaiZhouConsultationDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<ConsultationDoc> extract(MedrecVo medrecVo) {
+        List<ConsultationDoc> retList = Lists.newArrayList();
+
+        Map<String, List<String>> contentMap = (Map) medrecVo.getContent().get("content");
+        if (contentMap == null) {
+            return retList;
+        }
+
+        Map<String, ConsultationRecordDoc> consultationRecordDocMap = getConsultationRecordDocMap(contentMap.get("会诊记录"));
+        Map<String, ConsultationResultsDoc> consultationResultsDocMap = getConsultationResultsDocMap(contentMap.get("会诊结果单"));
+        Map<String, ConsultationApplicationDoc> consultationApplicationDocMap = getConsultationApplicationDocMap(contentMap.get("会诊申请单"));
+
+        Set<String> consultationNameSet = Sets.newHashSet();
+        consultationNameSet.addAll(consultationRecordDocMap.keySet());
+        consultationNameSet.addAll(consultationResultsDocMap.keySet());
+        consultationNameSet.addAll(consultationApplicationDocMap.keySet());
+
+        consultationNameSet.forEach(consultationName -> {
+            ConsultationDoc consultationDoc = new ConsultationDoc();
+            consultationDoc.setConsultationName(consultationName);
+            consultationDoc.setConsultationRecordDoc(consultationRecordDocMap.get(consultationName));
+            consultationDoc.setConsultationResultsDoc(consultationResultsDocMap.get(consultationName));
+            consultationDoc.setConsultationApplicationDoc(consultationApplicationDocMap.get(consultationName));
+            retList.add(consultationDoc);
+        });
+
+        return retList;
+    }
+
+
+    /**************************************************会诊记录*********************************************************/
+    private Map<String, ConsultationRecordDoc> getConsultationRecordDocMap(List<String> contents) {
+        Map<String, ConsultationRecordDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String consultationName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            consultationName = index + "";
+            ConsultationRecordDoc consultationRecordDoc = getConsultationRecordDoc(content);
+            consultationRecordDoc.setConsultationName(consultationName);
+            retMap.put(consultationName, consultationRecordDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private ConsultationRecordDoc getConsultationRecordDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, consultationRecord_keyContrasts);
+
+        ConsultationRecordDoc consultationRecordDoc = new ConsultationRecordDoc();
+        consultationRecordDoc.setStructureMap(structureMap);
+
+        return consultationRecordDoc;
+    }
+
+    private List<String> consultationRecord_keyContrasts = Lists.newArrayList(
+            "体检=",
+            "审核人=",
+            "会诊意见=",
+            "事件日期=",
+            "医生=",
+            "查房医师=",
+            "简要病情=",
+            "事件基本信息=",
+            "会诊执行情况=",
+            "职务=",
+            "年龄=",
+            "临床科室1=",
+            "治疗计划和措施=",
+            "主诉=",
+            "床号=",
+            "病人基本信息=",
+            "审核日期=",
+            "性别=",
+            "本人姓名=",
+            "查房类别=",
+            "会诊查体=",
+            "病历号=",
+            "会诊科室=",
+            "病历日期=",
+            "职称=",
+            "入院日期=",
+            "临床科室=",
+            "会诊医生=",
+            "病历状态=",
+            "审核="
+    );
+
+
+    /**************************************************会诊结果单*******************************************************/
+    private Map<String, ConsultationResultsDoc> getConsultationResultsDocMap(List<String> contents) {
+        Map<String, ConsultationResultsDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String consultationName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            consultationName = index + "";
+            ConsultationResultsDoc consultationResultsDoc = getConsultationResultsDoc(content);
+            consultationResultsDoc.setConsultationName(consultationName);
+            retMap.put(consultationName, consultationResultsDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private ConsultationResultsDoc getConsultationResultsDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, consultationResults_keyContrasts);
+
+        ConsultationResultsDoc consultationResultsDoc = new ConsultationResultsDoc();
+        consultationResultsDoc.setStructureMap(structureMap);
+
+        return consultationResultsDoc;
+    }
+
+    private List<String> consultationResults_keyContrasts = Lists.newArrayList(
+            "会诊诊断=",
+            "注意事项=",
+            "审核人=",
+            "事件日期1(会诊申请日期)=",
+            "医生=",
+            "会诊类别=",
+            "事件基本信息=",
+            "血压=",
+            "年龄=",
+            "临床科室1=",
+            "病史描述=",
+            "会诊到达时间=",
+            "床号=",
+            "病人基本信息=",
+            "审核日期=",
+            "性别=",
+            "会诊查体=",
+            "本人姓名=",
+            "病历号=",
+            "会诊科室=",
+            "病历日期=",
+            "记录及建议=",
+            "入院日期=",
+            "呼吸=",
+            "脉搏=",
+            "临床科室=",
+            "年龄单位=",
+            "会诊医生=",
+            "申请医生1=",
+            "体温=",
+            "审核=",
+            "病历状态="
+    );
+
+
+    /**************************************************会诊申请单*******************************************************/
+    private Map<String, ConsultationApplicationDoc> getConsultationApplicationDocMap(List<String> contents) {
+        Map<String, ConsultationApplicationDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String consultationName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            consultationName = index + "";
+            ConsultationApplicationDoc consultationApplicationDoc = getConsultationApplicationDoc(content);
+            consultationApplicationDoc.setConsultationName(consultationName);
+            retMap.put(consultationName, consultationApplicationDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private ConsultationApplicationDoc getConsultationApplicationDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, consultationApplication_keyContrasts);
+
+        ConsultationApplicationDoc consultationApplicationDoc = new ConsultationApplicationDoc();
+        consultationApplicationDoc.setStructureMap(structureMap);
+
+        return consultationApplicationDoc;
+    }
+
+    private List<String> consultationApplication_keyContrasts = Lists.newArrayList(
+            "注意事项=",
+            "审核人=",
+            "事件日期=",
+            "医生=",
+            "会诊类别=",
+            "会诊回复=",
+            "简要病情=",
+            "事件基本信息=",
+            "年龄=",
+            "床号=",
+            "当前诊断=",
+            "病人基本信息=",
+            "就诊次数=",
+            "审核日期=",
+            "会诊理由和目的=",
+            "性别=",
+            "本人姓名=",
+            "病历号=",
+            "会诊科室=",
+            "病历日期=",
+            "申请医生=",
+            "入院日期=",
+            "临床科室=",
+            "年龄单位=",
+            "会诊医生=",
+            "诊治经过=",
+            "审核=",
+            "病历状态="
+    );
+
+}

+ 50 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCrisisValueReportDocTrans.java

@@ -0,0 +1,50 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.CrisisValueReportDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 危急值记录文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class TaiZhouCrisisValueReportDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<CrisisValueReportDoc> extract(MedrecVo medrecVo) {
+        List<CrisisValueReportDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getCrisisValueReportDoc(content));
+        });
+        return retList;
+    }
+
+    private CrisisValueReportDoc getCrisisValueReportDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        CrisisValueReportDoc crisisValueReportDoc = new CrisisValueReportDoc();
+        crisisValueReportDoc.setStructureMap(structureMap);
+
+        return crisisValueReportDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "姓名=",
+            "病历号=",
+            "病历日期=",
+            "床号=",
+            "临床科室=",
+            "病人基本信息=",
+            "医生=",
+            "内容=",
+            "性别="
+    );
+
+}

+ 65 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouCriticallyIllNoticeDocTrans.java

@@ -0,0 +1,65 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.CriticallyIllNoticeDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 病危通知书文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class TaiZhouCriticallyIllNoticeDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<CriticallyIllNoticeDoc> extract(MedrecVo medrecVo) {
+        List<CriticallyIllNoticeDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getCriticallyIllNoticeDoc(content));
+        });
+        return retList;
+    }
+
+    private CriticallyIllNoticeDoc getCriticallyIllNoticeDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        CriticallyIllNoticeDoc criticallyIllNoticeDoc = new CriticallyIllNoticeDoc();
+        criticallyIllNoticeDoc.setStructureMap(structureMap);
+
+        return criticallyIllNoticeDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "关系=",
+            "家属信息=",
+            "患者签字=",
+            "当前诊断=",
+            "床号=",
+            "审核人=",
+            "病人基本信息=",
+            "审核日期=",
+            "事件日期=",
+            "家属意见=",
+            "医生=",
+            "性别=",
+            "本人姓名=",
+            "病历号=",
+            "病历日期=",
+            "入院日期=",
+            "临床科室=",
+            "简要病情=",
+            "年龄单位=",
+            "事件基本信息=",
+            "审核=",
+            "病历状态=",
+            "年龄=",
+            "内容="
+    );
+
+}

+ 73 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathCaseDiscussDocTrans.java

@@ -0,0 +1,73 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.DeathCaseDiscussDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 死亡病例讨论记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:22
+ */
+public class TaiZhouDeathCaseDiscussDocTrans extends ModelDocTrans {
+
+    @Override
+    public DeathCaseDiscussDoc extract(MedrecVo medrecVo) {
+        String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
+
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        DeathCaseDiscussDoc deathCaseDiscussDoc = new DeathCaseDiscussDoc();
+        deathCaseDiscussDoc.setStructureMap(structureMap);
+
+        return deathCaseDiscussDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "审核人=",
+            "讨论地点=",
+            "事件日期=",
+            "医生=",
+            "专科检查=",
+            "参加人员及职称=",
+            "参加人员及职称(医生)=",
+            "简要病情=",
+            "事件基本信息=",
+            "职务=",
+            "血压=",
+            "影像学检查=",
+            "年龄=",
+            "讨论小结=",
+            "主诉=",
+            "主持人=",
+            "当前诊断=",
+            "床号=",
+            "实验室检查=",
+            "病人基本信息=",
+            "死亡原因=",
+            "审核日期=",
+            "记录人=",
+            "死亡日期=",
+            "性别=",
+            "辅助检查结果=",
+            "讨论意见=",
+            "本人姓名=",
+            "病历号=",
+            "病历日期=",
+            "职称=",
+            "现病史-发病情况=",
+            "脉搏=",
+            "呼吸=",
+            "入院日期=",
+            "临床科室=",
+            "审核=",
+            "病历状态=",
+            "体温(耳)="
+    );
+
+}

+ 69 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathRecordDocTrans.java

@@ -0,0 +1,69 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.DeathRecordDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 死亡记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:23
+ */
+public class TaiZhouDeathRecordDocTrans extends ModelDocTrans {
+
+    @Override
+    public DeathRecordDoc extract(MedrecVo medrecVo) {
+        String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
+
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        DeathRecordDoc deathRecordDoc = new DeathRecordDoc();
+        deathRecordDoc.setStructureMap(structureMap);
+
+        return deathRecordDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "入院诊断=",
+            "审核人=",
+            "事件日期=",
+            "医生=",
+            "专科检查=",
+            "事件基本信息=",
+            "血压=",
+            "年龄=",
+            "影像学检查=",
+            "主诉=",
+            "当前诊断=",
+            "床号=",
+            "病人基本信息=",
+            "实验室检查=",
+            "就诊次数=",
+            "死亡原因=",
+            "审核日期=",
+            "入院情况=",
+            "死亡日期=",
+            "辅助检查结果=",
+            "性别=",
+            "本人姓名=",
+            "病历号=",
+            "初步诊断=",
+            "病历日期=",
+            "现病史-发病情况=",
+            "呼吸=",
+            "入院日期=",
+            "脉搏=",
+            "临床科室=",
+            "诊治经过=",
+            "病历状态=",
+            "审核=",
+            "体温(耳)=",
+            "入院病情="
+    );
+
+}

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDifficultCaseDiscussDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.DifficultCaseDiscussDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 疑难病例讨论记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:23
+ */
+public class TaiZhouDifficultCaseDiscussDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<DifficultCaseDiscussDoc> extract(MedrecVo medrecVo) {
+        List<DifficultCaseDiscussDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getDifficultCaseDiscussDoc(content));
+        });
+        return retList;
+    }
+
+    private DifficultCaseDiscussDoc getDifficultCaseDiscussDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        DifficultCaseDiscussDoc difficultCaseDiscussDoc = new DifficultCaseDiscussDoc();
+        difficultCaseDiscussDoc.setStructureMap(structureMap);
+
+        return difficultCaseDiscussDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 89 - 4
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDocTrans.java

@@ -1,11 +1,10 @@
 package com.lantone.qc.trans.taizhou;
 
 import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.model.vo.QueryVo;
 import com.lantone.qc.trans.DocTrans;
 
-import java.util.Map;
-
 /**
  * @ClassName : TaiZhouDocTrans
  * @Description :
@@ -13,7 +12,93 @@ import java.util.Map;
  * @Date: 2020-03-03 19:47
  */
 public class TaiZhouDocTrans extends DocTrans {
-    public InputInfo extract(QueryVo queryVo) {
-        return null;
+
+    @Override
+    protected InputInfo extract(QueryVo queryVo) {
+        InputInfo inputInfo = new InputInfo();
+        for (MedrecVo i : queryVo.getMedrec()) {
+            if (i.getTitle().equals("会诊")) {
+                TaiZhouConsultationDocTrans consultationDocTrans = new TaiZhouConsultationDocTrans();
+                inputInfo.setConsultationDocs(consultationDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("手术")) {
+                TaiZhouOperationDocTrans operationDocTrans = new TaiZhouOperationDocTrans();
+                inputInfo.setOperationDocs(operationDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("转科记录")) {
+                TaiZhouTransferRecordDocTrans transferRecordDocTrans = new TaiZhouTransferRecordDocTrans();
+                inputInfo.setTransferRecordDocs(transferRecordDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("入院记录")) {
+                TaiZhouBeHospitalizedDocTrans beHospitalizedDocTrans = new TaiZhouBeHospitalizedDocTrans();
+                inputInfo.setBeHospitalizedDoc(beHospitalizedDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("输血/血制品病程记录")) {
+                TaiZhouClinicalBloodDocTrans clinicalBloodDocTrans = new TaiZhouClinicalBloodDocTrans();
+                inputInfo.setClinicalBloodDocs(clinicalBloodDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("危急值记录")) {
+                TaiZhouCrisisValueReportDocTrans crisisValueReportDocTrans = new TaiZhouCrisisValueReportDocTrans();
+                inputInfo.setCrisisValueReportDocs(crisisValueReportDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("病危通知书")) {
+                TaiZhouCriticallyIllNoticeDocTrans criticallyIllNoticeDocTrans = new TaiZhouCriticallyIllNoticeDocTrans();
+                inputInfo.setCriticallyIllNoticeDocs(criticallyIllNoticeDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("死亡病例讨论记录")) {
+                TaiZhouDeathCaseDiscussDocTrans deathCaseDiscussDocTrans = new TaiZhouDeathCaseDiscussDocTrans();
+                inputInfo.setDeathCaseDiscussDoc(deathCaseDiscussDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("死亡记录")) {
+                TaiZhouDeathRecordDocTrans deathRecordDocTrans = new TaiZhouDeathRecordDocTrans();
+                inputInfo.setDeathRecordDoc(deathRecordDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("疑难病例讨论记录")) {
+                TaiZhouDifficultCaseDiscussDocTrans difficultCaseDiscussDocTrans = new TaiZhouDifficultCaseDiscussDocTrans();
+                inputInfo.setDifficultCaseDiscussDocs(difficultCaseDiscussDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("医嘱信息")) {
+                TaiZhouDoctorAdviceDocTrans doctorAdviceDocTrans = new TaiZhouDoctorAdviceDocTrans();
+                inputInfo.setDoctorAdviceDocs(doctorAdviceDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("值班交接制度")) {
+                TaiZhouDutyShiftSystemDocTrans dutyShiftSystemDocTrans = new TaiZhouDutyShiftSystemDocTrans();
+                inputInfo.setDutyShiftSystemDocs(dutyShiftSystemDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("首次病程录")) {
+                TaiZhouFirstCourseRecordDocTrans firstCourseRecordDocTrans = new TaiZhouFirstCourseRecordDocTrans();
+                inputInfo.setFirstCourseRecordDoc(firstCourseRecordDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("病案首页")) {
+                TaiZhouFirstPageRecordDocTrans firstPageRecordDocTrans = new TaiZhouFirstPageRecordDocTrans();
+                inputInfo.setFirstPageRecordDoc(firstPageRecordDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("出院小结")) {
+                TaiZhouLeaveHospitalDocTrans leaveHospitalDocTrans = new TaiZhouLeaveHospitalDocTrans();
+                inputInfo.setLeaveHospitalDoc(leaveHospitalDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("分级护理制度")) {
+                TaiZhouNursingSystemDocTrans nursingSystemDocTrans = new TaiZhouNursingSystemDocTrans();
+                inputInfo.setNursingSystemDoc(nursingSystemDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("抢救记录")) {
+                TaiZhouRescueDocTrans rescueDocTrans = new TaiZhouRescueDocTrans();
+                inputInfo.setRescueDocs(rescueDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("病重通知书")) {
+                TaiZhouSeriouslyIllNoticeDocTrans seriouslyIllNoticeDocTrans = new TaiZhouSeriouslyIllNoticeDocTrans();
+                inputInfo.setSeriouslyIllNoticeDocs(seriouslyIllNoticeDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("阶段小结")) {
+                TaiZhouStagesSummaryDocTrans stagesSummaryDocTrans = new TaiZhouStagesSummaryDocTrans();
+                inputInfo.setStagesSummaryDocs(stagesSummaryDocTrans.extract(i));
+            }
+            if (i.getTitle().equals("查房记录")) {
+                TaiZhouThreeLevelWardDocTrans threeLevelWardDocTrans = new TaiZhouThreeLevelWardDocTrans();
+                inputInfo.setThreeLevelWardDocs(threeLevelWardDocTrans.extract(i));
+            }
+        }
+        return inputInfo;
     }
+
 }

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDoctorAdviceDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 医嘱信息文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class TaiZhouDoctorAdviceDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<DoctorAdviceDoc> extract(MedrecVo medrecVo) {
+        List<DoctorAdviceDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getDoctorAdviceDoc(content));
+        });
+        return retList;
+    }
+
+    private DoctorAdviceDoc getDoctorAdviceDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        DoctorAdviceDoc doctorAdviceDoc = new DoctorAdviceDoc();
+        doctorAdviceDoc.setStructureMap(structureMap);
+
+        return doctorAdviceDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDutyShiftSystemDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.DutyShiftSystemDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 值班交接制度文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:24
+ */
+public class TaiZhouDutyShiftSystemDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<DutyShiftSystemDoc> extract(MedrecVo medrecVo) {
+        List<DutyShiftSystemDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getDutyShiftSystemDoc(content));
+        });
+        return retList;
+    }
+
+    private DutyShiftSystemDoc getDutyShiftSystemDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        DutyShiftSystemDoc dutyShiftSystemDoc = new DutyShiftSystemDoc();
+        dutyShiftSystemDoc.setStructureMap(structureMap);
+
+        return dutyShiftSystemDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 75 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstCourseRecordDocTrans.java

@@ -0,0 +1,75 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 首次病程录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:25
+ */
+public class TaiZhouFirstCourseRecordDocTrans extends ModelDocTrans {
+
+    @Override
+    public FirstCourseRecordDoc extract(MedrecVo medrecVo) {
+        String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
+
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        FirstCourseRecordDoc firstCourseRecordDoc = new FirstCourseRecordDoc();
+        firstCourseRecordDoc.setStructureMap(structureMap);
+
+        return firstCourseRecordDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "入院原因=",
+            "鉴别诊断=",
+            "检查计划=",
+            "病例特点=",
+            "审核人=",
+            "诊断依据=",
+            "药物=",
+            "事件日期=",
+            "医生=",
+            "专科检查=",
+            "事件基本信息=",
+            "血压=",
+            "影像学检查=",
+            "年龄=",
+            "既往史=",
+            "治疗计划和措施=",
+            "主诉=",
+            "床号=",
+            "主任医生=",
+            "实验室检查=",
+            "病人基本信息=",
+            "医疗组长=",
+            "就诊次数=",
+            "审核日期=",
+            "性别=",
+            "辅助检查结果=",
+            "本人姓名=",
+            "入院时在使用的治疗性药物=",
+            "病历号=",
+            "初步诊断=",
+            "病历日期=",
+            "现病史-发病情况=",
+            "入院日期=",
+            "脉搏=",
+            "呼吸=",
+            "临床科室=",
+            "年龄单位=",
+            "继续使用=",
+            "体温=",
+            "审核=",
+            "病历状态="
+    );
+
+}

+ 211 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouFirstPageRecordDocTrans.java

@@ -0,0 +1,211 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 病案首页文档生成
+ * @author: 胡敬
+ * @time: 2020/3/16 17:47
+ */
+public class TaiZhouFirstPageRecordDocTrans extends ModelDocTrans {
+
+    @Override
+    public FirstPageRecordDoc extract(MedrecVo medrecVo) {
+        String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
+
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        FirstPageRecordDoc firstPageRecordDoc = new FirstPageRecordDoc();
+        firstPageRecordDoc.setStructureMap(structureMap);
+
+        return firstPageRecordDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "住院期间身体约束=",
+            "出院日期=",
+            "诊断符合情况=",
+            "手术费=",
+            "入院途径=",
+            "颅脑损伤患者昏迷时间(入院前)=",
+            "住院费用=",
+            "红细胞=",
+            "输血情况=",
+            "入院科室=",
+            "临床诊断项目费=",
+            "血浆=",
+            "主治医生=",
+            "Rh血型=",
+            "护理费=",
+            "住院自付金额=",
+            "手术治疗费=",
+            "细胞因子类制品费=",
+            "综合医疗其他服务费=",
+            "出院科室=",
+            "户口地址邮政编码=",
+            "凝血因子类制品费=",
+            "家庭电话=",
+            "其他费=",
+            "HCV-Ab=",
+            "病案质量=",
+            "治疗用一次性医用材料费=",
+            "质控护士=",
+            "其他=",
+            "离院方式=",
+            "球蛋白类制品费=",
+            "ICD9=",
+            "ICD10=",
+            "确诊日期=",
+            "联系人姓名=",
+            "中医治疗费=",
+            "本人姓名=",
+            "新生儿年龄=",
+            "住院期间是否发生跌倒或坠床=",
+            "出生地址=",
+            "质控日期=",
+            "病历日期=",
+            "实验室诊断费=",
+            "住院医生=",
+            "现住址=",
+            "院内感染诊断=",
+            "非手术治疗项目费=",
+            "手术时数=",
+            "住院期间有无告病危=",
+            "职业=",
+            "感染部位=",
+            "手术日期2=",
+            "质控医师=",
+            "手术医师=",
+            "医院感染=",
+            "医生=",
+            "出院31天内再入院计划=",
+            "新生儿入院体重=",
+            "治疗结果=",
+            "影像学诊断费=",
+            "目的=",
+            "其它疾病治疗结果=",
+            "血型=",
+            "并发症=",
+            "临床路径管理=",
+            "拟接收医疗机构名称=",
+            "科主任=",
+            "中成药费=",
+            "助手II=",
+            "门(急)诊诊断=",
+            "非计划再次手术=",
+            "是否住院期间发生压疮=",
+            "入住ICU情况=",
+            "进修医生=",
+            "损伤中毒的外部因素=",
+            "居住地邮政编码=",
+            "麻醉方式=",
+            "病历号=",
+            "病房(出)=",
+            "入院日期=",
+            "户口地址=",
+            "年龄单位=",
+            "病房(入)=",
+            "病案完成=",
+            "西药费=",
+            "工作场所=",
+            "尸检=",
+            "其它过敏=",
+            "审核人=",
+            "病理诊断=",
+            "放射诊断与病理诊断=",
+            "医院=",
+            "就诊类别=",
+            "籍贯=",
+            "门诊诊断与住院诊断=",
+            "麻醉医师=",
+            "实习医生=",
+            "HIV-Ab=",
+            "转科科室=",
+            "联系电话=",
+            "病理诊断费=",
+            "事件基本信息=",
+            "血小板=",
+            "年龄=",
+            "并发症情况=",
+            "一般医疗服务费=",
+            "联系人地址=",
+            "过敏史=",
+            "责任护士=",
+            "主任医生=",
+            "床号=",
+            "抗菌药物费用=",
+            "病人基本信息=",
+            "生日=",
+            "切口等级=",
+            "HBsAg=",
+            "手术记录=",
+            "单病种管理=",
+            "临床诊断与病理诊断=",
+            "麻醉费=",
+            "康复费=",
+            "研究生=",
+            "临床科室=",
+            "出生体重1=",
+            "审核=",
+            "检查用一次性医用材料费=",
+            "医疗付费方式=",
+            "其它诊断=",
+            "是否进入临床路径=",
+            "入院诊断与出院诊断=",
+            "诊断治疗信息=",
+            "抢救次数=",
+            "入院诊断=",
+            "户籍住址=",
+            "病理诊断的icd10=",
+            "助手=",
+            "手术操作代码=",
+            "本人电话=",
+            "医疗组=",
+            "手术用一次性医用材料费=",
+            "白蛋白类制品费=",
+            "健康卡号=",
+            "全血=",
+            "民族=",
+            "一般治疗操作费=",
+            "术前诊断与术后诊断=",
+            "其它诊断ICD10=",
+            "病人类别=",
+            "门急诊ICD10=",
+            "中草药费=",
+            "颅脑损伤患者昏迷时间(入院后)=",
+            "关系=",
+            "切口愈合等级=",
+            "居民身份证=",
+            "是否发生压疮=",
+            "编码员=",
+            "血费=",
+            "手术级别=",
+            "成功次数=",
+            "就诊次数=",
+            "婚姻=",
+            "审核日期=",
+            "条码病历号=",
+            "主要诊断=",
+            "住院次数=",
+            "性别=",
+            "损伤诊断icd10=",
+            "入院病情2=",
+            "临床物理治疗费=",
+            "是否完成临床路径=",
+            "手术名称=",
+            "国籍=",
+            "病历状态=",
+            "实际住院天数=",
+            "本人工作单位电话=",
+            "工作单位邮政编码=",
+            "病理号="
+    );
+
+}

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouInvasiveOperationDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.InvasiveOperationDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 有创操作记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+public class TaiZhouInvasiveOperationDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<InvasiveOperationDoc> extract(MedrecVo medrecVo) {
+        List<InvasiveOperationDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getInvasiveOperationDoc(content));
+        });
+        return retList;
+    }
+
+    private InvasiveOperationDoc getInvasiveOperationDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        InvasiveOperationDoc invasiveOperationDoc = new InvasiveOperationDoc();
+        invasiveOperationDoc.setStructureMap(structureMap);
+
+        return invasiveOperationDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 33 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouLeaveHospitalDocTrans.java

@@ -0,0 +1,33 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 出院小结文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:25
+ */
+public class TaiZhouLeaveHospitalDocTrans extends ModelDocTrans {
+
+    @Override
+    public LeaveHospitalDoc extract(MedrecVo medrecVo) {
+        String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
+
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        LeaveHospitalDoc leaveHospitalDoc = new LeaveHospitalDoc();
+        leaveHospitalDoc.setStructureMap(structureMap);
+
+        return leaveHospitalDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouMedicalWritingDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.MedicalWritingDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 病历书写规范文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+public class TaiZhouMedicalWritingDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<MedicalWritingDoc> extract(MedrecVo medrecVo) {
+        List<MedicalWritingDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getMedicalWritingDoc(content));
+        });
+        return retList;
+    }
+
+    private MedicalWritingDoc getMedicalWritingDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        MedicalWritingDoc medicalWritingDoc = new MedicalWritingDoc();
+        medicalWritingDoc.setStructureMap(structureMap);
+
+        return medicalWritingDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 33 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouNursingSystemDocTrans.java

@@ -0,0 +1,33 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.NursingSystemDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 分级护理制度文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:26
+ */
+public class TaiZhouNursingSystemDocTrans extends ModelDocTrans {
+
+    @Override
+    public NursingSystemDoc extract(MedrecVo medrecVo) {
+        String content = ((List<String>) medrecVo.getContent().get("content")).get(0);
+
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        NursingSystemDoc nursingSystemDoc = new NursingSystemDoc();
+        nursingSystemDoc.setStructureMap(structureMap);
+
+        return nursingSystemDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

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

@@ -0,0 +1,156 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+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.model.doc.operation.PreoperativeDiscussionDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description: 手术文档生成
+ * @author: rengb
+ * @time: 2020/3/20 17:11
+ */
+public class TaiZhouOperationDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<OperationDoc> extract(MedrecVo medrecVo) {
+        List<OperationDoc> retList = Lists.newArrayList();
+
+        Map<String, List<String>> contentMap = (Map) medrecVo.getContent().get("content");
+        if (contentMap == null) {
+            return retList;
+        }
+
+        Map<String, OperationDiscussionDoc> operationDiscussionDocMap = getOperationDiscussionDocMap(contentMap.get("术后首次病程及谈话记录"));
+        Map<String, OperationRecordDoc> operationRecordDocMap = getOperationRecordDocMap(contentMap.get("手术记录"));
+        Map<String, PreoperativeDiscussionDoc> preoperativeDiscussionDocMap = getPreoperativeDiscussionDocMap(contentMap.get("术前讨论、术前小结"));
+
+        Set<String> operationNameSet = Sets.newHashSet();
+        operationNameSet.addAll(operationDiscussionDocMap.keySet());
+        operationNameSet.addAll(operationRecordDocMap.keySet());
+        operationNameSet.addAll(preoperativeDiscussionDocMap.keySet());
+
+        operationNameSet.forEach(operationName -> {
+            OperationDoc operationDoc = new OperationDoc();
+            operationDoc.setOperationName(operationName);
+            operationDoc.setOperationDiscussionDoc(operationDiscussionDocMap.get(operationName));
+            operationDoc.setOperationRecordDoc(operationRecordDocMap.get(operationName));
+            operationDoc.setPreoperativeDiscussionDoc(preoperativeDiscussionDocMap.get(operationName));
+            retList.add(operationDoc);
+        });
+
+        return retList;
+    }
+
+
+    /*******************************************术后首次病程及谈话记录***************************************************/
+    private Map<String, OperationDiscussionDoc> getOperationDiscussionDocMap(List<String> contents) {
+        Map<String, OperationDiscussionDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            operationName = index + "";
+            OperationDiscussionDoc operationDiscussionDoc = getOperationDiscussionDoc(content);
+            operationDiscussionDoc.setOperationName(operationName);
+            retMap.put(operationName, operationDiscussionDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private OperationDiscussionDoc getOperationDiscussionDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, operationDiscussion_keyContrasts);
+
+        OperationDiscussionDoc operationDiscussionDoc = new OperationDiscussionDoc();
+        operationDiscussionDoc.setStructureMap(structureMap);
+
+        return operationDiscussionDoc;
+    }
+
+    private List<String> operationDiscussion_keyContrasts = Lists.newArrayList();
+
+
+    /**********************************************手术记录*************************************************************/
+    private Map<String, OperationRecordDoc> getOperationRecordDocMap(List<String> contents) {
+        Map<String, OperationRecordDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            operationName = index + "";
+            OperationRecordDoc operationRecordDoc = getOperationRecordDoc(content);
+            operationRecordDoc.setOperationName(operationName);
+            retMap.put(operationName, operationRecordDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private OperationRecordDoc getOperationRecordDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, operationRecord_keyContrasts);
+
+        OperationRecordDoc operationRecordDoc = new OperationRecordDoc();
+        operationRecordDoc.setStructureMap(structureMap);
+
+        return operationRecordDoc;
+    }
+
+    private List<String> operationRecord_keyContrasts = Lists.newArrayList();
+
+
+    /**********************************************术前讨论、术前小结****************************************************/
+    private Map<String, PreoperativeDiscussionDoc> getPreoperativeDiscussionDocMap(List<String> contents) {
+        Map<String, PreoperativeDiscussionDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String operationName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            operationName = index + "";
+            PreoperativeDiscussionDoc preoperativeDiscussionDoc = getPreoperativeDiscussionDoc(content);
+            preoperativeDiscussionDoc.setOperationName(operationName);
+            retMap.put(operationName, preoperativeDiscussionDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private PreoperativeDiscussionDoc getPreoperativeDiscussionDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, preoperativeDiscussion_keyContrasts);
+
+        PreoperativeDiscussionDoc preoperativeDiscussionDoc = new PreoperativeDiscussionDoc();
+        preoperativeDiscussionDoc.setStructureMap(structureMap);
+
+        return preoperativeDiscussionDoc;
+    }
+
+    private List<String> preoperativeDiscussion_keyContrasts = Lists.newArrayList();
+
+}

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouReasonableDiagnosisDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.ReasonableDiagnosisDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 诊疗合理性文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+public class TaiZhouReasonableDiagnosisDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<ReasonableDiagnosisDoc> extract(MedrecVo medrecVo) {
+        List<ReasonableDiagnosisDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getReasonableDiagnosisDoc(content));
+        });
+        return retList;
+    }
+
+    private ReasonableDiagnosisDoc getReasonableDiagnosisDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        ReasonableDiagnosisDoc reasonableDiagnosisDoc = new ReasonableDiagnosisDoc();
+        reasonableDiagnosisDoc.setStructureMap(structureMap);
+
+        return reasonableDiagnosisDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouRescueDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.RescueDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 抢救记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 17:34
+ */
+public class TaiZhouRescueDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<RescueDoc> extract(MedrecVo medrecVo) {
+        List<RescueDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getRescueDoc(content));
+        });
+        return retList;
+    }
+
+    private RescueDoc getRescueDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        RescueDoc rescueDoc = new RescueDoc();
+        rescueDoc.setStructureMap(structureMap);
+
+        return rescueDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList();
+
+}

+ 65 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouSeriouslyIllNoticeDocTrans.java

@@ -0,0 +1,65 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.SeriouslyIllNoticeDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 病重通知书文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class TaiZhouSeriouslyIllNoticeDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<SeriouslyIllNoticeDoc> extract(MedrecVo medrecVo) {
+        List<SeriouslyIllNoticeDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getSeriouslyIllNoticeDoc(content));
+        });
+        return retList;
+    }
+
+    private SeriouslyIllNoticeDoc getSeriouslyIllNoticeDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        SeriouslyIllNoticeDoc seriouslyIllNoticeDoc = new SeriouslyIllNoticeDoc();
+        seriouslyIllNoticeDoc.setStructureMap(structureMap);
+
+        return seriouslyIllNoticeDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "关系=",
+            "家属信息=",
+            "患者签字=",
+            "当前诊断=",
+            "床号=",
+            "审核人=",
+            "病人基本信息=",
+            "审核日期=",
+            "事件日期=",
+            "家属意见=",
+            "医生=",
+            "性别=",
+            "本人姓名=",
+            "病历号=",
+            "病历日期=",
+            "入院日期=",
+            "临床科室=",
+            "简要病情=",
+            "年龄单位=",
+            "事件基本信息=",
+            "审核=",
+            "病历状态=",
+            "年龄=",
+            "内容="
+    );
+
+}

+ 82 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouStagesSummaryDocTrans.java

@@ -0,0 +1,82 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.StagesSummaryDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 阶段小结文档生成
+ * @author: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class TaiZhouStagesSummaryDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<StagesSummaryDoc> extract(MedrecVo medrecVo) {
+        List<StagesSummaryDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getStagesSummaryDoc(content));
+        });
+        return retList;
+    }
+
+    private StagesSummaryDoc getStagesSummaryDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        StagesSummaryDoc stagesSummaryDoc = new StagesSummaryDoc();
+        stagesSummaryDoc.setStructureMap(structureMap);
+
+        return stagesSummaryDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "入院诊断=",
+            "审核人=",
+            "事件日期=",
+            "医生=",
+            "专科检查=",
+            "简要病情=",
+            "事件基本信息=",
+            "血压=",
+            "年龄=",
+            "影像学检查=",
+            "内容=",
+            "科主任=",
+            "治疗计划和措施=",
+            "主诉=",
+            "床号=",
+            "主任医生=",
+            "当前诊断=",
+            "病人基本信息=",
+            "实验室检查=",
+            "医疗组长=",
+            "就诊次数=",
+            "审核日期=",
+            "患者一般情况=",
+            "入院情况=",
+            "性别=",
+            "辅助检查结果=",
+            "本人姓名=",
+            "病历号=",
+            "初步诊断=",
+            "病历日期=",
+            "现病史-发病情况=",
+            "呼吸=",
+            "脉搏=",
+            "入院日期=",
+            "临床科室=",
+            "年龄单位=",
+            "诊治经过=",
+            "病历状态=",
+            "审核=",
+            "体温(耳)=",
+            "目前情况="
+    );
+
+}

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

@@ -0,0 +1,71 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 查房记录文档生成
+ * @author: rengb
+ * @time: 2020/3/17 13:27
+ */
+public class TaiZhouThreeLevelWardDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<ThreeLevelWardDoc> extract(MedrecVo medrecVo) {
+        List<ThreeLevelWardDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getThreeLevelWardDoc(content));
+        });
+        return retList;
+    }
+
+    private ThreeLevelWardDoc getThreeLevelWardDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, keyContrasts);
+
+        ThreeLevelWardDoc threeLevelWardDoc = new ThreeLevelWardDoc();
+        threeLevelWardDoc.setStructureMap(structureMap);
+
+        return threeLevelWardDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "NRS营养风险评分=",
+            "审核人=",
+            "体检=",
+            "事件日期=",
+            "医生=",
+            "查房医师=",
+            "简要病情=",
+            "事件基本信息=",
+            "职务=",
+            "年龄=",
+            "治疗计划和措施=",
+            "主诉=",
+            "床号=",
+            "病人基本信息=",
+            "营养风险总评分=",
+            "审核日期=",
+            "上级查房医生职称=",
+            "性别=",
+            "本人姓名=",
+            "查房类别=",
+            "病历号=",
+            "病历日期=",
+            "职称=",
+            "入院日期=",
+            "临床科室=",
+            "VTE风险评估=",
+            "审核=",
+            "病历状态=",
+            "VTE评分=",
+            "上级医生="
+    );
+
+}

+ 119 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouTransferRecordDocTrans.java

@@ -0,0 +1,119 @@
+package com.lantone.qc.trans.taizhou;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferIntoDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description: 转科记录文档生成
+ * @author: rengb
+ * @time: 2020/3/20 16:10
+ */
+public class TaiZhouTransferRecordDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<TransferRecordDoc> extract(MedrecVo medrecVo) {
+        List<TransferRecordDoc> retList = Lists.newArrayList();
+
+        Map<String, List<String>> contentMap = (Map) medrecVo.getContent().get("content");
+        if (contentMap == null) {
+            return retList;
+        }
+
+        Map<String, TransferIntoDoc> transferIntoDocMap = getTransferIntoDocMap(contentMap.get("转入"));
+        Map<String, TransferOutDoc> transferOutDocMap = getTransferOutDocMap(contentMap.get("转出"));
+
+        Set<String> transferRecordNameSet = Sets.newHashSet();
+        transferRecordNameSet.addAll(transferIntoDocMap.keySet());
+        transferRecordNameSet.addAll(transferOutDocMap.keySet());
+
+        transferRecordNameSet.forEach(transferRecordName -> {
+            TransferRecordDoc transferRecordDoc = new TransferRecordDoc();
+            transferRecordDoc.setTransferRecordName(transferRecordName);
+            transferRecordDoc.setTransferIntoDoc(transferIntoDocMap.get(transferRecordName));
+            transferRecordDoc.setTransferOutDoc(transferOutDocMap.get(transferRecordName));
+            retList.add(transferRecordDoc);
+        });
+
+        return retList;
+    }
+
+
+    /**************************************************转入*******************************************************/
+    private Map<String, TransferIntoDoc> getTransferIntoDocMap(List<String> contents) {
+        Map<String, TransferIntoDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String transferRecordName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            transferRecordName = index + "";
+            TransferIntoDoc transferIntoDoc = getTransferIntoDoc(content);
+            transferIntoDoc.setTransferRecordName(transferRecordName);
+            retMap.put(transferRecordName, transferIntoDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private TransferIntoDoc getTransferIntoDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, transferInto_keyContrasts);
+
+        TransferIntoDoc transferIntoDoc = new TransferIntoDoc();
+        transferIntoDoc.setStructureMap(structureMap);
+
+        return transferIntoDoc;
+    }
+
+    private List<String> transferInto_keyContrasts = Lists.newArrayList();
+
+
+    /**************************************************转出*******************************************************/
+    private Map<String, TransferOutDoc> getTransferOutDocMap(List<String> contents) {
+        Map<String, TransferOutDoc> retMap = Maps.newHashMap();
+        if (ListUtil.isEmpty(contents)) {
+            return retMap;
+        }
+        int index = 1;
+        String transferRecordName = null;
+        for (String content : contents) {
+            if (StringUtil.isBlank(content)) {
+                continue;
+            }
+            transferRecordName = index + "";
+            TransferOutDoc transferOutDoc = getTransferOutDoc(content);
+            transferOutDoc.setTransferRecordName(transferRecordName);
+            retMap.put(transferRecordName, transferOutDoc);
+            index++;
+        }
+        return retMap;
+    }
+
+    private TransferOutDoc getTransferOutDoc(String content) {
+        Map<String, String> structureMap = TzXmlUtil.analysisXmlToMap(content, transferOut_keyContrasts);
+
+        TransferOutDoc transferOutDoc = new TransferOutDoc();
+        transferOutDoc.setStructureMap(structureMap);
+
+        return transferOutDoc;
+    }
+
+    private List<String> transferOut_keyContrasts = Lists.newArrayList();
+
+}

+ 27 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/util/TzXmlUtil.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.trans.taizhou.util;
 
 import com.google.common.collect.Maps;
+import com.lantone.qc.pub.util.FileUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.dom4j.Document;
 import org.dom4j.DocumentHelper;
@@ -32,4 +33,30 @@ public class TzXmlUtil {
         return retMap;
     }
 
+    public static Map<String, String> analysisXmlToMap(String xml, List<String> keyContrasts) {
+        Map<String, String> retMap = Maps.newHashMap();
+        Map<String, String> sourceMap = getXmlToMapForTZ(xml);
+        String[] arry = null;
+        String sourceKey = null, targetKey;
+        for (String keyContrast : keyContrasts) {
+            arry = keyContrast.split("=");
+            sourceKey = arry[0];
+            if (arry.length == 1) {
+                targetKey = arry[0];
+            } else {
+                targetKey = arry[1];
+            }
+            retMap.put(targetKey, sourceMap.get(sourceKey));
+        }
+        return retMap;
+    }
+
+    public static void main(String[] args) {
+        String msg = FileUtil.fileRead("C:\\Users\\RGB\\Desktop\\调试\\入院记录.txt");
+        Map<String, String> map = getXmlToMapForTZ(msg);
+        map.keySet().forEach(key -> {
+            System.out.println("\"" + key + "=\",");
+        });
+    }
+
 }