From f3f37494f28bb734e445b7a99a04f514e796ee87 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 20:12:22 +0900 Subject: [PATCH] =?UTF-8?q?fix(B06):=20[=EC=A0=80=EC=9E=A5]=EC=9D=B4=20?= =?UTF-8?q?=E3=80=8C=ED=96=89=EC=9D=80=20=EC=9E=88=EB=8A=94=EB=8D=B0=20?= =?UTF-8?q?=EC=84=A4=EA=B3=84=EA=B0=80=20=EB=B9=88=20=EC=B8=A1=EC=A0=90?= =?UTF-8?q?=E3=80=8D=EB=8F=84=20=EC=B1=84=EC=9A=B0=EA=B2=8C=20=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 재생성이 `cross_sections` 행을 지우고 다시 쓰면 `data.design` 에 면적 4키만 남는다. `get_cross_section_designs` 는 `ground_type` 있는 줄만 담으므로 그 상태는 「설계 없음」이고, B08 토적표가 통째로 0 이 됐다(창 셋에서 같은 증상). 원인은 결함이 아니라 분담이었다 — 체인은 재생성 뒤 [확정]을 불러 그 자리를 채웠고, 재생성만 따로 도는 길에는 그 단계가 없었다. 그래서 [확정] 없이도 정본이 서게 한다. - [저장]이 확정과 **같은 조회**(`get_cross_sections_missing_design_chainages`)로 빈 측점을 골라 기본 설계로 채운다. - ⚠ **값이 있는 행은 안 건드린다** — 사용자 조작값·이월분이 거기 있다. 시험으로 잠금. - 실측(route 184): 저장 뒤 DB 설계 62행·38키 복구, 층따기 13,696.8 ㎡, 측구 토사 0.173 / 암 8.886 ㎡ — 파일 기반 값과 일치. Co-Authored-By: Claude Opus 5 (1M context) --- B06_Section/B06_Section_Router_Confirm.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/B06_Section/B06_Section_Router_Confirm.py b/B06_Section/B06_Section_Router_Confirm.py index e4755389..9df0672e 100644 --- a/B06_Section/B06_Section_Router_Confirm.py +++ b/B06_Section/B06_Section_Router_Confirm.py @@ -189,9 +189,15 @@ async def save_sections( ) stored_path = await get_project_storage_relative_path(connection, project_id) known = await get_cross_section_chainages(connection, route_id) + # 행은 있는데 **설계가 빈** 측점도 채운다(2026-09-09). 「빈 설계」란 `design` 이 + # 없거나 **`ground_type` 이 없는 것**이다 — 재생성이 행을 다시 쓰면 면적 4키만 + # 남는데, 그 상태를 화면·B08 이 「설계 없음」으로 읽어 토적표가 통째로 0 이 됐다. + # 예전에는 체인이 뒤이어 부르는 [확정]이 이 자리를 채워 가려져 있었다. + # ⚠ **값이 있는 행은 건드리지 않는다** — 사용자 조작값·이월분이 거기 있다. + missing = await get_cross_sections_missing_design_chainages(connection, route_id) project_root = Path(resolve_stored_project_path(stored_path)) - rowless = await asyncio.to_thread( + rowless = missing + await asyncio.to_thread( _rowless_station_chainages, project_root, str(existing["longitudinal_file_path"]),