jianghaodi 2 năm trước cách đây
mục cha
commit
7093d86401

+ 5 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02903.java

@@ -62,10 +62,12 @@ public class BEH02903 extends QCCatalogue {
         Pattern pattern2 = Pattern.compile("[0-9]{4}[/][0-9]{1,2}[/][0-9]{1,2}");
         Pattern pattern3 = Pattern.compile("[0-9]{4}[0-9]{1,2}[0-9]{1,2}");
         Pattern pattern4 = Pattern.compile("[0-9]{4}[年][0-9]{1,2}[月][0-9]{1,2}");
+        Pattern pattern5 = Pattern.compile("[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}");
         patterns.add(pattern1);
         patterns.add(pattern2);
         patterns.add(pattern3);
         patterns.add(pattern4);
+        patterns.add(pattern5);
         for (Pattern pattern : patterns) {
             Matcher matcher = pattern.matcher(pacsText);
             if (matcher.find()) {
@@ -79,17 +81,18 @@ public class BEH02903 extends QCCatalogue {
     }
 
     public static void main(String[] args) {
-        String pacsText = "20220819";
+        String pacsText = "2022.08.19";
         ArrayList<Pattern> patterns = new ArrayList<>();
         Pattern pattern1 = Pattern.compile("[0-9]{4}[-][0-9]{1,2}[-][0-9]{1,2}");
         Pattern pattern2 = Pattern.compile("[0-9]{4}[/][0-9]{1,2}[/][0-9]{1,2}");
         Pattern pattern3 = Pattern.compile("[0-9]{4}[0-9]{1,2}[0-9]{1,2}");
         Pattern pattern4 = Pattern.compile("[0-9]{4}[年][0-9]{1,2}[月][0-9]{1,2}");
-        //Pattern pattern5 = Pattern.compile("[0-9]{4}年[0-9]+月[0-9]+日");
+        Pattern pattern5 = Pattern.compile("[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}");
         patterns.add(pattern1);
         patterns.add(pattern2);
         patterns.add(pattern3);
         patterns.add(pattern4);
+        patterns.add(pattern5);
       //  patterns.add(pattern5);
         for (Pattern pattern : patterns) {
             Matcher matcher = pattern.matcher(pacsText);

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/changshaxy/threelevelward/THR03117.java

@@ -45,7 +45,7 @@ public class THR03117 extends QCCatalogue {
                     if (StringUtil.isNotEmpty(daStatus)) {
                         if (!Content.cancellationOrderList.contains(daStatus)) {
                             String adviceType = dadStructureMap.get(Content.doctorAdviceType);
-                            //临时医嘱
+                            //临时医嘱
                             if (StringUtil.isNotEmpty(adviceType) && adviceType.equals("临时")) {
                                 String name = dadStructureMap.get(Content.medicalOrderName);
                                 if (exStr(name)) {

+ 39 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/hangzhoufubao/firstpagerecord/FIRP0516.java

@@ -0,0 +1,39 @@
+package com.lantone.qc.kernel.catalogue.hospital.hangzhoufubao.firstpagerecord;
+
+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.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0516
+ * @Description : 身份证号码与入院记录不一致
+ * @Author : 贺聪聪
+ * @Date: 2022-09-29 11:28
+ */
+@Component
+public class FIRP0516 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        if(beHospitalizedDoc != null && firstPageRecordDoc != null){
+            Map<String, String> structureMap_bh = beHospitalizedDoc.getStructureMap();
+            Map<String, String> structureMap_fpr = firstPageRecordDoc.getStructureMap();
+            String bhIdNumber = structureMap_bh.get("身份证号码");
+            String fprIdNumber = structureMap_fpr.get(Content.idNumber);
+            if (StringUtil.isBlank(bhIdNumber) || StringUtil.isBlank(fprIdNumber)){
+                return;
+            }
+            if (!bhIdNumber.equals(fprIdNumber)){
+                status.set("-1");
+            }
+        }
+    }
+}

+ 64 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/hangzhoufubao/threelevelward/THR0123.java

@@ -0,0 +1,64 @@
+package com.lantone.qc.kernel.catalogue.hospital.hangzhoufubao.threelevelward;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+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.MedicalRecordInfoDoc;
+import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : THR0123
+ * @Description : 入院记录未在患者入院24小时内完成
+ * @Author : 贺聪聪
+ * @Date: 2020-09-30 13:51
+ */
+@Component
+public class THR0123 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        String admisTime = "";
+        MedicalRecordInfoDoc medicalRecordInfoDoc = inputInfo.getMedicalRecordInfoDoc();
+        if (medicalRecordInfoDoc != null && medicalRecordInfoDoc.getStructureMap() != null) {
+            //入院日期
+            admisTime = medicalRecordInfoDoc.getStructureMap().get("behospitalDate");
+            if (StringUtil.isNotBlank(admisTime) && inputInfo.getBeHospitalizedDoc() == null) {
+                if (!CatalogueUtil.compareTime(
+                        StringUtil.parseDateTime(admisTime),
+                        StringUtil.parseDateTime(DateUtil.nowString()),
+                        Long.valueOf(24 * 60))) {//如果入院还未过24小时规则不判断
+                    return;
+                }
+                status.set("-1");
+                return;
+            }
+        }
+        if (inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getStructureMap() != null) {
+            Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+            admisTime = beHospitalStructureMap.get(Content.behospitalDate);
+            String recordTime = beHospitalStructureMap.get(Content.recordDate);
+            if (CatalogueUtil.isEmpty(admisTime) || CatalogueUtil.isEmpty(recordTime)) {
+                return;
+            }
+            if (!CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(admisTime),
+                    StringUtil.parseDateTime(DateUtil.nowString()),
+                    Long.valueOf(24 * 60))) {//如果入院还未过24小时规则不判断
+                return;
+            }
+
+            if (CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(admisTime),
+                    StringUtil.parseDateTime(recordTime),
+                    Long.valueOf(24 * 60))) {
+                status.set("-1");
+            }
+        }
+    }
+
+}

+ 1 - 1
kernel/src/main/resources/bootstrap.yml

@@ -21,7 +21,7 @@ spring:
     active: test
 
 qc:
-  hospital_id: 1,2,3,4,5,6,7,8,10,11,13,15,20,21,22,23,24,34,35,36
+  hospital_id: 1,2,3,4,5,6,7,8,10,11,13,15,20,21,22,23,24,34,35,36,37
 
 logging:          # 日志
   config: classpath:logback-spring.xml

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

@@ -148,6 +148,7 @@ public class Content {
     public static final String native_place = "籍贯";
     public static final String nation = "民族";
     public static final String idNumber = "身份证号";
+    public static final String documentType = "证件类别";
     public static final String job = "职业";
     public static final String marry = "婚姻";
     public static final String current_address = "现住址";
@@ -278,6 +279,8 @@ public class Content {
     public static final String round_doctor = "查房医师";
 
     public static final String admisDate = "入院日期"; //入院记录用
+    public static final String behospitalDate = "入院时间";
+    public static final String recordDate = "记录时间";
     public static final String stayLength = "住院天数";//出院小结用
 
     public static final String timestamp = "timestamp";

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

@@ -298,6 +298,36 @@ public class CommonAnalysisUtil {
         return null;
     }
 
+
+    /*杭州妇幼抽取时间*/
+    /**
+     * 抽取文本中的第一个时间
+     *
+     * @param top
+     * @return
+     */
+    public static String extractDateHangzhou(String top) {
+        Pattern pattern = Pattern.compile("[0-9]{4}[-][0-9]{1,2}[-][0-9]{1,2}");
+        Matcher matcher = pattern.matcher(top);
+        if (matcher.find()) {
+
+
+            return matcher.group(0);
+        }
+        return null;
+    }
+
+    public static void main(String[] args) {
+        String a = "2022-07-0812:12";
+        String s = extractDateHangzhou(a);
+        String replace = a.replace(s, "");
+        System.out.println(s + " " + replace);
+
+
+
+        System.out.println(s);
+    }
+
     /**
      * 宁波中医院抽取文本中的第一个时间
      *

+ 37 - 2
trans/src/main/java/com/lantone/qc/trans/hangzhoufubao/util/BeHospitalizedHtmlAnalysis.java

@@ -3,6 +3,8 @@ package com.lantone.qc.trans.hangzhoufubao.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 com.lantone.qc.trans.yuhangsy.util.comsis.YuhangsyCommonAnalysisUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -49,8 +51,8 @@ public class BeHospitalizedHtmlAnalysis implements HtmlAnalysis {
     //一般模板
     private void analysisGeneral(Document doc, String recTitle, Map<String, String> map) {
 
-        List<String> titles = Lists.newArrayList("姓名", "性别", "年龄","出生日期","父母姓名", "出生地", "职业", "民族", "宗教信仰", "婚 姻","入院时间","籍贯","入院于","生于","电话","供史者",
-                "联系地址", "联系电话", "入院日期", "记录日期", "身份证号码", "病史陈述者", "病史可靠程度", "产前检查", "丈夫姓名",
+        List<String> titles = Lists.newArrayList("姓名", "性别", "年龄","出生日期","父母姓名", "出生地", "职业", "民族", "宗教信仰", "婚姻","入院时间","籍贯","入院于","生于", "联系电话","电话","供史者",
+                "联系地址", "入院日期", "记录日期", "身份证号码", "病史陈述者", "病史可靠程度", "产前检查", "丈夫姓名",
                 "主诉", "现病史", "既往史", "个人史", "月经史", "婚姻史", "生育史", "家族史", "体格检查","一般状况","一般体格检查一般情况","一般体格检查一般状况","体格检查一般情况","辅助检查", "妇科检查","产科检查","实验室检查", "特殊检查",
                 "初步诊断", "康复需求","营养需求","医生签名", "医师签名", "签名时间", "记录时间", "补充诊断", "修正诊断","其他");
         //个人基础信息table解析
@@ -81,9 +83,42 @@ public class BeHospitalizedHtmlAnalysis implements HtmlAnalysis {
                 map.put(str, "时间:" + replace);
             }
         }
+        String admissionDate = map.get("入院日期");
 
+        if (StringUtil.isNotBlank(admissionDate)) {
+            String s = CommonAnalysisUtil.extractDateHangzhou(admissionDate);
+            if (StringUtil.isNotBlank(s)) {
+                String replace = admissionDate.replace(s, "");
+                map.put("入院日期", s + " " + replace);
+            }
+        }
+        String recordDate = map.get("记录日期");
 
+        if (StringUtil.isNotBlank(recordDate)) {
+            String extractRecordDate = CommonAnalysisUtil.extractDateHangzhou(recordDate);
+            if (StringUtil.isNotBlank(extractRecordDate)) {
+                String replace = recordDate.replace(extractRecordDate, "");
+                map.put("记录日期", extractRecordDate + " " + replace);
+            }
+        }
 
+        String writeTime = map.get("记录时间");
+
+        if (StringUtil.isNotBlank(writeTime)) {
+            String extractWriteTime = CommonAnalysisUtil.extractDateHangzhou(writeTime);
+            if (StringUtil.isNotBlank(extractWriteTime)) {
+                String replace = writeTime.replace(extractWriteTime, "");
+                map.put("记录时间", extractWriteTime + " " + replace);
+            }
+        }
+        String admissionTime = map.get("入院时间");
+        if (StringUtil.isNotBlank(admissionTime)) {
+            String extractAdmissionTime = CommonAnalysisUtil.extractDateHangzhou(admissionTime);
+            if (StringUtil.isNotBlank(extractAdmissionTime)) {
+                String replace = admissionTime.replace(extractAdmissionTime, "");
+                map.put("入院时间", extractAdmissionTime + " " + replace);
+            }
+        }
 
     }
 

+ 4 - 3
trans/src/main/java/com/lantone/qc/trans/hangzhoufubao/util/HangzhoufubaoTranUtils.java

@@ -129,9 +129,10 @@ public class HangzhoufubaoTranUtils {
                 //  structureMap.put("记录医师", content.substring(index + str.length() + 1, content.length()));
             }
             //同时记录别的内容
-
-            titles = CommonAnalysisUtil.sortTitlesNoColon(titles, content);
-            CommonAnalysisUtil.cutByTitlesNoColon(content, titles, 0, structureMap);
+            if (titles != null) {
+                titles = CommonAnalysisUtil.sortTitlesNoColon(titles, content);
+                CommonAnalysisUtil.cutByTitlesNoColon(content, titles, 0, structureMap);
+            }
         }
     }
 }

+ 16 - 3
trans/src/main/java/com/lantone/qc/trans/hangzhoufubao/util/OperationHtmlAnalysis.java

@@ -3,7 +3,9 @@ package com.lantone.qc.trans.hangzhoufubao.util;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.lantone.qc.trans.comsis.CommonAnalysisUtil;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.MapUtils;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Element;
 
@@ -33,9 +35,14 @@ public class OperationHtmlAnalysis implements HtmlAnalysis {
             htmlText = HtmlAnalysisUtil.blockDivToStr(bigDivElement, true);
           /*  analysisGeneral(recTitle, bigDivElement, map);
             CommonAnalysisUtil.makeEmpty(map, "医生签名");*/
-
-            HangzhoufubaoTranUtils.getStructureMapSplitCommonCutByList(structureMap,htmlText,recTitle,null);
-
+            List<String> titles = Lists.newArrayList("时间", "手术日期", "医生签名");
+            HangzhoufubaoTranUtils.getStructureMapSplitCommonCutByList(structureMap,htmlText,recTitle,titles);
+            if (MapUtils.isNotEmpty(structureMap)) {
+                structureMap = OrdinaryAssistant.mapKeyContrast(structureMap, keyContrasts);
+            }
+            if (structureMap.containsKey("病情记录")){
+                structureMap.put("病情记录","手术日期"+structureMap.get("病情记录"));
+            }
             //  structureMap.put("记录医生")
             HtmlAnalysisUtil.insertModuleId(modeId, recTypeId, structureMap);
 
@@ -45,6 +52,12 @@ public class OperationHtmlAnalysis implements HtmlAnalysis {
         return structureMap;
     }
 
+    private List<String> keyContrasts = Lists.newArrayList(
+            "时间=病历时间",
+            "手术日期=病情记录",
+            "医生签名=记录医师"
+    );
+
     private void getStructureMap(Map<String, String> structureMap, String htmlText, String recTitle) {
         extractedDate(structureMap, htmlText);
         String[] split = htmlText.split("\n");