package thyyxxk.webserver.entity.querydata;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import thyyxxk.webserver.entity.medicalinsurance.setllistupld.*;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Data
public class SiSetlinfoTemp implements Serializable {

    private static final long serialVersionUID = 392179028308989459L;

    /**
     * 住院号/门诊号
     */
    private String patNo;

    /**
     * 住院医疗类别
     */
    private Integer iptMedType;

    /**
     * 住院次数/门诊次数
     */
    private Integer times;

    /**
     * 账页号(门诊固定为0)
     */
    private Integer ledgerSn;

    /**
     * 就诊ID
     */
    private String mdtrtId;

    /**
     * 结算ID
     */
    private String setlId;

    /**
     * 人员编号
     */
    private String psnNo;

    /**
     * 人员姓名
     */
    private String psnName;

    /**
     * 人员证件类型
     */
    private String psnCertType;

    /**
     * 证件号码
     */
    private String certno;

    /**
     * 性别
     */
    private String gend;

    /**
     * 性别
     */
    private String gendName;

    /**
     * 民族
     */
    private String naty;

    /**
     * 出生日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date brdy;

    /**
     * 年龄
     */
    private Double age;

    /**
     * 险种类型
     */
    private String insutype;

    /**
     * 险种类型
     */
    private String insutypeName;

    /**
     * 人员类别
     */
    private String psnType;

    /**
     * 人员类别
     */
    private String psnTypeName;

    /**
     * 公务员标志
     */
    private String cvlservFlag;

    /**
     * 结算时间
     */
    private Date setlTime;

    /**
     * 就诊凭证类型
     */
    private String mdtrtCertType;

    /**
     * 医疗类别
     */
    private String medType;

    /**
     * 医疗类别
     */
    private String medTypeName;

    /**
     * 医疗费总额
     */
    private String medfeeSumamt;

    /**
     * 全自费金额
     */
    private String fulamtOwnpayAmt;

    /**
     * 超限价自费费用
     */
    private String overlmtSelfpay;

    /**
     * 先行自付金额
     */
    private String preselfpayAmt;

    /**
     * 符合政策范围金额
     */
    private String inscpScpAmt;

    /**
     * 实际支付起付线
     */
    private String actPayDedc;

    /**
     * 基本医疗保险统筹基金支出
     */
    private String hifpPay;

    /**
     * 基本医疗保险统筹基金支付比例
     */
    private String poolPropSelfpay;

    /**
     * 公务员医疗补助资金支出
     */
    private String cvlservPay;

    /**
     * 企业补充医疗保险基金支出
     */
    private String hifesPay;

    /**
     * 居民大病保险资金支出
     */
    private String hifmiPay;

    /**
     * 职工大额医疗费用补助基金支出
     */
    private String hifobPay;

    /**
     * 医疗救助基金支出
     */
    private String mafPay;

    /**
     * 医院负担金额
     */
    private String hospPartAmt;

    /**
     * 其他支出
     */
    private String othPay;

    /**
     * 基金支付总额
     */
    private String fundPaySumamt;

    /**
     * 个人负担总金额
     */
    private String psnPartAmt;

    /**
     * 个人账户支出
     */
    private String acctPay;

    /**
     * 个人现金支出
     */
    private String psnCashPay;

    /**
     * 余额
     */
    private String balc;

    /**
     * 个人账户共济支付金额
     */
    private String acctMulaidPay;

    /**
     * 医药机构结算ID
     */
    private String medinsSetlId;

    /**
     * 清算经办机构
     */
    private String clrOptins;
    /**
     * 清算经办机构
     */
    private String clrOptinsName;


    /**
     * 清算方式
     */
    private String clrWay;

    /**
     * 清算类别
     */
    private String clrType;

    /**
     * 结算操作员
     */
    private String staffId;

    /**
     * revoked
     */
    private Integer revoked;

    /**
     * 结算类别：21-住院，11-门诊
     */
    private String setlType;

    /**
     * 结算清单上传成功后中心返回的流水号
     */
    private String setlListId;


    private String outDeptName;

    private String outDept;

    /**
     * 实际住院天数
     */
    private String actIptDays;

    /**
     * 治疗方式
     */
    private String operation;
    /**
     * 申报类型
     */
    private Integer decType;

    private String disDiag;
    private String disDiagComment;
    private String referPhysicianName;
    private String referPhysician;
    /**
     * 出院时间
     */
    private Date disDate;

    /**
     * 参保地
     */
    private String insuplcAdmdvs;
    private String insuplcAdmdvsName;

    /*            审核信息                  */
    /**
     * id
     */
    private Integer id;

    /**
     * reqOpId
     */
    private String reqOpId;

    /**
     * reqOpName
     */
    private String reqOpName;

    /**
     * reqOpDate
     */
    private Date reqOpDate;

    /**
     * 申请备注
     */
    private String reqRemark;

    /**
     * 审核人 code
     */
    private String auditStaff;

    /**
     * 审核姓名
     */
    private String auditName;

    /**
     * 审核时间
     */
    private Date auditDate;

    /**
     * 审核备注
     */
    private String auditRemark;

    /**
     * 审核状态 0-待审核 1-审核通过 2-驳回 3-正在审核中
     */
    private Integer auditFlag;

    private StringBuilder zhuanKeName;
    private Integer zhuanKeAmount;

    private String wardCode;
    private String wardCodeName;
    /**
     * 上传截止日期
     */
    private String uploadCutoffDate;
    /**
     * 质控提醒 超过三天没质控通过提醒字段
     */
    private String qualityReminder;
    /**
     * 上传状态
     */
    private String uploadStatus;
    /**
     * 已上传可以修改提醒
     */
    private String uploadUpdateReminder;
    /**
     * 编码员备注
     */
    private String bmyBz;
    /**
     * 编码员备注修改人
     */
    private String bzUpdate;
    /**
     * 编码员备注修改时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date bzUpdateTime;
    /**
     * 支付方式 1-按日期 2-单病种 3-按病种分值 4-基本诊断相关分组（DRG
     * 5-按床日 6-按人次 9-其他
     */
    private Integer hiPaymtd;

    private List<PayinfoUpld> payinfo;
    private List<OpspdiseinfoUpld> opspdiseinfo;
    private List<DiseinfoUpld> diseinfo;
    private List<IteminfoUpld> iteminfo;
    private List<OprninfoUpld> oprninfo;
    private List<IcuinfoUpld> icuinfo;


    public String getDecTypeName() {
        if (decType != null) {
            switch (decType) {
                case 0:
                    return "有对照";
                case 1:
                    return "治疗未完成";
                case 2:
                    return "无对照";
                case 3:
                    return "转科";
                case 4:
                    return "单列";
            }
        }
        return "";
    }


    public String getAuditFlagName() {
        if (auditFlag != null) {
            switch (auditFlag) {
                case 0:
                    return "待审核";
                case 1:
                    return "审核通过";
                case 2:
                    return "审核驳回";
                case 3:
                    return "正在审核";
                default:
                    return "未知";
            }
        }
        return "未申请审核";
    }


    public String getOperationName() {
        if (operation != null) {
            switch (operation) {
                case "0":
                    return "非手术";
                case "1":
                    return "传统手术";
                case "2":
                    return "介入手术";
                case "3":
                    return "微创手术";
                case "4":
                    return "恶性肿瘤放射治疗";
                case "5":
                    return "恶性肿瘤化学治疗";
                case "6":
                    return "恶性肿瘤放疗加化疗";
                case "7":
                    return "恶性肿瘤姑息治疗";
                default:
                    return "未知";
            }
        }
        return "";
    }

}
