package com.ruoyi.lsfx.domain.response;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 获取银行流水响应(匹配新文档6.5节)
 */
@Data
public class GetBankStatementResponse {

    /** 返回码 */
    private String code;

    /** 状态 */
    private String status;

    /** 成功标识 */
    private Boolean successResponse;

    /** 响应数据 */
    private BankStatementData data;

    @Data
    public static class BankStatementData {
        /** 流水列表 */
        private List<BankStatementItem> bankStatementList;

        /** 总条数 */
        private Integer totalCount;
    }

    @Data
    public static class BankStatementItem {
        // ===== 账号相关信息 =====

        /** 流水ID */
        private Long bankStatementId;

        /** 企业ID */
        private Integer leId;

        /** 账号ID */
        private Long accountId;

        /** 企业账号名称 */
        private String leName;

        /** 企业银行账号 */
        private String accountNo;

        /** 账号日期ID */
        private Integer accountingDateId;

        /** 账号日期 */
        private String accountingDate;

        /** 交易日期 */
        private String trxDate;

        /** 币种 */
        private String currency;

        // ===== 交易金额 =====

        /** 付款金额 */
        private BigDecimal drAmount;

        /** 收款金额 */
        private BigDecimal crAmount;

        /** 余额 */
        private BigDecimal balanceAmount;

        /** 交易金额 */
        private BigDecimal transAmount;

        // ===== 交易类型和标志 =====

        /** 交易类型 */
        private String cashType;

        /** 交易标志位 */
        private String transFlag;

        /** 分类ID */
        private Integer transTypeId;

        /** 异常类型 */
        private String exceptionType;

        // ===== 对手方信息 =====

        /** 对手方企业ID */
        private Integer customerId;

        /** 对手方企业名称 */
        private String customerName;

        /** 对手方账号 */
        private String customerAccountNo;

        /** 对手方银行 */
        private String customerBank;

        /** 对手方备注 */
        private String customerReference;

        /** 交易对手方证件号 */
        private String customerCertNo;

        /** 交易对手方统一社会信用代码 */
        private String customerSocialCreditCode;

        // ===== 摘要和备注 =====

        /** 用户交易摘要 */
        private String userMemo;

        /** 银行交易摘要 */
        private String bankComments;

        /** 银行交易号 */
        private String bankTrxNumber;

        // ===== 银行信息 =====

        /** 所属银行缩写 */
        private String bank;

        // ===== 其他字段 =====

        /** 是否为内部交易 */
        private Integer internalFlag;

        /** 上传logId */
        private Integer batchId;

        /** 上传序号 */
        private Integer uploadSequnceNumber;

        /** 项目id */
        private Integer groupId;

        /** 覆盖标识 */
        private Long overrideBsId;

        /** 交易方式 */
        private String paymentMethod;

        /** 客户账号掩码号 */
        private String cretNo;

        // ===== 附加字段 =====

        /** 附件数量 */
        private Integer attachments;

        /** 评论数 */
        private Integer commentsNum;

        /** 归档标志 */
        private Integer archivingFlag;

        /** 下付款标志 */
        private Integer downPaymentFlag;

        /** 源目录ID */
        private Integer sourceCatalogId;

        /** 拆分标志 */
        private Integer split;

        /** 子流水ID */
        private Long subBankstatementId;

        /** 待办标志 */
        private Integer toDoFlag;

        /** 转换金额 */
        private BigDecimal transformAmount;

        /** 转换收款金额 */
        private BigDecimal transformCrAmount;

        /** 转换付款金额 */
        private BigDecimal transformDrAmount;

        /** 转换余额 */
        private BigDecimal transfromBalanceAmount;

        /** 交易余额 */
        private BigDecimal trxBalance;

        // ===== 审计字段 =====

        /** 创建时间 */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date createDate;

        /** 创建者 */
        private Long createdBy;
    }
}
