Files
group_xinghuo_jinrong/scripts/core
GaoYiYuan_0626 5e6fa06d03 基金转换 T-10:普通申赎批次维护(FR-C16)
让 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 同源断言)
2026-09-10 18:28:48 +08:00
..

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 断言)。

RBAC 联调账号见

rbac-seed-reference.md