浏览代码

1、化验结果为危急值的,病程记录中要体现危急值记录。
病历前后描述不一致
医嘱上有抗生素使用,激素使用,查房记录里必须有体现
电子出院医嘱药品未见于文书出院带药中
规则条目更新
2、输血记录 记录时间-->病历日期 输血目的-->输注原因

louhr 5 年之前
父节点
当前提交
aa5f133a0c

+ 56 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02980.java

@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -33,6 +34,9 @@ public class BEH02980 extends QCCatalogue {
     @Autowired
     ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
 
+    private List<String> containList = Arrays.asList("脑萎缩", "慢性", "纤颤", "高血压", "糖尿", "冠状", "冠心病", "支架", "起搏器", "房颤", "风湿");
+    private List<String> filterList = Arrays.asList("心脏病", "低血糖", "急性", ";");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
@@ -41,10 +45,42 @@ public class BEH02980 extends QCCatalogue {
 
         List<String> pos_diags = new ArrayList<>();
         List<String> neg_diags = new ArrayList<>();
-
+        //现病史需要取一般情况之后疾病
         if (presentLabel != null) {
-            extract_diags(presentLabel.getDiags(), pos_diags, neg_diags);
+            List<GeneralDesc> generals = presentLabel.getGenerals();
+            if (generals.size() > 0) {
+                String presentText = presentLabel.getText();
+                List<Diag> presentDiags = presentLabel.getDiags();
+                /* 取现病史中一般情况之后的疾病名称 */
+                if (StringUtil.isNotBlank(presentText) && presentDiags.size() > 0) {
+                    String lastGeneral = generals.get(generals.size() - 1).getName();
+                    int lastGeneralIndex = presentText.indexOf(lastGeneral);
+                    for (Diag presentDiag : presentDiags) {
+                        if (presentDiag.getNegative() != null || presentDiag.getHospitalDiagName().contains("否认")) {
+                            continue;
+                        }
+                        /* 现病史中一般情况之后的疾病名称 */
+                        if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
+                            if (isContains(presentDiag.getHospitalDiagName()) && !isFilter(presentDiag.getHospitalDiagName())) {
+                                String dgname = presentDiag.getHospitalDiagName();
+                                if (presentDiag.getNegative()==null) {
+                                    if (!pos_diags.contains(dgname)) {
+                                        pos_diags.add(dgname);
+                                    }
+                                }
+                                else {
+                                    if (!neg_diags.contains(dgname)) {
+                                        neg_diags.add(dgname);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         }
+
+
         if (pastLabel != null) {
             extract_diags(pastLabel.getDiags(), pos_diags, neg_diags);
         } else {
@@ -132,4 +168,22 @@ public class BEH02980 extends QCCatalogue {
         return dgs;
     }
 
+    private boolean isContains(String diagName) {
+        for (String c : containList) {
+            if (diagName.contains(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean isFilter(String diagName) {
+        for (String c : filterList) {
+            if (diagName.contains(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 }

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA02987.java

@@ -47,8 +47,8 @@ public class LEA02987 extends QCCatalogue {
         for (DoctorAdviceDoc adviceDoc : doctorAdviceDocs) {
             Map<String, String> adviceDocStructureMap = adviceDoc.getStructureMap();
             String name = adviceDocStructureMap.get("医嘱项目名称");
-            String type = adviceDocStructureMap.get("医嘱处方类型");
-            if (StringUtil.isNotBlank(type) && type.contains("药")) {
+            String type = adviceDocStructureMap.get("医嘱类型判别");
+            if (StringUtil.isNotBlank(type) && type.equals("出院带药")) {
                 if (StringUtil.isNotBlank(name)) {
                     drugs.add(name);
                 }

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

@@ -17,6 +17,7 @@ import java.util.Map;
 /**
  * @ClassName : THR02985
  * @Description : 医嘱有抗生素使用病程无记录
+ * 药品类型(0.普药 1.抗生素 2.激素)
  * @Author : 胡敬
  * @Date: 2020-06-23 10:04
  */
@@ -33,9 +34,9 @@ public class THR02985 extends QCCatalogue {
         for (DoctorAdviceDoc adviceDoc : doctorAdviceDocs) {
             Map<String, String> adviceDocStructureMap = adviceDoc.getStructureMap();
             String name = adviceDocStructureMap.get("医嘱项目名称");
-            String drugCategory = adviceDocStructureMap.get("医嘱药品类别");
+            String drugCategory = adviceDocStructureMap.get("药品类型");
             String startDateStr = adviceDocStructureMap.get("医嘱开始时间");
-            if (StringUtil.isNotBlank(drugCategory) && drugCategory.contains("抗生素")) {
+            if (StringUtil.isNotBlank(drugCategory) && drugCategory.equals("1")) {
                 if (StringUtil.isNotBlank(name)) {
                     doctorAdviceDrugMap.put(StringUtil.parseDateTime(startDateStr), name);
                 }

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

@@ -17,6 +17,7 @@ import java.util.Map;
 /**
  * @ClassName : THR02986
  * @Description : 医嘱有激素使用病程无记录
+ * 药品类型(0.普药 1.抗生素 2.激素)
  * @Author : 胡敬
  * @Date: 2020-06-23 10:43
  */
@@ -33,9 +34,9 @@ public class THR02986 extends QCCatalogue {
         for (DoctorAdviceDoc adviceDoc : doctorAdviceDocs) {
             Map<String, String> adviceDocStructureMap = adviceDoc.getStructureMap();
             String name = adviceDocStructureMap.get("医嘱项目名称");
-            String drugCategory = adviceDocStructureMap.get("医嘱药品类别");
+            String drugCategory = adviceDocStructureMap.get("药品类型");
             String startDateStr = adviceDocStructureMap.get("医嘱开始时间");
-            if (StringUtil.isNotBlank(drugCategory) && drugCategory.contains("激素")) {
+            if (StringUtil.isNotBlank(drugCategory) && drugCategory.contains("2")) {
                 if (StringUtil.isNotBlank(name)) {
                     doctorAdviceDrugMap.put(StringUtil.parseDateTime(startDateStr), name);
                 }

+ 2 - 1
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfClinicalBloodDocTrans.java

@@ -44,7 +44,8 @@ public class ShaoyfClinicalBloodDocTrans extends ModelDocTrans {
             "开始时间=输注开始",
             "医生=记录医师",
             "结束时间=输注结束",
-            "输血原因=输血目的",
+            "输血目的=输注原因",
+            "记录时间=病历日期",
             "事件日期=病历日期",
             "内容=输注后效果评价"
     );