Procházet zdrojové kódy

病案指标规则初始化 无输血或使用血液制品知情同意书/手术记录次数与手术次数不一致

chengyao před 4 roky
rodič
revize
7e0a994127

+ 58 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0301.java

@@ -0,0 +1,58 @@
+
+package com.lantone.qc.kernel.catalogue.clinicalblood;
+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.ClinicalBloodDoc;
+import com.lantone.qc.pub.model.doc.InformedConsentDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @ClassName : CLI0301
+ * @Description : 无输血或使用血液制品知情同意书
+ * @Author : cy
+ * @Date: 2021-04-18 14:49
+ */
+@Component
+public class CLI0301 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
+        if(ListUtil.isEmpty(clinicalBloodDocs)){
+            return;
+        }
+        long cou = inputInfo.getClinicalBloodDocs().stream().map(ClinicalBloodDoc::getStructureMap).filter(Objects::nonNull).count();
+        long count = 0L;
+        InformedConsentDoc informedConsentDoc = inputInfo.getInformedConsentDoc();
+        if(informedConsentDoc != null){
+            int length = 1;
+            Map<String, String> structureMap = informedConsentDoc.getStructureMap();
+            for (String str : Content.BLOODRECORDLIST) {
+                if(structureMap.containsKey(str)){
+                    String recStr = structureMap.get(str);
+                    if(StringUtils.isNotEmpty(recStr)){
+                        if(recStr.contains("},")){
+                             length = recStr.split("},").length;
+                        }
+                        if(length==1){
+                            count++;
+                        }else{
+                            count = count + length;
+                        }
+
+                    }
+
+                }
+            }
+        }
+        if(count == 0L ||(cou != count && cou>count)){
+            status.set("-1");
+        }
+    }
+}

+ 67 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03107.java

@@ -0,0 +1,67 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.alibaba.fastjson.JSONArray;
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+import java.text.ParseException;
+import java.util.*;
+
+/**
+ * @Description: 手术记录次数与手术次数不一致
+ * @author: cy
+ * @time: 2021/04/15 10:01
+ */
+@Component
+public class OPE03107 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        long cou = inputInfo.getOperationDocs().stream().map(OperationDoc::getOperationRecordDoc).filter(Objects::nonNull).count();
+        //先从病案首页判断手术次数
+        Map<String, Object> structureExtMap = new HashMap<>();
+        if(inputInfo.getFirstPageRecordDoc()!=null){
+            structureExtMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+        }
+        if(MapUtils.isNotEmpty(structureExtMap) && structureExtMap.get("手术信息") != null && StringUtils.isNotEmpty(structureExtMap.get("手术信息").toString())){
+            String objs = structureExtMap.get("手术信息").toString();
+            List<Map<String,String>> operation = (List<Map<String,String>>) JSONArray.parse(objs);
+            if (operation.size()!=cou) {
+                status.set("-1");
+                return;
+            }
+            return;
+        }
+
+        //无病案首页则从医嘱里判断手术次数
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        if (doctorAdviceDocs.size() == 0) {
+            return;
+        }
+        long count = 0L;
+        List<String> adviceDocs = new ArrayList<>();
+        for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+            String daPrescriptionType = dad.getStructureMap().get("医嘱处方类型");
+            String adviceType = dad.getStructureMap().get("医嘱类型判别");
+            String da_status = dad.getStructureMap().get("医嘱状态判别");
+            String fileCode = dad.getStructureMap().get("医嘱同组序号");
+            if(StringUtils.isNotEmpty(adviceType) && adviceType.equals(Content.statOrder) && StringUtils.isNotEmpty(daPrescriptionType)  && daPrescriptionType.equals(Content.operationOrder) && (StringUtils.isEmpty(da_status) || (StringUtils.isNotEmpty(da_status) && ! da_status.equals(Content.cancellationOrder)))){
+                if(StringUtils.isNotEmpty(fileCode)){
+                    adviceDocs.add(fileCode);
+                }
+            }
+        }
+        count = adviceDocs.stream().distinct().count();
+        if (count!=cou) {
+            status.set("-1");
+            return;
+        }
+    }
+}

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

@@ -336,6 +336,7 @@ public class Content {
     public static final String reportName= "报告名称";
     public static final String SurgicalProcessTreatment= "手术经过及处理";
     public static final String illnessRecords= "病情记录";
+    public static final String operationOrder = "手术";
     public static final String operationFee= "手术费";
     public static final String pathologyFee= "病理诊断费";
     public static final String bacterialCulture= "细菌培养";
@@ -365,4 +366,9 @@ public class Content {
             "塞来昔布胶囊", "氨酚曲马多片", "盐酸羟考酮缓释片","硫酸吗啡缓释片", "盐酸吗啡片","复方甲氧那明胶囊","醋酸甲地孕酮分散","枸橼酸托瑞米芬片","标准桃金娘油肠溶",
             "甲氧氯普胺片","多潘立酮片"
     );
+    /**
+     *   临床用血
+     */
+    public static List<String> BLOODRECORDLIST = Arrays.asList(
+            "输血/成份血知情同意书","成份血知情同意书","输血知情同意书","使用血液制品知情同意书","血液制品治疗知情同意书","输血治疗知情同意书","输血治疗同意书","血液制品治疗同意书","输血(血制品)治疗知情同意书","输血制品同意书","临床输血治疗知情同意书");
 }