Преглед изворни кода

湘雅:症状缺少时间描述 &&上级医师(主治医师)首次查房对病史、查体无补充 && 上级医师(副主任医师/主任医师)首次查房对病史、查体无补充

zhanghang пре 3 година
родитељ
комит
79e8a6d296

+ 116 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/behospitalized/BEH0001.java

@@ -0,0 +1,116 @@
+package com.lantone.qc.kernel.catalogue.hospital.changshaxy.behospitalized;
+
+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.entity.Clinical;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.entity.PD;
+import com.lantone.qc.pub.model.label.ChiefLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @ClassName : BEH0001
+ * @Description : 症状缺少时间描述
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28
+ */
+@Component
+public class BEH0001 extends QCCatalogue {
+
+    private List<String> containList = Arrays.asList("检查", "术后", "药物", "发现", "误服", "确诊", "经", "异常", "诊断"
+            , "示", "超", "伤", "术", "复查", "体检", "血透", "血液透析");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        //主诉缺少主症状不提示信息
+        if (outputInfo != null && outputInfo.getResult() != null) {
+            Map<String, Object> outputMap = outputInfo.getResult().get("BEH0009");
+            if (outputMap != null && "-1".equals(outputMap.get("status"))) {
+                status.set("0");
+                return;
+            }
+        }
+
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        ChiefLabel chiefLabel = inputInfo.getBeHospitalizedDoc().getChiefLabel();
+        if (chiefLabel == null) {
+            status.set("0");
+            return;
+        }
+        String chiefText = chiefLabel.getText();
+        if (StringUtil.isBlank(chiefText)) {
+            status.set("0");
+            return;
+        }
+        // 暂时逻辑,BEH0009执行在BEH0001之前时可以撤销
+        boolean isExistence = true;
+        List<Clinical> clinicals = chiefLabel.getClinicals();
+        if (clinicals != null && clinicals.size() > 0) {
+            isExistence = false;
+        }
+        for (String word : containList) {
+            if (chiefText.contains(word)) {
+                isExistence = false;
+            }
+        }
+        List<Diag> diags = chiefLabel.getDiags();
+        if (diags != null && diags.size() > 0) {
+            for (Diag diag : diags) {
+                String hospitalDiagName = diag.getHospitalDiagName();
+                if (hospitalDiagName.contains("术后") || hospitalDiagName.contains("癌") ||
+                        hospitalDiagName.contains("瘤") || hospitalDiagName.contains("复诊")) {
+                    isExistence = false;
+                    break;
+                }
+            }
+        }
+        //主诉缺少主症状不提示信息
+        if (isExistence) {
+            status.set("0");
+            return;
+        }
+
+        if (StringUtil.isNotBlank(chiefText)) {
+            if (chiefText.contains("检查") || chiefText.contains("术后") || chiefText.contains("药物")
+                    || chiefText.contains("天") || chiefText.contains("周") || chiefText.contains("月")
+                    || chiefText.contains("时") || chiefText.contains("秒") || chiefText.contains("半年")
+                    || chiefText.contains("日") || chiefText.contains("今") || chiefText.contains("余年")
+                    || chiefText.contains("年") || chiefText.contains("分") || chiefText.contains("s")
+                    || chiefText.contains("h") || chiefText.contains("m") || isDate(chiefText)) {
+                status.set("0");
+                return;
+            }
+        } else {
+            List<PD> pds = chiefLabel.getPds();
+            if (pds != null && pds.size() > 0) {
+                for (PD pd : pds) {
+                    String pdName = pd.getName();
+                    if (StringUtil.isNotBlank(pdName)) {
+                        if (pdName.contains("天") || pdName.contains("周") || pdName.contains("月")
+                                || pdName.contains("时") || pdName.contains("秒") || pdName.contains("半年")
+                                || pdName.contains("日") || pdName.contains("今") || pdName.contains("余年")
+                                || pdName.contains("年") || pdName.contains("分") || chiefText.contains("s")
+                                || chiefText.contains("h") || chiefText.contains("m") || isDate(pdName)) {
+                            status.set("0");
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean isDate(String pdName) {
+        String regex = "[0-9]{4}.?[0-9]{2}.?[0-9]{2}";
+        return pdName.matches(regex);
+    }
+}

+ 66 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/threelevelward/THR0130.java

@@ -0,0 +1,66 @@
+package com.lantone.qc.kernel.catalogue.hospital.changshaxy.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.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;
+
+/**
+ * @ClassName : THR0130
+ * @Description : 上级医师(主治医师)首次查房对病史、查体无补充
+ * @Author : 胡敬
+ * @Date: 2020-03-23 14:16
+ */
+@Component
+public class THR0130 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 (CatalogueUtil.isEmpty(admisDateStr) || CatalogueUtil.isEmpty(recordDateStr) || CatalogueUtil.isEmpty(content)) {
+            status.set("0");
+            return;
+        }
+        //如果首次查房超过48小时则不判断该条规则
+        if (CatalogueUtil.compareTime(StringUtil.parseDateTime(admisDateStr), StringUtil.parseDateTime(recordDateStr), 48 * 60L)) {
+            status.set("0");
+            return;
+        }
+        if (content.contains("病史") || content.contains("查体") || content.contains("体查") || content.contains("补充")|| content.contains("专科检查")) {
+            status.set("0");
+            return;
+        }
+        if (StringUtil.isNotBlank(firstAttendStructureMap.get("体检"))) {
+            status.set("0");
+            return;
+        }
+        ThreeLevelWardLabel firstAttendLabel = firstAttendDoc.getThreeLevelWardLabel();
+        if (firstAttendLabel == null) {
+            return;
+        }
+
+        if (firstAttendLabel.getClinicals().size() != 0 || firstAttendLabel.getSigns().size() != 0) {
+            status.set("0");
+        }
+    }
+}

+ 66 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/threelevelward/THR0135.java

@@ -0,0 +1,66 @@
+package com.lantone.qc.kernel.catalogue.hospital.changshaxy.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.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;
+
+/**
+ * @ClassName : THR0135
+ * @Description : 上级医师(副主任医师/主任医师)首次查房对病史、查体无补充
+ * @Author : 胡敬
+ * @Date: 2020-03-23 14:16
+ */
+@Component
+public class THR0135 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 (CatalogueUtil.isEmpty(admisDateStr) || CatalogueUtil.isEmpty(recordDateStr) || CatalogueUtil.isEmpty(content)) {
+            status.set("0");
+            return;
+        }
+        //如果首次查房超过72小时则不判断该条规则
+        if (CatalogueUtil.compareTime(StringUtil.parseDateTime(admisDateStr), StringUtil.parseDateTime(recordDateStr), 72 * 60L)) {
+            status.set("0");
+            return;
+        }
+
+        if (content.contains("病史") || content.contains("查体") || content.contains("体查") || content.contains("补充")|| content.contains("专科检查")) {
+            status.set("0");
+            return;
+        }
+        if (StringUtil.isNotBlank(firstDirectStructureMap.get("体检"))) {
+            status.set("0");
+            return;
+        }
+        ThreeLevelWardLabel firstDirectLabel = firstDirectDoc.getThreeLevelWardLabel();
+        if (firstDirectLabel == null) {
+            return;
+        }
+
+        if (firstDirectLabel.getClinicals().size() != 0 || firstDirectLabel.getSigns().size() != 0) {
+            status.set("0");
+        }
+    }
+}