T-0 / T-0b(门禁 · 2026-09-10) - T-0:sqlite 与 MySQL 结构对齐 —— core_holding 统一为 qty/cost_amount/as_of/pnl_pct + PK + UNIQUE(customer_id, product_id);补 core_product_nav;新增建库自校验 _assert_ddl_aligned()(R-g);test_db.py 增 3 条门禁用例(含反向验证门禁失效) - T-0b:DB 账号分离(D20)—— 新增 scripts/core/00-grant.sql(三账号逐表授权); settings.py 增 3 组账号;db.py 改 get_engine(db, role),缓存键改为 (库名, 角色), 账号未配置回退单账号;core_ro→ro / gateway_repository→rw / risk·session_repository→rw; tests/conftest.py 四处显式 role="admin"(R-e) T-1(数据层) - scripts/core/01-ddl.sql:新建 core_fee_rule / core_share_lot / core_convert_lot_detail; core_trade 加 convert_group_id + idx_convert_group;core_product 加 8 列 + fee_rate 补 COMMENT - 新增 07-seed-fee-rule.sql(赎回费 5 档 × 14 产品,按 22 号文 §10)/ 08-seed-share-lot.sql (58 行持仓 → 61 行批次,Σ remain_qty 恒等于 qty)/ 09-seed-org.sql(管理人 + TA + 申购费率 + 最低持有余额,v1.1 按「管理人全产品线」重排) - reset.ps1 追加 07/08/09;02-mysql-agent专用.sql 追加 risk_convert_detail - tests/_ddl.py 同步 4 表 + 新增 REQUIRED_CONVERT_TABLES 建库门禁 - 新增 scripts/dev/verify_convert_seed.py(pymysql 等价 reset 流程 + 8 条 DoD 断言, 含断言 ⑧「费率档 ↔ product_type 匹配」,越档即 FAIL) T-2 / T-2b(纯函数包 + 示例实算回填) - 新增 app/service/convert/ 7 文件:__init__ / types / calc / fee / nav / lot_bootstrap / errors (纯函数,不查库、不碰 SQL;所有量化显式 ROUND_HALF_UP;lot_bootstrap 用 zlib.crc32 保证 D18 跨进程同源) - 新增 tests/test_convert_calc.py 93 用例(12 类:HALF_UP 反向自证 / 分档边界 / FIFO 含同 confirmed_at 兜底 / 双口径 / 强制全转与强制赎回 / PRD §5.3 全链自证 / 纯函数零 IO 依赖断言) - 重写 scripts/dev/calc_convert_demo.py:去掉脚本内公式副本,改为调用生产 calc.py, 末尾与 PRD §5.3 逐项比对(不一致即退出码 1),兼作一致性门禁 验证 - pytest 609 passed / 3 skipped(516 → +93,零回归) - verify_convert_seed.py 8/8 PASS;calc_convert_demo.py 15/15 与 PRD §5.3 一致 文档:PRD v0.9.1(费率分类修正)· 架构 §7 签名回填 / §8.3 错误码注 / §15 T-2 完成 · 开发计划 §1.5 新增 R-h + §4.2·§4.3 执行记录 · AGENTS.md · docs/memory
108 lines
6.1 KiB
SQL
108 lines
6.1 KiB
SQL
USE jinrong_core;
|
||
|
||
-- ============================================================================
|
||
-- 07-seed-fee-rule.sql · 赎回费分档种子
|
||
-- 版本:v1.0(2026-09-10 · T-1 新增)
|
||
-- 依据:证监会公告〔2025〕22 号《公开募集证券投资基金销售费用管理规定》§10
|
||
-- (2026-01-01 施行,替代 2013 年 26 号文的分级计入规则)
|
||
-- · 持有期 < 7 日 → ≥ 1.5%
|
||
-- · 持有期 7 ~ 30 日 → ≥ 1.0%
|
||
-- · 持有期 30 ~ 180 日 → ≥ 0.5%
|
||
-- · 持有期 ≥ 180 日 → 无强制下限(合同常见 0)
|
||
-- · 赎回费全额计入基金财产 → to_fund_ratio 恒 1.0000(旧规 75%/50%/25% 已废止)
|
||
-- 区间口径:左闭右开 [min_hold_days, max_hold_days),max_hold_days = NULL 表示无上限;
|
||
-- 与 app/service/convert/fee.py 的 pick_fee_rate 完全一致。
|
||
-- 说明 1:14 只产品统一灌 5 档,目的是让分档演示/真库集成有数据可查。
|
||
-- 分档边界单测(6/7/29/30/179/180/364/365)走纯函数自建种子,**不依赖本文件**。
|
||
-- 说明 2:真实货基(PROD-000001)赎回费为 0、指数/债基持满 7 日对个人投资者有豁免,
|
||
-- 模拟库未做该豁免(豁免属投资者维度,非产品维度),保持 5 档统一。
|
||
-- 说明 3:`fee_type='subscribe'` 的金额分档本期**不启用**(申购费简化在
|
||
-- core_product.subscribe_fee_rate,见 09-seed-org.sql),此处不灌数据。
|
||
-- ============================================================================
|
||
|
||
INSERT INTO core_fee_rule (product_id, fee_type, min_hold_days, max_hold_days, rate, to_fund_ratio) VALUES
|
||
-- PROD-110022 稳健债基 A(bond)
|
||
('PROD-110022', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-110022', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-110022', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-110022', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-110022', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-110023 信用债精选(bond)
|
||
('PROD-110023', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-110023', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-110023', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-110023', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-110023', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-005827 平衡混合一号(mixed · 转出主演示产品)
|
||
('PROD-005827', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-005827', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-005827', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-005827', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-005827', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-005828 稳健增利混合(mixed)
|
||
('PROD-005828', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-005828', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-005828', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-005828', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-005828', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-161725 科技成长主题(stock)
|
||
('PROD-161725', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-161725', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-161725', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-161725', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-161725', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-161726 消费升级主题(stock)
|
||
('PROD-161726', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-161726', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-161726', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-161726', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-161726', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-003095 医药健康精选(stock)
|
||
('PROD-003095', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-003095', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-003095', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-003095', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-003095', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-510300 沪深300指数(index · 转入主演示产品)
|
||
('PROD-510300', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-510300', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-510300', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-510300', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-510300', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-510500 中证500指数(index)
|
||
('PROD-510500', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-510500', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-510500', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-510500', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-510500', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-XYZ999 进取成长五号(stock)
|
||
('PROD-XYZ999', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-XYZ999', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-XYZ999', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-XYZ999', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-XYZ999', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-000001 现金宝货币(money)
|
||
('PROD-000001', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-000001', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-000001', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-000001', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-000001', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-000002 同业存单基金(bond)
|
||
('PROD-000002', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-000002', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-000002', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-000002', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-000002', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-WMG001 稳享180天理财(wealth_mgmt)
|
||
('PROD-WMG001', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-WMG001', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-WMG001', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-WMG001', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-WMG001', 'redeem', 365, NULL, 0.0000, 1.0000),
|
||
-- PROD-PRIV01 量化中性私募一号(private_fund)
|
||
('PROD-PRIV01', 'redeem', 0, 7, 0.0150, 1.0000),
|
||
('PROD-PRIV01', 'redeem', 7, 30, 0.0100, 1.0000),
|
||
('PROD-PRIV01', 'redeem', 30, 180, 0.0050, 1.0000),
|
||
('PROD-PRIV01', 'redeem', 180, 365, 0.0025, 1.0000),
|
||
('PROD-PRIV01', 'redeem', 365, NULL, 0.0000, 1.0000);
|