package com.yhy.module.core.dal.dataobject.workbench;

import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yhy.module.core.dal.typehandler.PostgreSQLJsonbTypeHandler;
import java.util.Map;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 单位工程取费项设定 DO
 * 
 * 存储单位工程级别的取费项覆写值，支持快照功能
 * - 当前值用于业务计算
 * - 基线值用于版本对比和快照
 */
@TableName(value = "yhy_wb_unit_fee_setting", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
public class WbUnitFeeSettingDO extends BaseDO {

    /**
     * 主键ID
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 租户ID
     */
    private Long tenantId;

    /**
     * 分部分项节点ID（关联 yhy_wb_boq_division.id，定额节点）
     */
    private Long divisionId;

    /**
     * 单位工程ID（关联 yhy_wb_unit_info.id，可选，用于快照）
     */
    private Long unitId;

    /**
     * 来源取费项ID（关联 yhy_quota_fee_item.id）
     */
    private Long sourceFeeItemId;

    /**
     * 来源费率项ID（关联 yhy_quota_rate_item.id）
     */
    private Long sourceRateItemId;

    /**
     * 排序值
     */
    private Integer sortOrder;

    /**
     * 名称（覆写值）
     */
    private String name;

    /**
     * 名称基线值（快照）
     */
    private String baseName;

    /**
     * 费率代号（覆写值）
     */
    private String ratePercentage;

    /**
     * 费率代号基线值（快照）
     */
    private String baseRatePercentage;

    /**
     * 代号（覆写值）
     */
    private String code;

    /**
     * 代号基线值（快照）
     */
    private String baseCode;

    /**
     * 费用归属（覆写值）
     */
    private String feeCategory;

    /**
     * 费用归属基线值（快照）
     */
    private String baseFeeCategory;

    /**
     * 基数说明（覆写值）
     */
    private String baseDescription;

    /**
     * 基数说明基线值（快照）
     */
    private String baseBaseDescription;

    /**
     * 计算基数（覆写值，JSONB）
     */
    @TableField(typeHandler = PostgreSQLJsonbTypeHandler.class)
    private Map<String, Object> calcBase;

    /**
     * 计算基数基线值（快照，JSONB）
     */
    @TableField(typeHandler = PostgreSQLJsonbTypeHandler.class)
    private Map<String, Object> baseCalcBase;

    /**
     * 是否隐藏
     */
    private Boolean hidden;

    /**
     * 是否可变
     */
    private Boolean variable;

    /**
     * 是否为系统行（如ZHDJ不可删除）
     */
    private Boolean systemRow;

    /**
     * 是否已删除（软删除标记，用于标记用户删除的行）
     */
    private Boolean userDeleted;
}
