Browse Source

指标七:病案首页24小时完成率,指标八:CT/MRI检查记录符合率,指标九:病理检查记录符合率规则

zhanghang 4 years ago
parent
commit
3ac40f28b7

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03110.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+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.util.DateUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP03110
+ * @Description : 病案首页未在患者出院院24小时内完成
+ * @Author : zhanghang
+ * @Date: 2021-03-31 11:12
+ */
+@Component
+public class FIRP03110 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> firstPageRecordMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String admisDate = firstPageRecordMap.get(Content.dischargeTime);
+            String recordTime = firstPageRecordMap.get("创建时间");
+            if (CatalogueUtil.isEmpty(admisDate) || CatalogueUtil.isEmpty(recordTime)) {
+                return;
+            }
+            if(!CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(admisDate),
+                    StringUtil.parseDateTime(DateUtil.nowString()),
+                    Long.valueOf(24 * 60))){//如果出院还未过24小时规则不判断
+                return;
+            }
+
+            if (CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(admisDate),
+                    StringUtil.parseDateTime(recordTime),
+                    Long.valueOf(24 * 60))) {
+                status.set("-1");
+            }
+        }
+    }
+
+}

+ 96 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03111.java

@@ -0,0 +1,96 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.doc.PacsDoc;
+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;
+import java.util.Map;
+
+/**
+ * @ClassName : OPE03111
+ * @Description: 手术病理检查存在手术记录中无病理相关记录
+ * @author: zh
+ * @time: 2021/04/06 11:22
+ */
+@Component
+public class OPE03111 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean match = false;
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (firstPageRecordDoc == null) {
+            //病案首页为空判断医嘱
+            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+            if(ListUtil.isEmpty(doctorAdviceDocs)){
+                return;
+            }
+            if (doctorAdviceDocs.size() == 0) {
+                return;
+            }
+            for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+                Map<String, String> dadStructureMap = dad.getStructureMap();
+                String daStatus = dadStructureMap.get(Content.doctorAdviceState);
+                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
+                    String name = dadStructureMap.get(Content.medicalOrderName);
+                    if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
+                            || name.contains("特殊病人手术使用一次性卫生材料") || name.contains("人免疫缺陷病毒抗体检测免费")) {
+                        continue;
+                    }
+                    if (name.contains("手术")) {
+                        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+                            String adviceDocName = doctorAdviceDoc.getStructureMap().get(Content.medicalOrderName);
+                            if (adviceDocName.contains(Content.pathological)) {
+                                status.set("-1");
+                                match =true;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if (firstPageRecordDoc != null) {
+            Map<String, String> structureMap = firstPageRecordDoc.getStructureMap();
+            String pathologyMoneyStr = structureMap.get(Content.pathologyFee);
+            String operationMoneyStr = structureMap.get(Content.operationFee);
+            if (StringUtil.isEmpty(pathologyMoneyStr) || StringUtil.isEmpty(operationMoneyStr)) {
+                return;
+            }
+            if ((pathologyMoneyStr.equals("0") || operationMoneyStr.equals("0"))) {
+                return;
+            }
+            double a = Double.parseDouble(pathologyMoneyStr);
+            double b = Double.parseDouble(operationMoneyStr);
+            if (a > Content.pathologicalFee && b > 0) {
+                status.set("-1");
+                match=true;
+            }
+        }
+        //判断有无手术记录
+        if(match) {
+            if (operationDocs != null && operationDocs.size() > 0) {
+                //有手术记录的情况下,手术记录中应该出现体现有标本
+                String operationDocsStr = operationDocs.get(0).getOperationRecordDoc().getStructureMap().get(Content.SurgicalProcessTreatment);
+                if (StringUtil.isNotEmpty(operationDocsStr)) {
+                    if (operationDocsStr.contains(Content.specimen)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+
+    }
+}

+ 70 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THE03112.java

@@ -0,0 +1,70 @@
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.PacsDoc;
+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 : THE03112
+ * @Description :  医嘱存在MR,报告单未记录
+ * @Author : zh
+ * @Date: 2021-04-06 17:06
+ */
+@Component
+public class THE03112 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        int ctNum = 0;
+        int bcNum = 0;
+        List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
+        if (ListUtil.isNotEmpty(doctorAdviceDocsList)) {
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
+                Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
+                String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
+                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
+                    //ct取临时医嘱
+                    String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
+                    if (StringUtil.isNotEmpty(doctorAsks)) {
+                        if (Content.statOrder.equals(doctorAsks)) {
+                            //取医嘱项目名称
+                            String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
+                            if (daItemName.contains("磁共振") || daItemName.contains("MR")) {
+                                if (!daItemName.contains("IMRT") && !daItemName.contains("mrs评分")) {
+                                    ctNum++;
+                                    continue;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
+            if(ListUtil.isNotEmpty(pacsDocs)){
+                if(pacsDocs.size()>0) {
+                    for (PacsDoc pacsDoc : pacsDocs) {
+                        String pacsDocStr = pacsDoc.getStructureMap().get(Content.reportName);
+                        if (StringUtil.isNotEmpty(pacsDocStr) ) {
+                            if( pacsDocStr.contains("MR")||pacsDocStr.contains("磁共振")) {
+                                bcNum++;
+                                continue;
+                            }
+                        }
+                    }
+                }
+            }
+            if ((ctNum != bcNum)&&(ctNum>bcNum)) {
+                status.set("-1");
+            }
+        }
+    }
+}

+ 72 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THE03114.java

@@ -0,0 +1,72 @@
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.PacsDoc;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+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 : THE03114
+ * @Description :接受CT情况下报告单缺少CT报告
+ * @Author : zh
+ * @Date: 2021-04-06 17:06
+ */
+@Component
+public class THE03114 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        int ctNum = 0;
+        int bcNum = 0;
+        List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
+        if (ListUtil.isNotEmpty(doctorAdviceDocsList)) {
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
+                Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
+                String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
+                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
+                    //ct取临时医嘱
+                    String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
+                    if (StringUtil.isNotEmpty(doctorAsks)) {
+                        if (Content.statOrder.equals(doctorAsks)) {
+                            //取医嘱项目名称
+                            String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
+                            if (daItemName.contains("CT") || daItemName.contains("X线")) {
+                                if ((!daItemName.contains("ATCH") && !daItemName.contains("TCT") && !daItemName.contains("HCT") && !daItemName.contains("OCT") && !daItemName.contains("NCT") && !daItemName.contains("LCT") && !daItemName.contains("ACT")) || (daItemName.contains("停"))) {
+                                    //都不包含为CT
+                                    ctNum++;
+                                    continue;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
+            if(ListUtil.isNotEmpty(pacsDocs)){
+                if(pacsDocs.size()>0) {
+                    for (PacsDoc pacsDoc : pacsDocs) {
+                        String pacsDocStr = pacsDoc.getStructureMap().get(Content.reportName);
+                        if (StringUtil.isNotEmpty(pacsDocStr) ) {
+                            if( pacsDocStr.contains("CT")||pacsDocStr.contains("X线")) {
+                                bcNum++;
+                            }
+                        }
+                    }
+                }
+            }
+            if ((ctNum != bcNum)&&(ctNum>bcNum)) {
+                status.set("-1");
+            }
+
+        }
+    }
+}

+ 98 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THE03116.java

@@ -0,0 +1,98 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.google.common.collect.Maps;
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.doc.LisDoc;
+import com.lantone.qc.pub.model.doc.PacsDoc;
+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;
+import java.util.Map;
+
+/**
+ * @ClassName : THE03116
+ * @Description: 病理检查缺少病理检查报告单
+ * @author: zh
+ * @time: 2021/04/06 11:22
+ */
+
+@Component
+public class THE03116 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean match = false;
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
+        if (firstPageRecordDoc == null) {
+            //病案首页为空判断医嘱
+            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+            if (ListUtil.isEmpty(doctorAdviceDocs)) {
+                return;
+            }
+            if (doctorAdviceDocs.size() == 0) {
+                return;
+            }
+            for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+                Map<String, String> structureMap = dad.getStructureMap();
+                String daStatus = structureMap.get(Content.doctorAdviceState);
+                if (StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))) {
+                    String name = structureMap.get(Content.medicalOrderName);
+                    if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
+                            || name.contains("特殊病人手术使用一次性卫生材料") || name.contains("人免疫缺陷病毒抗体检测免费")) {
+                        continue;
+                    }
+                    if (name.contains("手术")) {
+                        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+                            String adviceDocName = doctorAdviceDoc.getStructureMap().get(Content.medicalOrderName);
+                            if (adviceDocName.contains(Content.pathological)) {
+                                status.set("-1");
+                                match = true;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if (firstPageRecordDoc != null) {
+            Map<String, String> firstPageRecordDocStructureMap = firstPageRecordDoc.getStructureMap();
+            String pathologyMoneyStr = firstPageRecordDocStructureMap.get(Content.pathologyFee);
+            String operationMoneyStr = firstPageRecordDocStructureMap.get(Content.operationFee);
+            if (StringUtil.isEmpty(pathologyMoneyStr) || StringUtil.isEmpty(operationMoneyStr)) {
+                return;
+            }
+            if ((pathologyMoneyStr.equals("0") || operationMoneyStr.equals("0"))) {
+                return;
+            }
+            double a = Double.parseDouble(pathologyMoneyStr);
+            double b = Double.parseDouble(operationMoneyStr);
+            if (a > Content.pathologicalFee && b > 0) {
+                status.set("-1");
+                match = true;
+            }
+        }
+        if (match) {
+            if (ListUtil.isNotEmpty(pacsDocs)) {
+                for (PacsDoc pacsDoc : pacsDocs) {
+                    Map<String, String> pacsDocStructureMap = pacsDoc.getStructureMap();
+                    String pacsDocStr = pacsDocStructureMap.get(Content.reportName);
+                    if (StringUtil.isNotEmpty(pacsDocStr)) {
+                        if (pacsDocStr.contains(Content.pathological)) {
+                            status.set("0");
+                            return;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 72 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03115.java

@@ -0,0 +1,72 @@
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.MapUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR03115
+ * @Description :  接受CT情况下病程记录缺少CT检查记录
+ * @Author : zh
+ * @Date: 2021-04-06 17:06
+ */
+@Component
+public class THR03115 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        int ctNum=0;
+        int bcNum=0;
+        List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
+        if(ListUtil.isNotEmpty(doctorAdviceDocsList)) {
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
+                Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
+                String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
+                if (StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))) {
+                    //ct取临时医嘱
+                    String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
+                    if (Content.statOrder.equals(doctorAsks)) {
+                        //取医嘱项目名称
+                        String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
+                        if (daItemName.contains("CT") || daItemName.contains("X线")) {
+                            if ((!daItemName.contains("ATCH") && !daItemName.contains("TCT") && !daItemName.contains("HCT") && !daItemName.contains("OCT") && !daItemName.contains("NCT") && !daItemName.contains("LCT") && !daItemName.contains("ACT")) || (daItemName.contains("停"))) {
+                                //都不包含为CT
+                                ctNum++;
+                                continue;
+                            }
+                        }
+                    }
+                }
+            }
+            List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+            if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+                if (ListUtil.isNotEmpty(allDoctorWradDocs)) {
+                    for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                        Map<String, String> structureMap = allDoctorWradDoc.getStructureMap();
+                        String records = structureMap.get(Content.illnessRecords);
+                        if (StringUtil.isNotEmpty(records)) {
+                            if (records.contains("CT") || records.contains("X线")) {
+                                bcNum++;
+                            }
+                        }
+                    }
+                }
+            }
+            if((ctNum != bcNum)&&(ctNum>bcNum)){
+                status.set("-1");
+            }
+        }
+    }
+
+}

+ 101 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03117.java

@@ -0,0 +1,101 @@
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.doc.PacsDoc;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import io.netty.util.internal.ObjectUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR03117
+ * @Description :  病理检查存在病程记录中无病理报告结果
+ * @Author : zh
+ * @Date: 2021-04-02 17:06
+ */
+@Component
+public class THR03117 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        boolean match = false;
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        if(firstPageRecordDoc==null){
+            //病案首页为空判断医嘱
+            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+            if(ListUtil.isEmpty(doctorAdviceDocs)){
+                return;
+            }
+            if (doctorAdviceDocs.size() == 0) {
+                return;
+            }
+            for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+                Map<String, String> dadStructureMap = dad.getStructureMap();
+                String daStatus = dadStructureMap.get(Content.doctorAdviceState);
+                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
+                String name = dadStructureMap.get(Content.medicalOrderName);
+                if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
+                        || name.contains("特殊病人手术使用一次性卫生材料") || name.contains("人免疫缺陷病毒抗体检测免费")) {
+                    continue;
+                }
+                if (name.contains("手术")) {
+                    for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+                        String adviceDocName = doctorAdviceDoc.getStructureMap().get(Content.medicalOrderName);
+                        if (adviceDocName.contains(Content.pathological)) {
+                            status.set("-1");
+                            //查房记录查找病理报告
+                            match=true;
+                        }
+                    }
+                    }
+                }
+            }
+        }
+        if(firstPageRecordDoc!=null) {
+            Map<String, String> structureMap = firstPageRecordDoc.getStructureMap();
+            String pathologyMoneyStr = structureMap.get(Content.pathologyFee);
+            String operationMoneyStr = structureMap.get(Content.operationFee);
+            if (StringUtil.isEmpty(pathologyMoneyStr) || StringUtil.isEmpty(operationMoneyStr)) {
+                return;
+            }
+            if ((pathologyMoneyStr.equals("0") || operationMoneyStr.equals("0"))) {
+                return;
+            }
+            double a = Double.parseDouble(pathologyMoneyStr);
+            double b = Double.parseDouble(operationMoneyStr);
+            if (a > Content.pathologicalFee && b > 0) {
+                status.set("-1");
+                match=true;
+            }
+        }
+        if(match) {
+            if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                ThreeLevelWardDoc threeLevelWardDoc = threeLevelWardDocs.get(0);
+                //所有查房记录
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
+                if (ListUtil.isEmpty(allDoctorWradDocs)) {
+                    return;
+                }
+                for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                    String pathographyStr = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                    if (StringUtil.isNotEmpty(pathographyStr)) {
+                        if (pathographyStr.contains(Content.pathologicalReport)) {
+                            status.set("0");
+                            return;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 74 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR3113.java

@@ -0,0 +1,74 @@
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+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 : THR3113
+ * @Description :  接受MR情况下病程记录缺少MR检查记录
+ * @Author : zh
+ * @Date: 2021-04-06 17:06
+ */
+@Component
+public class THR3113 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        int ctNum=0;
+        int bcNum=0;
+        List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
+        if(ListUtil.isNotEmpty(doctorAdviceDocsList)) {
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
+                Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
+               String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
+                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
+                //ct取临时医嘱
+                String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
+                if (StringUtil.isNotEmpty(doctorAsks)) {
+                    if (Content.statOrder.equals(doctorAsks)) {
+                        //取医嘱项目名称
+                        String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
+                        if (daItemName.contains("磁共振") || daItemName.contains("MR")) {
+                            if (!daItemName.contains("IMRT") && !daItemName.contains("mrs评分")) {
+                                ctNum++;
+                                continue;
+                            }
+                        }
+                    }
+                    }
+                }
+            }
+            List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+            if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+                if (ListUtil.isNotEmpty(allDoctorWradDocs)) {
+                    if (allDoctorWradDocs.size() > 0) {
+                        for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                            Map<String, String> structureMap = allDoctorWradDoc.getStructureMap();
+                            String records = structureMap.get(Content.illnessRecords);
+                            if (StringUtil.isNotEmpty(records)) {
+                                if (records.contains("MR") || records.contains("磁共振")) {
+                                    bcNum++;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            if((ctNum != bcNum)&&(ctNum>bcNum)){
+                status.set("-1");
+            }
+        }
+    }
+
+}