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>
This commit is contained in:
2026-09-09 11:56:57 +09:00
co-authored by Claude Opus 5
parent 0f1a430ea0
commit cbadb7fd93
2 changed files with 272 additions and 50 deletions
@@ -172,9 +172,10 @@ def stone_coefficients(options: dict[str, Any], back_cm: int) -> tuple[dict[str,
# 돌쌓기 전개식의 상수 — 실무 수식에 박혀 있던 값을 뺀 것.
#: ⚠⚠ **기슭막이 계열(돌쌓기 찰·메) 전용이다. 다른 구조물로 넓히지 말 것**(2026-09-09).
#: 골막이는 **두께식부터 다르다** — 소광리 숨김탭 「골막이(찰)(치수조서연결)」 C26:
#: 평균두께 = {(0.45 + 0.1×H) + (0.45 + 0.4×H)} ÷ 2
#: 우리가 확정 ② 로 버린 옛 식과 **글자까지 같다.** 그 식은 틀린 식이 아니라 **골막이 식**이고,
#: 그것을 기슭막이에까지 쓰고 있었던 것이 어긋남의 정체였다.
#: 평균두께 = {(ℓ3 + 0.1×H) + (ℓ3 + 0.4×H)} ÷ 2
#: ⚠ 앞서 이 식을 「0.45 + 0.1H」로 적어 두었으나 **0.45 는 상수가 아니라 뒷길이 ℓ3**
#: 이다(C26 이 `P6/100` 을 읽고 P6 = 45㎝). ⇒ 두 식 다 뒷길이 기반이고 **더하는 몫만**
#: 다르다. 우리가 확정 ② 로 버린 옛 식이 뒷길이를 안 보던 것과는 그 점이 다르다.
#: ⚠ 상수만 보고 골막이에 가져다 쓰면 **값이 나오므로 아무 시험도 안 잡는다.**
#: ⚠ 골막이는 그 밖에도 셋이 더 다르다 — 밑수가 **돌쌓기 + 돌붙임**(기슭막이는 돌쌓기만) ·
#: 단위가 **개소당**(기슭막이는 m당) · 정면적이 **사다리꼴**.
@@ -966,11 +967,13 @@ EXPANDERS = {
# 이고 그 안의 계산이 같다. 갈래·사유는 `_UnitQuantity_Revetment` 가 든다(늦게 부른다 —
# 그쪽이 이 모듈의 `stone_masonry` 를 쓰므로 위에서 부르면 맞물린다).
"revetment": lambda h, l, o, f=None, r="": _revetment()(h, l, o, f, r),
# 골막이·바닥막이는 돌 계열이나 **돌쌓기 식을 그대로 못 쓴다** — 까닭은 그 모듈에 적었다.
"erosion_check": lambda h, l, o, f=None, r="": _stone_kin()("erosion_check"),
# 골막이는 **개소당**이고 정면적이 사다리꼴이라 상장·하장·높이를 본다
# (정본 「골막이(찰)(치수조서연결)」). 돌쌓기 식을 빌려 쓰지 않는다 — 까닭은 그 모듈에 적었다.
"erosion_check": lambda h, l, o, f=None, r="": _erosion_check()(h, o),
# 개거는 **m당** 원단위라 연장이 밑수다(정본 「개거(150-200)」·「L형수로-(201)」).
"open_ditch": lambda h, l, o, f=None, r="": _open_ditch()(l, o),
# 흙막이는 **아직 못 세움** — 정본에 떼흙막이 하나뿐인데 우리 형식 칸에 「떼」가 없음.
# 흙막이는 **「떼」만 섬**(정본 「떼흙막이」 개소당). 나머지 일곱 형식은 원단위 미확보.
# ⚠ 확정 4차 — 그림·옵션은 기슭막이와 한 벌이되 **수량 데이터는 분리**.
"soil_guard": lambda h, l, o, f=None, r="": _soil_guard()(o),
# 바닥막이는 **돌붙임 ㎡당**이라 높이·연장이 아니라 **면적**이 밑수다(정본 「돌붙임L3=…」).
"bed_sill": lambda h, l, o, f=None, r="": _bed_sill()(_num(o.get("area_m2"), 0.0), o),
@@ -1005,11 +1008,11 @@ def _bed_sill():
return bed_sill
def _stone_kin():
def _erosion_check():
"""골막이·바닥막이 사유 함수 — 늦게 가져온다(서로 부르는 것을 푸는 자리)."""
from B08_Quantity.B08_Quantity_Engine_UnitQuantity_Revetment import stone_kin_withheld
from B08_Quantity.B08_Quantity_Engine_UnitQuantity_Revetment import erosion_check_dam
return stone_kin_withheld
return erosion_check_dam
def _revetment():