Преглед изворни кода

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

rengb пре 5 година
родитељ
комит
795242e1e1

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

@@ -0,0 +1,31 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH02855
+ * @Description : 过敏史未填写
+ * @Author : 胡敬
+ * @Date: 2020-06-15 16:09
+ */
+@Component
+public class BEH02855 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> bhMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtil.isNotEmpty(bhMap.get("过敏史"))) {
+            status.set("0");
+        }
+    }
+}

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

@@ -24,7 +24,7 @@ public class BEH0457 extends QCCatalogue {
         }
         Map<String, String> bhMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
         if (bhMap != null) {
-            String birthDate = bhMap.get("长期用药情况\\(包括可能成瘾的药物\\)");
+            String birthDate = bhMap.get("长期用药");
             if (birthDate != null) {
                 if (CatalogueUtil.isEmpty(birthDate)) {
                     status.set("-1");

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02927.java

@@ -0,0 +1,48 @@
+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 org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 手术方式未填写
+ * @author: 胡敬
+ * @time: 2020/6/15 16:41
+ */
+@Component
+public class OPE02927 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(operationDocs == null || operationDocs.size() == 0){
+            status.set("0");
+            return;
+        }
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getPreoperativeDiscussionDoc() != null
+                            && StringUtil.isBlank(operationDoc.getPreoperativeDiscussionDoc().getStructureMap().get("手术方式"))) {
+                        flag = true;
+                    }
+                    return flag;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+//    }
+
+}

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02928.java

@@ -0,0 +1,48 @@
+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 org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 手术名称未填写
+ * @author: 胡敬
+ * @time: 2020/6/15 16:41
+ */
+@Component
+public class OPE02928 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(operationDocs == null || operationDocs.size() == 0){
+            status.set("0");
+            return;
+        }
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getPreoperativeDiscussionDoc() != null
+                            && StringUtil.isBlank(operationDoc.getPreoperativeDiscussionDoc().getStructureMap().get("手术名称"))) {
+                        flag = true;
+                    }
+                    return flag;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+//    }
+
+}

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02929.java

@@ -0,0 +1,48 @@
+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 org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 可能变更的术式未填写
+ * @author: 胡敬
+ * @time: 2020/6/15 16:41
+ */
+@Component
+public class OPE02929 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(operationDocs == null || operationDocs.size() == 0){
+            status.set("0");
+            return;
+        }
+            if (ListUtil.isNotEmpty(operationDocs)) {
+                long count = operationDocs.stream().filter(operationDoc -> {
+                    boolean flag = false;
+                    if (operationDoc.getPreoperativeDiscussionDoc() != null
+                            && StringUtil.isBlank(operationDoc.getPreoperativeDiscussionDoc().getStructureMap().get("可能的变更"))) {
+                        flag = true;
+                    }
+                    return flag;
+                }).count();
+                if (count > 0) {
+                    status.set("-1");
+                }
+            }
+        }
+//    }
+
+}

+ 84 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE02930.java

@@ -0,0 +1,84 @@
+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 com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : OPE02930
+ * @Description : 术后首次病程未即刻完成
+ * @Author : 胡敬
+ * @Date: 2020-06-15 17:30
+ */
+@Component
+public class OPE02930 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        //        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        //        if (isOperativePatient) {
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (operationDocs == null || operationDocs.size() == 0) {
+            status.set("0");
+            return;
+        }
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
+            String operationStartDateStr = operationRecordStructureMap.get("手术开始时间");
+            String operationEndDateStr = operationRecordStructureMap.get("手术结束时间");
+            if (StringUtil.isEmpty(operationStartDateStr) || StringUtil.isEmpty(operationEndDateStr)) {
+                continue;
+            }
+            Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
+            Date operationEndDate = StringUtil.parseDateTime(operationEndDateStr);
+            if (operationStartDate == null || operationEndDate == null) {
+                continue;
+            }
+            for (OperationDoc o : operationDocs) {
+                OperationDiscussionDoc operationDiscussionDoc = o.getOperationDiscussionDoc();
+                Map<String, String> structureMap = operationDiscussionDoc.getStructureMap();
+                String discussionStartDateStr = structureMap.get("手术开始时间");
+                String discussionEndDateStr = structureMap.get("手术结束时间");
+                if (StringUtil.isBlank(discussionStartDateStr) || StringUtil.isBlank(discussionEndDateStr)) {
+                    continue;
+                }
+                Date discussionStartDate = StringUtil.parseDateTime(discussionStartDateStr);
+                Date discussionEndDate = StringUtil.parseDateTime(discussionEndDateStr);
+                if (discussionStartDate == null || discussionEndDate == null) {
+                    continue;
+                }
+                if (operationStartDate.equals(discussionStartDate) && operationEndDate.equals(discussionEndDate)) {
+                    String discussionRecordDateStr = structureMap.get("记录时间");
+                    if (StringUtil.isBlank(discussionRecordDateStr)) {
+                        status.set("0");
+                        return;
+                    }
+                    Date discussionRecordDate = StringUtil.parseDateTime(discussionRecordDateStr);
+                    if (discussionRecordDate == null) {
+                        status.set("0");
+                        return;
+                    }
+
+                    if (CatalogueUtil.compareTime(discussionEndDate, discussionRecordDate, 15 * 60L)) {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        }
+        //        }
+    }
+}

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0648.java

