package cn.superdesk.uniorder.openapicall.thirdpart.szhtxx.paperInvoice.dto.request.SID1SingleBilling;

import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;


/**
 * @Description: Java类作用描述
 * @Author: linjinyu
 * @CreateDate: 2021/12/24 下午2:45
 * @UpdateUser: linjinyu
 * @UpdateDate: 2021/12/24 下午2:45
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
@Data
public class SID1SingleBillingRequestBodyKpContentFptxxVo implements Serializable {

//1. sellerTaxNr string 否 企业税号 可为空
//2. kpdh string 否 开票点号,可为空
//3. kpfwqh string 否 服务器号，可为空
//4. invoiceType int 是 发票种类, 固定值：0：专用发票2：普通发票11：货运发票41: 卷式发票(需含税方式传入)51：电子发票
//5. NcpFlag string 是 特殊票种标识 0:不是 1:农产品销售 2:农产品收购
//6. customerName string 100 是 购方名称普票时，若购方税号为空，则购方名称必填
//7. customerTaxNr string 20 否 购方税号发票种类为普票时可以为空值，专票时为必填
//8. customerAddressTel string 100 否 购方地址电话发票种类为普票时可以为空值，专票时为必填不可带回车或换行符
//9. customerBankAccountNr string 100 否 购方银行账户发票种类为普票时可以为空值，专票时为必填不可带回车或换行符
//10. memo string 230 否 备注专票开具红字发票时，该字段需要填写如下内容：开具红字增值税专用发票信息表编号 XXXXXXXXXXXXXXXXXXXX 表示信息表编号，备注内容为以上那句话，不能有差错，否则无法开具红字发票。普票开具负数发票时，该字段需要填写如下内容：对应正数发票代码 :YYYYYYYY 号 码:ZZZZZZYYYYY：是发票代码ZZZZ:是发票号码普票负数票备注除这句内容外可以有其他内容换行时传 \r\n 或 \n 都会换行。这里的 \r\n 为回车换行符如：传的内容如：1、aa\r\nbb2、aa\nbb3、aabb以上三种方式，都会换行如果传 aa\\nbb则打印会输出 aa\nbb。
//11. payee string 8 是 收款人8 个字节，4个汉字
//12. checker string 8 是 复核人8 个字节，4个汉字
//13. issuer string 8 是 开票人8 个字节，4个汉字（百旺组件空白作废为作废人）
//14. sellerBankAccountNr string 100 否 销方银行账户不可带回车或换行符
//15. sellerAddressTel: string 100 否 销方地址电话不可带回车或换行符
//16. listed boolean 是 清单标志, 固定值false：不开具清单true：开具清单超过 8 行时，系统将自动强制开启清单标志。
//17. documentNr string 100 否 销售单据编号（开具红字发票时，该字段填写信息表编号，为必填项）
//18. CheckEWM int 是 开票标志固定值0：开票1：校验2:空白作废（百旺不支持校验）
//19. invUse string 否 空： 普通2 用于退税3 用于机动车类增值税专用发票开具


//5. NcpFlag string 是 特殊票种标识 0:不是 1:农产品销售 2:农产品收购
//19. invUse string 否 空： 普通2 用于退税3 用于机动车类增值税专用发票开具

    //17. documentNr string 100 否 销售单据编号（开具红字发票时，该字段填写信息表编号，为必填项）
    @ApiModelProperty("fpqqlsh : 发票请求唯一流水号")
    @JsonProperty("documentNr")
    @JSONField(name = "documentNr")
    private String fpqqlsh;

//    @ApiModelProperty("kpxm : 开票项目名称")
//    private String kpxm;

    //18. CheckEWM int 是 开票标志固定值0：开票1：校验2:空白作废（百旺不支持校验）
    @ApiModelProperty("dkbz : 代开标志 0:自开 1:代开 默认:0")
    @JsonProperty("CheckEWM")
    @JSONField(name = "CheckEWM")
    private String dkbz;


    /**************************************** 深圳航信电子票字段 纸质票时没有 start ****************************************/

    //2. kpdh string 否 开票点号,可为空
    //3. kpfwqh string 否 服务器号，可为空
    @JsonIgnore
    @ApiModelProperty("fjh : 分机号--深圳航信电子票-产物-深圳航信纸质票-没有")
    private String fjh;

