-- =============================================================================
-- DWS 配置表初始数据
-- 版本: v3.0
-- 创建日期: 2026-02-01
-- 描述: 初始化配置表数据，包含绩效档位、等级定价、奖金规则、区域分类、技能映射
-- =============================================================================

-- =============================================================================
-- 1. cfg_performance_tier - 绩效档位配置（6档 + 新入职）
-- 数据来源：DWS 数据库处理需求.md 第35-41行
-- 档位原因考虑	总业绩小时数阈值	专业课抽成（元/小时）	打赏课抽成	次月休假（天）
-- 0档 淘汰压力	H <100	28	50% 	3
-- 1档 及格档（重点激励）	100≤ H <130	18	40%	4
-- 2档 良好档（重点激励）	130≤ H <160	15	38%	4
-- 3档 优秀档	160≤ H <190	13	35%	5
-- 4档 卓越加速档（高端人才倾斜）	190≤ H <220	10	33%	6
-- 5档 冠军加速档（高端人才倾斜）	H ≥220	8	30%	休假自由
-- =============================================================================
TRUNCATE TABLE billiards_dws.cfg_performance_tier RESTART IDENTITY CASCADE;

INSERT INTO billiards_dws.cfg_performance_tier (
    tier_code, tier_name, tier_level, 
    min_hours, max_hours, 
    base_deduction, bonus_deduction_ratio, vacation_days, vacation_unlimited,
    is_new_hire_tier, effective_from, effective_to, description
) VALUES
-- 0档 淘汰压力: H<100, 专业课抽成28元/小时, 打赏课抽成50%, 休假3天
('T0', '0档-淘汰压力', 0, 
 0, 100, 
 28.00, 0.50, 3, FALSE,
 FALSE, '2000-01-01', '9999-12-31', 
 '淘汰压力档：H<100，专业课抽成28元/小时，打赏课抽成50%，休假3天'),

-- 1档 及格档: 100≤H<130, 专业课抽成18元/小时, 打赏课抽成40%, 休假4天
('T1', '1档-及格档', 1, 
 100, 130, 
 18.00, 0.40, 4, FALSE,
 FALSE, '2000-01-01', '9999-12-31', 
 '及格档（重点激励）：100≤H<130，专业课抽成18元/小时，打赏课抽成40%，休假4天'),

-- 2档 良好档: 130≤H<160, 专业课抽成15元/小时, 打赏课抽成38%, 休假4天
('T2', '2档-良好档', 2, 
 130, 160, 
 15.00, 0.38, 4, FALSE,
 FALSE, '2000-01-01', '9999-12-31', 
 '良好档（重点激励）：130≤H<160，专业课抽成15元/小时，打赏课抽成38%，休假4天'),

-- 3档 优秀档: 160≤H<190, 专业课抽成13元/小时, 打赏课抽成35%, 休假5天
('T3', '3档-优秀档', 3, 
 160, 190, 
 13.00, 0.35, 5, FALSE,
 FALSE, '2000-01-01', '9999-12-31', 
 '优秀档：160≤H<190，专业课抽成13元/小时，打赏课抽成35%，休假5天'),

-- 4档 卓越加速档: 190≤H<220, 专业课抽成10元/小时, 打赏课抽成33%, 休假6天
('T4', '4档-卓越加速档', 4, 
 190, 220, 
 10.00, 0.33, 6, FALSE,
 FALSE, '2000-01-01', '9999-12-31', 
 '卓越加速档（高端人才倾斜）：190≤H<220，专业课抽成10元/小时，打赏课抽成33%，休假6天'),

-- 5档 冠军加速档: H≥220, 专业课抽成8元/小时, 打赏课抽成30%, 休假自由
('T5', '5档-冠军加速档', 5, 
 220, NULL, 
 8.00, 0.30, 0, TRUE,
 FALSE, '2000-01-01', '9999-12-31', 
 '冠军加速档（高端人才倾斜）：H≥220，专业课抽成8元/小时，打赏课抽成30%，休假自由'),

-- 新入职档位: 首月特殊处理（按1档标准，但不参与排名）
('NEW', '新入职档位', -1, 
 0, NULL, 
 18.00, 0.40, 4, FALSE,
 TRUE, '2000-01-01', '9999-12-31', 
 '新入职：月1日0点后入职者首月使用，按1档抽成标准，不参与排名奖金');


