Browse Source

手术知情同意书html解析

chengyao 4 years ago
parent
commit
ac3c0d779f

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/TransDispatch.java

@@ -27,7 +27,7 @@ public class TransDispatch {
                     + "DocTrans";
             DocTrans docTrans = (DocTrans) Class.forName(classPath).newInstance();
             queryDeal(queryVo, "会诊", "会诊申请单", "会诊结果单", "会诊记录");
-            queryDeal(queryVo, "手术", "术前讨论、术前小结", "手术记录", "术后首次病程及谈话记录");
+            queryDeal(queryVo, "手术", "术前讨论、术前小结", "手术记录", "术后首次病程及谈话记录","手术知情同意书");
             queryDeal(queryVo, "转科", "转入记录", "转出记录", "转科记录");
             return docTrans.extract(queryVo);
         } catch (Exception e) {

+ 22 - 15
trans/src/main/java/com/lantone/qc/trans/beilun/BeiLunOperationDocTrans.java

@@ -3,7 +3,6 @@ package com.lantone.qc.trans.beilun;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
-import com.lantone.qc.dbanaly.facade.changx.CxXmlUtil;
 import com.lantone.qc.pub.model.doc.operation.*;
 import com.lantone.qc.pub.model.vo.MedrecVo;
 import com.lantone.qc.pub.util.FastJsonUtils;
@@ -11,13 +10,14 @@ 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.*;
+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.comsis.Preproc;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.MapUtils;
 import org.jsoup.Jsoup;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -49,6 +49,7 @@ public class BeiLunOperationDocTrans extends ModelDocTrans {
         operationNameSet.addAll(operationDiscussionDocMap.keySet());
         operationNameSet.addAll(operationRecordDocMap.keySet());
         operationNameSet.addAll(preoperativeDiscussionDocMap.keySet());
+        operationNameSet.addAll(operationInformedConsentDocMap.keySet());
 
         operationNameSet.forEach(operationName -> {
             OperationDoc operationDoc = new OperationDoc();
@@ -345,24 +346,30 @@ public class BeiLunOperationDocTrans extends ModelDocTrans {
 
     private OperationInformedConsentDoc getOperationInformedConsentDoc(Map<String, Object> contentMap) {
         String modeId = "16";
-//        String content = contentMap.get("xmlText").toString();
-//        Map<String, String> xmlNodeValueMap = CxXmlUtil.firstLevelNodeValue(content);
-//        xmlNodeValueMap.put("mode_id=" + contentMap.get("modeId").toString(), "");
-//        xmlNodeValueMap.put("rec_title=" + contentMap.get("recTitle").toString(), "");
-//        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(xmlNodeValueMap, operationInformedConsent_keyContrasts, modeId);
-//
-//        String text = CxXmlUtil.getXmlText(content);
-//        Map<String, String> cutWordMap = Preproc.getCutWordMap(true, operationInformedConsent_sourceTitles, text);
-//        cutWordMap.putAll(structureMap);
-//
-//        OperationInformedConsentDoc operationInformedConsentDoc = ModelDocGenerate.operationInformedConsentDocGen(cutWordMap);
+        Map<String, String> structureMap = new HashMap<>();
+        String content = contentMap.get("xmlText").toString();
         OperationInformedConsentDoc operationInformedConsentDoc = new OperationInformedConsentDoc();
-//        operationInformedConsentDoc.setText(text);
-//        operationInformedConsentDoc.setPageData((Map) cutWordMap);
+        String recTitle = contentMap.get("recTitle").toString();
+        String recTypeId = contentMap.get("recTypeId").toString();
+        BeiLunHtmlAnalysis beiLunHtmlAnalysis = new BeiLunOperationInformedHtmlAnalysis();
+        Map<String, String> sourceMap = beiLunHtmlAnalysis.analysis(content, recTitle, recTypeId);
+        if (MapUtils.isNotEmpty(sourceMap)) {
+            structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
+            structureMap.put("病历标题", contentMap.get("recTitle").toString());
+            structureMap.put("记录编号", contentMap.get("recId").toString());
+            structureMap.put("病历号", contentMap.get("behospitalCode") == null ? null : contentMap.get("behospitalCode").toString());
+            operationInformedConsentDoc = ModelDocGenerate.operationInformedDocGen(structureMap);
+            operationInformedConsentDoc.setText(CommonAnalysisUtil.html2String(content));
+            operationInformedConsentDoc.setPageData((Map) structureMap);
+        }
 
         return operationInformedConsentDoc;
     }
 
+    private List<String> keyContrasts = Lists.newArrayList(
+            "术种使用的植入性材料或高值耗材及风险=使用植入性材料且种类和数量符合要求"
+    );
+
     private List<String> operationInformedConsent_sourceTitles = Lists.newArrayList(
             "姓名",
             "性别",

+ 28 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/BeilunDocTrans.java

@@ -124,6 +124,25 @@ public class BeilunDocTrans extends DocTrans {
                     BeiLunOutDepDocTrans outDepDocTrans = new BeiLunOutDepDocTrans();
                     inputInfo.setBeHospitalizedDoc(outDepDocTrans.extract(i));
                 }
+                if (i.getTitle().equals("知情同意书")) {
+                    BeilunInformedConsentDocTrans informedConsentDocTrans = new BeilunInformedConsentDocTrans();
+                    inputInfo.setInformedConsentDoc(informedConsentDocTrans.extract(i));
+                }
+                /*******************************VTE评分 trans解析*****************************************/
+                if (i.getTitle().equals("VTE评分")) {
+                    BeiLunVTEGradeDocTrans vteGradeDocTrans = new BeiLunVTEGradeDocTrans();
+                    inputInfo.setVteGradeDoc(vteGradeDocTrans.extract(i));
+                }
+                /*******************************ADL评分 trans解析*****************************************/
+                if (i.getTitle().equals("ADL评分")) {
+                    BeiLunADLGradeDocTrans adlGradeDocTrans = new BeiLunADLGradeDocTrans();
+                    inputInfo.setAdlGradeDoc(adlGradeDocTrans.extract(i));
+                }
+                /*******************************手麻记录 trans解析*****************************************/
+                if (i.getTitle().equals("手麻记录")) {
+                    AnesthesiaRecordDocTrans anesthesiaRecordDocTrans= new AnesthesiaRecordDocTrans();
+                    inputInfo.setAnesthesiaRecordDocs(anesthesiaRecordDocTrans.extract(i));
+                }
                 /*******************************VTE评分 trans解析*****************************************/
                 if (i.getTitle().equals("VTE评分")) {
                     BeiLunVTEGradeDocTrans vteGradeDocTrans = new BeiLunVTEGradeDocTrans();
@@ -246,6 +265,15 @@ public class BeilunDocTrans extends DocTrans {
                 inputInfo.getPageData().put("手术记录", orPageDataList);
             }
 
+            List<Map<String, Object>> InformedDataList = inputInfo.getOperationDocs()
+                    .stream()
+                    .filter(operationDoc -> operationDoc != null && operationDoc.getOperationInformedConsentDoc() != null)
+                    .map(operationDoc -> operationDoc.getOperationInformedConsentDoc().getPageData())
+                    .collect(Collectors.toList());
+            if (ListUtil.isNotEmpty(InformedDataList)) {
+                inputInfo.getPageData().put("手术知情同意书", InformedDataList);
+            }
+
             List<Map<String, Object>> pdPageDataList = inputInfo.getOperationDocs()
                     .stream()
                     .filter(operationDoc -> operationDoc != null && operationDoc.getPreoperativeDiscussionDoc() != null)

+ 25 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/BeilunInformedConsentDocTrans.java

@@ -0,0 +1,25 @@
+package com.lantone.qc.trans.beilun;
+
+import com.lantone.qc.pub.model.doc.InformedConsentDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.trans.ModelDocTrans;
+
+import java.util.Map;
+
+/**
+ * @Description: 知情同意书
+ * @author: cy
+ * @time: 2021/4/18 17:48
+ */
+public class BeilunInformedConsentDocTrans extends ModelDocTrans {
+    @Override
+    public InformedConsentDoc extract(MedrecVo medrecVo) {
+        InformedConsentDoc informedConsentDoc = new InformedConsentDoc();
+        Map<String, Object> content = medrecVo.getContent();
+        if(content .size()>0){
+            Map<String, String> structureMap = informedConsentDoc.getStructureMap();
+            content.forEach((key,value)-> structureMap.put(key,value.toString()));
+        }
+        return informedConsentDoc;
+    }
+}

+ 93 - 0
trans/src/main/java/com/lantone/qc/trans/beilun/util/BeiLunOperationInformedHtmlAnalysis.java

@@ -0,0 +1,93 @@
+package com.lantone.qc.trans.beilun.util;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+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 BeiLunOperationInformedHtmlAnalysis implements BeiLunHtmlAnalysis {
+
+    private String modeId = "16";
+
+    @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(htmlContent)) {
+                htmlContent = htmlContent.replaceAll("[   ]", " ").replace("患者签名","").replace("不会签字的按手印并备注手印说明:谁的哪根手指,并注明谁代写的与患者关系:与患者关系","");
+                CommonAnalysisUtil.html2StructureMap(titles, htmlContent, structureMap);
+            }
+            CommonAnalysisUtil.extractDateByTitle(structureMap, "记录时间");
+            for (String ignoreContrast : ignoreContrasts) {
+                if(structureMap.containsKey( ignoreContrast)){
+                    structureMap.remove(ignoreContrast);
+                }
+            }
+
+            resultHandle(structureMap);
+            parseMethod(structureMap);
+            BeiLunHtmlAnalysisUtil.insertModuleId(modeId, recTypeId, structureMap);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+        return structureMap;
+    }
+    private List<String>  ignoreContrasts = Lists.newArrayList(
+            "医师陈述",
+            "签字时间",
+            "签名时间"
+    );
+
+    private void parseMethod(Map<String, String> result) {
+        if (result.containsKey("术种使用的植入性材料或高值耗材及风险") && StringUtils.isNotEmpty(result.get("术种使用的植入性材料或高值耗材及风险"))) {
+            String str = result.get("术种使用的植入性材料或高值耗材及风险");
+            if(str.contains("\uF0FE无") && str.contains("\uF06F有耗材")){
+                result.put("术种使用的植入性材料或高值耗材及风险","false");
+            }
+            if(str.contains("\uF06F无") && str.contains("\uF0FE有耗材")){
+                result.put("术种使用的植入性材料或高值耗材及风险","true");
+            }
+        }
+
+}
+
+    private void resultHandle(Map<String, String> result) {
+        if (MapUtils.isEmpty(result)) {
+            return;
+        }
+        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);
+            }
+        });
+    }
+}

+ 13 - 0
trans/src/main/java/com/lantone/qc/trans/comsis/ModelDocGenerate.java

@@ -298,6 +298,19 @@ public class ModelDocGenerate {
         return deathRecordDoc;
     }
 
+    /**
+     * 手术知情同意书
+     *
+     * @param structureMap
+     * @return
+     */
+    public static OperationInformedConsentDoc operationInformedDocGen(Map<String, String> structureMap) {
+        OperationInformedConsentDoc operationInformedConsentDoc = new OperationInformedConsentDoc();
+        operationInformedConsentDoc.setStructureMap(structureMap);
+        return operationInformedConsentDoc;
+    }
+
+
     /**
      * 疑难病例讨论记录
      *