瀏覽代碼

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

rengb 5 年之前
父節點
當前提交
745ba08bd4

+ 40 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH03002.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author wangfeng
+ * @Description: 入院时间错误(具体到分)
+ * @date 2020-06-29 11:44
+ */
+@Component
+public class BEH03002 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (structureMap != null) {
+            String dateStr = structureMap.get(Content.admisDate);
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+            try {
+                Date d = formatter.parse(dateStr);
+                status.set("0");
+            } catch (Exception e) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 40 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH03003.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-06-29 15:19
+ */
+@Component
+public class BEH03003 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (structureMap != null) {
+            String dateStr = structureMap.get("记录日期");
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+            try {
+                Date d = formatter.parse(dateStr);
+                status.set("0");
+            } catch (Exception e) {
+                status.set("-1");
+                return;
+            }
+        }
+
+    }
+}

+ 49 - 33
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0097.java

@@ -1,34 +1,50 @@
-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 org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @ClassName : DEAC0097
- * @Description : 死亡患者无死亡记录
- * @Author : 楼辉荣
- * @Date: 2020-03-06 17:28
- */
-@Component
-public class DEAC0097 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
-            Map<String, String> FirstPageStructure = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            String outWay = FirstPageStructure.get(Content.outWay);
-            //判断患者是否死亡
-            if (CatalogueUtil.isEmpty(outWay) || !outWay.contains("死亡")) {
-                return;
-            }
-            if (inputInfo.getDeathRecordDoc() == null || inputInfo.getDeathRecordDoc().getStructureMap().size() == 0){
-                status.set("-1");
-            }
-        }
-    }
+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.model.doc.DoctorAdviceDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : DEAC0097
+ * @Description : 死亡患者无死亡记录
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class DEAC0097 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<String> deathRecords = new ArrayList<>();
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        if (doctorAdviceDocs.size() == 0 ) {
+            return;
+        }
+        for (DoctorAdviceDoc dad:doctorAdviceDocs) {
+            if(dad.getStructureMap().get("医嘱项目名称").contains("死亡")){
+                deathRecords.add(dad.getStructureMap().get("医嘱项目名称"));
+            }
+        }
+        if(deathRecords != null && deathRecords.size()>0 && inputInfo.getDeathRecordDoc() == null){
+            status.set("-1");
+        }
+        /*if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> FirstPageStructure = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String outWay = FirstPageStructure.get(Content.outWay);
+            //判断患者是否死亡
+            if (CatalogueUtil.isEmpty(outWay) || !outWay.contains("死亡")) {
+                return;
+            }
+            if (inputInfo.getDeathRecordDoc() == null || inputInfo.getDeathRecordDoc().getStructureMap().size() == 0){
+                status.set("-1");
+            }
+        }*/
+    }
 }

+ 34 - 33
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0108.java

@@ -1,34 +1,35 @@
-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 org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @ClassName : DEAC0108
- * @Description : 死亡患者无死亡病例讨论记录
- * @Author : 胡敬
- * @Date: 2020-03-19 11:24
- */
-@Component
-public class DEAC0108 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
-            Map<String, String> FirstPageStructure = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            String outWay = FirstPageStructure.get(Content.outWay);
-            //判断患者是否死亡
-            if (CatalogueUtil.isEmpty(outWay) || !outWay.contains("死亡")) {
-                return;
-            }
-            if (inputInfo.getDeathCaseDiscussDoc() == null || inputInfo.getDeathCaseDiscussDoc().getStructureMap().size() == 0){
-                status.set("-1");
-            }
-        }
-    }
+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 org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : DEAC0108
+ * @Description : 死亡患者无死亡病例讨论记录
+ * @Author : 胡敬
+ * @Date: 2020-03-19 11:24
+ */
+@Component
+public class DEAC0108 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> FirstPageStructure = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String outWay = FirstPageStructure.get(Content.outWay);
+            //判断患者是否死亡
+            if (CatalogueUtil.isEmpty(outWay) || !outWay.contains("死亡")) {
+                return;
+            }
+            if ((inputInfo.getDeathCaseDiscussDoc() == null || inputInfo.getDeathCaseDiscussDoc().getStructureMap().size() == 0)
+            && outWay.contains("死亡")){
+                status.set("-1");
+            }
+        }
+    }
 }

+ 63 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/medicalwriting/MEDI02995.java

@@ -0,0 +1,63 @@
+package com.lantone.qc.kernel.catalogue.medicalwriting;
+
+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.CriticallyIllNoticeDoc;
+import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
+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 : MEDI02995
+ * @Description : 病危患者无病危通知单
+ * @Author : zhoutg
+ * @Date: 2020-04-21 18:40
+ */
+@Component
+public class MEDI02995 extends QCCatalogue {
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 1、医嘱中包含“病危”2个字THR0595
+         * 2、病危通知单(包含病危+病重)列表中包含“病危”2个字
+         *
+         * 病危通知单数据示例:
+         *      邵逸夫数据示例:病危通知 、病重通知
+         *      长兴和台州病危和病重是混合的:示例:病危(重)告知书,0433 病危(重)通知
+         */
+        status.set("0");
+        if (ListUtil.isEmpty(inputInfo.getDoctorAdviceDocs())) {
+            return ;
+        }
+        Boolean flag = false;
+        for (DoctorAdviceDoc bean : inputInfo.getDoctorAdviceDocs()) {
+            Map<String, String> structureMap = bean.getStructureMap();
+            if (StringUtil.isNotBlank(structureMap.get("医嘱项目名称"))
+                    && structureMap.get("医嘱项目名称").indexOf("病危") != -1){
+                // 包含病危医嘱
+                flag = true;
+                break;
+            }
+        }
+        if (!flag) {
+            return ;
+        }
+        // 病危通知书中包含“病危”2个字
+        List<CriticallyIllNoticeDoc> criticallyIllNoticeDocs = inputInfo.getCriticallyIllNoticeDocs();
+        if (ListUtil.isNotEmpty(criticallyIllNoticeDocs)) {
+            for (CriticallyIllNoticeDoc bean : criticallyIllNoticeDocs) {
+                Map<String, String> structureMap = bean.getStructureMap();
+                if (structureMap.containsKey("rec_title") && structureMap.get("rec_title").contains("病危")) {
+                    status.set("0");
+                    return ;
+                }
+            }
+        }
+        status.set("-1");
+    }
+}

