package com.jeeplus.finance.invoice.domain.OMS.fastRed;
import javax.validation.constraints.Pattern;

/**
 * OMS快捷红票信息实体类
 * 对应业务场景：发票冲红操作的参数封装
 * 所有字段均采用 @Pattern 正则校验，规则：^$ 表示允许为空，| 分隔所有合法有效值
 */
public class OMSFastRedInvoiceInfo {

    /**
     * 组织代码（必填）
     * 规则：非空 + 最大长度20位，支持任意字符
     */
    @Pattern(regexp = "^[\\s\\S]{1,20}$", message = "组织代码deptCode为必填项，且长度不能超过20位")
    private String deptCode;

    /**
     * 发票代码
     * 规则：可为空，若传值则为12位纯数字
     */
    @Pattern(regexp = "^$|^\\d{12}$", message = "发票代码invcode只能传入：空 或 12位纯数字")
    private String invcode;

    /**
     * 发票号码
     * 规则：可为空，若传值则为8位纯数字
     */
    @Pattern(regexp = "^$|^\\d{8}$", message = "发票号码invno只能传入：空 或 8位纯数字")
    private String invno;

    /**
     * 数电发票号码
     * 规则：可为空，若传值则为20位纯数字
     */
    @Pattern(regexp = "^$|^\\d{20}$", message = "数电发票号码allEinvno只能传入：空 或 20位纯数字")
    private String allEinvno;

    /**
     * 冲红原因
     * 规则：可为空，若传值只能是 01/02/03/04
     * 可选值：01-开票有误，02-销货退回，03-服务中止，04-销售折让
     */
    @Pattern(regexp = "^$|01|02|03|04", message = "冲红原因redReason只能传入：空 或 01 或 02 或 03 或 04")
    private String redReason;

    /**
     * 红字确认信息单编号
     * 规则：可为空，若传值则为32位纯数字
     */
    @Pattern(regexp = "^$|^\\d{32}$", message = "红字确认信息单编号redNo只能传入：空 或 32位纯数字")
    private String redNo;

    /**
     * 红字发票类型
     * 规则：可为空，若传值为指定枚举值
     */
    @Pattern(regexp = "^$|01|02|03|04|83|84|87|88", message = "红字发票类型redInvType只能传入：空 或 01 或 02 或 03 或 04 或 83 或 84 或 87 或 88")
    private String redInvType;

    /**
     * 开票员
     * 规则：可为空，若传值则最大长度20位，支持任意字符
     */
    @Pattern(regexp = "^$|^[\\s\\S]{1,20}$", message = "开票员drawer只能传入：空 或 长度不超过20位的任意字符")
    private String drawer;

    public String getDeptCode() {
        return deptCode;
    }

    public void setDeptCode(String deptCode) {
        this.deptCode = deptCode;
    }

    public String getInvcode() {
        return invcode;
    }

    public void setInvcode(String invcode) {
        this.invcode = invcode;
    }

    public String getInvno() {
        return invno;
    }

    public void setInvno(String invno) {
        this.invno = invno;
    }

    public String getAllEinvno() {
        return allEinvno;
    }

    public void setAllEinvno(String allEinvno) {
        this.allEinvno = allEinvno;
    }

    public String getRedReason() {
        return redReason;
    }

    public void setRedReason(String redReason) {
        this.redReason = redReason;
    }

    public String getRedNo() {
        return redNo;
    }

    public void setRedNo(String redNo) {
        this.redNo = redNo;
    }

    public String getRedInvType() {
        return redInvType;
    }

    public void setRedInvType(String redInvType) {
        this.redInvType = redInvType;
    }

    public String getDrawer() {
        return drawer;
    }

    public void setDrawer(String drawer) {
        this.drawer = drawer;
    }
}
