package com.tofly.dzfp.entity.Invoice;

import lombok.Data;

import java.util.List;

/**
 * @author lihaoli
 * @date 2024/11/15
 */
@Data
public class InvoiceMain {
    /**
     * 购方名称
     */
    private String buyerName;//购方名称
    /**
     * 购方税号（企业要填，个人可为空；数电专票、二手车销售统一发票时必填）
     */
    private String buyerTaxNum; //购方税号
    /**
     * 购方电话（购方地址+电话总共不超100字符；二手车销售统一发票时必填）
     */
    private String buyerTel;
    /**
     * 购方地址（购方地址+电话总共不超100字符；二手车销售统一发票时必填）
     */
    private String buyerAddress;
    /**
     * 购方银行开户行及账号
     */
    private String buyerAccount;
    /**
     * 销方税号（使用沙箱环境请求时消息体参数salerTaxNum和消息头参数userTax填写339902999999789113）
     */
    private String salerTaxNum;
    /**
     * 销方电话（在诺税通saas工作台配置过的可以不传，以传入的为准）
     */
    private String salerTel;
    /**
     * 销方地址（在诺税通saas工作台配置过的可以不传，以传入的为准）
     */
    private String salerAddress;
    /**
     * 销方银行开户行及账号(二手车销售统一发票时必填)
     */
    private String salerAccount;
    /**
     * 不传默认为0：都不显示；传1：备注仅显示销方开户行及账号；传2：备注仅显示购方开户行及账号；传3：购销方开户行及账号都显示（此字段仅在数电普票和数电专票下生效）
     */
    private String showBankAccountType;

    /**
     * 清单标志：非清单:0；清单:1，默认:0，电票固定为0
     */
    private int listFlag;

    /**
     * 推送方式：-1,不推送;0,邮箱;1,手机（默认）;2,邮箱、手机
     */
    private String pushMode;
    /**
     * 购方手机（pushMode为1或2时，此项为必填，同时受企业资质是否必填控制）
     */
    private String buyerPhone;
    /**
     * 推送邮箱（pushMode为0或2时，此项为必填，同时受企业资质是否必填控制）
     */
    private String email;
    /**
     * 开票类型：1:蓝票;2:红票 （数电票冲红请对接数电快捷冲红接口）
     */
    private int invoiceType;
    /**
     * 普通发票(电票)(默认)bs:电子发票(增值税专用发票)-即数电专票(电子),pc:电子发票(普通发票)-即数电普票(电子)
     */
    private String invoiceLine;

    /**
     * 数电票类型
     */
    private String paperInvoiceType;

    /**
     * 数电电票是否展示收款人和复核人，0：不显示 1：显示
     */
    private String showCheckerType;

    /**
     * 冲红时，在备注中注明“对应正数发票代码:XXXXXXXXX号码:YYYYYYYY”文案，其中“X”为发票代码，“Y”为发票号码，可以不填，接口会自动添加该文案；机动车发票蓝票时备注只能为空；数电票时最长为200字符
     */
    private String remark;

    /**
     * 开票员（数电票时需要传入和开票登录账号对应的开票员姓名）
     */
    private String clerk;

    /**
     * 分机号（只能为空或者数字）
     */
    private String extensionNumber;

    /**
     * 订单号（每个企业唯一）
     */
    private String orderNo;

    /**
     * 订单时间
     */
    private String invoiceDate;

    /**
     * 红字信息表编号.专票冲红时此项必填，且必须在备注中注明“开具红字增值税专用发票信息表编号ZZZZZZZZZZZZZZZZ”字样，
     * 其中“Z”为开具红字增值税专用发票所需要的长度为16位信息表编号（建议16位，最长可支持24位）。
     */
    private String billInfoNo;

    /**
     * 冲红时填写的对应蓝票发票代码（红票必填 10位或12 位， 11位的时候请左补 0）
     */
    private String invoiceCode;

    /**
     * 冲红时填写的对应蓝票发票号码（红票必填，不满8位请左补0）
     */
    private String invoiceNum;

    /**
     * 特定要素：0普通发票（默认）、1 成品油 、2 稀土（仅支持s、bs票种且编码必须为稀土产品目录中的商品）、3 建筑服务、
     * 4 货物运输服务、5 不动产销售、6 不动产经营租赁服务、9 旅客运输服务、12 自产农产品销售、16 农产品收购、31 建安发票 、
     * 32 房地产销售发票、33 二手车发票反向开具、 34 电子烟、 35 矿产品
     */
    private String specificFactor;

    /**
     * 发票明细，支持填写商品明细最大2000行（包含折扣行、被折扣行）
     */
    private List<InvoiceDetail> invoiceDetail;


    /**
     * 开具建筑服务特定要素的数电票才需要传（specificFactor 为 3时）；注：数电建筑服务发票 只能有 一条明细 且 规格型号、单位、数量、单价 都不能有值
     */
    private InvoiceBuildingInfo invoiceBuildingInfo;
}
