Procházet zdrojové kódy

厦门:修改规则更新

wangsy před 2 roky
rodič
revize
c4408bf8b1
19 změnil soubory, kde provedl 520 přidání a 144 odebrání
  1. 3 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0032.java
  2. 2 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0035.java
  3. 1 15
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathrecord/DEAR0342.java
  4. 1 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0117.java
  5. 1 14
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0119.java
  6. 1 13
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0120.java
  7. 6 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0163.java
  8. 1 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0181.java
  9. 31 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/firstpagerecord/FIRP0214.java
  10. 39 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/leavehospital/LEA0150.java
  11. 37 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/leavehospital/LEA0396.java
  12. 4 4
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/threelevelward/THR0126.java
  13. 59 42
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/threelevelward/THR0128.java
  14. 119 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/threelevelward/THR0144.java
  15. 7 33
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/threelevelward/THR03010.java
  16. 12 0
      trans/src/main/java/com/lantone/qc/trans/comsis/ModelDocGenerate.java
  17. 16 0
      trans/src/main/java/com/lantone/qc/trans/xiamen/XiamenDocTrans.java
  18. 61 0
      trans/src/main/java/com/lantone/qc/trans/xiamen/XiamenInvasiveOperationDocTrans.java
  19. 119 20
      trans/src/main/java/com/lantone/qc/trans/xiamen/XiamenThreeLevelWardDocTrans.java

+ 3 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0032.java

@@ -57,6 +57,9 @@ public class BEH0032 extends QCCatalogue {
                         continue;
                     }
                 }
+                if(wtDiagName.contains("新冠病毒疫苗接种3针")){
+                    continue;
+                }
                 wtDiagList.add(wtDiagName);
             }
         }

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0035.java

@@ -44,7 +44,8 @@ public class BEH0035 extends QCCatalogue {
                         .map(i -> i.getAllergyMedicine().getName()).distinct().collect(Collectors.toList()),
                 pastLabel.getText()
         );