//    @JsonIgnore
    @ApiModelProperty("xhfmc : 销货方名称--深圳航信电子票-产物-深圳航信纸质票-没有")
    private String xhfmc;


    /**************************************** 深圳航信电子票字段 纸质票时没有 start ****************************************/


    //1. sellerTaxNr string 否 企业税号 可为空
    @ApiModelProperty("xhf_nsrsbh : 销货方纳税人识别号")
    @JsonProperty("sellerTaxNr")
    @JSONField(name = "sellerTaxNr")
    private String xhfNsrsbh;

    //14. sellerBankAccountNr string 100 否 销方银行账户不可带回车或换行符
    @ApiModelProperty("xhf_yhzh : 销货方银行账号")
    @JsonProperty("sellerBankAccountNr")
    @JSONField(name = "sellerBankAccountNr")
    private String xhfYhzh;

    //15. sellerAddressTel: string 100 否 销方地址电话不可带回车或换行符
    @ApiModelProperty("xhf_dzdh : 销货方地址电话")
    @JsonProperty("sellerAddressTel")
    @JSONField(name = "sellerAddressTel")
    private String xhfDzdh;


    //6. customerName string 100 是 购方名称普票时，若购方税号为空，则购方名称必填
    @ApiModelProperty("ghfmc : 购货方名称")
    @JsonProperty("customerName")
    @JSONField(name = "customerName")
    private String ghfmc;

    //7. customerTaxNr string 20 否 购方税号发票种类为普票时可以为空值，专票时为必填
    @ApiModelProperty(" : 购货方纳税人识别号")
    @JsonProperty("customerTaxNr")
    @JSONField(name = "customerTaxNr")
    private String ghfNsrsbh;

    //9. customerBankAccountNr string 100 否 购方银行账户发票种类为普票时可以为空值，专票时为必填不可带回车或换行符
    @ApiModelProperty("ghf_yhzh : 购货方银行账号")
    @JsonProperty("customerBankAccountNr")
    @JSONField(name = "customerBankAccountNr")
    private String ghfYhzh;

    //8. customerAddressTel string 100 否 购方地址电话发票种类为普票时可以为空值，专票时为必填不可带回车或换行符
    @ApiModelProperty("ghf_dzdh : 购货方地址电话")
    @JsonProperty("customerAddressTel")
    @JSONField(name = "customerAddressTel")
    private String ghfDzdh;

    @JsonIgnore
    @ApiModelProperty("ghfqylx : 购货方企业类型;--深圳航信电子票-产物-深圳航信纸质票-没有")
    private String ghfqylx;

    /**************************************** 深圳航信电子票字段 纸质票时没有 start ****************************************/

//    @ApiModelProperty("ghf_sj : 购货方手机(发票交付手机号)--深圳航信电子票-产物-深圳航信纸质票-没有")
//    @JsonProperty("ghf_sj")
//    private String ghfSj;
//    @ApiModelProperty("ghf_email : 购货方邮箱(发票交付邮箱)--深圳航信电子票-产物-深圳航信纸质票-没有")
//    @JsonProperty("ghf_email")
//    private String ghfEmail;

    /**************************************** 深圳航信电子票字段 纸质票时没有   end ****************************************/


    //13. issuer string 8 是 开票人8 个字节，4个汉字（百旺组件空白作废为作废人）
    @ApiModelProperty("kpy : 开票人")
    @JsonProperty("issuer")
    @JSONField(name = "issuer")
    private String kpy;
    //11. payee string 8 是 收款人8 个字节，4个汉字
    @ApiModelProperty("sky : 收款人")
    @JsonProperty("payee")
    @JSONField(name = "payee")
    private String sky;
    //12. checker string 8 是 复核人8 个字节，4个汉字
    @ApiModelProperty("fhr : 复核人")
    @JsonProperty("checker")
    @JSONField(name = "checker")
    private String fhr;

    @JsonIgnore
    @ApiModelProperty("billSentSign : 交付标志--深圳航信电子票-产物-深圳航信纸质票-没有")
    private String billSentSign;

    //16. listed boolean 是 清单标志, 固定值false：不开具清单true：开具清单超过 8 行时，系统将自动强制开启清单标志。
    @ApiModelProperty("qd_bz : 清单标志")
    @JsonProperty("listed")
    @JSONField(name = "listed")
    private String qdBz;

    @JsonIgnore
    @ApiModelProperty("qdxmmc : 清单项目名称--深圳航信电子票-产物-深圳航信纸质票-没有")
    private String qdxmmc;

    @JsonIgnore
    @ApiModelProperty("kplx : 开票类型--深圳航信电子票-产物-深圳航信纸质票-没有")
    private String kplx;

    @JsonIgnore
    @ApiModelProperty("yfp_dm : 原发票代码--深圳航信电子票-产物-深圳航信纸质票-没有")
    @JsonProperty("yfp_dm")
    private String yfpDm;
    @JsonIgnore
    @ApiModelProperty("yfp_hm : 原发票号码--深圳航信电子票-产物-深圳航信纸质票-没有")
    @JsonProperty("yfp_hm")
    private String yfpHm;


