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

4.5 KiB
Raw Blame History

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/??)保持原样,未混入本轮之外的内容。