Browse Source

【指标十】细菌培养检查记录符合率(MER-ME-03) 【指标十一】抗菌药物使用记录符合率(MER-D&T-01)

wangsy 4 years ago
parent
commit
182f0e024f

+ 143 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03118.java

@@ -0,0 +1,143 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+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.model.doc.*;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationApplicationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferIntoDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName : THR03118
+ * @Description: 报告单或病程记录缺少细菌培养记录
+ * @author: zh
+ * @time: 2021/04/06 11:22
+ */
+@Component
+public class THR03118 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 【指标十】细菌培养检查记录符合率(MER-ME-03)
+         * 1、判断医嘱中是否含有细菌培养
+         * 2、判断病程记录中是否存在细菌培养记录(除了入院记录和首次病程录都属于病程记录)
+         * 3、判断化验报告单中是否记录细菌培养
+         */
+        status.set("0");
+        //医嘱中细菌培养的数量
+        int allNum = 0;
+        //病程记录中细菌培养的数量
+        int docNum = 0;
+        //报告单中细菌培养的数量
+        int reportNum = 0;
+        List<DoctorAdviceDoc> doctorAdviceDocList = inputInfo.getDoctorAdviceDocs();
+        if (ListUtil.isEmpty(doctorAdviceDocList)) {
+            return;
+        }
+        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocList) {
+            Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
+            String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
+            if (Content.statOrder.equals(doctorAsks)) {
+                String doctorAsksName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
+                if (StringUtil.isNotEmpty(doctorAsksName)) {
+                    if (doctorAsksName.contains(Content.bacterialCulture)) {
+                        allNum++;
+                    }
+                }
+            }
+        }
+        /******************************************查房记录********************************************************/
+        List<ThreeLevelWardDoc> allDoctorWradDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();
+        if (ListUtil.isNotEmpty(allDoctorWradDocs) && allDoctorWradDocs.size() > 0) {
+            for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                String allDoctorStr = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                if (allDoctorStr.contains(Content.bacterialCulture)) {
+                    docNum++;
+                }
+            }
+        }
+
+        /******************************************术后首程********************************************************/
+        if (inputInfo.getOperationDocs().size() > 0) {
+            List<String> recordList = inputInfo.getOperationDocs().stream().map(OperationDoc::getOperationDiscussionDoc).filter(Objects::nonNull)
+                    .map(OperationDiscussionDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("手术简要经过")))
+                    .map(i -> i.get("手术简要经过")).collect(Collectors.toList());
+            for (String recordStr : recordList) {
+                if (recordStr.contains(Content.bacterialCulture)) {
+                    docNum++;
+                }
+            }
+        }
+        /******************************************转入转出********************************************************/
+        if (inputInfo.getTransferRecordDocs() != null) {
+            TransferRecordDoc transferRecordDocs = inputInfo.getTransferRecordDocs();
+            List<String> intoRecordDList = transferRecordDocs.getTransferIntoDocs()
+                    .stream().map(TransferIntoDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("病历内容")))
+                    .map(i -> i.get("病历内容")).collect(Collectors.toList());
+            for (String recordStr : intoRecordDList) {
+                if (recordStr.contains(Content.bacterialCulture)) {
+                    docNum++;
+                }
+            }
+            intoRecordDList = transferRecordDocs.getTransferOutDocs()
+                    .stream().map(TransferOutDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("病历内容")))
+                    .map(i -> i.get("病历内容")).collect(Collectors.toList());
+            for (String recordStr : intoRecordDList) {
+                if (recordStr.contains(Content.bacterialCulture)) {
+                    docNum++;
+                }
+            }
+        }
+        /******************************************阶段小结********************************************************/
+        if (inputInfo.getStagesSummaryDocs().size() > 0) {
+            List<String> intoRecordList = inputInfo.getStagesSummaryDocs().stream().map(StagesSummaryDoc::getStructureMap)
+                    .filter(i -> StringUtil.isNotBlank(i.get("病历内容")))
+                    .map(i -> i.get("病历内容")).collect(Collectors.toList());
+            for (String recordStr : intoRecordList) {
+                if (recordStr.contains(Content.bacterialCulture)) {
+                    docNum++;
+                }
+            }
+        }
+
+        /******************************************会诊申请********************************************************/
+        if (inputInfo.getConsultationDocs().size() > 0) {
+            List<String> recordList = inputInfo.getConsultationDocs().stream().map(ConsultationDoc::getConsultationApplicationDoc).filter(Objects::nonNull)
+                    .map(ConsultationApplicationDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("会诊目的")))
+                    .map(i -> i.get("会诊目的")).collect(Collectors.toList());
+            for (String recordStr : recordList) {
+                if (recordStr.contains(Content.bacterialCulture)) {
+                    docNum++;
+                }
+            }
+        }
+
+        List<LisDoc> lisDocs = inputInfo.getLisDocs();
+        if (ListUtil.isNotEmpty(lisDocs)) {
+            for (LisDoc lisDoc : lisDocs) {
+                String lisDocStr = lisDoc.getStructureMap().get(Content.reportName);
+                if (StringUtil.isNotEmpty(lisDocStr) && lisDocStr.contains(Content.bacterialCulture)) {
+                    reportNum++;
+                }
+            }
+        }
+
+        if ((allNum != docNum && allNum > docNum) || (allNum != reportNum && allNum > reportNum)) {
+            status.set("-1");
+        }
+    }
+}

