瀏覽代碼

宁波中医院:规则调试

wangsy 3 年之前
父節點
當前提交
3b8dcfd3d1

+ 92 - 0
trans/src/main/java/com/lantone/qc/trans/ningbozhongyi/NingBoZhongYiInformedConsentDocTrans.java

@@ -0,0 +1,92 @@
+package com.lantone.qc.trans.ningbozhongyi;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.InformedConsentDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.beilun.util.BeiLunHtmlAnalysis;
+import com.lantone.qc.trans.beilun.util.BeiLunInformedHtmlAnalysis;
+import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
+import com.lantone.qc.trans.comsis.ModelDocGenerate;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+import com.lantone.qc.trans.ningbozhongyi.util.NingBoZhongYiHtmlAnalysis;
+import com.lantone.qc.trans.ningbozhongyi.util.NingBoZhongYiInformedHtmlAnalysis;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.MapUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 知情同意书
+ * @author: cy
+ * @time: 2021/4/18 17:48
+ */
+@Slf4j
+public class NingBoZhongYiInformedConsentDocTrans extends ModelDocTrans {
+    @Override
+    public List<InformedConsentDoc> extract(MedrecVo medrecVo) {
+        List<InformedConsentDoc> retList = Lists.newArrayList();
+        Map<String, List<String>> contentMap = (Map) medrecVo.getContent().get("content");
+        if (contentMap == null) {
+            return retList;
+        }
+        for (Map.Entry<String, List<String>> entry : contentMap.entrySet()) {
+            InformedConsentDoc informedConsentDoc = getInformedConsentDoc((List) entry.getValue());
+            retList.add(informedConsentDoc);
+        }
+        return retList;
+
+    }
+
+    private InformedConsentDoc getInformedConsentDoc(List<Map<String, Object>> contentMaps) {
+        InformedConsentDoc informedConsentDoc = new InformedConsentDoc();
+        if (ListUtil.isEmpty(contentMaps)) {
+            return informedConsentDoc;
+        }
+        for (Map<String, Object> contentMap : contentMaps) {
+            if (contentMap.get("xmlText") == null || StringUtil.isBlank(contentMap.get("xmlText").toString())) {
+                continue;
+            }
+            try {
+                String content = contentMap.get("xmlText").toString();
+                Map<String, String> structureMap = null;
+                if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
+                    structureMap = (Map) FastJsonUtils.getJsonToMap(content);
+                } else {
+                    String recTitle = contentMap.get("recTitle").toString();
+                    String recTypeId = contentMap.get("recTypeId").toString();
+                    NingBoZhongYiHtmlAnalysis ningBoZhongYiHtmlAnalysis = new NingBoZhongYiInformedHtmlAnalysis();
+                    Map<String, String> sourceMap = ningBoZhongYiHtmlAnalysis.analysis(content, recTitle, recTypeId);
+                    if (MapUtils.isNotEmpty(sourceMap)) {
+                        structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+                        structureMap.put("记录编号", contentMap.get("recId").toString());
+                        structureMap.put("标题", recTitle);
+                        structureMap.put("病历号", contentMap.get("behospitalCode") == null ? null : contentMap.get("behospitalCode").toString());
+                    }
+                }
+                if (MapUtils.isNotEmpty(structureMap)) {
+                    informedConsentDoc = ModelDocGenerate.informedConsentDocGen(structureMap);
+                    informedConsentDoc.setText(CommonAnalysisUtil.html2String(content));
+                    informedConsentDoc.setPageData((Map) structureMap);
+                }
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+            }
+        }
+        return informedConsentDoc;
+    }
+
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "患者签名=患方签名",
+            "患方手写意见=患方签名",
+            "患方手写意见患方签名=患方签名",
+            "患方或受托代理人签名=患方或受托代理人签名",
+            "代理人签名=被授权人签名",
+            "被授权人签名=被授权人签名"
+    );
+}

+ 10 - 0
trans/src/main/java/com/lantone/qc/trans/ningbozhongyi/NingbozhongyiDocTrans.java

@@ -6,6 +6,7 @@ import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.model.vo.QueryVo;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.trans.DocTrans;
+import com.lantone.qc.trans.beilun.BeilunInformedConsentDocTrans;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
 import lombok.extern.slf4j.Slf4j;
 
@@ -124,6 +125,12 @@ public class NingbozhongyiDocTrans extends DocTrans {
                     NingBoZhongYiOutDepDocTrans outDepDocTrans = new NingBoZhongYiOutDepDocTrans();
                     inputInfo.setBeHospitalizedDoc(outDepDocTrans.extract(i));
                 }
+
+                if (i.getTitle().equals("知情同意书")) {
+                    NingBoZhongYiInformedConsentDocTrans informedConsentDocTrans = new NingBoZhongYiInformedConsentDocTrans();
+                    inputInfo.setInformedConsentDoc(informedConsentDocTrans.extract(i));
+                }
+
                 /*******************************VTE评分 trans解析*****************************************/
                 if (i.getTitle().equals("VTE评分")) {
                     NingBoZhongYiVTEGradeDocTrans vteGradeDocTrans = new NingBoZhongYiVTEGradeDocTrans();
@@ -178,6 +185,9 @@ public class NingbozhongyiDocTrans extends DocTrans {
                             .sorted((map1, map2) -> OrdinaryAssistant.pageDataTimeSort(map1, map2, "记录时间", "yyyy-MM-dd HH:mm"))
                             .collect(Collectors.toList()));
         }
