Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/master'

rengb 5 rokov pred
rodič
commit
ec1440a456
37 zmenil súbory, kde vykonal 1434 pridanie a 36 odobranie
  1. 6 0
      kernel/pom.xml
  2. 10 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0679.java
  3. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0562.java
  4. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0563.java
  5. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0564.java
  6. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0565.java
  7. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0566.java
  8. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0568.java
  9. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0569.java
  10. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0571.java
  11. 41 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0573.java
  12. 35 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0553.java
  13. 36 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0554.java
  14. 10 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/doctorsadvice/ADVI0589.java
  15. 10 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0622.java
  16. 10 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/medicalwriting/MEDI0653.java
  17. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0628.java
  18. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0629.java
  19. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0630.java
  20. 46 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0631.java
  21. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0632.java
  22. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0634.java
  23. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0635.java
  24. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0636.java
  25. 43 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0637.java
  26. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0638.java
  27. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0639.java
  28. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0640.java
  29. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0641.java
  30. 42 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0643.java
  31. 10 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/reasonablediagnosis/REAS0627.java
  32. 66 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0595.java
  33. 64 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0596.java
  34. 64 35
      kernel/src/main/java/com/lantone/qc/kernel/structure/ai/BeHospitalizedAI.java
  35. 1 1
      kernel/src/main/resources/kernel.properties
  36. 135 0
      kernel/src/test/java/com/lantone/qc/kernel/ImportTaizDataTest.java
  37. 1 0
      public/src/main/java/com/lantone/qc/pub/model/label/GeneralLabel.java

+ 6 - 0
kernel/pom.xml

@@ -94,6 +94,12 @@
 			<artifactId>cglib</artifactId>
 			<version>2.2.2</version>
 		</dependency>
+
+		<dependency>
+			<groupId>net.sourceforge.jexcelapi</groupId>
+			<artifactId>jxl</artifactId>
+			<version>2.6.12</version>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 10 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/anesthesiarelated/ANES0679.java

@@ -0,0 +1,10 @@
+package com.lantone.qc.kernel.catalogue.anesthesiarelated;
+
+/**
+ * @ClassName : ANES0679
+ * @Description : 麻醉相关
+ * @Author : 楼辉荣
+ * @Date: 2020-03-28 17:33
+ */
+public class ANES0679 {
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0562.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0562
+ * @Description : 输血记录开始输血时间未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0562 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("开始输血时间")){
+                    if(StringUtils.isEmpty(cliBStructureMap.get("开始输血时间"))){
+                        status.set("-1");
+                        break;
+                    }
+                }else {
+                    status.set("-1");
+                    break;
+                }
+
+            }
+        }
+
+    }
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0563.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0563
+ * @Description : 输血记录开始输血时间填写不规范
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0563 extends QCCatalogue {
+    public static String FORMAT_LONC_CN_MI = "yyyy/MM/dd HH:mm";
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("开始输血时间")){
+                    if(!StringUtils.isEmpty(cliBStructureMap.get("开始输血时间"))){
+                        try {
+                            Date date_in = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(cliBStructureMap.get("开始输血时间"));
+                        } catch (ParseException e) {
+                            status.set("-1");
+                            break;
+                        }
+                    }
+                }
+
+            }
+        }
+
+    }
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0564.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0564
+ * @Description : 输血记录输血结束时间未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0564 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("输血结束时间")){
+                    if(StringUtils.isEmpty(cliBStructureMap.get("输血结束时间"))){
+                        status.set("-1");
+                        break;
+                    }
+                }else {
+                    status.set("-1");
+                    break;
+                }
+
+            }
+        }
+
+    }
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0565.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0565
+ * @Description : 输血记录输血结束时间填写不规范
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0565 extends QCCatalogue {
+    public static String FORMAT_LONC_CN_MI = "yyyy/MM/dd HH:mm";
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("输血结束时间")){
+                    if(!StringUtils.isEmpty(cliBStructureMap.get("输血结束时间"))){
+                        try {
+                            Date date_in = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(cliBStructureMap.get("输血结束时间"));
+                        } catch (ParseException e) {
+                            status.set("-1");
+                            break;
+                        }
+                    }
+                }
+
+            }
+        }
+
+    }
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0566.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0566
+ * @Description :  输血记录输血记录者未签名
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0566 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("记录者")){
+                    if(StringUtils.isEmpty(cliBStructureMap.get("记录者"))){
+                        status.set("-1");
+                        break;
+                    }
+                }else {
+                    status.set("-1");
+                    break;
+                }
+
+            }
+        }
+
+    }
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0568.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0568
+ * @Description :  输血记录输血记录时间未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0568 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("记录时间")){
+                    if(StringUtils.isEmpty(cliBStructureMap.get("记录时间"))){
+                        status.set("-1");
+                        break;
+                    }
+                }else {
+                    status.set("-1");
+                    break;
+                }
+
+            }
+        }
+
+    }
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0569.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0569
+ * @Description :  输血记录血型未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0569 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("血型")){
+                    if(StringUtils.isEmpty(cliBStructureMap.get("血型"))){
+                        status.set("-1");
+                        break;
+                    }
+                }else {
+                    status.set("-1");
+                    break;
+                }
+
+            }
+        }
+
+    }
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0571.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0571
+ * @Description :  输血记录Rh血型未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0571 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("RH血型")){
+                    if(StringUtils.isEmpty(cliBStructureMap.get("RH血型"))){
+                        status.set("-1");
+                        break;
+                    }
+                }else {
+                    status.set("-1");
+                    break;
+                }
+
+            }
+        }
+
+    }
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0573.java

