package cn.iocoder.yudao.module.bpm.controller.admin.business.vo;

import cn.iocoder.yudao.module.bpm.enums.BpmBusinessTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * @Author: jinyd
 * @CreateTime: 2024/8/19  11:53
 * @Description:
 * @Version: 4.0
 */


@Schema(description = "管理后台 - 床位变更记录新增/修改 Request VO")
@Data
public class BedChangeRecordCreateReqVO {

    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14680")
    private Long id;

    @Schema(description = "长者id", example = "23841")
    @NotNull(message = "长者id不能为空")
    private Long elderlyId;

    @Schema(description = "原床位id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20769")
    @NotNull(message = "原床位id不能为空")
    private Long originalId;

    @Schema(description = "原床位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
    @NotEmpty(message = "原床位名称不能为空")
    private String originalName;

    @Schema(description = "变更生效日期", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "变更生效日期不能为空")
    private LocalDate changeDate;


    @Schema(description = "现床位id", example = "16757")
    @NotNull(message = "现床位id不能为空")
    private Long expectId;

    @Schema(description = "现床位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
    @NotEmpty(message = "现床位名称不能为空")
    private String expectName;

    @Schema(description = "收费项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "16757")
    @NotEmpty(message = "收费项目名称不能为空")
    private String categoryName;

    @Schema(description = "收费项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "16757")
    @NotNull(message = "收费项目id不能为空")
    private Long overheadChargeId;


    @Schema(description = "新收费项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "16757")
    @NotNull(message = "新收费项目id不能为空")
    private Long expectOverheadChargeId;


    @Schema(description = "金额", example = "31331")
    private BigDecimal amount;

    /**
     * 实际金额
     */
    @Schema(description = "实际金额", example = "31331")
    private BigDecimal actualAmount;
    /**
     * 折扣金额
     */
    @Schema(description = "折扣金额", example = "31331")
    private BigDecimal discountAmount;
    /**
     * 折扣
     */
    @Schema(description = "折扣", example = "31331")
    private String discount;

    @Schema(description = "是否折扣", example = "7779")
    private Integer isDiscount;

    @Schema(description = "是否包房")
    private Integer isPrivateRoom;

    @Schema(description = "床位变更文件")
    private String changeFiles;

    @Schema(description = "变更原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "不好")
    private String reason;

    /**
     * * 关联 {@link BpmBusinessTypeEnum}
     */
    @Schema(description = "申请类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "4-床位变更")
    @NotNull(message = "申请类型不能为空")
    private Integer type;

    @Schema(description = "流程实例的编号", example = "11303")
    private String processInstanceId;

    @Schema(description = "发起人自选审批人 Map", example = "{taskKey1: [1, 2]}")
    private Map<String, List<Long>> startUserSelectAssignees;

    @Schema(description = "业务ID，老人退住申请记录id", example = "6489")
    private Long businessId;

    @Schema(description = "业务ID2", example = "6489")
    private Long businessId2;

    private Long tenantId;

    /**
     * 原始金额
     */
    private BigDecimal originalAmount;
    @Schema(description = "滞后至月份", example = "2026-01")
    private String hysteresisMonth;

}
