// 开票相关接口定义
export interface ApifoxModel {
    /**
     * 来源系统；，对接不同系统来源编码，用于区分不同系统的回调接口；例如SRM系统，你可以传入SRM
     */
    businessSystemCode: string;
    /**
     * 开票请求参数，需要把data的值加密成字符串，默认为base64
     */
    data: Datum[];
    /**
     * 接口业务编码，接口业务编码，使用BILL.PUSH
     */
    interfaceCode: InterfaceCode;
    /**
     * 时间戳，请求唯一ID，可使用时间戳或UUID如：1624601109096
     */
    requestId: string;
    [property: string]: any;
}

export interface Datum {
    /**
     * 数电账号，[系统]数电账号，数电票时可以传入，非数电传入会清空，发票云版本6.0.2可用
     */
    account?: string;
    /**
     * 申请方，[红字]0：购方申请-发票已抵扣； 1：购方申请-发票未抵扣；2：销方申请；  默认为销方申请【长度：10】
     */
    applicant?: string;
    /**
     * 自动开票标记，[系统]自动开票，0-否，1-是，默认0
     */
    autoInvoice?: string;
    /**
     * 自动合并标记，[系统]自动合并  0-否，1-是，自动开票为1时生效
     */
    autoMerge?: string;
    /**
     * 单据日期，格式：yyyy-MM-dd)；如果为空，则默认为当天日期
     */
    billDate?: string;
    /**
     * 单据明细，单据明细
     */
    billDetail?: BillDetail[];
    /**
     * 整单折扣金额，整单折扣金额
     */
    billDiscountAmount?: number;
    /**
     * 单据编号，参数限制：数字、英文、下划线、-如:Srm_20250518001
     */
    billNo: string;
    /**
     * 购买方名称，[购方]根据购方名称匹配税号、地址电话、开户行账号（如有），不传且需自动开票时，提示：购方名称为空，请补充，不传且不自动开票时，保存为开票申请单
     */
    buyerName?: string;
    /**
     * 购方税号，[购方]（专票必填） 当购买方性质为企业填写税号，当购方性质为个人填写身份证
     */
    buyerTaxpayerId?: string;
    /**
     * 含税标识，含税标识，0-不含税，1-含税【长度：1】，默认为0
     */
    includeTaxFlag?: string;
    /**
     * 发票性质，0：蓝票；1：红票。不填默认蓝票
     */
    invoiceProperty?: string;
    /**
     * 发票种类，未配置票种管理策略时必填枚举值
     */
    invoiceType?: string;
    /**
     * 销方名称，[销方]销方名称，销方税号或销方二选一必填，两者都填，以销方税号为准
     */
    sellerName?: string;
    /**
     * 销方税号，[销方]销方税号。组织编号、销方名称/税号三选一必传 （1）传组织编号，销方信息未传时，根据组织编号找销方信息。 （2）销方税号/销方二选一，两者都填，以销方税号为准。
     */
    sellerTaxpayerId?: string;
    /**
     * 备注，GBK编码230字节【长度：230】
     */
    remark?: string;
    /**
     * 单据金额，单据金额，根据含税标记区分，含税标志是不含税时为不含税金额，含税是含税金额，不传使用明细金额累加。
     */
    totalAmount?: number;
    [property: string]: any;
}

export interface BillDetail {
    /**
     * 明细金额，明细金额，含税标识includeTaxFlag=1时该金额为含税金额
     */
    amount: number;
    /**
     * 业务系统明细id，业务系统明细id，用于反写回原业务系统明细 【长度：50】
     */
    detailId: string;
    /**
     * 商品编码，商品编码，与商品名称2填1，需提前在系统维护
     */
    goodsCode?: string;
    /**
     * 商品名称，商品名称，与商品编码2填1，需提前在系统维护【长度：GBK92字节】
     */
    goodsName?: string;
    /**
     * 行性质，行性质，1折扣行(折扣行必须紧跟被折扣的正常商品行)，2正常商品行
     */
    lineProperty: string;
    /**
     * 单价，单价【长度：整数位加小数位最大16位，小数位最多13，小数点占1位】，price有值则quantity必填，含税标识includeTaxFlag=1时该金额为含税金额
     */
    price?: string;
    /**
     * 数量，数量【长度：整数位加小数位最大16位，小数位最多13，小数点占1位】，quantity有值则price必填
     */
    quantity?: string;
    /**
     * 税收分类编码，税收分类编码，开票项补全或映射会补全税收分类编码，未走开票项补全或映射必填
     */
    revenueCode?: string;
    /**
     * 规格型号，规格型号，【长度：GBK40字节】
     */
    specification?: string;
    /**
     * 税额，税额【长度：(14,2)】，可不传，系统自动计算
     */
    taxAmount?: string;
    /**
     * 税率，税率，【0.13，0.09，0.06等】。不传时根据开票项匹配税率
     */
    taxRate?: string;
    /**
     * 计量单位，计量单位，【长度：GBK22字节】
     */
    units?: string;
    [property: string]: any;
}

export enum InterfaceCode {
    BillPush = "BILL.PUSH",
}