+        if (ListUtil.isNotEmpty(inputInfo.getInformedConsentDoc())) {
+            inputInfo.getPageData().put("知情同意书", inputInfo.getInformedConsentDoc().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
+        }
         if (ListUtil.isNotEmpty(inputInfo.getCrisisValueReportDocs())) {
             inputInfo.getPageData().put("危急值记录", inputInfo.getCrisisValueReportDocs().stream().map(i -> i.getPageData()).collect(Collectors.toList()));
         }

+ 124 - 0
trans/src/main/java/com/lantone/qc/trans/ningbozhongyi/util/NingBoZhongYiInformedHtmlAnalysis.java

@@ -0,0 +1,124 @@
+package com.lantone.qc.trans.ningbozhongyi.util;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.lantone.qc.pub.util.MapUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.beilun.util.BeiLunHtmlAnalysis;
+import com.lantone.qc.trans.beilun.util.BeiLunHtmlAnalysisUtil;
+import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.MapUtils;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 知情同意书html解析
+ * @author: HUJING
+ * @time: 2020/9/14 15:41
+ */
+@Slf4j
+public class NingBoZhongYiInformedHtmlAnalysis implements NingBoZhongYiHtmlAnalysis {
+
+    private String modeId = "53";
+
+    @Override
+    public Map<String, String> analysis(String... args) {
+        Map<String, String> structureMap = Maps.newLinkedHashMap();
+        try {
+            List<String> titles = Lists.newArrayList(
+                    "医师签名",
+                    "九、患者知情同意",
+                    "患方意见",
+                    "患者签名",
+                    "患方签名",
+                    "患方手写意见",
+                    "患方手写意见患方签名",
+                    "患方或受托代理人签名",
+                    "代理人签名",
+                    "被授权人签名",
+                    "与患者关系",
+                    "其他");
+            String html = args[0];
+            String recTitle = args[1];
+            String recTypeId = args[2];
+            Document doc = Jsoup.parse(html);
+            String htmlContent = BeiLunHtmlAnalysisUtil.blockDivToStr(doc.selectFirst("body").child(0), false);
+            if (StringUtil.isNotBlank(recTitle) && recTitle.contains("知情选择授权书")) {
+                structureMap.put("标题", recTitle);
+                return structureMap;
+            } else if ("自费服务项目、药品、材料使用知情同意书".equals(recTitle)) {
+                if (html.contains("自费服务项目、药品、材料使用知情同意书") && html.split("自费服务项目、药品、材料使用知情同意书")[1].contains("<img")) {
+                    structureMap.put("谈话医生", "<img");
+                    return structureMap;
+                }
+            }
+
+            if (StringUtil.isNotBlank(htmlContent)) {
+                htmlContent = htmlContent.replaceAll("[   ]", " ")
+                        .replace("手印说明(\uF06F右食指 \uF06F左食指)", "")
+                        .replace("手印说明:(\uF06F右食指 \uF06F左食指)其他手印备注", "")
+                        .replace("第1页", "");
+                CommonAnalysisUtil.html2StructureMap(titles, htmlContent, structureMap);
+            }
+            CommonAnalysisUtil.extractDateByTitle(structureMap, "记录时间");
+            for (String ignoreContrast : ignoreContrasts) {
+                if (structureMap.containsKey(ignoreContrast)) {
+                    structureMap.remove(ignoreContrast);
+                }
+            }
+
+            resultHandle(structureMap);
+            disDate(structureMap, "医师签名", "签名时间");
+            NingBoZhongYiHtmlAnalysisUtil.insertModuleId(modeId, recTypeId, structureMap);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return structureMap;
+    }
+
+    private List<String> ignoreContrasts = Lists.newArrayList(
+            "其他",
+            "与患者关系",
+            "手印备注与患者关系",
+            "身份证号码",
+            "九、患者知情同意",
+            "患方意见"
+    );
+
+    private void resultHandle(Map<String, String> result) {
+        if (MapUtils.isEmpty(result)) {
+            return;
+        }
+        if (result.containsKey("代理人签名")) {
+            String signName = result.get("代理人签名");
+
+            if (signName.contains("手印备注")) {
+                signName = signName.split("手印备注")[0];
+                result.put("代理人签名", signName);
+            }
+        }
+        result.forEach((key, value) -> {
+            if (StringUtil.isNotBlank(value)) {
+                value = StringUtil.trim(value);
+                if (value.endsWith(";") || value.endsWith(";")) {
+                    value = value.substring(0, value.length() - 1);
+                }
+                result.put(key, value);
+            }
+        });
+    }
+
+    private void disDate(Map sourceMap, String... args) {
+        Map<String, String> sourceMap_ = MapUtil.copyMap(sourceMap);
+        if (sourceMap.containsKey(args[0]) && sourceMap_.get(args[0]).contains(args[1])) {
+            int index = sourceMap_.get(args[0]).indexOf(args[1]);
+            sourceMap.put(args[0], sourceMap_.get(args[0]).substring(0, index));
+            sourceMap.put(args[0] + args[1], sourceMap_.get(args[0]).substring(index).replace(args[1], "").replaceAll("[::]", ""));
+        }
+    }
+
+}