package com.lantone.qc.pub.model;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.lantone.qc.pub.model.doc.*;
import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
import com.lantone.qc.pub.model.doc.operation.OperationDoc;
import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName : InputInfo
 * @Description : 医院质控病历录入对象
 * @Author : 楼辉荣
 * @Date: 2020-03-04 15:39
 */
@Getter
@Setter
public class InputInfo {

    /**
     * 将要执行的规则，precond--规则执行前置条件
     * {"BEH0001":{"precond":"BEH0002,BEH0003,BEH0004"}}
     */
    private Map<String, Map<String, String>> inputCatalogueMap = new HashMap<>();
    //页面结构化信息存储
    private Map<String, Object> pageData = Maps.newHashMap();
    //会诊
    private List<ConsultationDoc> consultationDocs = new ArrayList<>();
    //手术
    private List<OperationDoc> operationDocs = new ArrayList<>();
    //转科记录
    private TransferRecordDoc transferRecordDocs;
    //入院记录
    private BeHospitalizedDoc beHospitalizedDoc;
    //输血/血制品病程记录
    private List<ClinicalBloodDoc> clinicalBloodDocs = new ArrayList<>();
    //输血后效果评价
    private List<ClinicBloodEffectDoc> clinicBloodEffectDocs = new ArrayList<>();
    //危急值文书记录
    private List<CrisisValueReportDoc> crisisValueReportDocs = new ArrayList<>();
    //危急值结构化信息
    private List<CrisisInfoDoc> crisisInfoDocs = new ArrayList<>();
    //病危通知书
    private List<CriticallyIllNoticeDoc> criticallyIllNoticeDocs = new ArrayList<>();
    //死亡病例讨论记录
    private DeathCaseDiscussDoc deathCaseDiscussDoc;
    //死亡记录
    private DeathRecordDoc deathRecordDoc;
    //疑难病例讨论记录
    private List<DifficultCaseDiscussDoc> difficultCaseDiscussDocs = new ArrayList<>();
    //医嘱信息
    private List<DoctorAdviceDoc> doctorAdviceDocs = new ArrayList<>();
    //化验信息
    private List<LisDoc> lisDocs = new ArrayList<>();
    //辅检信息
    private List<PacsDoc> pacsDocs = new ArrayList<>();
    //值班交接制度
    private List<DutyShiftSystemDoc> dutyShiftSystemDocs = new ArrayList<>();
    //首次病程录
    private FirstCourseRecordDoc firstCourseRecordDoc;
    //病案首页
    private FirstPageRecordDoc firstPageRecordDoc;
    //出院小结
    private LeaveHospitalDoc leaveHospitalDoc;
    //分级护理制度
    private NursingSystemDoc nursingSystemDoc;
    //抢救记录
    private List<RescueDoc> rescueDocs = new ArrayList<>();
    //病重通知书
    private List<SeriouslyIllNoticeDoc> seriouslyIllNoticeDocs = new ArrayList<>();
    //阶段小结
    private List<StagesSummaryDoc> stagesSummaryDocs = new ArrayList<>();
    //查房记录
    private List<ThreeLevelWardDoc> threeLevelWardDocs = new ArrayList<>();
    //知情同意书
    private InformedConsentDoc informedConsentDoc;
    //谈话告知书
    private NoticeOfConversationDoc noticeOfConversationDoc;
    //麻醉相关
    private List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = new ArrayList<>();
    //有创操作记录
    private List<InvasiveOperationDoc> invasiveOperationDocs = new ArrayList<>();
    //病历书写规范
    private List<MedicalWritingDoc> medicalWritingDocs = new ArrayList<>();
    //病理检验送检单
    private List<PathologyShipDoc> pathologyShipDocs = new ArrayList<>();
    //诊疗合理性
    private List<ReasonableDiagnosisDoc> reasonableDiagnosisDocs = new ArrayList<>();
    //日常病程录
    private List<DailyCourseRecordDoc> dailyCourseRecordDocs = Lists.newArrayList();
    //住院病历信息
    private MedicalRecordInfoDoc medicalRecordInfoDoc;
    private boolean useCrfCache;

    //新增记录
    public <T> void addDoc(List<T> list, T obj) {
        list.add(obj);
    }
}