feat(376-1): B07 구조물 도면 목록 · 단건 서버(연결된 조합 도면 · 조합 키 중복 없앰 · 더한장 장마다 · 도각 도번 · 도면명 · 맨 뒤 덧붙임 · 확정본 kind)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XWh5wNNycMkbwMpACz1rte
This commit is contained in:
2026-10-17 14:42:49 +09:00
co-authored by Claude Opus 5.5
parent 7329065c3b
commit 56c8ba96b9
6 changed files with 272 additions and 6 deletions
@@ -90,6 +90,11 @@ from B07_DesignDetail.B07_DesignDetail_Router_Support_Plan import (
WATERSHED_LAYOUT,
plan_kind_items,
)
from B07_DesignDetail.B07_DesignDetail_Router_Support_Structure import (
STRUCTURE_PREFIX,
read_structure_drawing,
structure_items,
)
from B07_DesignDetail.B07_DesignDetail_Schema import (
DesignDrawingItem,
)
@@ -242,7 +247,8 @@ def _drawing_list(project_root: Path, longitudinal_path: Path) -> list[DesignDra
confirmed=bool(manifest_drawings.get(drawing_id, {}).get("confirmed")),
)
)
# 표준도(구조물도)는 2026-09-13 B08 「구조물도」 탭으로 이관 — 사용자 확정 ③, PLAN 3장 ④.
# 구조물 도면(376) — 맨 뒤에 덧붙임(앞 도면번호 안 밀림) · 조합마다 한 장 · 더한장은 장마다.
drawings.extend(structure_items(project_root, manifest_drawings))
_store_drawing_numbers(project_root, drawings)
return drawings
@@ -480,6 +486,8 @@ def _read_drawing(
kind = drawing_id # id와 kind가 같은 단장 도면
elif PLAN_KIND_ID.fullmatch(drawing_id):
kind = "plan"
elif drawing_id.startswith(STRUCTURE_PREFIX):
kind = "structure"
else:
kind = "longitudinal" if _LONG_ID.fullmatch(drawing_id) else "cross"
label = str(manifest_entry.get("label") or drawing_id)
@@ -557,6 +565,9 @@ def _read_drawing(
)
return "plan", label, drawing, False, None
if drawing_id.startswith(STRUCTURE_PREFIX):
return read_structure_drawing(project_root, drawing_id)
if _LONG_ID.fullmatch(drawing_id):
source = _read_json(longitudinal_path)
chunk = next(