-- =============================================================================
-- 2. cfg_assistant_level_price - 助教等级定价
-- 说明:
--   - level_code 来自 dim_assistant.assistant_level
--   - 8=助教管理, 10=初级, 20=中级, 30=高级, 40=星级
--   - 价格为客户支付价格（对外价格），助教收入=客户支付-档位抽成
--   - 数据来源：DWS 数据库处理需求.md
-- =============================================================================
TRUNCATE TABLE billiards_dws.cfg_assistant_level_price RESTART IDENTITY CASCADE;

INSERT INTO billiards_dws.cfg_assistant_level_price (
    level_code, level_name, 
    base_course_price, bonus_course_price,
    effective_from, effective_to, description
) VALUES
-- 初级助教：基础课对客户收费98元/小时
(10, '初级', 
 98.00, 190.00,
 '2000-01-01', '9999-12-31', 
 '初级助教：基础课98元/时，附加课190元/时（客户支付价格）'),

-- 中级助教：基础课对客户收费108元/小时
(20, '中级', 
 108.00, 190.00,
 '2000-01-01', '9999-12-31', 
 '中级助教：基础课108元/时，附加课190元/时（客户支付价格）'),

-- 高级助教：基础课对客户收费118元/小时
(30, '高级', 
 118.00, 190.00,
 '2000-01-01', '9999-12-31', 
 '高级助教：基础课118元/时，附加课190元/时（客户支付价格）'),

-- 星级助教：基础课对客户收费138元/小时
(40, '星级', 
 138.00, 190.00,
 '2000-01-01', '9999-12-31', 
 '星级助教：基础课138元/时，附加课190元/时（客户支付价格）'),

-- 助教管理：level_code=8，通常不参与客户服务计费，此处设置默认值
(8, '助教管理', 
 98.00, 190.00,
 '2000-01-01', '9999-12-31', 
 '助教管理：不参与客户服务计费，默认按初级价格');


-- =============================================================================
-- 3. cfg_bonus_rules - 奖金规则配置
-- 说明:
--   - SPRINT: 冲刺奖金，按业绩小时数阈值，不累计取最高档
--   - TOP_RANK: Top3排名奖金，按有效业绩排名，并列都算
-- =============================================================================
TRUNCATE TABLE billiards_dws.cfg_bonus_rules RESTART IDENTITY CASCADE;

INSERT INTO billiards_dws.cfg_bonus_rules (
    rule_type, rule_code, rule_name,
    threshold_hours, rank_position, bonus_amount,
    is_cumulative, priority,
    effective_from, effective_to, description
) VALUES
-- 冲刺奖金: H>=190 得300元
('SPRINT', 'SPRINT_190', '冲刺奖金190',
 190.00, NULL, 300.00,
 FALSE, 1,
 '2000-01-01', '9999-12-31', 
 '业绩≥190小时，获得300元冲刺奖金（不累计）'),

-- 冲刺奖金: H>=220 得800元（优先级更高，覆盖190档）
('SPRINT', 'SPRINT_220', '冲刺奖金220',
 220.00, NULL, 800.00,
 FALSE, 2,
 '2000-01-01', '9999-12-31', 
 '业绩≥220小时，获得800元冲刺奖金（覆盖190档）'),

-- Top1排名奖金: 1000元
('TOP_RANK', 'TOP_1', 'Top1排名奖金',
 NULL, 1, 1000.00,
 FALSE, 0,
 '2000-01-01', '9999-12-31', 
 '月度排名第一，获得1000元（并列都算）'),

-- Top2排名奖金: 600元
('TOP_RANK', 'TOP_2', 'Top2排名奖金',
 NULL, 2, 600.00,
 FALSE, 0,
 '2000-01-01', '9999-12-31', 
 '月度排名第二，获得600元（并列都算）'),

-- Top3排名奖金: 400元
('TOP_RANK', 'TOP_3', 'Top3排名奖金',
 NULL, 3, 400.00,
 FALSE, 0,
 '2000-01-01', '9999-12-31', 
 '月度排名第三，获得400元（并列都算）');


