|
@@ -0,0 +1,111 @@
|
|
|
+package com.lantone.qc.kernel.catalogue.hospital.ningbozhongyi.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) {
|
|
|
+ MedicalRecordInfoDoc medicalRecordInfoDoc = inputInfo.getMedicalRecordInfoDoc();
|
|
|
+ if (medicalRecordInfoDoc != null && medicalRecordInfoDoc.getStructureMap() != null) {
|
|
|
+ //入院日期
|
|
|
+ String admisTime = medicalRecordInfoDoc.getStructureMap().get("behospitalDate");
|
|
|
+ //出院日期
|
|
|
+ String 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) {
|
|
|
+ status.set("-1");
|
|
|
+ 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 < 2; 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("查房标题");
|
|
|
+ //|| title.contains("病理记录") || title.contains("病理诊断")
|
|
|
+ if (StringUtil.isBlank(title) || title.contains("病理报告") || title.contains("化验记录")) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ conditionRecord = StringUtil.isBlank(conditionRecord) ? "" : conditionRecord;
|
|
|
+ conditionRecord = conditionRecord.replace(" ", "");
|
|
|
+ treatmentPlan = StringUtil.isBlank(treatmentPlan) ? "" : treatmentPlan;
|
|
|
+ //主任或主治查房 标题需要包含“主任”或“主治”,内容需要包含“出院”
|
|
|
+ if ((conditionRecord.contains("出院") || conditionRecord.contains("转上级医院") || treatmentPlan.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;
|
|
|
+ }
|
|
|
+ // 添加硬规则,最后一个记录包含“医院”或 “离院”就不报错 || conditionRecord.contains("出院")
|
|
|
+ if (lastFlag==true) {
|
|
|
+ if (conditionRecord.contains("医院") || conditionRecord.contains("离院")) {
|
|
|
+ status.set("0");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ lastFlag = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|