package com.xinelu.manage.domain.patientinfo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.annotation.Excel;
import com.xinelu.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDate;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
 * 患者信息对象 patient_info
 *
 * @author haown
 * @date 2024-02-26
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "患者信息对象", description = "patient_info")
public class PatientInfo extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    private Long id;

    /**
     * 居民信息表id
     */
    @ApiModelProperty(value = "居民信息表id")
    private Long residentId;

    /**
     * 患者姓名
     */
    @ApiModelProperty(value = "患者姓名")
    @Excel(name = "患者姓名")
    private String patientName;

    /**
     * 患者电话
     */
    @ApiModelProperty(value = "患者电话")
    @Excel(name = "患者电话")
    private String patientPhone;

    /**
     * 家属电话
     */
    @ApiModelProperty(value = "家属电话")
    private String familyMemberPhone;

    /**
     * 出生日期，格式：yyyy-MM-dd
     */
    @ApiModelProperty(value = "出生日期，格式：yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthDate;

    /**
     * 身份证号
     */
    @ApiModelProperty(value = "身份证号")
    private String cardNo;

    /**
     * 性别，男：MALE，女：FEMALE
     */
    @ApiModelProperty(value = "性别，男：MALE，女：FEMALE")
    @Excel(name = "性别，男：MALE，女：FEMALE")
    private String sex;

    /**
     * 住址
     */
    @ApiModelProperty(value = "住址")
    @Excel(name = "住址")
    private String address;

    /**
     * 患者类型，预住院患者：PRE_HOSPITALIZED_PATIENT，在院患者：IN_HOSPITAL_PATIENT，门诊患者：OUTPATIENT，出院患者：DISCHARGED_PATIENT，
     * 签约患者：CONTRACTED_PATIENT
     */
    @ApiModelProperty(value = "患者类型，预住院患者：PRE_HOSPITALIZED_PATIENT，在院患者：IN_HOSPITAL_PATIENT，门诊患者：OUTPATIENT，出院患者：DISCHARGED_PATIENT，签约患者：CONTRACTED_PATIENT")
    private String patientType;

    /**
     * 签约状态，未签约：UN_SIGN,在签：IN_SIGN,解约：SEPARATE_SIGN, 服务到期：EXPIRE_SIGN
     */
    @ApiModelProperty(value = "签约状态，未签约：UN_SIGN,在签：IN_SIGN,解约：SEPARATE_SIGN, 过期：EXPIRE_SIGN")
    private String signStatus;

    @ApiModelProperty(value = "签约记录表id")
    private Long signPatientRecordId;

    /**
     * 服务状态，意向签约：INTENTIONAL_SIGNING，服务中：SERVICE_CENTER，服务结束：SERVICE_END
     */
    @ApiModelProperty(value = "服务状态，意向签约：INTENTIONAL_SIGNING，服务中：SERVICE_CENTER，服务结束：SERVICE_END")
    private String serviceStatus;

    /**
     * 签约时间，格式：yyyy-MM-dd HH:mm:ss
     */
    @ApiModelProperty(value = "签约时间，格式：yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "签约时间，格式：yyyy-MM-dd HH:mm:ss", width = 30, dateFormat = "yyyy-MM-dd")
    private LocalDateTime signTime;

    /**
     * 开证医生（预住院患者）
     */
    @ApiModelProperty(value = "开证医生")
    @Excel(name = "开证医生", readConverterExp = "预住院患者")
    private String certificateIssuingDoctor;

    /**
     * 就诊方式，门诊：OUTPATIENT_SERVICE，住院：BE_IN_HOSPITAL
     */
    @ApiModelProperty(value = "就诊方式，门诊：OUTPATIENT_SERVICE，住院：BE_IN_HOSPITAL")
    @Excel(name = "就诊方式，门诊：OUTPATIENT_SERVICE，住院：BE_IN_HOSPITAL")
    private String visitMethod;

    /**
     * 主治医生id
     */
    @ApiModelProperty(value = "主治医生id")
    @Excel(name = "主治医生id")
    private Long attendingPhysicianId;

    /**
     * 主治医生姓名
     */
    @ApiModelProperty(value = "主治医生姓名")
    @Excel(name = "主治医生姓名")
    private String attendingPhysicianName;

    /**
     * 主要诊断
     */
    @ApiModelProperty(value = "主要诊断")
    private String mainDiagnosis;

    /**
     * 主治医生
     */
    @ApiModelProperty(value = "主治医生")
    @Excel(name = "主治医生")
    private String attendingPhysician;

    /**
     * 所属医院id
     */
    @ApiModelProperty(value = "所属医院id")
    private Long hospitalAgencyId;

    /**
     * 所属医院名称
     */
    @ApiModelProperty(value = "所属医院名称")
    @Excel(name = "所属医院名称")
    private String hospitalAgencyName;

    /**
     * 所属院区id
     */
    @ApiModelProperty(value = "所属院区id")
    private Long campusAgencyId;

    /**
     * 所属院区名称
     */
    @ApiModelProperty(value = "所属院区名称")
    @Excel(name = "所属院区名称")
    private String campusAgencyName;

    /**
     * 所属科室id
     */
    @ApiModelProperty(value = "所属科室id")
    private Long departmentId;

    /**
     * 所属科室名称
     */
    @ApiModelProperty(value = "所属科室名称")
    @Excel(name = "所属科室名称")
    private String departmentName;

    /**
     * 所属病区id
     */
    @ApiModelProperty(value = "所属病区id")
    private Long wardId;

    /**
     * 所属病区名称
     */
    @ApiModelProperty(value = "所属病区名称")
    @Excel(name = "所属病区名称")
    private String wardName;

    /**
     * 住院号
     */
    @ApiModelProperty(value = "住院号")
    @Excel(name = "住院号")
    private String admissionNumber;

    /**
     * 责任护士
     */
    @ApiModelProperty(value = "责任护士")
    private String responsibleNurse;

    /**
     * 最新一条就诊记录id
     */
    @ApiModelProperty(value = "最新一条就诊记录id")
    private Long patientVisitRecordId;

    /**
     * 就诊流水号
     */
    @ApiModelProperty(value = "就诊流水号")
    private String visitSerialNumber;

    /**
     * 入院时间，时间格式：yyyy-MM-dd
     */
    @ApiModelProperty(value = "入院时间")
    private LocalDateTime admissionTime;

    /**
     * 出院时间（出院患者），时间格式：yyyy-MM-dd
     */
    @ApiModelProperty(value = "出院时间（出院患者）")
    private LocalDateTime dischargeTime;

	/**
	 * 最新一次预住院患者表主键
	 */
	private Long patientPreHospitalizationId;

    /**
     * 病历内容
     */
    @ApiModelProperty(value = "病历内容")
    private String medicalRecordContent;

    /**
     * 预约治疗组（取值以及枚举未知？）
     */
    @ApiModelProperty(value = "预约治疗组（取值以及枚举未知？）")
    private String appointmentTreatmentGroup;

    /**
     * 登记号（预住院患者）
     */
    @ApiModelProperty(value = "登记号（预住院患者）")
    private String registrationNo;

    /**
     * 登记日期（预住院患者），时间格式：yyyy-MM-dd
     */
    @ApiModelProperty(value = "登记日期（预住院患者），时间格式：yyyy-MM-dd")
    private LocalDate registrationDate;

    /**
     * 预约时间（预住院患者），时间格式：yyyy-MM-dd
     */
    @ApiModelProperty(value = "预约时间（预住院患者），时间格式：yyyy-MM-dd")
    private LocalDate appointmentDate;

    /**
     * 门诊/住院号
     */
    @ApiModelProperty(value = "门诊/住院号 ")
    @Excel(name = "门诊/住院号 ", readConverterExp = "门诊/住院号 ")
    private String inHospitalNumber;

    /**
     * 门诊号（门诊患者）
     */
    @ApiModelProperty(value = "门诊号")
    @Excel(name = "门诊号", readConverterExp = "门诊患者")
    private String outpatientNumber;

    /**
     * 就诊时间，格式：yyyy-MM-dd HH:mm:ss
     */
    @ApiModelProperty(value = "就诊时间，格式：yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "就诊时间，格式：yyyy-MM-dd HH:mm:ss", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime visitDate;

    /**
     * 出院方式（出院患者）
     */
    @ApiModelProperty(value = "出院方式")
    @Excel(name = "出院方式", readConverterExp = "出院患者")
    private String dischargeMethod;

    /**
     * 微信小程序openid，微信小程序唯一标识
     */
    @ApiModelProperty(value = "微信小程序openid，微信小程序唯一标识")
    private String openId;

    /**
     * 微信unionid，微信小程序和微信公众号统一标识
     */
    @ApiModelProperty(value = "微信unionid，微信小程序和微信公众号统一标识 ")
    private String unionId;

    /**
     * 微信公众号openid，微信众号唯一标识
     */
    @ApiModelProperty(value = "微信公众号openid，微信众号唯一标识 ")
    private String officialAccountOpenId;

    /**
     * 患者来源，微信小程序：WE_CHAT_APPLET，微信公众号：WE_CHAT_OFFICIAL_ACCOUNT，管理端：MANAGE_END
     */
    @ApiModelProperty(value = "患者来源，微信小程序：WE_CHAT_APPLET，微信公众号：WE_CHAT_OFFICIAL_ACCOUNT，管理端：MANAGE_END")
    @Excel(name = "患者来源，微信小程序：WE_CHAT_APPLET，微信公众号：WE_CHAT_OFFICIAL_ACCOUNT，管理端：MANAGE_END")
    private String patientSource;

	/**
	 * 手术名称
	 * */
	@ApiModelProperty(value = "手术名称")
	@Excel(name = "手术名称")
	private String surgicalName;

    /** 删除标识，0：未删除，1：已删除 */
    private Integer delFlag;

    @ApiModelProperty(value = "导入流水号")
    private String sn;

    @ApiModelProperty(value = "年龄")
    private Integer age;

    @ApiModelProperty(value = "导入患者表id")
    private Integer patientInfoImportId;
}
