|
@@ -0,0 +1,143 @@
|
|
|
+package com.lantone.qc.kernel.catalogue.threelevelward;
|
|
|
+
|
|
|
+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.*;
|
|
|
+import com.lantone.qc.pub.model.doc.consultation.ConsultationApplicationDoc;
|
|
|
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
|
|
|
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
|
|
|
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
|
|
|
+import com.lantone.qc.pub.model.doc.transferrecord.TransferIntoDoc;
|
|
|
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
|
|
|
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
|
|
|
+import com.lantone.qc.pub.util.ListUtil;
|
|
|
+import com.lantone.qc.pub.util.StringUtil;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @ClassName : THR03118
|
|
|
+ * @Description: 报告单或病程记录缺少细菌培养记录
|
|
|
+ * @author: zh
|
|
|
+ * @time: 2021/04/06 11:22
|
|
|
+ */
|
|
|
+@Component
|
|
|
+public class THR03118 extends QCCatalogue {
|
|
|
+ public void start(InputInfo inputInfo, OutputInfo outputInfo) {
|
|
|
+ /**
|
|
|
+ * 【指标十】细菌培养检查记录符合率(MER-ME-03)
|
|
|
+ * 1、判断医嘱中是否含有细菌培养
|
|
|
+ * 2、判断病程记录中是否存在细菌培养记录(除了入院记录和首次病程录都属于病程记录)
|
|
|
+ * 3、判断化验报告单中是否记录细菌培养
|
|
|
+ */
|
|
|
+ status.set("0");
|
|
|
+ //医嘱中细菌培养的数量
|
|
|
+ int allNum = 0;
|
|
|
+ //病程记录中细菌培养的数量
|
|
|
+ int docNum = 0;
|
|
|
+ //报告单中细菌培养的数量
|
|
|
+ int reportNum = 0;
|
|
|
+ List<DoctorAdviceDoc> doctorAdviceDocList = inputInfo.getDoctorAdviceDocs();
|
|
|
+ if (ListUtil.isEmpty(doctorAdviceDocList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocList) {
|
|
|
+ Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
|
|
|
+ String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
|
|
|
+ if (Content.statOrder.equals(doctorAsks)) {
|
|
|
+ String doctorAsksName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
|
|
|
+ if (StringUtil.isNotEmpty(doctorAsksName)) {
|
|
|
+ if (doctorAsksName.contains(Content.bacterialCulture)) {
|
|
|
+ allNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /******************************************查房记录********************************************************/
|
|
|
+ List<ThreeLevelWardDoc> allDoctorWradDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();
|
|
|
+ if (ListUtil.isNotEmpty(allDoctorWradDocs) && allDoctorWradDocs.size() > 0) {
|
|
|
+ for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
|
|
|
+ String allDoctorStr = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
|
|
|
+ if (allDoctorStr.contains(Content.bacterialCulture)) {
|
|
|
+ docNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /******************************************术后首程********************************************************/
|
|
|
+ if (inputInfo.getOperationDocs().size() > 0) {
|
|
|
+ List<String> recordList = inputInfo.getOperationDocs().stream().map(OperationDoc::getOperationDiscussionDoc).filter(Objects::nonNull)
|
|
|
+ .map(OperationDiscussionDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("手术简要经过")))
|
|
|
+ .map(i -> i.get("手术简要经过")).collect(Collectors.toList());
|
|
|
+ for (String recordStr : recordList) {
|
|
|
+ if (recordStr.contains(Content.bacterialCulture)) {
|
|
|
+ docNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /******************************************转入转出********************************************************/
|
|
|
+ if (inputInfo.getTransferRecordDocs() != null) {
|
|
|
+ TransferRecordDoc transferRecordDocs = inputInfo.getTransferRecordDocs();
|
|
|
+ List<String> intoRecordDList = transferRecordDocs.getTransferIntoDocs()
|
|
|
+ .stream().map(TransferIntoDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("病历内容")))
|
|
|
+ .map(i -> i.get("病历内容")).collect(Collectors.toList());
|
|
|
+ for (String recordStr : intoRecordDList) {
|
|
|
+ if (recordStr.contains(Content.bacterialCulture)) {
|
|
|
+ docNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ intoRecordDList = transferRecordDocs.getTransferOutDocs()
|
|
|
+ .stream().map(TransferOutDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("病历内容")))
|
|
|
+ .map(i -> i.get("病历内容")).collect(Collectors.toList());
|
|
|
+ for (String recordStr : intoRecordDList) {
|
|
|
+ if (recordStr.contains(Content.bacterialCulture)) {
|
|
|
+ docNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /******************************************阶段小结********************************************************/
|
|
|
+ if (inputInfo.getStagesSummaryDocs().size() > 0) {
|
|
|
+ List<String> intoRecordList = inputInfo.getStagesSummaryDocs().stream().map(StagesSummaryDoc::getStructureMap)
|
|
|
+ .filter(i -> StringUtil.isNotBlank(i.get("病历内容")))
|
|
|
+ .map(i -> i.get("病历内容")).collect(Collectors.toList());
|
|
|
+ for (String recordStr : intoRecordList) {
|
|
|
+ if (recordStr.contains(Content.bacterialCulture)) {
|
|
|
+ docNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /******************************************会诊申请********************************************************/
|
|
|
+ if (inputInfo.getConsultationDocs().size() > 0) {
|
|
|
+ List<String> recordList = inputInfo.getConsultationDocs().stream().map(ConsultationDoc::getConsultationApplicationDoc).filter(Objects::nonNull)
|
|
|
+ .map(ConsultationApplicationDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("会诊目的")))
|
|
|
+ .map(i -> i.get("会诊目的")).collect(Collectors.toList());
|
|
|
+ for (String recordStr : recordList) {
|
|
|
+ if (recordStr.contains(Content.bacterialCulture)) {
|
|
|
+ docNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ List<LisDoc> lisDocs = inputInfo.getLisDocs();
|
|
|
+ if (ListUtil.isNotEmpty(lisDocs)) {
|
|
|
+ for (LisDoc lisDoc : lisDocs) {
|
|
|
+ String lisDocStr = lisDoc.getStructureMap().get(Content.reportName);
|
|
|
+ if (StringUtil.isNotEmpty(lisDocStr) && lisDocStr.contains(Content.bacterialCulture)) {
|
|
|
+ reportNum++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((allNum != docNum && allNum > docNum) || (allNum != reportNum && allNum > reportNum)) {
|
|
|
+ status.set("-1");
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|