Commit Graph
135 Commits
Author SHA1 Message Date
eomsangdon b891917e24 Merge remote-tracking branch 'origin/main_desktop_1' into sub_laptop_1
# Conflicts:
#	B08_Quantity/B08_Quantity_Engine_UnitQuantity.py
2026-09-09 12:10:38 +09:00
eomsangdon 1fda41d329 Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_1
# Conflicts:
#	B08_Quantity/B08_Quantity_Engine_Pipe.py
2026-09-09 12:10:09 +09:00
eomsangdon 3808c36bfb Merge remote-tracking branch 'origin/sub_desktop_1' into sub_laptop_1 2026-09-09 12:08:55 +09:00
eomsangdonandClaude Opus 5 252e6b5447 feat(B08): 사용자 확정 5차 넷 반영 — 막자갈 실무식 · 석적 · 돌 무게 계산식
막자갈 (작은 것 3)
- 옛 식(입적 − 몸통 − 고임돌)에서 (뒷채움 상 + 하) ÷ 2 × H 로 갈아탐.
- 상·하는 벽 두께가 아니라 뒷채움 폭임. 정본 04.구조도(기슭막이).xls
  여섯 탭(H=1.0~3.0 · 메/찰 · 기초유/버림) 전부 상 0.30 · 하 0.45 로 같음.
  소광리는 같은 식에 0.30/0.60 을 써서 0.900 이 나옴 — 그 사실을 사유로 냄.
- H=2.0 에서 정본 0.75 와 일치(옛 식은 1.66 쪽으로 튀던 자리).

석적 (작은 것 4)
- 정면적 × 뒷길이 × 0.77 로 새 줄. 정본에 없고 소광리에만 있는 줄임을 사유에 적음.
- 「체적」은 이미 「입적」 이름으로 내고 있어 이름만 맞음 — 새로 만들지 않음.

돌 무게 (큰 것 7)
- 뒷길이 × 0.77(채움률) × 2.65(비중) 계산식이 기본. H=2.0 에서 정본 1.92 톤과 일치.
- 야면석만 관측표(35→0.575 · 45→0.880 · 55→1.100) — 공극이 커 계산식이 안 맞음.
- 종류를 안 고르면 정본 줄 이름 그대로 「돌」로 서고 그 사실이 사유로 뜸.
- 잠정임(실무자 협의 후 명확히)을 화면 근거에 적음.

터파기 (큰 것 1) — 기초 + 비탈 그대로. 코드 변경 없음.

채집석 밑수도 새 줄을 따라감 — 석적 + 고임돌 + 막자갈.
거울 시험 신설: 정본 H=2.0 여섯 줄 일치, 일부러 다른 두 줄(입적·물구멍관)의
차이까지 못박음.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:08:47 +09:00
eomsangdonandClaude Opus 5 691b356e2a feat(B08): 사용자 확정 5차 반영 — 제근 계열 면적 축 · 터파기 확정 · 뿌리 운반 덤프
1번 비탈 터파기 「지금 이대로」 — `BASIS_WALL` 에서 「확인 후 쓸 것」을 걷고 확정 표시로 바꿈
  (「법정 근거 없음」은 사실이라 그대로 둠)
6번 제근 밑수 **면적 축** — 산림품셈 9-21 에 밑수 표기가 없어 **건설품셈 3-9-2 「1,000㎡당」**
  을 ⚠ **교차 참조**로 빌려 씀. 제근·뿌리 적재가 같은 면적으로 섬(㎡)
  ⚠ 임목축적 등급은 **단가 갈래**이지 물량 밑수가 아님 — 비어도 값은 서고 사유만 남음
4번 뿌리 운반 **덤프**(FP-10-12) — ⚠ 운반 밑수는 부피(㎥)인데 뿌리 부피를 든 곳이 없어
  물량은 안 섬. 사용자 관찰(실무에서 운반품이 안 붙기도 함)도 사유에 적음

곁들여 — 준비공 인계 줄이 **값이 서는 순간 근거를 잃던 자리**를 고침(대분류 이름만 싣고
  있었음). 제근이 확정으로 값이 서자 「교차 참조」 표시가 사라진 것에서 드러남

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:08:23 +09:00
eomsangdon 90e7612959 Merge remote-tracking branch 'origin/sub_laptop_1' into sub_desktop_1 2026-09-09 12:05:42 +09:00
eomsangdonandClaude Opus 5 e1fed5f68b fix(B06/B08): 스냅된 관이 측점에 안 붙어 금액에서 빠지던 것 — 배수관 넷 복구
⚠⚠ **진단이 뒤집힌 자리임.** 계획서 3-14 는 「관을 나중에 놓으면 측점이 안 생긴다」로
적혀 있었으나 실측하니 **측점은 이미 있었음** — 구조물 이름표까지 달고.