-- =============================================================================
-- 4. cfg_area_category - 台区分类映射
-- 说明:
--   - 将 dim_table.site_table_area_name 映射到财务报表区域分类
--   - 映射规则: 精确匹配 > 模糊匹配 > 默认兜底
--   - 数据来源: BD_manual_dim_table.md 中的 site_table_area_name 实际分布
-- 分类设计:
--   - BILLIARD: 台球散台（A区/B区/C区/TV台）
--   - BILLIARD_VIP: 台球VIP包厢
--   - SNOOKER: 斯诺克区
--   - MAHJONG: 麻将区
--   - KTV: K歌/KTV
--   - SPECIAL: 特殊（补时长等）
--   - OTHER: 其他
-- =============================================================================
TRUNCATE TABLE billiards_dws.cfg_area_category RESTART IDENTITY CASCADE;

INSERT INTO billiards_dws.cfg_area_category (
    source_area_name, category_code, category_name,
    match_type, match_priority, is_active, description
) VALUES
-- ============ 台球散台区（精确匹配）============
('A区', 'BILLIARD', '台球散台',
 'EXACT', 10, TRUE, '台球散台：A区（18台）- 中八/追分'),
('B区', 'BILLIARD', '台球散台',
 'EXACT', 10, TRUE, '台球散台：B区（15台）- 中八/追分'),
('C区', 'BILLIARD', '台球散台',
 'EXACT', 10, TRUE, '台球散台：C区（6台）- 中八/追分'),
('TV台', 'BILLIARD', '台球散台',
 'EXACT', 10, TRUE, '台球散台：TV台（1台）- 中八/追分'),

-- ============ 台球VIP包厢（精确匹配）============
('VIP包厢', 'BILLIARD_VIP', '台球VIP',
 'EXACT', 10, TRUE, '台球VIP：VIP包厢（4台）- V1-V4中八, V5斯诺克'),

-- ============ 斯诺克区（精确匹配）============
('斯诺克区', 'SNOOKER', '斯诺克',
 'EXACT', 10, TRUE, '斯诺克：斯诺克区（4台）'),

-- ============ 麻将区（精确匹配）============
('麻将房', 'MAHJONG', '麻将棋牌',
 'EXACT', 10, TRUE, '麻将棋牌：麻将房（5台）'),
('M7', 'MAHJONG', '麻将棋牌',
 'EXACT', 10, TRUE, '麻将棋牌：M7（2台）'),
('M8', 'MAHJONG', '麻将棋牌',
 'EXACT', 10, TRUE, '麻将棋牌：M8（1台）'),
('666', 'MAHJONG', '麻将棋牌',
 'EXACT', 10, TRUE, '麻将棋牌：666（2台）'),
('发财', 'MAHJONG', '麻将棋牌',
 'EXACT', 10, TRUE, '麻将棋牌：发财（1台）'),

-- ============ KTV/K包（精确匹配）============
('K包', 'KTV', 'K歌娱乐',
 'EXACT', 10, TRUE, 'K歌娱乐：K包（4台）'),
('k包活动区', 'KTV', 'K歌娱乐',
 'EXACT', 10, TRUE, 'K歌娱乐：k包活动区（2台）'),
('幸会158', 'KTV', 'K歌娱乐',
 'EXACT', 10, TRUE, 'K歌娱乐：幸会158（2台）'),

-- ============ 特殊区域（精确匹配）============
('补时长', 'SPECIAL', '补时长',
 'EXACT', 10, TRUE, '特殊：补时长（7台）- 用于时长补录'),

-- ============ 模糊匹配规则（优先级较低）============
('%VIP%', 'BILLIARD_VIP', '台球VIP',
 'LIKE', 50, TRUE, '模糊匹配：包含"VIP"的区域'),
('%斯诺克%', 'SNOOKER', '斯诺克',
 'LIKE', 50, TRUE, '模糊匹配：包含"斯诺克"的区域'),
('%麻将%', 'MAHJONG', '麻将棋牌',
 'LIKE', 50, TRUE, '模糊匹配：包含"麻将"的区域'),
('%K包%', 'KTV', 'K歌娱乐',
 'LIKE', 50, TRUE, '模糊匹配：包含"K包"的区域'),
('%KTV%', 'KTV', 'K歌娱乐',
 'LIKE', 50, TRUE, '模糊匹配：包含"KTV"的区域'),

-- ============ 默认兜底（优先级最低）============
('DEFAULT', 'OTHER', '其他',
 'DEFAULT', 999, TRUE, '兜底规则：无法匹配的区域归入其他');


-- =============================================================================
-- 5. cfg_skill_type - 技能→课程类型映射
-- 说明:
--   - 将 skill_id 映射到课程类型
--   - 基础课/陪打: skill_id = 2791903611396869
--   - 附加课/超休: skill_id = 2807440316432197
--   - 避免依赖 skill_name 文本匹配
-- =============================================================================
TRUNCATE TABLE billiards_dws.cfg_skill_type RESTART IDENTITY CASCADE;

INSERT INTO billiards_dws.cfg_skill_type (
    skill_id, skill_name, 
    course_type_code, course_type_name,
    is_active, description
) VALUES
-- 基础课/陪打
(2791903611396869, '台球基础陪打',
 'BASE', '基础课',
 TRUE, '基础课：陪打服务，按助教等级计价'),

-- 附加课/超休
(2807440316432197, '台球超休服务',
 'BONUS', '附加课',
 TRUE, '附加课：超休/激励课，固定50元/小时'),

-- 包厢课（如有）
(2807440316432198, '包厢服务',
 'BASE', '基础课',
 TRUE, '包厢服务：归入基础课统计');


-- =============================================================================
-- 6. 优惠类型配置（用于财务优惠明细分析）
-- 说明: 定义各类优惠的代码和名称，便于后续分析
-- =============================================================================
-- 此配置作为代码常量使用，不单独建表
-- GROUPBUY - 团购优惠
-- VIP - 会员折扣
-- GIFT_CARD - 赠送卡抵扣
-- MANUAL - 手动调整
-- ROUNDING - 抹零
-- BIG_CUSTOMER - 大客户优惠（待抽样分析确认）
-- OTHER - 其他优惠


-- =============================================================================
-- 7. 支出类型配置（用于Excel导入）
-- 说明: 定义各类支出的代码和名称
-- =============================================================================
-- 此配置作为代码常量使用，不单独建表
-- RENT - 房租
-- UTILITY - 水电费
-- PROPERTY - 物业费
-- SALARY - 工资
-- REIMBURSE - 报销
-- PLATFORM_FEE - 平台服务费
-- OTHER - 其他支出


-- =============================================================================
-- 8. 平台类型配置（用于Excel导入）
-- 说明: 定义各平台的代码和名称
-- =============================================================================
-- 此配置作为代码常量使用，不单独建表
-- MEITUAN - 美团
-- DOUYIN - 抖音
-- DIANPING - 大众点评
-- OTHER - 其他平台


-- =============================================================================
-- 验证数据插入
-- =============================================================================
DO $$
DECLARE
    v_tier_count INTEGER;
    v_price_count INTEGER;
    v_bonus_count INTEGER;
    v_area_count INTEGER;
    v_skill_count INTEGER;
BEGIN
    SELECT COUNT(*) INTO v_tier_count FROM billiards_dws.cfg_performance_tier;
    SELECT COUNT(*) INTO v_price_count FROM billiards_dws.cfg_assistant_level_price;
    SELECT COUNT(*) INTO v_bonus_count FROM billiards_dws.cfg_bonus_rules;
    SELECT COUNT(*) INTO v_area_count FROM billiards_dws.cfg_area_category;
    SELECT COUNT(*) INTO v_skill_count FROM billiards_dws.cfg_skill_type;
    
    RAISE NOTICE '配置数据初始化完成:';
    RAISE NOTICE '  - cfg_performance_tier: % 条', v_tier_count;
    RAISE NOTICE '  - cfg_assistant_level_price: % 条', v_price_count;
    RAISE NOTICE '  - cfg_bonus_rules: % 条', v_bonus_count;
    RAISE NOTICE '  - cfg_area_category: % 条', v_area_count;
    RAISE NOTICE '  - cfg_skill_type: % 条', v_skill_count;
END;
$$;