//    @JsonIgnore
    @ApiModelProperty("kphjje : 价税合计--深圳航信电子票-产物-深圳航信纸质票-没有")
    private String kphjje;
//    @JsonIgnore
    @ApiModelProperty("hjbhsje : 合计不含税金额--深圳航信电子票-产物-深圳航信纸质票-没有")
    private String hjbhsje;
//    @JsonIgnore
    @ApiModelProperty("hjse : 合计税额--深圳航信电子票-产物-深圳航信纸质票-没有")
    private String hjse;

    //10. memo string 230 否 备注专票开具红字发票时，该字段需要填写如下内容：开具红字增值税专用发票信息表编号 XXXXXXXXXXXXXXXXXXXX 表示信息表编号，备注内容为以上那句话，不能有差错，否则无法开具红字发票。普票开具负数发票时，该字段需要填写如下内容：对应正数发票代码 :YYYYYYYY 号 码:ZZZZZZYYYYY：是发票代码ZZZZ:是发票号码普票负数票备注除这句内容外可以有其他内容换行时传 \r\n 或 \n 都会换行。这里的 \r\n 为回车换行符如：传的内容如：1、aa\r\nbb2、aa\nbb3、aabb以上三种方式，都会换行如果传 aa\\nbb则打印会输出 aa\nbb。
    @ApiModelProperty("备注^_^增值税发票红字发票开具时,备注要求:开具负数发票,必须在备注中注明'对应正数发票代码:XXXXXXXXX号码:YYYYYYYY'字样,其中'X'为发票代码,'Y'为发票号码.")
    @JsonProperty("memo")
    @JSONField(name = "memo")
    private String bz;


    /**************************************** 深圳航信电子票字段 纸质票时没有 start ****************************************/

//    @ApiModelProperty("冲红原因 普通发票、电子普通发票、卷票冲红需给出冲红原因。^_^1-销货退回;2-开票有误;3-服务中止;4-销售折让;对于冲红原因为 1、2、3 的，会执行本地校验和联网校验两项检查，只要其中一项检查不通过，不允许开具红票，其它:为空")
//    private Integer redReason;
//    @ApiModelProperty("原蓝字发票的开具日期^_^redReason不为空时，则要求填写原蓝字发票的开具日期，格式:yyyyMMdd, 如:20211230注:如果原开票软件中原蓝票的开票时间不一致时，则以开票软件的为准，不作不一致的提示。")
//    private String  blueInvDate;
//    @ApiModelProperty("原蓝字发票的发票类型^_^redReason不为空时，则要求填写原蓝字发票的发票类型，对应蓝字发票种类主要包括以下4类:2-普通发票;41-卷票;51-电子普通发票;999-其他普通发票(如:通行费发票)")
//    private String  blueInvKind;
//
//    @ApiModelProperty("开具理由^_^规模纳税人(含转登记)、代开、委托代开企业，自 2022-01-01 至 2022-12-31 起 3%、1%、0.5%税率降为免税，此期间依旧开具 3% 或 1% 税率的，需要传入开具理由。")
//    private Integer invReason;
//    @ApiModelProperty("pdf状态回调地址^_^为空时不回调,不为空时回调,若提供的接收回调地址有误,则最多回调三次,回调成功需返回格式{returnCode:'0000',returnMsg:'原因'}其他都视为失败")
//    private String  callBackUrl;

    /**************************************** 深圳航信电子票字段 纸质票时没有   end ****************************************/


    //4. invoiceType int 是 发票种类, 固定值：0：专用发票 2：普通发票 11：货运发票 41: 卷式发票(需含税方式传入) 51：电子发票
    @ApiModelProperty("发票类型^_^0-专票;2-普票;41-卷票;42-二手车;51-电子票;52-电子专票;12-机动车发票;不传默认电子发票")
    @JsonProperty("invoiceType")
    @JSONField(name = "invoiceType")
    private Integer invoiceType;

    //20. invoiceItems 发票明细的父节点，格式可参考示例请求报文
    @JsonProperty("invoiceItems")
    @JSONField(name = "invoiceItems")
    private List<SID1SingleBillingRequestBodyKpContentXmxxItemVo> invoiceItems;
    @JsonProperty("invoiceItems2")
    @JSONField(name = "invoiceItems2")
    private List<SID1SingleBillingRequestBodyKpContentXmxxItemVo> invoiceItems2;
}
