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