① PRD §2.5.3 修订:删「易方达 ETF 场外取整数位」(无证据且有反证,真实整数位载体为场内),改记「2 位主流 + 舍去型真实存在」,版本块加注记 ② rounding_mode=truncate 消费接入(用户拍板补做): - core_ro.get_share_rounding = 位数+模式回退链单点(规则行 → core_product → 默认 2/half_up,mode 白名单读取即校验,get_share_digits 转薄包装) - calc.product_round/in_qty 加 mode 参数(truncate → ROUND_DOWN) - 确认段 + 申购折算两处透传;载体 09-seed-org.sql ⑦ 段 PROD-005828(product 层回退,零转换场景引用) - 测试 +7(842→849):calc 4 + 确认段 2(truncate 34945.53 vs half_up .54 分化 + 回退链遮蔽语义)+ 申购段 1 - 突变:两调用点同拆 mode 透传 → 2 红,还原绿;真库 9/9(seed 新增 ⑫ 载体在位断言) ③ R-12 口径裁定追认定稿:条目回写开发计划(NULL 不参与 A/C 判定 / 同类走一般转换规则) 审核教训留痕:PRD 独立 AI 三轮审查未抓出外部事实断言无出处 —— 联网核实铁律再添例证 文档:开发计划 T-14 开口闭环段 + 基线 849 · 日志新节 · TODO/MEMORY/AGENTS/交接文档开口清零
88 lines
5.4 KiB
SQL
88 lines
5.4 KiB
SQL
USE jinrong_core;
|
||
|
||
-- ============================================================================
|
||
-- 11-seed-share-rule.sql · 产品份额舍入规则种子(D27 / R-13)
|
||
-- 版本:v1.1(2026-09-12 · T-14 联网核实纠偏;v1.0 曾给指数/存单产品配 4 位,
|
||
-- 注释依据「指数基金申购/转入确认份额允许保留 4 位小数」经联网核实
|
||
-- 查无实据且反证充分,见下——全部产品改回主流 2 位)
|
||
-- 依据:开发计划 v2.0 T-14(D27 产品舍入真正接入)+ 2026-09-12 联网核实
|
||
--
|
||
-- 【联网核实的真实业务口径(2026-09-12,逐条附出处)】
|
||
-- 1. 位数按产品(基金合同)配置 —— 行业真实做法:
|
||
-- 南方基金《关于调整旗下基金转换业务规则的公告》(2012) 明确把统一的
|
||
-- 「转入份额四舍五入保留两位」改为「根据各基金基金合同和招募说明书的
|
||
-- 相关规定保留小数点后 2 位」(pdf.dfcfw.com/pdf/H22_AN201202280004321524_1.pdf)
|
||
-- —— 这正是 D27「按产品配置」的最直接行业依据。
|
||
-- 2. 份额位数主流 2 位(申购/转换一致):
|
||
-- - 民生加银《基金转换规则》第八条:申请转换份额按四舍五入保留到小数点后 2 位
|
||
-- (msjyfund.com.cn/osoa/views/serviceCenter/conversionRule.html)
|
||
-- - 富时基金《开放式基金业务管理规则》:申购份额保留 2 位、第 3 位四舍五入
|
||
-- - 汇添富深证300 ETF 联接 / 华夏恒生 ETF 联接 / 易方达沪深300非银 ETF 基金合同:
|
||
-- 指数(联接)基金申购份额同样保留 2 位 —— **「指数基金 4 位」查无实据**
|
||
-- - 货币基金:1.00 元面值、份额 = 金额 ÷ 1.00 保留 2 位四舍五入
|
||
-- (中银货币 / 融通易支付 / 鑫元货币基金合同)
|
||
-- 3. 舍入方式真实存在「舍去(TRUNCATE)」型 —— rounding_mode 字段的现实载体:
|
||
-- - 南方利众混合 C 转换公告:份额保留 2 位、两位以后的部分**舍去**归基金资产
|
||
-- - 邮储银行《基金转换常见问题》:转换份额 2 位后舍去
|
||
-- - 华宝未来主导混合 / 申万菱信业务规则 / 东方基金登记业务规则:同类「舍去」条款
|
||
-- ✅ 消费接入已闭环(2026-09-12 用户拍板补接):`core_ro.get_share_rounding`
|
||
-- 返回 (digits, mode) 单点,calc.product_round 消费 mode(half_up/truncate)。
|
||
-- 舍去型载体配在 core_product 层(09-seed-org.sql ⑦ 段 PROD-005828),
|
||
-- 本文件(规则行层)仍全 half_up —— 恰好验证「位数取规则行、模式落 product」
|
||
-- 的逐层独立回退。
|
||
-- 4. 整数位的真实载体是**场内渠道**(LOF/ETF 场内申购先 2 位再截位到整数份,
|
||
-- 如招商瑞智优选 LOF 基金合同),不是产品固有属性;本项目无场内/场外渠道
|
||
-- 维度,不做该建模。
|
||
--
|
||
-- 说明(回退链,11-seed 头注 v1.0 原文沿用):未被本文件覆盖的产品
|
||
-- (business_type 无行)由 core_ro.get_share_digits 回退 core_product.share_digits
|
||
-- (DEFAULT 2)→ 再缺省回退 calc.PLACES(2)。降级路径有显式用例(T-14 DoD 2)。
|
||
-- ============================================================================
|
||
|
||
INSERT INTO core_share_rule (product_id, business_type, share_digits, rounding_mode) VALUES
|
||
-- 全部产品:主流 2 位 HALF_UP(核实结论:公募场外申购/转换份额位数主流即 2 位,
|
||
-- 产品间真实差异在舍入方式而非位数 —— 见头注 1/2/3)
|
||
('PROD-110022', 'subscribe', 2, 'half_up'),
|
||
('PROD-110022', 'redeem', 2, 'half_up'),
|
||
('PROD-110022', 'convert', 2, 'half_up'),
|
||
('PROD-110023', 'subscribe', 2, 'half_up'),
|
||
('PROD-110023', 'redeem', 2, 'half_up'),
|
||
('PROD-110023', 'convert', 2, 'half_up'),
|
||
('PROD-005827', 'subscribe', 2, 'half_up'),
|
||
('PROD-005827', 'redeem', 2, 'half_up'),
|
||
('PROD-005827', 'convert', 2, 'half_up'),
|
||
('PROD-005828', 'subscribe', 2, 'half_up'),
|
||
('PROD-005828', 'redeem', 2, 'half_up'),
|
||
('PROD-005828', 'convert', 2, 'half_up'),
|
||
('PROD-003095', 'subscribe', 2, 'half_up'),
|
||
('PROD-003095', 'redeem', 2, 'half_up'),
|
||
('PROD-003095', 'convert', 2, 'half_up'),
|
||
('PROD-000001', 'subscribe', 2, 'half_up'),
|
||
('PROD-000001', 'redeem', 2, 'half_up'),
|
||
('PROD-000001', 'convert', 2, 'half_up'),
|
||
-- 指数/存单产品:同为 2 位(v1.0 曾配 4 位,注释依据经联网核实不成立,2026-09-12 纠偏)
|
||
('PROD-510300', 'subscribe', 2, 'half_up'),
|
||
('PROD-510300', 'redeem', 2, 'half_up'),
|
||
('PROD-510300', 'convert', 2, 'half_up'),
|
||
('PROD-510500', 'subscribe', 2, 'half_up'),
|
||
('PROD-510500', 'redeem', 2, 'half_up'),
|
||
('PROD-510500', 'convert', 2, 'half_up'),
|
||
('PROD-000002', 'subscribe', 2, 'half_up'),
|
||
('PROD-000002', 'redeem', 2, 'half_up'),
|
||
('PROD-000002', 'convert', 2, 'half_up'),
|
||
('PROD-161725', 'subscribe', 2, 'half_up'),
|
||
('PROD-161725', 'redeem', 2, 'half_up'),
|
||
('PROD-161725', 'convert', 2, 'half_up'),
|
||
('PROD-161726', 'subscribe', 2, 'half_up'),
|
||
('PROD-161726', 'redeem', 2, 'half_up'),
|
||
('PROD-161726', 'convert', 2, 'half_up'),
|
||
('PROD-XYZ999', 'subscribe', 2, 'half_up'),
|
||
('PROD-XYZ999', 'redeem', 2, 'half_up'),
|
||
('PROD-XYZ999', 'convert', 2, 'half_up'),
|
||
('PROD-WMG001', 'subscribe', 2, 'half_up'),
|
||
('PROD-WMG001', 'redeem', 2, 'half_up'),
|
||
('PROD-WMG001', 'convert', 2, 'half_up'),
|
||
('PROD-PRIV01', 'subscribe', 2, 'half_up'),
|
||
('PROD-PRIV01', 'redeem', 2, 'half_up'),
|
||
('PROD-PRIV01', 'convert', 2, 'half_up');
|