진짜 원인 — **관 자리와 측점 자리는 최대 0.5m 어긋나고 그것이 설계임.**
측점을 만들 때 정수 미터가 같은 격자 측점이 있으면 그리로 스냅함
(`B05_Profile_Engine_Sections_Core` — 횡단 파일명이 정수 미터라 두 측점이 한 파일을
덮어쓰는 것을 막는 가드). 관 440.241 은 **측점 440.0** 위에 섬.
그런데 붙이는 쪽이 **0.02m** 로만 봐서 그런 관은 어느 측점에도 안 붙었음
⇒ 횡단도에 안 서고 길이도 안 실려 B08 이 「연장 없음」으로 막음.

- `attach_culvert_sets` / `attachCulvertSets`(짝) — **가장 가까운 측점 하나**를 그 관의
  자리로 봄. 거리로 자르지 않아 스냅 폭이 바뀌어도 따라가고, 하나만 고르므로 두 번 안 셈
- `pipeOwnerChainage` 신설 — 길이를 싣는 주인도 같은 규칙
- `SECTION_MATCH_TOLERANCE_M` 0.05 → 0.5 — 좁게 보면 「횡단 자체가 없습니다」라는
  **거짓 사유**가 뜸(반대 방향의 거짓). 옛 판단 근거를 주석에 남기고 뒤집은 까닭도 적음

실측 — 관 9개 중 **5개만** 길이가 있던 것이 **9개 전부**로 (440·620·720·900 복구).

곁들여
- 「측점 없는 구조물 N개」 알림 + [측점 만들기] 단추(3-14 ㉯) — **진짜로 측점이 없는**
  경우를 위해 남김. 판정은 스냅을 셈에 넣어 0.5m.
  샘플링 조건은 확정 때 남긴 `sampling.json` → 없으면 1단계 저장값. 둘 다 없으면 막고 사유
- 등록부 `retaining_wall.form` 에 「식생옹벽블럭」 추가(다른 창 요청)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:02:27 +09:00
eomsangdonandClaude Opus 5 ad1e10b3e9 docs(B08): 골막이 두께식 주석 정정 — 「0.45」는 상수가 아니라 뒷길이였음
- 소광리 C26 이 `P6/100`(뒷길이 45㎝)을 읽는 것이라 골막이도 **뒷길이 기반**임.
  둘은 「더하는 몫」만 다름 — 골막이 ℓ3 + 0.1H/0.4H · 기슭막이 ℓ3 + 0.30 / +0.30(H−1)
- 앞서 상수처럼 적어 두었는데 그렇게 굳으면 **뒷길이를 바꿔도 골막이 값이 안 움직이는**
  결함이 조용히 남음(랩탑 보조가 셀 참조로 확인해 알려 옴)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:00:48 +09:00
eomsangdonandClaude Opus 5 418c7c57b7 docs(B08): 엑셀 자름·반올림을 걷어 내지 말라는 근거를 주석에 남김
정본이 줄마다 INT(x*100)/100 으로 자르고 다음 줄이 그 잘린 값을 받으므로
표시용이 아니라 계산의 일부임. 안 자르면 막자갈 10.55 · 잔토 2.75 로
정본과 갈림. round(4.905) 가 짝수 반올림으로 4.90 이 되는 자리(물구멍관)도
함께 적음.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 12:00:01 +09:00
eomsangdonandClaude Opus 5 cbadb7fd93 feat(B08): 돌골막이 · 떼흙막이 원단위 — 3단계 선언 범위 닫음
돌골막이(erosion_check)
- 소광리 정본 「골막이(찰)(치수조서연결)」 식을 개소당으로 전개.
  정면적 사다리꼴 − 방수로 파형강관 → 돌쌓기 → 평균두께 → 입적 →
  야면석·고임돌·막자갈·채움콘크리트·물구멍관 → 바닥파기·잔토·되메우기 11줄.
- 거울 시험이 정본 W열과 소수점까지 일치(19.62 / 2.625 / 20.56 / 19.58 /
  3.34 / 10.54 / 4.45 / 4.91 / 8.61 / 2.74 / 5.87).
- 엑셀의 줄별 INT(x*100)/100 자름을 그대로 옮김 — 다음 줄이 잘린 값을 받음.
- 두께식 주석 정정: 「0.45 + 0.1H」의 0.45 는 상수가 아니라 뒷길이 ℓ3
  (정본 C26 이 P6/100 을 읽음). 골막이도 뒷길이 기반임.
- 등록부에 없는 칸 셋(뒷길이·돌 종류·방수로 유무)은 붙박이로 돌되 사유를 냄.

떼흙막이(soil_guard)
- 형식 「떼」가 들어와 정본 「떼흙막이」 표가 섬 — 떼 1.39㎡ · 터파기 0.17㎥.
- 사용자 확정 4차대로 그림·옵션은 기슭막이와 한 벌, 수량 데이터는 분리.
  나머지 일곱 형식은 원단위 미확보 사유로 뜸.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 11:56:57 +09:00
eomsangdonandClaude Opus 5 4fc5b38d61 fix(B08): 마스터 밑수 판독 둘 — 「인」은 숫자가 붙을 때만 · 칸을 이어 붙여 읽지 않음
「인」 오독 넷(원문 대조)
- 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>
2026-09-09 11:46:58 +09:00
eomsangdon f6feb970a3 Merge remote-tracking branch 'origin/sub_laptop_1' into main_desktop_1
# Conflicts:
#	B08_Quantity/B08_Quantity_Engine_UnitQuantity.py
2026-09-09 11:37:03 +09:00
eomsangdon bf1e82ab78 Merge remote-tracking branch 'origin/main_laptop_1' into main_desktop_1 2026-09-09 11:34:54 +09:00
eomsangdon 24a734cdb2 auto: 2026-09-09 11:32 (ESD_LAPTOP) 2026-09-09 11:32:51 +09:00
eomsangdonandClaude Opus 5 a99204c34d feat(B08): 사토장이 서면 사토 운반거리가 측점에서 나옴
사토장이 **측점 위에만** 서므로(사용자 확정 ③) 거리는 「발생점 → 사토장 측점」
누가거리로 그냥 나옴. 가정할 것이 없어짐.

- `_spoil_sites` — 측점 설계에 실려 온 사토장 구간값을 구조물 단위로 접음(다시 안 셈)
- 거리 = 발생점별 물량 가중평균 + `extra_distance_m`(항상 더함)
- 사토장이 없으면 종전대로 설계 입력값 · 그것도 없으면 막힘(임의 거리 안 넣음)
- 사유에 사토장 측점·수용량·**못 담는 몫**을 실어 화면이 드러내게 함
- `distance_basis` 칸 신설 — 받는 쪽이 「측점 기준」과 「설계 입력값」을 갈라 봄

⚠ 사토장에 쌓아도 **유토곡선 사토는 줄지 않음** — 그 흙은 여전히 실어 내야 하는 흙이고
  사토장은 목적지임. 줄이면 운반비가 사라짐. (네 창에 확인 요청함)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 11:32:20 +09:00
eomsangdonandClaude Opus 5 e100d31147 feat(B08): 규준틀 재료 — 제안값으로 세우고 고칠 수 있게 (품셈 [주]④)
- 「재료량은 설계수량에 따른다」는 값을 안 준다는 뜻이지 안 센다는 뜻이 아님.
  근주이식·임목파쇄(셀지 말지가 설계 판단)와 성격이 다름 — 확정 ⑨·⑩ 과 같은 틀로 감