-        if(wtAmNames.contains("止痛片") || wtAmNames.contains("胶布") || wtAmNames.contains("菌菇类")){
+        if(wtAmNames.contains("止痛片") || wtAmNames.contains("胶布") || wtAmNames.contains("菌菇类")
+                || wtAmNames.contains("未接种新冠疫苗") || wtAmNames.contains("接种新冠疫苗3针")){
             return;
         }
         String pastText = pastLabel.getText();

+ 1 - 15
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathrecord/DEAR0342.java

@@ -21,23 +21,9 @@ public class DEAR0342 extends QCCatalogue {
         status.set("0");
         if (inputInfo.getDeathRecordDoc() != null && inputInfo.getDeathRecordDoc().getStructureMap() != null) {
             Map<String, String> deathRecordStructureMap = inputInfo.getDeathRecordDoc().getStructureMap();
-            String key = getKeyByHospitalId();
-            if (CatalogueUtil.isEmpty(deathRecordStructureMap.get(key))) {
+            if (CatalogueUtil.isEmpty(deathRecordStructureMap.get("诊疗经过"))) {
                 status.set("-1");
             }
         }
     }
-
-    private String getKeyByHospitalId() {
-        switch (Content.hospital_Id) {
-            case "1":               //长兴
-            case "2":
-            case "5":
-            case "35":
-            case "11":
-                return "诊疗经过";
-            default:
-                return "诊疗经过(重点记录病情演变、抢救经过)";
-        }
-    }
 }

+ 1 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0117.java

@@ -43,6 +43,7 @@ public class DIF0117 extends QCCatalogue {
         {
             case "1":               //长兴
             case "5":
+            case "7":               //厦门
                 return "讨论日期";
             default:
                 return "讨论时间";

+ 1 - 14
kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0119.java

@@ -26,11 +26,10 @@ public class DIF0119 extends QCCatalogue {
         if (ListUtil.isEmpty(difficultCaseDiscussDocs)) {
             return;
         }
-        String key = getKeyByHospitalId();
         if (difficultCaseDiscussDocs != null && difficultCaseDiscussDocs.size() > 0) {
             for (DifficultCaseDiscussDoc dcdd : difficultCaseDiscussDocs) {
                 Map<String, String> dcddStructureMap = dcdd.getStructureMap();
-                String diisDate = dcddStructureMap.get(key);
+                String diisDate = dcddStructureMap.get("参加人员的姓名及专业技术职务");//厦门
                 if (CatalogueUtil.isEmpty(diisDate)) {
                     status.set("-1");
                     break;
@@ -38,16 +37,4 @@ public class DIF0119 extends QCCatalogue {
             }
         }
     }
-
-    private String getKeyByHospitalId() {
-        switch (Content.hospital_Id) {
-            case "5":
-            case "11":
-                return "参加人员的姓名及专业技术职务";
-            case "20":
-                return "参加人员的姓名及专业技术职务";
-            default:
-                return "参加人员";
-        }
-    }
 }

+ 1 - 13
kernel/src/main/java/com/lantone/qc/kernel/catalogue/difficultcasediscuss/DIF0120.java

@@ -29,8 +29,7 @@ public class DIF0120 extends QCCatalogue {
         if (difficultCaseDiscussDocs != null && difficultCaseDiscussDocs.size() > 0) {
             for (DifficultCaseDiscussDoc dcdd : difficultCaseDiscussDocs) {
                 Map<String, String> dcddStructureMap = dcdd.getStructureMap();
-                String key = getKeyByHospitalId();
-                String diisDate = dcddStructureMap.get(key);
+                String diisDate = dcddStructureMap.get("讨论发言");//厦门
                 if (CatalogueUtil.isEmpty(diisDate)) {
                     status.set("-1");
                     break;
@@ -38,15 +37,4 @@ public class DIF0120 extends QCCatalogue {
             }
         }
     }
-
-    private String getKeyByHospitalId() {
-        switch (Content.hospital_Id)
-        {
-            case "1":               //长兴
-            case "2":
-                return "讨论内容";
-            default:
-                return "具体讨论意见";
-        }
-    }
 }

+ 6 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0163.java

@@ -25,11 +25,16 @@ public class FIRP0163 extends QCCatalogue {
         }
         if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            String nationality = firstpageStructureMap.get(Content.nationality);
+            String nationality = firstpageStructureMap.get(Content.nationality);//国籍
             if (StringUtil.isNotBlank(nationality) && !"中国".equals(nationality)) {
                 status.set("0");
                 return;
             }
+            String age = firstpageStructureMap.get(Content.age);//年龄
+            if (StringUtil.isBlank(age) || age.contains("天") || age.contains("月")) {
+                status.set("0");
+                return;
+            }
             String idNumber = firstpageStructureMap.get(Content.idNumber);
             if (!CatalogueUtil.isEmpty(idNumber)) {
                 status.set("0");

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0181.java

@@ -25,7 +25,7 @@ public class FIRP0181 extends QCCatalogue {
             return;
         }
 
-        if (inputInfo.getFirstCourseRecordDoc() != null) {
+        if (inputInfo.getFirstCourseRecordDoc() == null) {
             return;
         }
         Map<String, String> structureMap = inputInfo.getFirstCourseRecordDoc().getStructureMap();

+ 31 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/firstpagerecord/FIRP0214.java

@@ -0,0 +1,31 @@
+package com.lantone.qc.kernel.catalogue.hospital.xiamen.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.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0214
+ * @Description : 单位地址邮编未填写
+ * @Author : 楼辉荣
+ * @Date: 2020-03-06 17:28ss
+ */
+@Component
+public class FIRP0214 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String dischargeTime = firstpageStructureMap.get(Content.work_unit_zipcode);
+            if (StringUtil.isBlank(dischargeTime) || "—".equals(dischargeTime)) {
+                status.set("-1");
+            }
+
+        }
+    }
+}

+ 39 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/leavehospital/LEA0150.java

@@ -0,0 +1,39 @@
+package com.lantone.qc.kernel.catalogue.hospital.xiamen.leavehospital;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.DeathRecordDoc;
+import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 出院记录内容缺入院情况
+ * @author: rengb
+ * @time: 2020/3/10 13:53
+ */
+@Component
+public class LEA0150 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        if (leaveHospitalDoc == null) {
+            status.set("0");
+            return;
+        }
+        DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
+        if (deathRecordDoc != null) {
+            status.set("0");
+        } else {
+            //已医学部任燕青确认, 只要出院小结里的入院情况有值即不报错
+            String message = leaveHospitalDoc.getStructureMap().get("病史摘要");
+            if (StringUtil.isNotBlank(message)) {
+                status.set("0");
+            }
+        }
+
+    }
+
+}

+ 37 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/leavehospital/LEA0396.java

@@ -0,0 +1,37 @@
+package com.lantone.qc.kernel.catalogue.hospital.xiamen.leavehospital;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.DeathRecordDoc;
+import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: 出院记录内容缺出院时间
+ * @author: rengb
+ * @time: 2020/3/10 13:53
+ */
+@Component
+public class LEA0396 extends QCCatalogue {
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        if (leaveHospitalDoc == null) {
+            status.set("0");
+            return;
+        }
+        DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
+        if (deathRecordDoc != null) {
+            status.set("0");
+        } else {
+            String time = leaveHospitalDoc.getStructureMap().get("出院日期");
+            if (StringUtil.isNotBlank(time)) {
+                status.set("0");
+            }
+        }
+
+    }
+}

+ 4 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/threelevelward/THR0126.java

@@ -82,9 +82,9 @@ public class THR0126 extends QCCatalogue {
             /* 首次病程录如果是主治或者主任写的,也算主治查房 */
             FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
             if (firstCourseRecordDoc != null) {
-                String doctorSign = firstCourseRecordDoc.getStructureMap().get("记录医生");
-                String firstCourseProfessor = getFirstCourseProfessor(doctorSign);
-                if (StringUtil.isNotBlank(firstCourseProfessor) && firstCourseProfessor.contains("主治")) {
+//                String doctorSign = firstCourseRecordDoc.getStructureMap().get("记录医生");
+//                String firstCourseProfessor = getFirstCourseProfessor(doctorSign);
+//                if (StringUtil.isNotBlank(firstCourseProfessor) && firstCourseProfessor.contains("主治")) {
                     String recordDateStr = firstCourseRecordDoc.getStructureMap().get("病历日期");
                     if (StringUtil.isNotBlank(recordDateStr)) {
                         if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), StringUtil.parseDateTime(recordDateStr), 48 * 60L)) {
@@ -92,7 +92,7 @@ public class THR0126 extends QCCatalogue {
                             return;
                         }
                     }
-                }
+//                }
             }
             ThreeLevelWardDoc threeLevelWardDoc = inputInfo.getThreeLevelWardDocs().get(0);
             List<AttendingDoctorWardDoc> attendingDoctorWardDocs = threeLevelWardDoc.getAttendingDoctorWardDocs();

