lzf_0626
6f397ab513
feat(data): 510300 回填真实值并在产品页披露;511810 口径查清
按项目方决定处理三件事。
## 510300(沪深300ETF)
决定:保留 fund_manager = "南方基金" 作演示口径,**不**改成"华泰柏瑞"
(改了它会退出 MarketQuoteSyncService 的同步范围,投顾与知识条目也不该再算自家产品),
但净值与费率改成真实值,并在产品页显式披露它不是本公司产品。
- 回填(tools/backfill_product_snapshot.py --codes 510300 --apply --overwrite):
current_nav 4.500000 → 4.5794、current_nav_at 同步为 2026-09-11 15:00:00、
management_fee_rate 0.5000 → 0.15、custodian_fee_rate 0.1000 → 0.05
- 产品页披露:mock-data.js 给这只加 product_note,详情页新增提示块渲染它
("本产品为同指数参考产品,非本公司发行的基金,仅用于功能演示")。
同时把 mock 里这只的净值/费率也对齐真实值,避免出现"页面显示 mock 值、
库里是真实值"两套数字。
- 产品详情页的 css/js 版本参数提到 20260913-5,避免旧缓存。
## 511810(货币ETF南方)
之前说它"三个数量级不一致"是**我比错了接口**:QUOTE_API 返的是**场内交易价格**
(货币 ETF 约 100 元/份),而 current_nav 的口径是 DWJZ 单位净值。
查证结果:库里 0.2661 正是 09-11 的真实 DWJZ,快照时间也对得上 —— 不是脏数据,是旧值。
口径由其余 19 只的一致性确定(current_nav == DWJZ)。
要不要刷新到最新(0.2332)属运维节奏问题,**本次未执行**。
## 最小交易金额
按项目方口径:一律**以产品字段为准**(100.00 元),不用「1 手 × 净值」推算金额 ——
后者会与字段值不一致,客户会看到两套数字。docs/42 的 1.1 节据此重写。
## 工具改名
tools/backfill_product_fees.py → tools/backfill_product_snapshot.py:扩展为
净值 + 费率统一入口,新增 --codes 限定范围(避免顺手把全部快照刷成最新,
全量刷新是 ProductHistorySyncService / MarketQuoteSyncService 的职责)。
安全设计不变:默认 dry-run、默认只补 NULL(净值永不为空,所以刷净值需显式
--overwrite)、写入走单事务。
门禁:ruff 通过 / mypy 249 文件 0 错 / 单元+契约 1377 passed 2 skipped。
2026-09-13 19:47:10 +08:00
..
2026-09-12 10:37:53 +08:00
2026-09-11 22:31:51 +08:00
2026-09-13 18:31:38 +08:00
2026-09-13 16:20:52 +08:00
2026-09-12 14:40:53 +08:00
2026-09-09 21:55:37 +08:00
2026-09-10 15:55:54 +08:00
2026-09-11 17:26:18 +08:00
2026-09-09 21:55:37 +08:00
2026-09-11 18:42:46 +08:00
2026-09-12 15:50:37 +08:00
2026-09-11 18:42:46 +08:00
2026-09-11 18:56:26 +08:00
2026-09-12 11:27:28 +08:00
2026-09-11 18:56:26 +08:00
2026-09-11 18:42:46 +08:00
2026-09-11 14:46:40 +08:00
2026-09-12 12:50:14 +08:00
2026-09-11 18:42:46 +08:00
2026-09-11 14:46:40 +08:00
2026-09-11 14:46:40 +08:00
2026-09-11 14:46:40 +08:00
2026-09-10 15:55:54 +08:00
2026-09-11 14:46:40 +08:00
2026-09-11 15:40:32 +08:00
2026-09-10 15:55:54 +08:00
2026-09-12 16:30:01 +08:00
2026-09-10 18:35:52 +08:00
2026-09-10 21:36:23 +08:00
2026-09-11 14:47:08 +08:00
2026-09-11 14:47:08 +08:00
2026-09-11 15:40:32 +08:00
2026-09-11 19:15:23 +08:00
2026-09-11 20:00:56 +08:00
2026-09-11 21:49:46 +08:00
2026-09-12 14:41:13 +08:00
2026-09-12 09:37:00 +08:00
2026-09-12 14:57:56 +08:00
2026-09-12 11:27:28 +08:00
2026-09-12 11:46:47 +08:00
2026-09-12 12:10:03 +08:00
2026-09-12 12:22:32 +08:00
2026-09-12 13:14:57 +08:00
2026-09-12 13:00:30 +08:00
2026-09-12 13:23:43 +08:00
2026-09-13 19:17:56 +08:00
2026-09-12 17:04:37 +08:00
2026-09-13 19:47:10 +08:00
2026-09-11 18:42:46 +08:00
2026-09-11 16:51:52 +08:00
2026-09-11 19:52:08 +08:00
2026-09-09 21:55:37 +08:00
2026-09-11 20:06:23 +08:00
2026-09-11 16:57:47 +08:00
2026-09-11 16:57:47 +08:00
2026-09-11 16:11:30 +08:00
2026-09-11 10:46:56 +08:00
2026-09-11 17:58:46 +08:00
2026-09-11 19:24:57 +08:00
2026-09-12 11:15:24 +08:00
2026-09-11 20:00:56 +08:00
2026-09-11 19:15:50 +08:00