「인」 오독 넷(원문 대조)
- 8-6-2 드론방제·8-6-3 지상방제 「(단위 : 인)」은 **소요인력**이지 공종 밑수가 아님
- 13-2-4 야면석 채집 「(단위: 인 당)」은 표 안이 ㎡당·㎥당 두 줄이라 하나로 못 정함
- ⚠ 넓게 「인」을 버리면 2-2-5 천공기가 사라짐(「천공인부 1인당 1대」) — 숫자가 붙었나로 좁게 가름
칸 이어붙임 — 앞 칸 값 + 뒤 칸 단위로 **원문에 없는 밑수**가 서던 자리
- 13-2-4 「0.36 ㎥당」(0.36 은 뒷길이 60 의 ㎡당 값)
- 5-19-2 「30 ㎥당」(30 은 표토두께 ㎝)
- ⇒ detect_basis 가 **칸 하나 안에서만** 봄. 「100㎥당」처럼 한 칸에 다 있는 것은 그대로
- 마스터 재생성: 밑수 확보 182 → 180 (없는 값 둘이 빠지고 넷이 미확보로 정직해짐)
- tmp/tests/test_b08_master_basis_person.py 신설(5건)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
사토장
- 카드 면적표에 「사토장」 줄을 따로 세움 — 성토와 **합치지 않음**(확정 ㉠).
사토장이 없는 측점에는 줄을 세우지 않음(어느 측점에 있는지 표에서 보이게)
- 성토와 다른 색으로 둠 — 같은 색이면 한 덩어리로 읽힘
등록부(다른 창 요청, 기본값 없음 — 현장 치수라 지어내지 않음)
- `erosion_check.top_length_m`·`bottom_length_m` — 골막이 정면적이 사다리꼴이라
두 변이 있어야 셈. 실무 정본 산출식이 상장ⓐ·하장ⓑ를 씀
- `soil_guard.form` 에 「떼」 추가 — 실무 정본에 떼흙막이 산출식이 있는데 붙일 칸이 없었음
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
사토장이 **측점 위에만** 서므로(사용자 확정 ③) 거리는 「발생점 → 사토장 측점」
누가거리로 그냥 나옴. 가정할 것이 없어짐.
- `_spoil_sites` — 측점 설계에 실려 온 사토장 구간값을 구조물 단위로 접음(다시 안 셈)
- 거리 = 발생점별 물량 가중평균 + `extra_distance_m`(항상 더함)
- 사토장이 없으면 종전대로 설계 입력값 · 그것도 없으면 막힘(임의 거리 안 넣음)
- 사유에 사토장 측점·수용량·**못 담는 몫**을 실어 화면이 드러내게 함
- `distance_basis` 칸 신설 — 받는 쪽이 「측점 기준」과 「설계 입력값」을 갈라 봄
⚠ 사토장에 쌓아도 **유토곡선 사토는 줄지 않음** — 그 흙은 여전히 실어 내야 하는 흙이고
사토장은 목적지임. 줄이면 운반비가 사라짐. (네 창에 확인 요청함)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 「재료량은 설계수량에 따른다」는 값을 안 준다는 뜻이지 안 센다는 뜻이 아님.
근주이식·임목파쇄(셀지 말지가 설계 판단)와 성격이 다름 — 확정 ⑨·⑩ 과 같은 틀로 감
- 제안값(울진 소광 §8 관측): 각재 50×50 0.0044㎥ · 판재 T12 0.0029㎥ · 못 0.03㎏/개소
- ⚠ 「실무 관측값이지 법정 기준 아님」과 손율 원문값(비탈 50% · 수평 80%)을 줄 사유와
화면 칸 밑에 함께 적음 — 값만 박으면 「대신 페이지에 남길 것」 지시를 어기는 것
- 개소가 안 서면 재료도 안 섬(밑수가 그 줄) · 자재 축으로 감(할증은 자재총괄에서 한 번)
- 설정 `frame_material` + 화면 칸 셋
- tmp/tests/test_b08_frame_material.py 신설(7건)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
교본 6장 3절이 운반처리 위치를 평면도·횡단도에 표시하도록 요구함.
- 긴 파선+점(9 3 2 3) · 사토장 색 — **터파기 짧은 점선과 선 종류를 가름**
- 이름표 「유용토운반작업장 ○㎡」 를 평상 위에 얹음
- 말풍선에 단면·폭·구간 용량·못 담은 몫·잘림 경고와 **근거 두 줄**
(「폭은 노면 끝에서 잼」·「교본 6장 3절이 표시를 요구함」)
- 지반을 못 만나 잘린 사토장은 붉게 — 사면 미폐합 경고와 같은 결
- 계획선을 만져도 사토장이 안 사라지게 저장분 폭·구간값을 이어 붙임
(폭은 구간 용량에서 서버가 정한 값이라 브라우저가 다시 풀지 않음)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
소광리 정본 「개거(150-200) (2)」·「L형수로-(201)」 — **둘 다 m당**.
⚠⚠ **두 표가 담는 것이 다름.** 값이 비슷해 보여 합치고 싶어지는 자리라 못 박음:
```
콘크리트 개거 150×200 터파기 · 유로폼 · 면목 **세 줄뿐** — **콘크리트 본체 줄이 없음**
콘크리트 L형수로 H=0.2 터파기 · 되메우기 · 잔토 · **콘크리트** · PVC Φ50 · 이형철근 D13 ·
거푸집 · 면목 **여덟 줄**
ⓘ 같은 것 — 둘 다 m당이고 거푸집 계열(유로폼·거푸집)과 면목이 있음
```
⚠ 개거에 콘크리트가 없는 것은 **빠뜨린 것이 아니라 원문 그대로**임. 0 으로 때우거나
L형수로 값을 옮겨 채우지 않음 — 돌붙임(메)에서 세 줄을 안 만든 그 판단과 같음.
⚠ **PVC Φ50 은 줄만 있고 수량 칸이 빔** — 안 세우고 그 사실을 줄로 냄.
⚠ 규격이 **붙박이**(「콘크리트 개거 150×200」) — `open_ditch` 등록부에 **옵션이 하나도 없음**.
`ditch_spec` 을 주면 L형수로로 갈림. 칸이 생기면 열면 됨.
**측구(`ditch_side`)는 안 건드림** — `design_owner: 횡단 설계` 라 B06 소관이고 `enabled: False`.
정본 「측구수로400/500」은 **「터파기 계산서」**라 터파기·잔토·되메우기 셋뿐임(본체 없음) —
그쪽이 쓸 때를 위해 적어 둠.
실전개 (연장 10m)
개거 터파기 0.3㎥ · 유로폼 5.5㎡ · 면목 20m
L형수로 터파기 3.1645 · 되메우기 1.2997 · 잔토 1.8647 · 콘크리트 1.508 ·
이형철근 3.98㎏ · 거푸집 7.38㎡ · 면목 10m
자체검증 — 새 시험 5건(정본 값 대조 · 개거에 콘크리트가 없는지 · 잔토 = 터파기−되메우기 ·
빈 수량 줄 · 없는 규격), 회귀 596 통과 · 0 실패.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
「반쪽 단가」 표시가 여태 **이름을 카탈로그에서 못 찾은 줄**만 잡고 있었음. 그물 밖에 둘이
더 있었고, 둘 다 **금액이 서 있는 줄**이라 표시가 없으면 완성된 값으로 읽혔음.
- 기초잡석 12-25 — 원문에 「운반 | 덤프트럭(15ton)」 줄이 있는데 우리 단가에 없음.
⚠ 사유를 「원문이 값을 안 줌」으로 뭉뚱그리지 않음 — 그 값은 품셈 10-12(덤프운반)가
**운반거리로** 내는 것이라 **거리가 정해지면 풀림**. 「영영 막힘」과 「곧 풀림」은
사용자가 보는 뜻이 다름
- 기초잡석 소할 — 원문이 「**브레이커 사용할 때 제외**」라 한 줄인데 지금은 무조건 붙음.
⚠ 조건부 열두 줄 중 **이것만 금액이 서 있음**(다른 열한 줄은 붙는 쪽, 이것은 빠지는 쪽)
- 규준틀 11-2·11-3 — 지금 값은 **인력 품만**. 손율은 원문에 있음(비탈 50% · 수평 80%)
⚠ 앞 보고를 정정함 — 규준틀은 「표시가 아무것도 없다」고 했으나 **B08 인계가 이미
「재료량은 [주]④ 설계수량에 따른다라 미확보」를 싣고 있었음.** 화면 문구 뒤쪽이 잘려
안 보였던 것임. 그래서 그 말은 되풀이하지 않고 **B09 쪽에서만 아는 것**만 보탬.
「잘린 자리를 사유가 없는 자리로 읽지 말 것」을 주석에 남김
검증: pytest 300 통과(신규 5)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
품셈 9-21 제근은 장비 규격 두 갈래(0.2㎥·0.7㎥)를 **고르라고** 둔 표인데 둘 다 붙고
보통인부도 두 번 붙어 단가가 **128,039원**으로 서 있었음. 밑수가 원문에 없어 아직
금액이 안 서 있었을 뿐, **밑수가 정해지는 날 조용히 두 배로 설 자리**였음.
- `B09_Estimation_ResourceAxis_ChooseOne` 신설 — 블록마다 갈래 하나, 열마다 갈래 하나.
장비 2 × 임목밀도 3 = **여섯 갈래**로 세움 (55,625.9 ~ 111,161.4원)
- ⚠ **「고르는 표」를 좁게 가름** — 기계 줄이 둘이라고 다 그런 표가 아님. 9-13 암절취는
깨기(브레이커)와 들어내기(백호우)가 **함께 듦**. 자국은 **같은 이름에 규격만 다른 것**.
품셈도 그렇게 말함 — 9-20-1 [주]④ 「0.2㎥ 또는 0.4㎥ … 계수를 달리 적용」
- ⚠ 밑수는 만들지 않음 — 9-21 은 표 머리·제목·[주] 어디에도 밑수 표기가 없음
(앞 절 9-20-1 「(10주당)」·9-20-2 「(단위: 10주당)」과 대비되는 자리)
⚠ 짓다 잡은 것 — 기종 해석이 **넘겨받은 카탈로그를 무시**하고 기계 카탈로그를 직접 봐서,
노무만 든 카탈로그로 돌릴 때도 기계 줄이 나왔음. 카탈로그에 기계가 없으면 이 표를
안 읽게 막음(시험이 그것을 잡았음).
⚠ 시험 하나가 **버그를 맞는 것으로 적어 두고 있었음** — 「제근은 보통인부 줄이 둘이다」.
그것이 곧 이중계상이었음. 뒤집어 다시 적었음.
검증: pytest 295 통과(신규 4) · 자원 축 539 → 547 줄, 늘어난 8 줄은 전부 제근
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 토공집계표는 실무 토적집계 모양이라 무대·도자운반·덤프운반을 함께 싣는데, 인계본에는
운반표(FP-10-11·FP-10-12)가 같은 물량으로 또 실렸음 — 둘 다 in_bill 이었음
(실측: 도자 17.389·61.130 · 덤프 37.511·122.417 이 두 축에 각각)
- 집계 쪽 운반 줄을 in_bill=False 로 두고 사유를 적음. 값은 남김 — 검산
(무대+도자+덤프 = 총 운반토량)이 그 값을 씀(무대를 그렇게 둔 것과 같은 규칙)
- 성토 같은 다른 집계 줄은 안 건드림
- tmp/tests/test_b08_haul_double_count.py 신설(5건)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
사용자는 「이 구간에 ○㎥」를 정하는데 단면은 폭을 알아야 그려짐.
그 구간 측점을 한꺼번에 보고 **폭 하나**를 이분법으로 찾음(작업장은 폭이 일정함).
- `enforce_spoil_fills` 신설 — `enforce_ford_surface_drops` 와 같은 자리·같은 방식.
자동설계 체인·[저장] 뒤 **맨 마지막**에 돎(앞 보정이 다시 계산하면 사토장 칸이 지워짐)
- 「자동」이면 그 측점의 **성토 쪽**에 섬 (`structure_face_role` 재사용)
- 상한(지반 샘플이 있는 데까지)에서 멈추고 못 담은 몫은 `spoil_fill_unplaced_m3` 로 냄
- 구간 안 측점만 씀 — **새 측점을 만들지 않음**(사용자 확정 ③)
- 용량이 없으면 아무것도 안 세움(폭을 정할 근거가 없음)
실측 — 용량 200㎥·800㎥ 를 넣으면 각각 그만큼 담기고(오차 2% 안), 100만㎥ 를 넣으면
상한 폭에서 멈추고 남은 몫이 값으로 남음.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
① 품셈 제8장 [주]⑤ 의 마지막 조각 — 「…조합하여 사용할 때는 …**잡재료비율을 16%로
계상**하고, 리퍼·브레이커·집게의 손료 및 치즐 소모율을 추가」. 손료·치즐만 넣고
이 줄을 빠뜨리면 본체 재료비가 22% 로 남아 조금씩 비싸짐.
- 기계마다 「#조합」 층을 함께 세움(손료·조종원 같음, 잡재료만 16%)
- 조립 **끝에 한 번** 조합 공종의 본체 줄을 그 층으로 바꿔 닮 — 도중에는 어느 공종이
조합인지 아직 모름. 바꾼 줄 24
- 부착 장비는 **이름이 아니라 분류번호**로 잡음(0103 리퍼 · 0230 브레이커 ·
0240 진동콤팩터 · 7206 집게) — 이름은 원천이 뭉개 놓는 일이 있음(0230 이 그랬음)
- 결과: 구조물터파기 72,378.3 → 72,333.2 · 돌쌓기(메) 78,864.5 → 78,423.8 ·
돌쌓기(찰) 61,757.3 → 61,418.0 · 본체 30,892,279 → **30,849,376원**
② 터파기 노티스 문구 정정 — 「실무는 기초만 세고 우리는 벽 전체를 셈(6.6배)」이
**틀렸음**. 우리 식은 정본(기초 0.45 + 비탈) 그대로이고, 6.6배는 소광리 시트가
비탈 줄을 안 적어서 난 것임. ⇒ 「비탈 터파기를 셀지 확정 대기 — 안 세면 약 1/7」로
고침. 값·금액은 그대로
검증: pytest 290 통과(신규 1)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 소광리 숨김탭 「골막이(찰)(치수조서연결)」 C26 이 우리가 확정 ② 로 버린 옛 식과
글자까지 같음 — 그 식은 틀린 식이 아니라 **골막이 식**이었음. 기슭막이에 쓰던 것이
어긋남의 정체였음
- 골막이는 두께식 말고도 셋이 더 다름(밑수 = 돌쌓기+돌붙임 · 단위 = 개소당 ·
정면적 = 사다리꼴) — 상수만 보고 가져다 쓰지 못하게 적음
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 운반 단가가 지반 갈래로 갈리는데 `variant_value` 가 비어 있어 받는 쪽이 갈래를 못 골랐음
(「버림」에서 275,584원이 사라졌던 자리와 같은 병)
- `variant_axis: "ground_class"` · `variant_value: 리핑암` 으로 실음. 갈래가 없는 줄은 None
- ⚠ 이름은 우리 갈래 그대로 — 일위대가의 「파쇄암」과는 인계본 `ground_class_aliases` 가 이음
- tmp/tests 2건 추가
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
① 수량 산식이 확정 대기인 줄에 그 사실을 함께 실음 (계획서 4-12 3단계)
구조물터파기가 내역서에서 가장 큰 줄(11,263,899원)이 됐는데 그 밑수가 사용자
확정을 기다리는 식 위에 서 있음. 값은 그대로 두고 **드러내기만** 함.
「⚠ 터파기 수량 산식이 확정 대기입니다 — 실무 시트는 기초만(기초폭 × 깊이 0.3)
세고 우리는 벽 전체를 셉니다(m당 실무 0.35 vs 우리 2.30, 약 6.6배).
실무 식으로 확정되면 이 줄 금액이 약 1/6.6 로 줄어듭니다.」
되메우기·잔토처리도 같은 뿌리라 함께 표시. ⚠ 측구터파기는 다른 뿌리라 대상 아님
② `VARIANT_ALIASES` — 축이 달라 다르게 불리는 갈래를 **이름을 갈지 않고** 이음
우리 「리핑암」은 B05·B06 지반유형(캘 수 있는가), 품셈 「파쇄암」은 운반 상태
(부서졌는가)라 일반적으로 같은 말이 아님 — 발파암도 캐고 나면 파쇄암 상태임.
⭐ 다만 산림품셈 10-11 f 표가 토사·파쇄암·발파암을 따로 두어 그 표의 파쇄암은
발파를 뺀 나머지이고, 10-12 [주]③ 「토사 1.3, **암절취 1.35**, 발파암 1.625」가
10-11 의 파쇄암 1/1.35 와 **같은 값**이라 그 표 안에서는 암절취(리핑) = 파쇄암임.
그 문장을 주석에 그대로 남김
검증: pytest 290 통과 · `find_variant_code("FP-10-11","리핑암")` → `B-FP-10-11#파쇄암`
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 갈라 내라는 원문이 없고 실무도 한 덩이로 셈. 별표2 타.(1) 이 「노출되는 면은
전체면적 녹화」라 소단도 녹화 대상이므로 섞여 있는 것이 틀린 것이 아님
- 가르면 「그 몫으로 무엇을 세나」를 우리가 정하게 되어 근거 없는 줄이 섬 —
대신 근거 문구에 「소단면 포함」을 적어 가르지 않고 보이게 함
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
품셈 제8장 [주]⑤ 「불도저 및 굴착기에 리퍼, 브레이커, 부착용집게를 조합하여 사용할
때는 …잡재료비율을 16%로 계상하고, 리퍼, 브레이커, 부착용 집게의 손료 및 치즐
소모율을 추가하는 것이다」 를 따라감.
세 자리를 이었음
1. **뭉개진 카탈로그 줄을 원문으로 되살림** — `mach_base_2026.json` 의 대형 브레이커
여섯 줄이 이름 칸에 표 전체가 뭉쳐 규격·손료계수가 없었음. 건설품셈 제8장 (0230)
표에서 읽어 채움. ⚠ **두 번 검증** — 계수 합 3,000+2,833+768=6,601 이 표의 「계」와
같고, 같은 방식으로 읽은 굴착기 「계 2,085」가 카탈로그 0.0002085 와 정확히 일치
2. **부착용 장비는 손료만으로 층을 세움** — 제 엔진이 없어 운전경비표에 줄이 없음.
없다고 버리면 깨기 몫이 영영 안 붙음. ⚠ 리퍼·브레이커·집게에만 여는 길
3. **작업량을 직접 준 기계 줄을 읽음** — 「대형브레이커(㎥/hr) 3.5」. 공식이 아니라
시간당 작업량을 표가 바로 주는 모양. 단위가 붙은 칸만 읽음(짐작 금지)
결과
- 구조물터파기(암절취·육상·2~3m) 155.625㎥ × 72,378.4 = **11,263,899원** — 처음 섬
- 돌쌓기 단가에 **부착용 집게 손료**가 더해짐(메 76,607.9 → 78,864.5) — [주]⑤ 그대로
- 본체 19,444,626 → **30,892,279원**
- 남은 것은 **치즐(자재) 하나** — 기계가 빠지면 막고 자재 소모품이 빠지면 드러내기만
하는 규칙대로, 금액을 세우고 본표가 「치즐소모량 줄이 아직 안 붙었습니다」를 말함
⚠ 아직 안 한 것 — 같은 [주]⑤ 의 **「잡재료비율 16%」**. 조합 사용 시 굴착기 잡재료가
22% 가 아니라 16% 임. 그 자리는 운전경비 층이라 따로 손봐야 함.
검증: pytest 290 통과(신규 3)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 9-20 가. 「벌개·제근 → 뿌리다듬기 → 적재 → 운반」이 시공 과정 표준이고 [주] 가
「제근 후 뿌리다듬기와 적재항목에 적용」이라 두 항목을 줌. 별표2 도 「그 뿌리…를 전량
제거한 후 운반하고 쌓아두어야」로 뒤 단계를 요구 — 우리는 제거 한 줄만 세고 있었음
(표토와 같은 병: 법·품셈이 두 동작을 묶는데 앞 동작만 셈)
- 적재는 FP-09-20-02(「10주당」) · ⚠ 운반은 그 장에 공종이 없어 코드를 못 붙임 —
지어내지 않고 사유로 냄
- 둘 다 제근과 같은 밑수(본수)가 서야 값이 남. 대상 면적은 참고값으로 실음
- tmp/tests 3건 추가
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 「입목 본수를 들고 있지 않음」이 원문과 달랐음. 품셈 9-21 [주]① 은
**소림(30~60㎥/㏊)·중림(60~90)·밀림(90 이상)** 으로 가름 — 본수가 아니라 **축적**
- ⚠⚠ 그리고 **9-21 표에 밑수 단위 열이 없음**(9-20 은 「10주당」이라 적혀 있음).
등급을 넣어도 「무엇당 값」인지 모르면 못 셈 — 원문 확인이 필요한 자리로 사유에 적음
- 임목축적 등급 설정·화면 칸 신설(`stand_volume_class`) + 근거 한 줄
(산림조사부·영림계획에서 옮겨 적는 값이라 프로그램이 만들 수 없음)
- 대상 면적(벌개제근 연동, 지장목제거와 같은 자리)을 참고값으로 실음
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
표토 운반(법이 요구하는데 제거만 세고 있던 자리)
- 시행규칙 별표2 「표토는 전량 제거한 후 … 최고 홍수위보다 높은 장소로 운반하고
쌓아두어야 한다」 — 제거(9-15)만 세면 운반이 빠짐
- 물량은 제거 물량 그대로(다시 안 셈), 거리는 설계 입력 `topsoil_haul_distance_m`
- 거리가 없으면 막고 사유 · 제거가 안 서면 운반도 안 섬(밑수가 그 줄) · 법 문구를 사유에
화면 칸(사용자 지시 「대신 페이지에 남길 것」)
- 부대시설 개소 다섯(국가지점번호판·안내판·차단기·가설창고·수방자재) — 서버가 받고
있었는데 넣을 칸이 없던 자리. 산식으로 만들지 않는다는 사유를 칸 밑에 적음
- 표토 운반거리 칸 + 별표2 근거 한 줄
- tmp/tests/test_b08_topsoil_haul.py 신설(5건)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
사토장이 선 측점은 **노면 끝 바깥이 사토장 몫**이라 노선 성토에서 빼야 함.
안 빼면 같은 흙을 두 번 셈(2026-09-09 확정 ㉠).
- `compute_cross_design(spoil_fill=…)` / `computeCrossDesign({spoilFill})` 신설(짝)
- 새 칸: `spoil_fill_area_m2` · `spoil_fill_side` · `spoil_fill_width_m` ·
`spoil_fill_max_width_m` · `spoil_fill_line` · `spoil_fill_unclosed` ·
`spoil_fill_replaced_fill_m2`(노선 성토에서 뺀 몫 — 되짚기용)
- **합쳐서 하나로 내지 않음** — 받는 쪽이 갈라 볼 수 있어야 함
- 기울기가 비면 그 측점의 노선 성토 기울기를 그대로 씀(새 값 안 만듦)
- `fillAreaBeyond`/`_fill_area_beyond` — 경계 종거를 보간해 자름(한 칸도 안 흘림)
- 거울 시험에 사토장 사례 둘 추가 + 값이 0 이면 잡히는 가드
⚠ `B06_Section_Engine_Design.py` 가 924줄 — 700줄 제한 초과 상태임(이번 전에도 881줄).
기능이 다 선 뒤 분리할 자리.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
「단가가 일부만 섰습니다 — 붙은 몫 0%」 만으로는 어디를 손볼지 알 수 없었음.
구조물터파기가 그 자리였는데, 참조는 이미 풀렸고 실제로 막는 것은 깨기(대형브레이커)·
치즐이었음.
- 사유에 `component_gaps`·`unattached` 를 이어 붙임
「붙은 몫 0% · 깨기, 치즐소모량(본/hr) 줄이 아직 안 붙었습니다 (계수 참조는 풀렸습니다).」
검증: pytest 288 통과
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 관 허용오차 두 값이 우연히 다른 것처럼 보였음. `LENGTH_MATCH_TOLERANCE_M`(0.5m,
「길이를 어디서 가져오나」)과 `SECTION_MATCH_TOLERANCE_M`(0.05m, 「횡단이 있나」)을
한 자리에 이름 붙여 모으고 **맞추면 둘 다 나빠지는 까닭**을 적음
⚠ 두 값의 차이는 증상이고 병은 「관 자리에 측점이 없는 것」(계획서 3-14, B06 자리)
- 채집석 축 맞춤 검산을 값과 함께 보냄 — 더하는 쪽·빼는 쪽에 같은 계수가 걸려
사토 총량이 그대로임(61.88 → 61.887)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
채집석은 **벽 입적(제자리 부피)**이라 자연 축이고 유토곡선은 다짐 축임.
축이 다른 값을 그냥 빼고 있었음(리핑암이면 13% 어긋남).
- 갈래별 값(`collected_stone_by_ground_m3`)이 오면 갈래마다 ×C 해서 뺌
- 갈래를 못 가른 몫은 계수가 없어 **환산하지 않고** 그대로 뺌
- 갈래가 아예 안 오면 종전처럼 총량을 그대로 뺌 (안 온 것과 0 은 다름)
- 통로 정리 — `_mass_haul_context` 가 B08 입력 dict 를 통째로 받게 함
(칸이 늘 때마다 인자를 늘리다 빠뜨리던 자리)
⚠ 벽 입적과 원바닥 암 부피의 관계를 정한 원문이 없음 — 그 가정은 그대로 두고
**축만** 맞춘 것임(세 창 합의, 근거 문구는 B08 이 값과 함께 보냄).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
유용토운반작업장(구 사토장) — 노선 옆에 남는 흙을 쌓는 성토 단면.
- `common_util_spoil_fill.{ts,py}` 신설(한 벌, 거울 시험) — 평상(노면 끝 높이) →
1:n 비탈 → 지반과 만나는 데까지. 단면적은 적분으로 정확히 셈.
폭 시작점 = **노면 끝**(사용자 확정) ⇒ 그 구간 노견도 이 성토 안에 듦.
폭 상한 = **지반 샘플이 있는 데까지**. 상한에서도 모자라면 그 폭을 냄(임의로 안 넓힘).
용량에서 폭을 되풀이로 역산하는 `solveSpoilWidthM` 함께 냄.
- 등록부 `spoil_bank` 를 넓힘 — 새 종류를 만들지 않음(지식DB 상 같은 시설임).
이름 「유용토운반작업장(구 사토장)」 · 구간형 · 횡단도에 그림 ·
칸 `side`(자동=성토 쪽) · `fill_slope_ratio`(비면 노선 성토 기울기) · `extra_distance_m`.
- 기울기·적치높이 기본값은 지어내지 않음 — 지식DB §4 가 근거 없음을 못 박음.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 축이 다른 값을 그냥 빼면 암에서 15% 어긋남(우리가 만드는 어긋남). 갈래를 실어 보내
유토곡선이 ×C 로 다짐 축에 맞춰 빼게 함
- 갈래를 못 가른 구조물 몫은 계수가 없어 따로 냄(환산 안 함)
- ⚠ 벽 입적 ↔ 원바닥 암 부피의 관계를 정한 원문이 없음(캐면 부풀고 쌓으면 공극) —
그 가정은 어느 쪽으로 가도 남으므로 가정은 그대로 두고 축만 맞춤.
실무 시트가 그냥 뺀다는 사실까지 값과 함께 보냄
- tmp/tests 3건 추가
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 되돌린 값(natural_m3_by_ground)이 오면 그 값으로 서고 상태를 사유에 적음
- 안 오면 다짐 그대로 두고 「내역 수량은 자연상태여야 함」을 사유로 냄
- tmp/tests 2건 추가
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
칸이 없어 `_back_length` 가 조용히 45㎝ 기본값으로 돌던 자리임.
- `back_len_cm` 25·30·35·45·55·60·75㎝ / `stone_kind` 야면석·호박돌·깬잡석·깬돌·견치돌
- 기본값 없음 — 값이 없으면 「기본값으로 섰음」이 드러나야 함
- 돌쌓기(찰·메)와 같은 키·같은 글자 (품셈표 `stone_kind` 데이터셋과 대조)
- 기슭막이는 돌이 아닌 형태(콘크리트·돌망태·바자)도 있어 필수로 두지 않음
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 유토곡선은 다짐상태로 쌓고(운반거리를 그 기준으로 재야 맞음) 내역서 수량은 자연상태임
(config_system_design 5-4-3). 인계 줄이 다짐값을 그대로 읽고 있었음
- 되돌린 값(natural_m3)이 오면 그 값으로 서고, 쓴 계수(÷C)를 근거에 적음
- ⚠ 되돌릴 계수가 없으면(갈래 못 붙임) 다짐 그대로 두고 사유를 냄 — 토사 계수로 눅이면
근거 없이 금액이 움직임
- 거리는 안 바뀜(다짐 기준이 맞음)
- tmp/tests/test_b08_haul_state.py 신설(4건)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
「운반거리의 산정 시에 모든 수량은 다짐상태로 환산하여 계산하고, 내역서에
적용하는 수량은 자연상태로 한다」(설계실무 요령, config 5-4-3 인용문) 인데
유토곡선이 쌓은 다짐 물량이 그대로 내역 줄로 서 있었음.
- HaulSummary: 줄마다 `natural_m3`(÷C)·`volume_basis`·`conversion_c` 를 함께 냄.
환산은 이 파일 한 곳에서 한 번만. 거리·검산은 다짐 기준 그대로.
`L`(1.3·1.35·1.625) 은 안 씀 — 품셈 10-11·10-12 가 `f = 1/L` 을 스스로 곱함.
- 토공집계표: 운반 줄을 자연상태로 실음. 갈래를 모르면 다짐 그대로 두고 사유 표기.
- 사토 줄: `natural_m3_by_ground`·`volume_basis` 신설. 갈래 없는 몫은 환산 안 함.
- 구조물 잔토(자연상태)를 곡선에 담기 전 ×C — 왕복이 맞게 됨. 갈래 모르면 그대로.
실측 변화(내역 4줄): 도자 토사 15.65→17.39 · 리핑암 70.30→61.13 ·
덤프 토사 33.76→37.51 · 리핑암 140.78→122.42 (합 260.49→238.45, −8.5%).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 2026-09-09 사용자 확정: 사토장은 **이미 있는 측점 위에만** 놓임 ⇒ 거리는 「발생점 →
사토장 측점」 누가거리로 저절로 나옴. 가정할 것이 없어짐
- 잔량이 `spoil_haul_distance_m` 을 들고 오면 갈래별 **가중평균**을 내어 그 거리로 줄이 섬
(실무 내역이 운반수단 × 지반별 평균 하나를 올리는 서식)
- 없는 갈래만 산출 조건의 대체 거리로 서고, 거리 출처를 값 옆에 적음
- 사유·화면 도움말을 「거리가 없음」 → 「사토장을 아직 안 놓았음」으로 고침
(사토장이 서면 낡을 문구였음)
- tmp/tests 2건 추가
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 잔토 「그 통로가 없다」 → 2026-09-09 에 생김(HaulInputs → 사토 가산 → 사토 운반 줄)
- `face_slope_ratio` 「레지스트리에 없는 키」 → 칸이 생김(돌쌓기 계열 여섯 · 표준도 폼).
빈 값이 「자동」의 뜻
- 성토/절토 「저장이 아직 안 갖고 있다」 → 측점 단면유형 + 설치 측으로 판정 중.
못 가르는 자리만 남고 그때도 눅이지 않고 사유를 적음 (masonry_slope 정책 문구도 함께)
- 품셈 9-13 「토질·용수 칸이 없다」 → 셋 다 서면 자식 코드로 내려감
⚠ 사유가 거짓이면 사유 칸 전체를 못 믿게 됨 — 오늘 통로가 여럿 생겨 낡은 자리를 훑음
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
구조물터파기 여덟 갈래가 「단가가 일부만 섰습니다 — 붙은 몫 10%」로 서 있던 자리.
값이 없어서가 아니라 품셈이 「육상토사(0~1m)와 동일」처럼 **다른 절을 가리키는데**
그 참조를 안 따라가서였음.
- `B09_Estimation_MachineProductivity_Reference` 신설 — 참조를 따라가 계수를 이음.
값을 옮겨 적지 않고 가리키는 절을 그때그때 읽음. 사슬·순환도 처리(순환은 멈춤)
- 열 갈래가 풀림: 09-13-02·03·05·06·08·09·11·12·17·18
- 빌려 온 계수는 **출처를 줄 비고에 적음** — 「계수 출처: 「…와 동일」 → 육상토사(0~1m)」
⚠ 짓다 잡은 것 셋
- 「육상과동일」은 「육상」이라는 절이 아니라 **제 이름에서 용수를 육상으로 바꾸라**는 뜻.
이름 규칙을 먼저 태우면 없는 절을 찾다가 네 갈래를 놓쳤음
- 한 표에 참조가 둘이고 **가리키는 곳이 다름**. 9-13-11 은 치즐 줄이 「육상과동일」,
백호우 줄이 「용수 암절취(0~1m)와 동일」임. 아무 줄에서나 주우면 용수 자리에 육상
계수가 붙어 작업효율이 0.375 대신 0.50 으로 서고 **금액이 조용히 틀림**.
⇒ **기계 줄에 붙은 참조만** 보게 함
- ⭐ **묶음 배분율이 첫 줄에만 붙고 있었음** — 품셈이 「인력(10%)」 머리를 병합해 적어
다음 줄엔 딱지가 없음. 그래서 「보통인부 1.0」이 100%로 서 **조용히 열 배**가 됐음
(구조물터파기 단가가 224,305원/㎥ 이었음). 묶음 머리를 만날 때까지 이어 주게 고침
막힌 채로 두는 것 — 암·발파암 갈래는 **깨기(대형브레이커)·치즐**이 그대로 빠져 있어
금액을 세우지 않음. 다만 **사유를 남은 줄로 고쳐 적음**(백호우 이야기는 이미 풀렸음).
9-13-14 는 자기 자신을 가리키는 원문 오기라 **고쳐 읽지 않고** 사유로 남김.
검증: pytest 288 통과(신규 6) · 토사 갈래 단가가 처음 섬(1~2m 7,218.5원/㎥)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 코드 주석에만 두면 화면에서 안 보임(오늘 여러 번 나온 자리)
- 「제자리 기하 부피(자연상태) · 되메움에 쓰이는 흙은 다짐부피 ÷ C 라 조금 더 들지만
실무 정본도 그냥 빼므로 그대로 둠」을 두 줄의 spec_detail 에 실음
- 잔토 사유를 지금 동작으로 고침 — 「통로가 없어 안 실림」 → 「유토곡선이 사토에 얹어
사토 운반 줄로 섬」(2026-09-09 통로가 생김)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 「사토장 정지」는 실무가 사토 운반 단가 안 조각(1/3)으로 넣으므로 수량 줄을 안 세움
(세우면 같은 품을 두 번 셈)
- 사토장 사면 보호공은 실무 내역·사방공 집계표에 행이 없어 안 셈. 교본 6장 3절은
요구하나 프로젝트 규칙상 실무가 안 세면 안 세는 쪽이 기본 — 뒤집히면 이 문장만 지움
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 유토곡선 잔량이 되돌린 값(natural_m3_by_ground)을 들고 오면 **그것을 씀**.
없으면 다짐값으로 서되 「품셈 운반 밑수는 자연상태」라는 사실을 근거에 적음
(조용히 쓰면 상태가 어긋난 물량이 단가에 물림). 우리가 환산하지 않음 — 계수는 저쪽에 있음
- 갈래를 못 붙인 몫은 상태도 못 되돌리므로 그 사실을 함께 적음
- `haul.spoil.volume_basis` 신설 — 받는 쪽이 단가와 맞는지 스스로 보게
- 범위를 줄 사유에 적음: 「사토장 정지」는 실무가 사토 운반 단가 안 조각(1/3)으로 넣으므로
수량 줄을 따로 안 세움 · 사토장 사면 보호공은 실무 집계표에 행이 없어 안 셈
(교본 6장 3절은 요구 — 뒤집으면 그때)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- 유토곡선 잔량은 다짐상태인데 이 값은 자연상태(제자리 기하 부피)라 그냥 더하면 섞임
(2026-09-09 랩탑 메인 지적). `volume_basis: "natural"` 을 총량·측점마다 실음
- ⚠ 엄밀히는 되메움에 쓰이는 흙이 다짐부피 ÷ C 라 조금 더 들지만, 실무 정본 시트도
그냥 빼므로(터파기 1.55 − 되메우기 0.30 = 잔토 1.25) 값은 그대로 두고 사실만 적음
- tmp/tests 1건 추가
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
실무 정본이 근거임 — `구조물도/기슭막이/04.구조도(기슭막이).xls` 탭 제목이
「돌기슭막이(H=2.0m, **찰쌓기**, 기초유)」이고 그 안의 계산이 돌쌓기와 **같은 식**임.
⇒ 기슭막이는 새 식이 아니라 **「형태가 돌쌓기면 돌쌓기 식」**. 여기서 다시 짜면
같은 계산이 두 벌이 되어 돌쌓기와 갈림(CLAUDE.md 5장).
형태별 갈래
돌쌓기(찰) → `stone_masonry(..., wet=True)` 12줄
돌쌓기(메) → `stone_masonry(..., wet=False)` 11줄
콘크리트 · 돌망태 · 통나무/목재틀 · 바자 → **식 없음 + 왜 없는지 한 줄**
콘크리트 돌쌓기(13-4)가 아니라 콘크리트 구조물 — 벽 두께·저판이 정본에 없음
돌망태 품셈 13-8, 규격 축이 망태 치수라 돌쌓기 표를 못 씀 — 원단위 미확보
통나무틀 품셈 13-13, 밑수가 ㎥당 목공 품 — 각재·판재가 카탈로그에 없음
바자 바자얽기(5-15) 별도 일위대가로 잇기로 확정(2026-09-09 ⑧-4)
형태 미정 → 「형태를 골라야 물량이 섭니다」
⚠ **뒷길이·돌 종류 칸이 기슭막이 등록부에 없음** — 돌쌓기 식은 그 둘로 계수가 갈리는데
없으면 `_back_length` 가 **조용히 45㎝ 로 돎**. 값이 나오므로 아무도 못 알아채는 자리라
**「돌쌓기 기본값으로 섰음」을 줄로 드러냄.** 칸 신설은 등록부 담당 창 몫.
⚠ 확정 대기가 남은 자리(막자갈 식 · 돌 중량 · 체적/석적 줄)는 **지금 값 그대로** 둠 —
`stone_masonry` 를 부르므로 그쪽이 갈리면 기슭막이도 같이 따라감.
자체검증 — 여섯 형태를 다 돌려 봄(찰 12줄 · 메 11줄 · 나머지 0줄 + 사유).
회귀 586 통과 · 0 실패.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>