@@ -0,0 +1,41 @@
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.ClinicalBloodDoc;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : CLI0573
+ * @Description :   输血记录输注前评估未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class CLI0573 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
+            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
+                Map<String, String> cliBStructureMap = cliB.getStructureMap();
+                if(cliBStructureMap.containsKey("输注前评估")){
+                    if(StringUtils.isEmpty(cliBStructureMap.get("输注前评估"))){
+                        status.set("-1");
+                        break;
+                    }
+                }else {
+                    status.set("-1");
+                    break;
+                }
+
+            }
+        }
+
+    }
+}

+ 35 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0553.java

@@ -0,0 +1,35 @@
+package com.lantone.qc.kernel.catalogue.difficultcasediscuss;
+
+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.DifficultCaseDiscussDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : DIF0553
+ * @Description : 	疑难病例讨论无记录者签名
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class DIF0553 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<DifficultCaseDiscussDoc> difficultCaseDiscussDocs = inputInfo.getDifficultCaseDiscussDocs();
+        if(difficultCaseDiscussDocs != null && difficultCaseDiscussDocs.size()>0){
+            for (DifficultCaseDiscussDoc dcdd:difficultCaseDiscussDocs) {
+                Map<String, String> dcddStructureMap = dcdd.getStructureMap();
+                String diisDate = dcddStructureMap.get("记录者");
+                if(CatalogueUtil.isEmpty(diisDate)){
+                    status.set("-1");
+                    break;
+                }
+            }
+        }
+    }
+}

+ 36 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0554.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.kernel.catalogue.difficultcasediscuss;
+
+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.DifficultCaseDiscussDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : DIF0554
+ * @Description : 	疑难病例讨论无主任或主持人签名
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class DIF0554 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<DifficultCaseDiscussDoc> difficultCaseDiscussDocs = inputInfo.getDifficultCaseDiscussDocs();
+        if(difficultCaseDiscussDocs != null && difficultCaseDiscussDocs.size()>0){
+            for (DifficultCaseDiscussDoc dcdd:difficultCaseDiscussDocs) {
+                Map<String, String> dcddStructureMap = dcdd.getStructureMap();
+                String diisDate = dcddStructureMap.get("主持人");
+                String doctor = dcddStructureMap.get("主任");
+                if(CatalogueUtil.isEmpty(diisDate) && CatalogueUtil.isEmpty(doctor)){
+                    status.set("-1");
+                    break;
+                }
+            }
+        }
+    }
+}

+ 10 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/doctorsadvice/ADVI0589.java

@@ -0,0 +1,10 @@
+package com.lantone.qc.kernel.catalogue.doctorsadvice;
+
+/**
+ * @ClassName : ADVI0589
+ * @Description : 医嘱
+ * @Author : 楼辉荣
+ * @Date: 2020-03-28 17:35
+ */
+public class ADVI0589 {
+}

+ 10 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/invasiveoperation/INVA0622.java

@@ -0,0 +1,10 @@
+package com.lantone.qc.kernel.catalogue.invasiveoperation;
+
+/**
+ * @ClassName : INVA0622
+ * @Description :
+ * @Author : 楼辉荣
+ * @Date: 2020-03-28 17:28
+ */
+public class INVA0622 {
+}

