فهرست منبع

北仑修改规则合并

wangsy 4 سال پیش
والد
کامیت
cf1f7babdc

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02966.java

@@ -39,7 +39,7 @@ public class BEH02966 extends QCCatalogue {
         } else if (gender.contains("女")) {
             /* 女性不合理词 */
             noMatchWords = Lists.newArrayList("睾丸", "阴茎", "精索", "包皮", "附睾", "输精管",
-                    "射精管", "尿道海绵体", "冠状沟", "精阜", "精囊腺");
+                    "射精管", "尿道海绵体", "冠状沟", "精阜", "精囊腺", "阴囊");
         }
         if (noMatchWords == null || noMatchWords.size() == 0) {
             return;

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0372.java

@@ -49,7 +49,7 @@ public class BEH0372 extends QCCatalogue {
 
         if (bhbasicInfoStatus.equals("丧偶") &&
                 (basicInfoStatus.contains("已故") || basicInfoStatus.contains("丧偶") || basicInfoStatus.contains("去世") ||
-                        basicInfoStatus.contains("亡故") || basicInfoStatus.contains("已逝"))) {
+                        basicInfoStatus.contains("亡故") || basicInfoStatus.contains("已逝") || basicInfoStatus.contains("死"))) {
             status.set("0");
             return;
         }

+ 15 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0209.java

@@ -7,6 +7,8 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -17,15 +19,26 @@ import java.util.Map;
  */
 @Component
 public class FIRP0209 extends QCCatalogue {
+
+    private List<String> containList = Arrays.asList("农民", "家务", "自由职业者", "个体经营者", "无业人员", "儿童");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String dischargeTime = firstpageStructureMap.get(Content.work_unit);
-            if(StringUtil.isBlank(dischargeTime)){
+            String job = firstpageStructureMap.get(Content.job);
+            if (StringUtil.isBlank(job)) {
+                return;
+            }
+            for (String str : containList) {
+                if (str.contains(job)) {
+                    return;
+                }
+            }
+            if (StringUtil.isBlank(dischargeTime) || "—".equals(dischargeTime)) {
                 status.set("-1");
             }
-
         }
     }
 }

+ 58 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/beilun/behospitalized/BEH0072.java

