Pārlūkot izejas kodu

厦门五院代码同步

wangsy 3 gadi atpakaļ
vecāks
revīzija
f30a84518c

+ 18 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/xiamen/firstpagerecord/FIRP0181.java

@@ -5,6 +5,7 @@ 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.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -12,23 +13,34 @@ import java.util.Map;
 /**
  * @ClassName : FIRP0181
  * @Description :未填写
- *  * @Author : 损伤、中毒的外部原因未填写
+ * * @Author : 损伤、中毒的外部原因未填写
  * @Date: 2020-03-16 11:33
  */
 @Component
 public class FIRP0181 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if (inputInfo.getFirstPageRecordDoc() == null){
-            status.set("0");
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() == null) {
             return;
         }
+
+        if (inputInfo.getFirstCourseRecordDoc() != null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();
+        String EDStr = structureMap.get("病例特点");
+        if (StringUtil.isNotBlank(EDStr) && !EDStr.contains("损伤中毒")) {
+            return;
+        }
+
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String transferDept = firstpageStructureMap.get(Content.dp_out);
             String transferDept_changxing = firstpageStructureMap.get("损伤中毒因素");
-            if ((!CatalogueUtil.isEmpty(transferDept) && !"[]".equals(transferDept))
-                    || (!CatalogueUtil.isEmpty(transferDept_changxing) && !"[]".equals(transferDept_changxing))){
-                status.set("0");
+            if ((CatalogueUtil.isEmpty(transferDept) || "[]".equals(transferDept))
+                    || (CatalogueUtil.isEmpty(transferDept_changxing) || "[]".equals(transferDept_changxing))) {
+                status.set("-1");
+                return;
             }
         }
     }

+ 41 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/xiamen/operationdiscussion/OPE0369.java

@@ -7,6 +7,7 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
 import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
@@ -25,7 +26,6 @@ import java.util.Map;
  */
 @Component
 public class OPE0369 extends QCCatalogue {
-
     @Override
     protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
         status.set("0");
@@ -38,6 +38,28 @@ public class OPE0369 extends QCCatalogue {
                 return;
             }
         }