+ 10 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/medicalwriting/MEDI0653.java

@@ -0,0 +1,10 @@
+package com.lantone.qc.kernel.catalogue.medicalwriting;
+
+/**
+ * @ClassName : MEDI0653
+ * @Description :病历书写规范
+ * @Author : 楼辉荣
+ * @Date: 2020-03-28 17:32
+ */
+public class MEDI0653 {
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0628.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 缺手术开始时间
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0628 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("手术开始时间"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0629.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 缺手术结束时间
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0629 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("手术结束时间"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0630.java

@@ -0,0 +1,46 @@
+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.Content;
+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.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 手术开始时间不规范
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0630 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                for (OperationDoc operationDoc : operationDocs) {
+                    String operationStartDateStr = operationDoc.getOperationRecordDoc().getStructureMap().get("手术开始时间");
+                    if (CatalogueUtil.isEmpty(operationStartDateStr)) {
+                        continue;
+                    }
+                    Date operationStartDate = StringUtil.parseDateTime(CatalogueUtil.removeSpecialChar(operationStartDateStr)
+                            , CatalogueUtil.processDateFormat(Content.dateFormats));
+                    if (null == operationStartDate) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0631.java

@@ -0,0 +1,46 @@
+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.Content;
+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.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 手术结束时间不规范
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0631 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                for (OperationDoc operationDoc : operationDocs) {
+                    String operationEndDateStr = operationDoc.getOperationRecordDoc().getStructureMap().get("手术结束时间");
+                    if (CatalogueUtil.isEmpty(operationEndDateStr)) {
+                        continue;
+                    }
+                    Date operationEndDate = StringUtil.parseDateTime(CatalogueUtil.removeSpecialChar(operationEndDateStr)
+                            , CatalogueUtil.processDateFormat(Content.dateFormats));
+                    if (null == operationEndDate) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0632.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 手术切口类别未填写
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0632 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("切口类别"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0634.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 术(中)后诊断未填写
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0634 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("术(中)后诊断"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0635.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 未记录手术经过及处理
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0635 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("手术经过及处理(包括患者的体位、切口处理、病灶所见及手术步骤等)"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

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

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 未记录手术医师
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0636 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("手术医师"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

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

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 未记录手术助手
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0637 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && (StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("助手I"))
+                            || StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("助手II")))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0638.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 未记录器械护士
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0638 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("器械护士"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0639.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 未记录巡回护士
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0639 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("巡回护士"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0640.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 未记录麻醉医师
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0640 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("麻醉医师"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0641.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 未记录切下标本处理情况
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0641 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("手术标本"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0643.java

@@ -0,0 +1,42 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 未记录冰冻切片病理结果
+ * @author: 胡敬
+ * @time: 2020/3/28 16:32
+ */
+public class OPE0643 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        if (isOperativePatient) {
+            List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getOperationRecordDoc() != null
+                            && StringUtil.isBlank(operationDoc.getOperationRecordDoc().getStructureMap().get("冰冻切片结果"))) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+
+}

+ 10 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/reasonablediagnosis/REAS0627.java

@@ -0,0 +1,10 @@
+package com.lantone.qc.kernel.catalogue.reasonablediagnosis;
+
+/**
+ * @ClassName : REAS0627
+ * @Description : 诊疗合理性-诊治过程欠合理
+ * @Author : 楼辉荣
+ * @Date: 2020-03-28 17:30
+ */
+public class REAS0627 {
+}

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

@@ -0,0 +1,66 @@
+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.util.DateUtil;
+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 : THR0595
+ * @Description : 病重患者每2天应有一次病程记录
+ * @Author : 胡敬
+ * @Date: 2020-03-28 14:22
+ */
+@Component
+public class THR0595 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getSeriouslyIllNoticeDocs().size() == 0 || inputInfo.getThreeLevelWardDocs().size() == 0) {
+            return;
+        }
+        //所有查房记录的日期天
+        List<Integer> dateRecordDay = new ArrayList<>();
+        //危重患者应该有的查房记录的日期天
+        List<Integer> criticallyDay = new ArrayList<>();
+        Date criticallyStartDate = null, criticallyEndDate = null;
+        String recordTime = "", content = "";
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();//查房记录
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
+            recordTime = rescueStructureMap.get("查房日期");
+            content = CatalogueUtil.subTitle(rescueStructureMap.get("病情记录"));
+            Date recordDate = StringUtil.parseDateTime(recordTime);
+            if (recordDate == null) {
+                continue;
+            }
+            if (content.contains("病重") || content.contains("病危")) {
+                criticallyStartDate = recordDate;
+            } else if (content.contains("病情稳定") || content.contains("病情好转")) {
+                criticallyEndDate = recordDate;
+            }
+            dateRecordDay.add(DateUtil.getDay(recordDate));
+        }
+        if (criticallyStartDate == null || criticallyEndDate == null) {
+            return;
+        }
+        int daynum = DateUtil.getDay(criticallyEndDate) - DateUtil.getDay(criticallyStartDate);
+        for (int i = 1; i <= daynum; i++) {
+            if (i % 2 == 0) {
+                int wardDay = DateUtil.getDay(DateUtil.addDate(criticallyStartDate, i));
+                criticallyDay.add(wardDay);
+            }
+        }
+        if (!dateRecordDay.containsAll(criticallyDay)) {
+            status.set("-1");
+        }
+    }
+}

+ 64 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0596.java

@@ -0,0 +1,64 @@
+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.util.DateUtil;
+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 : THR0596
+ * @Description : 病危患者每天应有一次病程记录
+ * @Author : 胡敬
+ * @Date: 2020-03-28 14:22
+ */
+@Component
+public class THR0596 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getCriticallyIllNoticeDocs().size() == 0 || inputInfo.getThreeLevelWardDocs().size() == 0) {
+            return;
+        }
+        //所有查房记录的日期天
+        List<Integer> dateRecordDay = new ArrayList<>();
+        //危重患者应该有的查房记录的日期天
+        List<Integer> criticallyDay = new ArrayList<>();
+        Date criticallyStartDate = null, criticallyEndDate = null;
+        String recordTime = "", content = "";
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();//查房记录
+        for (ThreeLevelWardDoc threeLevelWardDoc : threeLevelWardDocs) {
+            Map<String, String> rescueStructureMap = threeLevelWardDoc.getStructureMap();
+            recordTime = rescueStructureMap.get("查房日期");
+            content = CatalogueUtil.subTitle(rescueStructureMap.get("病情记录"));
+            Date recordDate = StringUtil.parseDateTime(recordTime);
+            if (recordDate == null) {
+                continue;
+            }
+            if (content.contains("病重") || content.contains("病危")) {
+                criticallyStartDate = recordDate;
+            } else if (content.contains("病情稳定") || content.contains("病情好转")) {
+                criticallyEndDate = recordDate;
+            }
+            dateRecordDay.add(DateUtil.getDay(recordDate));
+        }
+        if (criticallyStartDate == null || criticallyEndDate == null) {
+            return;
+        }
+        int daynum = DateUtil.getDay(criticallyEndDate) - DateUtil.getDay(criticallyStartDate);
+        for (int i = 1; i <= daynum; i++) {
+            int wardDay = DateUtil.getDay(DateUtil.addDate(criticallyStartDate, i));
+            criticallyDay.add(wardDay);
+        }
+        if (!dateRecordDay.containsAll(criticallyDay)) {
+            status.set("-1");
+        }
+    }
+}

+ 64 - 35
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/BeHospitalizedAI.java

@@ -66,20 +66,27 @@ public class BeHospitalizedAI extends ModelAI {
             String vital_text = beHospitalizedDoc.getVitalLabel().getText();
             //专科体格检查
             String vitalSpecial_text = beHospitalizedDoc.getVitalLabelSpecial().getText();
-            //主诉
-            putContent(crfContent, medicalTextType.get(3), chief_text, Content.chief);
-            //现病史
-            putContent(crfContent, medicalTextType.get(7), present_text, Content.present);
-            //专科检查
-            putContent(crfContent, medicalTextType.get(3), vitalSpecial_text, Content.special_exam);
-            //既往史
-            putContent(crfContent, medicalTextType.get(1), past_text, Content.past);
-            //家族史
-            putContent(crfContent, medicalTextType.get(1), family_text, Content.family);
-            //存放一般查体
-            putContent(crfContent, medicalTextType.get(4), vital_text, Content.phys_exam);
-            //个人史
-            putContent(crfContent, medicalTextType.get(2), personal_text, Content.personal);
+            if (beHospitalizedDoc.getChiefLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(3), chief_text, Content.chief);  //主诉
+            }
+            if (beHospitalizedDoc.getPresentLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(7), present_text, Content.present);//现病史
+            }
+            if (beHospitalizedDoc.getVitalLabelSpecial().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(3), vitalSpecial_text, Content.special_exam);//专科检查
+            }
+            if (beHospitalizedDoc.getPastLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(1), past_text, Content.past);//既往史
+            }
+            if (beHospitalizedDoc.getFamilyLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(1), family_text, Content.family);//家族史
+            }
+            if (beHospitalizedDoc.getVitalLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(4), vital_text, Content.phys_exam);//存放一般查体
+            }
+            if (beHospitalizedDoc.getPersonalLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(2), personal_text, Content.personal);//个人史
+            }
             //月经史
             String concatMenstrual = "";
             if(personal_text != null){
@@ -89,49 +96,71 @@ public class BeHospitalizedAI extends ModelAI {
                     concatMenstrual = personal_text;
                 }
             }
