Forráskód Böngészése

1、科室增加急诊状态,(急诊状态的科室不需要质控)
2、24小时内出入院死亡记录不需要质控
3、更新死亡数据解析逻辑
4、更新入院记录解析逻辑
5、更新入院记录职业未填写规则问题
6、更新入院记录民族未填写规则问题
7、输血记录RH血型未填写规则问题
8、数据记录数据开始/结束时间未填写规则问题

攻心小虫 2 éve
szülő
commit
f1f7f4c840

+ 4 - 28
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0002.java

@@ -52,14 +52,11 @@ public class BEH0002 extends QCCatalogue {
         if (chiefDiags.size() > 0) {
             for (Diag diag : chiefDiags) {
                 String hospitalDiagName = diag.getHospitalDiagName();
-                if (hospitalDiagName.contains("术后") || hospitalDiagName.contains("癌") ||
-                        hospitalDiagName.contains("瘤") || hospitalDiagName.contains("复诊") ||hospitalDiagName.contains("粘液血便")) {
+                if (hospitalDiagName.contains("术后") || hospitalDiagName.contains("癌") || hospitalDiagName.contains("瘤") || hospitalDiagName.contains("复诊") ||hospitalDiagName.contains("粘液血便")) {
                     status.set("0");
                     break;
                 }
-                {
-                    bool = true;
-                }
+                bool = true;
             }
         } else {
             bool = true;
@@ -73,11 +70,7 @@ public class BEH0002 extends QCCatalogue {
             String firstHDiag = diags.get(0).getHospitalDiagName();
             String mainDiag = StringUtil.isBlank(firstHDiag) ? firstDiag : firstHDiag;
             List<String> symptoms = null;
-            //Map<String, String> hostpital_standDiag = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DIAG_MAP);
-            //if (!hostpital_standDiag.containsKey(mainDiag)) {
-            //    status.set("0");
-            //    return;
-            //}
+            
             Map<String, Map<String, Object>> diagMap = specialStorageUtil.getJsonStringValue(KernelConstants.CONCEPT_DIAG_PROPERTY_MAP);
             Map<String, Object> map = (Map<String, Object>) diagMap.get(mainDiag);
             if (map != null && map.size() > 0) {
@@ -92,8 +85,7 @@ public class BEH0002 extends QCCatalogue {
                 String firstClinical = clinicals.get(0).getName();
                 /* 主诉现病史相似度算法接口 */
                 ModelAI modelAI = new ModelAI();
-                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firstClinical, symptoms, false
-                        , "chief_present", chiefPresentSimilarityServiceClient);
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firstClinical, symptoms, false, "chief_present", chiefPresentSimilarityServiceClient);
                 if (jsonArray.size() == 2) {
                     /* 相似度最高症状 */
                     String symptom = jsonArray.getString(0);
@@ -107,23 +99,7 @@ public class BEH0002 extends QCCatalogue {
                     }
                 }
 
-                //if (symptoms.contains(firstClinical)) {
-                //    status.set("0");
-                //}
-                //for (Clinical clinical : clinicals) {
-                //    String clinicalName = clinical.getName();
-                //    if (symptoms != null && !symptoms.contains(clinicalName)) {
-                //        if (StringUtils.isEmpty(info.get())) {
-                //            info.set(clinicalName);
-                //        } else {
-                //            info.set(info.get() + "," + clinicalName);
-                //        }
-                //    }
-                //}
             }
-            //if (StringUtils.isEmpty(info.get())) {
-            //    status.set("0");
-            //}
         }
     }
 }

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0562.java

@@ -29,8 +29,8 @@ public class CLI0562 extends QCCatalogue {
         if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
             for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
                 Map<String, String> cliBStructureMap = cliB.getStructureMap();
-                if(cliBStructureMap.containsKey("输注开始")){
-                    if(StringUtils.isEmpty(cliBStructureMap.get("输注开始"))){
+                if(cliBStructureMap.containsKey("输血开始时间")){
+                    if(StringUtils.isEmpty(cliBStructureMap.get("输血开始时间"))){
                         status.set("-1");
                         break;
                     }

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0564.java

@@ -30,8 +30,8 @@ public class CLI0564 extends QCCatalogue {
 //            List<ClinicalBloodDoc> bloodDocs = clinicalBloodDocs.stream().filter(bloodDoc -> bloodDoc.getStructureMap().get("输血后效果评价") == null).collect(Collectors.toList());
             for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
                 Map<String, String> cliBStructureMap = cliB.getStructureMap();
-                if (cliBStructureMap.containsKey("输注结束")) {
-                    if (StringUtils.isEmpty(cliBStructureMap.get("输注结束"))) {
+                if (cliBStructureMap.containsKey("输血结束时间")) {
+                    if (StringUtils.isEmpty(cliBStructureMap.get("输血结束时间"))) {
                         status.set("-1");
                         break;
                     }

+ 11 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0571.java

@@ -45,6 +45,17 @@ public class CLI0571 extends QCCatalogue {
                         }
                     }
                 }
+                
+                //温附一
+                if (cliBStructureMap.containsKey("输注种类及量")) {
+                    String bloodType = cliBStructureMap.get("输注种类及量");
+                    if (StringUtil.isNotBlank(bloodType)) {
+                        if (bloodType.contains("Rh") || bloodType.contains("RH")) {
+                            status.set("0");
+                            return;
+                        }
+                    }
+                }
 
             }
         }

+ 28 - 30
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0161.java

@@ -1,15 +1,14 @@
 package com.lantone.qc.kernel.catalogue.firstpagerecord;
 
+import java.util.Map;
+
+import org.springframework.stereotype.Component;
+
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
-import com.lantone.qc.kernel.util.RegularUtil;
 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.util.StringUtil;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
 
 /**
  * @ClassName : FIRP0161
@@ -21,22 +20,21 @@ import java.util.Map;
 public class FIRP0161 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null
-                && inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getStructureMap() != null) {
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null && inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
             String firstAdmissionAge = firstpageStructureMap.get(Content.age);
             /* 根据病案首页新生儿出生月数和新生儿出生天数拼接年龄 */
-            String newbornAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
-            String newbornAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
-            String newbornAgeStr = "";
-            int newbornAge = 0;
-            if (StringUtil.isNotBlank(newbornAgeMonths) && StringUtil.isNotBlank(newbornAgeDays)){
-                newbornAgeStr = newbornAgeMonths + newbornAgeDays;
-            }
-            if (StringUtil.isNotBlank(newbornAgeStr)){
-                newbornAge = removalUnit(newbornAgeStr);
-            }
+//            String newbornAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
+//            String newbornAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
+//            String newbornAgeStr = "";
+//            int newbornAge = 0;
+//            if (StringUtil.isNotBlank(newbornAgeMonths) && StringUtil.isNotBlank(newbornAgeDays)){
+//                newbornAgeStr = newbornAgeMonths + newbornAgeDays;
+//            }
+//            if (StringUtil.isNotBlank(newbornAgeStr)){
+//                newbornAge = removalUnit(newbornAgeStr);
+//            }
             String admissionAge = beHospitalStructureMap.get(Content.age);
             if (StringUtil.isBlank(firstAdmissionAge) || StringUtil.isBlank(admissionAge)) {
                 status.set("0");
@@ -69,17 +67,17 @@ public class FIRP0161 extends QCCatalogue {
         }
     }
 
-    private int removalUnit(String admissionAge) {
-        int age = 0;
-        if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
-            admissionAge = admissionAge.replaceAll("[岁天]", "");
-        }
-        // 解决邵逸夫数据,年龄后跟着身份证号码
-        admissionAge = RegularUtil.ClearBracket(admissionAge);
-        admissionAge = admissionAge.replaceAll("[^0-9]","");
-        if (CatalogueUtil.numbersOnly(admissionAge)) {
-            age = Integer.parseInt(admissionAge);
-        }
-        return age;
-    }
+//    private int removalUnit(String admissionAge) {
+//        int age = 0;
+//        if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
+//            admissionAge = admissionAge.replaceAll("[岁天]", "");
+//        }
+//        // 解决邵逸夫数据,年龄后跟着身份证号码
+//        admissionAge = RegularUtil.ClearBracket(admissionAge);
+//        admissionAge = admissionAge.replaceAll("[^0-9]","");
+//        if (CatalogueUtil.numbersOnly(admissionAge)) {
+//            age = Integer.parseInt(admissionAge);
+//        }
+//        return age;
+//    }
 }

+ 68 - 57
trans/src/main/java/com/lantone/qc/trans/wenfuyi/BeHospitalizedDocTrans.java

@@ -1,20 +1,22 @@
 package com.lantone.qc.trans.wenfuyi;
 
-import com.google.common.collect.Lists;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections.MapUtils;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
 import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
 import com.lantone.qc.pub.model.vo.MedrecVo;
-import com.lantone.qc.pub.util.FastJsonUtils;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.ModelDocGenerate;
-import com.lantone.qc.trans.comsis.OrdinaryAssistant;
-import com.lantone.qc.trans.wenfuyi.util.BeHospitalizedHtmlAnalysis;
-import com.lantone.qc.trans.wenfuyi.util.WenFuYiHtmlAnalysis;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang3.StringUtils;
+import com.lantone.qc.trans.wenfuyi.util.WenFuYiHtmlAnalysisUtil;
 
-import java.util.List;
-import java.util.Map;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * @Description: 入院记录文档生成
@@ -27,55 +29,64 @@ public class BeHospitalizedDocTrans extends ModelDocTrans {
     @Override
     public BeHospitalizedDoc extract(MedrecVo medrecVo) {
         BeHospitalizedDoc beHospitalizedDoc = null;
-        try {
-            /*Map<String, Object> contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
-            String content = contentMap.get("htmlText").toString();*/
-            List<Map> map = (List<Map>) medrecVo.getContent().get("content");
-            StringBuffer sb = new StringBuffer();
-            Map<String, Object> contentMap = null;
-            if (map.size() > 1) {
-                for (Map<String, Object> a : map) {
-                    sb.append(a.get("htmlText"));
-                    if (a.get("recTitle").toString().contains("(一)") || a.get("recTitle").toString().contains("(一)")) {
-                        contentMap = a;
-                    }
-                }
-            } else {
-                contentMap = ((List<Map>) medrecVo.getContent().get("content")).get(0);
-            }
-            String content = sb.toString();
-            Map<String, String> structureMap = null;
-            if (map.get(0).get("isParsed") != null && "1".equals(map.get(0).get("isParsed").toString())) {
-                structureMap = (Map) FastJsonUtils.getJsonToMap(content);
-            } else {
-                String recTitle = contentMap.get("recTitle").toString();
-                String recTypeId = contentMap.get("recTypeId").toString();
-                WenFuYiHtmlAnalysis wenFuYiHtmlAnalysis = new BeHospitalizedHtmlAnalysis();
-                Map<String, String> sourceMap;
-                if (StringUtils.isNotBlank(content)) {
-                    sourceMap = wenFuYiHtmlAnalysis.analysis(content, recTitle, recTypeId);
-                } else{
-                    sourceMap = wenFuYiHtmlAnalysis.analysis(contentMap.get("htmlText").toString(), recTitle, recTypeId);
-                }
-                if (MapUtils.isNotEmpty(sourceMap)) {
-                    structureMap = OrdinaryAssistant.mapKeyContrast(sourceMap, keyContrasts);
-                    structureMap.put("记录编号", contentMap.get("recId").toString());
-                    structureMap.put("病历号", contentMap.get("behospitalCode") == null ? null : contentMap.get("behospitalCode").toString());
-                }
-            }
-            if (MapUtils.isNotEmpty(structureMap)) {
-                beHospitalizedDoc = ModelDocGenerate.beHospitalizedDocGen(structureMap);
-                beHospitalizedDoc.setPageData((Map) structureMap);
-            }
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
+        List<Map> map = (List<Map>) medrecVo.getContent().get("content");
+        
+        Map<String, String> result = new HashMap<>();
+        for (Map data : map) {
+        	Document doc = Jsoup.parse(""+data.get("htmlText"));
+        	String recTypeId = ""+data.get("recTypeId");
+        	
+        	result.put("记录编号", data.get("recId").toString());
+        	result.put("病历号", data.get("behospitalCode") == null ? null : data.get("behospitalCode").toString());
+        	
+        	if(recTypeId.equals("住院病例(-)")) {	//住院病例(-)
+        		Elements select = doc.select(".tymc");
+                for (Element element : select) {
+                	for (String key : new String[]{"姓名","邮编","性别","单位","年龄","身份证号","婚姻","户口地址","民族","联系电话","出生地","入院日期","职业","病史陈述者"}) {
+                		if(!result.containsKey(key) &&   element.text().replace(" ", "").contains(key)) {
+                			result.put(key, element.nextElementSibling().text());
+                		}
+        			}
+        		}
+                select = doc.select(".c001");
+                result.put("主诉", select.get(0).nextElementSibling().text());
+                result.put("现病史", select.get(1).nextElementSibling().text());
+        	}else if(recTypeId.equals("住院病例(二)")) {//住院病例(二)
+        		String html = doc.text();
+        		result.put("既往史", html.substring(4, html.indexOf("系统回顾")));
+        		result.put("系统回顾", html.substring(html.indexOf("系统回顾")+5, html.indexOf("个人史")));
+        		result.put("个人史", html.substring(html.indexOf("个人史")+4, html.indexOf("婚育史")));
+        		result.put("婚育史", html.substring(html.indexOf("婚育史")+4, html.indexOf("家族史")));
+        		result.put("家族史", html.substring(html.indexOf("家族史")+4, html.indexOf("专项评估")));
+        		result.put("家族史", html.substring(html.indexOf("专项评估")+5));
+        	}else if(recTypeId.equals("住院病例(三))")) {//住院病例(三)
+        		String html = doc.text();
+        		result.put("一般情况", html);
+        	}else if(recTypeId.equals("住院病例(五))")) {//住院病例(五)
+        		Elements select = doc.select("div");
+        		result.put("特殊检查", select.get(0).text());
+        		result.put("实验室检查", select.get(1).text());
+        		result.put("辅助检查", "特殊检查:" + result.get("特殊检查") + ";实验室检查:" + result.get("实验室检查"));
+        		
+        		result.put("初步诊断", select.get(2).text());
+        		
+        		result.put("初步诊断医师签名日期",doc.select("table td").first().select("span").last().text());
+        		result.put("上级医师签名", doc.select("table td").first().select("img").get(0).parent().html());
+        		result.put("初步诊断医师签名", doc.select("table td").first().select(".tyz").first().text());
+        		
+        		result.put("修正诊断",select.get(3).text());
+        		
+        		result.put("修正诊断医师签名日期",doc.select("table td").last().select("span").last().text());
+        		result.put("修正诊断医师签名", doc.select("table td").last().select("img").get(0).parent().html());
+        	}
+        	WenFuYiHtmlAnalysisUtil.insertModuleId("1", recTypeId, result);
+		}
+        
+        if (MapUtils.isNotEmpty(result)) {
+            beHospitalizedDoc = ModelDocGenerate.beHospitalizedDocGen(result);
+            beHospitalizedDoc.setPageData((Map) result);
         }
         return beHospitalizedDoc;
     }
 
-    private List<String> keyContrasts = Lists.newArrayList(
-
-
-    );
-
 }

+ 8 - 24
trans/src/main/java/com/lantone/qc/trans/wenfuyi/util/BeHospitalizedHtmlAnalysis.java

@@ -1,16 +1,17 @@
 package com.lantone.qc.trans.wenfuyi.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 java.util.List;
+import java.util.Map;
+
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 
-import java.util.List;
-import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
+
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * @Description:
@@ -128,22 +129,5 @@ public class BeHospitalizedHtmlAnalysis implements WenFuYiHtmlAnalysis {
         }
     }
 
-    private void disHandleExt(Map<String, String> map) {
-        String[] keys = {"中医诊断", "西医诊断"};
-        String value = null;
-        int index = 0;
-        for (String key : keys) {
-            value = map.get(key);
-            if (StringUtil.isNotBlank(value)) {
-                for (String key_ : keys) {
-                    index = value.indexOf(key_);
-                    if (index > 0) {
-                        map.put(key_, value.substring(index + 5));
-                        map.put(key, value.substring(0, index));
-                    }
-                }
-            }
-        }
-    }
 
 }

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 60 - 27
trans/src/main/java/com/lantone/qc/trans/wenfuyi/util/DeathRecordHtmlAnalysis.java