package com.yifu.cloud.plus.v1.yifu.archives.vo;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.RowIndex;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

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

/**
 * 社保待购买表
 *
 * @author huych
 * @date 2025-09-30 16:40:07
 */
@Data
public class TDispatchInfoPreVo extends RowIndex implements Serializable {

	/**
	 * ID
	 */
	@ExcelAttribute(name = "ID")
	@Schema(description = "ID")
	@ExcelProperty("ID")
	private String id;
	/**
	 * 员工姓名
	 */
	@ExcelAttribute(name = "员工姓名")
	@Schema(description = "员工姓名")
	@ExcelProperty("员工姓名")
	private String empName;
	/**
	 * 员工身份证
	 */
	@ExcelAttribute(name = "员工身份证")
	@Schema(description = "员工身份证")
	@ExcelProperty("员工身份证")
	private String empIdcard;
	/**
	 * 手机号码
	 */
	@ExcelAttribute(name = "手机号码", maxLength = 20)
	@Length(max = 20, message = "手机号码不能超过20个字符")
	@ExcelProperty("手机号码")
	@Schema(description = "手机号码")
	private String phone;
	/**
	 * 社保购买状态，0待确认，1待派单，2派单失败，3待审核，4审核不通过，5待办理，6办理中，7办理成功，8办理失败，9部分办理失败
	 */
	@ExcelAttribute(name = "社保购买状态")
	@Schema(description = "社保购买状态，0待确认，1待派单，2派单失败，3待审核，4审核不通过，5待办理，6办理中，7办理成功，8办理失败，9部分办理失败")
	@ExcelProperty("社保购买状态")
	private String processStatus;
	/**
	 * 项目id
	 */
	@ExcelAttribute(name = "项目id")
	@Schema(description = "项目id")
	@ExcelProperty("项目id")
	private String deptId;
	/**
	 * 社保缴纳地-省
	 */
	@ExcelAttribute(name = "社保缴纳地-省")
	@Schema(description = "社保缴纳地-省")
	@ExcelProperty("社保缴纳地-省")
	private String socialProvince;
	/**
	 * 社保缴纳地-市
	 */
	@ExcelAttribute(name = "社保缴纳地-市")
	@Schema(description = "社保缴纳地-市")
	@ExcelProperty("社保缴纳地-市")
	private String socialCity;
	/**
	 * 社保缴纳地-县
	 */
	@ExcelAttribute(name = "社保缴纳地-县")
	@Schema(description = "社保缴纳地-县")
	@ExcelProperty("社保缴纳地-县")
	private String socialTown;
	/**
	 * 社保缴纳地-省
	 */
	@ExcelAttribute(name = "社保缴纳地-省id")
	@ExcelProperty("社保缴纳地-省")
	@Schema(description = "社保缴纳地-省")
	private String socialProvinceId;
	/**
	 * 社保缴纳地-市
	 */
	@ExcelAttribute(name = "社保缴纳地-市")
	@ExcelProperty("社保缴纳地-市")
	@Schema(description = "社保缴纳地-市")
	private String socialCityId;
	/**
	 * 社保缴纳地-县
	 */
	@ExcelAttribute(name = "社保缴纳地-县")
	@ExcelProperty("社保缴纳地-县")
	@Schema(description = "社保缴纳地-县")
	private String socialTownId;
	/**
	 * 公积金缴纳地-省
	 */
	@ExcelAttribute(name = "公积金缴纳地-省")
	@Schema(description = "公积金缴纳地-省")
	@ExcelProperty("公积金缴纳地-省")
	private String fundProvince;
	/**
	 * 公积金缴纳地-市
	 */
	@ExcelAttribute(name = "公积金缴纳地-市")
	@Schema(description = "公积金缴纳地-市")
	@ExcelProperty("公积金缴纳地-市")
	private String fundCity;
	/**
	 * 公积金缴纳地-县
	 */
	@ExcelAttribute(name = "公积金缴纳地-县")
	@Schema(description = "公积金缴纳地-县")
	@ExcelProperty("公积金缴纳地-县")
	private String fundTown;
	/**
	 * 派单项：如 养老、公积金
	 */
	@ExcelAttribute(name = "派单项")
	@Schema(description = "派单项：如 养老、公积金")
	@ExcelProperty("派单项")
	private String dispatchItem;
	/**
	 * 项目名称
	 */
	@ExcelAttribute(name = "项目名称")
	@Schema(description = "项目名称")
	@ExcelProperty("项目名称")
	private String deptName;
	/**
	 * 项目编码
	 */
	@ExcelAttribute(name = "项目编码")
	@Schema(description = "项目编码")
	@ExcelProperty("项目编码")
	private String deptNo;
	/**
	 * 公积金户名称
	 */
	@ExcelAttribute(name = "公积金户名称")
	@Schema(description = "公积金户名称")
	@ExcelProperty("公积金户名称")
	private String providentHouseholdName;
	/**
	 * 社保户名称
	 */
	@ExcelAttribute(name = "社保户名称")
	@Schema(description = "社保户名称")
	@ExcelProperty("社保户名称")
	private String socialHouseholdName;
	/**
	 * 0社保1公积金
	 */
	@ExcelAttribute(name = "0社保1公积金")
	@Schema(description = "0社保1公积金")
	@ExcelProperty("0社保1公积金")
	private String typeSub;
	/**
	 * 接收方式
	 */
	@Schema(description = "接收方式 0项目配置 1自定义")
	private String receiveType;
	/**
	 * 备案基数
	 */
	@ExcelAttribute(name = "备案基数")
	@Schema(description = "备案基数")
	@ExcelProperty("备案基数")
	private String recordBase;
	/**
	 * 备案基数类型 0固定值 1自定义
	 */
	@ExcelAttribute(name = "备案基数类型")
	@Schema(description = "备案基数类型 0固定值 1自定义")
	@ExcelProperty("备案基数类型")
	private String recordBaseType;
	/**
	 * 入职日期
	 */
	@ExcelAttribute(name = "入职日期", isDate = true)
	@Schema(description = "入职日期")
	@ExcelProperty("入职日期")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date joinLeaveDate;
	/**
	 * 前端客服姓名
	 */
	@ExcelAttribute(name = "前端客服姓名")
	@Schema(description = "前端客服姓名")
	@ExcelProperty("前端客服姓名")
	private String customerUsername;
	/**
	 * 前端客服登录名
	 */
	@ExcelAttribute(name = "前端客服登录名")
	@Schema(description = "前端客服登录名")
	@ExcelProperty("前端客服登录名")
	private String customerUserLoginName;
	/**
	 * 预计派单时间
	 */
	@ExcelAttribute(name = "预计派单时间", isDate = true)
	@Schema(description = "预计派单时间")
	@ExcelProperty("预计派单时间")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date expectedCollectionTime;
	/**
	 * 预计派单时间:社保（入职日期当天 0 入职一个月 1 ...）公积金（起缴日期当日）
	 */
	@Schema(description = "预计派单类型 入职日期当天 0 入职一个月 1 ...")
	private String expectedCollectionType;
	/**
	 * 派单确认时间
	 */
	@ExcelAttribute(name = "派单确认时间", isDate = true)
	@Schema(description = "派单确认时间")
	@ExcelProperty("派单确认时间")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date expectedConfirmTime;
	/**
	 * 是否自动触发派增 0 是 1否
	 */
	@ExcelAttribute(name = "是否自动触发派增")
	@Schema(description = "是否自动触发派增 0 是 1否")
	@ExcelProperty("是否自动触发派增")
	private String isAutoDis;
	/**
	 * 起缴日期是否一致 0 是 1否
	 */
	@ExcelAttribute(name = "起缴日期是否一致")
	@Schema(description = "起缴日期是否一致 0 是 1否")
	@ExcelProperty("起缴日期是否一致")
	private String isCreateDate;
	/**
	 * 配置名称
	 */
	@ExcelAttribute(name = "配置名称")
	@Schema(description = "配置名称")
	@ExcelProperty("配置名称")
	private String configName;
	/**
	 * 配置id
	 */
	@ExcelAttribute(name = "配置id")
	@Schema(description = "配置id")
	@ExcelProperty("配置id")
	private String configId;
	/**
	 * 入职确认信息主表id
	 */
	@ExcelAttribute(name = "入职确认信息主表id")
	@Schema(description = "入职确认信息主表id")
	@ExcelProperty("入职确认信息主表id")
	private String registerId;

