docs(spec): §19按用户纠偏返工——存量盘点+搬运/同步/补缺三线架构+dmsk双用途(补缺+新鲜度),f10全量21万发作废 [nas]
CI/CD / test (push) Successful in 21s
CI/CD / nas-deploy (push) Successful in 28s
CI/CD / nas-verify (push) Successful in 8s

This commit is contained in:
2026-09-07 22:46:06 +08:00
parent 91c3caa6a6
commit 0717baf19b
2 changed files with 77 additions and 60 deletions
@@ -705,84 +705,101 @@ T6 剩余=多日累积后验收 1-4(5 股抽查/600519 2001 起/news 硬顶/PDF
目录日初清(274 绿)。教训: **增量型 marker 必须带日期维度,且要在「首个完整周期结束
前」推演第二天行为**——同日幂等测试全绿掩盖了跨日语义。
## 19. 增补 2026-09-07:财务数据域(财务136,东财超集)——NAS 域(本节为最新,覆盖前文相关决策)
## 19. 增补 2026-09-07:财务数据域(财务136)——存量搬运+同步增量架构(本节为最新,覆盖本节初版「全 NAS 自采」方向)
### 19.0 背景与目标
### 19.0 背景与方向修正
factor session goal「完成财务136,部署在nas上,并验证成功」(用户 2026-09-07 设),数据层
归数据 session 实施。**「财务136」=聚宽 finance 口径参照(JQ 三报表+估值 ≈348 字段),实际
落东财超集**:balance 319 列/income 203 列/cashflow 254 列(含间接法补充资料)/
financial_abstract 105 列/forecast/express/valuation 日频 13 列——09-06 三摸底实测为据
(报告 `docs/fundamental_corpus_probes_20260906.md` ①节)。**全 NAS 自采零 VPS**(与 §18
同哲学;VPS 存量 parquet 仅验证期只读对照,不构成搬运),全 A 口径复用 corpus 股池
(巨潮 szse_stock.json 6168 含退市)。
factor session goal「完成财务136,部署在nas上,并验证成功」(用户 2026-09-07 设),数据层归数据
session。初版方向「全 NAS 自采」被用户当晚纠偏推翻:原话要点「这些内容数据 session 已经下载
过了,先问清楚哪些下载过了哪些没下载过,**不要上去就全量下载新的数据**」——VPS static 七域
本就是本 session 建的 akshare 体系。「零 VPS」重定义=**运行时形态**(NAS 本地 parquet 独立
可用,策略/因子读 NAS 不经 VPS),不否定存量复用与 VPS 作为上游采集器。
### 19.1 接口契约(2026-09-07 夜 11 发实测,直连单线程)
### 19.1 存量盘点(2026-09-07 只读实测,VPS C:\sanguo_vnpy_v2\data\static\)
| 域 | 接口 | 形态 | 实测要点 |
| 域 | 覆盖 | 最新 | 质量 |
|---|---|---|---|
| 三报表·宽层 dmsk | datacenter `RPT_DMSK_FN_{BALANCE,INCOME,CASHFLOW}` `filter=(REPORT_DATE='单期')` | **全市场单期**,pageSize500≈12页/期 | 2026-06-30≈5223行;2009年报2520行(akshare docstring「2010起」已过时);**仅57列**(核心科目+ratio+NOTICE_DATE);含彼时在市后退市股 |
| 三报表·富层 f10 | emweb `zcfzbAjaxNew` 等 PC_HSF10 | 按股全史,`dates=` 每发**服务端硬顶5期** | 600519 319列×103期(1998起);000002 116期(1992起);**dates传20/103期都只返5期**;老退市股(000003,2002退)F10空 |
| valuation | datacenter `RPT_VALUEANALYSIS_DET` | 按股全史1发(~2110行/22列)+**全市场单日快照可行**(`TRADE_DATE='日'`≈5556行) | 回补按股6168发最优;增量日快照12发/日最优 |
| abstract | 新浪 `CompanyFinanceService.getFinanceReport2022` | 按股1发全史(105列宽表,回溯1998) | VPS 同接口已验证可用;新浪单源风险(备用=同花顺接口,不阻塞) |
| forecast/express | datacenter 按期全市场(`ak.stock_yjyg_em`/`stock_yjkb_em` 契约) | 单期全市场 | VPS ak-quarter 同源在采,契约现成 |
| balance | 沪深 5215 只(319 列,银行 221 模板)回溯 1989 | 2026-06-30 ✓ | **北交 340 文件全空 (0,0)=09-01 空 dump 残留** |
| income | 同 5215(203 列) | 2026-06-30 ✓ | 北交同采集器同命运(搬运时逐文件过滤) |
| cashflow | 同 5215(254 列) | 2026-06-30 ✓ | 同上 |
| financial_abstract | 5559 含北交 343 **有数据**(80 指标×期宽表,回溯 1998) | 20260630 ✓ | 无 |
| valuation | 5559 含北交 343 **有数据**(13 列中文名,日频~2100 行/股) | 日更(ak-daily 19:00 喂) | akshare 改名列,非 raw 22 列,原样搬 |
| forecast | 26 期按期全市场文件(2020Q1→2026Q2) | 2026-06-30 ✓ | 2020 前无(可选补) |
| express | 同 26 期 | ✓ | 同上 |
**量级结论**: 纯 f10 全量≈6168股×~34发≈21万发≈2-3 周采集带;dmsk 全期(2009→今
~66期×3表)≈2200发≈1.5h。**双层架构**:dmsk=快而全的覆盖底座(含退市股+NOTICE_DATE
新鲜度),f10=聚宽 136 对齐的富列层(f10 期序天然新→旧,首周即近年可用)。
**采集机制现状**: valuation/abstract/事件域=`sanguo-ak-daily` 每日 19:00;三表+forecast/
express=`sanguo-ak-monthly` 首个周六全量洗库(下次 11/7 02:00,55h 跑道=09-01 事故根治)
**三表季频新鲜度=披露后最多~5 周**(Q3 数据 11/7 入库)。若因子批需披露周可用,VPS 侧
加密(10 月底补跑/改 NOTICE_DATE 增量)——**挂起决策,因子侧与用户定,本 session 不擅动
VPS 调度**。
### 19.2 存储布局(`/volume1/stock/fundamentals/`)
**真缺口清单**(对 corpus 池 6168=沪深 5570+北交 598,差 613 拆解):
1. 沪深退市 **355 只**全周期缺(F10 实测拉 000003 也空,按期接口是唯一源);
2. 北交退市 **258 只**同缺;
3. 北交现役 340 只三表=空文件(数据在按期接口可取);
4. forecast/express 2020 前历史(可选,按期接口顺手)。
### 19.2 接口契约(11 发实测保留,定位重排)
| 域 | 接口 | 实测要点 | 新定位 |
|---|---|---|---|
| dmsk 按期 | datacenter `RPT_DMSK_FN_{BALANCE,INCOME,CASHFLOW}` `filter=(REPORT_DATE='单期')` | 全市场单期≈5223 行,pageSize500≈12页;2009 年报 2520 行(akshare docstring「2010 起」过时);57 列含 NOTICE_DATE;**含彼时在市后退市股** | **补缺层**(§19.4) |
| f10 按股 | emweb PC_HSF10 | 319/203/254 列全史;dates=5 期/发服务端硬顶;回溯 1992;老退市股空 | **全量回补作废**(VPS 存量已有,增量走同步) |
| valuation | datacenter `RPT_VALUEANALYSIS_DET` | 按股全史 1 发+全市场单日快照~5556 行 | 不采集(VPS 日更存量+同步) |
| abstract | 新浪 `CompanyFinanceService` | 按股 1 发全史 | 不采集(VPS 日更存量+同步) |
| forecast/express | datacenter 按期全市场(ak yjyg/yjkb 契约) | 26 期形态已按期 | 2020 前可选补(同 dmsk 族) |
### 19.3 架构定稿:存量搬运+phase3 同步增量+按期补缺
```
dmsk/{balance,income,cashflow}/dt=<REPORT_DATE>/part-*.parquet # 57列全市场按期
f10/{balance,income,cashflow}/<code>.parquet # 319/203/254列按股全史快照
valuation/<code>.parquet # 按股全史(回补产物,22列原样)
valuation_dt/dt=<TRADE_DATE>/part-*.parquet # 日快照(增量层,22列原样)
abstract/<code>.parquet # 105列按股
forecast/dt=<REPORT_DATE>/part-*.parquet # 按期全市场
express/dt=<REPORT_DATE>/part-*.parquet
state/markers/{lane}/{stage}/… state/ids_*.parquet state/depth_summary.json
VPS(上游采集器,ak-daily/ak-monthly 继续喂,零改动)
│ ①一次性搬运 4.22GB(跳过北交空文件)
│ ②phase3 03:00 链扩域:七域增量 rsync(月度洗库整文件重写天然被 mtime 增量捕获)
NAS /volume1/stock/fundamentals/ ← 运行时 NAS 独立可用
static 原形态: {balance,income,cashflow,financial_abstract,forecast,express,valuation}/
<code>.<EXCH>_<domain>.parquet (文件名/列名原样,零转换)
补缺层: dmsk/{balance,income,cashflow,forecast,express}/dt=<REPORT_DATE>/part-*.parquet
state/ (补缺层 marker+账本)
```
列策略=东财/新浪原样全列直存不裁剪(「存多多益善」)。行键:dmsk=(SECURITY_CODE,
REPORT_DATE)去重;f10/valuation/abstract 按股文件=最后写入胜(整股重拉语义,拉取失败
不覆盖好数据——ak-quarter 事故铁律);valuation_dt=(SECURITY_CODE,TRADE_DATE);
forecast/express=(SECURITY_CODE,REPORT_DATE)。
**增量分工三线**: ①VPS 侧零改动(ak-daily/monthly 继续喂全列基线,月度洗库 5 周延迟=
因子验证零影响,factor 需求方已确认);②phase3 03:00 链扩域=基线层同步(七域 rsync,月度
洗库整文件重写天然被 mtime 增量捕获);③**dmsk daily 重扫=新鲜度补丁层**(见 §19.4,DSM
`sanguo-fundamentals-daily` 07:10,错峰 corpus 06:00——东财端点分域+各自限速,并发重叠
安全依据同 corpus)。北交空文件在搬运时过滤(shape==(0,0) 跳过,防下游误读)。「VPS 零参与」
让位于「VPS 零新增负担」:miniQMT 09-18 停服不影响 akshare 线,ak-daily/monthly 健康
运行(事故均已根治)。**下游读法**: 基线层(全列,≤5 周延迟)为主,dmsk 层(57 列核心科目,
披露次日)做新鲜度补丁与退市/北交覆盖。
### 19.3 采集节律(单脚本 `fundamentals_download.py`,corpus 骨架)
### 19.4 dmsk 层双用途(`fundamentals_dmsk_download.py`,corpus 骨架复用)
**daily lane(--until 11:30)**: ①dmsk 近 3 期重扫(NOTICE_DATE>=T-7 增量行,季报月窗自然
加密)②valuation 日快照(昨日 TRADE_DATE,~12发)③forecast/express 近 3 期④受新披露影响
股 f10 补拉(dates=最近5期,日常 0-50 股/日,季报峰 ~500)。**backfill lane(--until 17:30)**:
①dmsk 全期(2009→今先,更早实施首日探边界)②f10 按股全史(期序新→旧天然)③valuation
按股全史④abstract 按股⑤forecast/express 全期。退出码/flock 单实例/--until 墙钢/域限速
1.0-1.5s/UA 全同 corpus。
**用途一·补缺(一次性 backfill lane)**: 全期回补 2009→今 ~66 期×3 表(≈2200 发≈1.5h,
可断点续跑)——补沪深退市 355+北交退市 258+北交现役三表 340 空档;forecast/express 2020
前历史=**可选 backlog 不阻塞 goal**。北交所含性实施首日验证(filter 的
SECURITY_TYPE_CODE 集合,不含则北交补缺单列说明)。
**坑预防清单(corpus 六修正全带入)**: 批内去重(a889b2f);失败不写不标、空结果=合法
done(4xx 确定性跳过);增量 marker 按日折叠(52756e3);一次性容器 `--user 1024:100
--group-add 101 --no-healthcheck`;账本只做 dmsk/valuation_dt/forecast/express 域(按键
幂等),f10/valuation/abstract 按股文件即进度;数据→账本marker 批量提交次序。
**用途二·新鲜度(daily lane,DSM 07:10)**: 近 3 期重扫+`NOTICE_DATE>=T-7` 增量行(~40 发
/日,季报月自然加密)——披露次日即可用(57 列核心科目够选股),不等 VPS 月度洗库。增量
unit=REPORT_DATE 一次永逸按期 marker;行键 (SECURITY_CODE,REPORT_DATE) 幂等去重;
批内去重/失败不写不标/账本+marker 次序等 corpus 六修正全带入
### 19.4 调度与验证
### 19.5 验证三维(factor 持 goal 验收,锚点=factor session `fund136-acceptance-anchors.md`)
DSM `sanguo-fundamentals-daily` 每日 **07:10**(错峰 corpus 06:00;07:00 后遵 factor 错峰
要求),admin,bash `/volume1/stock/fundamentals/run_fundamentals.sh`(骨架=run_corpus.sh
同款一次性容器)。**与 corpus 并发说明**: corpus 回补期占 06:00-17:30 带,财务 07:10 必然
重叠——安全依据=东财端点分域(corpus 打 search-api/np-listapi,财务打 datacenter/emweb,
不同服务)+两进程各自 1.0-1.5s 限速+corpus 实测网络瓶颈 CPU 空闲,NAS 双容器无压力;
「错峰」要求(不同刻齐发)由 07:10 vs 06:00 满足。**验证三维**(factor 持 goal 验收): ①覆盖=全A 股数×期数分布×最新期
新鲜度(NOTICE_DATE max=T-1) ②正确性=600519 锚点(balance 103期/2024 归母权益
2331.06亿/归母净利 862.28亿,对公开数一致;VPS 存量抽样只读对照豁免已在派单约定)
③可用性=NAS 容器内单股全历史读取秒级。**验收锚点文件**: factor session
`fund136-acceptance-anchors.md`
①覆盖: NAS 侧七域文件数/期数分布/NAS 与 VPS 逐域 count 对账(搬运完整性)+dmsk 补缺后
corpus 池 6168 覆盖率(北交三表从空→有,退市股从缺→有);②正确性: 600519 锚点(balance
103 期/2024 归母权益 2331.06 亿/归母净利 862.28 亿)+VPS 存量抽样只读对照(派单已约定
豁免);③可用性: NAS 容器内单股全历史读取秒级(7 域各抽 1 股)。
### 19.5 实施步骤(TDD,每步一 commit 标 [nas])
### 19.6 实施步骤(每步一 commit 标 [nas])
W1 搬运通道: VPS→NAS 一次性 rsync 七域(跳空文件)+逐域 count 对账 → W2 phase3 扩域:
同步链加七域增量(每日 03:00) → W3 dmsk 脚本双 lane+测试(全 mock 零网络)+wrapper+DSM
07:10 注册 → W4 dmsk backfill 全期回补(1.5h)+北交所含性验证+daily lane 首跑 → W5 三维
验证+factor NAS 实测验收+本节实施记录。预期: W1-W2 当日完成=NAS 立即可用;W3-W4 一日
内;总量级 4.22GB 搬运+2200 发一次性+40 发/日,无 2-3 周长尾(初版 f10 全量回补 21 万发
已作废)。语料库首班(09-08 06:00)全程绝对优先,财务 W1 起步于首班巡检绿之后。
W1 wrapper+金丝雀(run_fundamentals.sh+目录骨架)→ W2 脚本 daily lane(dmsk 重扫+valuation
日快照+forecast/express+受影响股 f10 补拉)→ W3 backfill lane 五段 → W4 测试全 mock 零
网络(批内去重/失败不覆盖/按日折叠三教训各钉回归)→ W5 NAS 冒烟(--limit 每段预算,防
假死三修同款)→ W6 DSM 注册(用户 GUI 30s)+首班验证 → W7 三维验证+factor 验收+本节
实施记录。预期: dmsk 层当日可用,f10 层首周近年可用、全量 2-3 周带内自续。
## 参考(调查来源)
Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB