Przeglądaj źródła

妇幼解析和质控规则修改

songxl 4 lat temu
rodzic
commit
9330c66bef

+ 1 - 1
kernel/pom.xml

@@ -169,7 +169,7 @@
                 </includes>
             </resource>
         </resources>
-        <finalName>qc-beilun-web</finalName>
+        <finalName>qc-web</finalName>
     </build>
 
 </project>

+ 1 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/ninghaifuyao/preoperativediscussion/PRE0328.java

@@ -45,6 +45,7 @@ public class PRE0328 extends QCCatalogue {
             if (operationRecordDoc != null) {
                 startTime = operationRecordDoc.getStructureMap().get("手术日期");
             }
+
             if (StringUtil.isNotBlank(startTime) && StringUtil.isNotBlank(admisTime) &&
                     !startTime.contains("年月日")) {
                 if (!CatalogueUtil.compareTime(

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/ninghaifuyao/threelevelward/THR0125.java

@@ -96,7 +96,8 @@ public class THR0125 extends QCCatalogue {
                 for (ThreeLevelWardDoc threeLevelWard : allDoctorWradDocs) {
                     Map<String, String> structureMap = threeLevelWard.getStructureMap();
                     String makeTitle = structureMap.get("查房标题");
-                    if(StringUtil.isNotBlank(makeTitle)&&makeTitle.contains("三级"))
+                    if(StringUtil.isNotBlank(makeTitle)&&makeTitle.contains("三级")||
+                            StringUtil.isNotBlank(makeTitle)&&makeTitle.contains("主任"))
                     {
                         String recordDateStr = structureMap.get("查房日期");
                         if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime),

+ 23 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/ninghaifuyao/threelevelward/THR0126.java

@@ -13,6 +13,7 @@ import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.SpringContextUtil;
 import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
@@ -92,6 +93,19 @@ public class THR0126 extends QCCatalogue {
                         }
                     }
                 }
+                //妇幼首次病程录写法类似查房
+                if(StringUtil.isNotBlank(firstCourseRecordDoc.getText()))
+                {
+                    String text = firstCourseRecordDoc.getText();
+                    String data = CommonAnalysisUtil.NHExtractDate(text);
+                    if (StringUtil.isNotBlank(data)) {
+                        if (!CatalogueUtil.compareTime
+                                (StringUtil.parseDateTime(admisTime), StringUtil.parseDateTime(data), 48 * 60L)) {
+                            status.set("0");
+                            return;
+                        }
+                    }
+                }
             }
             ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
             List<AttendingDoctorWardDoc> attendingDoctorWardDocs = threeLevelWardDoc.getAttendingDoctorWardDocs();
@@ -114,14 +128,17 @@ public class THR0126 extends QCCatalogue {
                 for (ThreeLevelWardDoc threeLevelWard : allDoctorWradDocs) {
                     Map<String, String> structureMap = threeLevelWard.getStructureMap();
                     String makeTitle = structureMap.get("查房标题");
-                    if(StringUtil.isNotBlank(makeTitle)&&makeTitle.contains("三级"))
+                    if(StringUtil.isNotBlank(makeTitle))
                     {
-                        String recordDateStr = structureMap.get("查房日期");
-                        if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime),
-                                StringUtil.parseDateTime(recordDateStr), 48 * 60L)) {
-                            status.set("0");
+                        if(makeTitle.contains("主任")&&makeTitle.contains("三级"))
+                        {
+                            String recordDateStr = structureMap.get("查房日期");
+                            if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime),
+                                    StringUtil.parseDateTime(recordDateStr), 48 * 60L)) {
+                                status.set("0");
+                            }
+                            return;
                         }
-                        return;
                     }
                 }
 

+ 1 - 1
kernel/src/main/resources/logback-spring.xml

@@ -9,7 +9,7 @@
 
     <contextName>logback</contextName>
     <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
-    <property name="log.path" value="/opt/qc-beilun/logs" />
+    <property name="log.path" value="/opt/qc/logs" />
 
     <!-- 彩色日志 -->
     <!-- 彩色日志依赖的渲染类 -->

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