	/**
	 * 起缴日期类型：0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月  8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
	 * 原：0 入职日期 1 入职满1年次月 2 人员自定义
	 */
	@ExcelAttribute(name = "起缴日期类型", maxLength = 2)
	@Length(max = 2, message = "起缴日期类型不能超过2个字符")
	@ExcelProperty("起缴日期类型")
	@Schema(description = "起缴日期类型：0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月  8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月")
	private String fundDateType;

	/**
	 * 起缴日期类型：0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月  8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月
	 * 原：0 入职日期 1 入职满1年次月 2 人员自定义
	 */
	@ExcelAttribute(name = "起缴日期类型", maxLength = 2)
	@Length(max = 2, message = "起缴日期类型不能超过2个字符")
	@ExcelProperty("起缴日期类型")
	@Schema(description = "起缴日期类型：0 入职日期 1 入职满1个月 2 入职满2个月 3 入职满3个月 4 入职满4个月 5 入职满5个月 6 入职满6个月 7 入职满7个月  8 入职满8个月 9 入职满9个月 10 入职满10个月 11 入职满11个月 12 入职满12个月")
	private String socialDateType;

	/**
	 * 公积金单位个人比例是否一致(0-是,1-否)
	 */
	@ExcelAttribute(name = "公积金单位个人比例是否一致)", maxLength = 1)
	@Length(max = 1, message = "公积金单位个人比例是否一致不能超过1个字符")
	@ExcelProperty("公积金单位个人比例是否一致")
	@Schema(description = "公积金单位个人比例是否一致(0-是,1-否)")
	private String fundPerFlag;


