package com.kym.entity.wechat;

import lombok.Data;

import java.util.List;

/**
 * @author skyline
 * @description 查询电子发票
 * @date 2023-10-07 16:02
 */
@Data
public class FapiaoApplications {
    private int total_count;
    private List<FapiaoEntity> fapiao_information;

    @Data
    public static class FapiaoEntity {
        private String fapiao_id;
        /**
         * ISSUE_ACCEPTED: 开票申请已受理
         * ISSUED: 发票已开具
         * REVERSE_ACCEPTED: 冲红申请已受理
         * REVERSED: 发票已冲红
         */
        private String status;

        /**
         * 蓝字发票信息，当发票状态不为ISSUE_ACCEPTED时存在
         */
        private FapiaoInfo blue_fapiao;
        /**
         * 红字发票信息，当发票状态为REVERSED时存在
         */
        private FapiaoInfo red_fapiao;

        /**
         * 电子发票卡券信息
         */
        private CardInfo card_information;

        /**
         * 总价税合计，所有发票行单行金额合计的累加，单位：分
         */
        private int total_amount;
        /**
         * 总税额，所有发票行单行税额的累加，单位：分
         */
        private int tax_amount;
        /**
         * 总金额，所有发票行单行金额的累加，单位：分
         */
        private int amount;
        /**
         * 销售方信息
         */
        private InvoiceBaseInfo.SellerInfo seller_information;
        /**
         * 购买方信息
         */
        private FaPiao.BuyerInformation buyer_information;
        /**
         * 附加信息
         */
        private InvoiceBaseInfo.ExtraInfo extra_information;

        /**
         * 发票行信息
         */
        private List<FapiaoItem> items;
        /**
         * 备注
         */
        private String remark;
    }

    @Data
    public static class FapiaoInfo {
        /**
         * 发票代码
         */
        private String fapiao_code;
        /**
         * 发票号码
         */
        private String fapiao_number;
        /**
         * 校验码
         */
        private String check_code;
        /**
         * 发票票面密码区内容
         */
        private String password;
        /**
         * 开票时间，遵循RFC3339标准格式
         * 2020-07-01T12:00:00+08:00
         */
        private String fapiao_time;
    }

    @Data
    public static class CardInfo {
        private String card_appid;
        private String card_openid;
        private String card_id;
        private String card_code;
        /**
         * INSERT_ACCEPTED: 插卡申请已受理
         * INSERTED: 已插入用户卡包
         * DISCARD_ACCEPTED: 作废申请已受理
         * DISCARDED: 发票卡券已作废
         */
        private String card_status;
    }

    @Data
    public static class FapiaoItem {
        /**
         * 税局侧规定的货物或应税劳务、服务税收分类编码
         */
        private String tax_code;
        /**
         * 由商户自定义的货物或应税劳务、服务名称
         */
        private String goods_name;
        /**
         * 规格型号
         */
        private String specification;
        /**
         * 单位
         */
        private String unit;
        /**
         * 数量，单位为10^-8^，100000000表示数量为1
         */
        private int quantity;
        /**
         * 单价，单位为10^-6^分，100000000表示1元
         */
        private long unit_price;
        /**
         * 单行金额，单位：分
         */
        private int amount;
        /**
         * 单行金额和税费的和，单位:分
         */
        private int tax_amount;
        /**
         * 税率，单位为万分之一，如1300代表13%
         */
        private int tax_rate;
        /**
         * 税收优惠政策标识可选取值：
         * NO_FAVORABLE: 无优惠
         * OUTSIDE_VAT: 不征税
         * VAT_EXEMPT: 免税
         * NORMAL_ZERO_RATED: 普通零税率
         * EXPORT_ZERO_RATED: 出口零税率
         */
        private String tax_prefer_mark;
        /**
         * 指定该发票行是否折扣行，折扣行一定是被折扣行的下一行
         */
        private boolean discount = false;
    }
}
