瀏覽代碼

质控规则

zhoutg 5 年之前
父節點
當前提交
aee0ab3665

+ 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");
+    }
+}

+ 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;
+            }
+        }
+    }
+}