	/**
	 * 起缴日期 (社保起缴日期)
	 *
	 */
	@ExcelAttribute(name = "起缴日期", isDate = true)
	@Schema(description = "起缴日期(社保起缴日期)")
	@ExcelProperty("起缴日期")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date socialStartDate;


	/**
	 * 起缴日期 (公积金起缴日期)
	 */
	@ExcelAttribute(name = "起缴日期", isDate = true)
	@Schema(description = "起缴日期(公积金起缴日期)")
	@ExcelProperty("起缴日期")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date fundStartDate;

	/**
	 * 养老起缴日期
	 */
	@ExcelAttribute(name = "养老起缴日期", isDate = true)
	@Schema(description = "养老起缴日期")
	@ExcelProperty("养老起缴日期")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date pensionStart;
	/**
	 * 医疗起缴日期
	 */
	@ExcelAttribute(name = "医疗起缴日期", isDate = true)
	@Schema(description = "医疗起缴日期")
	@ExcelProperty("医疗起缴日期")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date medicalStart;
	/**
	 * 失业起缴日期
	 */
	@ExcelAttribute(name = "失业起缴日期", isDate = true)
	@Schema(description = "失业起缴日期")
	@ExcelProperty("失业起缴日期")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date unemployStart;
	/**
	 * 工伤起缴日期
	 */
	@ExcelAttribute(name = "工伤起缴日期", isDate = true)
	@Schema(description = "工伤起缴日期")
	@ExcelProperty("工伤起缴日期")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date workInjuryStart;
	/**
	 * 生育起缴日期
	 */
	@ExcelAttribute(name = "生育起缴日期", isDate = true)
	@Schema(description = "生育起缴日期")
	@ExcelProperty("生育起缴日期")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date birthStart;
	/**
	 * 大病起缴日期
	 */
	@ExcelAttribute(name = "大病起缴日期", isDate = true)
	@Schema(description = "大病起缴日期")
	@ExcelProperty("大病起缴日期")
	@JsonFormat(shape= JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
	private Date bigailmentStart;
	/**
	 * 委托备注
	 */
	@ExcelAttribute(name = "委托备注")
	@Schema(description = "委托备注")
	@ExcelProperty("委托备注")
	private String trustRemark;
	/**
	 * 养老基数
	 */
	@ExcelAttribute(name = "养老基数")
	@Schema(description = "养老基数")
	@ExcelProperty("养老基数")
	private BigDecimal pensionCardinal;
	/**
	 * 医疗基数
	 */
	@ExcelAttribute(name = "医疗基数")
	@Schema(description = "医疗基数")
	@ExcelProperty("医疗基数")
	private BigDecimal medicalCardinal;
	/**
	 * 失业基数
	 */
	@ExcelAttribute(name = "失业基数")
	@Schema(description = "失业基数")
	@ExcelProperty("失业基数")
	private BigDecimal unemploymentCardinal;
	/**
	 * 大病救助基数
	 */
	@ExcelAttribute(name = "大病救助基数")
	@Schema(description = "大病救助基数")
	@ExcelProperty("大病救助基数")
	private BigDecimal bigailmentCardinal;
	/**
	 * 工伤基数
	 */
	@ExcelAttribute(name = "工伤基数")
	@Schema(description = "工伤基数")
	@ExcelProperty("工伤基数")
	private BigDecimal workInjuryCardinal;

	/**
	 * 养老基数上限
	 */
	@ExcelAttribute(name = "养老基数上限")
	@Schema(description = "养老基数上限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("养老基数上限")
	private BigDecimal upPersion;

	/**
	 * 医疗基数上限
	 */
	@ExcelAttribute(name = "医疗基数上限")
	@Schema(description = "医疗基数上限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("医疗基数上限")
	private BigDecimal upMedical;

	/**
	 * 失业基数上限
	 */
	@ExcelAttribute(name = "失业基数上限")
	@Schema(description = "失业基数上限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("失业基数上限")
	private BigDecimal upUnemployment;

	/**
	 * 工伤基数上限
	 */
	@ExcelAttribute(name = "工伤基数上限")
	@Schema(description = "工伤基数上限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("工伤基数上限")
	private BigDecimal upInjury;

	/**
	 * 生育基数上限
	 */
	@ExcelAttribute(name = "生育基数上限")
	@Schema(description = "生育基数上限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("生育基数上限")
	private BigDecimal upBirth;

	/**
	 * 大病基数上限
	 */
	@ExcelAttribute(name = "大病基数上限")
	@Schema(description = "大病基数上限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("大病基数上限")
	private BigDecimal upBig;

	/**
	 * 养老基数下限
	 */
	@ExcelAttribute(name = "养老基数下限")
	@Schema(description = "养老基数下限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("养老基数下限")
	private BigDecimal lowerPersion;

	/**
	 * 医疗基数下限
	 */
	@ExcelAttribute(name = "医疗基数下限")
	@Schema(description = "医疗基数下限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("医疗基数下限")
	private BigDecimal lowerMedical;

	/**
	 * 失业基数下限
	 */
	@ExcelAttribute(name = "失业基数下限")
	@Schema(description = "失业基数下限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("失业基数下限")
	private BigDecimal lowerUnemployment;

	/**
	 * 工伤基数下限
	 */
	@ExcelAttribute(name = "工伤基数下限")
	@Schema(description = "工伤基数下限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("工伤基数下限")
	private BigDecimal lowerInjury;

	/**
	 * 生育基数下限
	 */
	@ExcelAttribute(name = "生育基数下限")
	@Schema(description = "生育基数下限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("生育基数下限")
	private BigDecimal lowerBirth;

	/**
	 * 大病基数下限
	 */
	@ExcelAttribute(name = "大病基数下限")
	@Schema(description = "大病基数下限")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("大病基数下限")
	private BigDecimal lowerBig;

	/**
	 * 生育基数
	 */
	@ExcelAttribute(name = "生育基数")
	@Schema(description = "生育基数")
	@ExcelProperty("生育基数")
	private BigDecimal birthCardinal;
	/**
	 * 缴纳类型（0最低缴纳、1自定义缴纳、2最高缴纳 （3固定基数--公积金特有））
	 */
	@ExcelAttribute(name = "缴纳类型")
	@Schema(description = "缴纳类型（0最低缴纳、1自定义缴纳、2最高缴纳）")
	@ExcelProperty("缴纳类型")
	private String paymentType;
	/**
	 * 合同签署状态 0已签署 1未签署
	 */
	@ExcelAttribute(name = "合同签署状态")
	@Schema(description = "合同签署状态 0已签署 1未签署")
	@ExcelProperty("合同签署状态")
	private String contractStatus;
	/**
	 * 就职岗位
	 */
	@Length(max = 50, message = "就职岗位 不能超过50 个字符")
	@ExcelAttribute(name = "就职岗位", maxLength = 50)
	@Schema(description = "就职岗位")
	@ExcelProperty("就职岗位")
	private String position;
	/**
	 * 合同id
	 */
	@ExcelAttribute(name = "合同id")
	@Schema(description = "合同id")
	@ExcelProperty("合同id")
	private String contractId;

	@Schema(description = "创建人-姓名")
	private String createName;

	@Schema(description = "创建人")
	private String createBy;

	@Schema(description = "更新人")
	private String updateBy;

	/**
	 * 基数上限（社保或公积金）
	 */
	@ExcelAttribute(name = "基数上限（社保或公积金）" )
	@Schema(description = "基数上限（社保或公积金）" )
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("基数上限（社保或公积金）" )
	private BigDecimal upperLimit;
	/**
	 * 基数下限（社保或公积金）
	 */
	@ExcelAttribute(name = "基数下限（社保或公积金）" )
	@Schema(description = "基数下限（社保或公积金）" )
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("基数下限（社保或公积金）" )
	private BigDecimal lowerLimit;

	/**
	 * 公积金基数
	 */
	@ExcelAttribute(name = "公积金基数")
	@ExcelProperty("公积金基数")
	@Schema(description = "公积金基数")
	private BigDecimal providentCardinal;
	/**
	 * 单位公积金比例
	 */
	@ExcelAttribute(name = "单位公积金比例")
	@Schema(description = "单位公积金比例")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("单位公积金比例")
	private BigDecimal unitProvidentPer;
	/**
	 * 个人公积金比例
	 */
	@ExcelAttribute(name = "个人公积金比例")
	@Schema(description = "个人公积金比例")
	@HeadFontStyle(fontHeightInPoints = 11)
	@ExcelProperty("个人公积金比例")
	private BigDecimal personalProvidentPer;

	/**
	 * 公积金缴纳地-省Id
	 */
	@ExcelAttribute(name = "公积金缴纳地-省Id", maxLength = 32)
	@Length(max = 32, message = "公积金缴纳地-省Id不能超过32个字符")
	@ExcelProperty("公积金缴纳地-省Id")
	@Schema(description = "公积金缴纳地-省Id")
	private String fundProvinceId;
	/**
	 * 公积金缴纳地-市Id
	 */
	@ExcelAttribute(name = "公积金缴纳地-市Id", maxLength = 32)
	@Length(max = 32, message = "公积金缴纳地-市不能超过32个字符")
	@ExcelProperty("公积金缴纳地-市Id")
	@Schema(description = "公积金缴纳地-市Id")
	private String fundCityId;

	/**
	 * 公积金缴纳地-县Id
	 */
	@ExcelAttribute(name = "公积金缴纳地-县Id", maxLength = 32)
	@Length(max = 32, message = "公积金缴纳地-县Id不能超过32个字符")
	@ExcelProperty("公积金缴纳地-县Id")
	@Schema(description = "公积金缴纳地-县Id")
	private String fundTownId;

	/**
	 * 公积金户ID
	 */
	@ExcelAttribute(name = "公积金户ID", maxLength = 50)
	@Length(max = 50, message = "公积金户ID不能超过50个字符")
	@ExcelProperty("公积金户ID")
	@Schema(description = "公积金户ID")
	private String configHouseId;

}