@@ -253,10 +253,13 @@ public class Content {
     public static final String timestamp = "timestamp";
 
     public static String[] dateFormats = {
+            "yyyy年MM月dd日",
             "yyyy年MM月dd日HH时mm分",
             "yyyy年MM月dd日HH:mm",
             "yyyy年MM月dd日H时mm分",
             "yyyy年MM月dd日HH时m分",
+            "yyyy年MM月dd日HH:mm",
+            "yyyy年MM月dd日 HH:mm",
             "yyyy年MM月dd日H时m分",
             "yyyy年M月dd日HH时mm分",
             "yyyy年M月dd日H时mm分",
@@ -310,6 +313,11 @@ public class Content {
             "yyyy/M/dH:m",
             "yyyy/MM/dd",
             "yyyy.MM.dd",
+            "yyyy.MM.dd HH:mm:ss",
+            "yyyy.MM.ddHH:mm",
+            "yyyy.MM.ddHH:mm",
+            "yyyy.MM.dd HH:mm",
+            "yyyy.MM.dd HH:mm",
             "yyyy-MM-ddHH:mm:ss.000",
             "yyyyMMddHH:mm",
             "yyyy-MM-dd'T'HH:mm:ss",

+ 6 - 0
trans/src/main/java/com/lantone/qc/trans/comsis/CommonAnalysisUtil.java

@@ -318,6 +318,12 @@ public class CommonAnalysisUtil {
                     return m2.group(0);
                 }
             }
+            Pattern pattern3 = Pattern.compile("[0-9]{4}年[0-9]+月[0-9]+日 [0-9]+:[0-9]+|[0-9]{4}年[0-9]+月[0-9]+日[0-9]+:[0-9]+");
+            Matcher matcher3 = pattern3.matcher(top);
+            if (matcher3.find()) {
+                return matcher3.group(0);
+            }
+
         }
         return null;
     }

+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoFirstCourseRecordDocTrans.java

@@ -77,6 +77,7 @@ public class NingHaiFuYaoFirstCourseRecordDocTrans extends ModelDocTrans {
             "病历特点=病例特点",
             "入院查体=查体",
             "辅助检查=辅检",
+            "医师签名=医生签名",
             "2.诊断依据=诊断依据",
             "3.鉴别诊断=鉴别诊断",
             "1.初步诊断=初步诊断"

+ 3 - 0
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/NingHaiFuYaoOperationDocTrans.java

@@ -132,6 +132,9 @@ public class NingHaiFuYaoOperationDocTrans extends ModelDocTrans {
 
     private List<String> operationDiscussion_keyContrasts = Lists.newArrayList(
             "病历标题=标题",
+            "手术前诊断=术前诊断",
+            "手术中诊断=术中诊断",
+            "手术后诊断=术后诊断",
             "病情记录=病程内容"
     );
 

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoBeHospitalizedHtmlAnalysis.java

@@ -51,7 +51,7 @@ public class NingHaiFuYaoBeHospitalizedHtmlAnalysis implements NingHaiFuYaoHtmlA
     private void analysisBeHospitalized(Document doc, Map<String, String> map) {
         List<String> titles = Lists.newArrayList("姓 名","姓名","身份证号码","性别", "性 别","生于","父母姓名","联系电话","住址", "住 址","年 龄","年龄","电话号码",
                 "出生地", "出 生 地", "职 业", "职业", "入院时间","户籍所在地","户口地址", "入院日期","记录时间","记录日期","民 族", "民族", "病史陈述者","职 业", "联系人及关系",
-                "婚 姻", "婚姻", "联系人电话", "主诉", "主 诉", "现 病 史","现病史", "既 往 史", "既往史", "出生史","个 人 史", "个人史", "婚 育 史",
+                "婚 姻", "婚姻", "联系人电话","联 系 人", "主诉", "主 诉", "现 病 史","现病史", "既 往 史", "既往史", "出生史","个 人 史", "个人史", "婚 育 史",
                 "月 经 史", "月经婚育史", "家 族 史","一般测量","实验室检查", "特殊检查","临床诊断","记录医生", "初步诊断", "补充诊断","医师签名","日 期");
         String htmlContent = NingHaiFuYaoHtmlAnalysisUtil.blockDivToStr(doc.selectFirst("body").child(0).getElementById("main"), true);
         if (StringUtil.isNotBlank(htmlContent)) {

+ 80 - 6
trans/src/main/java/com/lantone/qc/trans/ninghaifuyao/util/NingHaiFuYaoOperationRecordHtmlAnalysis.java

@@ -2,6 +2,7 @@ package com.lantone.qc.trans.ninghaifuyao.util;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -10,6 +11,8 @@ import org.jsoup.nodes.Element;
 
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @Description:
@@ -85,14 +88,17 @@ public class NingHaiFuYaoOperationRecordHtmlAnalysis implements NingHaiFuYaoHtml
                     endTime = endTime.split("手术名称")[0].trim();
                 }
                 map.put("手术结束时间", endTime);
-                map.put("手术日期","开始:"+map.get("手术开始时间")+"  结束:"+map.get("手术结束时间"));
+                map.put("手术日期",map.get("手术开始时间"));
 
             }
 
             if(map.containsKey("手术开始时间") && map.containsKey("手术结束时间")){
-                map.put("手术日期","开始:"+map.get("手术开始时间")+"  结束:"+map.get("手术结束时间"));
+                map.put("手术日期",map.get("手术开始时间"));
             }
 
+            //这些科室的手术时间写了好几种格式分别处理
+//           List<String> departmentList =  Lists.newArrayList("妇科","十六病区VIP");
+           getOperaTime(map,null);
             CommonAnalysisUtil.makeEmpty(map, "医生签名");
             NingHaiFuYaoHtmlAnalysisUtil.insertModuleId(modeId, recTypeId, map);
         } catch (Exception e) {
@@ -101,6 +107,75 @@ public class NingHaiFuYaoOperationRecordHtmlAnalysis implements NingHaiFuYaoHtml
         return map;
     }
 
+    private void getOperaTime(Map<String, String> map,List<String> departmentList) {
+//        if(map.containsKey("病区")&&departmentList.contains(map.get("病区")))
+        if(map.containsKey("病区"))
+        {
+            //手术日期: 2021-01-06 手术时间: 上午
+            if(map.containsKey("手术日期")&&map.containsKey("手术时间"))
+            {
+                if(map.get("手术时间").contains(":")|map.get("手术时间").contains(": ")
+                                            |map.get("手术时间").contains(": "))
+                {
+                    map.put("手术时间",map.get("手术时间").replaceAll(":",":")
+                                                        .replaceAll(": ",":")
+                                                        .replaceAll(": ",":"));
+                }
+                Pattern p = Pattern.compile("[0-9]+:[0-9][0-9]|[0-9][0-9]+:[0-9][0-9]");
+                Matcher m = p.matcher(map.get("手术时间"));
+
+                String pattern = "(上午|下午|晚上|凌晨|中午|晚)";
+                if(StringUtil.isNotBlank(map.get("手术时间"))&& Pattern.matches(pattern, map.get("手术时间"))){
+                    map.put("手术时间",map.get("手术日期"));
+                }
+                //如果手术时间为时刻没有具体某天例:(手术日期: 2021年01月05日 手术时间: 12:10)
+                else if(m.find())
+                {
+                    map.put("手术时间",map.get("手术日期")+m.group(0));
+                }
+            }
+            //手术时间:2021-01-05 10:12-10:40 或 开始时间-结束时间 排除没有日期的手术时间10:12-10:40
+            String operationStartDateStr = map.get("手术时间");
+            if(StringUtil.isNotBlank(operationStartDateStr)&&operationStartDateStr.contains("-")&&
+                    operationStartDateStr.length()>11)
+            {
+                //手术时间 -> 2021.01.1210:55--12:15
+                if(operationStartDateStr.contains("--"))
+                {
+                    operationStartDateStr = operationStartDateStr.substring(0,operationStartDateStr.lastIndexOf("--")).trim();
+                }
+                else
+                {
+                    operationStartDateStr = operationStartDateStr.substring(0,operationStartDateStr.lastIndexOf("-")).trim();
+                }
+                if(StringUtil.parseDateTime(operationStartDateStr, Content.dateFormats)!=null)
+                {
+                    map.put("手术时间",operationStartDateStr);
+                }
+            }
+            //手术日期 -> 2021年01月15日15时25分- 2021年01月15日16时05分 无手术时间
+            if(map.containsKey("手术日期"))
+            {
+                Pattern p = Pattern.compile("[0-9]{4}年[0-9]+月[0-9]+日[0-9]+时[0-9]+分");
+                Matcher m = p.matcher(map.get("手术日期"));
+                if (m.find()) {
+                    map.put("手术日期",m.group(0));
+                }
+            }
+            //手术时间:2021-01-06 上午
+            if(map.containsKey("手术时间"))
+            {
+                map.put("手术时间",map.get("手术时间")
+                        .replaceAll("上午","")
+                        .replaceAll("下午","")
+                        .replaceAll("中午","")
+                        .replaceAll("晚上","")
+                        .replaceAll("晚","")
+                        .replaceAll("凌晨","").trim());
+            }
+        }
+    }
+
     private void analysisGeneral(Element bigDivElement, Map<String, String> map) {
         /*if (bigDivElement.selectFirst("hr") != null) {
             bigDivElement.selectFirst("hr").previousElementSiblings().remove();
@@ -109,12 +184,12 @@ public class NingHaiFuYaoOperationRecordHtmlAnalysis implements NingHaiFuYaoHtml
         text = text.replaceAll("第1页", "");
         List<String> titles = Lists.newArrayList(
                 "姓名", "性别", "出生日期", "出生年月", "科别", "科室", "病区", "床号", "床位", "住院号","手术开始时间","手术结束时间",
-                "手术时间", "手术日期", "术前诊断", "手术指征", "手术人员", "外邀指导专家","麻醉方式", "麻醉人员", "麻 醉 者", "洗手护士", "本次手术是否属于非计划再次手术", "接生者",
+                "手术时间", "手术日期", "术前诊断",  "手术中诊断", "手术后诊断","手术指征", "手术人员", "外邀指导专家","麻醉方式", "麻醉人员", "麻 醉 者", "洗手护士", "本次手术是否属于非计划再次手术", "接生者",
                 "术前胎心", "手术名称", "术后诊断", "手术者及助手名称", "术中取病理标本", "麻醉方法", "手术经过(包括病人体位、切口处理、病灶所见及手术步骤等)",
-                "诊断手术/操作简要经过(包括术中有无并发症及具体描述和处理)", "手术经过","医师签名","麻 醉","手术中诊断","手术前诊断",
+                "诊断手术/操作简要经过(包括术中有无并发症及具体描述和处理)", "手术经过","医师签名","麻 醉","术前诊断",
                 "医生签名", "记录时间", "时间", "手术/操作医生", "记录者", "术中输血", "术前宫颈准备日期", "药物名称及用法", "导管或其他", "插入深度",
                 "阴道填塞纱布条", "准备者", "取出日期", "手术方法", "术中特殊情况", "病理检查", "其他", "记录者", "手术者",
-                "检查子宫位置","开始","结束"
+                "检查子宫位置","开始","结束","LMP"
         );
         titles = CommonAnalysisUtil.sortTitles(titles, text);
         CommonAnalysisUtil.cutByTitlesNoColon(text, titles, 0, map);
@@ -136,5 +211,4 @@ public class NingHaiFuYaoOperationRecordHtmlAnalysis implements NingHaiFuYaoHtml
         CommonAnalysisUtil.cutByTitlesNoColon(text, titles, 0, map);
 
     }
-
 }