|
|
@@ -112,8 +112,12 @@ FAMILIES: list[dict] = [
|
|
|
dict(id='vib_fleet_scalar_z', glob='m5_cms_tcm/fleet_scalar_z.parquet', kind='raw-derived',
|
|
|
func='振动线 · 全场标量 z 值 (fusion 步出件)',
|
|
|
algo='scripts/rudong_fusion_run.py(逆向工程实现: 窗索引 scalar_value → 同 (传感器,测量,工况) 族中位 '
|
|
|
- '→ 稳健 z=(val−med)/(1.4826·MAD); 与随包样件 8,887 行逐值对拍 val 列 100% 一致)',
|
|
|
- gen='scripts/rudong_fusion_run.py', input='m5_cms_tcm/windows/*/index.parquet', pred=('rows',)),
|
|
|
+ '→ 稳健 z=(val−med)/(1.4826·MAD); 与随包样件 8,887 行逐值对拍 val 列 100% 一致)',
|
|
|
+ # input 写**原始件目录名**(族表口径: data/raw/<场>/<input>); 真实取数经窗索引一跳,
|
|
|
+ # 而窗索引本身是 raw-derived(vib_window_index 族) —— 写 windows/_*.parquet 会让审计判"输入不在位"。
|
|
|
+ gen='scripts/rudong_fusion_run.py', input='m5_cms_tcm', pred=('rows',),
|
|
|
+ why='2026-09-18 上链: 由 vib_raw_build.py 的 --with-report 分支按当次窗名调用, '
|
|
|
+ '使 /api/fleet 的振动标量 z 面不再空白'),
|
|
|
dict(id='vib_handoff_and_scans', glob='m5_cms_tcm/*.{json,parquet,csv,md,txt}',
|
|
|
kind='shipped',
|
|
|
func='振动线出件与专项扫描(handoff / 历史 / 基线 / 各类 freq scan / 判级台账)', algo='(无生成端)',
|
|
|
@@ -132,12 +136,37 @@ FAMILIES: list[dict] = [
|
|
|
dict(id='windcms_cache', glob='windcms/cache/*', kind='raw-derived',
|
|
|
func='CMS 报告侧 · 标量缓存', algo='src/windcms/data.py::load_scalars(窗索引 → 标量数组, '
|
|
|
'按内容哈希命名落 cache/)', gen='src/windcms/data.py', input='windcms', pred=('rows',)),
|
|
|
+ # ★2026-09-18 补 (用户令"页面只能基于输入数据重算"之后): `windcms/**` 整族原先一律按
|
|
|
+ # "无生成端"记账 —— 但**报告两步的生成端就在包内**(scripts/windcms.py report → src/windcms/
|
|
|
+ # report.py + report_std.py), 只要 data/raw/<场>/windcms 里有 decode 导出就出得来。
|
|
|
+ # 实测(2026-09-18): 从重算出的窗 w0316 一键跑出标准模版报告 + 38 台逐台页 + 总览, 判级 38 台
|
|
|
+ # (报警 3 / 优秀 35), 缺的只有 model_run/fusion 两步的融合级列(如实写 —)。故拆成两族按 raw-derived 记。
|
|
|
+ dict(id='windcms_report_std', glob=['windcms/报告_CMS振动状态评估报告_*.md',
|
|
|
+ 'windcms/报告_CMS振动状态评估报告_*.docx',
|
|
|
+ 'windcms/登记_三轴_38台.csv'], kind='raw-derived',
|
|
|
+ func='CMS 标准模版评估报告 (三轴: 状态等级 × 证据状态 × 行动等级建议)',
|
|
|
+ algo='src/windcms/report_std.py::build(结构化判级 → 报告 md + docx + 登记 csv; '
|
|
|
+ '由 scripts/windcms.py report 调用)',
|
|
|
+ gen='src/windcms/report_std.py', input='windcms', pred=('rows',),
|
|
|
+ why='★同名件有两种来源: 观澜自算(本族: 从 data/raw/<场>/windcms 的 *_decode.json 算) 与 '
|
|
|
+ '厂家报告转录(scripts/vib_reports_build.py, 输入是现场振动分析报告 PDF)。按名字认领不了'
|
|
|
+ '这层区别 ⇒ 以"是否由本步生成"为准, 判据看 m5_cms_tcm/vib_raw_manifest.json 的 steps'),
|
|
|
+ dict(id='windcms_report_overview', glob=['windcms/report.md', 'windcms/index.html',
|
|
|
+ 'windcms/index_eng.html', 'windcms/overview.html',
|
|
|
+ 'windcms/turbines/*'], kind='raw-derived',
|
|
|
+ func='CMS 诊断总览页 + 逐台页 + 结构化层报告',
|
|
|
+ algo='src/windcms/report.py::build(逐台 turbines/<台>.html + 总览 overview/index.html + '
|
|
|
+ 'report.md; 融合级列要 model_run/fusion 出件, 缺则如实写"—")',
|
|
|
+ gen='src/windcms/report.py', input='windcms', pred=('rows',)),
|
|
|
+ dict(id='windcms_kb', glob='windcms/kb.json', kind='raw-derived',
|
|
|
+ func='CMS 知识库索引 (问答检索用)',
|
|
|
+ algo='src/windcms/knowledge.py::build(由 scripts/windcms.py kb 调用; 离线无模型时 0 chunks 也算跑成)',
|
|
|
+ gen='src/windcms/knowledge.py', input='windcms', pred=('rows',)),
|
|
|
dict(id='windcms_pages', glob='windcms/**', kind='shipped',
|
|
|
- func='CMS 振动评估报告页/逐台页', algo='src/windcms/report_std.py(自算报告)+ scripts/windcms.py report;'
|
|
|
- '两者都要六层链的 model_run/fusion 出件, 本包没有 ⇒ 跑不出来',
|
|
|
- gen=None, input=None, pred=(),
|
|
|
- why='生成端在包内但输入不足(model_run/fusion 未随包) ⇒ 运行期不从交付包补(用户令 2026-09-17), '
|
|
|
- '`/api/vibcms` 如实回 no_report; 要出件须研发先补 model_run/fusion 两步'),
|
|
|
+ func='windcms 里其余件 (厂家报告转录 / 知识库出件等)',
|
|
|
+ algo='(无随包生成端)', gen=None, input=None, pred=(),
|
|
|
+ why='上述两族与 cache 之外剩下的 windcms 件: 运行期不从交付包补(用户令 2026-09-17), '
|
|
|
+ '要出件须研发补生成端'),
|
|
|
dict(id='sop_workspace', glob='sop/**', kind='shipped',
|
|
|
func='SOP 中间件/评审/事实契约底稿', algo='(无生成端)', gen=None, input=None, pred=(),
|
|
|
why='评审过程件, 属人工作业留痕'),
|