+
+        //主治医师
+        String attendingDoctor = "";
+        //住院医师
+        String hospitalizationDoctor = "";
+        //申请医生
+        String consultationDateStr = "";
+        //记录医生
+        String consultationDoctorSign = "";
+        //病案首页
+        if (inputInfo.getFirstPageRecordDoc() != null) {
+            Map<String, String> firstPagestructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            attendingDoctor = firstPagestructureMap.get("主治医师");
+            hospitalizationDoctor = firstPagestructureMap.get("住院医师");
+        }
+        //会诊记录
+        if (inputInfo.getConsultationDocs() != null && inputInfo.getConsultationDocs().size() > 0) {
+            ConsultationDoc consultationDoc = inputInfo.getConsultationDocs().get(0);
+            Map<String, String> ConsultationStructureMap = consultationDoc.getConsultationRecordDoc().getStructureMap();
+            consultationDateStr = ConsultationStructureMap.get("申请医生");
+            consultationDoctorSign = ConsultationStructureMap.get("记录医生");
+        }
         //先判断是否有手术记录
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
         if (operationDocs == null || operationDocs.size() == 0) {
@@ -55,6 +77,7 @@ public class OPE0369 extends QCCatalogue {
             }
             String operationStartDate = "";
             String operatorPhysician = "";
+            int num = 0;
             List<Date> operDateList = new ArrayList<>();
             for (OperationDoc operationDoc : operationDocs) {
                 if (operationDoc.getOperationRecordDoc() != null) {
@@ -80,8 +103,25 @@ public class OPE0369 extends QCCatalogue {
                         return;
                     }
                 }
+                //手术记录中的术者如果和病案首页中的主治医师/住院医师是同一个人,那么本次手术不需要判断术前查房和术后24查房两个条目
+                if (num == 0 && StringUtil.isNotBlank(attendingDoctor) && StringUtil.isNotBlank(operatorPhysician) && operatorPhysician.contains(attendingDoctor)) {
+                    return;
+                }
+                if (num == 0 && StringUtil.isNotBlank(hospitalizationDoctor) && StringUtil.isNotBlank(operatorPhysician) && operatorPhysician.contains(hospitalizationDoctor)) {
+                    return;
+                }
+
+                //手术记录中的术者如果和会诊记录中的医生是同一个人,那么本次手术不需要判断术前查房
+                if (num == 0 && StringUtil.isNotBlank(consultationDateStr) && StringUtil.isNotBlank(operatorPhysician) && operatorPhysician.contains(consultationDateStr)) {
+                    return;
+                }
+                if (num == 0 && StringUtil.isNotBlank(consultationDoctorSign) && StringUtil.isNotBlank(operatorPhysician) && operatorPhysician.contains(consultationDoctorSign)) {
+                    return;
+                }
+                num++;
             }
 
+
             if (operDateList.size() > 1) {
                 for (int i = 0; i < operDateList.size(); i++) {
                     if (i + 1 < operDateList.size()) {

+ 32 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/xiamen/threelevelward/THR0125.java

@@ -6,6 +6,7 @@ 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.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.operation.PreoperativeDiscussionDoc;
 import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.StringUtil;
@@ -54,6 +55,37 @@ public class THR0125 extends QCCatalogue {
             }
         }
 
+        //病案首页
+        if (inputInfo.getFirstPageRecordDoc() != null) {
+            Map<String, String> firstPagestructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String directorDoctor = firstPagestructureMap.get("主任医师");
+            if (StringUtil.isNotBlank(directorDoctor)) {
+                //首次病程录
+                if (inputInfo.getFirstCourseRecordDoc() != null) {
+                    Map<String, String> firstCourseRecordStructureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();
+                    String doctorSign = firstCourseRecordStructureMap.get("记录医生");
+                    if (StringUtil.isNotBlank(doctorSign) && doctorSign.contains(directorDoctor)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+
+                //术前小结
+                if (inputInfo.getOperationDocs() != null && inputInfo.getOperationDocs().size() > 0) {
+                    //取第一个术前小结
+                    PreoperativeDiscussionDoc preoperativeDiscussionDoc = inputInfo.getOperationDocs().get(0).getPreoperativeDiscussionDoc();
+                    if (preoperativeDiscussionDoc != null) {
+                        Map<String, String> preoperativeDiscussionStructureMap = preoperativeDiscussionDoc.getStructureMap();
+                        String doctorSign = preoperativeDiscussionStructureMap.get("记录医生");
+                        if (StringUtil.isNotBlank(doctorSign) && doctorSign.contains(directorDoctor)) {
+                            status.set("0");
+                            return;
+                        }
+                    }
+                }
+            }
+        }
+
         if (inputInfo.getBeHospitalizedDoc() != null) {
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
             String admisTime = beHospitalStructureMap.get("入院日期");

+ 17 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/xiamen/threelevelward/THR0126.java

@@ -10,6 +10,7 @@ import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
 import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
 import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
+import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.SpringContextUtil;
 import com.lantone.qc.pub.util.StringUtil;
@@ -21,7 +22,7 @@ import java.util.Map;
 
 /**
  * @ClassName : THR0126
- * @Description : 主治医师首次查房未在48小时内完成
+ * @Description : 主治以上职称医师首次查房未在患者入院48小时内完成
  * @Author : 胡敬
  * @Date: 2020-03-19 15:50
  */
@@ -95,6 +96,11 @@ public class THR0126 extends QCCatalogue {
             }
             ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
             List<AttendingDoctorWardDoc> attendingDoctorWardDocs = threeLevelWardDoc.getAttendingDoctorWardDocs();
+            List<DirectorDoctorWardDoc> directorDoctorWardDocs = threeLevelWardDoc.getDirectorDoctorWardDocs();
+            //没有主治医师,主任医师查房,若入院时间和系统当前时间对比,相差48小时则报错
+            if (attendingDoctorWardDocs.size() == 0 && directorDoctorWardDocs.size() == 0 && CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), new Date(), 48 * 60L)) {
+                return;
+            }
             if (attendingDoctorWardDocs.size() > 0) {
                 AttendingDoctorWardDoc firstAttending = attendingDoctorWardDocs.get(0);
                 String wardDateStr = firstAttending.getStructureMap().get("查房日期");
@@ -102,9 +108,15 @@ public class THR0126 extends QCCatalogue {
                     status.set("0");
                     return;
                 }
-            } else if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), new Date(), 48 * 60L)) {
-                status.set("0");//没有主治医师查房,若入院时间和系统当前时间对比,相差48小时则报错
-                return;
+            }
+
+            if (directorDoctorWardDocs.size() > 0) {
+                DirectorDoctorWardDoc directorDoctorWardDoc = directorDoctorWardDocs.get(0);
+                String wardDateStr = directorDoctorWardDoc.getStructureMap().get("查房日期");
+                if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), StringUtil.parseDateTime(wardDateStr), 48 * 60L)) {
+                    status.set("0");
+                    return;
+                }
             }
 
             /* 如果存在手术记录,判断主刀医生是否为主治医生 */
