package com.yd.csf.service.model;

import com.baomidou.mybatisplus.annotation.*;
import com.yd.csf.service.annotation.Auditable;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;

import lombok.Data;

/**
 * 保单发佣表
 *
 * @TableName fortune
 */
@TableName(value = "fortune")
@Auditable(table = "fortune", idField = "fortuneBizId")
@Data
public class Fortune {
    /**
     * serial id
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 预计出账业务ID
     */
    private String expectedFortuneBizId;

    /**
     * 应付账款编号
     */
    private String payableNo;

    /**
     * 检核年月 yyyy-MM
     */
    private String reconciliationYearMonth;

    /**
     * 应付款类型 R-关联保单应付款 U-非关联保单应付款
     */
    private String fortuneBizType;

    /**
     * 是否拆分出来的出账 1-是 0-否 2-拆分的原纪录
     */
    private Integer isPart;

    /**
     * 保单发佣批次ID
     */
    private String batchBizId;

    /**
     * 保单发佣业务id
     */
    private String fortuneBizId;

    /**
     * 保单来佣业务id
     */
    private String commissionBizId;

    /**
     * 预计来佣记录业务ID
     */
    private String commissionExpectedBizId;

    /**
     * 保单号
     */
    private String policyNo;

    /**
     * 保单币种
     */
    private String policyCurrency;

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

    /**
     * 发佣总期数
     */
    private Integer fortuneTotalPeriod;

    /**
     * 转介人
     */
    private String broker;

    /**
     * 转介人业务ID
     */
    private String brokerBizId;

    /**
     * 所属团队
     */
    private String team;

    /**
     * 所属团队业务ID
     */
    private String teamBizId;

    /**
     * 个人职级佣金率
     */
    private BigDecimal gradeCommissionRate;

    /**
     * 多个代理人财富分摊比例
     */
    private BigDecimal shareRate;

    /**
     * 来佣名称
     */
    private String fortuneName;

    /**
     * 发佣类型
     */
    private String fortuneType;

    /**
     * 保单币种金额
     */
    private BigDecimal ruleAmount;

    /**
     * 保单币种
     */
    private String ruleCurrency;

    /**
     * 保单币种→港币汇率（入账检核汇率）
     */
    private BigDecimal exchangeRate;

    /**
     * 原币种
     */
    private String originalCurrency;

    /**
     * 原币种金额
     */
    private BigDecimal originalAmount;

    /**
     * 原币种→港币汇率
     */
    private BigDecimal originalToHkdRate;

    /**
     * 发放币种
     */
    private String payoutCurrency;

    /**
     * 发放币种金额
     */
    private BigDecimal payoutAmount;

    /**
     * 港币→发放币种汇率
     */
    private BigDecimal hkdToPayoutRate;

    /**
     * 港币金额
     */
    private BigDecimal hkdAmount;

    /**
     * 本次出账金额
     */
    private BigDecimal currentPaymentAmount;

    /**
     * 本次出账港币金额
     */
    private BigDecimal currentPaymentHkdAmount;

    /**
     * 本次出账比例
     */
    private BigDecimal currentPaymentRatio;

    /**
     * 佣金发放状态 0=待出账 1=可出账 2=已出账
     */
    private String status;

    /**
     * 预计出账日期
     */
    private LocalDate payoutDate;

    /**
     * 实际出账日期
     */
    private LocalDate actualPayoutDate;

    /**
     * 检核人员
     */
    private String reconciliationOperator;

    /**
     * 出账记录业务ID
     */
    private String fortuneAccountBizId;

    /**
     * 是否含税 0=No, 1=Yes
     */
    private Integer isTax;

    /**
     * 应缴税额
     */
    private BigDecimal taxAmount;

    /**
     * 税后发佣
     */
    private BigDecimal netAmount;

    /**
     * 薪资单业务id
     */
    private String salaryBizId;

    /**
     * 基本法id
     */
    private String baseRuleBizId;

    /**
     * 计算规则id
     */
    private String settlementBizId;

    /**
     * 计算公式
     */
    private String calculationFormula;

    /**
     * 基本法项目配置表唯一业务ID
     */
    private String ruleItemBizId;

    /**
     * 通用备注
     */
    private String remark;

    /**
     * 删除标识: 0-正常, 1-删除
     */
    @TableLogic
    private Integer isDeleted;

    /**
     * 创建人ID
     */
    private String creatorId;

    /**
     * 更新人ID
     */
    private String updaterId;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

}