瀏覽代碼

宁海第一人民医院:手术记录问题处理

wangsy 4 年之前
父節點
當前提交
10e6fba499

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/ninghaiyiyi/firstcourserecord/FIRC0095.java

@@ -41,7 +41,7 @@ public class FIRC0095 extends QCCatalogue {
     private List<String> filterList = Arrays.asList("心脏病", "低血糖", "急性", ";");
 
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if (inputInfo.getFirstCourseRecordDoc() == null) {
+        if (inputInfo.getFirstCourseRecordDoc() == null || inputInfo.getBeHospitalizedDoc() == null) {
             status.set("0");
             return;
         }

+ 12 - 27
kernel/src/main/java/com/lantone/qc/kernel/catalogue/ninghaiyiyi/operationdiscussion/OPE02930.java

@@ -38,16 +38,17 @@ public class OPE02930 extends QCCatalogue {
                 continue;
             }
             Map<String, String> operationRecordStructureMap = operationRecordDoc.getStructureMap();
-            String operationStartDateStr = operationRecordStructureMap.get("手术日期");
-            String operationEndDateStr = operationRecordStructureMap.get("手术日期");
-            if (StringUtil.isEmpty(operationStartDateStr) || StringUtil.isEmpty(operationEndDateStr)) {
+            String operationDateStr = operationRecordStructureMap.get("手术日期");
+            if (StringUtil.isBlank(operationDateStr)) {
                 continue;
             }
-            if (!isDate(operationStartDateStr) || !isDate(operationEndDateStr)) {
+            if (operationDateStr.contains("结束")) {
+                operationDateStr = operationDateStr.substring(0, operationDateStr.indexOf("结束")).replace("开始:", "");
+            }
+            Date operationDate = StringUtil.parseDateTime(operationDateStr);
+            if(operationDate == null){
                 continue;
             }
-            Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
-            Date operationEndDate = StringUtil.parseDateTime(operationEndDateStr);
             for (OperationDoc o : operationDocs) {
                 OperationDiscussionDoc operationDiscussionDoc = o.getOperationDiscussionDoc();
                 if (operationDiscussionDoc == null) {
@@ -59,14 +60,12 @@ public class OPE02930 extends QCCatalogue {
                     status.set("0");
                     return;
                 }
-
-                if (!isDate(discussionRecordDateStr)) {
-                    status.set("0");
-                    return;
-                }
                 Date discussionRecordDate = StringUtil.parseDateTime(discussionRecordDateStr);
-                if (operationEndDate.before(discussionRecordDate) || DateUtils.isSameDay(operationEndDate, discussionRecordDate)) {
-                    if (CatalogueUtil.compareTime(operationEndDate, discussionRecordDate, 2 * 60L)) {
+                if(discussionRecordDate == null){
+                    continue;
+                }
+                if (operationDate.before(discussionRecordDate) || DateUtils.isSameDay(operationDate, discussionRecordDate)) {
+                    if (CatalogueUtil.compareTime(operationDate, discussionRecordDate, 2 * 60L)) {
                         status.set("-1");
                         return;
                     }
@@ -74,18 +73,4 @@ public class OPE02930 extends QCCatalogue {
             }
         }
     }
-
-    /**
-     * 判断是否为日期
-     *
-     * @param dateStr
-     */
-    private boolean isDate(String dateStr) {
-        try {
-            StringUtil.parseDateTime(dateStr);
-            return true;
-        } catch (Exception e) {
-            return false;
-        }
-    }
 }

+ 19 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/ninghaiyiyi/operationdiscussion/OPE0369.java

@@ -69,10 +69,17 @@ public class OPE0369 extends QCCatalogue {
                 if (operationDoc.getOperationRecordDoc() != null) {
                     Map<String, String> operationDocStructureMap = operationDoc.getOperationRecordDoc().getStructureMap();
                     operationStartDate = operationDocStructureMap.get("手术日期");
-                    if (operationStartDate.contains("年月日")) {
-                        continue;
-                    }
                     if (StringUtil.isNotBlank(operationStartDate)) {
+                        if (operationStartDate.contains("年月日")) {
+                            continue;
+                        }
+                        if (operationStartDate.contains("结束")) {
+                            operationStartDate = operationStartDate.substring(0, operationStartDate.indexOf("结束")).replace("开始:", "");
+                        }
+                        //取不到时间不判断规则
+                        if (StringUtil.parseDateTime(operationStartDate) == null) {
+                            continue;
+                        }
                         if (!CatalogueUtil.compareTime(
                                 StringUtil.parseDateTime(admisTime),
                                 StringUtil.parseDateTime(operationStartDate),
@@ -145,20 +152,26 @@ public class OPE0369 extends QCCatalogue {
             Map<String, String> structureMap = operationRecordDoc.getStructureMap();
             String operationStartDateStr = structureMap.get("手术日期");
             if (StringUtil.isNotBlank(operationStartDateStr) && !operationStartDateStr.contains("年月日")) {
+                if (operationStartDateStr.contains("结束")) {
+                    operationStartDateStr = operationStartDateStr.substring(0, operationStartDateStr.indexOf("结束")).replace("开始:", "");
+                }
                 Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
+                if(operationStartDate == null){
+                    continue;
+                }
                 operationStartDate = DateUtil.dateZeroClear(operationStartDate);
                 if (operationStartDate != null) {
                     /* 放第一个手术记录的日期到operationDateList */
                     if (operationDateList.size() == 0) {
                         operationDate = new HashMap<>();
-                        operationDate.put("手术日期", operationStartDate);
+                        operationDate.put("手术开始日期", operationStartDate);
                         operationDateList.add(operationDate);
                         continue;
                     }
                     /* 如果其中一个手术记录的开始时间到结束时间之间还包含另一个手术,就不往operationDateList里加 */
                     boolean findInnerOperation = false;
                     for (Map<String, Date> date : operationDateList) {
-                        Date listStartDate = DateUtil.dateZeroClear(date.get("手术日期"));
+                        Date listStartDate = DateUtil.dateZeroClear(date.get("手术开始日期"));
                         if (listStartDate.equals(operationStartDate)) {
                             findInnerOperation = true;
                             break;
@@ -166,7 +179,7 @@ public class OPE0369 extends QCCatalogue {
                     }
                     if (!findInnerOperation) {
                         operationDate = new HashMap<>();
-                        operationDate.put("手术日期", operationStartDate);
+                        operationDate.put("手术开始日期", operationStartDate);
                         operationDateList.add(operationDate);
                     }
                 }

+ 6 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/ninghaiyiyi/preoperativediscussion/PRE0328.java

@@ -106,7 +106,13 @@ public class PRE0328 extends QCCatalogue {
             Map<String, String> structureMap = operationRecordDoc.getStructureMap();
             String operationStartDateStr = structureMap.get("手术日期");
             if (StringUtil.isNotBlank(operationStartDateStr) && !operationStartDateStr.contains("年月日")) {
+                if (operationStartDateStr.contains("结束")) {
+                    operationStartDateStr = operationStartDateStr.substring(0, operationStartDateStr.indexOf("结束")).replace("开始:", "");
+                }
                 Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
+                if (operationStartDate == null) {
+                    continue;
+                }
                 operationStartDate = DateUtil.dateZeroClear(operationStartDate);
                 if (operationStartDate != null) {
                     /* 放第一个手术记录的日期到operationDateList */

+ 4 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/ninghaiyiyi/threelevelward/THR03090.java

@@ -48,8 +48,11 @@ public class THR03090 extends QCCatalogue {
                 if (operationStartDate.contains("年月日")) {
                     operationStartDate = DateUtil.nowString();
                 }
+                //取不到时间不判断规则
+                if (StringUtil.parseDateTime(operationStartDate) == null) {
+                    return;
+                }
             }
-
         }
 
         List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();

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

@@ -216,7 +216,7 @@ public class NingHaiYiYiOperationDocTrans extends ModelDocTrans {
             "手术经过=手术经过及处理",
             "手术经过(包括病人体位、切口处理、病灶所见及手术步骤等)=手术经过及处理",
             "术后诊断=术中后诊断",
-            "手术人员=主刀医师",
+            "主刀=主刀医师",
             "医师签名=记录医生",
             "患者手术后情况=患者术后情况",
             "麻醉人员=麻醉医师",

+ 19 - 16
trans/src/main/java/com/lantone/qc/trans/ninghaiyiyi/util/NingHaiYiYiOperationRecordHtmlAnalysis.java

@@ -44,6 +44,11 @@ public class NingHaiYiYiOperationRecordHtmlAnalysis implements NingHaiYiYiHtmlAn
             }
             if (map.containsKey("主刀")) {
                 map.put("主刀", map.get("主刀").replaceAll("[^\u4E00-\u9FA5]", ""));
+            } else {
+                if (StringUtil.isNotBlank(operatingCrew) && operatingCrew.contains("、")) {
+                    map.put("主刀", operatingCrew.split("、")[0]);
+                    map.put("一助", operatingCrew.split("、")[1]);
+                }
             }
             if (map.containsKey("麻醉者")) {
                 String anesthetist = map.get("麻醉者").replace("麻醉医生:", "");
@@ -63,25 +68,23 @@ public class NingHaiYiYiOperationRecordHtmlAnalysis implements NingHaiYiYiHtmlAn
                 }
             }
             //宁海产科手术记录处理
-            if(map.containsKey("开始")&&map.containsKey("结束")
-                    &&!map.containsKey("手术开始时间")&&!map.containsKey("手术结束时间")
-                    &&!map.containsKey("手术日期"))
-            {
+            if (map.containsKey("开始") && map.containsKey("结束")
+                    && !map.containsKey("手术开始时间") && !map.containsKey("手术结束时间")
+                    && !map.containsKey("手术日期")) {
                 map.put("手术开始时间", map.get("开始"));
                 String endTime = map.get("结束");
-                if(endTime.contains("手术名称"))
-                {
+                if (endTime.contains("手术名称")) {
                     CommonAnalysisUtil.html2StructureMapNoColon
-                            (Lists.newArrayList("手术名称","术前诊断","手术指征","术后诊断"),endTime,map);
+                            (Lists.newArrayList("手术名称", "术前诊断", "手术指征", "术后诊断"), endTime, map);
                     endTime = endTime.split("手术名称")[0].trim();
                 }
                 map.put("手术结束时间", endTime);
-                map.put("手术日期","开始:"+map.get("手术开始时间")+"  结束:"+map.get("手术结束时间"));
+                map.put("手术日期", "开始:" + map.get("手术开始时间") + "  结束:" + map.get("手术结束时间"));
 
             }
 
-            if(map.containsKey("手术开始时间") && map.containsKey("手术结束时间")){
-                map.put("手术日期","开始:"+map.get("手术开始时间")+"  结束:"+map.get("手术结束时间"));
+            if (map.containsKey("手术开始时间") && map.containsKey("手术结束时间")) {
+                map.put("手术日期", "开始:" + map.get("手术开始时间") + "  结束:" + map.get("手术结束时间"));
             }
 
             CommonAnalysisUtil.makeEmpty(map, "医生签名");
@@ -99,13 +102,13 @@ public class NingHaiYiYiOperationRecordHtmlAnalysis implements NingHaiYiYiHtmlAn
         String text = NingHaiYiYiHtmlAnalysisUtil.blockDivToStr(bigDivElement, true);
         text = text.replaceAll("第1页", "");
         List<String> titles = Lists.newArrayList(
-                "姓名", "性别", "出生日期", "出生年月", "科别", "科室", "病区", "床号", "床位", "住院号","手术开始时间","手术结束时间",
-                "手术时间", "手术日期", "术前诊断", "手术指征", "手术人员", "外邀指导专家","麻醉方式", "麻醉人员", "麻 醉 者", "洗手护士", "本次手术是否属于非计划再次手术", "接生者",
+                "姓名", "性别", "出生日期", "出生年月", "科别", "科室", "病区", "床号", "床位", "住院号", "手术开始时间", "手术结束时间",
+                "手术时间", "手术日期", "术前诊断", "手术指征", "手术人员", "外邀指导专家", "麻醉方式", "麻醉人员", "麻 醉 者", "洗手护士", "本次手术是否属于非计划再次手术", "接生者",
                 "术前胎心", "手术名称", "术后诊断", "手术者及助手名称", "术中取病理标本", "麻醉方法", "手术经过(包括病人体位、切口处理、病灶所见及手术步骤等)",
-                "诊断手术/操作简要经过(包括术中有无并发症及具体描述和处理)", "手术经过","医师签名",
-                "医生签名", "记录时间", "时间", "手术/操作医生", "记录者", "术中输血", "术前宫颈准备日期", "药物名称及用法", "导管或其他", "插入深度",
-                "阴道填塞纱布条", "准备者", "取出日期", "手术方法", "术中特殊情况", "病理检查", "其他", "记录者", "手术者",
-                "检查子宫位置","开始","结束"
+                "诊断手术/操作简要经过(包括术中有无并发症及具体描述和处理)", "手术经过", "医师签名",
+                "医生签名", "手术/操作医生", "记录者", "记录时间", "术中输血", "术前宫颈准备日期", "药物名称及用法", "导管或其他", "插入深度",
+                "阴道填塞纱布条", "准备者", "取出日期", "手术方法", "术中特殊情况", "病理检查", "其他", "手术者",
+                "检查子宫位置", "开始", "结束"
         );
         titles = CommonAnalysisUtil.sortTitles(titles, text);
         CommonAnalysisUtil.cutByTitlesNoColon(text, titles, 0, map);