+ 91 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03119.java

@@ -0,0 +1,91 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+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.model.doc.*;
+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 : THR03119
+ * @Description: 有抗菌药物使用病程无记录
+ * @author: zh
+ * @time: 2021/04/06 11:22
+ */
+@Component
+public class THR03119 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 【指标十一】抗菌药物使用记录符合率(MER-D&T-01)
+         * 1、判断病案首页中是否存在抗菌药物费用
+         * 2、判断医嘱中是否存在抗菌药物的使用
+         * 3、若存在抗菌药物费用或者医嘱中存在抗菌药物,查询病程记录,没有记录提示规则
+         */
+        status.set("0");
+        boolean flag = false;
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        List<String> antimicrobialDrugList = Content.antimicrobialDrugList;
+        if (firstPageRecordDoc != null) {
+            Map<String, String> structureMap = firstPageRecordDoc.getStructureMap();
+            String antimicrobialAgents = structureMap.get("抗菌药物费用");
+            if (StringUtil.isNotEmpty(antimicrobialAgents) && antimicrobialAgents.equals("0")) {
+                double b = Double.parseDouble(antimicrobialAgents);
+                if (b > 0) {
+                    flag = true;
+                }
+            }
+        }
+
+        if (!flag) {
+            //查医嘱
+            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+                Map<String, String> structureMap = doctorAdviceDoc.getStructureMap();
+                String daStatus = structureMap.get(Content.doctorAdviceState);
+                if (StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))) {
+                    String adviceType = structureMap.get(Content.doctorAdviceType);
+                    //取长期和临时医嘱
+                    if (adviceType.equals(Content.statOrder) || adviceType.equals(Content.standingOrder)) {
+                        String daItemName = structureMap.get(Content.medicalOrderName);
+                        for (String antimicrobialDrug : antimicrobialDrugList) {
+                            if (daItemName.contains(antimicrobialDrug)) {
+                                flag = true;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        if (flag) {
+            status.set("-1");
+            List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+            if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                ThreeLevelWardDoc threeLevelWardDoc = threeLevelWardDocs.get(0);
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
+                if (ListUtil.isNotEmpty(allDoctorWradDocs)) {
+                    for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                        Map<String, String> wradDocStructureMap = allDoctorWradDoc.getStructureMap();
+                        String illnessRecords = wradDocStructureMap.get(Content.illnessRecords);
+                        if (StringUtil.isNotEmpty(illnessRecords)) {
+                            for (String antimicrobial : antimicrobialDrugList) {
+                                if (illnessRecords.contains(antimicrobial)) {
+                                    status.set("0");
+                                    return;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+
+    }
+}