-- =============================================
-- 员工社保公积金档案表重新设计
-- 一个社保方案可以绑定多个员工，一个员工绑定一个社保方案
-- =============================================

-- 删除旧表（如果存在）
DROP TABLE IF EXISTS `hrm_employee_social_security`;

-- 创建员工社保公积金档案表
CREATE TABLE IF NOT EXISTS `hrm_employee_social_security` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '档案ID',
    `user_id` bigint NOT NULL COMMENT '系统用户ID',

    -- 绑定的社保公积金方案ID
    `social_security_scheme_id` bigint NOT NULL COMMENT '社保公积金方案ID',

    -- 缴纳基数（员工个性化设置）
    `social_security_base` decimal(12,2) NOT NULL COMMENT '社保缴纳基数',
    `housing_fund_base` decimal(12,2) NOT NULL COMMENT '公积金缴纳基数',

    -- 生效信息
    `effective_date` date NOT NULL COMMENT '生效日期',
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态：0-启用，1-禁用',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_user_effective` (`user_id`, `effective_date`),
    KEY `idx_user_id` (`user_id`),
    KEY `idx_scheme_id` (`social_security_scheme_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HRM员工社保公积金档案表';

-- =============================================
-- 社保公积金方案表（原全局配置表改为方案表）
-- 一个方案可以被多个员工绑定
-- =============================================

-- 删除旧表
DROP TABLE IF EXISTS `hrm_social_security_config`;

-- 创建社保公积金方案表
CREATE TABLE IF NOT EXISTS `hrm_social_security_scheme` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '方案ID',
    `name` varchar(100) NOT NULL COMMENT '方案名称',
    `effective_date` date NOT NULL COMMENT '生效日期',

    -- 养老保险比例
    `pension_company_ratio` decimal(5,4) NOT NULL DEFAULT 0.16 COMMENT '养老保险企业缴纳比例',
    `pension_personal_ratio` decimal(5,4) NOT NULL DEFAULT 0.08 COMMENT '养老保险个人缴纳比例',

    -- 医疗保险比例
    `medical_company_ratio` decimal(5,4) NOT NULL DEFAULT 0.095 COMMENT '医疗保险企业缴纳比例',
    `medical_personal_ratio` decimal(5,4) NOT NULL DEFAULT 0.02 COMMENT '医疗保险个人缴纳比例',

    -- 失业保险比例
    `unemployment_company_ratio` decimal(5,4) NOT NULL DEFAULT 0.005 COMMENT '失业保险企业缴纳比例',
    `unemployment_personal_ratio` decimal(5,4) NOT NULL DEFAULT 0.005 COMMENT '失业保险个人缴纳比例',

    -- 工伤保险比例（仅企业缴纳）
    `work_injury_ratio` decimal(5,4) NOT NULL DEFAULT 0.005 COMMENT '工伤保险企业缴纳比例',

    -- 生育保险比例（仅企业缴纳）
    `maternity_ratio` decimal(5,4) NOT NULL DEFAULT 0.005 COMMENT '生育保险企业缴纳比例',

    -- 公积金比例
    `housing_fund_company_ratio` decimal(5,4) NOT NULL DEFAULT 0.12 COMMENT '公积金企业缴纳比例',
    `housing_fund_personal_ratio` decimal(5,4) NOT NULL DEFAULT 0.12 COMMENT '公积金个人缴纳比例',

    -- 状态
    `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态：0-启用，1-禁用',
    `remark` varchar(500) DEFAULT NULL COMMENT '备注',
    `creator` varchar(64) DEFAULT '' COMMENT '创建者',
    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `updater` varchar(64) DEFAULT '' COMMENT '更新者',
    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
    PRIMARY KEY (`id`),
    KEY `idx_effective_date` (`effective_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HRM社保公积金方案表';

-- =============================================
-- 初始化默认方案
-- =============================================

INSERT INTO `hrm_social_security_scheme`
(`name`, `effective_date`,
 `pension_company_ratio`, `pension_personal_ratio`,
 `medical_company_ratio`, `medical_personal_ratio`,
 `unemployment_company_ratio`, `unemployment_personal_ratio`,
 `work_injury_ratio`, `maternity_ratio`,
 `housing_fund_company_ratio`, `housing_fund_personal_ratio`,
 `status`, `remark`, `creator`, `updater`)
VALUES
('2024年南通市标准', '2024-01-01',
 0.16, 0.08,
 0.095, 0.02,
 0.005, 0.005,
 0.005, 0.005,
 0.12, 0.12,
 0, '2024年南通市社保公积金缴纳标准', '1', '1');

SELECT '员工社保公积金档案表重新设计完成！' AS result;