+ 59 - 42
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/threelevelward/THR0128.java

@@ -104,6 +104,50 @@ public class THR0128 extends QCCatalogue {
                 }
                 String lastWardDateRange = "";
                 List<String> lastWardDateRangeList = new ArrayList<>();
+                //科主任
+                boolean department = false;
+                //主任
+                boolean director = false;
+                //副主任
+                boolean deputyDirector = false;
+                //主治
+                boolean attend = false;
+                for (ThreeLevelWardDoc t : allDoctorWradDocs) {
+                    Map<String, String> structureMap = t.getStructureMap();
+                    String title = structureMap.get("查房标题");
+                    if (title.contains("科主任")) {
+                        department = true;
+                    }
+                    if (title.contains("主任") && !title.contains("科主任") && !title.contains("副主任")) {
+                        director = true;
+                    }
+                    if (title.contains("副主任")) {
+                        deputyDirector = true;
+                    }
+                    if (title.contains("主治")) {
+                        attend = true;
+                    }
+                }
+                if (!attend) {
+                    //存在科主任并且存在副主任或主任
+                    if (department && (director || deputyDirector)) {
+                        for (ThreeLevelWardDoc t : allDoctorWradDocs) {
+                            Map<String, String> structureMap = t.getStructureMap();
+                            String title = structureMap.get("查房标题");
+                            if (!title.contains("科主任")) {
+                                structureMap.put("查房标题", title.replace("副主任", "主治").replace("主任", "主治"));
+                            }
+                        }
+                    }
+                    //不存在科主任并且存在副主任或主任
+                    if (director && deputyDirector) {
+                        for (ThreeLevelWardDoc t : allDoctorWradDocs) {
+                            Map<String, String> structureMap = t.getStructureMap();
+                            String title = structureMap.get("查房标题");
+                            structureMap.put("查房标题", title.replace("副主任", "主治"));
+                        }
+                    }
+                }
                 //每周的病历记录
                 while (i >= 1) {
                     roundRecordThisWeek = extractWardRecord(inputInfo, allDoctorWradDocs, beginDate, hoursPerWeek, lastRecordDate);
@@ -132,19 +176,14 @@ public class THR0128 extends QCCatalogue {
                 List<String> resultInfos = new ArrayList<>();
                 for (int j = 0; j < roundRecordEveryWeek.size(); j++) {
                     int indicationsNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), Content.attend);
-                    //三级医师查房算一次主治查房
-                    String key = getKeyByHospitalId();
-                    int threeDoctorNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), key);
-                    //北仑内分泌科(主任携主任代主治)
+                    //多学科联合,三级医师查房算一次主治查房
+                    int threeDoctorNum = CatalogueUtil.appearNumber(roundRecordEveryWeek.get(j).split(","), "多学科联合");
+                    //厦门(科主任+主任)
                     int endocrinologyTitleNum = endocrinologyTitleNum(roundRecordEveryWeek.get(j).split(","));
                     if (j == 0 && firstRecordAttendExist) { //如果首程中医师签名为主治医师,第一周查房记录也要加上
                         indicationsNum += 1;
                     }