@@ -143,7 +155,7 @@ public class THR0126 extends QCCatalogue {
         }
     }
 
-//    /**
+    //    /**
 //     * 判断查房记录是否含有主治医师查房
 //     *
 //     * @param operatorName     主刀医师

+ 61 - 15
kernel/src/main/java/com/lantone/qc/kernel/catalogue/xiamen/threelevelward/THR02900.java

@@ -2,6 +2,7 @@ package com.lantone.qc.kernel.catalogue.xiamen.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.ThreeLevelWardDoc;
@@ -35,6 +36,8 @@ public class THR02900 extends QCCatalogue {
         if (inputInfo.getThreeLevelWardDocs() != null && inputInfo.getThreeLevelWardDocs().size() > 0) {
             allDoctorWradDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();
         }
+
+
         //标题
         String allTitle = "";
         //病情记录
@@ -44,6 +47,17 @@ public class THR02900 extends QCCatalogue {
         String firstAssistant = "";
         //手术结束时间
         String opeEndTime = "";
+        //主治医师
+        String attendingDoctor = "";
+        //住院医师
+        String hospitalizationDoctor = "";
+        int num = 0;
+        //病案首页
+        if (inputInfo.getFirstPageRecordDoc() != null) {
+            Map<String, String> firstPagestructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            attendingDoctor = firstPagestructureMap.get("主治医师");
+            hospitalizationDoctor = firstPagestructureMap.get("住院医师");
+        }
         for (OperationDoc operationDoc : operationDocs) {
             OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
             if (operationRecordDoc == null) {
@@ -58,20 +72,23 @@ public class THR02900 extends QCCatalogue {
             } else {
                 firstAssistant = structureMap.get("一助");
                 //取得手术时间截取结束时间(格式 2020-07-24 10:30-2020-07-24 11:45)
-                opeEndTime = structureMap.get("手术日期");
-                if (StringUtil.isBlank(opeEndTime)) {
-                    continue;
-                }
-                String endTime = structureMap.get("结束时间");
-                if (StringUtil.isNotBlank(endTime)) {
-                    if (endTime.length() > 5) {
-                        opeEndTime = opeEndTime.substring(0, Math.min(5, opeEndTime.length())) + endTime;
-                    } else {
-                        opeEndTime = opeEndTime + " " + endTime;
-                    }
-                }
+                String key = getKeyByHospitalId();
+                opeEndTime = structureMap.get(key);
+                opeEndTime = getTime(opeEndTime, structureMap);
             }
             String chiefSurgeon = structureMap.get("主刀医师");
+
+            //手术记录中的术者如果和病案首页中的主治医师/住院医师是同一个人,那么本次手术不需要判断术前查房和术后24查房两个条目
+            if (num == 0 && StringUtil.isNotBlank(attendingDoctor) && StringUtil.isNotBlank(chiefSurgeon) && chiefSurgeon.contains(attendingDoctor)) {
+                return;
+            }
+            if (num == 0 && StringUtil.isNotBlank(hospitalizationDoctor) && StringUtil.isNotBlank(chiefSurgeon) && chiefSurgeon.contains(hospitalizationDoctor)) {
+                return;
+            }
+            num++;
+            if (opeEndTime.contains("年月日")) {
+                continue;
+            }
             Date opeEndDate = CatalogueUtil.parseStringDate(opeEndTime);
             if (opeEndDate == null) {
                 continue;
@@ -108,12 +125,11 @@ public class THR02900 extends QCCatalogue {
                 }
             }
             //查房标题中有主刀
-            if (allTitle.contains("主刀") || allTitle.contains("术后第一天") ||
-                    (StringUtil.isNotBlank(chiefSurgeon) && allTitle.contains(chiefSurgeon))) {
+            if (allTitle.contains("主刀") || allTitle.contains("术后第一天") || allTitle.contains("术后第1天")) {
                 return;
             }
             //病情记录对比
-            if ((StringUtil.isNotBlank(chiefSurgeon) && allPathography.contains(chiefSurgeon)) ||
+            if ((StringUtil.isNotBlank(chiefSurgeon) && allPathography.contains(chiefSurgeon)) || allPathography.contains("术后第一天") || allPathography.contains("术后第1天") ||
                     (StringUtil.isNotBlank(firstAssistant) && allPathography.contains(firstAssistant))) {
                 return;
             }
@@ -131,4 +147,34 @@ public class THR02900 extends QCCatalogue {
             }
         }
     }
+
+    private String getTime(String opeEndTime, Map<String, String> structureMap) {
+        String time = "";
+        switch (Content.hospital_Id) {
+            case "7":               //厦门
+                if (StringUtil.isBlank(opeEndTime)) {
+                }
+                String endTime = structureMap.get("结束时间");
+                if (StringUtil.isNotBlank(endTime)) {
+                    if (endTime.length() > 5) {
+                        time = opeEndTime.substring(0, Math.min(5, opeEndTime.length())) + endTime;
+                    } else {
+                        time = opeEndTime + " " + endTime;
+                    }
+                }
+                return time;
+            default:
+                time = opeEndTime.substring(17);
+                return time;
+        }
+    }
+
+    private String getKeyByHospitalId() {
+        switch (Content.hospital_Id) {
+            case "7":               //厦门
+                return "病历日期";
+            default:
+                return "记录时间";
+        }
+    }
 }

+ 24 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/xiamen/threelevelward/THR03010.java

@@ -5,6 +5,8 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.FirstCourseRecordDoc;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.time.DateUtils;
@@ -25,22 +27,25 @@ import java.util.Map;
 public class THR03010 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
+        //住院病例信息为空,终止
         if (inputInfo.getMedicalRecordInfoDoc() == null || inputInfo.getMedicalRecordInfoDoc().getStructureMap().size() == 0) {
             return;
         }
         if (inputInfo.getFirstPageRecordDoc() == null || inputInfo.getFirstPageRecordDoc().getStructureMap().size() == 0) {
             return;
         }
-        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getBeHospitalizedDoc().getStructureMap().size() == 0) {
-            return;
-        }
+        //获取入院记录文档集合
         Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        //入院日期为空前面就是入院日期,入院日期不为空 前面就为空
         String behospitalDate = structureMap.get("入院日期") == null ? null : structureMap.get("入院日期");
         //String leaveHospitalDate = structureMap.get("leaveHospitalDate") == null ? null : structureMap.get("leaveHospitalDate");
+        //获取病案首页文档集合
         Map<String, String> structureMaps = inputInfo.getFirstPageRecordDoc().getStructureMap();
+        //离开医院时间为如果出院时间不为空,则离开医院时间为出院时间,如果出院时间为空,则离开医院时间为住院病例信息集合中的离开医院日期
         String leaveHospitalDate = structureMaps.get("出院时间") != null ?
                 structureMaps.get("出院时间") : inputInfo.getMedicalRecordInfoDoc().getStructureMap().get("leaveHospitalDate");
         if (behospitalDate != null && leaveHospitalDate != null) {
+            //解析时间
             Date beDate = StringUtil.parseDateTime(behospitalDate);
             Date leaveDate = StringUtil.parseDateTime(leaveHospitalDate);
             long l = (leaveDate.getTime() - beDate.getTime()) / (24 * 60 * 60 * 1000);
@@ -51,6 +56,7 @@ public class THR03010 extends QCCatalogue {
                 //从住院开始连续的时间列表
                 List<Date> stringDate = new ArrayList<>();
                 //当天算进去所以从零开始
+                //获取从当天开始的后三天日期时 分 秒
                 for (int i = 0; i < 4; i++) {
                     stringDate.add(DateUtil.getFirstTimeOfDay(DateUtil.addDay(beDate, i)));
                 }
@@ -76,6 +82,21 @@ public class THR03010 extends QCCatalogue {
                         wordDateList.add(threeLevelDate);
                     }
                 }
+
+                //获取手术首次病程录时间
+                List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+                if (operationDocs != null) {
+                    for (OperationDoc t : operationDocs) {
+                        OperationDiscussionDoc operationDiscussionDoc = t.getOperationDiscussionDoc();
+                        if (operationDiscussionDoc != null) {
+                            Date firstOperationtime = StringUtil.parseDateTime(operationDiscussionDoc.getStructureMap().get("病历日期"));
+                            if (firstOperationtime != null) {
+                                wordDateList.add(firstOperationtime);
+                            }
+                        }
+                    }
+                }
+
                 //如果记录时间没有3天
                 if (wordDateList.size() < 3) {
                     status.set("-1");