@@ -0,0 +1,58 @@
+package com.lantone.qc.kernel.catalogue.hospital.beilun.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.Dead;
+import com.lantone.qc.pub.model.entity.Family;
+import com.lantone.qc.pub.model.label.FamilyLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH0072
+ * @Description : 家属有死亡者,未记录死亡原因
+ * @Author : 胡敬
+ * @Date: 2020-03-11 16:44
+ */
+@Component
+public class BEH0072 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getFamilyLabel() != null) {
+            FamilyLabel familyLabel = inputInfo.getBeHospitalizedDoc().getFamilyLabel();
+            if (familyLabel == null) {
+                return;
+            }
+            String familyText = familyLabel.getText();
+            if (StringUtil.isNotBlank(familyText)) {
+                if (familyText.contains("死因") || familyText.contains("原因") || familyText.contains("详")
+                        || familyText.contains("因") || familyText.contains("死于")) {
+                    return;
+                }
+            }
+            List<Family> families = familyLabel.getFamilies();
+            if (ListUtil.isEmpty(families)) {
+                return;
+            }
+            for (Family family : families) {
+                if (family.getDead() != null) {
+                    Dead dead = family.getDead();
+                    if (family.getName().contains("年迈") || dead.getNegative() != null) {
+                        continue;
+                    }
+                    if (dead.getDeadReason() != null || dead.getUnknow() != null) {
+                        return;
+                    } else {
+                        status.set("-1");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+}

+ 58 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/beilun/firstpagerecord/FIRP0184.java

@@ -0,0 +1,58 @@
+package com.lantone.qc.kernel.catalogue.hospital.beilun.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.model.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.entity.AllergyMedicine;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0184
+ * @Description :药物过敏史未填写
+ * @Author : 胡敬
+ * @Date: 2020-03-16 20:18
+ */
+@Component
+public class FIRP0184 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (inputInfo.getFirstPageRecordDoc() == null || beHospitalizedDoc == null) {
+            return;
+        }
+        Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+        PastLabel pastLabel = beHospitalizedDoc.getPastLabel();
+        if (pastLabel == null) {
+            return;
+        }
+        List<AllergyMedicine> allergyMedicines = pastLabel.getAllergyMedicines();
+        if (allergyMedicines == null) {
+            return;
+        }
+
+        long count = allergyMedicines.stream().filter(allergyMedicine -> {
+            boolean flag = false;
+            if (allergyMedicine.getNegative() == null
+                    && StringUtil.isNotBlank(allergyMedicine.getName())) {
+                flag = true;
+            }
+            return flag;
+        }).count();
+
+        if (count > 0 && firstpageStructureMap != null) {
+            String drugAllergy = firstpageStructureMap.get(Content.drugAllergy);
+            if (CatalogueUtil.isEmpty(drugAllergy)) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 51 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/beilun/operationdiscussion/OPE0322.java

@@ -0,0 +1,51 @@
+package com.lantone.qc.kernel.catalogue.hospital.beilun.operationdiscussion;
+
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @Description: 手术患者无手术记录
+ * @author: Mark
+ * @time: 2020/04/04 11:22
+ */
+@Component
+public class OPE0322 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        //先判断医嘱里有无手术
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        if (doctorAdviceDocs.size() == 0) {
+            return;
+        }
+        long cou = inputInfo.getOperationDocs().stream().map(OperationDoc::getOperationRecordDoc).filter(Objects::nonNull).count();
+        for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+            String name = dad.getStructureMap().get("医嘱项目名称");
+            String daPrescriptionType = dad.getStructureMap().get("医嘱处方类型");
+            String daStartDateStr = dad.getStructureMap().get("医嘱开始时间");
+            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 (daPrescriptionType.contains("手术") && name.contains("术") && cou == 0) {
+                info.set("医嘱时间" + daStartDateStr);
+                status.set("-1");
+                return;
+            }
+        }
+        /*long cou = inputInfo.getOperationDocs().stream().map(i -> i.getOperationRecordDoc()).filter(i -> i != null).count();
+        if (cou == 0) {
+            status.set("-1");
+        }*/
+    }
+
+}

+ 17 - 13
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/beilun/operationdiscussion/OPE0369.java

@@ -1,4 +1,4 @@
-package com.lantone.qc.kernel.catalogue.hospital.beilun.operationdiscussion;
+package com.lantone.qc.kernel.catalogue.beilun.operationdiscussion;
 
 import com.alibaba.druid.support.json.JSONUtils;
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
@@ -47,9 +47,6 @@ public class OPE0369 extends QCCatalogue {
                 return;
             }
         }
