Bladeren bron

1.接到危急值报告后6小时内无病程记录修改逻辑
2.添加规则:危急值无报告处理记录

huj 5 jaren geleden
bovenliggende
commit
56dfe4bbe4

+ 28 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI03062.java

@@ -0,0 +1,28 @@
+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.CrisisValueReportDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description: 危急值无报告处理记录
+ * @author: 胡敬
+ * @time: 2020/8/12 14:18
+ */
+@Component
+public class CRI03062 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
+        //如果有危急值结构化数据 但无文书则直接提醒无危急值报告
+        if (crisisValueReportDocs == null || crisisValueReportDocs.size() == 0) {
+            status.set("-1");
+        }
+    }
+}

+ 42 - 39
kernel/src/main/java/com/lantone/qc/kernel/catalogue/crisisvaluereport/CRI0382.java

@@ -1,12 +1,11 @@
 package com.lantone.qc.kernel.catalogue.crisisvaluereport;
 
 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.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;
@@ -34,65 +33,69 @@ public class CRI0382 extends QCCatalogue {
         //有结构化信息但无危急值文书,如果报告时间都未超过6小时 允许无文书
         boolean isOutTime = false;
         Date currentDate = new Date();
-        int timeCha = 21600000;
-        String[] dateFormats = new String[]{"yyyy年MM月dd日HH时mm分", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm"};
-        String[] dateFormats2 = new String[]{"yyyy年MM月dd日HH时mm分", "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) {
+                if (CatalogueUtil.compareTime(StringUtil.parseDateTime(reptTime), currentDate, 6 * 60L)) {
                     isOutTime = true;
+                    break;
                 }
             }
-        };
-        if (isOutTime == false) {   //所有文书都未超过6小时,规则直接通过
+        }
+        if (!isOutTime) {   //所有文书都未超过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("报告时间");
+        for (CrisisInfoDoc crisisInfoDoc : crisisInfoDocs) {
+            String reptTimeStr = crisisInfoDoc.getStructureMap().get("报告时间");
             String crisisName = crisisInfoDoc.getStructureMap().get("危急值名称");
-            crisisName = crisisName ==null? "":crisisName.split("\\[|\\(|\\(")[0];
-            allCrisises.add(reptTime);
-            if (StringUtils.isNotEmpty(reptTime)) {
+            String crisisValue = crisisInfoDoc.getStructureMap().get("危急结果值");
+            crisisName = crisisName == null ? "" : crisisName.split("\\[|\\(|\\(")[0];
+            if (StringUtil.isBlank(reptTimeStr)) {
+                continue;
+            }
+            Date reptTime = StringUtil.parseDateTime(reptTimeStr);//报告时间
+            if (StringUtils.isNotEmpty(reptTimeStr)) {
                 //当前时间和报告时间未超过6小时,规则通过
-                if (currentDate.getTime() - StringUtil.parseDateTime(reptTime, dateFormats).getTime() < timeCha) {
-                    findCrisises.add(reptTime);
-                } else {
-                    for (CrisisValueReportDoc crisisValueReportDoc : crisisValueReportDocs) {
-                        String recordTimeStr = crisisValueReportDoc.getStructureMap().get("记录时间");
-                        String docReptContent = crisisValueReportDoc.getStructureMap().get("危急值记录内容");
-                        if ((StringUtil.parseDateTime(recordTimeStr, dateFormats2).getTime() - StringUtil.parseDateTime(reptTime, dateFormats2).getTime()) >= 0
-                                && (StringUtil.parseDateTime(recordTimeStr, dateFormats).getTime() - StringUtil.parseDateTime(reptTime, dateFormats).getTime()) < timeCha
-                                && docReptContent.contains(crisisName)) {
-                            findCrisises.add(reptTime);
-                            break;
-                        }
+                if (!CatalogueUtil.compareTime(reptTime, currentDate, 6 * 60L)) {
+                    continue;
+                }
+                int crisisMatchSum = 0;
+                for (CrisisValueReportDoc crisisValueReportDoc : crisisValueReportDocs) {
+                    String recordTimeStr = crisisValueReportDoc.getStructureMap().get("记录时间");
+                    String docReptContent = crisisValueReportDoc.getStructureMap().get("危急值记录内容");
+                    if (StringUtil.isBlank(recordTimeStr)) {
+                        continue;
+                    }
+                    Date recordTime = StringUtil.parseDateTime(recordTimeStr);//记录时间
+                    if (!docReptContent.contains(crisisName)) { //危急值报告内容不包含危急值内容,跳过
+                        crisisMatchSum++;
+                        continue;
                     }
+                    if (recordTime.before(reptTime)) {//记录时间比报告早,跳过
+                        continue;
+                    }
+                    if (docReptContent.contains(crisisValue) && CatalogueUtil.compareTime(recordTime, reptTime, 6 * 60L)) {//报告时间和记录时间超过6小时,存该报告时间
+                        findCrisises.add(crisisName + ":" + crisisValue + "->" + reptTimeStr);
+                        break;
+                    }
+                }
+
+                if (crisisMatchSum == crisisValueReportDocs.size()) {//该条危急值记录没有报告
+                    findCrisises.add(crisisName + ":" + crisisValue + "->" + reptTimeStr);
                 }
             }
-        });
+        }
 
-        if(findCrisises.size() != allCrisises.size()) {
+        if (findCrisises.size() > 0) {
             status.set("-1");
-            allCrisises.forEach(reptTime -> {
-                if (!findCrisises.contains(reptTime)) {
-                    if (StringUtils.isEmpty(info.get())) {
-                        info.set(reptTime);
-                    } else {
-                        info.set(info.get() + ", " + reptTime);
-                    }
-                }
-            });
+            info.set(findCrisises.toString().replaceAll("[\\[\\]]", ""));
         }
     }
-
 }