Przeglądaj źródła

危急值记录未在6小时内完成

louhr 5 lat temu
rodzic
commit
672be47e4f

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

@@ -88,12 +88,12 @@ public class BEH02980 extends QCCatalogue {
         for (Diag dg:diags) {
             String dgname = dg.getHospitalDiagName();
             if (dg.getNegative()==null) {
-                if (pos_diags.indexOf(dgname)==-1) {
+                if (!pos_diags.contains(dgname)) {
                     pos_diags.add(dgname);
                 }
             }
             else {
-                if (neg_diags.indexOf(dgname)==-1) {
+                if (!neg_diags.contains(dgname)) {
                     neg_diags.add(dgname);
                     dgs.add(dgname);
                 }

+ 63 - 10
kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0382.java

@@ -3,12 +3,16 @@ package com.lantone.qc.kernel.catalogue.crisisvaluereport;
 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.CrisisInfoDoc;
 import com.lantone.qc.pub.model.doc.CrisisValueReportDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -22,21 +26,70 @@ public class CRI0382 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
-        if (ListUtil.isEmpty(crisisValueReportDocs)) {
+        //无危急值结构化信息
+        List<CrisisInfoDoc> crisisInfoDocs = inputInfo.getCrisisInfoDocs();
+        if (crisisInfoDocs == null || crisisInfoDocs.size() == 0) {
             return;
         }
-        String format = "yyyy年MM月dd日HH时mm分";
+        //有结构化信息但无危急值文书,如果报告时间都未超过6小时 允许无文书
+        boolean isOutTime = false;
+        Date currentDate = new Date();
         int timeCha = 21600000;
-        crisisValueReportDocs.forEach(crisisValueReportDoc -> {
-            String baogaoTimeStr = crisisValueReportDoc.getStructureMap().get("报告时间");
-            String jiluTimeStr = crisisValueReportDoc.getStructureMap().get("记录时间");
-            if (StringUtil.isNotBlank(baogaoTimeStr)
-                    && StringUtil.isNotBlank(jiluTimeStr)
-                    && DateUtil.parseDate(jiluTimeStr, format).getTime() - DateUtil.parseDate(baogaoTimeStr, format).getTime() > timeCha) {
-                status.set("-1");
+        String[] dateFormats = new String[]{"yyyy年MM月dd日HH时mm分", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm"};
+        for (CrisisInfoDoc crisisInfoDoc : crisisInfoDocs) {
+            String reptTime = crisisInfoDoc.getStructureMap().get("报告时间");
+            if (StringUtils.isNotEmpty(reptTime)) {
+                if (currentDate.getTime() - StringUtil.parseDateTime(reptTime, dateFormats).getTime() > timeCha) {
+                    isOutTime = true;
+                }
+            }
+        };
+        if (isOutTime == false) {   //所有文书都未超过6小时,规则直接通过
+            return;
+        }
+
+        List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
+        //如果有危急值结构化数据 但无文书则直接提醒无危急值报告
+        if (crisisValueReportDocs == null || crisisValueReportDocs.size() == 0) {
+            status.set("-1");
+            return;
+        }
+        List<String> findCrisises = new ArrayList<>();
+        List<String> allCrisises = new ArrayList<>();
+        crisisInfoDocs.forEach(crisisInfoDoc -> {
+            String reptTime = crisisInfoDoc.getStructureMap().get("报告时间");
+            String crisisName = crisisInfoDoc.getStructureMap().get("危急值名称");
+            allCrisises.add(reptTime);
+            if (StringUtils.isNotEmpty(reptTime)) {
+                //当前时间和报告时间未超过6小时,规则通过
+                if (currentDate.getTime() - StringUtil.parseDateTime(reptTime, dateFormats).getTime() < timeCha) {
+                    findCrisises.add(reptTime);
+                } else {
+                    crisisValueReportDocs.forEach(crisisValueReportDoc -> {
+                        String recordTimeStr = crisisValueReportDoc.getStructureMap().get("记录时间");
+                        String docReptContent = crisisValueReportDoc.getStructureMap().get("危急值记录内容");
+                        if (StringUtil.parseDateTime(recordTimeStr, dateFormats).getTime()
+                                - StringUtil.parseDateTime(reptTime, dateFormats).getTime() < timeCha
+                                && docReptContent.contains(crisisName)) {
+                            findCrisises.add(reptTime);
+                        }
+                    });
+                }
             }
         });
+
+        if(findCrisises.size() != allCrisises.size()) {
+            status.set("-1");
+            allCrisises.forEach(reptTime -> {
+                if (!findCrisises.contains(reptTime)) {
+                    if (StringUtils.isEmpty(info.get())) {
+                        info.set(reptTime);
+                    } else {
+                        info.set(info.get() + ", " + reptTime);
+                    }
+                }
+            });
+        }
     }
 
 }

+ 3 - 1
public/src/main/java/com/lantone/qc/pub/model/InputInfo.java

@@ -43,8 +43,10 @@ public class InputInfo {
     private List<ClinicalBloodDoc> clinicalBloodDocs = new ArrayList<>();
     //输血后效果评价
     private List<ClinicBloodEffectDoc> clinicBloodEffectDocs = new ArrayList<>();
-    //危急值记录
+    //危急值文书记录
     private List<CrisisValueReportDoc> crisisValueReportDocs = new ArrayList<>();
+    //危急值结构化信息
+    private List<CrisisInfoDoc> crisisInfoDocs = new ArrayList<>();
     //病危通知书
     private List<CriticallyIllNoticeDoc> criticallyIllNoticeDocs = new ArrayList<>();
     //死亡病例讨论记录

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

@@ -0,0 +1,14 @@
+package com.lantone.qc.pub.model.doc;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 危急值结构化信息
+ * @author: rengb
+ * @time: 2020/3/20 15:47
+ */
+@Getter
+@Setter
+public class CrisisInfoDoc extends ModelDoc {
+}

+ 36 - 0
trans/src/main/java/com/lantone/qc/trans/changx/ChangxCrisisInfoDocTrans.java

@@ -0,0 +1,36 @@
+package com.lantone.qc.trans.changx;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.CrisisInfoDoc;
+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: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class ChangxCrisisInfoDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<CrisisInfoDoc> extract(MedrecVo medrecVo) {
+        List<CrisisInfoDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getCrisisInfoDoc((Map) FastJsonUtils.getJsonToMap(content)));
+        });
+        return retList;
+    }
+
+    private CrisisInfoDoc getCrisisInfoDoc(Map<String, String> content) {
+        CrisisInfoDoc crisisInfoDoc = new CrisisInfoDoc();
+        crisisInfoDoc.setStructureMap(content);
+        crisisInfoDoc.setPageData((Map) content);
+        return crisisInfoDoc;
+    }
+
+}

+ 4 - 0
trans/src/main/java/com/lantone/qc/trans/changx/ChangxDocTrans.java

@@ -52,6 +52,10 @@ public class ChangxDocTrans extends DocTrans {
                 ChangxCrisisValueReportDocTrans crisisValueReportDocTrans = new ChangxCrisisValueReportDocTrans();
                 inputInfo.setCrisisValueReportDocs(crisisValueReportDocTrans.extract(i));
             }
+            if (i.getTitle().equals("危急值")) {
+                ChangxCrisisInfoDocTrans changxCrisisInfoDocTrans = new ChangxCrisisInfoDocTrans();
+                inputInfo.setCrisisInfoDocs(changxCrisisInfoDocTrans.extract(i));
+            }
             if (i.getTitle().equals("病危通知书")) {
                 ChangxCriticallyIllNoticeDocTrans criticallyIllNoticeDocTrans = new ChangxCriticallyIllNoticeDocTrans();
                 inputInfo.setCriticallyIllNoticeDocs(criticallyIllNoticeDocTrans.extract(i));

+ 37 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfCrisisInfoDocTrans.java

@@ -0,0 +1,37 @@
+package com.lantone.qc.trans.shaoyf;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.CrisisInfoDoc;
+import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
+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: rengb
+ * @time: 2020/3/19 19:41
+ */
+public class ShaoyfCrisisInfoDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<CrisisInfoDoc> extract(MedrecVo medrecVo) {
+        List<CrisisInfoDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getCrisisInfoDoc((Map) FastJsonUtils.getJsonToMap(content)));
+        });
+        return retList;
+    }
+
+    private CrisisInfoDoc getCrisisInfoDoc(Map<String, String> content) {
+        CrisisInfoDoc crisisInfoDoc = new CrisisInfoDoc();
+        crisisInfoDoc.setStructureMap(content);
+        crisisInfoDoc.setPageData((Map) content);
+        return crisisInfoDoc;
+    }
+
+}

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

@@ -74,6 +74,10 @@ public class ShaoyfDocTrans extends DocTrans {
                     ShaoyfCrisisValueReportDocTrans crisisValueReportDocTrans = new ShaoyfCrisisValueReportDocTrans();
                     inputInfo.setCrisisValueReportDocs(crisisValueReportDocTrans.extract(i));
                     break;
+                case "危急值":
+                    ShaoyfCrisisInfoDocTrans shaoyfCrisisInfoDocTrans = new ShaoyfCrisisInfoDocTrans();
+                    inputInfo.setCrisisInfoDocs(shaoyfCrisisInfoDocTrans.extract(i));
+                    break;
                 case "病危通知书":
                     ShaoyfCriticallyIllNoticeDocTrans criticallyIllNoticeDocTrans = new ShaoyfCriticallyIllNoticeDocTrans();
                     inputInfo.setCriticallyIllNoticeDocs(criticallyIllNoticeDocTrans.extract(i));