+ 63 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/medicalwriting/MEDI02999.java

@@ -0,0 +1,63 @@
+package com.lantone.qc.kernel.catalogue.medicalwriting;
+
+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.CriticallyIllNoticeDoc;
+import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
+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 : MEDI02999
+ * @Description : 病重患者无病重通知单
+ * @Author : zhoutg
+ * @Date: 2020-04-21 18:40
+ */
+@Component
+public class MEDI02999 extends QCCatalogue {
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 1、医嘱中包含“病重”2个字
+         * 2、病危通知单(包含病危+病重)列表中包含“病重”2个字
+         *
+         * 病危通知单数据示例:
+         *      邵逸夫数据示例:病危通知 、病重通知
+         *      长兴和台州病危和病重是混合的:示例:病危(重)告知书,0433 病危(重)通知
+         */
+        status.set("0");
+        if (ListUtil.isEmpty(inputInfo.getDoctorAdviceDocs())) {
+            return ;
+        }
+        Boolean flag = false;
+        for (DoctorAdviceDoc bean : inputInfo.getDoctorAdviceDocs()) {
+            Map<String, String> structureMap = bean.getStructureMap();
+            if (StringUtil.isNotBlank(structureMap.get("医嘱项目名称"))
+                    && structureMap.get("医嘱项目名称").indexOf("病重") != -1){
+                // 包含病重医嘱
+                flag = true;
+                break;
+            }
+        }
+        if (!flag) {
+            return ;
+        }
+        // 病危通知书中包含“病重”2个字
+        List<CriticallyIllNoticeDoc> criticallyIllNoticeDocs = inputInfo.getCriticallyIllNoticeDocs();
+        if (ListUtil.isNotEmpty(criticallyIllNoticeDocs)) {
+            for (CriticallyIllNoticeDoc bean : criticallyIllNoticeDocs) {
+                Map<String, String> structureMap = bean.getStructureMap();
+                if (structureMap.containsKey("rec_title") && structureMap.get("rec_title").contains("病重")) {
+                    status.set("0");
+                    return ;
+                }
+            }
+        }
+        status.set("-1");
+    }
+}

+ 38 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0313.java

@@ -0,0 +1,38 @@
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 缺手术安全核查表 ,前提要有手术记录
+ * @author: kwz
+ * @time: 2020/06/29 11:22
+ */
+@Component
+public class OPE0313 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        //先判断有无手术记录
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+
+        if(operationDocs != null && operationDocs.size()>0){
+            long count_oper = operationDocs.stream().map(i -> i.getOperationRecordDoc()).filter(i -> i != null).count();
+
+            long count_safe = operationDocs.stream().map(i -> i.getOperationSafetyChecklistDoc()).filter(i -> i != null).count();
+            if(count_oper>0 && count_safe ==0){
+                status.set("-1");
+            }
+        }
+
+    }
+
+}

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

@@ -33,14 +33,14 @@ 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;
+                        String operator = signature + ", " + assist1 + ", " + asssit2;
 
-                        if (!operator.contains(signature)) {
+                        if (!operator.contains(surgeon)) {
                             flag = true;
                         }
                     }

+ 51 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02852.java

@@ -0,0 +1,51 @@
+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.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR02852
+ * @Description : 抢救记录未在抢救结束后6h内完成
+ * @Author : zhoutg
+ * @Date: 2020-04-29 11:42
+ */
+@Component
+public class THR02852 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 【病历日期】与【抢救结束时间】比较是否相差6小时
+         */
+        status.set("0");
+        List<RescueDoc> rescueDocs = inputInfo.getRescueDocs();
+        if (ListUtil.isEmpty(rescueDocs)) {
+            return;
+        }
+        for (RescueDoc rescueDoc : rescueDocs) {
+            Map<String, String> rescueStructureMap = rescueDoc.getStructureMap();
+            String rescueTime = rescueStructureMap.get("抢救结束时间");
+            String recordTime = rescueStructureMap.get("病历日期");
+            if (StringUtil.isBlank(rescueTime) || StringUtil.isBlank(recordTime)) {
+                continue;
+            }
+            Date rescueTimeDate = StringUtil.parseDateTime(rescueTime);
+            Date recordTimeDate = StringUtil.parseDateTime(recordTime);
+            if (rescueTimeDate == null || recordTimeDate == null) {
+                continue;
+            }
+            if (CatalogueUtil.compareTime(rescueTimeDate, recordTimeDate, 6 * 60L)) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 5 - 3
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfOperationDocTrans.java

@@ -151,11 +151,13 @@ public class ShaoyfOperationDocTrans extends ModelDocTrans {
     private List<String> operationRecord_keyContrasts = Lists.newArrayList(
             "结束时间=手术结束时间",
             "开始时间=手术开始时间",
-            "手术医师=主刀医师",
+            "医生=主刀医师签名",
             "助手=一助",
-            "助手II=二助",
+//            "助手II=二助",
             "补救措施1=补救措施",
-            "本人姓名=姓名"
+            "本人姓名=姓名",
+            "二助=助手II"
+//            "医生=手术医师"
     );