-- =============================================
-- 社保公积金个税扣除功能 SQL
-- =============================================

-- 1. 社保公积金配置表（全局配置）
CREATE TABLE IF NOT EXISTS `hrm_social_security_config` (
    `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 '公积金个人缴纳比例',
    -- 社保基数上下限
    `social_security_base_min` decimal(12,2) NOT NULL COMMENT '社保基数下限',
    `social_security_base_max` decimal(12,2) NOT NULL COMMENT '社保基数上限',
    -- 公积金基数上下限
    `housing_fund_base_min` decimal(12,2) NOT NULL COMMENT '公积金基数下限',
    `housing_fund_base_max` decimal(12,2) 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`),
    KEY `idx_effective_date` (`effective_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HRM社保公积金配置表';

-- 2. 个税税率配置表（累进税率）
CREATE TABLE IF NOT EXISTS `hrm_tax_rate_config` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置ID',
    `name` varchar(100) NOT NULL COMMENT '配置名称',
    `effective_date` date NOT NULL COMMENT '生效日期',
    `level` tinyint NOT NULL COMMENT '税率级数：1-7',
    `min_amount` decimal(12,2) NOT NULL COMMENT '应纳税所得额下限（含）',
    `max_amount` decimal(12,2) NOT NULL COMMENT '应纳税所得额上限（不含），0表示无上限',
    `tax_rate` decimal(5,4) NOT NULL COMMENT '税率',
    `quick_deduction` decimal(12,2) NOT NULL DEFAULT 0 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`),
    KEY `idx_level` (`level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HRM个税税率配置表';

-- 3. 员工社保公积金档案表
CREATE TABLE IF NOT EXISTS `hrm_employee_social_security` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '档案ID',
    `user_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`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HRM员工社保公积金档案表';

-- =============================================
-- 初始化数据
-- =============================================

-- 初始化社保公积金配置（2024年标准，示例数据）
INSERT INTO `hrm_social_security_config`
(`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`,
 `social_security_base_min`, `social_security_base_max`,
 `housing_fund_base_min`, `housing_fund_base_max`,
 `status`, `remark`, `creator`, `updater`)
VALUES
('2024年社保公积金标准', '2024-01-01',
 0.16, 0.08,   -- 养老：企业16%，个人8%
 0.095, 0.02,  -- 医疗：企业9.5%，个人2%
 0.005, 0.005, -- 失业：企业0.5%，个人0.5%
 0.005, 0.005, -- 工伤0.5%，生育0.5%（仅企业）
 0.12, 0.12,   -- 公积金：企业12%，个人12%
 4494.00, 28017.00, -- 社保基数：下限4494，上限28017
 2420.00, 35091.00, -- 公积金基数：下限2420，上限35091
 0, '2024年南通市社保公积金缴纳标准', '1', '1');

-- 初始化个税税率表（2024年标准）
INSERT INTO `hrm_tax_rate_config`
(`name`, `effective_date`, `level`, `min_amount`, `max_amount`, `tax_rate`, `quick_deduction`, `status`, `remark`, `creator`, `updater`)
VALUES
('2024年个税税率表', '2024-01-01', 1, 0, 36000, 0.03, 0, 0, '不超过36000元', '1', '1'),
('2024年个税税率表', '2024-01-01', 2, 36000, 144000, 0.10, 2520, 0, '超过36000元至144000元', '1', '1'),
('2024年个税税率表', '2024-01-01', 3, 144000, 300000, 0.20, 16920, 0, '超过144000元至300000元', '1', '1'),
('2024年个税税率表', '2024-01-01', 4, 300000, 420000, 0.25, 31920, 0, '超过300000元至420000元', '1', '1'),
('2024年个税税率表', '2024-01-01', 5, 420000, 660000, 0.30, 52920, 0, '超过420000元至660000元', '1', '1'),
('2024年个税税率表', '2024-01-01', 6, 660000, 960000, 0.35, 85920, 0, '超过660000元至960000元', '1', '1'),
('2024年个税税率表', '2024-01-01', 7, 960000, 0, 0.45, 181920, 0, '超过960000元', '1', '1');

-- =============================================
-- 菜单权限
-- =============================================

-- 社保公积金配置菜单
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (6023, '社保公积金配置', '', 2, 3, 6020, 'social-security', 'ep:setting', 'hrm/salary/social-security/index', 'HrmSocialSecurityConfig', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (60231, '社保配置查询', 'hrm:social-security:query', 3, 1, 6023, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (60232, '社保配置新增', 'hrm:social-security:create', 3, 2, 6023, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (60233, '社保配置修改', 'hrm:social-security:update', 3, 3, 6023, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (60234, '社保配置删除', 'hrm:social-security:delete', 3, 4, 6023, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

-- 个税税率配置菜单
INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (6024, '个税税率配置', '', 2, 4, 6020, 'tax-rate', 'ep:document', 'hrm/salary/tax-rate/index', 'HrmTaxRateConfig', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (60241, '个税配置查询', 'hrm:tax-rate:query', 3, 1, 6024, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (60242, '个税配置新增', 'hrm:tax-rate:create', 3, 2, 6024, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (60243, '个税配置修改', 'hrm:tax-rate:update', 3, 3, 6024, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

INSERT INTO `system_menu` (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (60244, '个税配置删除', 'hrm:tax-rate:delete', 3, 4, 6024, '', '', '', NULL, 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0');

-- 角色菜单关联
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 6023, '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 60231, '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 60232, '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 60233, '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 60234, '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 6024, '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 60241, '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 60242, '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 60243, '1', NOW(), '1', NOW(), b'0');
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
VALUES (1, 60244, '1', NOW(), '1', NOW(), b'0');

SELECT '社保公积金个税扣除功能 SQL 初始化完成！' AS result;
