package com.openhis.yb.dto;

import java.math.BigDecimal;
import java.util.Date;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

import org.hibernate.validator.constraints.Length;

import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 【4101A】结算清单信息（节点标识setlinfo）
 *
 * @author Thanking
 */
@Data
@Accessors(chain = true)
public class Yb4101AInputSetlinfo {

    /**
     * 人员编号
     */
    @NotBlank
    @Length(max = 30)
    @JSONField(name = "psn_no")
    private String psnNo;

    /**
     * 就诊ID
     */
    @NotBlank
    @Length(max = 30)
    @JSONField(name = "mdtrt_id")
    private String mdtrtId;

    /**
     * 结算ID
     */
    @NotBlank
    @Length(max = 30)
    @JSONField(name = "setl_id")
    private String setlId;

    /**
     * 医保编号
     */
    @Length(max = 30)
    @JSONField(name = "hi_no")
    private String hiNo;

    /**
     * 病案号
     */
    @Length(max = 30)
    @JSONField(name = "medcasno")
    private String medcasno;

    /**
     * 申报时间：结算清单上报时间，接收时自动填充
     */
    @JSONField(name = "dcla_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dclaTime;

    /**
     * 国籍
     */
    @NotBlank
    @Length(max = 6)
    @JSONField(name = "ntly")
    private String ntly;

    /**
     * 职业
     */
    @NotBlank
    @Length(max = 6)
    @JSONField(name = "prfs")
    private String prfs;

    /**
     * 现住址
     */
    @Length(max = 200)
    @JSONField(name = "curr_addr")
    private String currAddr;

    /**
     * 单位名称
     */
    @Length(max = 200)
    @JSONField(name = "emp_name")
    private String empName;

    /**
     * 单位地址
     */
    @Length(max = 200)
    @JSONField(name = "emp_addr")
    private String empAddr;

    /**
     * 单位电话
     */
    @Length(max = 50)
    @JSONField(name = "emp_tel")
    private String empTel;

    /**
     * 邮编
     */
    @Length(max = 6)
    @JSONField(name = "poscode")
    private String poscode;

    /**
     * 联系人姓名
     */
    @Length(max = 50)
    @JSONField(name = "coner_name")
    private String conerName;

    /**
     * 与患者关系：当coner_name非空时必填
     */
    @NotBlank
    @Length(max = 6)
    @JSONField(name = "patn_rlts")
    private String patnRlts;

    /**
     * 联系人地址：当coner_name非空时必填
     */
    @NotBlank
    @Length(max = 200)
    @JSONField(name = "coner_addr")
    private String conerAddr;

    /**
     * 联系人电话：当coner_name非空时必填
     */
    @NotBlank
    @Length(max = 50)
    @JSONField(name = "coner_tel")
    private String conerTel;

    /**
     * 新生儿入院类型
     */
    @Length(max = 50)
    @JSONField(name = "nwb_adm_type")
    private String nwbAdmType;

    /**
     * 新生儿出生体重：精确到10克（g）
     */
    @JSONField(name = "nwb_bir_wt")
    private BigDecimal nwbBirWt;

    /**
     * 新生儿入院体重：精确到10克（g）
     */
    @JSONField(name = "nwb_adm_wt")
    private BigDecimal nwbAdmWt;

    /**
     * 多新生儿出生体重
     */
    @Length(max = 50)
    @JSONField(name = "mul_nwb_bir_wt")
    private String mulNwbBirWt;

    /**
     * 多新生儿入院体重
     */
    @Length(max = 50)
    @JSONField(name = "mul_nwb_adm_wt")
    private String mulNwbAdmWt;

    /**
     * 门诊慢特病诊断科别
     */
    @Length(max = 50)
    @JSONField(name = "opsp_diag_caty")
    private String opspDiagCaty;

    /**
     * 门诊慢特病就诊日期
     */
    @JSONField(name = "opsp_mdtrt_date")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date opspMdtrtDate;

    /**
     * 入院途径
     */
    @Length(max = 30)
    @JSONField(name = "adm_way")
    private String admWay;

    /**
     * 治疗类别
     */
    @Length(max = 3)
    @JSONField(name = "trt_type")
    private String trtType;

    /**
     * 入院时间
     */
    @JSONField(name = "adm_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date admTime;

    /**
     * 转科科别：参照科室代码（dept），如果超过一次以上的转科，用“→”转接表示
     */
    @Length(max = 50)
    @JSONField(name = "refldept_dept")
    private String refldeptDept;

    /**
     * 出院时间
     */
    @JSONField(name = "dscg_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dscgTime;

    /**
     * 出院科别：参照科室代码（dept）
     */
    @NotBlank
    @Length(max = 6)
    @JSONField(name = "dscg_caty")
    private String dscgCaty;

    /**
     * 门（急）诊诊断（西医诊断）
     */
    @Length(max = 200)
    @JSONField(name = "otp_wm_dise")
    private String otpWmDise;

    /**
     * 西医疾病代码
     */
    @Length(max = 20)
    @JSONField(name = "wm_dise_code")
    private String wmDiseCode;

    /**
     * 门（急）诊诊断（中医诊断）
     */
    @Length(max = 200)
    @JSONField(name = "otp_tcm_dise")
    private String otpTcmDise;

    /**
     * 中医疾病代码
     */
    @Length(max = 20)
    @JSONField(name = "tcm_dise_code")
    private String tcmDiseCode;

    /**
     * 呼吸机使用时长：格式：天数/小时数/分钟数 例：1/13/24
     */
    @Length(max = 10)
    @JSONField(name = "vent_used_dura")
    private String ventUsedDura;

    /**
     * 颅脑损伤患者入院前昏迷时长：格式：天数/小时数/分钟数 例：1/13/24
     */
    @Length(max = 10)
    @JSONField(name = "pwcry_bfadm_coma_dura")
    private String pwcryBfadmComaDura;

    /**
     * 颅脑损伤患者入院后昏迷时长：格式：天数/小时数/分钟数 例：1/13/24
     */
    @Length(max = 10)
    @JSONField(name = "pwcry_afadm_coma_dura")
    private String pwcryAfadmComaDura;

    /**
     * 特级护理天数
     */
    @JSONField(name = "spga_nurscare_days")
    private BigDecimal spgaNurscareDays;

    /**
     * 一级护理天数
     */
    @JSONField(name = "lv1_nurscare_days")
    private BigDecimal lv1NurscareDays;

    /**
     * 二级护理天数
     */
    @JSONField(name = "scd_nurscare_days")
    private BigDecimal scdNurscareDays;

    /**
     * 三级护理天数
     */
    @JSONField(name = "lv3_nurscare_days")
    private Integer lv3NurscareDays;

    /**
     * 离院方式
     */
    @Length(max = 3)
    @JSONField(name = "dscg_way")
    private String dscgWay;

    /**
     * 拟接收机构名称：说明当离院方式为“2”时，如果接收患者的医疗机构明确，需要填写转入医疗机构的名称； 当离院方式为“3”时，如果接收患者的社区卫生服务机构明确，需要填写社区卫生服务机构/乡镇卫生院名称
     */
    @Length(max = 100)
    @JSONField(name = "acp_medins_name")
    private String acpMedinsName;

    /**
     * 拟接收机构代码：当离院方式为“2”或“3”时，如果接收患者的医疗机构或社区卫生服务机构明确，需要填写机构对应的医保定点医疗机构代码
     */
    @Length(max = 30)
    @JSONField(name = "acp_optins_code")
    private String acpOptinsCode;

    /**
     * 票据代码
     */
    @Length(max = 50)
    @JSONField(name = "bill_code")
    private String billCode;

    /**
     * 票据号码
     */
    @Length(max = 30)
    @JSONField(name = "bill_no")
    private String billNo;

    /**
     * 业务流水号
     */
    @Length(max = 50)
    @JSONField(name = "biz_sn")
    private String bizSn;

    /**
     * 出院31天内再住院计划标志
     */
    @Length(max = 3)
    @JSONField(name = "days_rinp_flag_31")
    private String daysRinpFlag31;

    /**
     * 出院31天内再住院计划目的
     */
    @Length(max = 200)
    @JSONField(name = "days_rinp_pup_31")
    private String daysRinpPup31;

    /**
     * 主诊医师代码：主诊医师在《医保医师代码》中的代码，在就医地未完成标准化前，可传医师在就医地系统中的唯一编号
     */
    @Length(max = 30)
    @JSONField(name = "chfpdr_code")
    private String chfpdrCode;

    /**
     * 结算开始日期
     */
    @NotNull
    @JSONField(name = "setl_begn_date")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date setlBegnDate;

    /**
     * 结算结束日期
     */
    @NotNull
    @JSONField(name = "setl_end_date")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date setlEndDate;

    /**
     * 医疗机构填报部门
     */
    @NotBlank
    @Length(max = 100)
    @JSONField(name = "medins_fill_dept")
    private String medinsFillDept;

    /**
     * 医疗机构填报人
     */
    @NotBlank
    @Length(max = 50)
    @JSONField(name = "medins_fill_psn")
    private String medinsFillPsn;

    /**
     * 责任护士代码
     */
    @Length(max = 50)
    @JSONField(name = "resp_nurs_code")
    private String respNursCode;

    /**
     * 状态分类
     */
    @Length(max = 10)
    @JSONField(name = "stas_type")
    private String stasType;

    /**
     * 医保支付方式
     */
    @Length(max = 3)
    @JSONField(name = "hi_paymtd")
    private String hiPaymtd;

    /**
     * 入院科室编码
     */
    @Length(max = 30)
    @JSONField(name = "adm_dept_codg")
    private String admDeptCodg;

    /**
     * 入院科室名称
     */
    @Length(max = 100)
    @JSONField(name = "adm_dept_name")
    private String admDeptName;

}
