Browse Source

1.添加辅检doc
2.添加规则:术前未完成常规检查,住院48小时以上无血尿常规化验结果
3.

huj 5 years ago
parent
commit
1cfd509cd5

+ 123 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/preoperativediscussion/PRE03064.java

@@ -0,0 +1,123 @@
+package com.lantone.qc.kernel.catalogue.preoperativediscussion;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+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.LisDoc;
+import com.lantone.qc.pub.model.doc.PacsDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 术前未完成常规检查
+ * @author: HUJING
+ * @time: 2020/8/14 13:14
+ */
+@Component
+public class PRE03064 extends QCCatalogue {
+    private List<String> normalCheck = Lists.newArrayList("出凝血时间", "HBSAG", "血常规", "尿常规", "血型", "心电图");
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        List<LisDoc> lisDocs = inputInfo.getLisDocs();
+        List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+
+        if (operationDocs.size() == 0 || lisDocs.size() == 0 || pacsDocs.size() == 0) {
+            return;
+        }
+
+        //取化验名称
+        Map<String, String> lisRet = Maps.newHashMap();
+        lisDocs.stream().map(LisDoc::getStructureMap).forEach(x -> lisRet.put(x.get("报告名称"), x.get("报告创建时间")));
+        Map<String, String> newLisRet = processMap(lisRet);
+        //取辅检名称
+        Map<String, String> pacsRet = Maps.newHashMap();
+        pacsDocs.stream().map(PacsDoc::getStructureMap).forEach(x -> pacsRet.put(x.get("报告名称"), x.get("报告创建时间")));
+        Map<String, String> newPacsRet = processMap(pacsRet);
+
+        //取手术时间
+        List<String> operationDateList = operationDocs.stream().map(OperationDoc::getOperationRecordDoc)
+                .filter(Objects::nonNull)
+                .map(OperationRecordDoc::getStructureMap).map(x -> x.get("手术日期")).filter(StringUtil::isNotBlank).collect(Collectors.toList());
+
+        List<String> lisKey = new ArrayList<>(newLisRet.keySet());
+        List<String> pacsKey = new ArrayList<>(newPacsRet.keySet());
+        //lisKey.retainAll(normalCheck);//如果存在相同元素,lisKey中仅保留相同的元素。 如果不存在相同元素,lisKey会变为空。
+        //pacsKey.retainAll(normalCheck);//如果存在相同元素,pacsKey中仅保留相同的元素。 如果不存在相同元素,pacsKey会变为空。
+
+        if (operationDateList.size() > 0) {
+            String firstOperationDateStr = operationDateList.get(0);
+            Date firstOperationDate = StringUtil.parseDateTime(firstOperationDateStr);
+            int matchSum = 0;
+            List<String> missCheck = Lists.newArrayList();
+            getMatchSum(newLisRet, lisKey, firstOperationDate, matchSum, missCheck);
+            getMatchSum(newPacsRet, pacsKey, firstOperationDate, matchSum, missCheck);
+
+            if (matchSum < normalCheck.size()) {
+                status.set("-1");
+                info.set("未完成常规检查:" + missCheck.toString().replaceAll("[\\[\\]]", ""));
+            }
+        }
+//        for (String operationDateStr : operationDateList) {
+//            Date operationDate = StringUtil.parseDateTime(operationDateStr);
+//            if (operationDate == null) {
+//                continue;
+//            }
+//
+//        }
+//        System.out.println(operationDateList);
+
+    }
+
+    //获取检查中与必须要的检查匹配数
+    private void getMatchSum(Map<String, String> newRet, List<String> keySet, Date firstOperationDate, int matchSum, List<String> miss) {
+        for (String check : normalCheck) {
+            int checkMiss = 0;
+            for (String lis : keySet) {
+                if (lis.contains(check)) {
+                    String lisDateStr = newRet.get(lis);
+                    Date lisDate = StringUtil.parseDateTime(lisDateStr);
+                    if (lisDate.before(firstOperationDate)) {
+                        matchSum++;
+                        break;
+                    } else {
+                        checkMiss++;
+                    }
+                } else {
+                    checkMiss++;
+                }
+
+            }
+            //如果所有化验里都没有必要的当前检查(normalCheck里的检查)
+            if (checkMiss == keySet.size()) {
+                miss.add(check);
+            }
+        }
+    }
+
+    private Map<String, String> processMap(Map<String, String> ret) {
+        Map<String, String> newRet = Maps.newHashMap();
+        for (Map.Entry<String, String> enrty : ret.entrySet()) {
+            String key = enrty.getKey();
+            if (key.contains("=")) {
+                String pubName = key.split("=")[0];
+                if (StringUtil.isNotBlank(pubName)) {
+                    newRet.put(pubName, enrty.getValue());
+                }
+            } else {
+                newRet.put(key, enrty.getValue());
+            }
+        }
+        return newRet;
+    }
+}

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