-
-            putContent(crfContent, medicalTextType.get(2), concatMenstrual, menstrual_text, Content.menses);
-            //婚育史
-            putContent(crfContent, medicalTextType.get(2), marital_text, Content.marriage);
-            //辅助检查(暂用主诉现病史模型,之后会新训练单独模型再做修改)
-            putContent(crfContent, medicalTextType.get(3), pacs_text, Content.pacs);
-            //初步诊断
-            putContent(crfContent, medicalTextType.get(6), initial_diag_text, Content.initial_diag);
-            if (StringUtils.isNotEmpty(revised_diag_text)) {
+            if (beHospitalizedDoc.getMenstrualLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(2), concatMenstrual, menstrual_text, Content.menses);//月经史
+            }
+            if (beHospitalizedDoc.getMaritalLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(2), marital_text, Content.marriage);//婚育史
+            }
+            if (beHospitalizedDoc.getPacsLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(3), pacs_text, Content.pacs);//辅助检查(暂用主诉现病史模型,之后会新训练单独模型再做修改)
+            }
+            if (beHospitalizedDoc.getInitialDiagLabel().isCrfLabel()) {
+                putContent(crfContent, medicalTextType.get(6), initial_diag_text, Content.initial_diag);//初步诊断
+            }
+            if (StringUtils.isNotEmpty(revised_diag_text) && beHospitalizedDoc.getRevisedDiagLabel().isCrfLabel()) {
                 //修正诊断
                 putContent(crfContent, medicalTextType.get(6), revised_diag_text, Content.revised_diag);
             }
