Ver código fonte

温附一测试规则问题更新

wangsy 3 anos atrás
pai
commit
338fd7954d

+ 6 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0084.java

@@ -36,27 +36,27 @@ public class FIRC0084 extends QCCatalogue {
                 }
                 String tretment_plan = courseRecordDocStructureMap.get("诊疗计划");
                 if (StringUtils.isNotEmpty(tretment_plan)) {
-                    if (CatalogueUtil.removeSpecialChar(tretment_plan).contains("同上")) {
+                    if (CatalogueUtil.removeSpecialChar(tretment_plan).equals("同上")) {
                         status.set("-1");
                     }
                 } else if (StringUtils.isNotEmpty(identify_diag)) {
-                    if (CatalogueUtil.removeSpecialChar(identify_diag).contains("同上")) {
+                    if (CatalogueUtil.removeSpecialChar(identify_diag).equals("同上")) {
                         status.set("-1");
                     }
                 } else if (StringUtils.isNotEmpty(characteristic)) {
-                    if (CatalogueUtil.removeSpecialChar(characteristic).contains("同上")) {
+                    if (CatalogueUtil.removeSpecialChar(characteristic).equals("同上")) {
                         status.set("-1");
                     }
                 } else if (StringUtils.isNotEmpty(initDiags)) {
-                    if (CatalogueUtil.removeSpecialChar(initDiags).contains("同上")) {
+                    if (CatalogueUtil.removeSpecialChar(initDiags).equals("同上")) {
                         status.set("-1");
                     }
                 } else if (StringUtils.isNotEmpty(condition)) {
-                    if (CatalogueUtil.removeSpecialChar(condition).contains("同上")) {
+                    if (CatalogueUtil.removeSpecialChar(condition).equals("同上")) {
                         status.set("-1");
                     }
                 } else if (StringUtils.isNotEmpty(pacs)) {
-                    if (CatalogueUtil.removeSpecialChar(pacs).contains("同上")) {
+                    if (CatalogueUtil.removeSpecialChar(pacs).equals("同上")) {
                         status.set("-1");
                     }
                 }

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC03087.java

@@ -29,8 +29,9 @@ public class FIRC03087 extends QCCatalogue {
             return;
         }
         String text = treatPlanLabel.getText();
-        if (StringUtil.isBlank(text) || text.contains("检查") || text.contains("检验")
-                || text.contains("三大常规") || text.contains("血常规") || text.contains("CT")) {
+        if (StringUtil.isBlank(text) || text.contains("检查") || text.contains("检验") || text.contains("培养")
+                || text.contains("三大常规") || text.contains("血常规") || text.contains("CT")
+                || text.contains("血液") || text.contains("生化") || text.contains("肿瘤")) {
             status.set("0");
             return;
         }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/wenfuyi/difficultcasediscuss/DIF0118.java

@@ -29,7 +29,7 @@ public class DIF0118 extends QCCatalogue {
         if(difficultCaseDiscussDocs != null && difficultCaseDiscussDocs.size()>0){
             for (DifficultCaseDiscussDoc dcdd:difficultCaseDiscussDocs) {
                 Map<String, String> dcddStructureMap = dcdd.getStructureMap();
-                String diisDate = dcddStructureMap.get("主持人签名");
+                String diisDate = dcddStructureMap.get("主持人");
                 if(CatalogueUtil.isEmpty(diisDate)){
                     status.set("-1");
                     break;

+ 1 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/wenfuyi/firstcourserecord/FIRC0088.java

@@ -28,9 +28,7 @@ public class FIRC0088 extends QCCatalogue {
         }
         Map<String, String> firstCourseStructureMap = firstCourseRecordDoc.getStructureMap();
         String diffDiag = firstCourseStructureMap.get("诊断依据及鉴别诊断");
-        if (StringUtil.isBlank(diffDiag) || diffDiag.contains("诊断明确") || diffDiag.contains("无需鉴别")
-                || diffDiag.contains("明确诊断") || diffDiag.contains("诊断基本明确") || diffDiag.contains("首先考虑")
-                || diffDiag.contains("疾病鉴别")) {
+        if (StringUtil.isBlank(diffDiag) || diffDiag.contains("鉴别") || diffDiag.contains("明确") || diffDiag.contains("首先考虑")) {
             return;
         }
         DiagLabel differentialDiagLabel = firstCourseRecordDoc.getDifferentialDiagLabel();

+ 60 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/wenfuyi/firstpagerecord/FIRP0222.java

@@ -0,0 +1,60 @@
+package com.lantone.qc.kernel.catalogue.hospital.wenfuyi.firstpagerecord;
+
+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.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0222
+ * @Description : 入院科别填写错误
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28ss
+ */
+@Component
+public class FIRP0222 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        MedicalRecordInfoDoc medicalRecordInfoDoc = inputInfo.getMedicalRecordInfoDoc();
+        TransferRecordDoc transferRecordDocs = inputInfo.getTransferRecordDocs();
+        /* 如果有转入转出科室记录,则不判断 */
+        if (transferRecordDocs != null) {
+            return;
+        }
+        if (firstPageRecordDoc == null || medicalRecordInfoDoc == null) {
+            return;
+        }
+        Map<String, String> firpStructureMap = firstPageRecordDoc.getStructureMap();
+        Map<String, String> medStructureMap = medicalRecordInfoDoc.getStructureMap();
+        //入院科别
+        String admitDept = firpStructureMap.get(Content.admitDept);
+        //转科科别
+        String transferDept = firpStructureMap.get(Content.transferDept);
+        //存在转科科别,不触发规则
+        if (StringUtil.isNotBlank(transferDept)) {
+            return;
+        }
+        String key = getKeyByHospitalId();
+        String behDeptId = medStructureMap.get(key);
+        if (StringUtil.isNotBlank(admitDept) && StringUtil.isNotBlank(behDeptId) && !admitDept.equals(behDeptId)) {
+            status.set("-1");
+        }
+    }
+
+    private String getKeyByHospitalId() {
+        switch (Content.hospital_Id) {
+            case "1":               //长兴
+                return "behDeptId";
+            default:
+                return "behDeptName";
+        }
+    }
+}

+ 100 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/wenfuyi/threelevelward/THR0134.java

@@ -0,0 +1,100 @@
+package com.lantone.qc.kernel.catalogue.hospital.wenfuyi.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.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
+import com.lantone.qc.pub.model.label.ThreeLevelWardLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName : THR0134
+ * @Description : 上级医师(主治医师)首次查房无初步诊断
+ * @Author : 胡敬
+ * @Date: 2020-03-23 14:16
+ */
+@Component
+public class THR0134 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getThreeLevelWardDocs().size() == 0 || inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        List<AttendingDoctorWardDoc> attendDocs = inputInfo.getThreeLevelWardDocs().get(0).getAttendingDoctorWardDocs();
+        if (attendDocs.size() == 0) {
+            status.set("0");
+            return;
+        }
+        AttendingDoctorWardDoc firstAttendDoc = attendDocs.get(0);
+        //先取结构化数据判断
+        Map<String, String> firstAttendStructureMap = firstAttendDoc.getStructureMap();
+        String admisDateStr = inputInfo.getBeHospitalizedDoc().getStructureMap().get("入院日期");
+        String recordDateStr = firstAttendStructureMap.get("查房日期");
+        String content = firstAttendStructureMap.get("病情记录");
+        if (content.contains("诊断明确") || content.contains("目前诊断") || content.contains("目前考虑") || content.contains("当前诊断") ||
+                content.contains("考虑诊断") || content.contains("诊断考虑") || content.contains("诊断基本明确") || content.contains("初步诊断")
+                || content.contains("诊断考虑") || content.contains("明确病情") || content.contains("诊断为") || content.contains("症状")
+                || content.contains("患有") || content.contains("考虑")
+                || regexFind(content, "诊断", "明确")) {
+            status.set("0");
+            return;
+        }
+        if (CatalogueUtil.isEmpty(admisDateStr) || CatalogueUtil.isEmpty(recordDateStr)) {
+            status.set("0");
+            return;
+        }
+        //如果首次查房超过48小时则不判断该条规则
+        if (CatalogueUtil.compareTime(StringUtil.parseDateTime(admisDateStr), StringUtil.parseDateTime(recordDateStr), 48 * 60L)) {
+            status.set("0");
+            return;
+        }
+        //如果首次查房在手术记录之后不提示规则
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (operationDocs != null) {
+            for (OperationDoc operationDoc : operationDocs) {
+                if (operationDoc.getOperationRecordDoc() != null) {
+                    Map<String, String> structureMap = operationDoc.getOperationRecordDoc().getStructureMap();
+                    String opeEndDate = structureMap.get("手术结束时间");
+                    if (StringUtil.isBlank(opeEndDate)) {
+                        opeEndDate = structureMap.get("记录时间");
+                    }
+                    if (StringUtil.isBlank(opeEndDate) || StringUtil.parseDateTime(opeEndDate) == null) {
+                        continue;
+                    }
+                    if (StringUtil.isNotBlank(opeEndDate) &&
+                            StringUtil.parseDateTime(opeEndDate).before(StringUtil.parseDateTime(recordDateStr))) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+        ThreeLevelWardLabel firstAttendLabel = firstAttendDoc.getThreeLevelWardLabel();
+        if (firstAttendLabel == null) {
+            return;
+        }
+
+        if (firstAttendLabel.getDiags().size() != 0 || StringUtil.isNotBlank(firstAttendLabel.getDiagText())) {
+            status.set("0");
+        }
+    }
+
+    private boolean regexFind(String content, String... str) {
+        String s = "";
+        for (String word : str) {
+            s += word + ".*";
+        }
+        s = s.substring(0, s.lastIndexOf(".*"));
+        Pattern p = Pattern.compile(s);
+        Matcher m = p.matcher(content);
+        return m.find();
+    }
+}

+ 99 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/wenfuyi/threelevelward/THR0139.java

@@ -0,0 +1,99 @@
+package com.lantone.qc.kernel.catalogue.hospital.wenfuyi.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.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
+import com.lantone.qc.pub.model.label.ThreeLevelWardLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName : THR0139
+ * @Description : 上级医师(副主任医师/主任医师)首次查房无补充诊断/初步诊断/修正诊断
+ * @Author : 胡敬
+ * @Date: 2020-03-23 14:16
+ */
+@Component
+public class THR0139 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getThreeLevelWardDocs().size() == 0 || inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        List<DirectorDoctorWardDoc> directorDocs = inputInfo.getThreeLevelWardDocs().get(0).getDirectorDoctorWardDocs();
+        if (directorDocs.size() == 0) {
+            status.set("0");
+            return;
+        }
+        DirectorDoctorWardDoc firstDirectDoc = directorDocs.get(0);
+        //先取结构化数据判断
+        Map<String, String> firstDirectStructureMap = firstDirectDoc.getStructureMap();
+        String admisDateStr = inputInfo.getBeHospitalizedDoc().getStructureMap().get("入院日期");
+        String recordDateStr = firstDirectStructureMap.get("查房日期");
+        String content = firstDirectStructureMap.get("病情记录");
+        if (content.contains("诊断明确") || content.contains("诊断") || content.contains("目前考虑") || content.contains("基本明确")
+                || content.contains("明确病情") || content.contains("症状") || content.contains("确诊")
+                || regexFind(content, "诊断", "明确") || regexFind(content, "诊断", "考虑") || regexFind(content, "目前", "考虑")) {
+            status.set("0");
+            return;
+        }
+
+        if (CatalogueUtil.isEmpty(admisDateStr) || CatalogueUtil.isEmpty(recordDateStr)) {
+            status.set("0");
+            return;
+        }
+        //如果首次查房超过72小时则不判断该条规则
+        if (CatalogueUtil.compareTime(StringUtil.parseDateTime(admisDateStr), StringUtil.parseDateTime(recordDateStr), 72 * 60L)) {
+            status.set("0");
+            return;
+        }
+        //如果首次查房在手术记录之后不提示规则
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (operationDocs != null) {
+            for (OperationDoc operationDoc : operationDocs) {
+                if (operationDoc.getOperationRecordDoc() != null) {
+                    Map<String, String> structureMap = operationDoc.getOperationRecordDoc().getStructureMap();
+                    String opeEndDate = structureMap.get("手术结束时间");
+                    if (StringUtil.isBlank(opeEndDate)) {
+                        opeEndDate = structureMap.get("记录时间");
+                    }
+                    if (StringUtil.isBlank(opeEndDate) || StringUtil.parseDateTime(opeEndDate) == null) {
+                        continue;
+                    }
+                    if (StringUtil.isNotBlank(opeEndDate) &&
+                            StringUtil.parseDateTime(opeEndDate).before(StringUtil.parseDateTime(recordDateStr))) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+        ThreeLevelWardLabel firstDirectLabel = firstDirectDoc.getThreeLevelWardLabel();
+        if (firstDirectLabel == null) {
+            return;
+        }
+
+        if (firstDirectLabel.getDiags().size() != 0 || StringUtil.isNotBlank(firstDirectLabel.getDiagText())) {
+            status.set("0");
+        }
+    }
+
+    private boolean regexFind(String content, String... str) {
+        String s = "";
+        for (String word : str) {
+            s += word + ".*";
+        }
+        s = s.substring(0, s.lastIndexOf(".*"));
+        Pattern p = Pattern.compile(s);
+        Matcher m = p.matcher(content);
+        return m.find();
+    }
+}

+ 19 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/wenfuyi/threelevelward/THR03090.java

@@ -37,13 +37,17 @@ public class THR03090 extends QCCatalogue {
         if (operationDocs == null || operationDocs.size() == 0) {
             return;
         }
+        //开始时间
         String operationStartDate = "";
+        //主刀医师
+        String operatorPhysician = "";
         if (operationDocs.get(operationDocs.size() - 1).getOperationRecordDoc() != null) {
             Map<String, String> operationDocStructureMap = operationDocs.get(operationDocs.size() - 1).getOperationRecordDoc().getStructureMap();
             operationStartDate = operationDocStructureMap.get("开始时间");
             if (StringUtil.parseDateTime(operationStartDate) == null) {
                 operationStartDate = DateUtil.nowString();
             }
+            operatorPhysician = StringUtil.isNotBlank(operationDocStructureMap.get("主刀医师")) ? operationDocStructureMap.get("主刀医师") : operationDocStructureMap.get("手术者");
         }
 
         if (StringUtil.isBlank(operationStartDate)) {
@@ -57,9 +61,21 @@ public class THR03090 extends QCCatalogue {
             String writTitle = structureMap.get("文书标题");
             String makeDate = structureMap.get("查房日期");
             if (StringUtil.isNotBlank(makeDate) && StringUtil.parseDateTime(makeDate).before(StringUtil.parseDateTime(operationStartDate))) {
-                if (((StringUtil.isNotBlank(makeTitle) && makeTitle.contains("主刀")) || (StringUtil.isNotBlank(writTitle) && writTitle.contains("主刀"))
-                        || ((StringUtil.isNotBlank(makeTitle) && makeTitle.contains("术前")) || (StringUtil.isNotBlank(writTitle) && writTitle.contains("术前"))))) {
-                    return;
+                if (StringUtil.isNotBlank(makeTitle)) {
+                    if (makeTitle.contains("主刀") || makeTitle.contains("术前")) {
+                        return;
+                    }
+                    if (StringUtil.isNotBlank(operatorPhysician) && makeTitle.contains(operatorPhysician)) {
+                        return;
+                    }
+                }
+                if (StringUtil.isNotBlank(writTitle)) {
+                    if (writTitle.contains("主刀") || writTitle.contains("术前")) {
+                        return;
+                    }
+                    if (StringUtil.isNotBlank(operatorPhysician) && writTitle.contains(operatorPhysician)) {
+                        return;
+                    }
                 }
             }
         }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0130.java

@@ -46,7 +46,7 @@ public class THR0130 extends QCCatalogue {
             status.set("0");
             return;
         }
-        if (content.contains("病史") || content.contains("查体") || content.contains("体查") || content.contains("补充")) {
+        if (content.contains("病史") || content.contains("查体") || content.contains("体查") || content.contains("补充") || content.contains("检查")) {
             status.set("0");
             return;
         }

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0134.java

@@ -41,7 +41,7 @@ public class THR0134 extends QCCatalogue {
         String content = firstAttendStructureMap.get("病情记录");
         if (content.contains("诊断明确") || content.contains("目前诊断") || content.contains("目前考虑") || content.contains("当前诊断") ||
                 content.contains("考虑诊断") || content.contains("诊断考虑") || content.contains("诊断基本明确") || content.contains("初步诊断")
-                || content.contains("诊断考虑") || content.contains("明确病情") || content.contains("诊断为") || content.contains("症状")
+                || content.contains("诊断考虑") || content.contains("明确病情") || content.contains("诊断为") || content.contains("症状") || content.contains("患有") || content.contains("需考虑")
                 || regexFind(content, "诊断", "明确")) {
             status.set("0");
             return;

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0135.java

@@ -46,7 +46,7 @@ public class THR0135 extends QCCatalogue {
             return;
         }
 
-        if (content.contains("病史") || content.contains("查体") || content.contains("体查") || content.contains("补充")) {
+        if (content.contains("病史") || content.contains("查体") || content.contains("体查") || content.contains("补充") || content.contains("检查")) {
             status.set("0");
             return;
         }

+ 3 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0139.java

@@ -40,9 +40,9 @@ public class THR0139 extends QCCatalogue {
         String recordDateStr = firstDirectStructureMap.get("查房日期");
         String content = firstDirectStructureMap.get("病情记录");
         if (content.contains("诊断明确") || content.contains("目前诊断") || content.contains("目前考虑") || content.contains("当前诊断") ||
-                content.contains("考虑诊断") || content.contains("诊断考虑") || content.contains("诊断基本明确") || content.contains("初步诊断")
-                || content.contains("诊断考虑") || content.contains("明确病情") || content.contains("诊断为") || content.contains("症状")
-                || regexFind(content, "诊断", "明确")) {
+                content.contains("考虑诊断") || content.contains("诊断考虑") || content.contains("基本明确") || content.contains("初步诊断")
+                || content.contains("明确病情") || content.contains("诊断为") || content.contains("症状") || content.contains("确诊")
+                || regexFind(content, "诊断", "明确") || regexFind(content, "诊断", "考虑") || regexFind(content, "目前", "考虑")) {
             status.set("0");
             return;
         }