@@ -0,0 +1,72 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.google.common.collect.Lists;
+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.LeaveHospitalDoc;
+import com.lantone.qc.pub.model.doc.LisDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author HUJING
+ * @create 2020-08-14 15:52
+ * @desc 住院48小时以上无血尿常规化验结果
+ **/
+@Component
+public class THR03065 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        List<LisDoc> lisDocs = inputInfo.getLisDocs();
+        if (lisDocs == null) {
+            return;
+        }
+        if (leaveHospitalDoc != null) {
+            String beginDateStr = leaveHospitalDoc.getStructureMap().get("入院时间");
+            String endDateStr = leaveHospitalDoc.getStructureMap().get("出院时间");
+            if (StringUtil.isBlank(beginDateStr) || StringUtil.isBlank(endDateStr)) {
+                return;
+            }
+            Date beginDate = StringUtil.parseDateTime(beginDateStr);
+            Date endDate = StringUtil.parseDateTime(endDateStr);
+            if (beginDate == null || endDate == null) {
+                return;
+            }
+            if (!CatalogueUtil.compareTime(beginDate, endDate, 48 * 60L)) {
+                return;
+            }
+        }
+        List<String> lisName = lisDocs.stream().map(LisDoc::getStructureMap).map(x -> x.get("报告名称")).collect(Collectors.toList());
+        //      血常规                尿常规
+        boolean findCBC = false, findUrineTest = false;
+        for (String lis : lisName) {
+            if (lis.contains("血常规") || lis.contains("CBC")) {
+                findCBC = true;
+            }
+            if (lis.contains("尿常规")) {
+                findUrineTest = true;
+            }
+        }
+
+        List<String> miss = Lists.newArrayList();
+        if (!findCBC) {
+            miss.add("血常规");
+        }
+        if (!findUrineTest) {
+            miss.add("尿常规");
+        }
+
+        if (miss.size() > 0) {
+            status.set("-1");
+            info.set(miss.toString().replaceAll("[\\[\\]]", ""));
+        }
+    }
+
+}

+ 1 - 0
public/src/main/java/com/lantone/qc/pub/Content.java

@@ -311,5 +311,6 @@ public class Content {
             "yyyy-MM-ddHH:mm:ss.000",
             "yyyyMMddHH:mm",
             "yyyy-MM-dd'T'HH:mm:ss",
+            "yyyy-MM-ddTHH:mm:ss",
     };
 }

+ 2 - 0
public/src/main/java/com/lantone/qc/pub/model/InputInfo.java

@@ -59,6 +59,8 @@ public class InputInfo {
     private List<DoctorAdviceDoc> doctorAdviceDocs = new ArrayList<>();
     //化验信息
     private List<LisDoc> lisDocs = new ArrayList<>();
+    //辅检信息
+    private List<PacsDoc> pacsDocs = new ArrayList<>();
     //值班交接制度
     private List<DutyShiftSystemDoc> dutyShiftSystemDocs = new ArrayList<>();
     //首次病程录

+ 14 - 0
public/src/main/java/com/lantone/qc/pub/model/doc/PacsDoc.java

@@ -0,0 +1,14 @@
+package com.lantone.qc.pub.model.doc;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 辅检文档
+ * @author: HUJING
+ * @time: 2020/8/14 13:16
+ */
+@Getter
+@Setter
+public class PacsDoc extends ModelDoc {
+}

+ 4 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDocTrans.java

@@ -161,6 +161,10 @@ public class ShaoyfDocTrans extends DocTrans {
                     ShaoyfLisDocTrans shaoyfLisDocTrans = new ShaoyfLisDocTrans();
                     inputInfo.setLisDocs(shaoyfLisDocTrans.extract(i));
                     break;
+                case "辅检":
+                    ShaoyfPacsDocTrans shaoyfPacsDocTrans = new ShaoyfPacsDocTrans();
+                    inputInfo.setPacsDocs(shaoyfPacsDocTrans.extract(i));
+                    break;
                 default:
                     break;
             }

+ 6 - 7
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfLisDocTrans.java

@@ -1,7 +1,6 @@
 package com.lantone.qc.trans.shaoyf;
 
 import com.google.common.collect.Lists;
-import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
 import com.lantone.qc.pub.model.doc.LisDoc;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.util.FastJsonUtils;
@@ -22,16 +21,16 @@ public class ShaoyfLisDocTrans extends ModelDocTrans {
         List<LisDoc> retList = Lists.newArrayList();
         List<String> contents = (List) medrecVo.getContent().get("content");
         contents.forEach(content -> {
-            retList.add(getDoctorAdviceDoc((Map) FastJsonUtils.getJsonToMap(content)));
+            retList.add(getLisDoc((Map) FastJsonUtils.getJsonToMap(content)));
         });
         return retList;
     }
 
-    private LisDoc getDoctorAdviceDoc(Map<String, String> content) {
-        LisDoc doctorAdviceDoc = new LisDoc();
-        doctorAdviceDoc.setStructureMap(content);
-        doctorAdviceDoc.setPageData((Map) content);
-        return doctorAdviceDoc;
+    private LisDoc getLisDoc(Map<String, String> content) {
+        LisDoc lisDoc = new LisDoc();
+        lisDoc.setStructureMap(content);
+        lisDoc.setPageData((Map) content);
+        return lisDoc;
     }
 
 }

+ 36 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfPacsDocTrans.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.PacsDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.trans.ModelDocTrans;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 辅检信息文档生成
+ * @author: HUJING
+ * @time: 2020/8/14 13:17
+ */
+public class ShaoyfPacsDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<PacsDoc> extract(MedrecVo medrecVo) {
+        List<PacsDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getPacsDoc((Map) FastJsonUtils.getJsonToMap(content)));
+        });
+        return retList;
+    }
+
+    private PacsDoc getPacsDoc(Map<String, String> content) {
+        PacsDoc pacsDoc = new PacsDoc();
+        pacsDoc.setStructureMap(content);
+        pacsDoc.setPageData((Map) content);
+        return pacsDoc;
+    }
+
+}