- 제안값(울진 소광 §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>
2026-09-09 11:30:15 +09:00
eomsangdonandClaude Opus 5 9f2e81babc feat(B08): 개거(겉도랑) 전개 — 정본 두 표를 m당으로 (3단계 넷째)
소광리 정본 「개거(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>
2026-09-09 11:28:30 +09:00
eomsangdonandClaude Opus 5 68ca189220 fix(B08): 운반이 두 축에 실려 내역 줄이 두 벌이던 것 막음
- 토공집계표는 실무 토적집계 모양이라 무대·도자운반·덤프운반을 함께 싣는데, 인계본에는
  운반표(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>
2026-09-09 08:37:44 +09:00
eomsangdonandClaude Opus 5 62f1e252d5 feat(B08): 바닥막이 전개 — 돌붙임 ㎡당 원단위 (3단계 셋째). 앞서 낸 사유가 틀렸음
⚠ **정정** — 어제 「돌붙임 원단위 미확보」로 사유를 냈으나 **소광리 정본에 식이 셋 있었음.**
안 찾아본 것을 「없다」고 적은 자리였음. 53탭 전수에서 드러남.

붙인 원단위 (정본 「돌붙임L3=45(사방)」 · 「돌붙임L3=30(야면석메붙임)」)
```
돌붙임(찰)  두께 0.45 · 돌 30×30×45㎝ **0.918 ton/㎡**(= 0.45 × 0.77 × 2.65) ·
            고임돌 0.15 · 모르타르 0.009 · 채움 0.2 + **버림 0.1** · 터파기 0.45   8줄
돌붙임(메)  두께 0.30 · 야면석 20×20×30㎝ **0.42 ton/㎡**(원문 직접값) ·
            고임돌 0.07 · 터파기 0.30                                          5줄
            ⚠ 모르타르·채움·버림은 **줄 자체가 없음** — 0 으로 만들지 않고 뺌
```
밑수는 **면적(㎡)** — 등록부 `area_m2` 와 축이 그대로 맞음. **기울기 몫을 안 곱함**(평면).

⚠⚠ **돌쌓기 표(13-4)와 합치지 못하게 못 박음** — 값이 겹쳐 보여 합치고 싶어지는 자리:
```
돌쌓기(13-4)  밑수 비탈면적 · 뒷길이 일곱 규격 · 기울기 몫 √(1+n²)
돌붙임(13-5)  밑수 **평면적** · 뒷길이 **넷** · **기울기 몫 없음** · 메는 모르타르·채움 없음
⚠ 45㎝ 에서 고임돌 0.15·채움 0.20 이 **우연히 같음** — 합치면 25·30·60·75 에서 조용히 틀림
```

ⓘ **돌중량이 관측값이 아니라 유도값임** — `뒷길이 × 0.77(채움률) × 2.65(비중)`.
   두 원본에서 같은 모양이 나왔음. 다만 **야면석은 그 식이 안 맞아**(공극이 커 ㎥당 무게가
   다름) 원문 직접값 0.42 를 그대로 옮김. ⇒ 확정 ⑤ 가 「값 고르기」가 아니라
   **「채움률·비중 두 인자 정하기」**로 바뀔 수 있음 — 우리 0.88 은 안 건드렸음.

⚠ 뒷길이가 **붙박이**(찰 0.45 · 메 0.30) — 정본 탭이 그 둘뿐이고 등록부에 칸이 없음.
   그 사실을 줄로 냄. 칸이 생기면 표를 열면 됨.

자체검증 — 새 시험 5건(정본 값 대조 · 메는 세 줄이 빠지는지 · 기울기 몫 없음),
회귀 591 통과 · 0 실패.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 08:36:47 +09:00
eomsangdonandClaude Opus 5 a22bf97964 docs(B08): STONE_MASONRY 는 기슭막이 전용임을 머리에 못 박음
- 소광리 숨김탭 「골막이(찰)(치수조서연결)」 C26 이 우리가 확정 ② 로 버린 옛 식과
  글자까지 같음 — 그 식은 틀린 식이 아니라 **골막이 식**이었음. 기슭막이에 쓰던 것이
  어긋남의 정체였음
- 골막이는 두께식 말고도 셋이 더 다름(밑수 = 돌쌓기+돌붙임 · 단위 = 개소당 ·
  정면적 = 사다리꼴) — 상수만 보고 가져다 쓰지 못하게 적음

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 08:28:00 +09:00
eomsangdonandClaude Opus 5 60b7196754 docs(B08): 골막이를 돌쌓기와 합치지 못하게 못 박음 — 다른 넷·같은 여섯
「같은 돌쌓기니 한 함수로」가 되기 쉬운 자리라, 두 정본을 나란히 잰 결과를 코드에 남김.

다른 것 넷 (소광리 「골막이(찰)(치수조서연결)」 ↔ 「돌기슭막이」)
  두께식   골막이 (0.45+0.1H)/(0.45+0.4H)   ↔ 기슭막이 뒷길이 기반(ℓ3+0.30 …)
  밑수     골막이 **돌쌓기 + 돌붙임**        ↔ 기슭막이 돌쌓기만
  단위     골막이 **개소당**                ↔ 기슭막이 m당 (확정 ⑦ 「통일 안 함」)
  정면적   골막이 **사다리꼴**(상장·하장)    ↔ 기슭막이 직사각(H × 1)

같은 것 여섯 — 막자갈 2/3 · 야면석 0.88 ton/㎡ · 물구멍 2㎡/개소 · 기울기 몫 1.04 ·
고임돌 0.15 · 채움콘크리트 0.2. **우리 기본값이 어디서 왔는지의 답**이기도 함.

`STONE_MASONRY` 상수 머리에도 한 줄 — 「**기슭막이 계열 전용**. 골막이는 두께식이 다름
(정본 C26)」. 상수만 보고 가져다 쓰면 **값이 나오므로 아무 시험도 안 잡는** 자리임.

자체검증 — 회귀 586 통과 · 0 실패.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 08:27:37 +09:00
eomsangdonandClaude Opus 5 d6a64700fc feat(B08): 골막이·바닥막이 — 식을 안 두고 **왜 없는지**를 냄 (3단계 둘째·셋째)
⚠⚠ 조사 중 큰 것이 나옴 — **우리가 「틀렸다」고 버린 옛 두께식이 실은 「골막이 식」이었음.**
소광리 숨김탭 「골막이(찰)(치수조서연결)」 원문:
```
C26  평 균 두 께 = {( 0.45 + 0.1 × H ) + ( 0.45 + 0.4 × H )} ÷ 2
```
우리 옛 식과 글자까지 같음. ⇒ **실무는 구조물 종류마다 두께식이 다름.**
확정 ②(뒷길이 기반)는 **기슭막이에 맞고**, 골막이에는 이 식이 맞음.
⇒ 골막이에 `stone_masonry` 를 그대로 부르면 **틀어짐.** 그래서 안 부름.

골막이가 돌쌓기와 다른 자리 셋 (정본 실측)
  · 두께식 위와 같음
  · 밑수가 **「돌쌓기 + 돌붙임」** (19.62 + 2.625 = 22.245) — 기슭막이는 돌쌓기만
  · 단위가 **개소당** — 기슭막이는 m당
  · 정면적이 사다리꼴 ((상장+하장)÷2×높이) − 파형강관(0.4×0.4×3.14)
  ⚠ **상장·하장 칸이 등록부에 없어** 정면적을 못 냄 — 칸 신설이 선행

바닥막이는 형태가 **돌붙임**(품셈 13-5)이라 돌쌓기(13-4) 표를 못 씀. 밑수도 면적(㎡)이라
축이 다름 — 돌붙임 원단위 미확보.

⚠ **일부러 안 부름** — 돌 계열이라 `stone_masonry` 를 부르면 **값이 나오므로 아무 시험도
안 잡음.** 오늘 큰돌쌓기에서 같은 일이 있었음(직경 60~80㎝ 가 뒷길이 45㎝ 계수로 돌던 자리).

자체검증 — 골막이 0줄 + 사유 · 바닥막이 0줄 + 사유 · 기슭막이 13줄(그대로).
회귀 586 통과 · 0 실패.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 08:25:58 +09:00
eomsangdonandClaude Opus 5 b3d1fa4a9b fix(B08): 운반 줄에 갈래를 통로로 실음 — spec 문자열만 가고 있었음
- 운반 단가가 지반 갈래로 갈리는데 `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>
2026-09-09 08:14:23 +09:00
eomsangdonandClaude Opus 5 083766fd19 docs(B08): 사면적에 소단면이 든다는 것을 사유에 적음 — 가르지 않고 보이게
- 갈라 내라는 원문이 없고 실무도 한 덩이로 셈. 별표2 타.(1) 이 「노출되는 면은
  전체면적 녹화」라 소단도 녹화 대상이므로 섞여 있는 것이 틀린 것이 아님
- 가르면 「그 몫으로 무엇을 세나」를 우리가 정하게 되어 근거 없는 줄이 섬 —
  대신 근거 문구에 「소단면 포함」을 적어 가르지 않고 보이게 함

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 08:07:08 +09:00
eomsangdonandClaude Opus 5 b1de2c0d33 feat(B08): 뿌리 적재·운반 두 줄 신설 — 품셈이 네 단계로 둔 자리
- 9-20 가. 「벌개·제근 → 뿌리다듬기 → 적재 → 운반」이 시공 과정 표준이고 [주] 가
  「제근 후 뿌리다듬기와 적재항목에 적용」이라 두 항목을 줌. 별표2 도 「그 뿌리…를 전량
  제거한 후 운반하고 쌓아두어야」로 뒤 단계를 요구 — 우리는 제거 한 줄만 세고 있었음
  (표토와 같은 병: 법·품셈이 두 동작을 묶는데 앞 동작만 셈)
- 적재는 FP-09-20-02(「10주당」) · ⚠ 운반은 그 장에 공종이 없어 코드를 못 붙임 —
  지어내지 않고 사유로 냄
- 둘 다 제근과 같은 밑수(본수)가 서야 값이 남. 대상 면적은 참고값으로 실음
- tmp/tests 3건 추가

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 08:04:17 +09:00
eomsangdonandClaude Opus 5 e4172fd13d fix(B08): 제근 사유가 틀린 말이었음 — 본수가 아니라 임목축적으로 갈림
- 「입목 본수를 들고 있지 않음」이 원문과 달랐음. 품셈 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>
2026-09-09 07:58:47 +09:00
eomsangdonandClaude Opus 5 ec94a1fca7 feat(B08): 표토 운반·적치 줄 신설 + 부대시설·표토거리 화면 칸
표토 운반(법이 요구하는데 제거만 세고 있던 자리)
- 시행규칙 별표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 07:53:02 +09:00
eomsangdonandClaude Opus 5 659eba7faa docs(B08): 허용오차 둘을 한 자리에 모으고 왜 다른지 남김 · 축 맞춤 검산 문장 추가
- 관 허용오차 두 값이 우연히 다른 것처럼 보였음. `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>
2026-09-09 07:47:34 +09:00
eomsangdonandClaude Opus 5 bafa652562 feat(B08): 채집석 공제를 갈래별로 냄 — 받는 쪽이 축을 맞춰 뺄 수 있게
- 축이 다른 값을 그냥 빼면 암에서 15% 어긋남(우리가 만드는 어긋남). 갈래를 실어 보내
  유토곡선이 ×C 로 다짐 축에 맞춰 빼게 함
- 갈래를 못 가른 구조물 몫은 계수가 없어 따로 냄(환산 안 함)
- ⚠ 벽 입적 ↔ 원바닥 암 부피의 관계를 정한 원문이 없음(캐면 부풀고 쌓으면 공극) —
  그 가정은 어느 쪽으로 가도 남으므로 가정은 그대로 두고 축만 맞춤.
  실무 시트가 그냥 뺀다는 사실까지 값과 함께 보냄
- tmp/tests 3건 추가

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 07:20:52 +09:00
eomsangdonandClaude Opus 5 49fb30f61f fix(B08): 사토 운반도 자연상태로 세움
- 되돌린 값(natural_m3_by_ground)이 오면 그 값으로 서고 상태를 사유에 적음
- 안 오면 다짐 그대로 두고 「내역 수량은 자연상태여야 함」을 사유로 냄
- tmp/tests 2건 추가

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 07:16:06 +09:00
eomsangdonandClaude Opus 5 9b9367a118 fix(B08): 운반 인계 줄을 자연상태로 세움 — 두 자가 섞여 있던 자리
- 유토곡선은 다짐상태로 쌓고(운반거리를 그 기준으로 재야 맞음) 내역서 수량은 자연상태임
  (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>
2026-09-09 07:13:17 +09:00
eomsangdon dae51cc940 Merge remote-tracking branch 'origin/main_laptop_1' into main_desktop_1
# Conflicts:
#	B08_Quantity/B08_Quantity_Router_Earthwork.py
2026-09-09 07:11:49 +09:00
eomsangdonandClaude Opus 5 e5f540658d fix(B08): 운반 물량 상태 되돌림 — 거리는 다짐, 내역 수량은 자연상태
「운반거리의 산정 시에 모든 수량은 다짐상태로 환산하여 계산하고, 내역서에
적용하는 수량은 자연상태로 한다」(설계실무 요령, 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 07:03:48 +09:00
eomsangdonandClaude Opus 5 22ef07d66e feat(B08): 사토 운반 거리 — 사토장 측점 거리가 오면 그 값이 이김
- 2026-09-09 사용자 확정: 사토장은 **이미 있는 측점 위에만** 놓임 ⇒ 거리는 「발생점 →
  사토장 측점」 누가거리로 저절로 나옴. 가정할 것이 없어짐
- 잔량이 `spoil_haul_distance_m` 을 들고 오면 갈래별 **가중평균**을 내어 그 거리로 줄이 섬
  (실무 내역이 운반수단 × 지반별 평균 하나를 올리는 서식)
- 없는 갈래만 산출 조건의 대체 거리로 서고, 거리 출처를 값 옆에 적음
- 사유·화면 도움말을 「거리가 없음」 → 「사토장을 아직 안 놓았음」으로 고침
  (사토장이 서면 낡을 문구였음)
- tmp/tests 2건 추가

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 07:03:32 +09:00
eomsangdonandClaude Opus 5 a155facf68 docs(B08): 낡은 사유·주석 셋 정정 — 지금은 아닌 이야기를 하던 자리
- 잔토 「그 통로가 없다」 → 2026-09-09 에 생김(HaulInputs → 사토 가산 → 사토 운반 줄)
- `face_slope_ratio` 「레지스트리에 없는 키」 → 칸이 생김(돌쌓기 계열 여섯 · 표준도 폼).
  빈 값이 「자동」의 뜻
- 성토/절토 「저장이 아직 안 갖고 있다」 → 측점 단면유형 + 설치 측으로 판정 중.
  못 가르는 자리만 남고 그때도 눅이지 않고 사유를 적음 (masonry_slope 정책 문구도 함께)
- 품셈 9-13 「토질·용수 칸이 없다」 → 셋 다 서면 자식 코드로 내려감

⚠ 사유가 거짓이면 사유 칸 전체를 못 믿게 됨 — 오늘 통로가 여럿 생겨 낡은 자리를 훑음

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 06:59:45 +09:00
eomsangdonandClaude Opus 5 1c6f010a67 docs(B08): 상태 사실을 값 옆에 둠 — 되메우기·잔토 줄에 함께 실음
- 코드 주석에만 두면 화면에서 안 보임(오늘 여러 번 나온 자리)
- 「제자리 기하 부피(자연상태) · 되메움에 쓰이는 흙은 다짐부피 ÷ C 라 조금 더 들지만
  실무 정본도 그냥 빼므로 그대로 둠」을 두 줄의 spec_detail 에 실음
- 잔토 사유를 지금 동작으로 고침 — 「통로가 없어 안 실림」 → 「유토곡선이 사토에 얹어
  사토 운반 줄로 섬」(2026-09-09 통로가 생김)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 06:55:09 +09:00
eomsangdonandClaude Opus 5 89d8981058 docs(B08): 사토 운반 줄에 범위 사유를 실음 — 무엇을 안 세는지 드러냄
- 「사토장 정지」는 실무가 사토 운반 단가 안 조각(1/3)으로 넣으므로 수량 줄을 안 세움
  (세우면 같은 품을 두 번 셈)
- 사토장 사면 보호공은 실무 내역·사방공 집계표에 행이 없어 안 셈. 교본 6장 3절은
  요구하나 프로젝트 규칙상 실무가 안 세면 안 세는 쪽이 기본 — 뒤집히면 이 문장만 지움

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 06:52:03 +09:00
eomsangdonandClaude Opus 5 45d55de93f feat(B08): 사토 운반 — 상태(자연/다짐)를 값으로 내고, 범위를 사유에 적음
- 유토곡선 잔량이 되돌린 값(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 06:51:01 +09:00
eomsangdonandClaude Opus 5 018f628bf9 feat(B08): 구조물 잔토에 상태(자연상태)를 값으로 실음 — 유토곡선 잔량과 섞이지 않게
- 유토곡선 잔량은 다짐상태인데 이 값은 자연상태(제자리 기하 부피)라 그냥 더하면 섞임
  (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>
2026-09-09 06:47:53 +09:00
eomsangdonandClaude Opus 5 d366970e1d feat(B08): 기슭막이 전개 — 형태가 돌쌓기면 돌쌓기 식 한 벌로 (3단계 첫 종류)
실무 정본이 근거임 — `구조물도/기슭막이/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>
2026-09-09 06:44:15 +09:00
eomsangdonandClaude Opus 5 bb9532ce34 fix(B08): 타설 방식을 안 정한 것과 비빔을 가름 — 할증이 타설 줄과 어긋나던 자리
- 안 정하면 타설 줄은 기본값(레디믹스트)으로 도는데 할증만 미확보로 두어 같은
  프로젝트에서 두 값이 어긋났음(실화면). 안 정함 = 기본값으로 보고 사유를 적음
- 비빔은 그대로 미확보 + 사유(시멘트·골재가 각각 할증되는 자리)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 06:35:19 +09:00
eomsangdonandClaude Opus 5 ab51fa38cf feat(B08): 확정 값 넷을 화면 칸으로 세움 — 값과 근거를 보이고 바꿀 수 있게
사용자 지시(2026-09-09): 「값을 코드에 박고 끝내지 말 것 · 대신 페이지에 남길 것」

- 층따기 길이(확정 2차 ①) — 비면 층따기 줄이 막힘. 칸이 없어 값이 안 들어가던 자리
- 기초잡석 두께(확정 3차 ②, 0.2m) — 근거: 폭은 버림 폭과 같음(KCS 34 50 05),
  두께는 품셈 12-25 가 안 정해 사용자 확정값
- 사토장까지 거리(확정 3차 ③ 미정) — 비어 있고, 비면 사토 운반 줄이 막힘
- 구조물터파기 용수(확정 3차 ④) — 기본 「육상」이 **통상값이고 사용자 확정 아님**을
  칸 밑 근거 줄에 적음. 품셈 9-13 의 18구분이 이 값으로 갈림
- 칸마다 근거 한 줄(`b08-quantity__hint`)을 붙임 — 왜 그 값인지 화면에서 보이게

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 06:28:28 +09:00
eomsangdonandClaude Opus 5 a57e1bbe6d feat(B08): 콘크리트를 자재 축에 세움 + 할증 이름 잇기 (확정 3차 ⑥)
- 타설 줄(품셈 12-1)은 품만 주고 재료를 안 줌(서브 일위대가도 재료 0원) — 콘크리트를
  자재 축에 안 보내면 재료비가 통째로 빠짐. destination 을 material 로 옮김
- 배합 분해 금지(㉢)는 그대로 — 「콘크리트 ㎥」에서 멈춤
- 할증 이름 잇기(값은 그대로, 찾을 때만 다른 이름):
  · 이형철근 D13·D16 → 「이형철근」 (품셈 1-3-1, 규격 안 가림)
  · 콘크리트 셋 → 「레미콘」 **레미콘 타설일 때만**. 비빔은 시멘트·골재가 각각 할증되는
    자리라 붙이지 않고 사유를 냄
- 할증률 미확보 사유를 비고에 적음 — 「표에 이름 없음」과 「이 방식엔 안 붙임」은 할 일이 다름
- tmp/tests/test_b08_material_concrete.py 신설(6건)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 06:24:58 +09:00
eomsangdonandClaude Opus 5 99248440c6 feat(B08): 기초잡석 물량·용수 축 (확정 3차 ②④) — 옹벽 묶음 다섯 조각이 다 참
기초잡석(②)
- 두께 0.2m(사용자 확정). 폭은 버림 폭과 같아(KCS 34 50 05) **버림 × 두께 비**로 나옴
  ⇒ 관측 원단위로 오는 옹벽에도 값이 섬(버림 0.15㎥/m ⇒ 잡석 0.30㎥/m)
- destination `unit_price` — 운반·부설·다짐 품이 붙는 공종이라 자재총괄에 안 섞임
- 인계에 FP-12-25 줄로 섬. 묶음 구조물(옹벽)은 조각이 이미 세므로 건너뜀
- 두께는 설정 `rubble_base_thickness_m` 로 화면에서 바꿀 수 있음

용수 축(④)
- 품셈 9-13 의 18구분을 토질 × 육상/용수 × 심도로 골라 자식 코드로 내려감
- ⚠ 기본 「육상」은 **통상값이고 사용자 확정이 아님** — 그 사실을 줄 사유에 적음
- 3m 초과 칸은 원문에 없어 상위 코드 + 사유

- 설정 신설: rubble_base_thickness_m(0.2) · structure_trench_water(육상)
- tmp/tests 신설 test_b08_rubble_base.py(7건) + 터파기 시험 6건 추가

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 06:21:05 +09:00
eomsangdonandClaude Opus 5 2731e3bf63 feat(B08): 사토 운반을 지반 갈래별로 나눠 세움 — 못 붙인 몫은 따로 막음
- 유토곡선 잔량이 갈래별 물량(ea/rr/br)을 들고 오므로 갈래마다 한 줄로 세움
  (덤프 단가가 토사·암으로 갈려 합쳐 세우면 한쪽 단가로 다 물림)
- 갈래를 못 붙인 몫(ground_unknown_m3)은 따로 한 줄로 세우고 막음 — 토사로 눅이면
  임의 단가가 됨
- 갈래가 안 오는 옛 저장분에서는 종전처럼 한 줄
- tmp/tests 3건 추가

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 23:19:06 +09:00
eomsangdonandClaude Opus 5 f6b5b9f9c1 feat(B08): 구조물 잔토 측점값에 지반 갈래를 함께 실음
- 새 판정이 아니라 구조물터파기가 쓰는 그 값(`design.ground_type` 판정) 그대로 —
  그 터파기에서 나온 흙이 곧 이 잔토라 두 자리가 같은 판정을 씀
- 섞여서 못 고른 구조물은 「모름」(None)으로 보냄 — 터파기에서 다수결로 안 고른 규칙 그대로
- 한계도 그대로 넘어감(터파기 깊이가 암반 경계보다 깊은지는 안 봄) — 사유에 적음
- 받는 쪽(B06)이 사토 잔량 ea/rr/br 에 넣으면 「모르는 몫」이 사라짐
- tmp/tests 2건 추가

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 23:13:06 +09:00
eomsangdonandClaude Opus 5 759343e384 fix(B08): 사토 운반 줄 신설 — 유토곡선이 낸 사토를 아무도 실어 내지 않았음
- 운반 줄이 띠(bands)·이동(transfers)에서만 만들어져 사토는 잔량(residuals)으로 남아
  어디에도 안 실렸음. 그래서 구조물 잔토 126.63㎥ 를 얹어도 덤프가 안 늘었고,
  채집석 공제도 사토를 줄이는 값이라 끝까지 금액에 안 나타났음
- 실무에는 서는 줄(울진 대흥 1공구 토적집계 D32 사토 1,281㎥)
- 운반표에 `spoil`(물량·거리·근거)을 실어 인계가 「사토 운반」 한 줄을 세움
- 물량은 유토곡선 결과 그대로 — 공제·가산이 끝난 값이라 여기서 또 만지지 않음.
  자연방토는 실어 내지 않으므로 뺌
- 거리는 설계 입력 `spoil_site_distance_m` 신설 — 안 정했으면 막고 사유
  (품셈이 정하는 값이 아니라 임의 거리가 그대로 금액이 됨)
- 지반 갈래는 유토곡선이 안분하지 않아 갈래 없이 한 줄, 그 사실을 근거에
- tmp/tests/test_b08_spoil_haul.py 신설(6건)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 23:05:15 +09:00
eomsangdonandClaude Opus 5 cf2c894c0b fix(B08): 구조물터파기 줄이 근거 문구 탓에 갈리던 것 합침
- 키가 (심도, 토질, 근거문구)라 같은 「암절취 · 심도 2~3m」이 측점 문구가 다르다는
  이유로 두 줄로 갈렸음(실화면 121.75 + 33.875)
- 키를 (심도, 토질)로 좁히고 근거 문구는 모아서 한 줄에 적음
- tmp/tests 1건 추가

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 22:58:28 +09:00
eomsangdonandClaude Opus 5 428fe7aeed feat(B08): 유토곡선에 넘길 구조물 몫 — 채집석 공제·구조물 잔토를 한 자리에서 냄
- `B08_Quantity_Engine_HaulInputs.haul_inputs(unit_table)` — 둘 다 양수 ㎥,
  빼고 더하는 것은 받는 쪽(B06) 몫
- ⚠ 측점별로도 냄(`structure_spoil_points`) — 총량만 주면 잔량 비례로 흩어져
  운반거리가 틀어짐. 구조물은 구간이라 가운데 측점을 자리로 봄
- ⚠ 「아직 안 옴(None)」과 「없음(0)」을 가름
- 라우터에 `project_haul_inputs(project_id)` + `GET .../quantity/haul-inputs`
  — B06 이 이 함수를 부르면 됨(같은 계산을 두 벌로 짜지 않게)
- tmp/tests/test_b08_haul_inputs.py 신설(5건)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 22:37:22 +09:00
eomsangdonandClaude Opus 5 b4ae32d1be feat(B08): 구조물터파기 토질을 측점 설계값에서 끌어옴 — 남은 축은 용수 하나
- 새 저장 칸을 만들지 않음. 측점마다 이미 있는 `design.ground_type`
  (soil·ripping_rock·blasting_rock)이 품셈 9-13 토질 3구분과 그대로 맞물림
- 판정 규칙: 구조물이 **걸친 측점 전부**를 보고 갈래가 하나일 때만 값을 냄.
  섞이면 다수결로 고르지 않고 갈래별 측점 수를 사유에 적음(암 단가가 몇 배라
  임의 선택이 금액으로 굳음). 걸친 측점이 없으면 가장 가까운 측점 + 그 사실을 근거에
- 터파기 줄이 토질·심도로 갈려 서고, 막힌 사유가 「용수 유무」 하나로 좁혀짐
- tmp/tests 2건 추가(측점값 반영·섞임 판정)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 22:33:17 +09:00