wip(b08): 3바퀴 — 잘린 계수 되살림·sub_requirement 12·장부 갱신(병합 전 보관)

This commit is contained in:
2026-09-18 00:23:06 +09:00
parent c11bb922a4
commit 987b898caf
8 changed files with 753 additions and 494 deletions
@@ -116,8 +116,16 @@ FORM_JUDGMENTS: dict[str, tuple[str, str, str]] = {
"requirement",
"인력(인)·기계(대, Q=5.4㎥/hr) 소요량 표 — 「별도계상」 은 레미콘 자재 줄 비고일 뿐",
),
"F0388": ("12-34-4", "reference", "「재료비 JOINT FILLER」 항목만 — 값이 없는 구성 안내"),
"F0390": ("12-36", "reference", "제작비·운송비·설치비 「견적처리」"),
"F0388": (
"12-34-4",
"sub_requirement",
"신축이음 채움재 — 필요수량·고철대 감 3% 가 적힌 실값 표",
),
"F0390": (
"12-36",
"sub_requirement",
"P.C BOX 설치 — 미장공 0.14인·보통인부 0.05인 실값 표",
),
"F0392": ("12-38-1", "coefficient", "사용횟수별 잔존율(12회 25%·25회 10%)"),
"F0394": ("12-38-2", "coefficient", "부자재 요율 「주자재비의 24%·52%·79%"),
"F0396": ("12-38-3", "reference", "설치 유형(복잡·보통·간단) 적용 시설 설명"),
@@ -130,13 +138,13 @@ FORM_JUDGMENTS: dict[str, tuple[str, str, str]] = {
),
"F0408": (
"13-4-3",
"reference",
"고임돌 소요량(㎥/㎡) — 원단위표(B08 고임돌표가 씀). 품으로 세우면 자재를 두 번 셈",
"sub_requirement",
"고임돌 소요량(㎥/㎡) — 투입 체적 실값(B08 고임돌표가 이미 읽음)",
),
"F0410": (
"13-4-4",
"reference",
"[주]① 채움 콘크리트 소요량(㎥/㎡) — 자재 원단위표(B08 채움표가 씀). 품이면 두 번 셈",
"sub_requirement",
"찰쌓기 뒷채움 콘크리트(㎥/㎡) — 레미콘 실값(B08 채움표가 이미 읽음)",
),
"F0411": ("13-4-4", "reference", "[주]⑨ 성토 뒤채움 조약돌 두께(㎝) 기준"),
"F0412": (
@@ -187,6 +195,25 @@ FORM_JUDGMENTS: dict[str, tuple[str, str, str]] = {
"requirement",
"글값 — 값이 글로 적힌 소요량형(밑수는 표 밖이라 미확보로 남김)",
),
# ── 실값인데 「참고」로 빠져 있던 표 — 2026-09-18 2바퀴 대조(안티그래비티 권고) ─────
# ⚠ **`requirement` 로 올리지 않는다.** 이 표들은 홀로 발주되지 않고 **상위 공종에 딸린**
# 자재·노무 산출표라, 품으로 세우면 위 공종이 이미 세는 몫을 **두 번 센다**
# (F0393 은 `B09_Estimation_Euroform` 이, F0408·F0410 은 B08 표가 이미 직접 읽는다).
# 그렇다고 `reference` 로 두면 **금액이 0원으로 증발한다** — 그래서 낱말을 하나 둔다.
# `sub_requirement` = 「값은 실값, 자리는 상위 공종 종속」. 오늘 읽는 쪽은 건너뛰고,
# 자원 축이 붙는 날 이 딱지만 보면 된다(로직은 나중에 · 브레인).
"F0369": ("12-22", "sub_requirement", "P.V.C 파이프 설치 — 아스팔트 4kg·방수공 0.034인 실값"),
"F0380": ("12-30-1", "sub_requirement", "다웰바 신축이음부 — 재료비의 5%·특별인부 0.1인 실값"),
"F0381": ("12-30-2", "sub_requirement", "다웰바 접속스라브부 — 위와 같음"),
"F0382": ("12-31", "sub_requirement", "물끊기 홈 — 특별인부 0.1인·보통인부 0.001인 실값"),
"F0383": ("12-32", "sub_requirement", "전선관 설치 — 설치비(주재료비의 5%) 실값"),
"F0386": ("12-34-2", "sub_requirement", "합판거푸집(3회) — 보통인부 0.29인·진동기 2대 실값"),
"F0391": (
"12-37",
"sub_requirement",
"무근콘크리트 타설 — 콘크리트공 0.15인·보통인부 0.27인 실값",
),
"F0393": ("12-38-2", "sub_requirement", "유로폼 사용수량 — 부자재 주재료비의 24~79% 실값"),
}
@@ -292,23 +292,46 @@ def basis_from_source(lines: list[str], line_no: int) -> tuple[float | None, str
return None, None
#: 표 아래 `[주]` 덩어리를 어디까지 볼 것인가. 다음 표·다음 절·**목록꼴 제목**을 만나면 멈춘다.
NOTES_LOOKAHEAD = 40
#: 표 아래 `[주]` 덩어리를 어디까지 볼 것인가. 다음 절·새 표를 만나면 멈춘다.
NOTES_LOOKAHEAD = 48
_NOTE_START = ("[주]", "[ 주 ]", "[주")
_NOTE_CONT = ("-", "·", "")
#: 이어짐 글머리 — `*` 도 담는다(「* (전목) 나무베기, …」 처럼 [주] 를 풀어 적은 줄).
_NOTE_CONT = ("-", "·", "", "*")
#: 가나다…하 열넷만. ⚠ 넓히면 「등)」·「(인)」 같은 글이 제목으로 잡힌다.
_ORDER = "가나다라마바사아자차카타파하"
#: ⚠⚠ **원문이 절 제목을 목록 줄로 적는다** — 「- 3. 노상 및 노반재료」·「- 라. 체적환산계수(f)표」.
#: [주] 이어짐 「- ②」와 **같은 「-」로 시작**해서, 멈춤이 「#」과 표뿐이면 제목도 다음 절 [주]도
#: 통째로 끌어온다(2026-09-17 랩탑 서브 전수 확인: 산림 28표 41줄 · 건설 293표 541줄).
#: ⚠ 원문 [주]는 **①② 꼴이거나 번호 없음뿐** — 「1.」·「가.」 꼴 [주]는 1,420 중 0건이다.
#: 그래서 이 꼴이 오면 **거기서부터는 남의 글**이다.
NOTE_STOP_RE = re.compile(rf"^-\s*(?:\d+\.|[{_ORDER}]\.|\(\d+\)|\([{_ORDER}]\)|[{_ORDER}]\))")
#: [주] 이어짐 「- ②」와 같은 「-」로 시작해서, 멈춤이 「#」과 표뿐이면 제목도 남의 [주]도 끌어온다.
#: ⚠⚠ 그런데 **같은 꼴로 진짜 규칙이 이어지는 자리가 있다** — 9-8 구조물 헐기가
#: 「- 2. 철근절단 : …」·「- 4. 고철공제 : A=1㎥×0.008×…」처럼 **단계마다 번호를 달고** 적는다.
#: 꼴만 보고 자르면 **고철 공제 50kg/㎥ 가 통째로 사라진다**(2026-09-18 2바퀴 검사 34건).
#: ⇒ **알맹이 없는 제목일 때만** 자른다 — 콜론도 숫자도 없고 짧은 줄.
_LIST_HEAD_RE = re.compile(
rf"^-\s*(?:\d+\.|[{_ORDER}]\.|\(\d+\)|\([{_ORDER}]\)|[{_ORDER}]\))\s*(?P<rest>.*)$"
)
#: 제목으로 볼 최대 길이. 규칙 글은 이보다 길다.
_TITLE_MAX = 30
#: ⚠ **쪽이 넘어가며 쪽번호와 장 제목이 [주] 줄 **끝에** 눌어붙은 자리** — 「…따른다.11제1장 적용기준」.
#: 줄 단위로는 못 자른다(줄 한복판에서 갈림). 「숫자 + 제N장」이 **띄어쓰기 없이** 붙는 꼴은
#: 본문에 없으므로 이 자리를 잘라 낸다(건설 131줄 · 2026-09-17 랩탑 서브 ⓑ).
def is_bare_title(text: str) -> bool:
"""목록 줄이 **알맹이 없는 절 제목**인가 — 콜론·등호·숫자가 없고 짧으면 제목이다.
⚠ 잣대는 「지우는 것보다 남기는 것이 안전」이다(2026-09-18 브레인). 조금이라도 규칙 같으면 남긴다.
"""
found = _LIST_HEAD_RE.match(text)
if found is None:
return False
rest = found.group("rest").strip()
if not rest:
return True
if any(ch in rest for ch in ":=%"):
return False
if any(ch.isdigit() for ch in rest):
return False
return len(rest) <= _TITLE_MAX
#: ⚠ **쪽이 넘어가며 쪽번호와 장 제목이 [주] 줄 끝에 눌어붙은 자리** — 「…따른다.11제1장 적용기준」.
#: 「숫자 + 제N장」이 띄어쓰기 없이 붙는 꼴은 본문에 없으므로 이 자리를 잘라 낸다(건설 131줄).
PAGE_BREAK_RE = re.compile(r"\d{1,4}제\d+장.*$")
@@ -317,21 +340,19 @@ def trim_page_break(text: str) -> str:
return PAGE_BREAK_RE.sub("", text).rstrip()
def _is_note_head(text: str) -> bool:
return text.startswith(_NOTE_START)
def notes_from_source(lines: list[str], line_no: int) -> list[str]:
"""표 바로 아래 `[주]` 글줄 목록. 없으면 빈 목록.
왜 싣나 — `[주]` 에 **금액에 바로 닿는 조건**이 적혀 있다(발파 가산 20% · 고철 공제 50kg/㎥ ·
공구손료 3% · 고소 감속 9% …). 마스터가 그 글을 안 싣고 있어 받는 쪽이 볼 길이 없었다
(2026-09-17 안티그래비티 전수 대조 ④). **읽기만 싣는다 — 여기서 셈하지 않는다.**
공구손료 3% · 위험목 인력 100% 가산 …). **읽기만 싣는다 — 여기서 셈하지 않는다.**
멈추는 자리 — 다음 절(`#`) · **목록꼴 제목**(`NOTE_STOP_RE`) · 두 번째 `[주]`.
**[주] 를 만나기 전에도 같은 규칙을 건다** — 제 [주] 가 없는 표가 제목을 건너
남의 [주] 를 빌려오던 것을 막는다(산림 11표 · 건설 207표). 남의 계수가 붙는 쪽이 더 나쁘다.
⚠ 빈 줄·들여쓰기로는 못 가른다 — 제목이 빈 줄 없이 붙고 건설 들여쓰기가 제멋대로다.
멈추는 자리 둘뿐**다음 절(`#`)** 과 **새 표(`|`)**.
그 사이에 끼는 것은 **끊지 않고 건너뛴다** — 「> 【산출 예시】」 인용과 「* (전목) …」 줄이
[주] 중간에 들어오는데, 거기서 끊으면 **뒤에 오는 ⑤⑥ 가산·할증이 사라진다**
(2026-09-18: 벌채 30%·조재 20%, 위험목 100%, 집재 주행 10% 가 그렇게 사라졌음).
⚠ **[주] 를 만나기 전에는** 알맹이 없는 제목에서 멈춘다 — 제 [주] 가 없는 표가 제목을 건너
남의 [주] 를 빌려오던 것을 막는다(F0009 가 강재류 [주]를 달고 있었음).
⚠ 한 표에 `[주]` 덩어리가 **여럿**일 수 있다(9-8 구조물 헐기는 단계마다 [주]를 단다) — 안 끊는다.
"""
out: list[str] = []
started = False
@@ -340,25 +361,26 @@ def notes_from_source(lines: list[str], line_no: int) -> list[str]:
text = lines[index].strip()
if text.startswith("#"):
break
if NOTE_STOP_RE.match(text):
break # 목록꼴 제목 — 여기서부터는 남의 글이다
if text.startswith("|"):
if started or body_done:
break # 새 표가 왔다 — 이 표의 [주] 는 여기까지
continue # 아직 이 표 본문 안이다
if not text:
continue
if _is_note_head(text):
if started:
break # 두 번째 [주] — 다음 표 것이다
if not started and is_bare_title(text):
break # 제목을 건너 남의 [주] 를 빌려오지 않는다
if text.startswith(_NOTE_START):
started = True
out.append(trim_page_break(text))
continue
body_done = True # 표 본문은 끝났다(글줄이 나왔다)
if started and text.startswith(_NOTE_CONT):
if not started:
continue
if is_bare_title(text):
break # 알맹이 없는 제목 — 여기서부터는 남의 글이다
if text.startswith(_NOTE_CONT):
out.append(trim_page_break(text))
elif started:
break # [주] 덩어리가 끝났다
# 그 밖(「> 【산출 예시】」·「* (전목) …」)은 **끊지 않고 건너뛴다**
return out
@@ -1,7 +1,7 @@
{
"schema_version": "1.0",
"dataset_id": "data_work_item_master_manifest",
"generated_at": "2026-09-17T23:33:15+09:00",
"generated_at": "2026-09-18T00:21:08+09:00",
"built_by": "B08_Quantity/B08_Quantity_Build_WorkItemMaster.py",
"source": {
"dataset_id": "pum_forest",
@@ -12,8 +12,8 @@
"files": [
{
"file": "work_item_master_2026-01-01.json",
"sha256": "3a4e46ea367e9f8ca93c6e9ef95226930db4a495ec0f92f6cafaaf805cdd3e4b",
"size_bytes": 1072203
"sha256": "fa9709954247a97d5eef61d0782ff75fbe592c4e3eee49b85223006e483828bb",
"size_bytes": 1080668
},
{
"file": "form_undetermined_2026-01-01.json",
@@ -1,7 +1,7 @@
{
"schema_version": "1.0",
"dataset_id": "data_work_item_master_manifest",
"generated_at": "2026-09-17T23:34:03+09:00",
"generated_at": "2026-09-18T00:21:57+09:00",
"built_by": "B08_Quantity/B08_Quantity_Build_WorkItemMaster.py",
"source": {
"dataset_id": "pum_const",
@@ -12,8 +12,8 @@
"files": [
{
"file": "const_work_item_master_2026-01-01.json",
"sha256": "0ddceecdfd3772c236b8e828f89cadfe978982eb0f4608a9fa0a2581b3f00e6e",
"size_bytes": 4453384
"sha256": "3a76e780f7f84402beaa3d48e61636633b409fb6448d826c7ab64d06f63eba37",
"size_bytes": 4489851
},
{
"file": "const_form_undetermined_2026-01-01.json",
File diff suppressed because it is too large Load Diff
@@ -4,7 +4,7 @@
"effective_date": "2026-01-01",
"pum_edition": "2026-01-01",
"toc_edition": "산림청고시제2025-82호",
"generated_at": "2026-09-17T23:33:15+09:00",
"generated_at": "2026-09-18T00:21:08+09:00",
"dataset_version": {
"dataset_id": "pum_forest",
"effective_date": "2026-01-01",
@@ -2324,7 +2324,9 @@
"[주] ① 대상지의 집단화 정도에 따라 이동거리가 증가함으로 할증을 적용한다.",
"- ② 개소는 한 개의 연결된 구역을 기준으로 적용한다.",
"- ③ 집단화 정도는 소반별로 적용한다. 즉, 소반별 사업면적 ÷ 개소수로 산출한다.",
"- ④ 소반 내 사업지와 사업지 간격이 50m 이내의 경우에는 동일 개소로 적용한다."
"- ④ 소반 내 사업지와 사업지 간격이 50m 이내의 경우에는 동일 개소로 적용한다.",
"* A, B 사업지 간격은 A구역 경계에서 B구역 경계까지 거리를 말함",
"- - 예) 소반면적 20ha, 10개소일 경우, 20ha÷10개소 = 2.0ha/개소로 +5% 할증 적용"
],
"condition_note": [
"구 분",
@@ -4989,7 +4991,9 @@
"- - 살포량 : 1ha당 희석액 1,000ℓ. 약제 희석비율 = 농약 500㎖ : 물 100",
"- - 희석액 1,000ℓ에 혼합하는 약제량 = 500㎖ : 100 = x : 1,000. x = 5",
"- - ha당 약제량은 5 = 5,000㎖ ÷ 500㎖/병 = 10병(병당 500㎖ 기준)",
"- ② 농약 소요량은 덩굴 피복도에 따라 할인·할증률만큼 가감하여 적용한다."
"- ② 농약 소요량은 덩굴 피복도에 따라 할인·할증률만큼 가감하여 적용한다.",
"- ③ 잡품은 물, 혼합용기 등 소모품에 해당하며 주재료비에 대하여 금액 비율로 적용한다.",
"- ④ 농약의 종류나 용량이 변경된 경우, 위 기준을 응용하여 적용한다."
],
"condition_note": [
"재료명",
@@ -5027,7 +5031,8 @@
"notes": [
"[주] ① 주두부 직경이 클수록 소금처리량을 증가시킨다.",
"- ② 주재료비(소금)의 10%를 잡품으로 추가하여 적용한다.",
"- ③ 잡품에는 나무젓가락 및 페인트 등 소모품 포함한다."
"- ③ 잡품에는 나무젓가락 및 페인트 등 소모품 포함한다.",
"- 3. 뿌리제거(100본당)"
],
"condition_note": [
"주두부직경(㎝)",
@@ -5709,7 +5714,8 @@
"variant_key": [],
"notes": [
"[주] ① 기계손료는 1일 1대당 적용기준이다.",
"- ② 기계손료에는 감가상각비, 정비비 및 관리비가 포함된다."
"- ② 기계손료에는 감가상각비, 정비비 및 관리비가 포함된다.",
"- ③ 기계손료에는 감가상각비, 정비비 및 관리비가 포함된다."
],
"condition_note": [
"규격",
@@ -6876,7 +6882,8 @@
"- ② 산물임내정리 구간은 최대 30m 이내로 한다.",
"- ③ 본 공정은 보통인부 1인이 1일 실행하는 작업량이다.",
"- ④ 정리산물 수량은 지조를 포함하여 적용한다.",
"- ⑤ 소요인력은 임내정리량을 해당 품으로 나누어 산출한다."
"- ⑤ 소요인력은 임내정리량을 해당 품으로 나누어 산출한다.",
"- ⑥ 할인․할증은 경사도(1-4-5)를 반영한다."
],
"condition_note": [
"구 분",
@@ -7179,7 +7186,8 @@
"notes": [
"[주]① 벌도목 평균경급이 20cm 미만일 경우 10%, 2030cm일 경우 5%를 할증한다.",
"- ② 산불피해지에서 산불피해목을 벌목할 경우 20%를 할증한다.",
"- ③ 그 외 할인․할증은 경사도(1-4-5), 장애물의 종류와 정도(1-4-8)를 적용한다."
"- ③ 그 외 할인․할증은 경사도(1-4-5), 장애물의 종류와 정도(1-4-8)를 적용한다.",
"- 3. 박피품은 별도 적용하여야 한다. 다만 작업조건에 따라 1일 작업량은 변동 적용한다."
],
"condition_note": [
"(단위 : ㎥/1인/1일)"
@@ -7346,7 +7354,14 @@
"variant_key": [],
"notes": [
"[주]① 체인톱 사용인부는 벌목, 가지제거, 토막내기를 담당, 작업보조는 벌도대상목 주변정리 및 재료운반 등을 담당한다.",
"- ② 나무베기 : 서있는 나무를 베어서 넘기는 작업으로 품은 평균경급에 적용 가능하다."
"- ② 나무베기 : 서있는 나무를 베어서 넘기는 작업으로 품은 평균경급에 적용 가능하다.",
"* (전목) 나무베기, (전간목) 벌목+가지정리, (단목) 벌목+가지정리+토막내기",
"- ③ 가지제거 : 베어진 나무의 가지를 제거하는 작업이다.",
"- ④ 토막내기(자르기) : 베어진 나무를 2m 길이로 자르는 작업. 자르는 길이를 달리할 경우 품셈을 기준으로 변형 사용이 가능하다.(산주의 요구)",
"- ⑤ 관목류 제거 시 보통인부의 30%를 할증한다.",
"- ⑥ 규격재 생산을 위한 조재가 포함될 경우 20%를 할증한다.",
"- ⑦ 소나무재선충병 벌목조재는 소각, 매몰, 훈증, 박피(소나무재선충병)을 참고한다.",
"- ⑧ 할인․할증은 집단화정도(1-4-3), 경사도(1-4-5), 장애물의 정도(1-4-8), 규격재 생산(1-4-16)을 반영하되 산림병해충방제에는 집단화정도(1-4-3)를 적용하지 않고 방제대상목 분포(1-4-17)를 반영한다."
],
"condition_note": [
"제거 대상목 흉고직경",
@@ -7613,7 +7628,9 @@
"[주]① 본 품은 숲가꾸기 사업, 위험 해안가, 절벽지, 농경지‧주택지 주변 등 특수지역 위험목을 처리할 때와 소형윈치나 안전로프 등 벌목보조장치를 갖추고 나무베기 작업을 하여야 하는 경우에 적용한다.",
"- ② 가슴높이지름 16cm이상의 입목에 적용하며, 16cm 미만의 입목은 솎아베기 품 적용한다.",
"- ③ 장비 설치보조, 로프설치, 안전관리, 작업장관리 등을 포함하며 제거산물을 작동하여 안전한 장소에 쌓아놓거나 50m이내 거리까지 집재를 포함한다.",
"- ④ 숲가꾸기 위험목 제거 또는 인력작업 시에는 벌목부의 100%를 가산한다."
"- ④ 숲가꾸기 위험목 제거 또는 인력작업 시에는 벌목부의 100%를 가산한다.",
"- ⑤ 장비는 굴착기 우드그랩은 0.2㎥, 크레인은 5톤 트럭탑재형 크레인을 적용, 현장 여건에 따라 장비의 규격을 조정 가능하다.",
"- ⑥ 산림병해충, 소나무재선충병 발생지역 내 장비 없이 인력으로만 위험목을 제거할 경우에는 보통인부의 100%를 가산한다."
],
"condition_note": [
"가슴높이지름 (cm)",
@@ -10109,7 +10126,12 @@
"- ④ 다발심기는 사초를 4~8포기씩 모아 한 다발로 만들고 30~50㎝ 간격으로 심는다.",
"- ⑤ 줄심기는 1~2주씩 1열로, 주(株)간거리 4~5㎝, 열간거리 30~40㎝로 심고 줄심기의 줄 방향은 주풍방향에 직각으로 배치한다.",
"- ⑥ 사초의 운반은 조견표에 의한 별도 계상한다.",
"- ⑦ 모래의 퇴적으로 말라죽지 않고, 기는 줄기나 땅속줄기가 잘 뻗어 많은 가지가 발생하며 모래층을 잘 긴박하는 수종으로 식재한다."
"- ⑦ 모래의 퇴적으로 말라죽지 않고, 기는 줄기나 땅속줄기가 잘 뻗어 많은 가지가 발생하며 모래층을 잘 긴박하는 수종으로 식재한다.",
"* 화본과 : 갯개고리풀, 갯쇠보리, 새, 솔새",
"* 사초과 : 보리사초, 통보리사초, 솔보리사초, 행부자(숨복사지)",
"* 국화과 : 갯쑥부쟁이, 갯쑥, 갯씀바귀, 갯상근, 갯메꽃, 갯질경, 모래지치, 갯보리, 큰개미자리, 자귀풀",
"* 콩 과 : 갯완두",
"* 도입 초종 : american beach grass, weeping love grass, switch grass"
],
"condition_note": [
"구 분",
@@ -13963,7 +13985,9 @@
"variant_key": [],
"notes": [
"[주] ① 본 공정은 손톱, 고지톱 등으로 입목의 생가지와 죽은가지를 제거하는 작업으로 솎아베기, 어린나무가꾸기 공정과 합하여 적용하거나 독립적으로 적용한다.",
"- ② 가지치기 대상 구간이 본 품에 없는 경우는 중간품을 산출하여 적용한다."
"- ② 가지치기 대상 구간이 본 품에 없는 경우는 중간품을 산출하여 적용한다.",
"- ③ 활엽수 수형교정을 하는 경우에는 본 품을 적용한다.",
"- ④ 할인․할증은 집단화정도(1-4-3), 경사도(1-4-5), 장애물의 정도(1-4-8)를 반영한다."
],
"condition_note": [
"가지치기 높이",
@@ -14827,7 +14851,8 @@
"variant_key": [],
"notes": [
"[주]① 본 품은 설치․해체공정이 포함되었으며 산지경사가 20~65%일 경우 적용 가능하다.",
"- ② 산림병해충 및 소나무재선충병 방제 산물의 수집량은 34%를 가산하여 산출한다."
"- ② 산림병해충 및 소나무재선충병 방제 산물의 수집량은 34%를 가산하여 산출한다.",
"- ③ 할인․할증은 경사도(1-4-5), 횡단운반거리(1-4-15)를 반영한다"
],
"condition_note": [
"집재거리",
@@ -15131,7 +15156,8 @@
"notes": [
"[주]① 본 품은 가선설치․해체공정이 포함하며 집재거리는 최대거리를 적용한다.",
"- ② 평균 경급이 20~26cm인 경우에는 총 소요인력의 10%를 할증한다.",
"- ③ 산림병해충 및 소나무재선충병 방제 산물의 수집량은 33%를 가산하여 산출한다."
"- ③ 산림병해충 및 소나무재선충병 방제 산물의 수집량은 33%를 가산하여 산출한다.",
"- ④ 할인․할증은 경사도(1-4-5), 장애물의 정도(1-4-8)를 반영하되, 다만, 산림병해충방제 및 소나무재선충병방제에는 방제 대상목 평균경급(1-4-18)를 추가 반영한다."
],
"condition_note": [
"구 분",
@@ -15357,7 +15383,8 @@
"[주]① 본 품은 지면끌기 방식으로 집재하는 작업에 소요되는 품으로 파르마윈치, 로깅부기, 타이푼집재기, 우드피싱집재기 등에 적용한다.",
"- ② 집재거리는 최대거리를 적용하며, 집재 재적은 소반별 ha당 평균 집재 재적(㎥)을 적용한다.",
"- ③ 본당 평균재적은 소반별 총 집재량(㎥)÷집재목 총본수(본)로 산출한다.",
"- ④ 소나무재선충병 방제 산물의 수집량은 2%를 가산하여 산출한다."
"- ④ 소나무재선충병 방제 산물의 수집량은 2%를 가산하여 산출한다.",
"- ⑤ 할인․할증은 경사도(1-4-5), 집재방향(1-4-14)를 반영한다."
],
"condition_note": [
"집재거리",
@@ -15667,7 +15694,8 @@
"- ③ 집재재적은 소반별 ha당 평균 집재 재적(㎥)을 적용한다.",
"- ④ 집재거리는 최대거리를 적용한다.",
"- ⑤ 대상면적은 가선설치길이 200m, 측방집재거리 25m(좌우 50m)를 기준으로 1ha로 산정한다.",
"- ⑥ 소나무재선충병 방제 산물의 수집량은 27%를 가산하여 산출한다."
"- ⑥ 소나무재선충병 방제 산물의 수집량은 27%를 가산하여 산출한다.",
"- ⑦ 할인․할증은 경사도(1-4-5), 집재방향(1-4-14), 측방집재거리(1-4-15)를 반영한다."
],
"condition_note": [
"집재재적 (㎥/ha)",
@@ -16581,7 +16609,9 @@
"notes": [
"[주]① 부산물 동시수집은 벌채 산물 중 원목 규격에 못 미치거나 수집이 어려워 이용이 원활하지 않은 산물을 수집하여 에너지용 등으로 활용하기 위함으로, 우드그래플의 원목 수집과 동시에 부산물을 소운반이 가능하도록 임도ㆍ작업로변까지 집재하는 공정을 말한다.",
"- ② 우드그래플을 이용한 부산물 동시수집 시 가산품의 적용기준은 ha당 부산물(미이용 산림바이오매스) 산출중량을 기준으로 한다.",
"- ③ 0.03대/ton 소요인력을 기준으로 ha당 부산물(미이용 산림바이오매스) 산출중량에 따라 산출중량을 곱하여 우드그래플 집재 품에 가산하여 적용한다."
"- ③ 0.03대/ton 소요인력을 기준으로 ha당 부산물(미이용 산림바이오매스) 산출중량에 따라 산출중량을 곱하여 우드그래플 집재 품에 가산하여 적용한다.",
"- ④ 토질, 하층식생, 돌, 도랑, 커브길, 구배 등으로 주행이 매우 힘들 경우 10%, 다소 힘들 경우 5%를 할증한다.",
"- ⑤ 잔존목 본 수가 100본 이상 130본 이하(잔존목간 거리 108.8m)인 경우 10%, 71본 이상 100본 미만(잔존목간 거리 12~10m)인 경우 5%를 할증한다."
],
"condition_note": [
"구 분",
@@ -16637,7 +16667,9 @@
"[주]① 집재장(임도변 포함), 중토장에서 굴착기를 이용한 원목을 집적하거나, 생산재를 품등별로 구분하여 쌓아놓는 품이며. 굴삭기 우드그랩 집적작업을 말한다.",
"- ② 원목(생산재)의 길이는 1.8m, 2.1m, 2.7m, 3.6m를 기준으로 하되, 장재는 응용하여 적용한다.",
"- ③ 검척하지 아니하는 원목은 생산재 평균직경을 적용한다.",
"- ④ 소나무재선충병방제 산물의 집적량은 77%를 가산하여 산출한다."
"- ④ 소나무재선충병방제 산물의 집적량은 77%를 가산하여 산출한다.",
"- ⑤ 품은 임업용 굴착기(우드그래플)를 기준으로 한다.",
"- ⑥ 생산재를 중량으로 매각하고 생산과 동시에 반출하는 경우는 집적작업을 생략할 수 있다."
],
"condition_note": [
"원목(생산재)의 길이",
@@ -17079,7 +17111,8 @@
"variant_key": [],
"notes": [
"[주]① 운재량은 3.0톤 미만의 소형 포워더 1대가 1일 실행하는 작업량이다.",
"- ② 운재작업에 모로오카 무한궤도형 임내차나 소형 덤프트럭을 사용하고자 할 경우에는 7-15-1를 적용하되 50% 감하여 적용. 즉, 주행거리별 운재량 × 0.5로 운재품 산출. 단, 모로오카 무한궤도형 임내차는 ‘소형 포워더 운재(7-16)’, 소형 덤프트럭은 ‘소형트럭 운재(7-17)’ 적용하고 소요재료와 기계손료도 동일하게 적용한다."
"- ② 운재작업에 모로오카 무한궤도형 임내차나 소형 덤프트럭을 사용하고자 할 경우에는 7-15-1를 적용하되 50% 감하여 적용. 즉, 주행거리별 운재량 × 0.5로 운재품 산출. 단, 모로오카 무한궤도형 임내차는 ‘소형 포워더 운재(7-16)’, 소형 덤프트럭은 ‘소형트럭 운재(7-17)’ 적용하고 소요재료와 기계손료도 동일하게 적용한다.",
"- ⑤ 할인․할증은 주행 장애물상태(1-4-13)를 반영한다."
],
"condition_note": [
"구 분",
@@ -20468,7 +20501,9 @@
"capacity_formula_here": false,
"variant_key": [],
"notes": [
"[주]① 1롤은 20㎝*100m를 기준으로 한다."
"[주]① 1롤은 20㎝*100m를 기준으로 한다.",
"- ③ 임업용테이프는 상하 고정이 필요한 경우에 적용하며 본당 소요량이다.",
"- ④ 할인․할증은 경사도(1-4-5), 방제 대상목 분포(1-4-17)를 반영한다."
],
"condition_note": [
"구 분",
@@ -22808,7 +22843,10 @@
"- ③ Q=3600×q×k×f×E/㎝= ㎥/hr",
"- ④ 기존구조물깨기는 「건설표준품셈 토목」을 준용한다.",
"- - 기존 콘크리트포장ㆍ옹벽 등 깨기에 적용",
"- ⑤ 구조물 헐기의 작업능력(Q)은 토목을 준용하였으나 임도의 특성(깨기수량 적음, 작업공간 협소, 추락위험 등)을 고려하여 굴착기(0.4㎥)를 조합하여 사용하는 경우에는 간이 철근 구조물(무근 구조물)의 하한치(Q=2.8)을 적용할 수도 있다. 그러나 소규모 공사에 여러 규격의 기계를 사용하는 것은 비효율적이며, 깨기 후 집토 및 상차과정에서 경제적으로 불리(q=0.4)하므로 대형브레이커+(굴착기(무한궤도)0.7㎥) 조합을 적용한다."
"- ⑤ 구조물 헐기의 작업능력(Q)은 토목을 준용하였으나 임도의 특성(깨기수량 적음, 작업공간 협소, 추락위험 등)을 고려하여 굴착기(0.4㎥)를 조합하여 사용하는 경우에는 간이 철근 구조물(무근 구조물)의 하한치(Q=2.8)을 적용할 수도 있다. 그러나 소규모 공사에 여러 규격의 기계를 사용하는 것은 비효율적이며, 깨기 후 집토 및 상차과정에서 경제적으로 불리(q=0.4)하므로 대형브레이커+(굴착기(무한궤도)0.7㎥) 조합을 적용한다.",
"* 상차 및 운반은 폐기물 상차 및 운반비에 적용",
"* 소량일 경우에는 도로 계획고 1.0m 미만의 흙쌓기(노체) 재료로 재활용(폐아스콘 제외)할 수 있음 「건설공사 표준품셈 공통부문, 8-2-13 대형브레이커(2025)」, 「건설공사 표준품셈 공통부문, 1-2-3 토질. 3. 체적환산계수적용(2025)」 참조",
"- ⑥ 굴착기의 작업능력 산정 비교"
],
"condition_note": [
"구 분",
@@ -22916,7 +22954,9 @@
"notes": [
"[주]① 장비는 대형브레이커와 무한궤도 굴착기(0.7㎥)를 적용하고, 100% 기계를 반영한다.",
"- ② Q=(2.6+4.6)/2=3.60㎥/시간",
"- ③ Q=3600×q×k×f×E/㎝= ㎥/시간"
"- ③ Q=3600×q×k×f×E/㎝= ㎥/시간",
"* 굴착기작업능력은 무근콘크리트(T=30㎝미만) 값 적용",
"- ④ 공사완료 후 재시공 및 보수공사의 구조물 헐기에는 「건설공사 표준품셈 유지관리부문, 3-1-1 콘크리트구조물 헐기(인력)(2025)」, 「건설공사 표준품셈 유지관리부문, 3-1-2 콘크리트구조물 헐기(기계)(2025)」의 인력(할석공, 보통인부) 및 소형장비사용(소형브레이커, 착암공)을 비교ㆍ검토 후 적용한다."
],
"condition_note": [
"구 분",
@@ -23031,7 +23071,12 @@
"special_glyphs": [],
"capacity_formula_here": false,
"variant_key": [],
"notes": [],
"notes": [
"[주]① 장비는 무한궤도 굴착기(0.7㎥)를 적용한다.",
"- ② 굴착기작업능력은 무근콘크리트(T=30㎝미만) 값 적용한다.",
"- 4. 고철공제 : A=1㎥×0.008×7,850kg/㎥×80% = 50.24 kg/㎥ ≒50 kg/㎥",
"[주] 「건설공사 표준품셈 공통부문, 8-2-13 대형브레이커(2025)」, 「건설공사 표준품셈 유지관리부문, 3-1-3 철골재 철거(인력)(2025)」, 「건설공사 표준품셈 유지관리부문, 3-1-4 철골재 철거(기계)(2025)」, 「건설공사 표준품셈 공통부문, 1-2-3 토질, 3. 체적환산계수적용(2025)」, 「국토건설 설계실무요령, 수량산출요령(2021)」 참조한다"
],
"condition_note": [
"구 분",
"단위",
@@ -23109,7 +23154,14 @@
"variant_key": [],
"notes": [
"[주]① 장비는 대형브레이커와 무한궤도 굴착기(0.7㎥)를 적용하며, 100% 기계를 반영한다.",
"- ② Q=(1.4+2.7)/2=2.05㎥/m"
"- ② Q=(1.4+2.7)/2=2.05㎥/m",
"- 2. 철근절단 : 철근콘크리트(T=30㎝ 미만)품을 적용한다.",
"- 3. 집토 : Q=3600×q×k×f×E/㎝= ㎥/시간",
"[주]① 장비는 무한궤도 굴착기(0.7㎥)를 적용한다.",
"- ② 굴착기작업능력은 무근콘크리트(T=30㎝미만) 값 적용한다.",
"- 4. 고철공제 : A=1㎥×0.008×7,850kg/㎥×80% = 50.24 kg/㎥≒50 kg/㎥",
"[주]① 적사 및 운반은 폐기물 상차 및 운반비에서 적용한다.",
"- ② 「건설공사 표준품셈 유지관리부문, 3-1-3 철골재 철거(인력)(2025)」, 「건설공사 표준품셈 유지관리부문., 3-1-4 철골재 철거(기계)(2025)」 참조한다"
],
"condition_note": [
"구 분",
@@ -23259,7 +23311,10 @@
"[주]① 장비는 대형브레이커와 무한궤도 굴착기(0.7㎥)를 적용하며, 100% 기계를 반영한다.",
"- ② Q=(3.3+5.9)/2=4.6㎥/시간",
"- ③ 임도의 구조개량(평면선형, 종단선형) 공사에 주로 적용한다.",
"- ④ 사용 기계는 공사의 규모, 난이도 등을 고려하여 선정하며, 「건설공사 표준품셈 공통부문, 8-2-13 대형브레이커(2025)」 참조한다."
"- ④ 사용 기계는 공사의 규모, 난이도 등을 고려하여 선정하며, 「건설공사 표준품셈 공통부문, 8-2-13 대형브레이커(2025)」 참조한다.",
"- 2. 집토 : Q=3600×q×k×f×E/㎝= ㎥/시간",
"[주]① 장비는 무한궤도 굴착기(0.7㎥)를 적용한다.",
"- ② 굴착기작업능력은 무근콘크리트(T=30㎝미만) 값 적용한다."
],
"condition_note": [
"구 분",
@@ -23314,7 +23369,11 @@
"variant_key": [],
"notes": [
"[주]① 장비는 대형브레이커와 무한궤도 굴착기(0.7㎥)를 적용하며, 100% 기계를 반영한다.",
"- ② Q=16㎥/시간"
"- ② Q=16㎥/시간",
"- 2. 집토 : Q=3600×q×k×f×E/㎝= ㎥/시간",
"[주]① 장비는 무한궤도 굴착기(0.7㎥)를 적용한다.",
"- ② 굴착기작업능력은 무근콘크리트(T=30㎝미만) 값을 적용한다.",
"- ③ 「건설공사 표준품셈 공통부문, 8-2-13 대형브레이커(2025)」 참조한다."
],
"condition_note": [
"구 분",
@@ -25652,7 +25711,8 @@
"variant_key": [],
"notes": [
"[주]① 장비는 무한궤도 굴착기(0.7㎥)를 적용한다.",
"- ② Q1=3600×q×K×f×E/㎝= ㎥/시간"
"- ② Q1=3600×q×K×f×E/㎝= ㎥/시간",
"- ③ 「건설공사 표준품셈 공통부문, 8-2-3 굴착기(2025)」 참조한다. (불도저작업이 어려운 경우)"
],
"condition_note": [
"구 분",
@@ -25724,7 +25784,8 @@
"variant_key": [],
"notes": [
"[주]① 장비는 무한궤도 불도저(19ton)를 적용한다.",
"- ② q=3.2×e= ㎥"
"- ② q=3.2×e= ㎥",
"- ③ 「건설공사 표준품셈 공통부문, 8-2-1 불도저(2025)」 참조(표토제거 두께 T=0.2m)"
],
"condition_note": [
"구 분",
@@ -25998,7 +26059,8 @@
"notes": [
"[주]① 물탱크는 5,500ℓ기준이다.",
"- ② E=0.9, L=1.0km, O.M.C(최적함수비)=13%, N.M.C(자연함수비)=8%, V=15km/시간",
"- ③ T2=L/V=1.0/15×2×60=8분(운반시간), ㎝=T1+T2+T3+T4+T5= 분"
"- ③ T2=L/V=1.0/15×2×60=8분(운반시간), ㎝=T1+T2+T3+T4+T5= 분",
"- ④ 토목은 동상방지층, 보조기층, 기층 등 층별 조건이나 본선, 길어깨 등에 따라 임도에는 대형장비(5,500ℓ)를 사용한다."
],
"condition_note": [
"구 분",
@@ -26111,7 +26173,9 @@
"variant_key": [],
"notes": [
"[주]① 장비는 19ton 불도저를 적용한다.",
"- ② q=q0×e, ㎝=L/V1+L/V2+0.25"
"- ② q=q0×e, ㎝=L/V1+L/V2+0.25",
"- ③ 향후 나무심기가 예상되는 곳에 시행한다.",
"- ④ 「건설공사 표준품셈 공통부문 8-2-1 불도저(2025)」 참조한다."
],
"condition_note": [
"구 분",
@@ -26954,7 +27018,8 @@
"notes": [
"[주]① 장비는 무한궤도 굴착기(0.7㎥)를 적용한다.",
"- ② 토양개량제, 천엽부엽토, 객토를 혼합하는 공종이다.",
"- ③ Q1=3600×q×K×f×E/Cm=㎥/시간"
"- ③ Q1=3600×q×K×f×E/Cm=㎥/시간",
"- ④ 0.2㎥ 또는 0.4㎥ 용량의 굴착기를 사용하는 경우에는「건설공사 표준품셈 공통부문, 8-2-3 굴착기(2025)」를 참조하여 적용계수를 달리 적용하도록 한다."
],
"condition_note": [
"구 분",
@@ -28000,7 +28065,8 @@
"variant_key": [],
"notes": [
"[주]① 블록 및 제자재는 운반차량의 적하단위, 재적중량 및 운반자재의 형태 치수를 고려하여 재적량을 검토한다.",
"- ② 모노레일용 바스켓 차량이나 보통 차량을 사용한 자재의 운반량은 다음을 표준으로 한다."
"- ② 모노레일용 바스켓 차량이나 보통 차량을 사용한 자재의 운반량은 다음을 표준으로 한다.",
"- 나. 1사이클의 소요시간(cm)"
],
"condition_note": [
"구 분",
@@ -28812,7 +28878,8 @@
],
"notes": [
"[주]① 공사현장 특성상 토사 암반의 분리가 불가한 경우 각 수량의 환산계수를 적용 후 합산하여 토사운반으로 일괄 적용할 수 있다.",
"- ② q=3.2×e= ㎥"
"- ② q=3.2×e= ㎥",
"- ③ 「건설공사 표준품셈 공통부문. 8-2-1 불도저(2025)」 참조한다."
],
"condition_note": [
"구 분",
@@ -32627,7 +32694,8 @@
"- ② 일당 시공량은 기준 시공량에 시설유형(f1), 현장조건(f2)에 따라 시공량에 다음 계수를 곱하여 적용한다.",
"- - 시공량(㎥) : 기준 시공량 × f₁× f₂",
"- - 펌프차의 타설 범위(타설 높이 및 수평 거리)를 초과하여 펌프차 이동 및 재세팅이 필요한 경우 회당 시공량의 5%를 감하여 적용한다.",
"- - 시설 유형별 및 현장 조건별 적용기준은 다음과 같다."
"- - 시설 유형별 및 현장 조건별 적용기준은 다음과 같다.",
"* 시설유형(f₁)"
],
"condition_note": [
"슬 럼 프",
@@ -33447,8 +33515,8 @@
"pum_table_id": "F0369",
"section": "12-22. P.V.C 파이프 설치(50mm)",
"source_line": 6654,
"pum_form": "reference",
"form_basis": "분류 딱지 표의 '재료비의' — 값이 아니라 비율 지시",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — P.V.C 파이프 설치 — 아스팔트 4kg·방수공 0.034인 실값",
"basis_quantity": 1.0,
"basis_unit": "개소",
"basis_source": "본문",
@@ -34418,8 +34486,8 @@
"pum_table_id": "F0380",
"section": "12-30-1. 신축 이음부(D32m/m, L=1000m/m)",
"source_line": 6786,
"pum_form": "reference",
"form_basis": "'별도계상' — 값이 아니라 참조 지시",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 다웰바 신축이음부 — 재료비의 5%·특별인부 0.1인 실값",
"basis_quantity": 1.0,
"basis_unit": "개소",
"basis_source": "본문",
@@ -34499,8 +34567,8 @@
"pum_table_id": "F0381",
"section": "12-30-2. 접속스라브부(D29m/m, L=500m/m)",
"source_line": 6798,
"pum_form": "reference",
"form_basis": "'별도계상' — 값이 아니라 참조 지시",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 다웰바 접속스라브부 — 위와 같음",
"basis_quantity": 1.0,
"basis_unit": "개소",
"basis_source": "본문",
@@ -34622,8 +34690,8 @@
"pum_table_id": "F0382",
"section": "12-31. 물끊기 홈(NOTCH) 설치",
"source_line": 6814,
"pum_form": "reference",
"form_basis": "분류 딱지 표의 '재료비의' — 값이 아니라 비율 지시",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 물끊기 홈 — 특별인부 0.1인·보통인부 0.001인 실값",
"basis_quantity": 1.0,
"basis_unit": "개소",
"basis_source": "본문",
@@ -34677,8 +34745,8 @@
"pum_table_id": "F0383",
"section": "12-32. 전선관 설치(P.V.C ø54m/m)",
"source_line": 6823,
"pum_form": "reference",
"form_basis": "분류 딱지 표의 '재료비의' — 값이 아니라 비율 지시",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 전선관 설치 — 설치비(주재료비의 5%) 실값",
"basis_quantity": 1.0,
"basis_unit": "개소",
"basis_source": "본문",
@@ -34891,8 +34959,8 @@
"pum_table_id": "F0386",
"section": "12-34-2. 합판거푸집(3회 07m)",
"source_line": 6855,
"pum_form": "reference",
"form_basis": "분류 딱지 표의 '회기준' — 값이 아니라 비율 지시",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 합판거푸집(3회) — 보통인부 0.29인·진동기 2대 실값",
"basis_quantity": 1.0,
"basis_unit": "㎡",
"basis_source": "본문",
@@ -35034,8 +35102,8 @@
"pum_table_id": "F0388",
"section": "12-34-4. 채움재(T=20m/m)",
"source_line": 6877,
"pum_form": "reference",
"form_basis": "사람 판정 — 「재료비 JOINT FILLER」 항목만 — 값이 없는 구성 안내",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 신축이음 채움재 — 필요수량·고철대 감 3% 가 적힌 실값 표",
"basis_quantity": 1.0,
"basis_unit": "㎡",
"basis_source": "본문",
@@ -35153,8 +35221,8 @@
"pum_table_id": "F0390",
"section": "12-36. P.C BOX 설치",
"source_line": 6895,
"pum_form": "reference",
"form_basis": "사람 판정 — 제작비·운송비·설치비 「견적처리」",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — P.C BOX 설치 — 미장공 0.14인·보통인부 0.05인 실값 표",
"basis_quantity": null,
"basis_unit": null,
"basis_source": null,
@@ -35213,8 +35281,8 @@
"pum_table_id": "F0391",
"section": "12-37. 콘크리트 타설(무근진동기 제외)",
"source_line": 6905,
"pum_form": "reference",
"form_basis": "'별도계상' — 값이 아니라 참조 지시",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 무근콘크리트 타설 — 콘크리트공 0.15인·보통인부 0.27인 실값",
"basis_quantity": 1.0,
"basis_unit": "㎥",
"basis_source": "본문",
@@ -35377,8 +35445,8 @@
"pum_table_id": "F0393",
"section": "12-38-2. 사용수량",
"source_line": 6925,
"pum_form": "reference",
"form_basis": "'적용한다' — 값이 아니라 참조 지시",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 유로폼 사용수량 — 부자재 주재료비의 24~79% 실값",
"basis_quantity": 10.0,
"basis_unit": "㎡",
"basis_source": "본문",
@@ -37046,8 +37114,8 @@
"pum_table_id": "F0408",
"section": "13-4-3. 고임돌 소요량",
"source_line": 7128,
"pum_form": "reference",
"form_basis": "사람 판정 — 고임돌 소요량(㎥/㎡) — 원단위표(B08 고임돌표가 씀). 품으로 세우면 자재를 두 번 셈",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 고임돌 소요량(㎥/㎡) — 투입 체적 실값(B08 고임돌표가 이미 읽음)",
"basis_quantity": 1.0,
"basis_unit": "㎡",
"basis_source": "본문",
@@ -37331,8 +37399,8 @@
"pum_table_id": "F0410",
"section": "13-4-4. 찰쌓기(인력)",
"source_line": 7152,
"pum_form": "reference",
"form_basis": "사람 판정 — [주]① 채움 콘크리트 소요량(㎥/㎡) — 자재 원단위표(B08 채움표가 씀). 품이면 두 번 셈",
"pum_form": "sub_requirement",
"form_basis": "사람 판정 — 찰쌓기 뒷채움 콘크리트(㎥/㎡) — 레미콘 실값(B08 채움표가 이미 읽음)",
"basis_quantity": 1.0,
"basis_unit": "㎡",
"basis_source": "본문",
@@ -42818,7 +42886,10 @@
],
"capacity_formula_here": false,
"variant_key": [],
"notes": [],
"notes": [
"[주] ① 노임단가는 2025년 6월 기준",
"- ② 관급자재는 묘목 재료비 미반영, 구입이 필요한 경우 별도 반영"
],
"condition_note": [
"ha당 조림 단가산출서(예시)"
],
@@ -6,7 +6,9 @@
"place: 원문 〔부록 1〕 뒤 표인데 공종에 붙었거나(부록 표), 앞 표인데 공종에 안 붙은 것.",
"basis: md=원문에서 읽은 밑수 [수, 단위] · master=마스터 밑수 · 둘 중 하나가 null 이면 한쪽만 있음.",
"notes: md_only=원문 [주]에 있는데 마스터에 없는 줄 · master_only=마스터에만 있는 줄.",
"form: 원문 표에 품 표 표지(직종 이름·소요인력·(인)·수량 단위 칸 + 숫자)가 있는데 마스터가 reference·coefficient 로 둔 표 · md_mark=그 표지 칸."
"form: 원문 표에 품 표 표지(직종 이름·소요인력·(인)·수량 단위 칸 + 숫자)가 있는데 마스터가 reference·coefficient 로 둔 표 · md_mark=그 표지 칸.",
"basis 2026-09-18 — 작업조 표 — 원문이 「(단위: 일 당)」이나 밑수가 시공량 열이라 비워 둔다. 「1일」을 박으면 B09 CrewOutput 길이 막혀 호표가 사라진다(2026-09-17 유로폼에서 실증).",
"notes 2026-09-18 — 마스터가 더 많이 가진 쪽 — 「> 【산출 예시】」 인용이 [주] 중간에 끼는 자리에서 원문 md 쪽 추출이 아직 끊긴다. 마스터는 2026-09-18 에 그 뒤의 ⑤⑥ 가산·할증을 되살렸다. ⚠ 고칠 자리는 마스터가 아니라 **md 쪽 추출**이다."
],
"place": {
"F0452": {
@@ -259,6 +261,51 @@
],
"md_evidence": "(단위: 인/조)",
"master": null
},
"F0339": {
"section": "12-7-1",
"md": [
1.0,
"일"
],
"md_evidence": "(단위: 일당)",
"master": null
},
"F0340": {
"section": "12-7-2",
"md": [
1.0,
"일"
],
"md_evidence": "(단위: 일당)",
"master": null
},
"F0341": {
"section": "12-8",
"md": [
1.0,
"일"
],
"md_evidence": "(단위: 일당)",
"master": null
},
"F0395": {
"section": "12-38-3",
"md": [
1.0,
"일"
],
"md_evidence": "(단위: 일 당)",
"master": null
},
"F0449": {
"section": "13-16-2",
"md": [
1.0,
"일"
],
"md_evidence": "(단위: 일 당)",
"master": null
}
},
"notes": {
@@ -271,66 +318,6 @@
],
"master_only": []
},
"F0004": {
"section": "1-2-3",
"md_only": [],
"master_only": [
"- 라. 체적환산계수(f)표"
]
},
"F0008": {
"section": "1-3-1",
"md_only": [],
"master_only": [
"- 3. 노상 및 노반재료(선택층, 보조기층, 기층 등)"
]
},
"F0009": {
"section": "1-3-1",
"md_only": [],
"master_only": [
"[주] 이형철근의 경우, 해당 공사 또는 구조물의 시공실적에 따라 조정하여 적용할 수 있다.",
"- 6. 기타재료"
]
},
"F0010": {
"section": "1-3-1",
"md_only": [],
"master_only": [
"[주] 이형철근의 경우, 해당 공사 또는 구조물의 시공실적에 따라 조정하여 적용할 수 있다.",
"- 6. 기타재료"
]
},
"F0011": {
"section": "1-3-1",
"md_only": [],
"master_only": [
"- 6. 기타재료"
]
},
"F0015": {
"section": "1-4-3",
"md_only": [
"* A, B 사업지 간격은 A구역 경계에서 B구역 경계까지 거리를 말함",
"- - 예) 소반면적 20ha, 10개소일 경우, 20ha÷10개소 = 2.0ha/개소로 +5% 할증 적용"
],
"master_only": []
},
"F0044": {
"section": "2-1-1",
"md_only": [],
"master_only": [
"[주] 잡품은 엔진유, 기어유, 그리스 등 기타소모품에 해당하며 주 연료비에 대하여 금액비율로 적용한다.",
"- 5. 천공기"
]
},
"F0045": {
"section": "2-1-1",
"md_only": [],
"master_only": [
"- 5. 천공기"
]
},
"F0054": {
"section": "2-1-5",
"md_only": [],
@@ -345,19 +332,6 @@
"- 3. 박피품은 별도 적용하여야 한다. 다만 작업조건에 따라 1일 작업량은 변동 적용한다."
]
},
"F0086": {
"section": "4-2-1",
"md_only": [
"* (전목) 나무베기, (전간목) 벌목+가지정리, (단목) 벌목+가지정리+토막내기",
"- ③ 가지제거 : 베어진 나무의 가지를 제거하는 작업이다.",
"- ④ 토막내기(자르기) : 베어진 나무를 2m 길이로 자르는 작업. 자르는 길이를 달리할 경우 품셈을 기준으로 변형 사용이 가능하다.(산주의 요구)",
"- ⑤ 관목류 제거 시 보통인부의 30%를 할증한다.",
"- ⑥ 규격재 생산을 위한 조재가 포함될 경우 20%를 할증한다.",
"- ⑦ 소나무재선충병 벌목조재는 소각, 매몰, 훈증, 박피(소나무재선충병)을 참고한다.",
"- ⑧ 할인․할증은 집단화정도(1-4-3), 경사도(1-4-5), 장애물의 정도(1-4-8), 규격재 생산(1-4-16)을 반영하되 산림병해충방제에는 집단화정도(1-4-3)를 적용하지 않고 방제대상목 분포(1-4-17)를 반영한다."
],
"master_only": []
},
"F0104": {
"section": "5-3-4",
"md_only": [],
@@ -385,40 +359,6 @@
"- ⑧ 장비 규격은 다음을 기준으로 한다."
]
},
"F0116": {
"section": "5-11",
"md_only": [
"* 화본과 : 갯개고리풀, 갯쇠보리, 새, 솔새",
"* 사초과 : 보리사초, 통보리사초, 솔보리사초, 행부자(숨복사지)",
"* 국화과 : 갯쑥부쟁이, 갯쑥, 갯씀바귀, 갯상근, 갯메꽃, 갯질경, 모래지치, 갯보리, 큰개미자리, 자귀풀",
"* 콩 과 : 갯완두",
"* 도입 초종 : american beach grass, weeping love grass, switch grass"
],
"master_only": []
},
"F0137": {
"section": "5-24-2",
"md_only": [],
"master_only": [
"[주] ① 「도로비탈면 녹화공사의 설계및 시공 지침 2.7 종자배합설계(2009)」 참조한다.",
"- ② 기타 적용지역이란 자연경관복원형의 복원목표가 적용되지 않는 지역을 말한다.",
"- ③ 해안생태계지역에서는 해안에 적합한 종자배합을 하고, 외래도입초종이 10%를 상회하지 않도록 한다."
]
},
"F0169": {
"section": "7-1-1",
"md_only": [],
"master_only": [
"- 2. 인공림 모두베기"
]
},
"F0170": {
"section": "7-1-1",
"md_only": [],
"master_only": [
"[주] 경사도는 1개 기번 전임지의 평균경사도다."
]
},
"F0189": {
"section": "7-11",
"md_only": [],
@@ -429,67 +369,6 @@
"- ④ 할인․할증은 경사도(1-4-5), 주행 장애물 상태(1-4-13)를 반영한다."
]
},
"F0206": {
"section": "8-2-1",
"md_only": [],
"master_only": [
"[주]① 조경용(전정) 소나무 또는 가지나 잎이 적은 소나무류는 주입량을 적게한다.",
"- ② 가슴높이 지름 100㎝이상의 대형목은 수목의 가치, 활력도 등을 고려하여 상단부 가지 주입 및 가압방식 적용한다.",
"- ③ 매개충나무주사를 실행할 시 30%를 가산한다."
]
},
"F0225": {
"section": "8-6-1",
"md_only": [],
"master_only": [
"- 2. 약제살포량"
]
},
"F0226": {
"section": "8-6-1",
"md_only": [],
"master_only": [
"[주] 기종별 헬기 운행안전을 고려하여 약제원액과 희석제 등 1회 총 살포량을 말한다."
]
},
"F0228": {
"section": "8-6-2",
"md_only": [],
"master_only": [
"- 2. 무인 멀티콥터"
]
},
"F0230": {
"section": "8-6-3",
"md_only": [],
"master_only": [
"- 2. 지상살포 희석배수별 약제소요량"
]
},
"F0247": {
"section": "9-7-1",
"md_only": [
"* 상차 및 운반은 폐기물 상차 및 운반비에 적용",
"* 소량일 경우에는 도로 계획고 1.0m 미만의 흙쌓기(노체) 재료로 재활용(폐아스콘 제외)할 수 있음 「건설공사 표준품셈 공통부문, 8-2-13 대형브레이커(2025)」, 「건설공사 표준품셈 공통부문, 1-2-3 토질. 3. 체적환산계수적용(2025)」 참조",
"- ⑥ 굴착기의 작업능력 산정 비교"
],
"master_only": []
},
"F0249": {
"section": "9-7-2",
"md_only": [
"* 굴착기작업능력은 무근콘크리트(T=30㎝미만) 값 적용",
"- ④ 공사완료 후 재시공 및 보수공사의 구조물 헐기에는 「건설공사 표준품셈 유지관리부문, 3-1-1 콘크리트구조물 헐기(인력)(2025)」, 「건설공사 표준품셈 유지관리부문, 3-1-2 콘크리트구조물 헐기(기계)(2025)」의 인력(할석공, 보통인부) 및 소형장비사용(소형브레이커, 착암공)을 비교ㆍ검토 후 적용한다."
],
"master_only": []
},
"F0250": {
"section": "9-8-1",
"md_only": [],
"master_only": [
"- 2. 철근절단"
]
},
"F0251": {
"section": "9-8-1",
"md_only": [],
@@ -532,13 +411,6 @@
"- ③ 「건설공사 표준품셈 공통부문, 8-2-13 대형브레이커(2025)」 참조한다."
]
},
"F0288": {
"section": "9-19-1",
"md_only": [],
"master_only": [
"- 2. 성토면 고르기"
]
},
"F0308": {
"section": "10-7-4",
"md_only": [],
@@ -546,36 +418,6 @@
"- 나. 1사이클의 소요시간(cm)"
]
},
"F0309": {
"section": "10-7-4",
"md_only": [],
"master_only": [
"- (2) 운반시간()"
]
},
"F0310": {
"section": "10-7-4",
"md_only": [],
"master_only": [
"- 3. 단가표",
"- 가. 모노레일 가설ㆍ철거단가표"
]
},
"F0311": {
"section": "10-7-4",
"md_only": [],
"master_only": [
"- 나. 모노레일 운전 단가표"
]
},
"F0320": {
"section": "10-12-1",
"md_only": [],
"master_only": [
"[주]① 장비는 덤프트럭(15ton)을 적용한다.",
"- ② 덤프트럭의 작업능력 산정 비교"
]
},
"F0323": {
"section": "10-13-2",
"md_only": [],
@@ -583,20 +425,6 @@
"[주] 위 단가산출은 일본 임야청에서 묘목 5,000본의 운반을 가정하여 현장 검증을 통해 산출한 내용이므로, 묘목 이외의 다른 화물을 운반할 시에는 달라질 수 있다."
]
},
"F0355": {
"section": "12-17-1",
"md_only": [],
"master_only": [
"- 2. 일일 시공량"
]
},
"F0356": {
"section": "12-17-1",
"md_only": [
"* 시설유형(f₁)"
],
"master_only": []
},
"F0393": {
"section": "12-38-2",
"md_only": [],
@@ -605,95 +433,145 @@
"- ② 플랫 타이(Flat Tie) 대신 폼 타이(Form Tie) 사용 시 소요 수량은 12-4 합판 거푸집 자재수량을 따른다."
]
},
"F0405": {
"section": "13-4-1",
"F0053": {
"section": "2-1-5",
"md_only": [],
"master_only": [
"[주] 본 기준은 인력 돌쌓기 및 돌붙임에 적용한다."
"- ③ 잡품은 물, 혼합용기 등 소모품에 해당하며 주재료비에 대하여 금액 비율로 적용한다.",
"- ④ 농약의 종류나 용량이 변경된 경우, 위 기준을 응용하여 적용한다."
]
},
"F0417": {
"section": "13-5-2",
"F0064": {
"section": "2-2-1",
"md_only": [],
"master_only": [
"- 2. 찰붙임"
"- ③ 기계손료에는 감가상각비, 정비비 및 관리비가 포함된다."
]
},
"F0427": {
"section": "13-10-2",
"F0080": {
"section": "3-6",
"md_only": [],
"master_only": [
"- 2. 기초말뚝 박기"
"- ⑥ 할인․할증은 경사도(1-4-5)를 반영한다."
]
},
"F0429": {
"section": "13-10-2",
"F0088": {
"section": "4-3",
"md_only": [],
"master_only": [
"[주] ① 본 품은 보통 토사질 상태에서 관입길이 6~8할 박기의 경우이며, 3~5할 박기의 경우에는 본 품 중의 개수를 20% 가산한다.",
"- ② 지질상태의 경연에 따라서 본 품의 30% 이내에서 가감할 수 있다.",
"- ③ 인부품에는 말뚝머리 자르기를 포함한다.",
"- ④ 콘크리트 말뚝박기의 경우에는 1일 시공개수를 20% 가산한다.",
"- ⑤ 원동기에 전력을 사용할 때에는 경유 대신 전력량 0.75KWH/HP/hr를 계상한다.",
"- ⑥ 항타 시설의 조립 및 해체는 별도로 계상한다.",
"- ⑦ 윈치 및 발동기의 손료는 별도로 계상하고 기타 시설은 인력품에 포함되어 있다.",
"- ⑧ 계항인 경우에는 선타항의 길이를 표준으로 하여 그 품의 50%를 가산한다.",
"- ⑨ 잡재료(잡유 기타)는 주화연료(主火燃料)(경유)에 대한 율을 표시한다.",
"- ⑩ 널말뚝 박기 때에는 널말뚝 단면이 내접하여 만들어진 구형 단면의 주장과 동일 주장을 갖는 말뚝의 품으로 한다.",
"- ⑪ 강관 및 콘크리트 말뚝을 디젤해머로 타설하는 경우 「건설공사 표준품셈 공통부문, 8-2-22 디젤 파일 해머(2025)」 항목에 의한다."
"- ⑤ 장비는 굴착기 우드그랩은 0.2㎥, 크레인은 5톤 트럭탑재형 크레인을 적용, 현장 여건에 따라 장비의 규격을 조정 가능하다.",
"- ⑥ 산림병해충, 소나무재선충병 발생지역 내 장비 없이 인력으로만 위험목을 제거할 경우에는 보통인부의 100%를 가산한다."
]
},
"F0431": {
"section": "13-11-1",
"F0164": {
"section": "6-6",
"md_only": [],
"master_only": [
"- 2. 기계"
"- ③ 활엽수 수형교정을 하는 경우에는 본 품을 적용한다.",
"- ④ 할인․할증은 집단화정도(1-4-3), 경사도(1-4-5), 장애물의 정도(1-4-8)를 반영한다."
]
},
"F0433": {
"section": "13-11-2",
"F0173": {
"section": "7-2",
"md_only": [],
"master_only": [
"- 2. 기계"
"- ③ 할인․할증은 경사도(1-4-5), 횡단운반거리(1-4-15)를 반영한다"
]
},
"F0441": {
"section": "13-13-2",
"F0176": {
"section": "7-4-2",
"md_only": [],
"master_only": [
"[주] ① 목재공작물의 설치에 소요되는 잡재료비는 실소요량을 산출하여 계상한다.",
"- ② 공작물별 구조의 구분과 적용은 다음의 기준을 따른다.",
"- - 간단구조 : 현장 가공이 필요 없는 외부 제작 목구조체의 현장 설치",
"- - 보통구조 : 현장 실정에 맞춰 일부 가공이 필요한 목구조체의 현장 설치"
"- ④ 할인․할증은 경사도(1-4-5), 장애물의 정도(1-4-8)를 반영하되, 다만, 산림병해충방제 및 소나무재선충병방제에는 방제 대상목 평균경급(1-4-18)를 추가 반영한다."
]
},
"F0442": {
"section": "13-13-2",
"F0178": {
"section": "7-5-2",
"md_only": [],
"master_only": [
"[주] ① 목재공작물의 설치에 소요되는 잡재료비는 실소요량을 산출하여 계상한다.",
"- ② 공작물별 구조의 구분과 적용은 다음의 기준을 따른다.",
"- - 간단구조 : 현장 가공이 필요 없는 외부 제작 목구조체의 현장 설치",
"- - 보통구조 : 현장 실정에 맞춰 일부 가공이 필요한 목구조체의 현장 설치"
"- ⑤ 할인․할증은 경사도(1-4-5), 집재방향(1-4-14)를 반영한다."
]
},
"F0446": {
"section": "13-15-2",
"F0181": {
"section": "7-7-2",
"md_only": [],
"master_only": [
"[주] ① 인부품에는 횡목준비, 횡목설치, 잔가지 정리 및 되메우기를 포함한다.",
"- ② 횡목 또는 지지목으로 사용하고 남은 산물을 처리하는데 소요되는 시간을 포함한다.",
"- ③ 횡목의 직경은 20 30cm으로 제한한다.",
"- ④ 벌도목(횡목, 지지목, 주변 방해목)의 직경과 가지량에 따라 작업조건을 분류한다."
"- ⑦ 할인․할증은 경사도(1-4-5), 집재방향(1-4-14), 측방집재거리(1-4-15)를 반영한다."
]
},
"F0454": {
"section": "14-2",
"md_only": [
"[주] ① 노임단가는 2025년 6월 기준",
"- ② 관급자재는 묘목 재료비 미반영, 구입이 필요한 경우 별도 반영"
],
"master_only": []
"F0191": {
"section": "7-11",
"md_only": [],
"master_only": [
"- ④ 토질, 하층식생, 돌, 도랑, 커브길, 구배 등으로 주행이 매우 힘들 경우 10%, 다소 힘들 경우 5%를 할증한다.",
"- ⑤ 잔존목 본 수가 100본 이상 130본 이하(잔존목간 거리 108.8m)인 경우 10%, 71본 이상 100본 미만(잔존목간 거리 12~10m)인 경우 5%를 할증한다."
]
},
"F0192": {
"section": "7-12",
"md_only": [],
"master_only": [
"- ⑤ 품은 임업용 굴착기(우드그래플)를 기준으로 한다.",
"- ⑥ 생산재를 중량으로 매각하고 생산과 동시에 반출하는 경우는 집적작업을 생략할 수 있다."
]
},
"F0197": {
"section": "7-15-2",
"md_only": [],
"master_only": [
"- ⑤ 할인․할증은 주행 장애물상태(1-4-13)를 반영한다."
]
},
"F0223": {
"section": "8-4",
"md_only": [],
"master_only": [
"- ③ 임업용테이프는 상하 고정이 필요한 경우에 적용하며 본당 소요량이다.",
"- ④ 할인․할증은 경사도(1-4-5), 방제 대상목 분포(1-4-17)를 반영한다."
]
},
"F0281": {
"section": "9-15-1",
"md_only": [],
"master_only": [
"- ③ 「건설공사 표준품셈 공통부문, 8-2-3 굴착기(2025)」 참조한다. (불도저작업이 어려운 경우)"
]
},
"F0282": {
"section": "9-15-2",
"md_only": [],
"master_only": [
"- ③ 「건설공사 표준품셈 공통부문, 8-2-1 불도저(2025)」 참조(표토제거 두께 T=0.2m)"
]
},
"F0285": {
"section": "9-16-3",
"md_only": [],
"master_only": [
"- ④ 토목은 동상방지층, 보조기층, 기층 등 층별 조건이나 본선, 길어깨 등에 따라 임도에는 대형장비(5,500ℓ)를 사용한다."
]
},
"F0286": {
"section": "9-17-2",
"md_only": [],
"master_only": [
"- ③ 향후 나무심기가 예상되는 곳에 시행한다.",
"- ④ 「건설공사 표준품셈 공통부문 8-2-1 불도저(2025)」 참조한다."
]
},
"F0295": {
"section": "9-22",
"md_only": [],
"master_only": [
"- ④ 0.2㎥ 또는 0.4㎥ 용량의 굴착기를 사용하는 경우에는「건설공사 표준품셈 공통부문, 8-2-3 굴착기(2025)」를 참조하여 적용계수를 달리 적용하도록 한다."
]
},
"F0319": {
"section": "10-11",
"md_only": [],
"master_only": [
"- ③ 「건설공사 표준품셈 공통부문. 8-2-1 불도저(2025)」 참조한다."
]
}
},
"form": {
@@ -727,26 +605,6 @@
"master": "reference",
"md_mark": "배치인원(인)"
},
"F0380": {
"section": "12-30-1",
"master": "reference",
"md_mark": "특별인부"
},
"F0381": {
"section": "12-30-2",
"master": "reference",
"md_mark": "특별인부"
},
"F0391": {
"section": "12-37",
"master": "reference",
"md_mark": "콘크리트공"
},
"F0393": {
"section": "12-38-2",
"master": "reference",
"md_mark": "매"
},
"F0454": {
"section": "14-2",
"master": "reference",
@@ -50,6 +50,8 @@ MASTER = OUT_DIR / "work_item_master_2026-01-01.json"
#: ④ 표 아래 `[주]` 글을 `notes` 칸으로 실음(순수 더하기 — 원문 셀·밑수·형태 다 그대로)
#: ⑤ 그 `[주]` 추출의 오염을 걷어냄 — 원문이 절 제목을 목록 줄로 적어 제목·다음 절 [주]까지
#: 끌어오고 있었음(산림 표 320 → 306 · 건설 1,761 → 1,106)
#: ⑥ ⚠ 그 걷어내기가 **진짜 계수 34건까지 잘랐던 것**을 되살림(고철 공제·위험목 100% 가산 …)
#: ⑦ 실값인데 「참고」로 빠져 있던 12표를 `sub_requirement` 로 — 값은 실값, 자리는 상위 공종 종속
#: ⇒ 곱하면 안 되던 줄이 곱할 수 있게 된 것이지, 있던 값이 바뀐 것이 아니다.
#: 2026-09-17 랩탑 메인 — 목차 오기 둘을 본문 번호로 바로잡아(브레인 지시) **네 줄만** 바뀌어 새로 뜸
#: (옛 f8b8fba1…). 네 줄 모습은 `test_목차_오기는_본문_번호로_바로잡고_열쇠는_그대로` 가 잼 ·
@@ -57,7 +59,7 @@ MASTER = OUT_DIR / "work_item_master_2026-01-01.json"
#: 2026-09-17 랩탑 메인 둘째 — 헛단위 뺌(인용을 제목으로 읽은 13-3 표 셋 · 부록 사례 번호 겹침 일곱)으로 다시 뜸
#: (옛 be88f730…). 바뀐 줄은 13-3·4-1·4-2·2-1·2-2·3-1·3-2·3-3·13-4-1·13-5-2 의 표 귀속뿐 —
#: `test_work_item_master_toc` 가 자리를 잼 · 단가표 대조는 그 파일 머리.
BASELINE_WORK_ITEMS_SHA = "5afde1bd7e75db519d7d647f2f254ca7cec9d34a19b945a00502799e8cb718b8"
BASELINE_WORK_ITEMS_SHA = "3020cb19fc3c0d3102fb78dc86943f6f0875d2f679931098e670edec517dec47"
#: 열쇠 작업이 새로 얹은 칸. 지문을 잴 때만 떼어낸다.
ADDED_FIELDS = (
@@ -375,24 +377,23 @@ def test_표_아래_주석이_실린다(master: dict) -> None:
"""
by_id = {t["pum_table_id"]: t for it in master["work_items"] for t in it["tables"]}
쓰인것 = [t for t in by_id.values() if t.get("notes")]
assert len(쓰인것) == 306
assert len(쓰인것) == 308
발파 = " ".join(by_id["F0245"]["notes"])
assert "인건비의 20%를 가산" in 발파
유로폼 = " ".join(by_id["F0395"]["notes"])
assert "인력품의 3%" in 유로폼
# ⚠ **남의 글을 물어 오지 않는다**(2026-09-17 랩탑 서브 전수 확인으로 드러난 오염을 고침)
from B08_Quantity.B08_Quantity_Build_WorkItemMaster_Table import (
NOTE_STOP_RE,
is_bare_title,
trim_page_break,
)
= [n for t in 쓰인것 for n in t["notes"]]
assert all(not n.startswith("#") for n in )
# 원문이 절 제목을 목록 줄로 적는다 — 「- 3. 노상 및 노반재료」·「- 라. 체적환산계수(f)표」
assert not [n for n in if NOTE_STOP_RE.match(n)]
assert NOTE_STOP_RE.match("- 3. 노상 및 노반재료")
assert NOTE_STOP_RE.match("- 라. 체적환산계수(f)표")
assert not NOTE_STOP_RE.match("- ② 장비는 무한궤도 굴착기(0.7㎥)를 적용한다.")
assert not [n for n in if is_bare_title(n)]
assert is_bare_title("- 3. 노상 및 노반재료")
assert not is_bare_title("- ② 장비는 무한궤도 굴착기(0.7㎥)를 적용한다.")
# 쪽이 넘어가며 줄 **끝에** 눌어붙은 쪽번호·장 제목도 뗀다
assert trim_page_break("- ⑥ 적재운반 적하는 1인을 기준으로 한다.15제1장 적용기준") == (
"- ⑥ 적재운반 적하는 1인을 기준으로 한다."
@@ -402,6 +403,45 @@ def test_표_아래_주석이_실린다(master: dict) -> None:
assert not by_id2["F0009"].get("notes")
def test_잘려_나갔던_진짜_계수가_살아_있다(master: dict) -> None:
"""⚠ [주] 오염을 걷다가 **있어야 할 계수까지 잘렸던** 자리(2026-09-18 2바퀴 검사 34건).
까닭 둘 — 「> 【산출 예시】」 인용이 [주] 중간에 끼면 거기서 끊었고,
「- 4. 고철공제 : A=…」처럼 **번호를 달고 이어지는 진짜 규칙**을 절 제목으로 보고 잘랐다.
⇒ 잣대는 **지우는 것보다 남기는 것** — 알맹이(콜론·숫자) 없는 짧은 줄만 제목으로 본다.
"""
from B08_Quantity.B08_Quantity_Build_WorkItemMaster_Table import is_bare_title
by_id = {t["pum_table_id"]: t for it in master["work_items"] for t in it["tables"]}
for table_id, 낱말 in (
("F0252", "고철공제"), # 50kg/㎥ 공제
("F0088", "산림병해충"), # 인력 제거 시 보통인부 100% 가산
("F0086", "관목류"), # 보통인부 30% 할증
("F0191", "잔존목"), # 주행·잔존목 할증
):
assert 낱말 in " ".join(by_id[table_id]["notes"]), table_id
# 알맹이 없는 제목만 자른다 — 규칙을 담은 번호 줄은 남긴다
assert is_bare_title("- 3. 노상 및 노반재료")
assert is_bare_title("- 라. 체적환산계수(f)표")
assert not is_bare_title("- 4. 고철공제 : A=1㎥×0.008×7,850kg/㎥×80%")
assert not is_bare_title("- 2. 철근절단 : 철근콘크리트(T=30㎝ 미만)품을 적용한다.")
def test_실값인데_참고로_빠져_있던_표(master: dict) -> None:
"""⚠ `requirement` 로 올리지 않는다 — 상위 공종이 이미 세는 몫을 두 번 세게 된다.
`reference` 로 두면 금액이 0원으로 증발하고, `requirement` 면 이중 계상된다.
그래서 `sub_requirement`(값은 실값 · 자리는 상위 공종 종속)로 둔다(2026-09-18 안티그래비티 권고).
"""
by_id = {t["pum_table_id"]: t for it in master["work_items"] for t in it["tables"]}
실값 = [k for k, t in by_id.items() if t["pum_form"] == "sub_requirement"]
assert len(실값) == 12
assert {"F0369", "F0386", "F0393", "F0408", "F0410"} <= set(실값)
# 설계 치수·조건 분류표 일곱은 그대로 참고다
for table_id in ("F0396", "F0400", "F0406", "F0411", "F0412", "F0413", "F0446"):
assert by_id[table_id]["pum_form"] == "reference", table_id
def test_원문_대조_밑수_판정(master: dict) -> None:
"""원문 md ↔ 마스터 전수 대조(안티그래비티 02544795)에서 나온 밑수를 반영했는가.