-        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
-        System.out.println(JSONUtils.toJSONString(firstPageRecordDoc));
-        String behospitalWay = firstPageRecordDoc.getStructureMap().get("入院途径");
         //先判断是否有手术记录
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
         if (operationDocs == null || operationDocs.size() == 0) {
@@ -58,8 +55,12 @@ public class OPE0369 extends QCCatalogue {
         //北仑传入急诊标志,在首次病程录中
         if (inputInfo.getFirstCourseRecordDoc() != null) {
             Map<String, String> structureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();
-            String title = structureMap.get("标题");
-            if (StringUtil.isNotBlank(title) && title.contains("急诊")) {
+            String EDStr = structureMap.get("病例特点");
+            if (StringUtil.isNotBlank(EDStr) && EDStr.contains("急诊")) {
+                return;
+            }
+            EDStr = structureMap.get("诊疗计划");
+            if (StringUtil.isNotBlank(EDStr) && EDStr.contains("急诊")) {
                 return;
             }
         }
@@ -92,13 +93,16 @@ public class OPE0369 extends QCCatalogue {
                         }
 
                         //急诊手术处理【入院途径:急诊,且第一次手术时间和入院时间相差1小时】
-                        if(StringUtil.isNotBlank(behospitalWay)&&"急诊".equals(behospitalWay)
-                        &&!CatalogueUtil.compareTime(
-                                StringUtil.parseDateTime(admisTime),
-                                StringUtil.parseDateTime(operationStartDate),
-                                Long.valueOf(60)))
-                        {
-                            continue;
+                        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+                        if (firstPageRecordDoc != null) {
+                            String behospitalWay = firstPageRecordDoc.getStructureMap().get("入院途径");
+                            if (StringUtil.isNotBlank(behospitalWay) && "急诊".equals(behospitalWay)
+                                    && !CatalogueUtil.compareTime(
+                                    StringUtil.parseDateTime(admisTime),
+                                    StringUtil.parseDateTime(operationStartDate),
+                                    Long.valueOf(60))) {
+                                continue;
+                            }
                         }
                         operDateList.add(StringUtil.parseDateTime(operationStartDate));
                     } else {//取不到手术时间

+ 23 - 11
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/beilun/preoperativediscussion/PRE0328.java

@@ -1,4 +1,4 @@
-package com.lantone.qc.kernel.catalogue.hospital.beilun.preoperativediscussion;
+package com.lantone.qc.kernel.catalogue.beilun.preoperativediscussion;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.kernel.util.CatalogueUtil;
@@ -42,9 +42,6 @@ public class PRE0328 extends QCCatalogue {
             return;
         }
         boolean emergencyOperation = false;
-
-        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
-        String behospitalWay = firstPageRecordDoc.getStructureMap().get("入院途径");
         if (inputInfo.getBeHospitalizedDoc() != null) {
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
             String admisTime = beHospitalStructureMap.get("入院日期");
@@ -64,18 +61,33 @@ public class PRE0328 extends QCCatalogue {
                 }
 
                 //判断是否是急诊手术;[判断入院途径:急诊,这种情况不用术前讨论]
-                if(StringUtil.isNotBlank(behospitalWay)&&"急诊".equals(behospitalWay)
-                        &&!CatalogueUtil.compareTime(
-                        StringUtil.parseDateTime(admisTime),
-                        StringUtil.parseDateTime(startTime),
-                        Long.valueOf(60)))
-                {
-                    emergencyOperation = true;
+                FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+                if (firstPageRecordDoc != null) {
+                    String behospitalWay = firstPageRecordDoc.getStructureMap().get("入院途径");
+                    if (StringUtil.isNotBlank(behospitalWay) && "急诊".equals(behospitalWay)
+                            && !CatalogueUtil.compareTime(
+                            StringUtil.parseDateTime(admisTime),
+                            StringUtil.parseDateTime(startTime),
+                            Long.valueOf(60))) {
+                        emergencyOperation = true;
 
+                    }
                 }
             }
         }
         //北仑传入急诊标志,在首次病程录中
+        if (inputInfo.getFirstCourseRecordDoc() != null) {
+            Map<String, String> structureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();
+            String EDStr = structureMap.get("病例特点");
+            if (StringUtil.isNotBlank(EDStr) && EDStr.contains("急诊")) {
+                return;
+            }
+            EDStr = structureMap.get("诊疗计划");
+            if (StringUtil.isNotBlank(EDStr) && EDStr.contains("急诊")) {
+                return;
+            }
+        }
+        //北仑传入急诊标志,在首次病程录中
         if (inputInfo.getFirstCourseRecordDoc() != null) {
             Map<String, String> structureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();
             String title = structureMap.get("标题");

+ 44 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/beilun/preoperativediscussion/PRE0330.java

@@ -0,0 +1,44 @@
+package com.lantone.qc.kernel.catalogue.hospital.beilun.preoperativediscussion;
+
+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.operation.OperationDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 术前讨论记录无拟行术式
+ * @author: rengb
+ * @time: 2020/3/23 15:09
+ */
+@Component
+public class PRE0330 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        if (operationDocs == null || operationDocs.size() == 0) {
+            return;
+        }
+        for (OperationDoc operationDoc : operationDocs) {
+            if (operationDoc.getPreoperativeDiscussionDoc() != null) {
+                Map<String, String> structureMap = operationDoc.getPreoperativeDiscussionDoc().getStructureMap();
+                if (structureMap != null
+                        && structureMap.get("拟施手术方式、名称及可能的变更与禁忌症") != null) {
+                    return;
+                }
+                if (StringUtil.isEmpty(structureMap.get("拟行术式")) && StringUtil.isEmpty(structureMap.get("可能的变更"))
+                        && StringUtil.isEmpty(structureMap.get("其他术前相关情况"))) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+}