package com.openhis.yb.dto;

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

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
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;

/**
 * 【3101】输入-就诊信息（节点标识：fsi_encounter_dtos）
 * 
 * @author Thanking
 */
@Data
@Accessors(chain = true)
public class Yb3101InputFsiEncounterDto {

    /**
     * 就诊标识：就诊记录唯一ID
     */
    @NotBlank
    @Length(max = 50)
    @JSONField(name = "mdtrt_id")
    private String mdtrtId;

    /**
     * 医疗服务机构标识：定点医疗机构ID
     */
    @NotBlank
    @Length(max = 50)
    @JSONField(name = "medins_id")
    private String medinsId;

    /**
     * 医疗机构名称
     */
    @NotBlank
    @Length(max = 200)
    @JSONField(name = "medins_name")
    private String medinsName;

    /**
     * 医疗机构行政区划编码
     */
    @NotBlank
    @Length(max = 6)
    @JSONField(name = "medins_admdvs")
    private String medinsAdmdvs;

    /**
     * 医疗服务机构类型：参考字典表
     */
    @NotBlank
    @Length(max = 3)
    @JSONField(name = "medins_type")
    private String medinsType;

    /**
     * 医疗机构等级：参考字典表
     */
    @NotBlank
    @Length(max = 3)
    @JSONField(name = "medins_lv")
    private String medinsLv;

    /**
     * 病区标识
     */
    @Length(max = 20)
    @JSONField(name = "wardarea_codg")
    private String wardareaCodg;

    /**
     * 病房号
     */
    @Length(max = 20)
    @JSONField(name = "wardno")
    private String wardno;

    /**
     * 病床号
     */
    @Length(max = 20)
    @JSONField(name = "bedno")
    private String bedno;

    /**
     * 入院日期
     */
    @NotNull
    @JSONField(name = "adm_date")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date admDate;

    /**
     * 出院日期
     */
    @NotNull
    @JSONField(name = "dscg_date")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dscgDate;

    /**
     * 主诊断编码：例如：I63.9
     */
    @NotBlank
    @Length(max = 20)
    @JSONField(name = "dscg_main_dise_codg")
    private String dscgMainDiseCodg;

    /**
     * 主诊断名称：例如：脑梗塞
     */
    @NotBlank
    @Length(max = 50)
    @JSONField(name = "dscg_main_dise_name")
    private String dscgMainDiseName;

    /**
     * 诊断信息集合
     */
    @NotEmpty
    @JSONField(name = "fsi_diagnose_dtos")
    private List<Yb3101InputFsiDiagnoseDto> fsiDiagnoseDtos;

    /**
     * 医师标识：医生唯一ID
     */
    @NotBlank
    @Length(max = 20)
    @JSONField(name = "dr_codg")
    private String drCodg;

    /**
     * 入院科室标识：科室唯一ID
     */
    @NotBlank
    @Length(max = 20)
    @JSONField(name = "adm_dept_codg")
    private String admDeptCodg;

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

    /**
     * 出院科室标识：科室唯一ID
     */
    @NotBlank
    @Length(max = 20)
    @JSONField(name = "dscg_dept_codg")
    private String dscgDeptCodg;

    /**
     * 出院科室名称
     */
    @NotBlank
    @Length(max = 50)
    @JSONField(name = "dscg_dept_name")
    private String dscgDeptName;

    /**
     * 就诊类型：参考字典表
     */
    @NotBlank
    @Length(max = 3)
    @JSONField(name = "med_mdtrt_type")
    private String medMdtrtType;

    /**
     * 医疗类别：参考字典表
     */
    @NotBlank
    @Length(max = 3)
    @JSONField(name = "med_type")
    private String medType;

    /**
     * 处方(医嘱)信息集合
     */
    @NotEmpty
    @JSONField(name = "fsi_order_dtos")
    private List<Yb3101InputFsiOrderDto> fsiOrderDtos;

    /**
     * 生育状态：参考字典表
     */
    @NotBlank
    @Length(max = 3)
    @JSONField(name = "matn_stas")
    private String matnStas;

    /**
     * 总费用
     */
    @NotNull
    @JSONField(name = "medfee_sumamt")
    private BigDecimal medfeeSumamt;

    /**
     * 自费金额
     */
    @NotNull
    @JSONField(name = "ownpay_amt")
    private BigDecimal ownpayAmt;

    /**
     * 自付金额
     */
    @NotNull
    @JSONField(name = "selfpay_amt")
    private BigDecimal selfpayAmt;

    /**
     * 个人账户支付金额
     */
    @JSONField(name = "acct_payamt")
    private BigDecimal acctPayamt;

    /**
     * 救助金支付金额
     */
    @JSONField(name = "ma_amt")
    private BigDecimal maAmt;

    /**
     * 统筹金支付金额
     */
    @JSONField(name = "hifp_payamt")
    private BigDecimal hifpPayamt;

    /**
     * 结算总次数
     */
    @NotNull
    @JSONField(name = "setl_totlnum")
    private Integer setlTotlnum;

    /**
     * 险种：参考字典表
     */
    @NotBlank
    @Length(max = 3)
    @JSONField(name = "insutype")
    private String insutype;

    /**
     * 报销标志：参考字典表
     */
    @NotBlank
    @Length(max = 3)
    @JSONField(name = "reim_flag")
    private String reimFlag;

    /**
     * 异地结算标志：参考字典表
     */
    @NotBlank
    @Length(max = 3)
    @JSONField(name = "out_setl_flag")
    private String outSetlFlag;

    /**
     * 手术操作集合
     */
    @JSONField(name = "fsi_operation_dtos")
    private List<Yb3101InputFsiOperationDto> fsiOperationDtos;

}
