diff --git a/docs/superpowers/specs/2026-07-21-data-source-fusion-design.md b/docs/superpowers/specs/2026-07-21-data-source-fusion-design.md index 3133cd7..893b037 100644 --- a/docs/superpowers/specs/2026-07-21-data-source-fusion-design.md +++ b/docs/superpowers/specs/2026-07-21-data-source-fusion-design.md @@ -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=/part-*.parquet # 57列全市场按期 -f10/{balance,income,cashflow}/.parquet # 319/203/254列按股全史快照 -valuation/.parquet # 按股全史(回补产物,22列原样) -valuation_dt/dt=/part-*.parquet # 日快照(增量层,22列原样) -abstract/.parquet # 105列按股 -forecast/dt=/part-*.parquet # 按期全市场 -express/dt=/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}/ + ._.parquet (文件名/列名原样,零转换) + 补缺层: dmsk/{balance,income,cashflow,forecast,express}/dt=/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 周带内自续。 ## 参考(调查来源) diff --git a/docs/vps-acceptance-20260813.jpeg b/docs/vps-acceptance-20260813.jpeg new file mode 100644 index 0000000..75c6c8b Binary files /dev/null and b/docs/vps-acceptance-20260813.jpeg differ