-- CMA本体三支柱: 科目↔KPI↔OKR 三层互联 DDL (2026-08-19)
USE cma;

CREATE TABLE IF NOT EXISTS kpi_subject_map (
  id INT AUTO_INCREMENT PRIMARY KEY,
  kpi_id INT NOT NULL,
  subject_code VARCHAR(20) NOT NULL,
  calc_type VARCHAR(20) DEFAULT 'sum',  -- sum/avg/ratio/other
  weight DECIMAL(5,2) DEFAULT 1.00,      -- 权重(负=扣减项)
  remark VARCHAR(200),
  UNIQUE KEY uk_kpi_subject (kpi_id, subject_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='科目↔KPI映射(指标计算依赖的底层科目)';

CREATE TABLE IF NOT EXISTS objective_kpi (
  id INT AUTO_INCREMENT PRIMARY KEY,
  objective_id INT NOT NULL,
  kpi_id INT NOT NULL,
  weight DECIMAL(5,2) DEFAULT 1.00,
  UNIQUE KEY uk_obj_kpi (objective_id, kpi_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='KPI↔O支撑(目标由哪些KPI度量)';

CREATE TABLE IF NOT EXISTS krs (
  id INT AUTO_INCREMENT PRIMARY KEY,
  objective_id INT NOT NULL,
  title VARCHAR(200) NOT NULL,
  metric_kpi_id INT,           -- 关联的度量KPI
  target_value DECIMAL(15,2),
  current_value DECIMAL(15,2),
  progress INT DEFAULT 0,      -- 0-100
  status VARCHAR(20) DEFAULT 'pending',
  due_date DATE,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='关键结果KR(OKR完整化)';
-- kpi_subject_map 种子数据: 核心财务KPI → 会计科目映射 (2026-08-19)
-- weight: 1.00=加项 -1.00=减项; calc_type: sum=加总 ratio=比率
USE cma;

INSERT INTO kpi_subject_map (kpi_id, subject_code, calc_type, weight, remark) VALUES
-- F_REVENUE 营收 = 主营业务收入 + 利息收入 + 其他业务收入 + 投资收益
(1,  '6001',  'sum',   1.00, '主营业务收入'),
(1,  '6011',  'sum',   0.02, '利息收入(银行存款)'),
(1,  '6051',  'sum',   0.05, '其他业务收入'),
(1,  '6111',  'sum',   0.03, '投资收益'),
-- F_GROSS_MARGIN 毛利率 = (收入-成本)/收入
(2,  '6001',  'ratio', 1.00, '毛利率分子-收入'),
(2,  '6401',  'ratio', -1.00, '毛利率分子-主营业务成本'),
(2,  '6402',  'ratio', -1.00, '毛利率分子-其他业务成本'),
-- F_NET_PROFIT 净利润 = 收入 - 成本 - 费用
(3,  '6001',  'sum',   1.00, '净利润-主营业务收入'),
(3,  '6051',  'sum',   0.05, '净利润-其他业务收入'),
(3,  '6011',  'sum',   0.02, '净利润-利息收入'),
(3,  '6111',  'sum',   0.03, '净利润-投资收益'),
(3,  '6401',  'sum',  -1.00, '净利润-主营业务成本'),
(3,  '6402',  'sum',  -1.00, '净利润-其他业务成本'),
(3,  '6601',  'sum',  -1.00, '净利润-销售费用'),
(3,  '6602',  'sum',  -1.00, '净利润-管理费用'),
(3,  '660204','sum',  -0.30, '净利润-研发费用'),
(3,  '6603',  'sum',  -1.00, '净利润-财务费用'),
(3,  '6701',  'sum',  -1.00, '净利润-资产减值损失'),
(3,  '6801',  'sum',  -1.00, '净利润-所得税费用'),
-- F_OP_CFLOW 经营性现金流 = 现金类科目净变动
(4,  '1001',  'sum',   1.00, '经营性现金流-库存现金'),
(4,  '1002',  'sum',   1.00, '经营性现金流-银行存款'),
(4,  '1122',  'sum',   1.00, '经营性现金流-应收账款收回'),
(4,  '2202',  'sum',   1.00, '经营性现金流-应付账款支付'),
-- F_COST_RATIO 费用率 = 期间费用/收入
(5,  '6601',  'ratio', 1.00, '费用率-销售费用'),
(5,  '6602',  'ratio', 1.00, '费用率-管理费用'),
(5,  '6603',  'ratio', 1.00, '费用率-财务费用'),
(5,  '6001',  'ratio', -1.00, '费用率分母-收入'),
-- F_AR_DAYS 应收账款周转天数 = 应收/收入*360
(6,  '1122',  'ratio', 1.00, '应收周转-应收账款'),
(6,  '6001',  'ratio', -1.00, '应收周转分母-主营业务收入'),
-- F_ASSET_TURNOVER 总资产周转率 = 收入/总资产
(13, '6001',  'ratio', 1.00, '资产周转分子-收入'),
(13, '1001',  'ratio', -1.00, '资产周转分母-库存现金'),
(13, '1002',  'ratio', -1.00, '资产周转分母-银行存款'),
(13, '1122',  'ratio', -1.00, '资产周转分母-应收账款'),
(13, '1405',  'ratio', -1.00, '资产周转分母-库存商品'),
(13, '1601',  'ratio', -1.00, '资产周转分母-固定资产'),
-- F_REVENUE_GROWTH 收入增长率 = 本期收入/上期收入-1
(14, '6001',  'ratio', 1.00, '收入增长-主营业务收入'),
-- F_CURRENT_RATIO 流动比率 = 流动资产/流动负债
(17, '1001',  'ratio', 1.00, '流动比率-库存现金'),
(17, '1002',  'ratio', 1.00, '流动比率-银行存款'),
(17, '1122',  'ratio', 1.00, '流动比率-应收账款'),
(17, '1405',  'ratio', 1.00, '流动比率-库存商品'),
(17, '2001',  'ratio', -1.00, '流动比率-短期借款'),
(17, '2202',  'ratio', -1.00, '流动比率-应付账款'),
(17, '2203',  'ratio', -1.00, '流动比率-预收账款'),
(17, '2211',  'ratio', -1.00, '流动比率-应付职工薪酬'),
-- F_QUICK_RATIO 速动比率 = (流动资产-存货)/流动负债
(18, '1001',  'ratio', 1.00, '速动比率-库存现金'),
(18, '1002',  'ratio', 1.00, '速动比率-银行存款'),
(18, '1122',  'ratio', 1.00, '速动比率-应收账款'),
(18, '1405',  'ratio', -1.00, '速动比率-存货扣减'),
(18, '2202',  'ratio', -1.00, '速动比率-应付账款'),
(18, '2203',  'ratio', -1.00, '速动比率-预收账款'),
(18, '2211',  'ratio', -1.00, '速动比率-应付职工薪酬'),
-- F_INV_DAYS 存货周转天数 = 存货/成本*360
(19, '1405',  'ratio', 1.00, '存货周转-库存商品'),
(19, '6401',  'ratio', -1.00, '存货周转分母-主营业务成本'),
-- F_ROI 总资产报酬率 = 利润/资产
(20, '4103',  'ratio', 1.00, 'ROI分子-本年利润'),
(20, '4001',  'ratio', -1.00, 'ROI分母-实收资本'),
(20, '4002',  'ratio', -1.00, 'ROI分母-资本公积'),
-- F_DEBT_RATIO 资产负债率 = 负债/资产
(30, '2001',  'ratio', 1.00, '负债率-短期借款'),
(30, '2202',  'ratio', 1.00, '负债率-应付账款'),
(30, '2203',  'ratio', 1.00, '负债率-预收账款'),
(30, '2211',  'ratio', 1.00, '负债率-应付职工薪酬'),
(30, '2221',  'ratio', 1.00, '负债率-应交税费'),
(30, '2241',  'ratio', 1.00, '负债率-其他应付款'),
(30, '2501',  'ratio', 1.00, '负债率-长期借款'),
(30, '2502',  'ratio', 1.00, '负债率-应付债券'),
(30, '4001',  'ratio', -1.00, '负债率分母-实收资本'),
(30, '4002',  'ratio', -1.00, '负债率分母-资本公积'),
-- F_INTEREST_COVER 利息保障倍数 = 利润/利息支出
(31, '4103',  'ratio', 1.00, '利息保障分子-本年利润'),
(31, '660301','ratio', -1.00, '利息保障分母-利息支出(借款)'),
-- F_EVA 经济增加值 = 利润 - 资本成本
(32, '4103',  'sum',   1.00, 'EVA-本年利润'),
(32, '4001',  'sum',  -0.06, 'EVA-资本成本(实收资本×6%)'),
-- F_FCF 自由现金流
(45, '1002',  'sum',   1.00, 'FCF-银行存款'),
(45, '2202',  'sum',   1.00, 'FCF-应付账款'),
-- F_OP_PROFIT_MARGIN 经营利润率 = (收入-成本-期间费用)/收入
(183, '6001', 'ratio', 1.00, '经营利润率-收入'),
(183, '6401', 'ratio', -1.00, '经营利润率-主营业务成本'),
(183, '6601', 'ratio', -1.00, '经营利润率-销售费用'),
(183, '6602', 'ratio', -1.00, '经营利润率-管理费用'),
(183, '6603', 'ratio', -1.00, '经营利润率-财务费用'),
-- F_ROE 净资产收益率 = 净利润/净资产
(44, '4103',  'ratio', 1.00, 'ROE分子-本年利润'),
(44, '4001',  'ratio', -1.00, 'ROE分母-实收资本'),
(44, '4002',  'ratio', -1.00, 'ROE分母-资本公积'),
-- P_COST_CUT 招待费砍半
(54, '6601',  'sum',   1.00, '招待费-销售费用(业务招待子目)'),
-- P_CHANNEL_NEG 渠补谈判完成率(以渠道收入为基数)
(48, '6001',  'ratio', 1.00, '渠补谈判-主营业务收入'),
(48, '6051',  'ratio', 1.00, '渠补谈判-其他业务收入'),
-- C_MARKET_SHARE 市场份额(以收入为口径)
(33, '6001',  'ratio', 1.00, '市场份额-主营业务收入');
-- objective_kpi + krs 种子数据 (2026-08-19)
USE cma;

-- ① KPI↔O支撑: 现有3个O各关联5个KPI
INSERT INTO objective_kpi (objective_id, kpi_id, weight) VALUES
-- O11 优化成本结构——渠补谈判+管理费压缩
(11, 5,   1.00),  -- F_COST_RATIO 费用率
(11, 54,  1.00),  -- P_COST_CUT 招待费砍半
(11, 183, 1.00),  -- F_OP_PROFIT_MARGIN 经营利润率
(11, 3,   1.00),  -- F_NET_PROFIT 净利润
(11, 48,  1.00),  -- P_CHANNEL_NEG 渠补谈判完成率
-- O12 保障现金流安全——应收催收+厂补确认
(12, 4,   1.00),  -- F_OP_CFLOW 经营性现金流
(12, 6,   1.00),  -- F_AR_DAYS 应收账款周转天数
(12, 45,  1.00),  -- F_FCF 自由现金流
(12, 408, 1.00),  -- F_FACTORY_REBATE_RATE 上游厂补率
(12, 17,  1.00),  -- F_CURRENT_RATIO 流动比率
-- O13 渠道关系改善——用数据谈判渠补
(13, 46,  1.00),  -- C_REBATE_RATE 渠补率
(13, 48,  1.00),  -- P_CHANNEL_NEG 渠补谈判完成率
(13, 407, 1.00),  -- F_REBATE_RATE 返利率
(13, 7,   1.00),  -- C_SATISFACTION 客户满意度
(13, 24,  1.00);  -- C_RETENTION_RATE 客户保留率

-- ② krs: 现有3个O各配3个KR
INSERT INTO krs (objective_id, title, metric_kpi_id, target_value, current_value, progress, status, due_date) VALUES
-- O11 优化成本结构
(11, '完成渠补谈判，渠道B渠补率降至72%', 48,  100.00, 40.00, 40, 'in_progress', '2026-09-30'),
(11, '管理费用率压缩至15%以内',          5,   15.00,  18.00, 60, 'in_progress', '2026-09-30'),
(11, '经营利润率提升至8%',               183, 8.00,   5.20,  40, 'in_progress', '2026-09-30'),
-- O12 保障现金流安全
(12, '应收账款周转天数降至45天',         6,   45.00,  62.00, 30, 'in_progress', '2026-09-30'),
(12, '经营性现金流季度回正至100万元',    4,   100.00, 40.00, 35, 'in_progress', '2026-09-30'),
(12, '上游厂补率确认至90%',              408, 90.00,  60.00, 40, 'in_progress', '2026-09-30'),
-- O13 渠道关系改善
(13, '渠道渠补率降至70%以下',            46,  70.00,  78.00, 50, 'in_progress', '2026-09-30'),
(13, '完成10场数据化渠补谈判',           48,  10.00,  2.00,  20, 'in_progress', '2026-09-30'),
(13, '客户满意度提升至90分',             7,   90.00,  85.00, 33, 'in_progress', '2026-09-30');