-                    int num = 3;
-                    if ("7".equals(Content.hospital_Id)) {
-                        num = 2;
-                    }
-                    if (indicationsNum + threeDoctorNum + endocrinologyTitleNum < num) {
+                    if (indicationsNum + threeDoctorNum + endocrinologyTitleNum < 2) {
                         //每周无3次主治医师查房记录
                         status.set("-1");
                         resultInfos.add(lastWardDateRangeList.get(j));
@@ -158,43 +197,21 @@ public class THR0128 extends QCCatalogue {
         }
     }
 
-    private String getKeyByHospitalId() {
-        switch (Content.hospital_Id) {
-            case "7":               //厦门
-                return "多学科联合";
-            default:
-                return "三级";
-        }
-    }
-
     /**
-     * 北仑内分泌科主任主治处理
+     * 厦门特殊需求
      *
      * @param srcText
      * @return
      */
     private int endocrinologyTitleNum(String[] srcText) {
         int count = 0;
-        switch (Content.hospital_Id) {
-            case "4":                            //北仑特殊需求
-                for (String title : srcText) {
-                    String regex = ".*主任.*主任.*主治.*";
-                    if (title.matches(regex)) {
-                        count++;
-                    }
-                }
-                return count;
-            case "7":                            //厦门特殊需求
-                for (String title : srcText) {
-                    String regex = ".*科主任.*主任.*";
-                    if (title.matches(regex)) {
-                        count++;
-                    }
-                }
-                return count;
-            default:
-                return count;
+        for (String title : srcText) {
+            String regex = ".*主任.*主任.*";
+            if (title.matches(regex)) {
+                count++;
+            }
         }
+        return count;
     }
 
     private Date getLastRecordDate(List<ThreeLevelWardDoc> allDoctorWradDocs) {
@@ -233,14 +250,14 @@ public class THR0128 extends QCCatalogue {
             }
             /* 替换查房标题中主刀/一助的职称 */
             List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
-            if (title.contains("主刀") || title.contains("术后第")) {
+            if (title.contains("主刀")) {
                 String doctorTitle = CatalogueUtil.getDoctorTitle(operationDocs, recordDate, "主刀医师");
-                title = title.replace("主刀", doctorTitle).replace("术后第", doctorTitle);
+                title = title.replace("主刀", doctorTitle);
             } else if (title.contains("一助")) {
                 String doctorTitle = CatalogueUtil.getDoctorTitle(operationDocs, recordDate, "一助");
                 title = title.replace("一助", doctorTitle);
             }
-            if (admisDate.before(recordDate) && !CatalogueUtil.compareTime(admisDate, DateUtil.dateZeroClear(recordDate), (long) duration)) {
+            if (admisDate.before(recordDate) && !CatalogueUtil.compareTime(admisDate, recordDate, (long) duration)) {
                 recordTitle += title + ",";
                 dateList.add(recordDate);
             }
@@ -260,7 +277,7 @@ public class THR0128 extends QCCatalogue {
             return false;
         }
         Map<String, Map<String, Object>> hospitalDoctorMap = specialStorageUtil.getJsonStringValue(KernelConstants.HOSPITAL_DOCTOR_MAP);
-        String doctorSign = firstCourseRecordDoc.getStructureMap().get("医师签名");
+        String doctorSign = firstCourseRecordDoc.getStructureMap().get("记录医生");
         if (hospitalDoctorMap == null || StringUtil.isBlank(doctorSign)) {
             return false;
         }

+ 119 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/threelevelward/THR0144.java

@@ -0,0 +1,119 @@
+package com.lantone.qc.kernel.catalogue.hospital.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.*;
+import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : THR0144
+ * @Description : 患者出院前无上级医师(主治及以上)同意出院的病程记录
+ * @Author : 胡敬
+ * @Date: 2020-03-19 17:20
+ */
+@Component
+public class THR0144 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        String admisTime = "";
+        String dischargeTime = "";
+        MedicalRecordInfoDoc medicalRecordInfoDoc = inputInfo.getMedicalRecordInfoDoc();
+        if (medicalRecordInfoDoc != null && medicalRecordInfoDoc.getStructureMap() != null) {
+            //入院日期
+            admisTime = medicalRecordInfoDoc.getStructureMap().get("behospitalDate");
+            //出院日期
+            dischargeTime = medicalRecordInfoDoc.getStructureMap().get("leaveHospitalDate");
+            if (CatalogueUtil.isEmpty(admisTime) || CatalogueUtil.isEmpty(dischargeTime)) {
+                status.set("0");
+                return;
+            }
+            if (!CatalogueUtil.compareTime(
+                    StringUtil.parseDateTime(admisTime),
+                    StringUtil.parseDateTime(DateUtil.nowString()),
+                    Long.valueOf(48 * 60))) {//如果入院未超过48小时,规则不判断
+                status.set("0");
+                return;
+            }
+            //如果住院天数小于2天则不判断该条规则
+            if (DateUtil.parseDate(dischargeTime) != null &&
+                    !CatalogueUtil.compareTime(StringUtil.parseDateTime(admisTime), StringUtil.parseDateTime(dischargeTime), (long) (48 * 60))) {
+                status.set("0");
+                return;
+            } else {
+                if (inputInfo.getThreeLevelWardDocs().size() == 0) {
+                    return;
+                }
+            }
+        }
+
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
+        DeathCaseDiscussDoc deathCaseDiscussDoc = inputInfo.getDeathCaseDiscussDoc();
+        /* 如果没有出院小结,就不报         如果有死亡记录、死亡讨论记录,也不报 */
+        if (leaveHospitalDoc == null || deathRecordDoc != null || deathCaseDiscussDoc != null) {
+            status.set("0");
+            return;
+        }
+        List<ThreeLevelWardDoc> allDoctorWradDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();
+        if (allDoctorWradDocs.size() == 0) {
+            status.set("0");
+            return;
+        }
+        int j = 0; //最后三次查房记录
+        Boolean lastFlag = true;
+        for (int i = allDoctorWradDocs.size() - 1; i >= 0 && j < 3; i--) {
+            j++;
+            ThreeLevelWardDoc lastWardDoc = allDoctorWradDocs.get(i);
+            Map<String, String> structureMap = lastWardDoc.getStructureMap();
+            String conditionRecord = structureMap.get("病情记录");
+            String treatmentPlan = structureMap.get("治疗计划和措施");
+            String title = structureMap.get("查房标题");
+            if (StringUtil.isBlank(title) || title.contains("病理报告")) {
+                continue;
+            }
+            conditionRecord = StringUtil.isBlank(conditionRecord) ? "" : conditionRecord;
+            conditionRecord = conditionRecord.replace(" ", "");
+            treatmentPlan = StringUtil.isBlank(treatmentPlan) ? "" : treatmentPlan;
+            //主任或主治查房 标题需要包含“主任”或“主治”,内容需要包含“出院”
+            if ((conditionRecord.contains("出院") || treatmentPlan.contains("出院") || conditionRecord.contains("转上级医院"))
+                    && (CatalogueUtil.subTitle(title).contains(Content.attend)
+                    || CatalogueUtil.subTitle(title).contains(Content.director)
+                    || CatalogueUtil.subTitle(title).contains("主刀"))) {
+                status.set("0");
+                return;
+            }
+            //普通查房 内容需要包含“上级”和“出院”
+            if (StringUtil.isBlank(title)
+                    || (title.contains("日常查房记录") || title.contains("普通查房记录") || title.contains("日常病程记录"))
+                    && (title.contains("上级") || conditionRecord.contains("上级"))
+                    && (conditionRecord.contains("出院") || treatmentPlan.contains("出院"))) {
+                status.set("0");
+                return;
+            }
+            // 添加硬规则,最后一个记录包含“医院”或 “离院”就不报错
+            if (lastFlag == true) {
+                String DateStr = structureMap.get("查房日期");
+                if (StringUtil.isNotBlank(dischargeTime) && StringUtil.isNotBlank(DateStr) &&
+                        StringUtil.parseDateTime(dischargeTime) != null && StringUtil.parseDateTime(DateStr) != null) {
+                    int days = (int) ((StringUtil.parseDateTime(dischargeTime).getTime() - StringUtil.parseDateTime(DateStr).getTime()) / (1000 * 3600 * 24));
+                    if (days > 1) {
+                        status.set("0");
+                        return;
+                    }
+                }
+                if (conditionRecord.contains("医院") || conditionRecord.contains("离院") || conditionRecord.contains("出院")) {
+                    status.set("0");
+                    return;
+                }
+                lastFlag = false;
+            }
+        }
+    }
+}

+ 7 - 33
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/xiamen/threelevelward/THR03010.java

@@ -28,25 +28,22 @@ 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);
@@ -57,7 +54,6 @@ 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)));
                 }
