package com.yd.csf.service.model;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * <p>
 * 预计发佣表
 * </p>
 *
 * @author zxm
 * @since 2025-11-17
 */
@Getter
@Setter
@TableName("expected_fortune")
public class ExpectedFortune implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 预计发佣表唯一业务id
     */
    @TableField("expected_fortune_biz_id")
    private String expectedFortuneBizId;

    /**
     * 应付款类型 R-关联保单应付款 U-非关联保单应付款
     */
    @TableField("fortune_biz_type")
    private String fortuneBizType;

    /**
     * 是否拆分出来的出账 1-是 0-否 2-拆分的原纪录
     */
    @TableField("is_part")
    private Integer isPart;

    /**
     * 应付款编号
     */
    @TableField("payable_no")
    private String payableNo;

    /**
     * 保单号
     */
    @TableField("policy_no")
    private String policyNo;

    /**
     * 期交保费
     */
    @TableField("premium")
    private BigDecimal premium;

    /**
     * 保单币种
     */
    @TableField("policy_currency")
    private String policyCurrency;

    /**
     * 保险公司 ID
     */
    @TableField("insurance_company_biz_id")
    private String insuranceCompanyBizId;

    /**
     * 产品上架信息业务ID
     */
    @TableField("product_launch_biz_id")
    private String productLaunchBizId;

    /**
     * 发佣期数(1=第一年; 2=第二年; 3=第三年; 4=第四年; 5=第五年)
     */
    @TableField("fortune_period")
    private Integer fortunePeriod;

    /**
     * 发佣总期数
     */
    @TableField("fortune_total_period")
    private Integer fortuneTotalPeriod;

    /**
     * 转介人名称
     */
    @TableField("broker")
    private String broker;

    /**
     * 转介人业务ID
     */
    @TableField("broker_biz_id")
    private String brokerBizId;

    /**
     * 团队名称
     */
    @TableField("team")
    private String team;

    /**
     * 所属团队业务ID
     */
    @TableField("team_biz_id")
    private String teamBizId;

    /**
     * 发佣名称
     */
    @TableField("fortune_name")
    private String fortuneName;

    /**
     * 发佣类型
     */
    @TableField("fortune_type")
    private String fortuneType;

    /**
     * 转介人介绍费占比
     */
    @TableField("broker_ratio")
    private String brokerRatio;

    /**
     * 转介人职级比例
     */
    @TableField("broker_level_ratio")
    private BigDecimal brokerLevelRatio;

    /**
     * 标准发佣金额
     */
    @TableField("standard_amount")
    private BigDecimal standardAmount;

    // ========== 保单币种及金额（基本法币种） ==========
    /**
     * 保单币种金额（保单币种金额 = 标准发佣金额 * 转介人介绍费占比）
     */
    @TableField("rule_amount")
    private BigDecimal ruleAmount;

    /**
     * 保单币种
     */
    @TableField("rule_currency")
    private String ruleCurrency;

    /**
     * 累积已发放保单记账金额
     */
    @TableField("paid_rule_amount")
    private BigDecimal paidRuleAmount;

    /**
     * 剩余保单记账金额
     */
    @TableField("unpaid_rule_amount")
    private BigDecimal unpaidRuleAmount;

    /**
     * 剩余发放折合港币金额
     */
    @TableField("unpaid_rule_amount_hkd")
    private BigDecimal unpaidRuleAmountHkd;

    /**
     * 出账状态 0=待出账 1=可出帐 2=可出帐，待检核 3=部分出账 4=保留 5=已失效 6=可出账, 已检核 7=未找到当前预计发佣对应的来佣 字典值: csf_expected_fortune_status
     */
    @TableField("status")
    private String status;

    /**
     * 出账状态-修改理由
     */
    @TableField("status_desc")
    private String statusDesc;

    /**
     * 预计出账日期
     */
    @TableField("payout_date")
    private LocalDate payoutDate;

    /**
     * 实际出账日期
     */
    @TableField("actual_payout_date")
    private LocalDate actualPayoutDate;

    /**
     * 默认保单币种 -> 港币汇率
     */
    @TableField("default_exchange_rate")
    private BigDecimal defaultExchangeRate;


    // ========== 原币种及金额 ==========
    @TableField("original_currency")
    private String originalCurrency;  // 原币种
    @TableField("original_amount")
    private BigDecimal originalAmount; // 原币种金额
    @TableField("original_to_hkd_rate")
    private BigDecimal originalToHkdRate; // 原币→港币汇率


    // ========== 发放币种及金额 ==========
    @TableField("payout_currency")
    private String payoutCurrency;    // 发放币种
    @TableField("payout_amount")
    private BigDecimal payoutAmount;  // 发放币种金额
    @TableField("hkd_to_payout_rate")
    private BigDecimal hkdToPayoutRate; // 港币→发放币汇率


    /**
     * 港币预计出账金额
     */
    @TableField("hkd_amount")
    private BigDecimal hkdAmount;

    /**
     * 已出账金额
     */
    @TableField("paid_amount")
    private BigDecimal paidAmount;

    /**
     * 待出账金额
     */
    @TableField("unpaid_amount")
    private BigDecimal unpaidAmount;

    /**
     * 已出账比例 已出账金额/应出账金额
     */
    @TableField("paid_ratio")
    private BigDecimal paidRatio;

    /**
     * 待出账比例
     */
    @TableField("unpaid_ratio")
    private BigDecimal unpaidRatio;

    /**
     * 是否含税 0=No, 1=Yes
     */
    @TableField("is_tax")
    private Integer isTax;

    /**
     * 应缴税额
     */
    @TableField("tax_amount")
    private BigDecimal taxAmount;

    /**
     * 税后发佣
     */
    @TableField("net_amount")
    private BigDecimal netAmount;

    /**
     * 基本法项目配置表唯一业务ID
     */
    @TableField("rule_item_biz_id")
    private String ruleItemBizId;

    /**
     * 通用备注
     */
    @TableField("remark")
    private String remark;

    /**
     * 删除标识: 0-正常, 1-删除
     */
    @TableField("is_deleted")
    private Integer isDeleted;

    /**
     * 创建人ID
     */
    @TableField(value = "creator_id")
    private String creatorId;

    /**
     * 创建人名称
     */
    @TableField(value = "creator_name")
    private String creatorName;

    /**
     * 更新人ID
     */
    @TableField(value = "updater_id", fill = FieldFill.UPDATE)
    private String updaterId;

    /**
     * 创建时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField("update_time")
    private LocalDateTime updateTime;
}
