让 core_trade 的普通申赎同步维护 core_share_lot 批次,为 convert 提供权威份额口径。 落地(改码 3 处 + 新增 2 个脚本) - gateway_repository:新增 insert_share_lots / deduct_share_lots,各自单事务、走 rw 账号; 只落已分配结果、不含分配逻辑,避免出现第二份 FIFO 口径 - share_lot_repository:__init__ 增可选 core_ro 入参,让 trade_gateway 复用同一份 FIFO 选批口径(D18) - trade_gateway:新增 _nav_as_of / _maintain_lots,在落流水后、规则引擎前调用 · subscribe:取 T 日(含)前最新净值 → qty = amount ÷ 净值(2 位 HALF_UP)→ 建批次(confirmed_at = T) · redeem:FIFO 扣减;无批次但有持仓 → D8 兜底补建后再扣;两者皆无 → 降级跳过 · 整段 try 包住,任何异常只 warning,绝不阻断交易(R-c(1)) - 新增 scripts/core/rebuild_lots.py:按 core_holding 快照重建批次(L-7),与网关 D8 同调 bootstrap_lots; 默认只补建无批次的持仓行(幂等),--force 才先删后建,--dry-run 只报告 - 新增 scripts/dev/verify_convert_lots.py:真库验证脚本(MySQL 8.0.46) 口径订正(联网查证 4 家管理人业务规则后) - redeem 的 amount ÷ 净值 折算属本项目简化建模,不是行业标准 - 行业铁律是「金额申购、份额赎回」:投资者以份额申报,登记机构按 T 日净值算金额 (睿远业务规则 §65 / 华泰保兴 §69 / 东方基金 §57 / 国投瑞银 §33;无一家公募支持按金额赎回) - 派生风险:未知价法下 T 日净值当日不可得(T+1 公告),_nav_as_of 实取 T−1 净值, 故此处算出的份额只是估算值 - 已记入 PRD §10.1 已知差异清单;trade_gateway 注释同步订正 验证 - pytest -q → 714 passed / 3 skipped(基线 697 加 17,零回归) - R16 test_redeem_accepted_without_alert 零改动通过(由 R-c(1) 降级保住) - 真库 20/20;T-6 24/24、T-7 35/35 复跑零回归;真库隔离数据零残留 - 突变验证 2 组:切断接线 → 精准 2 条红;关掉 D8 兜底 → 精准 2 条红(含 D18 同源断言)
Core 模拟库 · 初始化
库名
jinrong_core· 与jinrong_agent同 MySQL 实例 · Agent 只读
一键重置(Windows)
.\scripts\core\reset.ps1
手动顺序
mysql -u root -p < scripts/core/00-create-database.sql
mysql -u root -p < scripts/core/01-ddl.sql
mysql -u root -p < scripts/core/02-seed-base.sql
mysql -u root -p < scripts/core/03-seed-customers.sql
mysql -u root -p < scripts/core/04-seed-holdings.sql
mysql -u root -p < scripts/core/05-seed-trades.sql
mysql -u root -p < scripts/core/06-seed-nav.sql
# 基金转换(convert)新增种子 · T-1
mysql -u root -p < scripts/core/07-seed-fee-rule.sql
mysql -u root -p < scripts/core/08-seed-share-lot.sql
mysql -u root -p < scripts/core/09-seed-org.sql
# Agent 库(若未建)
mysql -u root -p < docs/项目框架设计/表设计/01-mysql-共用底座.sql
python scripts/sync/sync_advisor_rel.py
python scripts/sync/sync_neo4j.py
种子规模(当前)
| 类型 | 数量 |
|---|---|
| 客户 | 28 + 5 手册示范(CUST-DEMO-A~E) |
| 理财代理人 | 5 |
| 分析/风控/合规/运营 | 2+2+2+1(风控另有演示账号 STAFF-90001,我方分支独有) |
| 双角色 staff | 1(STAFF-10091 advisor+compliance) |
| 产品 | 14 |
| 持仓记录 | 58 |
| 交易 | 25+ |
| C×R 适当性矩阵 | 25 行(core_suitability_rule,L0 权威) |
| 赎回费规则(T-1) | 70 行(14 产品 × 5 档,core_fee_rule;档位按 22 号文 §10) |
| 份额批次(T-1) | 61 行(58 行持仓反推,Σ remain_qty 恒等于持仓 qty;CUST-9527 跨批次) |
新增的 07/08/09 三个种子已并入
reset.ps1;00-grant.sql是账号授权脚本, 需管理员单独执行一次,刻意不进 reset.ps1(DROP DATABASE 不清授权行)。 T-1 起reset.ps1需 mysql 客户端在 PATH;若不在 PATH 且需非交互执行, 用python scripts/dev/verify_convert_seed.py(等价流程 + DoD 断言)。