@@ -83,38 +79,16 @@ 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);
-                            }
-                        }
-                    }
-                }
-
-                HashSet<Date> dateHashSet = new HashSet<>();
-                for (Date date : wordDateList){
-                    dateHashSet.add(DateUtil.getFirstTimeOfDay(date));
-                }
-                ArrayList<Date> dateList = new ArrayList(dateHashSet);
-                Collections.sort(dateList, Comparator.comparing(Date :: getTime));
-
                 //如果记录时间没有3天
-                if (dateList.size() < 3) {
+                if (wordDateList.size() < 3) {
                     status.set("-1");
                     return;
                 }
                 //如果住院当天开始做记录
-                if (DateUtils.isSameDay(stringDate.get(0), dateList.get(0))) {
+                if (DateUtils.isSameDay(stringDate.get(0), wordDateList.get(0))) {
                     for (int i = 1; i <= 2; i++) {
                         //如果时间不相等则时间不连续
-                        if (!DateUtils.isSameDay(stringDate.get(i), dateList.get(i))) {
+                        if (!DateUtils.isSameDay(stringDate.get(i), wordDateList.get(i))) {
                             status.set("-1");
                             return;
                         }
@@ -125,7 +99,7 @@ public class THR03010 extends QCCatalogue {
                 else {
                     for (int i = 0; i <= 3; i++) {
                         //如果时间不相等则时间不连续
-                        if (!DateUtils.isSameDay(stringDate.get(i + 1), dateList.get(i))) {
+                        if (!DateUtils.isSameDay(stringDate.get(i + 1), wordDateList.get(i))) {
                             status.set("-1");
                             return;
                         }

+ 12 - 0
trans/src/main/java/com/lantone/qc/trans/comsis/ModelDocGenerate.java

@@ -501,6 +501,18 @@ public class ModelDocGenerate {
         return adlGradeDoc;
     }
 
+    /**
+     * 有创操作
+     *
+     * @param structureMap
+     * @return
+     */
+    public static InvasiveOperationDoc invasiveOperationDocGen(Map<String, String> structureMap) {
+        InvasiveOperationDoc invasiveOperationDoc = new InvasiveOperationDoc();
+        invasiveOperationDoc.setStructureMap(structureMap);
+        return invasiveOperationDoc;
+    }
+
     /**
      * 拼接结构化数据
      **/

+ 16 - 0
trans/src/main/java/com/lantone/qc/trans/xiamen/XiamenDocTrans.java

@@ -111,6 +111,7 @@ public class XiamenDocTrans extends DocTrans {
                 if (i.getTitle().equals("查房记录")) {
                     XiamenThreeLevelWardDocTrans threeLevelWardDocTrans = new XiamenThreeLevelWardDocTrans();
                     threeLevelWardDocTrans.setOperationDocs(inputInfo.getOperationDocs());
+                    threeLevelWardDocTrans.setInputInfo(inputInfo);
                     inputInfo.setThreeLevelWardDocs(threeLevelWardDocTrans.extract(i));
                 }
                 if (i.getTitle().equals("住院病历信息")) {
@@ -125,6 +126,10 @@ public class XiamenDocTrans extends DocTrans {
                     XiamenOutDepDocTrans outDepDocTrans = new XiamenOutDepDocTrans();
                     inputInfo.setBeHospitalizedDoc(outDepDocTrans.extract(i));
                 }
+                if (i.getTitle().equals("有创操作")) {
+                    XiamenInvasiveOperationDocTrans invasiveOperationDocTrans = new XiamenInvasiveOperationDocTrans();
+                    inputInfo.setInvasiveOperationDocs(invasiveOperationDocTrans.extract(i));
+                }
             }
         }
         pageDataHandle(inputInfo);
@@ -331,6 +336,17 @@ public class XiamenDocTrans extends DocTrans {
                                 .collect(Collectors.toList())
                 );
             }
+
+            if (ListUtil.isNotEmpty(inputInfo.getInvasiveOperationDocs())) {
+                inputInfo.getPageData().put(
+                        "有创操作",
+                        inputInfo.getInvasiveOperationDocs()
+                                .stream()
+                                .map(i -> i.getPageData())
+                                .sorted((map1, map2) -> -OrdinaryAssistant.pageDataTimeSort(map1, map2, "记录时间", "yyyy/MM/dd HH:mm:ss"))
+                                .collect(Collectors.toList())
+                );
+            }
         }
     }
 }

+ 61 - 0
trans/src/main/java/com/lantone/qc/trans/xiamen/XiamenInvasiveOperationDocTrans.java

@@ -0,0 +1,61 @@
+package com.lantone.qc.trans.xiamen;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.InvasiveOperationDoc;
+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 lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.MapUtils;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 有创操作文档生成
+ * @author: rengb
+ * @time: 2022/2/10 19:41
+ */
+@Slf4j
+public class XiamenInvasiveOperationDocTrans extends ModelDocTrans {
+
+    @Override
+    public List<InvasiveOperationDoc> extract(MedrecVo medrecVo) {
+        List<InvasiveOperationDoc> retList = Lists.newArrayList();
+        List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
+        contentMaps.forEach(contentMap -> {
+            try {
+                InvasiveOperationDoc invasiveOperationDoc = getInvasiveOperationDoc(contentMap);
+                if (invasiveOperationDoc != null) {
+                    retList.add(invasiveOperationDoc);
+                }
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+            }
+        });
+        return retList;
+    }
+
+    private InvasiveOperationDoc getInvasiveOperationDoc(Map<String, Object> contentMap) {
+        String content = contentMap.get("xmlText").toString();
+        Map<String, String> structureMap = null;
+        if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
+            structureMap = (Map) FastJsonUtils.getJsonToMap(content);
+            structureMap = OrdinaryAssistant.mapKeyContrast(structureMap, keyContrasts, "59");
+        }
+        if (MapUtils.isNotEmpty(structureMap)) {
+            InvasiveOperationDoc invasiveOperationDoc = ModelDocGenerate.invasiveOperationDocGen(structureMap);
+            invasiveOperationDoc.setPageData((Map) structureMap);
+            return invasiveOperationDoc;
+        } else {
+            return null;
+        }
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "病历标题=标题",
+            "病情记录=病历内容"
+    );
+}

+ 119 - 20
trans/src/main/java/com/lantone/qc/trans/xiamen/XiamenThreeLevelWardDocTrans.java

@@ -1,8 +1,11 @@
 package com.lantone.qc.trans.xiamen;
 
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.lantone.qc.dbanaly.util.KernelConstants;
 import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
@@ -20,10 +23,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @Description: 查房记录文档生成
@@ -35,24 +35,111 @@ import java.util.Map;
 public class XiamenThreeLevelWardDocTrans extends ModelDocTrans {
 
     private List<OperationDoc> operationDocs;
+    private InputInfo inputInfo;
 
     @Override
     public List<ThreeLevelWardDoc> extract(MedrecVo medrecVo) {
+
+        Map<String, String> PhysicianTitleMap = Maps.newHashMap();
+        //病案首页
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        if (firstPageRecordDoc != null && firstPageRecordDoc.getStructureMap() != null) {
+            Map<String, String> structureMap = firstPageRecordDoc.getStructureMap();
+            PhysicianTitleMap.put("主任医师", structureMap.get("主任医师"));
+            PhysicianTitleMap.put("主治医师", structureMap.get("主治医师"));
+        }
+
         List<ThreeLevelWardDoc> retList = Lists.newArrayList();
         ThreeLevelWardDoc threeLevelWardDoc = new ThreeLevelWardDoc();
         List<Map<String, Object>> contentMaps = (List) medrecVo.getContent().get("content");
         contentMaps.forEach(contentMap -> {
             try {
-                classifyThreeLevelWardDoc(threeLevelWardDoc, contentMap);
+                classifyThreeLevelWardDoc(threeLevelWardDoc, contentMap, PhysicianTitleMap);
             } catch (Exception e) {
                 log.error(e.getMessage(), e);
             }
         });
+        //厦门查房无主治的情况(查房中高职称+低职称查房,低职称为主治查房)
+        theWardsManage(threeLevelWardDoc);
         retList.add(threeLevelWardDoc);
         return retList;
     }
 
-    private void classifyThreeLevelWardDoc(ThreeLevelWardDoc threeLevelWardDoc, Map<String, Object> contentMap) {
+    //厦门查房无主治的情况(查房中高职称+低职称查房,低职称为主治查房)
+    private void theWardsManage(ThreeLevelWardDoc threeLevelWardDoc) {
+        //科主任
+        boolean department = false;
+        //主任
+        boolean director = false;
+        //副主任
+        boolean deputyDirector = false;
+        List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
+        if (threeLevelWardDoc.getAttendingDoctorWardDocs().size() == 0) {
+            for (ThreeLevelWardDoc t : allDoctorWradDocs) {
+                Map<String, String> structureMap = t.getStructureMap();
+                String title = structureMap.get("查房标题");
+                if(StringUtil.isBlank(title)){
+                    continue;
+                }
+                if (title.contains("科主任")) {
+                    department = true;
+                }
+                if (title.contains("主任") && !title.contains("科主任") && !title.contains("副主任")) {
+                    director = true;
+                }
+                if (title.contains("副主任")) {
+                    deputyDirector = true;
+                }
+            }
+
+            //存在科主任并且存在副主任或主任
+            if (department && (director || deputyDirector)) {
+                for (ThreeLevelWardDoc t : allDoctorWradDocs) {
+                    Map<String, String> structureMap = t.getStructureMap();
+                    String title = structureMap.get("查房标题");
+                    if(StringUtil.isBlank(title)){
+                        continue;
+                    }
+                    if (!title.contains("科主任") && (title.contains("副主任") || title.contains("主任"))) {
+//                        structureMap.put("查房标题", title.replace("副主任", "主治").replace("主任", "主治"));
+                        AttendingDoctorWardDoc attendingDoctorWardDoc = null;
+                        attendingDoctorWardDoc = new AttendingDoctorWardDoc();
+                        attendingDoctorWardDoc.setStructureMap(structureMap);
+                        attendingDoctorWardDoc.setPageData((Map) structureMap);
+                        if (attendingDoctorWardDoc != null) {
+                            threeLevelWardDoc.addAttendingDoctorWardDoc(attendingDoctorWardDoc);
+                        }
+                    }
+//                    AttendingDoctorWardDoc attendingDoctorWardDoc = findAttendingDoctorWardDoc(structureMap);
+//                    if (attendingDoctorWardDoc != null) {
+//                        threeLevelWardDoc.addAttendingDoctorWardDoc(attendingDoctorWardDoc);
+//                    }
+                }
+            }
+            //不存在科主任并且存在副主任或主任
+            if (director && deputyDirector) {
+                for (ThreeLevelWardDoc t : allDoctorWradDocs) {
+                    Map<String, String> structureMap = t.getStructureMap();
+                    String title = structureMap.get("查房标题");
+                    if(StringUtil.isBlank(title)){
+                        continue;
+                    }
+//                    structureMap.put("查房标题", title.replace("副主任", "主治"));
+                    if (title.contains("副主任")) {
+                        AttendingDoctorWardDoc attendingDoctorWardDoc = null;
+                        attendingDoctorWardDoc = new AttendingDoctorWardDoc();
+                        attendingDoctorWardDoc.setStructureMap(structureMap);
+                        attendingDoctorWardDoc.setPageData((Map) structureMap);
+                        if (attendingDoctorWardDoc != null) {
+                            threeLevelWardDoc.addAttendingDoctorWardDoc(attendingDoctorWardDoc);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private void classifyThreeLevelWardDoc(ThreeLevelWardDoc threeLevelWardDoc, Map<String, Object> contentMap, Map<String, String> PhysicianTitleMap) {
         String content = contentMap.get("xmlText").toString();
         Map<String, String> structureMap = null;
         if (contentMap.get("isParsed") != null && "1".equals(contentMap.get("isParsed").toString())) {
@@ -99,12 +186,12 @@ public class XiamenThreeLevelWardDocTrans extends ModelDocTrans {
         threeLevelWardDoc.addAllDoctorWradDoc(allDoctorWradDoc);
 
         //主任医师查房
-        DirectorDoctorWardDoc directorDoctorWardDoc = findDirectorDoctorWardDoc(structureMap);
+        DirectorDoctorWardDoc directorDoctorWardDoc = findDirectorDoctorWardDoc(structureMap, PhysicianTitleMap);
         if (directorDoctorWardDoc != null) {
-            threeLevelWardDoc.addDirectorDoctorWardDoc(findDirectorDoctorWardDoc(structureMap));
+            threeLevelWardDoc.addDirectorDoctorWardDoc(directorDoctorWardDoc);
         }
         //主治医师查房
-        AttendingDoctorWardDoc attendingDoctorWardDoc = findAttendingDoctorWardDoc(structureMap);
+        AttendingDoctorWardDoc attendingDoctorWardDoc = findAttendingDoctorWardDoc(structureMap, PhysicianTitleMap);
         if (attendingDoctorWardDoc != null) {
             threeLevelWardDoc.addAttendingDoctorWardDoc(attendingDoctorWardDoc);
         }
@@ -123,12 +210,16 @@ public class XiamenThreeLevelWardDocTrans extends ModelDocTrans {
      *
      * @param structureMap
      */
-    private DirectorDoctorWardDoc findDirectorDoctorWardDoc(Map<String, String> structureMap) {
+    private DirectorDoctorWardDoc findDirectorDoctorWardDoc(Map<String, String> structureMap, Map<String, String> PhysicianTitleMap) {
         String title = structureMap.get("查房标题");
         String content = structureMap.get("病情记录");
         String writTitle = structureMap.get("文书标题");
         String recordDateStr = structureMap.get("查房日期");
         Date recordDate = StringUtil.parseDateTime(recordDateStr);
+        String directorDoctor = "";
+        if (PhysicianTitleMap != null && PhysicianTitleMap.size() > 0) {
+            directorDoctor = PhysicianTitleMap.get("主任医师");
+        }
         //标题有代字
         DirectorDoctorWardDoc directorDoctorWardDoc = null;
         if (StringUtil.isNotBlank(title)) {
@@ -140,7 +231,8 @@ public class XiamenThreeLevelWardDocTrans extends ModelDocTrans {
                 title = title.replace("一助", doctorTitle);
             }
             if ((StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主任")) || findDirector(content)
-                    || title.contains("多学科联合") || endocrinologyTitle(title)) {
+                    || title.contains("多学科联合") || endocrinologyTitle(title)
+                    || (StringUtil.isNotEmpty(directorDoctor) && title.contains(directorDoctor))) {
                 directorDoctorWardDoc = new DirectorDoctorWardDoc();
                 directorDoctorWardDoc.setStructureMap(structureMap);
                 directorDoctorWardDoc.setPageData((Map) structureMap);
@@ -156,7 +248,8 @@ public class XiamenThreeLevelWardDocTrans extends ModelDocTrans {
                 writTitle = writTitle.replace("一助", doctorTitle);
             }
             if ((StringUtils.isNotEmpty(subTitle(writTitle)) && subTitle(writTitle).contains("主任")) || findDirector(content)
-                    || writTitle.contains("多学科联合") || endocrinologyTitle(writTitle)) {
+                    || writTitle.contains("多学科联合") || endocrinologyTitle(writTitle)
+                    || (StringUtil.isNotEmpty(directorDoctor) && writTitle.contains(directorDoctor))) {
                 directorDoctorWardDoc = new DirectorDoctorWardDoc();
                 directorDoctorWardDoc.setStructureMap(structureMap);
                 directorDoctorWardDoc.setPageData((Map) structureMap);
@@ -170,12 +263,16 @@ public class XiamenThreeLevelWardDocTrans extends ModelDocTrans {
      *
      * @param structureMap
      */
-    private AttendingDoctorWardDoc findAttendingDoctorWardDoc(Map<String, String> structureMap) {
+    private AttendingDoctorWardDoc findAttendingDoctorWardDoc(Map<String, String> structureMap, Map<String, String> PhysicianTitleMap) {
         String title = structureMap.get("查房标题");
         String writTitle = structureMap.get("文书标题");
         String content = structureMap.get("病情记录");
         String recordDateStr = structureMap.get("查房日期");
         Date recordDate = StringUtil.parseDateTime(recordDateStr);
+        String behospitalDoctor = "";
+        if (PhysicianTitleMap != null && PhysicianTitleMap.size() > 0) {
+            behospitalDoctor = PhysicianTitleMap.get("主治医师");
+        }
         AttendingDoctorWardDoc attendingDoctorWardDoc = null;
         //标题有代字
         if (StringUtil.isNotBlank(title)) {
@@ -187,7 +284,8 @@ public class XiamenThreeLevelWardDocTrans extends ModelDocTrans {
                 title = title.replace("一助", doctorTitle);
             }
             if ((StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主治"))
-                    || findAttend(content) || title.contains("多学科联合") || endocrinologyTitle(title) || xiamenTitle(title)) {
+                    || (StringUtil.isNotBlank(content) && findAttend(content)) || title.contains("多学科联合") || endocrinologyTitle(title)
+                    || (StringUtil.isNotEmpty(behospitalDoctor) && title.contains(behospitalDoctor))) {
                 attendingDoctorWardDoc = new AttendingDoctorWardDoc();
                 attendingDoctorWardDoc.setStructureMap(structureMap);
                 attendingDoctorWardDoc.setPageData((Map) structureMap);
@@ -204,7 +302,8 @@ public class XiamenThreeLevelWardDocTrans extends ModelDocTrans {
                 writTitle = writTitle.replace("一助", doctorTitle);
             }
             if ((StringUtils.isNotEmpty(subTitle(writTitle)) && subTitle(writTitle).contains("主治"))
-                    || findAttend(content) || writTitle.contains("多学科联合") || endocrinologyTitle(writTitle) || xiamenTitle(title)) {
+                    ||(StringUtil.isNotBlank(content) && findAttend(content))  || writTitle.contains("多学科联合") || endocrinologyTitle(writTitle)
+                    || (StringUtil.isNotEmpty(behospitalDoctor) && writTitle.contains(behospitalDoctor))) {
                 attendingDoctorWardDoc = new AttendingDoctorWardDoc();
                 attendingDoctorWardDoc.setStructureMap(structureMap);
                 attendingDoctorWardDoc.setPageData((Map) structureMap);
@@ -225,15 +324,15 @@ public class XiamenThreeLevelWardDocTrans extends ModelDocTrans {
     }
 
     /**
-     * 厦门科主任+主任查房处理
+     * 主任+主任查房处理
      *
      * @param title
      * @return
      */
-    private boolean xiamenTitle(String title) {
-        String regex = ".*主任.*主任.*";
-        return title.matches(regex);
-    }
+//    private boolean xiamenTitle(String title) {
+//        String regex = ".*主任.*主任.*";
+//        return title.matches(regex);
+//    }
 
     /**
      * 共同照护讨论记录中找主任查房