PLAN 8-4b 열 명세를 화면에 세움. 일감 2 의 마지막 덩어리(엔진 → API → 화면).
왜 실무 서식 그대로인가
이 화면의 첫 사용자는 「프로그램이 맞나」를 확인하려는 설계자임. 보기 좋게
재배치하면 실무 산출서와 눈으로 대조를 못 함. 열 순서·머리글 문구를 실무
토적표(= 오솔길 1.BOM 36열)에 맞춤.
소수 자리는 표기 규칙일 뿐 (PLAN 8-16)
서버는 전정밀 값을 주고 자르는 것은 화면뿐임. 실무 시트 관측대로
단면적·체적 2자리 · 보정량계·유용토·차인·누가 1자리 · 거리 정수.
원가 쪽(줄마다 원 단위 절사)과 규칙이 반대라 그 코드를 옮기지 말 것.
구성
좌측 = 산출 조건 읽기 전용(산출법·토량환산계수). 계수는 서버 상수가 유일
정의처라 화면이 값을 다시 적지 않음.
우측 = 시트 탭 + 표. 지금 서는 장은 토적표 하나, 나머지 6장은 차례로 붙임.
표는 한 번만 받아 좌측·우측이 함께 씀(중복 호출 없음).
측점 열·머리글은 sticky — 가로로 굴러도 어느 줄인지 보임.
locale 은 B08 키 8개만 추가 (다른 창과 겹치는 파일이라 기존 줄 무접촉).
검증 — 공용 브라우저 실화면.
타입검사 오류 0. 탭 「토적표」, 3단 머리글 3행(9/5/14셀), 본문 65행 x 20열,
합계행 표시. 둘째 줄이 API 값과 일치: NO.1 거리 20 · 절토토사 1.96/22.34/20.10
· 암 2.54/25.43/29.24 · 측구 0.08/2.58/2.33 + 0.10/1.02/1.17 · 보정량계 52.8
· 성토 4.82/48.79 · 유용 48.8 · 차인 4.0 · 누가 4.0.
⚠ 어두운 테마에서 머리글이 묻히던 것을 프로젝트 테마 변수로 바꿔 고침 —
대비 실측 머리글 10.51:1 · 본문 11.32:1 (기준 4.5:1).
조작으로 바꾼 화면은 사용자가 보던 주소로 되돌려 놓음.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PLAN 8-4b 열 명세대로. B06 이 이미 낸 측점별 단면적을 다시 재지 않고
체적화만 함 — 새 수량을 낳지 않으므로 캐시·조작 경로 불필요(CLAUDE.md 5장).
열 구성 (실무 토적표 = 오솔길 1.BOM 36열과 1:1)
측점·거리·절토[토사·암 각 단면적/입적/보정량]·측구터파기[토사·암 각 3칸]
·보정량계·성토[단면적/입적]·유용토·차인토량·누가토량.
사면 계열(층따기·면고르기·법면보호공·지장목제거)은 사면길이가 아직 없어 일감 3.
계산 규칙
체적 = (앞 단면적 + 현 단면적)/2 x 거리. 첫 측점은 앞이 없어 체적 없음.
보정량 = 체적 x 다짐 환산계수 — 정의처는 EARTHWORK_CONVERSION_FACTORS 한 곳,
여기서 값을 다시 적지 않음(토사 0.90 / 리핑암 1.15 / 발파암 1.30).
값을 자르지 않음 — 품셈 1-2-2 는 표기 규칙이고 절사는 화면 몫(PLAN 8-16).
원가 쪽(줄마다 원 단위 절사)과 규칙이 반대라 섞지 말 것.
TODO(미결 · PLAN 8-4b) — 설계가 측구를 토사·암으로 안 나눠 줌(ditch_area_m2 한 값).
잠정으로 그 측점 절토 토사:암 면적비로 안분함. 측구는 절토부에 파므로 같은
지반을 만난다는 것이 근거. 설계가 측구 지반을 따로 내면 _split_ditch 만 교체.
API — GET /api/projects/{id}/quantity/{route_id}/earthwork-table,
경로 생략형은 워크플로 최신 노선으로. main.py 는 자기 두 줄만 추가.
검증 — tmp/tests/test_b08_earthwork_table.py 14건 통과.
거창 실무 BOM 실측값 재현(단면적 1.89 → 체적 9.45 → 보정 8.505,
다음 측점 18.10 → 16.29, 측구 0.18㎡ → 10m당 1.80 → 1.62).
공용 브라우저에서 실 API 호출로 route 150·측점 65곳 확인 — 측점 20 에서
(0.2723+1.9615)/2x20 = 22.338, x0.9 = 20.1042, 암 25.427 x1.15 = 29.24105,
측구 안분 0.0784+0.1016 = 0.18 로 전건 일치.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
PLAN 8-5·8-6·8-7 의 B08 일감 1번. B09 의 ③단가산출을 여는 선행 작업임.
공종의 정체 = 품셈 절 번호
「9-3-1. 인력」처럼 절 제목이 공종이고 표의 행은 조건별 변형(토질·암종·규격)임.
계층·정렬은 목차표(F0001)에서 나오고 표가 그 절에 붙음. 목차 477노드,
표 456/475 귀속(미귀속 19 는 절번호 없는 부록·경과조치).
pum_form — 뒤집히면 값이 조용히 반대가 되는 자리
productivity(작업능력, 품=1÷값) 16 · requirement(소요량, 품=값÷밑수) 244 ·
coefficient(시공능력 공식 K·f·E) 19 · reference(1장 적용기준·할증·참조지시) 94 ·
undetermined 83.
⚠ 판정 순서가 뜻을 가짐 — 「작업능력(㎥/hr)」 표의 비고에 「보통인부 1인/일」이
흔히 붙어 있어 직종을 먼저 보면 생산량형이 소요량형으로 뒤집힘. 생산량형 표지를
직종보다 앞에 둠.
담당 경계 (PLAN 8-7)
공종 축만 만들고 자원 축(resource_kind·resource_code·amount)은 안 채움 — B09 몫.
대신 원문 셀 raw_row 를 그대로 실어 B09 가 476표를 다시 열지 않게 함.
판정 실패분은 빈칸이 아니라 form_undetermined_*.json 목록으로 냄.
산출 (resources/data_work_item_master/)
work_item_master_2026-01-01.json · form_undetermined_2026-01-01.json · _manifest.json.
dataset_version 에 dataset_id·effective_date·sha256 세 쪽 기록 — 재현성.
공종코드 FP-09-03-01 형식, sort_order 는 STmate 관례대로 256 간격.
검증 — tmp/tests/test_b08_work_item_master.py 14건 전건 통과.
생산량형이 비고의 직종에 뒤집히지 않는 것, 직종이 둘째 열에 있어도 잡는 것,
raw_row 보존, 자원 축 미혼입, 미판정의 목록 등재를 각각 못 박음.
전체 회귀 382 passed (실패 3건은 B05 구조물·코리도 기존 깨짐, 본 변경과 무관).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
사용자 판단: 수량 산출서 양식 아님 (2026-08-31). 내일 재작업 예정.
B08_Quantity_Proto.py 삭제, 라우터·UI 페이지 이관 전 상태로 복원.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>