@@ -33,10 +33,10 @@ public class OPE0648 extends QCCatalogue {
                 long count = operationDocs.stream().filter(operationDoc -> {
                     boolean flag = false;
                     if (operationDoc.getOperationRecordDoc() != null) {
-                        String surgeon = operationDoc.getOperationRecordDoc().getStructureMap().get("手术医师");
+                        String surgeon = operationDoc.getOperationRecordDoc().getStructureMap().get("主刀医师");
                         String assist1 = operationDoc.getOperationRecordDoc().getStructureMap().get("一助");
                         String asssit2 = operationDoc.getOperationRecordDoc().getStructureMap().get("助手II");
-                        String signature = operationDoc.getOperationRecordDoc().getStructureMap().get("主刀医师签名");
+                        String signature = operationDoc.getOperationRecordDoc().getStructureMap().get("医生");
 
                         String operator = surgeon + ", " + assist1 + ", " + asssit2;
 

+ 60 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/preoperativediscussion/PRE0328.java

@@ -6,11 +6,16 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
 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.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 手术患者无术前讨论记录
@@ -35,11 +40,8 @@ public class PRE0328 extends QCCatalogue {
         boolean emergencyOperation = findEmergencyOperation(inputInfo);
         boolean emergencyOperationFromWardRecord = findEmergencyOperationFromWardRecord(inputInfo);
 
-        int i = 0, j = 0;
+        int i = getOperationSum(operationDocs), j = 0;
         for (OperationDoc operationDoc : operationDocs) {
-            if (operationDoc.getOperationRecordDoc() != null) {
-                i++;
-            }
             if (operationDoc.getPreoperativeDiscussionDoc() != null) {
                 j++;
             }
@@ -86,4 +88,58 @@ public class PRE0328 extends QCCatalogue {
         return false;
     }
 
+    /**
+     * 获取手术记录次数
+     * @param operationDocs
+     * @return
+     */
+    private int getOperationSum(List<OperationDoc> operationDocs) {
+        List<Map<String, Date>> operationDateList = new ArrayList<>();
+        Map<String, Date> operationDate = null;
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> structureMap = operationRecordDoc.getStructureMap();
+            String operationStartDateStr = structureMap.get("手术开始时间");
+            String operationEndDateStr = structureMap.get("手术结束时间");
+            if (StringUtil.isNotBlank(operationStartDateStr) && StringUtil.isNotBlank(operationEndDateStr)) {
+                Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
+                Date operationEndDate = StringUtil.parseDateTime(operationEndDateStr);
+                if (operationStartDate != null && operationEndDate != null) {
+                    /* 放第一个手术记录的时间到operationDateList */
+                    if (operationDateList.size() == 0) {
+                        operationDate = new HashMap<>();
+                        operationDate.put("手术开始时间", operationStartDate);
+                        operationDate.put("手术结束时间", operationEndDate);
+                        operationDateList.add(operationDate);
+                        continue;
+                    }
+                    /* 如果其中一个手术记录的开始时间到结束时间之间还包含另一个手术,就不往operationDateList里加 */
+                    boolean findInnerOperation = false;
+                    for (Map<String, Date> date : operationDateList) {
+                        Date listStartDate = date.get("手术开始时间");
+                        Date listEndDate = date.get("手术结束时间");
+                        if (operationStartDate.before(listStartDate) && listEndDate.before(operationEndDate)){
+                            date.put("手术开始时间", operationStartDate);
+                            date.put("手术结束时间", operationEndDate);
+                        }
+                        if (listStartDate.before(operationStartDate) && operationEndDate.before(listEndDate)) {
+                            findInnerOperation = true;
+                            break;
+                        }
+                    }
+                    if (!findInnerOperation) {
+                        operationDate = new HashMap<>();
+                        operationDate.put("手术开始时间", operationStartDate);
+                        operationDate.put("手术结束时间", operationEndDate);
+                        operationDateList.add(operationDate);
+                    }
+                }
+            }
+        }
+        return operationDateList.size();
+    }
+
 }

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

@@ -88,6 +88,7 @@ public class TaiZhouBeHospitalizedDocTrans extends ModelDocTrans {
             "户口地址=联系地址",
             "家属提供的信息可信吗=病史可靠性",
             "入院诊断(中医疾病)=中医诊断",
+            "长期用药情况(包括可能成瘾的药物)=长期用药",
             "体温(口)=体温"
     );