-            if (StringUtils.isNotEmpty(supple_diag_text)) {
+            if (StringUtils.isNotEmpty(supple_diag_text) && beHospitalizedDoc.getSuppleDiagLabel().isCrfLabel()) {
                 //补充诊断
                 putContent(crfContent, medicalTextType.get(6), supple_diag_text, Content.supple_diag);
             }
             JSONObject midData = loadAI(crfContent, crfServiceClient);
             //处理主诉
-            putChiefCrfData(midData.getJSONObject(Content.chief), inputInfo);
+            if (beHospitalizedDoc.getChiefLabel().isCrfLabel()) {
+                putChiefCrfData(midData.getJSONObject(Content.chief), inputInfo);
+            }
             //处理现病史
-            putPresentCrfData(midData.getJSONObject(Content.present), inputInfo);
+            if (beHospitalizedDoc.getPresentLabel().isCrfLabel()) {
+                putPresentCrfData(midData.getJSONObject(Content.present), inputInfo);
+            }
             //处理既往史
-            putPastCrfData(midData.getJSONObject(Content.past), inputInfo);
+            if (beHospitalizedDoc.getPastLabel().isCrfLabel()) {
+                putPastCrfData(midData.getJSONObject(Content.past), inputInfo);
+            }
             //处理个人史
-            putPersonalCrfData(midData.getJSONObject(Content.personal), inputInfo);
+            if (beHospitalizedDoc.getPersonalLabel().isCrfLabel()) {
+                putPersonalCrfData(midData.getJSONObject(Content.personal), inputInfo);
+            }
             //处理月经史
-            putMensesCrfData(midData.getJSONObject(Content.menses), inputInfo);
+            if (beHospitalizedDoc.getMenstrualLabel().isCrfLabel()) {
+                putMensesCrfData(midData.getJSONObject(Content.menses), inputInfo);
+            }
             //处理家族史
-            putFamilyCrfData(midData.getJSONObject(Content.family), inputInfo);
+            if (beHospitalizedDoc.getFamilyLabel().isCrfLabel()) {
+                putFamilyCrfData(midData.getJSONObject(Content.family), inputInfo);
+            }
             //处理婚育史
-            putMaritalCrfData(midData.getJSONObject(Content.marriage), inputInfo);
+            if (beHospitalizedDoc.getMaritalLabel().isCrfLabel()) {
+                putMaritalCrfData(midData.getJSONObject(Content.marriage), inputInfo);
+            }
             //处理初步诊断
-            putInitialDiagCrfData(midData.getJSONObject(Content.pridiag), inputInfo);
-            if (StringUtils.isNotEmpty(revised_diag_text)) {
+            if (beHospitalizedDoc.getInitialDiagLabel().isCrfLabel()) {
+                putInitialDiagCrfData(midData.getJSONObject(Content.pridiag), inputInfo);
+            }
+            if (StringUtils.isNotEmpty(revised_diag_text) && beHospitalizedDoc.getRevisedDiagLabel().isCrfLabel()) {
                 //处理修正诊断
                 putRevisedDiagCrfData(midData.getJSONObject(Content.revised_diag), inputInfo);
             }
-            if (StringUtils.isNotEmpty(revised_diag_text)) {
+            if (StringUtils.isNotEmpty(revised_diag_text) && beHospitalizedDoc.getSuppleDiagLabel().isCrfLabel()) {
                 //处理补充诊断
                 putSuppleDiagCrfData(midData.getJSONObject(Content.supple_diag), inputInfo);
             }
             //处理辅助检查
-            putPacsCrfData(midData.getJSONObject(Content.pacs), inputInfo);
+            if (beHospitalizedDoc.getPacsLabel().isCrfLabel()) {
+                putPacsCrfData(midData.getJSONObject(Content.pacs), inputInfo);
+            }
         }
     }
 

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

@@ -5,4 +5,4 @@ mysql.redis.url = jdbc:mysql://192.168.2.236:3306/qc?useUnicode=true&characterEn
 
 mysql.test.user = root
 mysql.test.password = lantone
-mysql.test.url = jdbc:mysql://192.168.2.236:3306/sys-mrqc?useUnicode=true&characterEncoding=UTF-8
+mysql.test.url = jdbc:mysql://192.168.2.236:3306/sys-qctest?useUnicode=true&characterEncoding=UTF-8

+ 135 - 0
kernel/src/test/java/com/lantone/qc/kernel/ImportTaizDataTest.java

@@ -0,0 +1,135 @@
+package com.lantone.qc.kernel;
+
+
+import com.lantone.qc.pub.jdbc.MysqlJdbc;
+import com.lantone.qc.pub.util.PropertiesUtil;
+import com.lantone.qc.trans.taizhou.util.TzXmlUtil;
+import jxl.Cell;
+import jxl.Sheet;
+import jxl.Workbook;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.*;
+
+/**
+ * @ClassName : ImportTaizTestData
+ * @Description :
+ * @Author : 楼辉荣
+ * @Date: 2020-03-28 09:51
+ */
+public class ImportTaizDataTest {
+    private static Map<String, String> modelInfoMap = new HashMap<>();
+
+    public static void main(String[] args) {
+        ImportTaizDataTest importTaizDataTest = new ImportTaizDataTest();
+        String filePath = "E:\\docs\\产品目录\\病历质控\\病历数据\\台州\\质控医院数据采集标准格式20200326.xls";
+        try {
+            List<Map<String, Object>> patientInserts = new ArrayList<>();
+            List<Map<String, Object>> modelMappingInserts = new ArrayList<>();
+
+            Set<String> patients = new LinkedHashSet<>();
+            Map<String, Map<String, List<String>>> records = importTaizDataTest.readFromExcel(filePath);
+            for (Map.Entry<String, Map<String, List<String>>> entry : records.entrySet()) {
+                for (Map.Entry<String, List<String>> modelEntry : entry.getValue().entrySet()) {
+                    for (String s : modelEntry.getValue()) {
+                        String text = "";
+                        Map<String, Object> rowMap = new HashMap<>();
+                        rowMap.put("mode_id", modelInfoMap.get(modelEntry.getKey()));
+                        rowMap.put("origin_text", s);
+                        if (StringUtils.isNotEmpty(s)) {
+                            Map<String, String> textMap = TzXmlUtil.getXmlToMapForTZ(s);
+                            for (Map.Entry<String, String> e : textMap.entrySet()) {
+                                text = text + "【" + e.getKey() + "】:" + e.getValue() + "\n";
+                            }
+                        }
+                        rowMap.put("case_number", entry.getKey());
+                        rowMap.put("text", text);
+                        modelMappingInserts.add(rowMap);
+                    }
+                }
+                patients.add(entry.getKey());
+            }
+
+            for (String patientSerial : patients) {
+                Map<String, Object> patientSerialMap = new HashMap<>();
+                patientSerialMap.put("case_number", patientSerial);
+                patientSerialMap.put("hospital_id", "3");
+                patientInserts.add(patientSerialMap);
+            }
+
+            PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");
+            MysqlJdbc mysqlJdbc = new MysqlJdbc(propertiesUtil.getProperty("mysql.test.user"),
+                    propertiesUtil.getProperty("mysql.test.password"),
+                    propertiesUtil.getProperty("mysql.test.url"));
+            mysqlJdbc.insert(patientInserts, "qc_cases_number", new String[]{"hospital_id", "case_number"});
+            mysqlJdbc.insert(modelMappingInserts, "qc_model_mapping", new String[]{"case_number", "origin_text", "mode_id", "text"});
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private Map<String, Map<String, List<String>>> readFromExcel(String filePath) throws Exception {
+        Map<String, Map<String, List<String>>> excelDataMap = new HashMap<>();
+        //创建输入流
+        InputStream stream = new FileInputStream(filePath);
+        //获取Excel文件对象
+        Workbook rwb = Workbook.getWorkbook(stream);
+        //获取文件的指定工作表 默认的第一个
+        Sheet sheet = rwb.getSheet(0);
+        //行数(表头的目录不需要,从1开始)
+        String patientSerial = "";
+        Map<String, List<String>> modelMap = initData();
+        for (int i = 1; i < sheet.getRows(); i++) {
+            Cell patientCell = sheet.getCell(0, i);
+            Cell modelCell = sheet.getCell(1, i);
+            Cell contentCell = sheet.getCell(2, i);
+            modelMap.get(modelCell.getContents()).add(contentCell.getContents());
+            if (StringUtils.isNotEmpty(patientSerial) && !patientSerial.equals(patientCell.getContents())) {
+                excelDataMap.put(patientSerial, modelMap);
+                modelMap = initData();
+            }
+            patientSerial = patientCell.getContents();
+        }
+        excelDataMap.put(patientSerial, modelMap);
+        return excelDataMap;
+    }
+
+    private Map<String, List<String>> initData() {
+        PropertiesUtil propertiesUtil = new PropertiesUtil("kernel.properties");
+        MysqlJdbc mysqlJdbc = new MysqlJdbc(propertiesUtil.getProperty("mysql.test.user"),
+                propertiesUtil.getProperty("mysql.test.password"),
+                propertiesUtil.getProperty("mysql.test.url"));
+        Connection conn = mysqlJdbc.connect();
+        Statement st = null;
+        ResultSet rs = null;
+        String r1, r2;
+        List<String> modeNamesList = new ArrayList<>();
+        try {
+            st = conn.createStatement();
+            String sql = "select id, name from qc_mode";
+            rs = st.executeQuery(sql);
+            while (rs.next()) {
+                r1 = rs.getString(1);
+                r2 = rs.getString(2);
+                modelInfoMap.put(r2, r1);
+                modeNamesList.add(r2);
+            }
+        } catch (SQLException sqle) {
+            sqle.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            mysqlJdbc.close(rs, st, conn);
+        }
+        Map<String, List<String>> map = new HashMap<>();
+        modeNamesList.stream().forEach(x ->
+                map.put(x, new ArrayList<String>()));
+        return map;
+    }
+}

+ 1 - 0
public/src/main/java/com/lantone/qc/pub/model/label/GeneralLabel.java

@@ -17,6 +17,7 @@ import java.util.Map;
 @Getter
 public class GeneralLabel {
     private String text;
+    private boolean crfLabel = true;
     protected  <T> void add(List<T> list, T obj) {
         list.add(obj);
     }