aps-agent/docs/development/dxf-drawing-acceptance.md

57 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DXF-01 工程图纸自动识别 · 验收报告(2026-08-06)
> Goal:以 `5060102101-001-e.dxf`(MTU 12V 183 TB32 发动机安装图,AC1015,德英双语)为样例,
> 完成 工程目录发现图纸 → DXF 解析 → 图纸可视化 → 标题栏与技术信息提取 →
> 物料/BOM/工艺路线候选 → 人工确认 → 写入正式主数据 → 查询验证 → 参与 MRP 与排产 的安全管线。
## 交付清单
| 层 | 交付物 | 位置 |
| --- | --- | --- |
| 领域 | DXF 解析 + 候选生成 + SVG/图层过滤 + 目录发现 + 缓存 | `server/aps_domain/dxf_drawing.py`(moduleId: domain-dxf-drawing) |
| 多模态 | `DxfDrawingExtractor`(kind=dxf_drawing, source=DXF_PARSE)注册进 `default_registry`;入库 fail closed 指引 `/api/dxf/stage` | `server/aps_domain/multimodal.py` |
| 网关 | `POST /api/dxf/parse` · `/parse-path` · `GET /api/dxf/{drawingId}/svg?layers=` · `GET /api/dxf/discover` · `POST /api/dxf/stage` | `server/gateway/app.py` |
| 前端 | 图纸识别面板(预览/缩放平移/图层开关/字段置信度/候选确认) | `apps/web/src/drawing/DrawingPanel.tsx`(moduleId: web-drawing)+ App.tsx 接线 |
| 测试 | 14 项黄金测试(解析/边界/SVG/图层/发现/多模态/P2 确认写物料/驳回不写/网关全链路) | `tests/golden/test_dxf_drawing.py` |
| 文档 | 端点清单、只读端点备案、确认暂存备案、CHANGELOG | `docs/architecture/harness.md`、`docs/CHANGELOG.md` |
| 依赖 | ezdxf>=1.4 | `requirements.txt`、`pyproject.toml` |
## 样例识别结果(实证)
- 标题栏通道①命中:块 `SF_STD_A` 88 个 ATTRIB(置信 0.9)。
- 图号 `506 010 21 01` ↔ 文件名 `5060102101` 互证 → 置信 0.95;张次 `1` 沿用文件名 `001` 写法 → 物料编码候选 `5060102101-001`。
- 名称 `Motor 12V 183 TB32 / Installation Drawing / Engine 12V 183 TB32`;比例 `1:5`;种类 `EB/Installation` → 类型推断成品(0.6,需确认);版本 `e`(文件名后缀 + B_FREI 互证 0.9);适用机型 `OM 444 LA`。
- 未填写字段(WERKSTOFF/MASSE/AUFTRAGSNUMMER 等)保持空 + missing,**不编造**。
- 装配位置号 38 个(14.001/06.020/15.108/09.152…)→ BOM 行候选:子件编码/名称/数量全部 `missing`(图纸无明细表)。
- 技术说明 9 条原文保留(德英双语注释),仅参考、不推断工艺。
- SVG 预览:2.2MB DXF → 1.3MB SVG(白底),约 1.3 秒;图层过滤变体缓存(如仅图层 6 → 约 260KB)。
## 安全边界(与 Goal 功能边界逐条对应)
- 候选 → `POST /api/dxf/stage` → `master.material/bom/routing.upsert` 的 **P2 确认卡**;唯一执行路径仍是 `/api/actions/confirm`;确认前绝不写世界(测试实证:stage 后 `materials` 数量不变)。
- BOM 数量、采购属性、标准工时、设备能力、工艺版本:图纸未承载 → 显式 missing / 不生成候选,绝不臆造。
- 审计:`dxf.parse`(P0/TOOL)、`dxf.stage.*`(P2/GATE,携带 drawingId 关联确认卡)。
## 验证
- `pytest tests/golden` 全量:**1042 passed / 1 failed / 2 warnings(271.7 秒)**。
唯一失败 `test_preference_features.py::test_extract_features_from_world` 为既有失败
(import `server.knowledge.preferences`,本轮改动前同样失败,与 DXF 无关)。
- 前端 `npm run build`(tsc -b + vite build)通过。
- ruff:本轮新增/修改文件全绿(`dxf_drawing.py`、`test_dxf_drawing.py` 0 问题;
`multimodal.py` 仅剩既有 TRY004 基线;`app.py` 46 项为既有基线,未扩散)。
- 影响分析:GitNexus MCP 工具在本运行环境不可用,改走人工影响分析——新增模块零调用方、
multimodal/app 纯增量分支、两处 golden 注册表断言扩展(已同步);爆炸半径 LOW,无 HIGH/CRITICAL。
## 待开发项(不宣称已完成)
1. 真实德文明细表(Stückliste)块内表格识别 → BOM 名称/数量自动映射。
2. 中文 CAD 标题栏样例覆盖(当前仅有通道②规则,无真实样例验证)。
3. 图元级选择/高亮与字段 ↔ 图元双向定位。
4. 几何长度/面积推导下料尺寸;自然语言入口(「识别这个图纸」意图路由进 ChatPanel)。
5. MRP/排产端到端联动验证:物料经 P2 写入后即可被 `master_query`/MRP 消费(机制复用既有 master.* 写入路径,未做真实排产场景演练)。
## 发布动作
无 commit/push/merge/publish。工作区原有未提交改动(多文件 M/??)保持原样,未混入本轮之外的内容。