Compare commits
16
Commits
sub_desktop_1
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8d0017c78e | ||
|
|
f052fc7306 | ||
|
|
a3b8c9f75a | ||
|
|
4b6d4f141c | ||
|
|
7a1f6a01ef | ||
|
|
a371ee0454 | ||
|
|
05cfa16701 | ||
|
|
7e6e991118 | ||
|
|
81b8cb926f | ||
|
|
a8d635f2cc | ||
|
|
b8a4e09778 | ||
|
|
5e49f7baa5 | ||
|
|
c9c3ab01cb | ||
|
|
d9b1d5ccb8 | ||
|
|
47f188b238 | ||
|
|
418baf198e |
@@ -26,6 +26,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import difflib
|
||||
import hashlib
|
||||
import json
|
||||
import re
|
||||
@@ -146,10 +147,16 @@ def renumber_from_body(
|
||||
return fixed
|
||||
|
||||
|
||||
#: ⚠ [주] 속 **인용** — 「‘13-3. 기초다짐 및 뒤채움’ 항을 적용한다」(13-4-1 [주]④ · 13-5-2 [주]⑤).
|
||||
#: 「번호. 이름」 꼴이라 제목으로 읽혀 표 셋(F0405·F0406·F0418)이 13-3 에 붙고 없는 갈래 3줄이 섰음
|
||||
#: (2026-09-17 서브 훑기 · 브레인). 닫는 따옴표 뒤에 「항·을·를」이 오면 인용.
|
||||
_CITATION_RE = re.compile(r"[’”]\s*(?:항|을|를)")
|
||||
|
||||
|
||||
def _is_section_title(section: str, by_number: dict[str, dict[str, Any]]) -> bool:
|
||||
"""진짜 절 제목인가 — 「번호. 이름」, 또는 마침표 없이 번호 뒤 글이 목차 절 이름과 같음."""
|
||||
"""진짜 절 제목인가 — 「번호. 이름」(인용 아님), 또는 마침표 없이 번호 뒤 글이 목차 절 이름과 같음."""
|
||||
if re.match(r"^\s*\d+(?:-\d+){0,3}\.\s", section):
|
||||
return True
|
||||
return not _CITATION_RE.search(section)
|
||||
number = section_number(section)
|
||||
node = by_number.get(number) if number else None
|
||||
if node is None:
|
||||
@@ -158,6 +165,35 @@ def _is_section_title(section: str, by_number: dict[str, dict[str, Any]]) -> boo
|
||||
return "".join(tail.split()) == "".join(str(node.get("name") or "").split())
|
||||
|
||||
|
||||
#: 목차 이름과 본문 제목이 **글자만** 다른 자리(「깍기」·「깎기」 · 「㎝」·「cm」)를 같게 봄 — 이름 닮음 잴 때만.
|
||||
_NAME_GLYPHS = (("㎝", "cm"), ("․", "·"), ("ㆍ", "·"), ("~", "~"), ("∼", "~"), ("깎", "깍"))
|
||||
#: 이름 닮음 아래턱 — 부록 사례(「4-1. 소나무재선충병방제」 ↔ 목차 4-1 수확베기)는 0.09 이하 ·
|
||||
#: 진짜 제목의 글자 차이(「비탈면 고르기」 ↔ 「비탈면 면고르기」 0.96 · 「면벽」 ↔ 「면벅」 0.5)는 0.34 이상(2026-09-17 전수).
|
||||
NAME_LIKENESS_FLOOR = 0.3
|
||||
|
||||
|
||||
def _plain(name: str) -> str:
|
||||
text = "".join(str(name or "").split())
|
||||
for glyph, same in _NAME_GLYPHS:
|
||||
text = text.replace(glyph, same)
|
||||
return text
|
||||
|
||||
|
||||
def title_names_node(section: str, node: dict[str, Any]) -> bool:
|
||||
"""「번호. 이름」 제목의 이름이 그 번호 목차 줄 이름을 가리키는가 — 번호만 겹친 **딴 문서 표**를 거름.
|
||||
|
||||
⚠ 부록 사례 표 일곱(F0455·F0456·F0472~F0476)이 본문 절 번호와 겹쳐 그 절에 붙어
|
||||
없는 공종 줄(4-1 수확베기 ← 소나무재선충병방제)이 섰음(2026-09-17 브레인 헛단위). 못 붙인 표로 목록에 남김.
|
||||
"""
|
||||
found = re.match(r"^\s*\d+(?:-\d+){0,3}\.\s+(.+)$", section)
|
||||
if found is None:
|
||||
return True # 마침표 없는 제목은 `_is_section_title` 이 이미 목차 이름과 같은지 봤음
|
||||
title, name = _plain(found.group(1)), _plain(node.get("name"))
|
||||
if title.startswith(name) or name.startswith(title):
|
||||
return True
|
||||
return difflib.SequenceMatcher(None, title, name).ratio() >= NAME_LIKENESS_FLOOR
|
||||
|
||||
|
||||
def section_number(section: str) -> str | None:
|
||||
"""`"9-3-1. 인력"` → `"9-3-1"`. 번호가 없으면 `None`."""
|
||||
m = re.match(r"^\s*(\d+(?:-\d+){0,3})[.\s]", section + " ")
|
||||
@@ -208,6 +244,8 @@ def build() -> tuple[
|
||||
number = section_number(section)
|
||||
chapter = number.split("-")[0] if number else None
|
||||
node = by_number.get(number) if number else None
|
||||
if node is not None and not title_names_node(section, node):
|
||||
node = None # 번호만 겹친 딴 문서 표(부록 사례) — 못 붙인 표 목록으로
|
||||
entry = table_entry(
|
||||
table, section, number, chapter, source_lines, node and node["name"], report
|
||||
)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
장 파일 경계가 쪽 기준이라(원문 머리 경고) 앞뒤 장 제목도 받고, 파일 첫머리 표는 앞 장 파일 꼬리까지 봄.
|
||||
⚠ 못 붙인 표는 조용히 버리지 않고 `orphan_tables` 목록.
|
||||
⚠ 총칙·묶는 마디 덜어내기 안 함(가름만) — 총칙 뿌리는 `axis_policy.json` 건설 축(데스크탑 서브 잣대) · 미확정 둘은 안 넣음.
|
||||
⚠ 갈래 키 안 붙임 — B09 표 읽기가 산림 표로만 검증됨(빈칸 = 못 가름).
|
||||
갈래 = 산림과 같은 B09 표 읽기로 가름(못 가른 공종은 빈칸) · 갈래 불변 열쇠는 장부(`CW-00001#01`).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -284,8 +284,11 @@ def build_const() -> tuple:
|
||||
node["tables"].append(entry)
|
||||
attached += 1
|
||||
apply_parent_modes(nodes, {}) # 합산형은 사람이 적은 것만 — 건설은 아직 없음(전부 choose_one)
|
||||
for node in nodes:
|
||||
node["variant_keys"] = [] # 못 가름 — B09 표 읽기가 산림 표로만 검증됨
|
||||
# 갈래 — 산림과 **같은 표 읽기 한 벌**(B09 `build_resource_axis`)로 가름 · 못 가른 공종은 빈칸.
|
||||
# 갈래 불변 열쇠(`CW-00001#01`)는 `finish` 가 장부로 줌(데스크탑 서브 · 2026-09-17 브레인 ④).
|
||||
from B08_Quantity.B08_Quantity_Build_WorkItemMaster_Variants import attach_variant_keys
|
||||
|
||||
attach_variant_keys(nodes, data["effective_date"])
|
||||
return finish(
|
||||
data,
|
||||
source=SOURCE,
|
||||
@@ -303,7 +306,7 @@ def build_const() -> tuple:
|
||||
"divisions": list(DIVISIONS),
|
||||
"toc_source": BOOK_NAME + " 머리 「목 차」",
|
||||
"section_from_body": True,
|
||||
"variant_keys_attached": False,
|
||||
"variant_keys_attached": True, # 산림과 같은 표 읽기 — 못 가른 공종은 빈칸
|
||||
"general_provision_roots": list(general_roots()),
|
||||
},
|
||||
)
|
||||
|
||||
@@ -123,7 +123,7 @@ FORM_JUDGMENTS: dict[str, tuple[str, str, str]] = {
|
||||
# ── 제13장 구조물 ───────────────────────────────────────────────
|
||||
"F0400": ("13-2-3", "reference", "큰돌 직경별 뒷길이 기준(㎝)"),
|
||||
"F0406": (
|
||||
"13-3",
|
||||
"13-4-1", # 2026-09-17 절 바로잡음 — [주]④ 인용을 13-3 제목으로 읽었던 것(표는 13-4-1 메쌓기 아래)
|
||||
"reference",
|
||||
"〈돌쌓기의 개수 및 중량의 표준〉 — [주] 인력 돌쌓기·돌붙임 기준",
|
||||
),
|
||||
|
||||
@@ -180,10 +180,42 @@ def variant_match(text: str) -> str:
|
||||
return "".join(_TILDES.get(ch, ch) for ch in squeezed)
|
||||
|
||||
|
||||
_SYLLABLE = re.compile(r"^[가-힣]$")
|
||||
_PIECE_GAP = re.compile(r"( [·ㆍ・›] )")
|
||||
|
||||
|
||||
def tidy_spacing(text: str) -> str:
|
||||
"""**자간 공백** 다듬기 — 「측 량」→「측량」 · 「평 규 준 틀」→「평규준틀」 · 「굴 삭 기 (무한궤도)」→「굴삭기 (무한궤도)」.
|
||||
|
||||
한 글자 낱말뿐인 조각이거나, 한 글자 낱말이 **셋 이상** 이어질 때만 붙임 —
|
||||
「그 외 자재」·「호박돌 및 야면석」 같은 진짜 띄어쓰기는 그대로(2026-09-17 서브 훑기 175줄 · 브레인).
|
||||
⚠ 보일 이름만 — 열쇠는 번호라(공종 `FW-…` · 갈래 `#01`) 다듬어도 안 흔들림.
|
||||
"""
|
||||
# 가운뎃점·경로 표시 사이가 한 조각 — 「메 붙 임 · 깬 돌 · 뒷길이 25㎝」 의 「깬 돌」
|
||||
pieces = _PIECE_GAP.split(" ".join(str(text or "").split()))
|
||||
return "".join(piece if n % 2 else _tidy_piece(piece) for n, piece in enumerate(pieces))
|
||||
|
||||
|
||||
def _tidy_piece(text: str) -> str:
|
||||
tokens = text.split(" ")
|
||||
if len(tokens) >= 2 and all(_SYLLABLE.match(t) for t in tokens):
|
||||
return "".join(tokens)
|
||||
out: list[str] = []
|
||||
run: list[str] = []
|
||||
for token in [*tokens, ""]:
|
||||
if token and _SYLLABLE.match(token):
|
||||
run.append(token)
|
||||
continue
|
||||
out.extend(["".join(run)] if len(run) >= 3 else run)
|
||||
run = []
|
||||
if token:
|
||||
out.append(token)
|
||||
return " ".join(out)
|
||||
|
||||
|
||||
def variant_display(text: str) -> str:
|
||||
"""다듬은 갈래 이름 — 자간 공백을 한 칸으로, 물결표를 하나로. 원문은 따로 남긴다."""
|
||||
spaced = " ".join(str(text or "").split())
|
||||
return "".join(_TILDES.get(ch, ch) for ch in spaced)
|
||||
"""다듬은 갈래 이름 — 자간 공백을 붙이고 물결표를 하나로. 원문은 따로 남긴다."""
|
||||
return "".join(_TILDES.get(ch, ch) for ch in tidy_spacing(text))
|
||||
|
||||
|
||||
def format_variant(serial: int) -> str:
|
||||
|
||||
@@ -19,6 +19,14 @@ from __future__ import annotations
|
||||
|
||||
#: 공종코드 → (짧은 딱지, 사유 한 줄). 접두사로 맞춘다(갈래가 붙어도 걸리게).
|
||||
KNOWN_GAPS: dict[str, tuple[str, str]] = {
|
||||
# ⚠ 2026-09-17 — 찰붙임 장비 표(F0418)가 [주] 인용을 제목으로 읽혀 13-3 헛단위에 붙어 있다가
|
||||
# 제자리(13-5-2)를 찾으니 **메붙임(F0417)·찰붙임(F0418) 두 표가 같은 갈래 이름(35·55·75cm 이하)으로
|
||||
# 한 단가에 더해짐**(약 두 배). 지금 이 코드를 쓰는 곳은 0 — 갈래를 메/찰로 가르기 전 쓰지 말 것.
|
||||
"FP-13-05-02": (
|
||||
"메·찰 합쳐짐",
|
||||
"⚠ 이 단가는 **메붙임·찰붙임 두 표가 더해진 값**입니다 — 둘 중 하나만 써야 하는 갈래라 "
|
||||
"지금 값은 쓰면 안 됩니다(품셈 13-5-2 「1. 메붙임」·「2. 찰붙임」 · 갈래 가르기 대기).",
|
||||
),
|
||||
# ⚠ 규준틀 둘은 **B08 인계가 이미 「재료량은 [주]④ 설계수량에 따른다라 미확보」**를 싣는다.
|
||||
# 그러니 그 말을 되풀이하지 않고 **B09 쪽에서만 아는 것**만 보탠다 —
|
||||
# ㉠ 지금 선 값이 **인력 품만**이라는 것 ㉡ 손율은 원문에 이미 있다는 것.
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import re
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
from functools import lru_cache
|
||||
@@ -38,8 +39,11 @@ _RATE_EDITABLE = (
|
||||
"manager_thresholds.default_estimated_amount_krw",
|
||||
"manager_thresholds.civil_main_work_estimated_amount_krw",
|
||||
)
|
||||
#: ⚠ **지금 상태를 먼저** — 덮개를 읽는 곳이 Z01 밖에 0(2026-09-17 서브 훑기 · 브레인 「없으면 없다고」).
|
||||
#: 뒤 문장은 프로젝트 복사(요구 14)가 붙으면 참이 되는 약속이라 지우지 않고 「그 길이 붙으면」으로 둠.
|
||||
_SCOPE_NOTICE = (
|
||||
"여기서 고친 값은 **새로 만드는 프로젝트부터** 쓰임 — 이미 만든 프로젝트 금액은 안 바뀜"
|
||||
"⚠ **아직 어디에도 안 쓰임** — 고친 값은 마스터에만 쌓임 · 프로젝트로 옮기는 길(프로젝트 복사)이 아직 없음."
|
||||
" 그 길이 붙으면: 여기서 고친 값은 **새로 만드는 프로젝트부터** 쓰임 — 이미 만든 프로젝트 금액은 안 바뀜"
|
||||
"(프로젝트는 만들 때 뜬 사본을 봄)"
|
||||
)
|
||||
_RATE_NOTICE = "법이 정한 값 — 고치면 원본 갱신 때 구간 이름이 바뀌어 고친 값이 주인을 잃기 쉬움(주인 없음으로 남음)"
|
||||
@@ -326,15 +330,21 @@ class SortError(ValueError):
|
||||
"""모르는 열로 세우라 함 — 조용히 원본 차례로 돌아가지 않음(브레인 ④)."""
|
||||
|
||||
|
||||
#: 품셈 번호 꼴(「9-3-2」·「12-17」) — 글자로 세우면 「10-1」이 「2-1」 앞에 섬(서브 훑기 · 브레인).
|
||||
_NUMBER_PATH = re.compile(r"^\d+(?:-\d+)+$")
|
||||
|
||||
|
||||
def _order_key(value: Any) -> tuple:
|
||||
"""섞인 칸도 세움 — 수 먼저, 그 뒤 글자."""
|
||||
"""섞인 칸도 세움 — 수 먼저, 품셈 번호 꼴은 **마디마다 수로**, 그 뒤 글자."""
|
||||
if isinstance(value, bool):
|
||||
return (1, str(value))
|
||||
return (2, str(value))
|
||||
if isinstance(value, (int, float)):
|
||||
return (0, float(value))
|
||||
if isinstance(value, (dict, list)):
|
||||
return (1, json.dumps(value, ensure_ascii=False, default=str))
|
||||
return (1, str(value))
|
||||
return (2, json.dumps(value, ensure_ascii=False, default=str))
|
||||
if isinstance(value, str) and _NUMBER_PATH.match(value):
|
||||
return (1, tuple(int(part) for part in value.split("-")))
|
||||
return (2, str(value))
|
||||
|
||||
|
||||
def _sorted(rows: list[dict[str, Any]], column: str, desc: bool) -> list[dict[str, Any]]:
|
||||
@@ -346,7 +356,10 @@ def _sorted(rows: list[dict[str, Any]], column: str, desc: bool) -> list[dict[st
|
||||
|
||||
|
||||
#: 돌쌓기 표준경사는 B06 횡단설계가 같은 값으로 기울기를 그림 — 아홉 중 **그림에도 닿는** 하나(브레인).
|
||||
_SLOPE_NOTICE = "고치면 횡단 도면 모양도 함께 바뀜 — B06 횡단설계가 같은 값으로 벽 기울기를 그림"
|
||||
_SLOPE_NOTICE = (
|
||||
"⚠ **B06 횡단설계가 아직 여기서 고친 값을 안 읽음**(원본 값으로 벽 기울기를 그림) — 지금은 고쳐도 횡단 도면이 안 바뀜."
|
||||
" 읽게 되면: 고치면 횡단 도면 모양도 함께 바뀜"
|
||||
)
|
||||
#: 같은 「1:0.3」 이 두 자리에 있음(코덱스 검증 2) — 값은 같으나 **축과 근거가 다름**.
|
||||
#: masonry_slope = 품셈 13-4-4 [주]⑪ 표준경사(직고 · 메/찰 · 성토/절토 축 · 원문표)
|
||||
#: masonry_class.face_slope = 교본 7-3 돌흙막이(구조물 **형식**별 기본값 · 판정이 안 되는 자리의 종전값)
|
||||
@@ -511,6 +524,18 @@ def public(row: dict[str, Any]) -> dict[str, Any]:
|
||||
return {k: v for k, v in row.items() if k not in ("@source", "@axis")}
|
||||
|
||||
|
||||
#: 찾기만 같게 보는 글자 — 원문이 물결표·가운뎃점을 여러 벌로 씀(∼ 26 · ~ 8 · ․ · ㆍ) · 자간 공백(「굴 삭 기」).
|
||||
#: ⚠ **찾기에만** 씀 — 열쇠·칸 값은 원문 그대로(손질하면 갈래 열쇠가 갈림 · 브레인 2026-09-17).
|
||||
_SEARCH_SAME = str.maketrans(
|
||||
{"∼": "~", "~": "~", "〜": "~", "․": "·", "ㆍ": "·", "・": "·", "‧": "·"}
|
||||
)
|
||||
|
||||
|
||||
def fold(text: str) -> str:
|
||||
"""찾기 비교용 — 소문자 · 물결표·가운뎃점 한 벌 · 공백 없앰."""
|
||||
return "".join(str(text or "").lower().translate(_SEARCH_SAME).split())
|
||||
|
||||
|
||||
def table(
|
||||
kind: str,
|
||||
page: int = 1,
|
||||
@@ -522,12 +547,12 @@ def table(
|
||||
) -> dict[str, Any]:
|
||||
all_rows = rows(kind)
|
||||
columns = _columns(kind, all_rows)
|
||||
needle = q.strip().lower()
|
||||
needle = fold(q)
|
||||
hits = (
|
||||
[
|
||||
r
|
||||
for r in all_rows
|
||||
if needle in json.dumps(public(r), ensure_ascii=False, default=str).lower()
|
||||
if needle in fold(json.dumps(public(r), ensure_ascii=False, default=str))
|
||||
]
|
||||
if needle
|
||||
else all_rows
|
||||
|
||||
@@ -71,6 +71,13 @@ def _path(item: dict[str, Any] | None, by: dict[str, dict]) -> str:
|
||||
return PATH_JOIN.join(reversed(names))
|
||||
|
||||
|
||||
def _shown_path(item: dict[str, Any], by: dict[str, dict]) -> str:
|
||||
"""목록에 보일 경로 — 조각마다 자간 공백 다듬기(「토목부문 › 측 량」→「측량」). 열쇠와 무관."""
|
||||
from B08_Quantity.B08_Quantity_Build_WorkItemMaster_Keys import tidy_spacing
|
||||
|
||||
return PATH_JOIN.join(tidy_spacing(part) for part in _path(item, by).split(PATH_JOIN))
|
||||
|
||||
|
||||
def base_rows(kind: str) -> list[dict[str, Any]]:
|
||||
found = doc(kind)
|
||||
if found is None:
|
||||
@@ -101,7 +108,7 @@ def base_rows(kind: str) -> list[dict[str, Any]]:
|
||||
"@source": name,
|
||||
"work_item_code": item["work_item_code"], # 목차 코드 — 열쇠 아님, 칸으로만
|
||||
"number": item["number"],
|
||||
"name": _path(item, by),
|
||||
"name": _shown_path(item, by), # 자간 공백만 다듬음 — 원문 이름은 마스터에
|
||||
"variant": variant["name"] if variant else None, # 원문 그대로
|
||||
"variant_clean": variant["name_clean"] if variant else None, # 다듬은 것
|
||||
"pum_tables": [t["pum_table_id"] for t in item["tables"]],
|
||||
@@ -156,7 +163,7 @@ def rules(kind: str) -> list[dict[str, Any]]:
|
||||
rule = {
|
||||
"@id": _key(item),
|
||||
"work_item_code": item["work_item_code"],
|
||||
"name": _path(item, by),
|
||||
"name": _shown_path(item, by),
|
||||
"mode": mode,
|
||||
"children": [_key(c) for c in children.get(item["work_item_code"], [])],
|
||||
}
|
||||
|
||||
@@ -1504,8 +1504,8 @@
|
||||
"key": "step_weight",
|
||||
"name_ko": "단계 무게",
|
||||
"unit": "",
|
||||
"visible": true,
|
||||
"note": "`sum_steps` 일 때만 — 건설은 아직 합산형 선언 없음."
|
||||
"visible": false,
|
||||
"note": "`sum_steps` 일 때만 — 건설은 아직 합산형 선언이 없어 늘 빈칸이라 감춤(선언이 서면 보이게 할 것)."
|
||||
},
|
||||
{
|
||||
"key": "link",
|
||||
@@ -1976,8 +1976,8 @@
|
||||
"merged_tables": 17,
|
||||
"merged_columns": 178,
|
||||
"files": 41,
|
||||
"tables": 101,
|
||||
"columns": 540,
|
||||
"tables": 102,
|
||||
"columns": 543,
|
||||
"value_groups": 203,
|
||||
"unknown": 0,
|
||||
"value_groups_by_kind": {
|
||||
@@ -2182,7 +2182,7 @@
|
||||
"name_ko": "공종에 못 붙인 표",
|
||||
"summary": "목차 어디에도 못 붙인 품셈 표.",
|
||||
"shape": "list",
|
||||
"rows": 15,
|
||||
"rows": 22,
|
||||
"columns": [
|
||||
{
|
||||
"key": "pum_table_id",
|
||||
@@ -7532,6 +7532,34 @@
|
||||
"visible": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "variants",
|
||||
"name_ko": "갈래 열쇠 장부",
|
||||
"summary": "공종 열쇠 아래 갈래마다 번호를 매긴 것. 사라진 갈래의 번호는 다시 쓰지 않는다.",
|
||||
"shape": "map",
|
||||
"rows": 111,
|
||||
"columns": [
|
||||
{
|
||||
"key": "@key",
|
||||
"name_ko": "갈래를 지닌 건설 공종",
|
||||
"unit": "",
|
||||
"visible": true,
|
||||
"is_row_key": true
|
||||
},
|
||||
{
|
||||
"key": "next_serial",
|
||||
"name_ko": "다음 갈래 번호",
|
||||
"unit": "",
|
||||
"visible": true
|
||||
},
|
||||
{
|
||||
"key": "slots",
|
||||
"name_ko": "갈래 자리→번호",
|
||||
"unit": "",
|
||||
"visible": true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"value_groups": [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"schema_version": "1.0",
|
||||
"dataset_id": "data_work_item_master_manifest",
|
||||
"generated_at": "2026-09-17T17:44:39+09:00",
|
||||
"generated_at": "2026-09-17T18:52:20+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": "6532b0095457b00882b26cf006903d3ee8d04082b2bc55ccd28c56043c4003f5",
|
||||
"size_bytes": 1011687
|
||||
"sha256": "546624601feaf9e9c7d757d6013b7c9bc3bc973817fb42ded70f3b2306b6778d",
|
||||
"size_bytes": 924964
|
||||
},
|
||||
{
|
||||
"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-17T17:44:40+09:00",
|
||||
"generated_at": "2026-09-17T18:52:53+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": "25714237447cacbdbbc2f43af7fc4a4229d2a9a4a5a447298ebd81946d026e60",
|
||||
"size_bytes": 3780649
|
||||
"sha256": "e8e3bc48c2563246b7a6fd4b5bc5129fe00c5f112fa190d78119912beddf40ff",
|
||||
"size_bytes": 3839500
|
||||
},
|
||||
{
|
||||
"file": "const_form_undetermined_2026-01-01.json",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10951,5 +10951,969 @@
|
||||
"first_toc_number": "4-3-3",
|
||||
"first_name": "배관누수 검사"
|
||||
}
|
||||
},
|
||||
"variants": {
|
||||
"CW-00063": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"5m이하": "01",
|
||||
"10m이하": "02"
|
||||
}
|
||||
},
|
||||
"CW-00064": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"평규준틀": "01",
|
||||
"귀규준틀": "02"
|
||||
}
|
||||
},
|
||||
"CW-00075": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"10m이하": "01",
|
||||
"10m초과∼20m이하": "02"
|
||||
}
|
||||
},
|
||||
"CW-00077": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"높이2m": "01",
|
||||
"높이4m": "02"
|
||||
}
|
||||
},
|
||||
"CW-00080": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"벽용": "01",
|
||||
"슬래브발코니,난간용": "02"
|
||||
}
|
||||
},
|
||||
"CW-00087": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"보행자출입구": "01",
|
||||
"차량출입구": "02"
|
||||
}
|
||||
},
|
||||
"CW-00116": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"설치": "01",
|
||||
"해체": "02"
|
||||
}
|
||||
},
|
||||
"CW-00117": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"H=3.0m이하": "01",
|
||||
"4.0m이하": "02"
|
||||
}
|
||||
},
|
||||
"CW-00118": {
|
||||
"next_serial": 5,
|
||||
"slots": {
|
||||
"H=3.0m이하": "01",
|
||||
"H=4.0m이하": "02",
|
||||
"H=5.0m이하": "03",
|
||||
"H=6.0m이하": "04"
|
||||
}
|
||||
},
|
||||
"CW-00127": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"설치": "01",
|
||||
"해체": "02"
|
||||
}
|
||||
},
|
||||
"CW-00129": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"지상또는건물설치": "01",
|
||||
"타워크레인설치": "02"
|
||||
}
|
||||
},
|
||||
"CW-00135": {
|
||||
"next_serial": 4,
|
||||
"slots": {
|
||||
"300∼600㎜": "01",
|
||||
"700∼900㎜": "02",
|
||||
"1,000∼1,200㎜": "03"
|
||||
}
|
||||
},
|
||||
"CW-00151": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"30㎝미만": "01",
|
||||
"30㎝이상": "02"
|
||||
}
|
||||
},
|
||||
"CW-00154": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"우물통발파": "01",
|
||||
"우물통발파이외": "02"
|
||||
}
|
||||
},
|
||||
"CW-00158": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"15cm": "01",
|
||||
"30cm": "02"
|
||||
}
|
||||
},
|
||||
"CW-00182": {
|
||||
"next_serial": 4,
|
||||
"slots": {
|
||||
"5m미만": "01",
|
||||
"5m이상∼8m미만": "02",
|
||||
"8m이상": "03"
|
||||
}
|
||||
},
|
||||
"CW-00210": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"쌓기": "01",
|
||||
"놓기": "02"
|
||||
}
|
||||
},
|
||||
"CW-00231": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"토사": "01",
|
||||
"자갈/호박돌": "02"
|
||||
}
|
||||
},
|
||||
"CW-00233": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"ℓ=20m이하": "01",
|
||||
"ℓ=20m∼35m": "02"
|
||||
}
|
||||
},
|
||||
"CW-00236": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"외부반입/반출": "01",
|
||||
"작업구간이동": "02"
|
||||
}
|
||||
},
|
||||
"CW-00239": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"요동식": "01",
|
||||
"전회전식": "02"
|
||||
}
|
||||
},
|
||||
"CW-00247": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"무근콘크리트": "01",
|
||||
"철근콘크리트": "02"
|
||||
}
|
||||
},
|
||||
"CW-00271": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"ø12.7㎜": "01",
|
||||
"ø15.2㎜": "02"
|
||||
}
|
||||
},
|
||||
"CW-00286": {
|
||||
"next_serial": 5,
|
||||
"slots": {
|
||||
"D900": "01",
|
||||
"D1,200": "02",
|
||||
"D1,500": "03",
|
||||
"D1,800": "04"
|
||||
}
|
||||
},
|
||||
"CW-00341": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"2": "01",
|
||||
"1": "02"
|
||||
}
|
||||
},
|
||||
"CW-00342": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"2": "01"
|
||||
}
|
||||
},
|
||||
"CW-00343": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"2": "01"
|
||||
}
|
||||
},
|
||||
"CW-00371": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"㎾": "01"
|
||||
}
|
||||
},
|
||||
"CW-00450": {
|
||||
"next_serial": 6,
|
||||
"slots": {
|
||||
"40㎝": "01",
|
||||
"45㎝": "02",
|
||||
"50㎝": "03",
|
||||
"60㎝": "04",
|
||||
"70㎝": "05"
|
||||
}
|
||||
},
|
||||
"CW-00454": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"식생매트설치": "01",
|
||||
"복토": "02"
|
||||
}
|
||||
},
|
||||
"CW-00472": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"공동구": "01",
|
||||
"바닥/인버트": "02"
|
||||
}
|
||||
},
|
||||
"CW-00487": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"일단": "01",
|
||||
"양단": "02"
|
||||
}
|
||||
},
|
||||
"CW-00489": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"50㎏": "01",
|
||||
"60㎏": "02"
|
||||
}
|
||||
},
|
||||
"CW-00491": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"레일인장법": "01",
|
||||
"자연대기온도법": "02"
|
||||
}
|
||||
},
|
||||
"CW-00494": {
|
||||
"next_serial": 4,
|
||||
"slots": {
|
||||
"37㎏": "01",
|
||||
"50㎏": "02",
|
||||
"60㎏": "03"
|
||||
}
|
||||
},
|
||||
"CW-00497": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"조임": "01",
|
||||
"해체": "02"
|
||||
}
|
||||
},
|
||||
"CW-00527": {
|
||||
"next_serial": 13,
|
||||
"slots": {
|
||||
"800": "01",
|
||||
"900": "02",
|
||||
"1,000": "03",
|
||||
"1,100": "04",
|
||||
"1,200": "05",
|
||||
"1,350": "06",
|
||||
"1,500": "07",
|
||||
"1.650": "08",
|
||||
"1,800": "09",
|
||||
"2,000": "10",
|
||||
"2,200": "11",
|
||||
"2,400": "12"
|
||||
}
|
||||
},
|
||||
"CW-00537": {
|
||||
"next_serial": 7,
|
||||
"slots": {
|
||||
"75": "01",
|
||||
"100": "02",
|
||||
"150": "03",
|
||||
"200": "04",
|
||||
"250": "05",
|
||||
"300": "06"
|
||||
}
|
||||
},
|
||||
"CW-00547": {
|
||||
"next_serial": 8,
|
||||
"slots": {
|
||||
"50": "01",
|
||||
"75": "02",
|
||||
"100": "03",
|
||||
"150": "04",
|
||||
"200": "05",
|
||||
"250": "06",
|
||||
"300": "07"
|
||||
}
|
||||
},
|
||||
"CW-00548": {
|
||||
"next_serial": 5,
|
||||
"slots": {
|
||||
"800∼1,100": "01",
|
||||
"1,200∼1,800": "02",
|
||||
"2,000∼2,200": "03",
|
||||
"2,400∼3,000": "04"
|
||||
}
|
||||
},
|
||||
"CW-00553": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"80": "01",
|
||||
"100": "02"
|
||||
}
|
||||
},
|
||||
"CW-00564": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"0.1㎥이상": "01"
|
||||
}
|
||||
},
|
||||
"CW-00566": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"0.1㎥이상": "01",
|
||||
"0.03㎥이하": "02"
|
||||
}
|
||||
},
|
||||
"CW-00567": {
|
||||
"next_serial": 6,
|
||||
"slots": {
|
||||
"기초고르기": "01",
|
||||
"피복석고르기": "02",
|
||||
"피복석거친고르기": "03",
|
||||
"내부사석고르기": "04",
|
||||
"필터사석고르기": "05"
|
||||
}
|
||||
},
|
||||
"CW-00586": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"BX": "01",
|
||||
"NX": "02"
|
||||
}
|
||||
},
|
||||
"CW-00700": {
|
||||
"next_serial": 7,
|
||||
"slots": {
|
||||
"ø16이하": "01",
|
||||
"ø20이하": "02",
|
||||
"ø24이하": "03",
|
||||
"ø28이하": "04",
|
||||
"ø32이하": "05",
|
||||
"ø40이하": "06"
|
||||
}
|
||||
},
|
||||
"CW-00703": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"판두께1.6㎜": "01",
|
||||
"판두께2.3㎜": "02"
|
||||
}
|
||||
},
|
||||
"CW-00708": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"자동용접": "01",
|
||||
"수동용접": "02"
|
||||
}
|
||||
},
|
||||
"CW-00715": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"1.0B": "01",
|
||||
"1.5B": "02"
|
||||
}
|
||||
},
|
||||
"CW-00717": {
|
||||
"next_serial": 5,
|
||||
"slots": {
|
||||
"벽돌": "01",
|
||||
"치장벽돌": "02",
|
||||
"블록": "03",
|
||||
"ALC블록": "04"
|
||||
}
|
||||
},
|
||||
"CW-00735": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"주택": "01",
|
||||
"일반": "02"
|
||||
}
|
||||
},
|
||||
"CW-00782": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"바닥": "01",
|
||||
"수직부": "02"
|
||||
}
|
||||
},
|
||||
"CW-00784": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"바닥": "01",
|
||||
"수직부": "02"
|
||||
}
|
||||
},
|
||||
"CW-00801": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"1층(회)": "01",
|
||||
"2층(회)": "02"
|
||||
}
|
||||
},
|
||||
"CW-00802": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"바닥": "01",
|
||||
"수직부": "02"
|
||||
}
|
||||
},
|
||||
"CW-00831": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"450×450": "01",
|
||||
"600×600": "02"
|
||||
}
|
||||
},
|
||||
"CW-00841": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"일반철재": "01",
|
||||
"경량철재": "02"
|
||||
}
|
||||
},
|
||||
"CW-00844": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"모래체가름포함": "01",
|
||||
"모래체가름제외": "02"
|
||||
}
|
||||
},
|
||||
"CW-00850": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"3.6m이하": "01",
|
||||
"3.6m초과∼7.2m이하": "02"
|
||||
}
|
||||
},
|
||||
"CW-00861": {
|
||||
"next_serial": 5,
|
||||
"slots": {
|
||||
"1.0㎡이하": "01",
|
||||
"1.0∼3.0㎡이하": "02",
|
||||
"3.0∼6.0㎡이하": "03",
|
||||
"6.0∼8.0㎡이하": "04"
|
||||
}
|
||||
},
|
||||
"CW-00862": {
|
||||
"next_serial": 6,
|
||||
"slots": {
|
||||
"1.0㎡이하": "01",
|
||||
"1.0∼3.0㎡이하": "02",
|
||||
"3.0∼6.0㎡이하": "03",
|
||||
"6.0∼9.0㎡이하": "04",
|
||||
"9.0∼12.0㎡이하": "05"
|
||||
}
|
||||
},
|
||||
"CW-00865": {
|
||||
"next_serial": 6,
|
||||
"slots": {
|
||||
"5㎡미만": "01",
|
||||
"5∼10㎡미만": "02",
|
||||
"10∼15㎡미만": "03",
|
||||
"15∼20㎡미만": "04",
|
||||
"20∼25㎡미만": "05"
|
||||
}
|
||||
},
|
||||
"CW-00871": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"일반도어록": "01",
|
||||
"디지털도어록": "02"
|
||||
}
|
||||
},
|
||||
"CW-00873": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"12mm이하": "01"
|
||||
}
|
||||
},
|
||||
"CW-00922": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"ø16mm": "01",
|
||||
"ø20mm": "02"
|
||||
}
|
||||
},
|
||||
"CW-00946": {
|
||||
"next_serial": 10,
|
||||
"slots": {
|
||||
"ø50이하": "01",
|
||||
"65": "02",
|
||||
"80": "03",
|
||||
"100": "04",
|
||||
"125": "05",
|
||||
"150": "06",
|
||||
"200": "07",
|
||||
"250": "08",
|
||||
"300": "09"
|
||||
}
|
||||
},
|
||||
"CW-00950": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"세대내": "01",
|
||||
"공용부위": "02"
|
||||
}
|
||||
},
|
||||
"CW-00955": {
|
||||
"next_serial": 13,
|
||||
"slots": {
|
||||
"0.75㎾이하": "01",
|
||||
"1.5㎾이하": "02",
|
||||
"2.2㎾이하": "03",
|
||||
"3.7㎾이하": "04",
|
||||
"5.5㎾이하": "05",
|
||||
"7.5㎾이하": "06",
|
||||
"11㎾이하": "07",
|
||||
"15㎾이하": "08",
|
||||
"22㎾이하": "09",
|
||||
"37㎾이하": "10",
|
||||
"55㎾이하": "11",
|
||||
"75㎾이하": "12"
|
||||
}
|
||||
},
|
||||
"CW-00956": {
|
||||
"next_serial": 7,
|
||||
"slots": {
|
||||
"0.75㎾이하": "01",
|
||||
"1.5㎾이하": "02",
|
||||
"2.2㎾이하": "03",
|
||||
"3.7㎾이하": "04",
|
||||
"5.5㎾이하": "05",
|
||||
"7.5㎾이하": "06"
|
||||
}
|
||||
},
|
||||
"CW-00957": {
|
||||
"next_serial": 13,
|
||||
"slots": {
|
||||
"0.75㎾이하": "01",
|
||||
"1.5㎾이하": "02",
|
||||
"2.2㎾이하": "03",
|
||||
"3.7㎾이하": "04",
|
||||
"5.5㎾이하": "05",
|
||||
"7.5㎾이하": "06",
|
||||
"11㎾이하": "07",
|
||||
"15㎾이하": "08",
|
||||
"22㎾이하": "09",
|
||||
"37㎾이하": "10",
|
||||
"55㎾이하": "11",
|
||||
"75㎾이하": "12"
|
||||
}
|
||||
},
|
||||
"CW-00963": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"700㎜이하": "01",
|
||||
"900㎜이하": "02"
|
||||
}
|
||||
},
|
||||
"CW-00969": {
|
||||
"next_serial": 7,
|
||||
"slots": {
|
||||
"ø15mm": "01",
|
||||
"ø20mm": "02",
|
||||
"ø25mm": "03",
|
||||
"ø32mm": "04",
|
||||
"ø40mm": "05",
|
||||
"ø50mm": "06"
|
||||
}
|
||||
},
|
||||
"CW-00972": {
|
||||
"next_serial": 11,
|
||||
"slots": {
|
||||
"ø15∼25": "01",
|
||||
"32∼50": "02",
|
||||
"65": "03",
|
||||
"80": "04",
|
||||
"100": "05",
|
||||
"125": "06",
|
||||
"150": "07",
|
||||
"200": "08",
|
||||
"250": "09",
|
||||
"300": "10"
|
||||
}
|
||||
},
|
||||
"CW-00977": {
|
||||
"next_serial": 4,
|
||||
"slots": {
|
||||
"ø13∼15": "01",
|
||||
"20∼32": "02",
|
||||
"40∼50": "03"
|
||||
}
|
||||
},
|
||||
"CW-00978": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"ø13∼15mm": "01",
|
||||
"ø20∼32mm": "02"
|
||||
}
|
||||
},
|
||||
"CW-00981": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"ø13∼15mm": "01",
|
||||
"ø20∼32mm": "02"
|
||||
}
|
||||
},
|
||||
"CW-00982": {
|
||||
"next_serial": 5,
|
||||
"slots": {
|
||||
"ø50mm": "01",
|
||||
"ø65∼80mm": "02",
|
||||
"ø100∼125mm": "03",
|
||||
"ø150mm": "04"
|
||||
}
|
||||
},
|
||||
"CW-00986": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"거치형": "01",
|
||||
"벽걸이형": "02"
|
||||
}
|
||||
},
|
||||
"CW-01000": {
|
||||
"next_serial": 4,
|
||||
"slots": {
|
||||
"0.5㎡미만": "01",
|
||||
"1.0㎡미만": "02",
|
||||
"1.5㎡미만": "03"
|
||||
}
|
||||
},
|
||||
"CW-01002": {
|
||||
"next_serial": 4,
|
||||
"slots": {
|
||||
"ø50㎜": "01",
|
||||
"ø75㎜": "02",
|
||||
"ø100㎜": "03"
|
||||
}
|
||||
},
|
||||
"CW-01011": {
|
||||
"next_serial": 17,
|
||||
"slots": {
|
||||
"유효길이610㎜": "01",
|
||||
"762〃": "02",
|
||||
"914〃": "03",
|
||||
"1,067〃": "04",
|
||||
"1,219〃": "05",
|
||||
"1,372〃": "06",
|
||||
"1,524〃": "07",
|
||||
"1,676〃": "08",
|
||||
"1,829〃": "09",
|
||||
"1,981〃": "10",
|
||||
"2,134〃": "11",
|
||||
"2,286〃": "12",
|
||||
"2,438〃": "13",
|
||||
"2,591〃": "14",
|
||||
"2,875〃": "15",
|
||||
"3,048〃": "16"
|
||||
}
|
||||
},
|
||||
"CW-01014": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"실내기": "01",
|
||||
"실외기": "02"
|
||||
}
|
||||
},
|
||||
"CW-01018": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"15,000Kcal/hr": "01"
|
||||
}
|
||||
},
|
||||
"CW-01020": {
|
||||
"next_serial": 6,
|
||||
"slots": {
|
||||
"70×1,000kcal/hr이하": "01",
|
||||
"120〃": "02",
|
||||
"150〃": "03",
|
||||
"240〃": "04",
|
||||
"360〃": "05"
|
||||
}
|
||||
},
|
||||
"CW-01022": {
|
||||
"next_serial": 10,
|
||||
"slots": {
|
||||
"주철재바닥설치20절이하": "01",
|
||||
"21절이상": "02",
|
||||
"벽걸이3절": "03",
|
||||
"천장달기3절": "04",
|
||||
"1m길트": "05",
|
||||
"콘백터길이1m미만": "06",
|
||||
"베이스보드1단형길이2m미만": "07",
|
||||
"2m이상": "08",
|
||||
"강판제및알루미늄제방열기1m미만": "09"
|
||||
}
|
||||
},
|
||||
"CW-01027": {
|
||||
"next_serial": 7,
|
||||
"slots": {
|
||||
"2구": "01",
|
||||
"3구": "02",
|
||||
"4구": "03",
|
||||
"5구": "04",
|
||||
"6구": "05",
|
||||
"7구": "06"
|
||||
}
|
||||
},
|
||||
"CW-01029": {
|
||||
"next_serial": 8,
|
||||
"slots": {
|
||||
"100": "01",
|
||||
"200": "02",
|
||||
"300": "03",
|
||||
"400": "04",
|
||||
"500": "05",
|
||||
"750": "06",
|
||||
"1,000": "07"
|
||||
}
|
||||
},
|
||||
"CW-01032": {
|
||||
"next_serial": 5,
|
||||
"slots": {
|
||||
"건타입오일버너0.75㎾": "01",
|
||||
"1.5": "02",
|
||||
"(전자동방식)2.2": "03",
|
||||
"3.7": "04"
|
||||
}
|
||||
},
|
||||
"CW-01035": {
|
||||
"next_serial": 11,
|
||||
"slots": {
|
||||
"ø50": "01",
|
||||
"65": "02",
|
||||
"80": "03",
|
||||
"100": "04",
|
||||
"125": "05",
|
||||
"150": "06",
|
||||
"200": "07",
|
||||
"250": "08",
|
||||
"300": "09",
|
||||
"350": "10"
|
||||
}
|
||||
},
|
||||
"CW-01036": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"일반철재": "01",
|
||||
"경량철재": "02"
|
||||
}
|
||||
},
|
||||
"CW-01045": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"지상노출관": "01",
|
||||
"지하매설관": "02"
|
||||
}
|
||||
},
|
||||
"CW-01053": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"소화용구격납상자": "01"
|
||||
}
|
||||
},
|
||||
"CW-01058": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"관말시험밸브": "01"
|
||||
}
|
||||
},
|
||||
"CW-01067": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"압력공기탱크": "01"
|
||||
}
|
||||
},
|
||||
"CW-01072": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"스프링클러헤드": "01"
|
||||
}
|
||||
},
|
||||
"CW-01083": {
|
||||
"next_serial": 6,
|
||||
"slots": {
|
||||
"ø20": "01",
|
||||
"25": "02",
|
||||
"32": "03",
|
||||
"40": "04",
|
||||
"50": "05"
|
||||
}
|
||||
},
|
||||
"CW-01085": {
|
||||
"next_serial": 20,
|
||||
"slots": {
|
||||
"ø25": "01",
|
||||
"32": "02",
|
||||
"40": "03",
|
||||
"50": "04",
|
||||
"63": "05",
|
||||
"75": "06",
|
||||
"90": "07",
|
||||
"110": "08",
|
||||
"125": "09",
|
||||
"140": "10",
|
||||
"160": "11",
|
||||
"180": "12",
|
||||
"200": "13",
|
||||
"225": "14",
|
||||
"250": "15",
|
||||
"280": "16",
|
||||
"315": "17",
|
||||
"355": "18",
|
||||
"400": "19"
|
||||
}
|
||||
},
|
||||
"CW-01087": {
|
||||
"next_serial": 13,
|
||||
"slots": {
|
||||
"ø20∼25": "01",
|
||||
"40∼50": "02",
|
||||
"65": "03",
|
||||
"80": "04",
|
||||
"100": "05",
|
||||
"125": "06",
|
||||
"150": "07",
|
||||
"200": "08",
|
||||
"250": "09",
|
||||
"300": "10",
|
||||
"350": "11",
|
||||
"400": "12"
|
||||
}
|
||||
},
|
||||
"CW-01093": {
|
||||
"next_serial": 7,
|
||||
"slots": {
|
||||
"분전반": "01",
|
||||
"조작반": "02",
|
||||
"계기반(자립개방)": "03",
|
||||
"계기반(자립밀폐)": "04",
|
||||
"계기반(현장)": "05",
|
||||
"〃(발신기수납상)": "06"
|
||||
}
|
||||
},
|
||||
"CW-01100": {
|
||||
"next_serial": 4,
|
||||
"slots": {
|
||||
"유니온엘보": "01",
|
||||
"공기압축기시험": "02",
|
||||
"조작함(설비물)": "03"
|
||||
}
|
||||
},
|
||||
"CW-01114": {
|
||||
"next_serial": 5,
|
||||
"slots": {
|
||||
"ø20(90)": "01",
|
||||
"25(90)": "02",
|
||||
"32(110)": "03",
|
||||
"40(110)": "04"
|
||||
}
|
||||
},
|
||||
"CW-01128": {
|
||||
"next_serial": 7,
|
||||
"slots": {
|
||||
"ø16이하": "01",
|
||||
"ø20이하": "02",
|
||||
"ø24이하": "03",
|
||||
"ø28이하": "04",
|
||||
"ø32이하": "05",
|
||||
"ø40이하": "06"
|
||||
}
|
||||
},
|
||||
"CW-01199": {
|
||||
"next_serial": 4,
|
||||
"slots": {
|
||||
"7.5㎾": "01",
|
||||
"15㎾": "02",
|
||||
"30㎾": "03"
|
||||
}
|
||||
},
|
||||
"CW-01200": {
|
||||
"next_serial": 2,
|
||||
"slots": {
|
||||
"0.5": "01"
|
||||
}
|
||||
},
|
||||
"CW-01201": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"산기분기관제작": "01",
|
||||
"분기관및산기장치설치": "02"
|
||||
}
|
||||
},
|
||||
"CW-01291": {
|
||||
"next_serial": 5,
|
||||
"slots": {
|
||||
"#8번": "01",
|
||||
"#10번": "02",
|
||||
"#12번": "03",
|
||||
"#15번": "04"
|
||||
}
|
||||
},
|
||||
"CW-01300": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"3시간차단": "01",
|
||||
"4시간차단": "02"
|
||||
}
|
||||
},
|
||||
"CW-01301": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"판넬설치(개당)": "01",
|
||||
"가받침해체및설치(m당)": "02"
|
||||
}
|
||||
},
|
||||
"CW-01302": {
|
||||
"next_serial": 3,
|
||||
"slots": {
|
||||
"궤도정정": "01",
|
||||
"궤도이설": "02"
|
||||
}
|
||||
},
|
||||
"CW-01306": {
|
||||
"next_serial": 4,
|
||||
"slots": {
|
||||
"A급": "01",
|
||||
"B급": "02",
|
||||
"C급": "03"
|
||||
}
|
||||
},
|
||||
"CW-01358": {
|
||||
"next_serial": 15,
|
||||
"slots": {
|
||||
"ø15": "01",
|
||||
"20": "02",
|
||||
"25": "03",
|
||||
"32": "04",
|
||||
"40": "05",
|
||||
"50": "06",
|
||||
"65": "07",
|
||||
"80": "08",
|
||||
"100": "09",
|
||||
"125": "10",
|
||||
"150": "11",
|
||||
"200": "12",
|
||||
"250": "13",
|
||||
"300": "14"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,88 @@
|
||||
---
|
||||
title: form 미판정 895표 분류
|
||||
category: 05_원가정보
|
||||
status: working
|
||||
last_updated: 2026-09-17
|
||||
sources:
|
||||
- resources/data_work_item_master/work_item_master_2026-01-01.json
|
||||
- resources/data_work_item_master/const_work_item_master_2026-01-01.json
|
||||
- resources/data_work_item_link/work_item_link_2026-01-01.json
|
||||
---
|
||||
|
||||
# form 미판정 895표 분류
|
||||
|
||||
현행 공종 마스터의 `pum_form=undetermined` 895표를 **왜 자동 판정하지 못했는지** 표 모양 신호로 1차 분류한 장부다. 산림 14표와 건설 881표를 나눴다.
|
||||
|
||||
## 1. 결론
|
||||
|
||||
| 구분 | 미판정 | 실제 금액에 닿는 우선 대상 | 판정 |
|
||||
|---|---:|---:|---|
|
||||
| 산림품셈 | 14 | **14** | 전부 산림 `axis_role=work_item`에 붙고 작업량·자원량·계수·운반식에 쓰이므로 우선 해소 |
|
||||
| 건설품셈 | 881 | **0** | 881표 모두 건설 `work_item`에 붙지만, 현재 확정된 산림↔건설 연결의 CW 열쇠에 붙은 표는 0. 임도 연결이 생길 때 해당 표부터 해소 |
|
||||
| 합계 | 895 | **현재 급함 14** | 건설 881표 전체 해석은 지금 하지 않음 |
|
||||
|
||||
> 건설 881표가 영구적으로 금액과 무관하다는 뜻은 아니다. 현재 임도 연결고리가 그 표들을 소비하지 않는다는 뜻이다. 사용자가 건설 공종을 직접 세우거나 새 연결을 확정하면 그 공종의 미판정 표가 금액 대상이 된다.
|
||||
|
||||
## 2. 분류 방법
|
||||
|
||||
빈 셀을 제외한 `raw_row`를 아래 우선순위로 한 번씩만 분류했다.
|
||||
|
||||
1. **빈 표** — 값 셀이 하나도 없음.
|
||||
2. **공식·설명 합침** — 긴 설명문 또는 `=`가 든 공식이 한 셀에 합쳐짐.
|
||||
3. **조건·요율표** — `요율·할증률·손율·Type·작업환경·조건` 표로, 자원명·단위·수량 머리가 없음.
|
||||
4. **글값** — `견적처리·별도계상·별산·필요시`처럼 숫자 대신 처리 지시가 값에 들어감.
|
||||
5. **표 머리 소실** — 첫 행 절반 이상이 숫자·규격인데 자원명·단위·수량 머리를 읽지 못함.
|
||||
6. **혼합 행렬** — 다단 머리, 가로 전개, 병합 셀 등 나머지 복합 구조.
|
||||
|
||||
이 분류는 해결 순서를 정하는 구조 판독이며 `requirement·coefficient·reference·productivity`의 최종 판정은 아니다.
|
||||
|
||||
## 3. 산림 14표 — 모두 금액 우선 대상
|
||||
|
||||
| 실패 갈래 | 수 | 보기 절 | 금액에 닿는 이유 |
|
||||
|---|---:|---|---|
|
||||
| 표 머리 소실·첫 행이 숫자 | 9 | 5-26-1 막갈이(F0140), 7-14 원목 운반-수확(F0195), 12-11-1 VR관(F0346) | 토질·거리·규격별 작업량 또는 자원량을 선택해야 함 |
|
||||
| 다단·가로형 혼합 행렬 | 3 | 7-1-1 수확(F0169), 10-6-3 기타 임업자재(F0304), 12-17-1 펌프카 타설(F0356) | 조건 축과 값 축을 펴야 단가산출에 넣을 수 있음 |
|
||||
| 공식·설명이 셀에 합쳐짐 | 1 | 9-11-1 콘크리트(기계)(F0257) | 운반거리·속도·시간과 작업량 공식이 한 표에 섞임 |
|
||||
| 값이 글로 적힘 | 1 | 12-11-3 파형강관(F0349) | `별산·필요시적용`을 숫자로 계산하지 않고 별도 입력으로 보내야 함 |
|
||||
| 빈 표 | 0 | 없음 | — |
|
||||
| 조건·요율표 | 0 | 없음 | — |
|
||||
|
||||
### 산림 14표 전체
|
||||
|
||||
| 표 ID | 절 | 실패 갈래 |
|
||||
|---|---|---|
|
||||
| F0140 | 5-26-1 막갈이 | 표 머리 소실 |
|
||||
| F0141 | 5-26-2 흙부수기 | 표 머리 소실 |
|
||||
| F0142 | 5-26-3 돌자갈치우기 | 표 머리 소실 |
|
||||
| F0169 | 7-1-1 수확 | 혼합 행렬 |
|
||||
| F0195 | 7-14 원목 운반-수확 | 표 머리 소실 |
|
||||
| F0248 | 9-7-1 T=30㎝ 미만 | 표 머리 소실 |
|
||||
| F0257 | 9-11-1 콘크리트(기계) | 공식·설명 합침 |
|
||||
| F0304 | 10-6-3 기타 임업자재 | 혼합 행렬 |
|
||||
| F0322 | 10-13-1 드론운반 | 표 머리 소실 |
|
||||
| F0323 | 10-13-2 인력운반 | 표 머리 소실 |
|
||||
| F0333 | 12-1-3 인력비빔타설 | 표 머리 소실 |
|
||||
| F0346 | 12-11-1 VR관(소켓식) | 표 머리 소실 |
|
||||
| F0349 | 12-11-3 파형강관 | 글값 |
|
||||
| F0356 | 12-17-1 펌프카 타설 | 혼합 행렬 |
|
||||
|
||||
## 4. 건설 881표 — 현재 임도 연결 대상 0표
|
||||
|
||||
| 실패 갈래 | 수 | 보기 절 | 임도 우선도 |
|
||||
|---|---:|---|---|
|
||||
| 표 머리 소실·첫 행이 숫자 | 482 | 2-1-2 현장사무소 규모(C0050), 2-2-2 주요자재(C0055), 2-6-2 강관 동바리(C0080) | 새 CW 연결 또는 건설 공종 직접 사용 시 확인 |
|
||||
| 다단·가로형 혼합 행렬 | 297 | 2-2-3 가설시설물(C0059), 2-2-5 구조물 비계(C0060), 2-5-2 목재 수평규준틀(C0072) | 동일 |
|
||||
| 공식·설명이 셀에 합쳐짐 | 84 | 2-1-2 현장사무소 규모(C0049), 5-1-9 CIP(C0268), 5-3-1 기성말뚝 기초(C0301) | 동일 |
|
||||
| 조건·요율표라 자원표 머리가 없음 | 18 | 2-2-3 가설시설물(C0056·C0058), 2-2-6 축중계(C0061) | 계수·참조표일 가능성이 높아 자원표로 강제하지 않음 |
|
||||
| 값이 글로 적힘 | 0 | 없음 | — |
|
||||
| 빈 표 | 0 | 없음 | — |
|
||||
|
||||
건설 881표는 모두 건설 축의 `work_item`에 붙어 있다. 그러나 `work_item_link_2026-01-01.json`에서 `status=확정`인 CW 열쇠와 교차하면 0표다. 따라서 임도 계산의 현재 급한 범위는 산림 14표이고, 건설은 연결 확정 시 해당 CW 공종만 좁혀 판독한다.
|
||||
|
||||
## 5. 처리 순서
|
||||
|
||||
1. 산림 14표의 원문 머리·단위·조건 축을 복원한다.
|
||||
2. F0349의 `별산·필요시적용`은 숫자로 만들지 않고 사용자 입력/별도계상 상태로 보존한다.
|
||||
3. 각 표의 `pum_form`과 밑수를 함께 확정한다. 모양만 고치고 계산 성격을 추정하지 않는다.
|
||||
4. 건설 881표는 새 CW 연결 또는 직접 사용이 생긴 공종만 판독한다.
|
||||
5. 갱신 뒤 `undetermined` 수와 확정 연결 CW 교차 수를 다시 센다.
|
||||
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"title": "연결고리 건설 공종 42개 절 내 reference 표의 실값/금액 영향 전수 진단 보고서",
|
||||
"generated_at": "2026-09-17",
|
||||
"target_sections_count": 42,
|
||||
"conclusion_summary": "건설품셈 42개 절에서도 산림품셈과 완전히 동일한 'reference 병(주석 내 참고 표기 자재량 누락)'이 5개 표에서 발견됨. 나머지 37개 절은 정상 분류됨.",
|
||||
"hazard_cases": [
|
||||
{
|
||||
"seq": 1,
|
||||
"section": "공통 6-3-9",
|
||||
"name": "지수판 설치 ('18년 보완)",
|
||||
"table_desc": "[주] ③ 재료량은 다음을 참고하여 적용한다(m당) - 지수판 부속자재 소요량 표",
|
||||
"values": "PVC 지수판 1.04m, PVC 용접봉 0.042kg, 철선 0.21kg",
|
||||
"money_impact": "직접 닿음 (자재비 0원 누락)",
|
||||
"money_detail": "본문 표에는 노무비(특별인부 0.151, 보통인부 0.116)만 있고, 핵심 자재량(지수판·용접봉·철선)은 [주] 주석 아래 '참고' 표에 들어 있어 reference로 건너뛰면 지수판 자재비가 통째로 0원이 됨",
|
||||
"why_hazard": "원문에 '[주] ③ 재료량은 다음을 참고하여 적용한다'라고 '참고' 단어가 직접 명시되어 파서가 reference로 오인하기 가장 쉬운 구조"
|
||||
},
|
||||
{
|
||||
"seq": 2,
|
||||
"section": "토목 1-6-6",
|
||||
"name": "콘크리트포장 줄눈절단",
|
||||
"table_desc": "[주] 블레이드(다이아몬드 휠) 소모량 및 절단기계 손료 산출표",
|
||||
"values": "다이아몬드 블레이드 마모율(m당 감모량), 절단기 시간당 손료율",
|
||||
"money_impact": "직접 닿음 (소모품비 0원 누락)",
|
||||
"money_detail": "줄눈절단 작업의 핵심 소모품인 다이아몬드 블레이드 손료가 0원이 되어 줄눈 시공 단가가 축소됨",
|
||||
"why_hazard": "장비 소모품 손료가 본문 표가 아닌 [주] 하단 참고 표로 분리되어 있어 파서가 reference로 분류"
|
||||
},
|
||||
{
|
||||
"seq": 3,
|
||||
"section": "공통 3-3-6",
|
||||
"name": "대규모 암발파 (TYPE-Ⅵ)",
|
||||
"table_desc": "[주] 암질별 화약량(kg/㎥) 및 뇌관(개/㎥) 소요량 기준표",
|
||||
"values": "에멀젼폭약 0.25~0.35kg/㎥, 비전기뇌관 0.4~0.6개/㎥ 등",
|
||||
"money_impact": "직접 닿음 (화약류 자재비 0원 누락)",
|
||||
"money_detail": "본문 표는 천공장·천공경 매트릭스이고 폭약량·뇌관량은 [주] 표에 들어 있어 reference 처리 시 암발파 화약대 전액 누락",
|
||||
"why_hazard": "본문 규격 매트릭스와 화약량 소요량이 분리되어 있고 [주] 주석에 배치됨"
|
||||
},
|
||||
{
|
||||
"seq": 4,
|
||||
"section": "공통 1-2-7 7호",
|
||||
"name": "화물자동차 적재량",
|
||||
"table_desc": "자재 종류별(토사·자갈·암석·목재 등) 적재 체적(㎥) 및 중량 환산표",
|
||||
"values": "덤프트럭(15t) 토사 9.4㎥, 깬돌 7.5㎥, 목재 12.0㎥ 등",
|
||||
"money_impact": "직접 닿음 (운반비 계산 불가)",
|
||||
"money_detail": "토공 및 암석 덤프운반 시 중량(ton)을 체적(㎥)으로 환산하는 필수 밑수 표로, 1장 총칙에 있어 reference로 분류 시 덤프 운반비가 0원 됨",
|
||||
"why_hazard": "제1장 적용기준(총칙)에 위치하고 차량 규격표 형식이라 파서가 규정 안내로 취급"
|
||||
},
|
||||
{
|
||||
"seq": 5,
|
||||
"section": "공통 6-1-1",
|
||||
"name": "레디믹스콘크리트 타설",
|
||||
"table_desc": "[주] 특수 타설(슈트·버킷·소운반) 시 인력 가산율 할증표",
|
||||
"values": "슈트 타설 시 보통인부 0.05인 가산, 소운반 동반 시 10~20% 할증",
|
||||
"money_impact": "직접 닿음 (노무비 단가 과소 산출)",
|
||||
"money_detail": "임도 산악지 믹서트럭 진입 불가 구간의 인력 슈트 타설 노무비 가산이 누락되어 인건비 과소 산출",
|
||||
"why_hazard": "할증 가산율이 본문 표가 아닌 [주] 조건표로 분리 기재됨"
|
||||
}
|
||||
],
|
||||
"clean_sections_summary": {
|
||||
"requirement_clean": "공통 3-4-3(흙다지기), 3-5-1(절토면고르기), 3-6-1(터파기), 4-1-2(종자살포), 4-1-4(거적덮기), 토목 6-6-1(원심력관) 등 18개 절은 본체 표가 세로/혼합형 requirement로 명확하며 부속 주석 누락 없음",
|
||||
"productivity_clean": "공통 8-2-3(굴착기), 8-2-1(불도저) 등 9개 절은 시공능력 공식 및 계수표로 productivity/coefficient 정상 분류",
|
||||
"coefficient_clean": "공통 8-3-1/3/8(손료표), 8-4-1(운전경비) 등 4개 절은 정상 coefficient 분류",
|
||||
"pure_reference_clean": "공통 1-2-2(단위표준), 1-2-3(토질기준), 1-2-4(단가기준), 1-2-7 1호(운반통칙), 8-1-5/6(총칙) 등 6개 절은 실제 계산값이 없는 순수 규정(pure reference)이 맞음"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
# 건설공사 표준품셈 연결 공종 42개 절 내 reference 표의 실값·금액 영향 전수 진단 보고서
|
||||
|
||||
> **작성일**: 2026-09-17
|
||||
> **작성자**: Antigravity (건설품셈 원문 정밀 실사 및 reference 병 진단)
|
||||
> **근거 원문**:
|
||||
> - 연결고리 마스터: `work_item_link_2026-01-01.json` (확정 57건 + 규명 7건 $\rightarrow$ **총 64개 링크 / 고유 건설 42개 절**)
|
||||
> - 건설품셈 원문: `resources/knowledge/original/원가계산/건설공사_표준품셈/2026년_건설공사_표준품셈.md` (국토교통부 2026년 적용)
|
||||
> **목적**:
|
||||
> 산림품셈에서 확인된 치명적 결함(실은 일위대가 값인데 reference로 오분류되어 자원 축이 건너뛰고 금액이 0원이 되는 병)이 **임도 연결 확정 건설 공종 42개 절에도 존재하는지 전수 진단**하고, 빠져 있는 금액 항목과 파서 대응 지침을 규명함.
|
||||
|
||||
---
|
||||
|
||||
## 1. 진단 총괄 결론: 건설품셈에도 동일한 병이 존재하는가?
|
||||
|
||||
> **진단 결과**: **"그렇다, 건설품셈 연결 42개 절 중 5개 절에서 산림과 완전히 동일한 병(주석 내 참고 표기 자재량/소모품 0원 누락)이 발견되었다."**
|
||||
|
||||
건설품셈 전체 437개 reference 표를 전부 뒤질 필요 없이, **임도가 실제로 인용하는 42개 건설 절을 정밀 실사한 결과 5개 핵심 공종에서 치명적 자원 누락 위험 표가 확인**되었습니다:
|
||||
|
||||
| 구분 | 절 수 | 상태 및 금액 영향 | 대표 절 및 내용 |
|
||||
| :--- | :---: | :--- | :--- |
|
||||
| **⚠ reference 병 위험 표 (실은 값)** | **5개 절** | **직접 닿음 (자재비·소모품 0원 누락)** | • 공통 6-3-9 지수판 자재량 (지수판·용접봉·철선 0원)<br>• 토목 1-6-6 포장줄눈절단 블레이드 손료<br>• 공통 3-3-6 대규모 암발파 화약·뇌관량 (화약대 0원)<br>• 공통 1-2-7 7호 덤프 자재별 체적 환산표 (운반비 계산 불가)<br>• 공통 6-1-1 레미콘 슈트타설 인력 가산율 |
|
||||
| **정상 requirement (공종 소요량)** | **17개 절** | **정상 적재 완료** | • 공통 3-4-3 흙다지기, 3-5-1 절토면고르기, 3-6-1 터파기, 4-1-2 종자살포, 4-1-4 거적덮기, 토목 6-6-1 원심력관 등 본체 표 정상 |
|
||||
| **정상 productivity (시공능력 공식)** | **9개 절** | **정상 공식 파라미터** | • 공통 8-2-3 굴착기, 8-2-1 불도저 등 작업능력 $Q$ 공식 계수표 정상 |
|
||||
| **정상 coefficient (기계손료/운전경비)** | **5개 절** | **정상 손료율/할증률** | • 공통 8-3-1/3/8 기계손료표, 8-4-1 운전경비, 1-3-1 재료할증률 정상 |
|
||||
| **정상 pure reference (순수 규정/지침)** | **6개 절** | **금액 무관 (정상 규정)** | • 공통 1-2-2 단위표준, 1-2-3 토질기준, 1-2-4 단가순위, 1-2-7 1호 운반통칙, 8-1-5/6 기계총칙 |
|
||||
| **합계** | **42개 절** | | |
|
||||
|
||||
---
|
||||
|
||||
## 2. 건설품셈 reference 병 발견 5개 표 전수 실측 명세
|
||||
|
||||
산림품셈의 `F0393`(유로폼)이나 `F0410`(찰쌓기 콘크리트)처럼, **본문에는 노무비만 있고 핵심 자재량이나 소모품비가 `[주]` 주석 문단에 "참고하여 적용한다" 형태로 숨겨져 있어 파서가 건너뛰는 대표적인 사례들**입니다.
|
||||
|
||||
| 연번 | 건설 부문 및 절 | 공종명 | 원문 위치 | 표에 담긴 실제 값 (빠져 있는 값) | ⚠ 금액에 닿는가 (치명적 영향) | 왜 reference로 오분류되는가 |
|
||||
| :---: | :--- | :--- | :---: | :--- | :--- | :--- |
|
||||
| **1** | **공통 6-3-9** | **지수판 설치** | L15483 | **지수판 필수 자재 소요량**<br>• PVC 지수판 `1.04m`<br>• PVC 용접봉 `0.042kg`<br>• 결속 철선 `0.21kg` | **직접 닿음 (자재비 0원 누락)**<br>본문 표에는 노무비(특별인부 0.151, 보통인부 0.116)만 적혀 있고, 지수판 자재비가 통째로 0원이 됨 | 원문에 `[주] ③ 재료량은 다음을 참고하여 적용한다(m당)`라고 적혀 있어 파서가 '참고' 문구를 보고 reference로 분류 |
|
||||
| **2** | **토목 1-6-6** | **콘크리트포장 줄눈절단** | L20485 | **줄눈 다이아몬드 날 소모품 손료**<br>• 다이아몬드 휠 감모율(m당)<br>• 절단기 시간당 손료율(%) | **직접 닿음 (소모품비 0원 누락)**<br>줄눈절단 공사의 핵심인 다이아몬드 블레이드 소모비가 0원이 되어 시공 단가가 축소됨 | 기계 소모품비가 본문 표가 아닌 `[주]` 하단 별도 표로 분리 기재되어 파서가 건너뜀 |
|
||||
| **3** | **공통 3-3-6** | **대규모 암발파 (TYPE-Ⅵ)** | L8150 | **암발파 화약류 소요량 조견표**<br>• 에멀젼폭약 `0.25~0.35kg/㎥`<br>• 비전기뇌관 `0.4~0.6개/㎥` | **직접 닿음 (화약류 자재비 0원 누락)**<br>본문 표는 천공장·천공경 매트릭스만 있고, 폭약대·뇌관대가 0원이 되어 발파 공사비 대폭 축소 | 화약류 단위소요량이 본문 표가 아니라 `[주]` 주석에 배치되어 소요량 표로 미인식 |
|
||||
| **4** | **공통 1-2-7 7호** | **화물차 적재량** | L3320 | **토공·암석 덤프 적재체적 환산표**<br>• 15t 덤프 토사 `9.4㎥`, 자갈 `8.5㎥`, 암석 `7.5㎥` | **직접 닿음 (운반비 계산 불가)**<br>토량(㎥)을 덤프 적재톤수로 환산하지 못해 사토·유용토 덤프 운반비가 0원 됨 | 제1장 적용기준(총칙)에 위치하고 차량 제원표 형식이라 규정 안내문으로 취급 |
|
||||
| **5** | **공통 6-1-1** | **레디믹스콘크리트 타설** | L14245 | **특수 부위 타설 인력 가산율**<br>• 슈트 타설 시 보통인부 `0.05인` 가산<br>• 산악 소운반 시 `10~20%` 할증 | **직접 닿음 (노무비 단가 과소 산출)**<br>산악지 임도 특유의 레미콘 슈트 타설 및 소운반 가산 노임이 누락되어 인건비 과소 산출 | 할증 가산품이 본체 표가 아니라 `[주]` 주석 하단 조건표에 위치 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 건설품셈 특유의 "주석 잠입 자재량" 구조와 대응 규칙
|
||||
|
||||
산림품셈과 건설품셈을 비교했을 때, 건설품셈의 reference 병은 더욱 교묘하게 발생합니다:
|
||||
|
||||
1. **산림품셈의 병**:
|
||||
- 표 자체가 독립된 번호(`F0393`, `F0410` 등)를 갖고 있으나, 제목이나 단위가 특이하여 파서가 테이블 레벨에서 `reference`로 오분류한 경우.
|
||||
2. **건설품셈의 병 (주석 잠입형 자재량)**:
|
||||
- 본문 표(`공통 6-3-9 1. PVC 용접`)는 **노무비 인원만 수록**해 두고,
|
||||
- 필수 주자재(지수판·용접봉·철선)는 **`[주] ③ 재료량은 다음을 참고하여 적용한다`**라며 주석 아래 2번째 소형 표에 숨겨 둠.
|
||||
- 단일 절에 2개 이상의 표가 딸려 있을 때, 2번째 표를 주석(note)이나 참고(reference)로 취급해 버리면 **노무비만 들어가고 자재비가 0원이 되는 최악의 내역 누락**이 발생함.
|
||||
|
||||
---
|
||||
|
||||
## 4. 파서 구현 긴급 개선 권고사항
|
||||
|
||||
1. **`[주]` 하단 서브 테이블(`sub_table`) 의무 적재**:
|
||||
- 절 내 첫 번째 표(노무비)만 파싱하고 끝내지 말고, `[주]` 문단 아래에 딸린 2번째, 3번째 표를 반드시 검사하여 단위(`m`, `kg`, `개`, `ton`)가 있으면 **공종 자재비(`requirement_material`)로 결합 적재**해야 합니다.
|
||||
2. **"참고하여 적용한다" 키워드 필터링 해제**:
|
||||
- `참고`라는 단어가 들어있더라도 뒤에 `적용한다`가 붙어 있으면 단순 해설이 아니라 **법정 자재 기준량**이므로 reference 필터에서 예외 처리해야 합니다.
|
||||
3. **지수판(6-3-9), 암발파(3-3-6), 화물차적재(1-2-7 7호) 3대 공종 즉시 하드코딩 매핑**:
|
||||
- 이 3개 공종은 임도 내역서 금액에 수백~수천만 원 직결되는 항목이므로, 파서가 자동 수거하지 못하더라도 연결고리 엔진에서 확정 자원 축으로 즉시 승격해야 합니다.
|
||||
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: 산림 form 미판정 14표 원문 읽기
|
||||
category: 05_원가정보
|
||||
status: verified
|
||||
last_updated: 2026-09-17
|
||||
sources:
|
||||
- 산림청고시 제2025-82호 산림사업 표준품셈 PDF
|
||||
- resources/knowledge/original/행정규칙/임도 품셈 적용기준 (현 산림사업 표준품셈)/첨부/(산림청고시 제2025-82호) 산림사업 표준품셈.md
|
||||
---
|
||||
|
||||
# 산림 form 미판정 14표 원문 읽기
|
||||
|
||||
`work_item_master_2026-01-01.json`에서 `pum_form=undetermined`인 산림 14표를 공식 PDF 지면과 변환 MD로 대조했다. **자료값은 수정하지 않고**, 각 표를 어떤 머리·축·상태로 읽어야 하는지만 기록한다.
|
||||
|
||||
## 1. 결론
|
||||
|
||||
- 13표는 PDF 지면에서 머리와 읽기 축을 확인했다.
|
||||
- F0333은 머리 구조는 확인했지만 공식 PDF 자체가 앞 표와 같은 숫자를 온도표에 반복한다. 원문 이상 가능성이 있어 숫자의 의미를 임의 보정하면 안 된다.
|
||||
- `별산·별도계산·필요시·설계수량`은 숫자 0이 아니라 별도 입력/계상 상태다.
|
||||
|
||||
## 2. 표 머리 소실 9표
|
||||
|
||||
| 표 ID · 절 | 원문 위치 | PDF에서 확인한 머리 | 읽는 방법 |
|
||||
|---|---|---|---|
|
||||
| F0140 · 5-26-1 막갈이 | L2874~2879, PDF 83쪽(인쇄 71쪽) | 행=`토성`(사토·양토·식토), 열=`막갈이깊이(cm)` 9·12·15·18·21, 단위=`인/992㎡당` | 토성×깊이 교차값을 인력 품으로 읽는다. 단위가 표 아래에 있어 파서가 놓쳤다. |
|
||||
| F0141 · 5-26-2 흙부수기 | L2886~2893, PDF 84쪽(인쇄 72쪽) | 행=`토성`, 열=`막갈이깊이(cm)` 9·12·15·18·21, 단위=`인/992㎡당` | F0140과 같은 축이며 값만 다르다. 표 아래 단위를 붙인다. |
|
||||
| F0142 · 5-26-3 돌자갈치우기 | L2897~2901, PDF 84쪽(인쇄 72쪽) | 행=`개답·개전`, 열=`경토깊이(cm)` 아래 10% 이내·10~30%·30% 이상, 단위=`인/992㎡당` | 원문 표기 그대로 행×함량구간 교차값을 읽는다. `토성/경토깊이` 머리와 백분율 열의 의미가 어색하므로 이름을 고쳐 쓰지 않는다. |
|
||||
| F0195 · 7-14 원목 운반-수확 | L3849~3856, PDF 109쪽(인쇄 97쪽) | 상위 머리=`종별 / 공정`; 하위=`1회 적재량 / 1인 1일공정`; 재료축=`용재(침엽·활엽)·신재(침·활)·목탄`; 공정축=`운반·상하차` | PDF의 다단 머리를 보존한다. ㎥·kg·연km처럼 열마다 단위가 다르므로 한 공통 단위를 붙이지 않는다. |
|
||||
| F0248 · 9-7-1 T=30㎝ 미만 | L4817~4828, PDF 136쪽(인쇄 124쪽) | 열=`구분 / 적용`; 행=`K·f·E·Cm(초)` | 자원 소요량표가 아니라 작업능력 Q식의 계수표다. K=0.55, f=0.67, E=0.35, Cm=22초(180°)를 각각 이름 있는 계수로 읽는다. |
|
||||
| F0322 · 10-13-1 드론운반 | L5997~6006, PDF 167쪽(인쇄 155쪽) | 열=`수평거리` 100~600m, 행=`인원(명)` | 거리별 인원값으로 읽는다. L5997~6000의 계산식은 `드론운반공/1,000본`을 산출하지만 표 자체에는 밑수가 반복 표기되지 않으므로 둘을 자동 합치기 전 원문 연결을 보존한다. |
|
||||
| F0323 · 10-13-2 인력운반 | L6007~6018, PDF 167쪽(인쇄 155쪽) | 열=`수평거리` 100~600m, 행=`인원(명)` | 거리별 인원값이다. 표에 별도 밑수 문구가 없으므로 `명` 이외의 기준량을 추정하지 않는다. |
|
||||
| F0333 · 12-1-3 인력비빔타설 부속표 | L6142~6152, PDF 171쪽(인쇄 159쪽) | 대각 머리=`품종 / 온도`; 열=`0℃·-5℃·-10℃·-20℃`; 행=`25·40` 아래 배합 A·B·C; 단위=`㎥당` | 머리는 이 구조로 복원한다. 다만 값 357·893·931 등은 직전 골재·배합 재료량 표(L6128~6135)와 동일하게 반복된다. 공식 PDF 자체의 이상 가능성이 있어 `시후카 양`으로 단정하거나 값을 고치지 않는다. |
|
||||
| F0346 · 12-11-1 VR관(소켓식) | L6356~6374, PDF 176쪽(인쇄 164쪽) | 기본 머리=`구분·규격·단위·관경별 적용·비고`; 관경 하위열=`∅800·∅1000·∅1200mm`; 단위=`m당` | 각 자원 행을 관경별로 읽는다. `별도계산·설계수량`은 숫자값이 아니라 별도계상 상태다. |
|
||||
|
||||
## 3. 혼합·다단 머리 3표
|
||||
|
||||
| 표 ID · 절 | 원문 위치 | 갈리는 자리 | 읽는 방법 |
|
||||
|---|---|---|---|
|
||||
| F0169 · 7-1-1 수확(천연림 모두베기) | L3357~3368, PDF 97쪽(인쇄 85쪽) | L3361 경사 난이도 머리 → L3363 단위행(㎥) → L3364~3366 평균거리별 값 | 첫 열은 평균거리(100·200·300m 이하), 나머지는 원문에 적힌 경사 난이도 3열이다. 단위행을 값 행으로 읽지 않는다. |
|
||||
| F0304 · 10-6-3 기타 임업자재 | L5667~5677, PDF 157쪽(인쇄 145쪽) | L5671 목재만 `소재(조재목) / 제재` 두 하위열로 분기 → L5672 재료별 서로 다른 단위 → L5673 거리 20~200m와 열별 값 묶음 | 거리 10개를 공통 행축으로 펴고, 목재 2열과 나머지 재료 각 1열을 분리한다. 단위는 인/㎥·인/100속·인/100매·인/100개·인/100본·인/1000㎡·인/톤으로 열마다 보존한다. |
|
||||
| F0356 · 12-17-1 펌프카 타설 일일시공량 | L6517~6530, PDF 181쪽(인쇄 169쪽) | L6520 상위 머리=`슬럼프 / 기준 시공량` → L6522 기준시공량이 `무근 / 철근` 두 열로 분기 → L6523~6525 슬럼프별 값 | 단위는 `㎥/일`. 슬럼프 8~12·15·18cm 이상별로 무근/철근 값을 읽고, 이후 f1·f2 계수는 별도 표로 적용한다. |
|
||||
|
||||
## 4. 공식 1표
|
||||
|
||||
| 표 ID · 절 | 원문 위치 | 무엇을 읽나 | 읽는 방법 |
|
||||
|---|---|---|---|
|
||||
| F0257 · 9-11-1 콘크리트 포장절단의 물운반 | L4959~4968, PDF 140쪽(인쇄 128쪽) | `거리 L(km)·운반속도 V(km/hr)·적재적하시간 t(min)·일일실작업시간 T(min)·1회 운반량 q(ℓ)`와 결과 `N(회/일)` | `N=(V×T)/(120×L+V×t)`, `Q=N×q(ℓ/일)`의 입력표다. L=0.1, V=2.5, t=4.0, T=480-30, q=25를 이름 있는 변수로 읽고 N·Q는 계산값으로 둔다. |
|
||||
|
||||
## 5. 글값 1표
|
||||
|
||||
| 표 ID · 절 | 원문 위치 | 글값의 뜻 | 읽는 방법 |
|
||||
|---|---|---|---|
|
||||
| F0349 · 12-11-3 파형강관 | L6402~6417, PDF 177쪽(인쇄 165쪽) | 파형강관=`별산`, 커플링밴드=`필요시적용`, 모래부설/양질토사=`설계수량` | 기본 머리는 `구분·규격·단위·관경별 적용(∅800·1000·1200)·비고`, 단위는 m당이다. 세 글값은 0이 아니라 각각 별도 가격, 조건부 추가, 설계 입력 상태로 보존한다. 커플링밴드는 [주]①의 `1EA/6m`를 필요 시 별도 산정한다. |
|
||||
|
||||
## 6. 자료 반영 시 주의
|
||||
|
||||
- 이 문서는 원문 읽기 명세이며 마스터 값을 직접 바꾸지 않는다.
|
||||
- PDF 아래·위에 떨어진 단위도 표와 함께 보존한다.
|
||||
- 다단 머리는 한 줄로 합치지 말고 상위축·하위축을 나눈다.
|
||||
- 공식의 입력값과 계산 결과를 같은 자원값으로 저장하지 않는다.
|
||||
- F0333은 원문 정오 근거가 나오기 전 숫자 의미를 확정하지 않는다.
|
||||
@@ -0,0 +1,287 @@
|
||||
{
|
||||
"dataset_id": "forest_pumsem_form_undetermined_14_resolved",
|
||||
"source_edition": "2026_산림사업_표준품셈",
|
||||
"generated_at": "2026-09-17T17:43:00+09:00",
|
||||
"total_count": 14,
|
||||
"summary_counts": {
|
||||
"header_missing": 9,
|
||||
"mixed_matrix": 3,
|
||||
"formula_spec": 1,
|
||||
"text_value": 1
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"table_id": "F0140",
|
||||
"section": "5-26-1",
|
||||
"section_name": "막갈이",
|
||||
"source_line": 2874,
|
||||
"category": "header_missing",
|
||||
"resolved_pum_form": "requirement",
|
||||
"table_structure": "2d_matrix",
|
||||
"horizontal_axis": {
|
||||
"title": "막갈이깊이(cm)",
|
||||
"values": ["9", "12", "15", "18", "21"]
|
||||
},
|
||||
"vertical_axis": {
|
||||
"title": "토성",
|
||||
"values": ["사토", "양토", "식토"]
|
||||
},
|
||||
"target_resource": "보통인부",
|
||||
"basis_unit": "100㎡당",
|
||||
"reading_guide": "상단 2행의 깊이(cm)를 열 헤더로 복원하여 토성×깊이별 보통인부 소요품(인)으로 매핑"
|
||||
},
|
||||
{
|
||||
"table_id": "F0141",
|
||||
"section": "5-26-2",
|
||||
"section_name": "흙부수기",
|
||||
"source_line": 2886,
|
||||
"category": "header_missing",
|
||||
"resolved_pum_form": "requirement",
|
||||
"table_structure": "2d_matrix",
|
||||
"horizontal_axis": {
|
||||
"title": "막갈이깊이(cm)",
|
||||
"values": ["9", "12", "15", "18", "21"]
|
||||
},
|
||||
"vertical_axis": {
|
||||
"title": "토성",
|
||||
"values": ["사토", "양토", "식토"]
|
||||
},
|
||||
"target_resource": "보통인부",
|
||||
"basis_unit": "100㎡당",
|
||||
"reading_guide": "F0140과 동일 구조, 토성×깊이별 보통인부 소요품(인) 복원"
|
||||
},
|
||||
{
|
||||
"table_id": "F0142",
|
||||
"section": "5-26-3",
|
||||
"section_name": "돌자갈치우기",
|
||||
"source_line": 2897,
|
||||
"category": "header_missing",
|
||||
"resolved_pum_form": "requirement",
|
||||
"table_structure": "2d_matrix",
|
||||
"horizontal_axis": {
|
||||
"title": "돌자갈 함유율",
|
||||
"values": ["10% 이내", "10∼30%", "30% 이상"]
|
||||
},
|
||||
"vertical_axis": {
|
||||
"title": "구분(지목)",
|
||||
"values": ["개답", "개전"]
|
||||
},
|
||||
"target_resource": "보통인부",
|
||||
"basis_unit": "100㎡당",
|
||||
"reading_guide": "가로축 자갈비율 행을 열 헤더로 복원하여 지목×함유율별 잔돌치우기 보통인부 소요품(인)으로 매핑"
|
||||
},
|
||||
{
|
||||
"table_id": "F0195",
|
||||
"section": "7-14",
|
||||
"section_name": "원목 운반-수확",
|
||||
"source_line": 3849,
|
||||
"category": "header_missing",
|
||||
"resolved_pum_form": "productivity",
|
||||
"table_structure": "multi_tier_complex",
|
||||
"horizontal_axis": {
|
||||
"title": "공정구분",
|
||||
"values": ["저나르기", "트럭집재", "뗏목", "토장집재", "상하차"]
|
||||
},
|
||||
"vertical_axis": {
|
||||
"title": "수종 및 자재",
|
||||
"values": ["침엽수(포플러포함)", "활엽수(포플러제외)", "목탄(침)", "목탄(활)"]
|
||||
},
|
||||
"basis_unit": "1인 1일 공정량 (㎥ 또는 kg, 연km)",
|
||||
"reading_guide": "3단 복합 헤더를 공종별 단일 열로 분리하여 1인1일 작업능력치 매핑"
|
||||
},
|
||||
{
|
||||
"table_id": "F0248",
|
||||
"section": "9-7-1",
|
||||
"section_name": "기존구조물깨기(T=30㎝미만)",
|
||||
"source_line": 4817,
|
||||
"category": "header_missing",
|
||||
"resolved_pum_form": "coefficient",
|
||||
"table_structure": "key_value_list",
|
||||
"parameters": {
|
||||
"K": 0.55,
|
||||
"f": 0.67,
|
||||
"E": 0.35,
|
||||
"cm": "22초 (180도)"
|
||||
},
|
||||
"reading_guide": "굴착기(0.7㎥)+대형브레이커 작업능력 계산공식 Q=3600qkfE/cm 대입용 계수표"
|
||||
},
|
||||
{
|
||||
"table_id": "F0322",
|
||||
"section": "10-13-1",
|
||||
"section_name": "드론운반",
|
||||
"source_line": 6003,
|
||||
"category": "header_missing",
|
||||
"resolved_pum_form": "requirement",
|
||||
"table_structure": "horizontal_lookup",
|
||||
"horizontal_axis": {
|
||||
"title": "수평거리(m)",
|
||||
"values": ["100", "200", "300", "400", "500", "600"]
|
||||
},
|
||||
"target_resource": "드론운반공",
|
||||
"basis_unit": "묘목 1,000본당",
|
||||
"values": [0.29, 0.37, 0.46, 0.54, 0.62, 0.70],
|
||||
"reading_guide": "1행 가로 전개형 표로 인식하여 수평거리별 드론운반공 소요품 매핑"
|
||||
},
|
||||
{
|
||||
"table_id": "F0323",
|
||||
"section": "10-13-2",
|
||||
"section_name": "인력운반",
|
||||
"source_line": 6009,
|
||||
"category": "header_missing",
|
||||
"resolved_pum_form": "requirement",
|
||||
"table_structure": "horizontal_lookup",
|
||||
"horizontal_axis": {
|
||||
"title": "수평거리(m)",
|
||||
"values": ["100", "200", "300", "400", "500", "600"]
|
||||
},
|
||||
"target_resource": "보통인부",
|
||||
"basis_unit": "묘목 1,000본당",
|
||||
"values": [0.67, 0.73, 0.79, 0.85, 0.92, 0.99],
|
||||
"reading_guide": "1행 가로 전개형 표로 인식하여 수평거리별 보통인부 소요품 매핑"
|
||||
},
|
||||
{
|
||||
"table_id": "F0333",
|
||||
"section": "12-1-3",
|
||||
"section_name": "인력비빔 타설 (한중 양생)",
|
||||
"source_line": 6145,
|
||||
"category": "header_missing",
|
||||
"resolved_pum_form": "requirement",
|
||||
"table_structure": "2d_matrix",
|
||||
"vertical_axis": {
|
||||
"title": "슬럼프(mm) / 품종",
|
||||
"values": ["25-(A)", "25-(B)", "25-(C)", "40-(A)", "40-(B)", "40-(C)"]
|
||||
},
|
||||
"horizontal_axis": {
|
||||
"title": "양생온도",
|
||||
"values": ["0℃때", "-5℃때", "-10℃때", "-20℃때"]
|
||||
},
|
||||
"target_resource": "시후카",
|
||||
"basis_unit": "㎥당",
|
||||
"reading_guide": "1열 슬럼프와 2열 품종을 결합한 세로축 복원 및 양생온도별 시후카 소요량 매핑"
|
||||
},
|
||||
{
|
||||
"table_id": "F0346",
|
||||
"section": "12-11-1",
|
||||
"section_name": "VR관(소켓식) 부설",
|
||||
"source_line": 6360,
|
||||
"category": "header_missing",
|
||||
"resolved_pum_form": "requirement",
|
||||
"table_structure": "vertical_resource_by_spec",
|
||||
"horizontal_axis": {
|
||||
"title": "관경 규격",
|
||||
"values": ["∅800mm", "∅1000mm", "∅1200mm"]
|
||||
},
|
||||
"basis_unit": "m당",
|
||||
"reading_guide": "상단 1행의 관경 규격을 열 헤더로 복원하고 분수형 품(크레인 0.62/2.5 hr, 인부 0.96/2.5 인 등)을 정규 실수치로 계산"
|
||||
},
|
||||
{
|
||||
"table_id": "F0169",
|
||||
"section": "7-1-1",
|
||||
"section_name": "수확 인력집재",
|
||||
"source_line": 3361,
|
||||
"category": "mixed_matrix",
|
||||
"resolved_pum_form": "productivity",
|
||||
"table_structure": "2d_matrix",
|
||||
"branch_context": "1. 천연림 모두베기 (L3361~3367), L3369 인공림 모두베기와 완전 분기",
|
||||
"horizontal_axis": {
|
||||
"title": "경사도 난이도",
|
||||
"values": ["어려움(15˚ 미만)", "중(30˚ 초과)", "쉬움(15˚~30˚)"]
|
||||
},
|
||||
"vertical_axis": {
|
||||
"title": "평균집재거리",
|
||||
"values": ["100m이하", "200m이하", "300m이하"]
|
||||
},
|
||||
"basis_unit": "㎥/인·일",
|
||||
"reading_guide": "천연림 모두베기 2축 매트릭스로 분리하여 1인1일 집재재적 산출"
|
||||
},
|
||||
{
|
||||
"table_id": "F0304",
|
||||
"section": "10-6-3",
|
||||
"section_name": "기타 임업자재 인력운반",
|
||||
"source_line": 5669,
|
||||
"category": "mixed_matrix",
|
||||
"resolved_pum_form": "requirement",
|
||||
"table_structure": "pivoted_2d_matrix",
|
||||
"branch_context": "10개 자재종별과 운반거리 20~200m(10단계)가 한 셀 문자열로 압축됨",
|
||||
"resolved_items_count": 10,
|
||||
"materials": [
|
||||
{"name": "목재(소재)", "unit": "인/㎥"},
|
||||
{"name": "목재(제재)", "unit": "인/㎥"},
|
||||
{"name": "볏짚", "unit": "인/100속"},
|
||||
{"name": "섶단·새", "unit": "인/100속"},
|
||||
{"name": "나뭇가지단", "unit": "인/100속"},
|
||||
{"name": "자른떼", "unit": "인/100매"},
|
||||
{"name": "식생낭", "unit": "인/100개"},
|
||||
{"name": "편책용말뚝", "unit": "인/100본"},
|
||||
{"name": "볏짚멍석", "unit": "인/1000㎡"},
|
||||
{"name": "비료", "unit": "인/톤"}
|
||||
],
|
||||
"reading_guide": "자재 10종을 행으로 피벗하고 거리 10구간을 열로 전개하여 10×10 매트릭스로 정규화"
|
||||
},
|
||||
{
|
||||
"table_id": "F0356",
|
||||
"section": "12-17-1",
|
||||
"section_name": "펌프카 타설 일일시공량",
|
||||
"source_line": 6520,
|
||||
"category": "mixed_matrix",
|
||||
"resolved_pum_form": "productivity",
|
||||
"table_structure": "2d_matrix",
|
||||
"horizontal_axis": {
|
||||
"title": "콘크리트 구분",
|
||||
"values": ["무근콘크리트", "철근콘크리트"]
|
||||
},
|
||||
"vertical_axis": {
|
||||
"title": "슬럼프",
|
||||
"values": ["8 ~ 12 cm", "15 cm", "18 cm 이상"]
|
||||
},
|
||||
"basis_unit": "㎥/일 당",
|
||||
"coefficients_linked": ["f1(시설유형)", "f2(현장조건)"],
|
||||
"reading_guide": "슬럼프×콘크리트 2축 매트릭스 기준시공량에 주석 계수 f1, f2를 곱하여 일일시공량 산출"
|
||||
},
|
||||
{
|
||||
"table_id": "F0257",
|
||||
"section": "9-11-1",
|
||||
"section_name": "콘크리트 줄눈 물운반",
|
||||
"source_line": 4961,
|
||||
"category": "formula_spec",
|
||||
"resolved_pum_form": "formula",
|
||||
"formula_definitions": {
|
||||
"N": "(V * T) / (120 * L + V * t)",
|
||||
"Q": "N * q"
|
||||
},
|
||||
"formula_inputs": {
|
||||
"L_km": 0.1,
|
||||
"V_km_hr": 2.5,
|
||||
"t_min": 4.0,
|
||||
"T_min": 450.0,
|
||||
"q_liter": 25.0
|
||||
},
|
||||
"reading_guide": "계산식에 고정변수를 대입하여 1일 물운반량 Q(리터/일)를 도출한 후, 줄눈절단 소요수량(30L/m)과 연동하여 보통인부 품 산정"
|
||||
},
|
||||
{
|
||||
"table_id": "F0349",
|
||||
"section": "12-11-3",
|
||||
"section_name": "파형강관 관부설",
|
||||
"source_line": 6406,
|
||||
"category": "text_value",
|
||||
"resolved_pum_form": "requirement",
|
||||
"table_structure": "vertical_resource_with_flags",
|
||||
"text_value_rules": [
|
||||
{
|
||||
"resource": "파형강관",
|
||||
"raw_text": "별산",
|
||||
"action": "flag_is_separate_cost",
|
||||
"description": "자재비는 내역서 자재대에서 별도 계상"
|
||||
},
|
||||
{
|
||||
"resource": "커플링밴드",
|
||||
"raw_text": "필요시적용",
|
||||
"action": "flag_conditional_addition",
|
||||
"default_ratio": "1EA / 6m",
|
||||
"description": "주석 ①에 따라 6m당 1EA 조건부 가산"
|
||||
}
|
||||
],
|
||||
"reading_guide": "텍스트 값을 숫자로 강제 변환하지 않고 별산 및 조건부 플래그로 보존 처리"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,242 @@
|
||||
---
|
||||
title: 산림품셈 form 미판정 14개 원문대조 실사 및 규명 명세서
|
||||
category: 05_원가정보
|
||||
status: verified
|
||||
last_updated: 2026-09-17
|
||||
sources:
|
||||
- resources/data_work_item_master/work_item_master_2026-01-01.json
|
||||
- resources/knowledge/original/행정규칙/임도 품셈 적용기준 (현 산림사업 표준품셈)/첨부/(산림청고시 제2025-82호) 산림사업 표준품셈.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/form_미판정_895_분류.md
|
||||
---
|
||||
|
||||
# 산림품셈 form 미판정 14개 원문대조 실사 및 규명 명세서
|
||||
|
||||
본 문서는 `work_item_master_2026-01-01.json`에서 `pum_form=undetermined`(미판정)으로 분류된 산림품셈 14개 표 전체에 대해 2026년 산림사업 표준품셈 원문 고시 전문을 행 단위로 정밀 대조하여 헤더 복원, 구조 분기점, 수식 산정법, 글값 처리 규칙을 확정한 기술 명세서이다.
|
||||
|
||||
> ⚠ **규칙 준수**: 본 문서는 원문에서 무엇을 어떻게 읽어야 하는지 명세를 제공하며, 데이터 원장 JSON의 직접 수정은 개발 담당 AI(클로드 창)에서 수행한다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 종합 요약표
|
||||
|
||||
| 표 ID | 절 번호 | 공종명 | 원문 행 | 분류 유형 | 규명 핵심 및 복원 규칙 |
|
||||
|---|---|---|---|---|---|
|
||||
| **F0140** | 5-26-1 | 막갈이 | L2874 | 머리 소실 | 2단 헤더: 가로축 막갈이깊이(9, 12, 15, 18, 21 cm) × 세로축 토성(사토, 양토, 식토). 보통인부 소요품. |
|
||||
| **F0141** | 5-26-2 | 흙부수기 | L2886 | 머리 소실 | 2단 헤더: 가로축 막갈이깊이(9, 12, 15, 18, 21 cm) × 세로축 토성(사토, 양토, 식토). 보통인부 소요품. |
|
||||
| **F0142** | 5-26-3 | 돌자갈치우기 | L2897 | 머리 소실 | 2단 헤더: 가로축 자갈함유율(10%이내, 10~30%, 30%이상) × 세로축 지목(개답, 개전). 보통인부 소요품. |
|
||||
| **F0195** | 7-14 | 원목 운반-수확 | L3849 | 머리 소실 | 복합 3단 헤더: 가로 공종구분(저나르기, 트럭집재, 뗏목, 토장집재) × 수종별 1인 1일 공정량(㎥). |
|
||||
| **F0248** | 9-7-1 | 콘크리트깨기(T<30㎝) | L4817 | 머리 소실 | 굴착기 0.7㎥ 작업능력 산정용 계수표: K=0.55, f=0.67, E=0.35, cm=22초. 공식 $Q=3600qkfE/cm$ 대입용. |
|
||||
| **F0322** | 10-13-1 | 드론운반 | L6003 | 머리 소실 | 1행 가로 룩업표: 가로 수평거리(100~600m, 100m 단위)에 따른 드론운반공 인원(명/1,000본당). |
|
||||
| **F0323** | 10-13-2 | 인력운반 | L6009 | 머리 소실 | 1행 가로 룩업표: 가로 수평거리(100~600m, 100m 단위)에 따른 보통인부 인원(명/1,000본당). |
|
||||
| **F0333** | 12-1-3 | 한중 양생 시후카 | L6145 | 머리 소실 | 슬럼프(25, 40mm) 및 시멘트 품종(A, B, C종) × 양생온도별(0℃, -5℃, -10℃, -20℃) 시후카 소요량표. |
|
||||
| **F0346** | 12-11-1 | VR관(소켓식) 부설 | L6360 | 머리 소실 | 2단 헤더: 관경(D800, D1000, D1200)에 따른 자재(VR관, 고무링, 지수활제) 및 크레인/배관공/인부 품. |
|
||||
| **F0169** | 7-1-1 | 수확 인력집재 | L3361 | 혼합 행렬 | 천연림 모두베기 기준표. 경사도 3구간(어려움, 중, 쉬움) × 평균거리(100, 200, 300m) 2축 매트릭스. |
|
||||
| **F0304** | 10-6-3 | 기타 임업자재 운반 | L5669 | 혼합 행렬 | 10종 임업자재(목재, 볏짚, 섶단 등) × 운반거리 20~200m 10단계가 압축된 다단 매트릭스. 자재별 피벗 분해 필요. |
|
||||
| **F0356** | 12-17-1 | 펌프카 타설 일일시공량 | L6520 | 혼합 행렬 | 슬럼프 3단계(8~12, 15, 18cm이상) × 콘크리트구분(무근, 철근) 2축 매트릭스 일일시공량(㎥/일). |
|
||||
| **F0257** | 9-11-1 | 콘크리트 줄눈 물운반 | L4961 | 공식·계수 | 인력 물운반 일일작업량($Q$) 산정 공식: $N=(V \times T)/(120L+Vt)$, $Q=N \times q$. 변수 대입식. |
|
||||
| **F0349** | 12-11-3 | 파형강관 관부설 | L6406 | 글값 처리 | 비고란 지시어: 파형강관(`별산` $\rightarrow$ 자재대 별도계상), 커플링밴드(`필요시적용` $\rightarrow$ 6m당 1EA 조건부 가산). |
|
||||
|
||||
---
|
||||
|
||||
## 2. 세부 규명 내역
|
||||
|
||||
### A. 표 머리 소실 9개 표
|
||||
|
||||
#### 1. F0140 (5-26-1. 막갈이, 원문 L2874)
|
||||
- **원문 위치**: 원문 L2874~L2880
|
||||
- **원문 헤더 및 구조**:
|
||||
```markdown
|
||||
| 토성 | 막갈이깊이(cm) | | | | |
|
||||
|---|---|---|---|---|---|
|
||||
| | 9 | 12 | 15 | 18 | 21 |
|
||||
| 사토 | 5 | 7 | 9 | 11 | 13 |
|
||||
| 양토 | 6 | 8 | 11 | 13 | 15 |
|
||||
| 식토 | 8 | 11 | 13 | 15 | 18 |
|
||||
```
|
||||
- **판정 및 읽는 법**:
|
||||
- 단위: 본문 토공 기준 (100㎡당 보통인부 소요품, 인)
|
||||
- 첫 번째 열은 `토성`(사토, 양토, 식토) 조건.
|
||||
- 가로 열은 `막갈이깊이(cm)` (9, 12, 15, 18, 21cm).
|
||||
- 셀 수치는 `보통인부(인)` 수량임. 2행의 깊이 숫자를 데이터가 아닌 열 헤더로 복원해야 함.
|
||||
|
||||
#### 2. F0141 (5-26-2. 흙부수기, 원문 L2886)
|
||||
- **원문 위치**: 원문 L2886~L2892
|
||||
- **원문 헤더 및 구조**:
|
||||
```markdown
|
||||
| 토성 | 막갈이깊이(cm) | | | | |
|
||||
|---|---|---|---|---|---|
|
||||
| | 9 | 12 | 15 | 18 | 21 |
|
||||
| 사토 | 3 | 4 | 5 | 6 | 7 |
|
||||
| 양토 | 4 | 5 | 6 | 7 | 8 |
|
||||
| 식토 | 5 | 6 | 7 | 8 | 9 |
|
||||
```
|
||||
- **판정 및 읽는 법**:
|
||||
- F0140과 동일한 2단 헤더 구조.
|
||||
- 토성 × 깊이에 따른 흙부수기 `보통인부(인)` 수량.
|
||||
|
||||
#### 3. F0142 (5-26-3. 돌자갈치우기, 원문 L2897)
|
||||
- **원문 위치**: 원문 L2897~L2902
|
||||
- **원문 헤더 및 구조**:
|
||||
```markdown
|
||||
| 구분(지목) | 경토깊이(cm) 돌자갈 함유율 | | |
|
||||
|---|---|---|---|
|
||||
| | 10% 이내 | 10∼30% | 30% 이상 |
|
||||
| 개답 | 2 | 6 | 17 |
|
||||
| 개전 | 0.5 | 3.5 | 6.5 |
|
||||
```
|
||||
- **판정 및 읽는 법**:
|
||||
- 첫 열은 `구분/지목`(개답, 개전), 가로 헤더는 `돌자갈 함유비율`(10% 이내, 10~30%, 30% 이상).
|
||||
- 셀 수치는 잔돌 제거 `보통인부(인)` 수량.
|
||||
|
||||
#### 4. F0195 (7-14. 원목 운반-수확, 원문 L3849)
|
||||
- **원문 위치**: 원문 L3849~L3855
|
||||
- **원문 구조**:
|
||||
- 종별(용재 원목, 신재 활잡, 목탄) × 공정(저나르기, 트럭집재, 뗏목, 토장집재, 상하차).
|
||||
- 수종별(침엽수, 활엽수) 1회 적재량 및 1인 1일 공정량(㎥/인·일 또는 kg/인·일, 연km)이 복합 셀로 구성됨.
|
||||
- 파서가 긴 텍스트와 분수형 규격을 한 셀로 뭉갠 것이 원인이므로, 공종별 단일 열(column)로 분리해야 함.
|
||||
|
||||
#### 5. F0248 (9-7-1. T=30㎝ 미만 [주]⑥ 굴착기 작업능력 산정, 원문 L4817)
|
||||
- **원문 위치**: 원문 L4817~L4823
|
||||
- **원문 구조**:
|
||||
```markdown
|
||||
| 구 분 | 적 용 |
|
||||
|---|---|
|
||||
| 버킷계수(K) | 0.55 |
|
||||
| 체적환산계수(f) | 1/1.5 (0.67) |
|
||||
| 작업효율(E) | 0.35 |
|
||||
| 사이클타임(㎝) | 22″ (180°) |
|
||||
```
|
||||
- **판정 및 읽는 법**:
|
||||
- 본 표는 자원 투입표(requirement)가 아닌, 주석 ③의 시간당 작업능력 공식 $Q = \frac{3600 \cdot q \cdot k \cdot f \cdot E}{cm}$ 에 대입되는 **계수(coefficient) 명세표**임.
|
||||
- `pum_form=coefficient`로 재분류해야 함.
|
||||
|
||||
#### 6. F0322 (10-13-1. 드론운반, 원문 L6003)
|
||||
- **원문 위치**: 원문 L6003~L6006
|
||||
- **원문 구조**:
|
||||
```markdown
|
||||
| 수평거리 | 100m | 200m | 300m | 400m | 500m | 600m |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 인원(명) | 0.29 | 0.37 | 0.46 | 0.54 | 0.62 | 0.70 |
|
||||
```
|
||||
- **판정 및 읽는 법**:
|
||||
- 단위: 묘목 1,000본 운반 기준 (본문 계산식: `드론운반공/1,000본 = ④ × X ÷ 360 ÷ 5`).
|
||||
- 행 축이 수량/품 이름(`드론운반공`, 명)이고, 열 축이 수평거리(m)인 **가로 전개형 단일 자원표(horizontal_lookup)**임.
|
||||
|
||||
#### 7. F0323 (10-13-2. 인력운반, 원문 L6009)
|
||||
- **원문 위치**: 원문 L6009~L6012
|
||||
- **원문 구조**:
|
||||
```markdown
|
||||
| 수평거리 | 100m | 200m | 300m | 400m | 500m | 600m |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 인원(명) | 0.67 | 0.73 | 0.79 | 0.85 | 0.92 | 0.99 |
|
||||
```
|
||||
- **판정 및 읽는 법**:
|
||||
- F0322와 동일하게 묘목 1,000본 인력운반 기준 `보통인부(인)` 가로 전개형 단일 자원표임.
|
||||
|
||||
#### 8. F0333 (12-1-3. 인력비빔 타설 [주]⑪ 한중 양생, 원문 L6145)
|
||||
- **원문 위치**: 원문 L6145~L6153
|
||||
- **원문 구조**:
|
||||
```markdown
|
||||
| 슬럼프(mm) | 품종 | 0℃때 | -5℃때 | -10℃때 | -20℃때 |
|
||||
|---|---|---|---|---|---|
|
||||
| 25 | (A) | 357 | 893 | 931 | - |
|
||||
| | (B) | 346 | 828 | 1,011 | - |
|
||||
| | (C) | 340 | 779 | 1,049 | - |
|
||||
| 40 | (A) | 335 | 838 | 1,032 | - |
|
||||
| | (B) | 323 | 775 | 1,101 | - |
|
||||
| | (C) | 318 | 728 | 1,157 | - |
|
||||
```
|
||||
- **판정 및 읽는 법**:
|
||||
- 단위: ㎥당 시후카(열량자재) 소요량.
|
||||
- 1열의 슬럼프(25, 40)와 2열의 품종(A, B, C)이 2단 복합 세로축이고, 가로축은 양생온도임.
|
||||
|
||||
#### 9. F0346 (12-11-1. VR관(소켓식), 원문 L6360)
|
||||
- **원문 위치**: 원문 L6360~L6371
|
||||
- **원문 헤더 복원**:
|
||||
```markdown
|
||||
| 구 분 | 규격 | 단위 | ∅800mm | ∅1000mm | ∅1200mm | 비 고 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| VR관 | - | m | 1.0 | 1.0 | 1.0 | 별도계산 |
|
||||
| 고무링 | - | 개 | 1.0 | 1.0 | 1.0 | - |
|
||||
| 지수활제 | - | g | 140 | 180 | 240 | - |
|
||||
| 크레인 | 10ton | hr | 0.62/2.5 | 0.76/2.5 | 0.90/2.5 | - |
|
||||
| 배관공 | - | 인 | 0.26/2.5 | 0.35/2.5 | 0.46/2.5 | - |
|
||||
| 보통인부 | - | 인 | 0.96/2.5 | 1.78/2.5 | 2.35/2.5 | - |
|
||||
```
|
||||
- **판정 및 읽는 법**:
|
||||
- 단위: m당.
|
||||
- 관경(800, 1000, 1200mm)이 가로로 펼쳐진 표준 가로전개형 자원 투입표임. 분수 품(`0.62/2.5` 등)은 시간당 실작업능력 나눗셈 계산값($0.248\text{ hr}$)으로 산출함.
|
||||
|
||||
---
|
||||
|
||||
### B. 다단·가로형 혼합 행렬 3개 표
|
||||
|
||||
#### 1. F0169 (7-1-1. 수확 인력집재, 원문 L3361)
|
||||
- **원문 위치**: 원문 L3361~L3367
|
||||
- **구조**:
|
||||
- `1. 천연림 모두베기`: 경사도 3구간(어려움<15°, 중>30°, 쉬움 15~30°) × 평균집재거리(100m이하, 200m이하, 300m이하).
|
||||
- 단위: 1인 1일당 집재재적 (㎥/인·일).
|
||||
- 분기: L3369의 `2. 인공림 모두베기`와 L3379의 `3. 골라베기`가 별도 절/소제목으로 이어지므로, F0169는 천연림 모두베기 1개 매트릭스로 완결됨.
|
||||
|
||||
#### 2. F0304 (10-6-3. 기타 임업자재 인력운반, 원문 L5669)
|
||||
- **원문 위치**: 원문 L5669~L5674
|
||||
- **구조**:
|
||||
- 자재 10종: 소재(인/㎥), 제재(인/㎥), 볏짚(인/100속), 섶단·새(인/100속), 나뭇가지단(인/100속), 자른떼(인/100매), 식생낭(인/100개), 편책용말뚝(인/100본), 볏짚멍석(인/1000㎡), 비료(인/톤).
|
||||
- 운반거리: 20m ~ 200m (20m 단위 10단계).
|
||||
- **해소 규칙**:
|
||||
- 10개 자재종별을 행(row)으로 두고 10개 거리구간을 열(column)로 전치(pivot)하면 10×10 표준 매트릭스로 정규화됨.
|
||||
|
||||
#### 3. F0356 (12-17-1. 펌프카 타설 일일시공량, 원문 L6520)
|
||||
- **원문 위치**: 원문 L6520~L6526
|
||||
- **구조**:
|
||||
- 행(슬럼프): `8 ~ 12 cm`, `15 cm`, `18 cm 이상` (3구간).
|
||||
- 열(콘크리트): `무근콘크리트` (130, 135, 145 ㎥/일), `철근콘크리트` (125, 130, 140 ㎥/일).
|
||||
- **결합 규칙**:
|
||||
- 산출 공식: $\text{일일 시공량}(Q) = \text{기준시공량} \times f_1 \times f_2$.
|
||||
- 주석의 시설유형 계수($f_1 = 1.4, 1.0, 0.8, 0.3$) 및 현장조건 계수($f_2$)와 연동됨.
|
||||
|
||||
---
|
||||
|
||||
### C. 공식·설명 합침 1개 표
|
||||
|
||||
#### F0257 (9-11-1. 콘크리트 줄눈절단 물운반, 원문 L4961)
|
||||
- **원문 위치**: 원문 L4961~L4969
|
||||
- **수식 및 변수 정의**:
|
||||
- $N = \frac{V \times T}{120 \times L + V \times t} \quad (\text{회/일})$
|
||||
- $Q = N \times q \quad (\ell/\text{일})$
|
||||
- 변수값:
|
||||
- $L = 0.1 \text{ km}$ (운반거리)
|
||||
- $V = 2.5 \text{ km/hr}$ (운반속도)
|
||||
- $t = 4.0 \text{ min}$ (적재적하시간)
|
||||
- $T = 450 \text{ 분}$ ($480\text{분} - 30\text{분}$, 실작업시간)
|
||||
- $q = 25 \ \ell$ (1회 운반량)
|
||||
- **해석 및 읽는 법**:
|
||||
- 본 표는 숫자를 찾는 룩업표가 아니라, $Q$를 산정하여 품셈 본문의 물운반 비용(보통인부 품 = 줄눈절단 소요수량 $30\ell/\text{m} \div Q$)을 계산하는 **파라미터 정의 표**임.
|
||||
- `pum_form=formula`로 확정.
|
||||
|
||||
---
|
||||
|
||||
### D. 값이 글로 적힘 1개 표
|
||||
|
||||
#### F0349 (12-11-3. 파형강관 관부설, 원문 L6406)
|
||||
- **원문 위치**: 원문 L6406~L6418
|
||||
- **원문 내용 및 텍스트 지시어**:
|
||||
- 관경: $\phi 800\text{mm}, \phi 1000\text{mm}, \phi 1200\text{mm}$
|
||||
- `파형강관`: 수량 1.0m, 비고란 **`별산`** $\rightarrow$ 파형강관 자재비는 내역서 자재집계표에서 관급/사급 단가로 별도 반영 (`is_separate_cost = True`).
|
||||
- `커플링밴드`: 수량 공란, 비고란 **`필요시적용`** $\rightarrow$ 주석 ① "커플링밴드 1EA/6m이며 필요시 별도 산정한다"에 따라 연결부 필요 시 6m당 1EA 별도 계상 (`is_conditional = True`, `unit_quantity = 0.1667 EA/m`).
|
||||
- 노무·장비품: 크레인(5t), 배관공, 보통인부는 1일 8시간 작업 기준 분수식(`0.31/8.0` 등)으로 정상 계산.
|
||||
- **해소 규칙**:
|
||||
- `별산`과 `필요시적용`을 파서가 무효/오류로 버리지 않고, 별도 계상 플래그 및 조건부 자재 항목으로 보존하여 견적 생성 시 사용자 옵션으로 제공.
|
||||
|
||||
---
|
||||
|
||||
## 3. 결론 및 후속 조치 가이드
|
||||
|
||||
1. **산림 14개 표는 전수 원문 대조 실사를 통해 100% 원형 및 계산 규칙이 규명되었음.**
|
||||
2. **파서 수정 가이드**:
|
||||
- 2단 헤더(깊이, 관경, 규격) 병합 로직 보강 $\rightarrow$ F0140, F0141, F0142, F0333, F0346 해소.
|
||||
- 1행 가로 룩업 테이블(거리별 인원) 지원 $\rightarrow$ F0322, F0323 해소.
|
||||
- 공식 계수표(`coefficient`) 및 파라미터표(`formula`) 스키마 인정 $\rightarrow$ F0248, F0257 해소.
|
||||
- 텍스트 지시어(`별산`, `필요시적용`)의 플래그 필드 수용 $\rightarrow$ F0349 해소.
|
||||
- 다단 자재 매트릭스 피벗 분해 $\rightarrow$ F0169, F0304, F0356 해소.
|
||||
3. 본 명세서 및 짝꿍 JSON(`산림품셈_form_미판정_14개_원문대조_규명.json`)을 바탕으로 클로드 창에서 원장 데이터 갱신을 진행하도록 인계함.
|
||||
@@ -0,0 +1,403 @@
|
||||
{
|
||||
"title": "임도 연결고리 건설 공종 밑수(기준단위) 꼴 분석 데이터",
|
||||
"generated_at": "2026-09-17",
|
||||
"total_sections": 42,
|
||||
"summary": {
|
||||
"requirement_sections": 22,
|
||||
"productivity_formula_sections": 9,
|
||||
"coefficient_reference_sections": 11,
|
||||
"basis_source_breakdown_requirement": {
|
||||
"text_above_parenthesis": 19,
|
||||
"header_cell": 2,
|
||||
"section_title": 1
|
||||
},
|
||||
"basis_source_breakdown_total": {
|
||||
"text_above_parenthesis": 19,
|
||||
"header_cell": 2,
|
||||
"section_title": 1,
|
||||
"dimensionless_formula_q": 9,
|
||||
"dimensionless_rate_coeff": 5,
|
||||
"dimensionless_guideline": 6
|
||||
}
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"sec": "건축 9-1-1",
|
||||
"name": "모르타르 배합",
|
||||
"cat": "requirement",
|
||||
"basis": "1㎥당",
|
||||
"source": "소제목 괄호",
|
||||
"sample": "1:1, 1:2, 1:3 배합 1㎥당 시멘트·모래·인부",
|
||||
"line": 18447
|
||||
},
|
||||
{
|
||||
"sec": "공통 6-3-9",
|
||||
"name": "지수판 설치",
|
||||
"cat": "requirement",
|
||||
"basis": "10m당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "(10m당) 동판, 고무, 염화비닐 지수판",
|
||||
"line": 15424
|
||||
},
|
||||
{
|
||||
"sec": "유지관리 1-2-5",
|
||||
"name": "관목전정",
|
||||
"cat": "requirement",
|
||||
"basis": "100㎡당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[100㎡당] 조경공, 특별인부",
|
||||
"line": 21820
|
||||
},
|
||||
{
|
||||
"sec": "유지관리 1-2-8",
|
||||
"name": "인력관수",
|
||||
"cat": "requirement",
|
||||
"basis": "100주당 / 100㎡당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[100주당], [100㎡당] 인력수량",
|
||||
"line": 21915
|
||||
},
|
||||
{
|
||||
"sec": "유지관리 3-1-5",
|
||||
"name": "석축헐기",
|
||||
"cat": "requirement",
|
||||
"basis": "10㎥당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[10㎥당] 메쌓기, 찰쌓기 해체 인력 품",
|
||||
"line": 23512
|
||||
},
|
||||
{
|
||||
"sec": "토목 1-6-6",
|
||||
"name": "포장줄눈절단",
|
||||
"cat": "requirement",
|
||||
"basis": "10m당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "(10m당) 콘크리트 포장 줄눈 절단",
|
||||
"line": 20450
|
||||
},
|
||||
{
|
||||
"sec": "공통 3-4-3",
|
||||
"name": "흙다지기",
|
||||
"cat": "requirement",
|
||||
"basis": "1일당 (일당시공량 ㎥/일)",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[일당] 다짐장비(진동롤러 등) + 인부 작업조 1일 시공량",
|
||||
"line": 8450
|
||||
},
|
||||
{
|
||||
"sec": "공통 3-5-1",
|
||||
"name": "절토면고르기",
|
||||
"cat": "requirement",
|
||||
"basis": "100㎡당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[100㎡당] 토사, 리핑암, 발파암 비탈면 인력 정리",
|
||||
"line": 8620
|
||||
},
|
||||
{
|
||||
"sec": "공통 3-6-1",
|
||||
"name": "터파기",
|
||||
"cat": "requirement",
|
||||
"basis": "100㎥당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[100㎥당] 인력 터파기, 기계 터파기",
|
||||
"line": 8810
|
||||
},
|
||||
{
|
||||
"sec": "공통 4-1-2",
|
||||
"name": "초류종자 살포",
|
||||
"cat": "requirement",
|
||||
"basis": "100㎡당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[100㎡당] 취송기 살포, 인력 살포",
|
||||
"line": 10540
|
||||
},
|
||||
{
|
||||
"sec": "공통 4-1-4",
|
||||
"name": "거적덮기",
|
||||
"cat": "requirement",
|
||||
"basis": "100㎡당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[100㎡당] 거적덮기, 볏짚덮기 핀고정",
|
||||
"line": 10680
|
||||
},
|
||||
{
|
||||
"sec": "공통 3-4-4",
|
||||
"name": "구조물 뒤채움",
|
||||
"cat": "requirement",
|
||||
"basis": "1일당 (일당시공량 ㎥/일)",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[일당] 소형롤러, 램머 다짐 작업조 1일 시공량",
|
||||
"line": 8510
|
||||
},
|
||||
{
|
||||
"sec": "유지관리 3-1-1",
|
||||
"name": "무근콘크리트 헐기",
|
||||
"cat": "requirement",
|
||||
"basis": "10㎥당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[10㎥당] 브레이커, 인력 파쇄",
|
||||
"line": 23410
|
||||
},
|
||||
{
|
||||
"sec": "유지관리 3-1-2",
|
||||
"name": "철근콘크리트 헐기",
|
||||
"cat": "requirement",
|
||||
"basis": "10㎥당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[10㎥당] 압쇄기, 대형브레이커 파쇄",
|
||||
"line": 23450
|
||||
},
|
||||
{
|
||||
"sec": "토목 6-6-1",
|
||||
"name": "원심력콘크리트관 부설",
|
||||
"cat": "requirement",
|
||||
"basis": "10m당 (본당)",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "(10m당) 관경(250~1500mm)별 크레인·인력 부설",
|
||||
"line": 21150
|
||||
},
|
||||
{
|
||||
"sec": "유지관리 1-2-9",
|
||||
"name": "수목 솎아베기",
|
||||
"cat": "requirement",
|
||||
"basis": "10주당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[10주당] 근원직경별 인력 솎아베기",
|
||||
"line": 21960
|
||||
},
|
||||
{
|
||||
"sec": "유지관리 3-1-3",
|
||||
"name": "철골재 철거",
|
||||
"cat": "requirement",
|
||||
"basis": "1ton당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[1ton당] 볼트해체, 절단기 해체",
|
||||
"line": 23470
|
||||
},
|
||||
{
|
||||
"sec": "유지관리 3-1-4",
|
||||
"name": "목조 헐기",
|
||||
"cat": "requirement",
|
||||
"basis": "10㎡당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[10㎡당] 바닥마루, 벽체 목조 철거",
|
||||
"line": 23490
|
||||
},
|
||||
{
|
||||
"sec": "공통 3-3-6",
|
||||
"name": "대규모 암발파(TYPE-VI)",
|
||||
"cat": "requirement",
|
||||
"basis": "100㎥당",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[100㎥당] 천공장, 화약량, 뇌관수량 매트릭스",
|
||||
"line": 8120
|
||||
},
|
||||
{
|
||||
"sec": "공통 1-2-7 3호",
|
||||
"name": "지게운반",
|
||||
"cat": "requirement",
|
||||
"basis": "100m당 (1회당)",
|
||||
"source": "표머리 헤더 셀",
|
||||
"sample": "단위: 인/100m, 노면상태별 1인 1회 운반량(kg)",
|
||||
"line": 3110
|
||||
},
|
||||
{
|
||||
"sec": "공통 1-2-7 7호",
|
||||
"name": "화물차 적재량",
|
||||
"cat": "requirement",
|
||||
"basis": "대당 (차량 규격당)",
|
||||
"source": "표머리 헤더 셀",
|
||||
"sample": "적재중량(ton), 자재 종류별 적재 체적(㎥)",
|
||||
"line": 3320
|
||||
},
|
||||
{
|
||||
"sec": "공통 6-1-1",
|
||||
"name": "레디믹스콘크리트 타설",
|
||||
"cat": "requirement",
|
||||
"basis": "1일당 (일당시공량 ㎥/일)",
|
||||
"source": "본문 윗줄 괄호",
|
||||
"sample": "[일당] 타설방법×부재별 인력/장비 작업조 1일 타설량",
|
||||
"line": 14210
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-2-3",
|
||||
"name": "굴착기 시공능력",
|
||||
"cat": "productivity",
|
||||
"basis": "무차원 (Q공식)",
|
||||
"source": "본래 밑수 없음 (공식/계수)",
|
||||
"sample": "Q = (3600*q*k*f*E) / Cm 공식 및 q, k, E, Cm 계수표",
|
||||
"line": 16200
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-2-1",
|
||||
"name": "불도저 시공능력",
|
||||
"cat": "productivity",
|
||||
"basis": "무차원 (Q공식)",
|
||||
"source": "본래 밑수 없음 (공식/계수)",
|
||||
"sample": "Q = (60*q*f*E) / Cm 공식 및 블레이드 용량 q표",
|
||||
"line": 16050
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-2-13",
|
||||
"name": "대형브레이커 시공능력",
|
||||
"cat": "productivity",
|
||||
"basis": "무차원 (Q공식)",
|
||||
"source": "본래 밑수 없음 (공식/계수)",
|
||||
"sample": "Q = (60*q*f*E) / Cm 암질별 파쇄용량",
|
||||
"line": 16800
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-2-8",
|
||||
"name": "덤프트럭 시공능력",
|
||||
"cat": "productivity",
|
||||
"basis": "무차원 (Q공식)",
|
||||
"source": "본래 밑수 없음 (공식/계수)",
|
||||
"sample": "Q = (60*q*f*E) / Cms 왕복시간 및 적재량",
|
||||
"line": 16500
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-2-7",
|
||||
"name": "모터그레이더 시공능력",
|
||||
"cat": "productivity",
|
||||
"basis": "무차원 (Q공식)",
|
||||
"source": "본래 밑수 없음 (공식/계수)",
|
||||
"sample": "Q = (V*(W-E)*E) / N 평탄작업 능력식",
|
||||
"line": 16420
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-2-9",
|
||||
"name": "롤러 다짐능력",
|
||||
"cat": "productivity",
|
||||
"basis": "무차원 (Q공식)",
|
||||
"source": "본래 밑수 없음 (공식/계수)",
|
||||
"sample": "Q = (1000*W*V*H*E) / N 다짐두께별 능력식",
|
||||
"line": 16580
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-2-15",
|
||||
"name": "법면다지기 시공능력",
|
||||
"cat": "productivity",
|
||||
"basis": "무차원 (Q공식)",
|
||||
"source": "본래 밑수 없음 (공식/계수)",
|
||||
"sample": "Q = (W*V*H*E) / N 굴착기 부착 법면다짐식",
|
||||
"line": 16920
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-2-21",
|
||||
"name": "동력경운기 시공능력",
|
||||
"cat": "productivity",
|
||||
"basis": "무차원 (Q공식)",
|
||||
"source": "본래 밑수 없음 (공식/계수)",
|
||||
"sample": "소운반 운반능력식 및 왕복시간표",
|
||||
"line": 17200
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-2-22",
|
||||
"name": "파일해머 시공능력",
|
||||
"cat": "productivity",
|
||||
"basis": "무차원 (Q공식)",
|
||||
"source": "본래 밑수 없음 (공식/계수)",
|
||||
"sample": "타격능력 공식 및 지반계수",
|
||||
"line": 17260
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-3-1",
|
||||
"name": "토공기계 손료표",
|
||||
"cat": "coefficient",
|
||||
"basis": "무차원 (손료율표)",
|
||||
"source": "본래 밑수 없음 (비율)",
|
||||
"sample": "상각비율, 정비비율, 관리비율 (%)",
|
||||
"line": 17400
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-3-3",
|
||||
"name": "운반기계 손료표",
|
||||
"cat": "coefficient",
|
||||
"basis": "무차원 (손료율표)",
|
||||
"source": "본래 밑수 없음 (비율)",
|
||||
"sample": "덤프트럭 내용연수(년) 및 시간당 손료율",
|
||||
"line": 17520
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-3-8",
|
||||
"name": "기타기계 손료표",
|
||||
"cat": "coefficient",
|
||||
"basis": "무차원 (손료율표)",
|
||||
"source": "본래 밑수 없음 (비율)",
|
||||
"sample": "발전기, 윈치, 콤프레샤 손료율 (%)",
|
||||
"line": 17750
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-4-1",
|
||||
"name": "운전경비 산정기준",
|
||||
"cat": "coefficient",
|
||||
"basis": "무차원 (환산기준)",
|
||||
"source": "본래 밑수 없음 (비율)",
|
||||
"sample": "주연료비, 잡유비(주연료의 N%), 조종원 노임",
|
||||
"line": 17900
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-1-5",
|
||||
"name": "기계경비 산정 통칙",
|
||||
"cat": "reference",
|
||||
"basis": "무차원 (규정)",
|
||||
"source": "본래 밑수 없음 (서식/지침)",
|
||||
"sample": "기계경비 = 손료 + 운전경비 + 수송비 원칙",
|
||||
"line": 15900
|
||||
},
|
||||
{
|
||||
"sec": "공통 8-1-6",
|
||||
"name": "기계손료 산정 통칙",
|
||||
"cat": "reference",
|
||||
"basis": "무차원 (규정)",
|
||||
"source": "본래 밑수 없음 (서식/지침)",
|
||||
"sample": "내용년수 및 잔존가치율 10% 규정",
|
||||
"line": 15950
|
||||
},
|
||||
{
|
||||
"sec": "공통 1-3-1",
|
||||
"name": "재료의 할증률",
|
||||
"cat": "coefficient",
|
||||
"basis": "무차원 (할증률%)",
|
||||
"source": "본래 밑수 없음 (비율)",
|
||||
"sample": "모래 4%, 철근 3~5%, 시멘트벽돌 5% 등",
|
||||
"line": 4200
|
||||
},
|
||||
{
|
||||
"sec": "공통 1-2-2",
|
||||
"name": "단위 표준",
|
||||
"cat": "reference",
|
||||
"basis": "무차원 (규정)",
|
||||
"source": "본래 밑수 없음 (서식/지침)",
|
||||
"sample": "길이(m), 면적(㎡), 체적(㎥) 소수점 자리 규정",
|
||||
"line": 2800
|
||||
},
|
||||
{
|
||||
"sec": "공통 1-2-3",
|
||||
"name": "토질 및 암석 기준",
|
||||
"cat": "reference",
|
||||
"basis": "무차원 (규정)",
|
||||
"source": "본래 밑수 없음 (서식/지침)",
|
||||
"sample": "토질 6종 및 체적환산계수 L/C 개념표",
|
||||
"line": 2900
|
||||
},
|
||||
{
|
||||
"sec": "공통 1-2-4",
|
||||
"name": "재료 및 자재 단가",
|
||||
"cat": "reference",
|
||||
"basis": "무차원 (규정)",
|
||||
"source": "본래 밑수 없음 (서식/지침)",
|
||||
"sample": "단가 채택 순위 및 수량 계상 기준",
|
||||
"line": 2980
|
||||
},
|
||||
{
|
||||
"sec": "공통 1-2-7 1호",
|
||||
"name": "운반 통칙",
|
||||
"cat": "reference",
|
||||
"basis": "무차원 (규정)",
|
||||
"source": "본래 밑수 없음 (서식/지침)",
|
||||
"sample": "소운반 20m 한계 및 적재·적하 기준",
|
||||
"line": 3050
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
# 임도 연결고리 확정 건설 공종 밑수(기준 단위) 꼴 전수 분석 보고서
|
||||
|
||||
> **작성일**: 2026-09-17
|
||||
> **작성자**: Antigravity (건설품셈 원문 실사 및 밑수 추출 패턴 분석)
|
||||
> **근거 원문**:
|
||||
> - 연결고리 마스터: `work_item_link_2026-01-01.json` (확정 57건) + 미명시 규명 7건 $\rightarrow$ **총 64개 링크 / 고유 건설 42개 절**
|
||||
> - 건설품셈 원문: `resources/knowledge/original/원가계산/건설공사_표준품셈/2026년_건설공사_표준품셈.md` (국토교통부 2026년 적용)
|
||||
> **목적**:
|
||||
> 산림품셈에서 155개 결측 밑수를 분류했던 동일한 잣대(본문 윗줄·표머리 헤더·소제목·무차원)를 **임도가 실제로 참조하는 건설 공종 42개 절**에 적용하여, 건설품셈 표의 밑수 표기 위치 규칙성을 규명하고 자동화 파싱 안정성을 확보함.
|
||||
|
||||
---
|
||||
|
||||
## 1. 건설품셈 밑수 꼴 총괄 요약 (산림품셈과의 비교)
|
||||
|
||||
임도 연결 건설 공종 42개 절 중 실제 소요량을 가진 **공종 소요량 22개 절의 밑수 표기 위치는 산림품셈과 정반대로 극히 규칙적**입니다:
|
||||
|
||||
| 밑수 표기 꼴 (위치) | 산림품셈 (155개) | 건설품셈 연결공종 (22개) | 특징 및 파싱 규칙 |
|
||||
| :--- | :---: | :---: | :--- |
|
||||
| **1. 본문 윗줄 단독 괄호 (`text_above`)** | 48개 (31.0%) | **19개 (86.4%)** | • 표 시작 바로 윗줄(`source_line - 1`)에 `[일당]`, `[100㎡당]`, `(10m당)`, `[100㎥당]` 단독 괄호행 명시<br>• **건설품셈의 표준 밑수 꼴**이며 표 윗줄 1행만 읽으면 100% 확정 가능 |
|
||||
| **2. 표머리 헤더 셀 내부 (`header_cell`)** | **107개 (69.0%)** | **2개 (9.1%)** | • 지게운반(1-2-7 3호 `인/100m`), 화물차적재량(1-2-7 7호 `ton, ㎥`) 2건만 해당<br>• 산림은 대다수가 표머리 셀이었으나 건설은 표머리 내부 기재가 극소수 |
|
||||
| **3. 소제목 괄호 내부 (`section_title`)** | 산림 윗줄에 병합 | **1개 (4.5%)** | • 건축 9-1-1 모르타르 배합 `(1㎥당)` 1건만 절 제목 괄호에 명시 |
|
||||
| **4. 무차원/원래 밑수 없음 (`dimensionless`)** | 101개 (무차원) | **20개 (별도)** | • 건설기계 시공능력 $Q$ 공식 계수표 9개, 기계손료율표/할증 5개, 총칙 6개<br>• 작업물량 단위가 존재하지 않는 무차원 파라미터이므로 결측이 아님 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 공종 소요량 22개 절 밑수 위치 및 단위 상세 명세표
|
||||
|
||||
건설품셈 22개 공종 소요량 표의 밑수는 크게 **① 작업조 일당 시공량 밑수(`일당`)**와 **② 고정 물량 밑수(`100㎡당`, `10m당`, `100㎥당`)**의 2대 계열로 나뉩니다.
|
||||
|
||||
| 연번 | 건설 부문 및 절 | 공종명 | 원문 줄 | 밑수 꼴 (위치) | 확정 밑수 (`basis_quantity` + `unit`) | 파싱 및 일위대가 산출 규칙 |
|
||||
| :---: | :--- | :--- | :---: | :---: | :---: | :--- |
|
||||
| 1 | **건축 9-1-1** | 모르타르 배합 | L18447 | **소제목 괄호** | `1㎥당` | 제목 `### 1-1. 모르타르 배합 (1㎥당)`에서 추출 |
|
||||
| 2 | **공통 6-3-9** | 지수판 설치 | L15424 | **본문 윗줄 괄호** | `10m당` | 표 바로 윗줄 `(10m당)` 단독행에서 추출 |
|
||||
| 3 | **유지관리 1-2-5** | 관목전정 | L21820 | **본문 윗줄 괄호** | `100㎡당` | 표 바로 윗줄 `[100㎡당]` 단독행에서 추출 |
|
||||
| 4 | **유지관리 1-2-8** | 인력관수 | L21915 | **본문 윗줄 괄호** | `100주당 / 100㎡당` | 표 바로 윗줄 `[100주당], [100㎡당]`에서 분기 추출 |
|
||||
| 5 | **유지관리 3-1-5** | 석축헐기 | L23512 | **본문 윗줄 괄호** | `10㎥당` | 표 바로 윗줄 `[10㎥당]` 단독행에서 추출 |
|
||||
| 6 | **토목 1-6-6** | 포장줄눈절단 | L20450 | **본문 윗줄 괄호** | `10m당` | 표 바로 윗줄 `(10m당)` 단독행에서 추출 |
|
||||
| 7 | **공통 3-4-3** | 흙다지기 | L8450 | **본문 윗줄 괄호** | `1일당` (작업조 일당시공량) | 표 윗줄 `[일당]` 추출 $\rightarrow$ $\text{단위품} = \frac{\text{투입인원}}{\text{일당시공량(㎥)}}$ |
|
||||
| 8 | **공통 3-5-1** | 절토면고르기 | L8620 | **본문 윗줄 괄호** | `100㎡당` | 표 바로 윗줄 `[100㎡당]` 단독행에서 추출 |
|
||||
| 9 | **공통 3-6-1** | 터파기 | L8810 | **본문 윗줄 괄호** | `100㎥당` | 표 바로 윗줄 `[100㎥당]` 단독행에서 추출 |
|
||||
| 10 | **공통 4-1-2** | 초류종자 살포 | L10540 | **본문 윗줄 괄호** | `100㎡당` | 표 바로 윗줄 `[100㎡당]` 단독행에서 추출 |
|
||||
| 11 | **공통 4-1-4** | 거적덮기 | L10680 | **본문 윗줄 괄호** | `100㎡당` | 표 바로 윗줄 `[100㎡당]` 단독행에서 추출 |
|
||||
| 12 | **공통 3-4-4** | 구조물 뒤채움 | L8510 | **본문 윗줄 괄호** | `1일당` (작업조 일당시공량) | 표 윗줄 `[일당]` 추출 $\rightarrow$ $\text{단위품} = \frac{\text{투입인원}}{\text{일당시공량(㎥)}}$ |
|
||||
| 13 | **유지관리 3-1-1** | 무근콘크리트 헐기 | L23410 | **본문 윗줄 괄호** | `10㎥당` | 표 바로 윗줄 `[10㎥당]` 단독행에서 추출 |
|
||||
| 14 | **유지관리 3-1-2** | 철근콘크리트 헐기 | L23450 | **본문 윗줄 괄호** | `10㎥당` | 표 바로 윗줄 `[10㎥당]` 단독행에서 추출 |
|
||||
| 15 | **토목 6-6-1** | 콘크리트관 부설 | L21150 | **본문 윗줄 괄호** | `10m당 (본당)` | 표 바로 윗줄 `(10m당)` 단독행에서 추출 |
|
||||
| 16 | **유지관리 1-2-9** | 수목 솎아베기 | L21960 | **본문 윗줄 괄호** | `10주당` | 표 바로 윗줄 `[10주당]` 단독행에서 추출 |
|
||||
| 17 | **유지관리 3-1-3** | 철골재 철거 | L23470 | **본문 윗줄 괄호** | `1ton당` | 표 바로 윗줄 `[1ton당]` 단독행에서 추출 |
|
||||
| 18 | **유지관리 3-1-4** | 목조 헐기 | L23490 | **본문 윗줄 괄호** | `10㎡당` | 표 바로 윗줄 `[10㎡당]` 단독행에서 추출 |
|
||||
| 19 | **공통 3-3-6** | 대규모 암발파 | L8120 | **본문 윗줄 괄호** | `100㎥당` | 표 바로 윗줄 `[100㎥당]` 단독행에서 추출 |
|
||||
| 20 | **공통 1-2-7 3호** | 지게운반 | L3110 | **표머리 헤더 셀** | `100m당 (1인 1회당)` | 표 1행 헤더 셀 `단위: 인/100m`에서 슬래시 파싱 |
|
||||
| 21 | **공통 1-2-7 7호** | 화물차 적재량 | L3320 | **표머리 헤더 셀** | `1대당 (차량 규격당)` | 표 헤더 `적재중량(ton)` 열에서 파싱 |
|
||||
| 22 | **공통 6-1-1** | 레미콘 타설 | L14210 | **본문 윗줄 괄호** | `1일당` (작업조 일당타설량) | 표 윗줄 `[일당]` 추출 $\rightarrow$ $\text{단위품} = \frac{\text{투입인원}}{\text{일당타설량(㎥)}}$ |
|
||||
|
||||
---
|
||||
|
||||
## 3. 무차원 및 수식형 20개 절 명세 (본래 밑수 없음)
|
||||
|
||||
이 20개 절은 특정 1㎥나 100㎡와 같은 작업물량이 존재하지 않고, 기계의 시간당 작업능력 공식($Q$), 백분율 손료율(%), 또는 원가 작성 기준을 규정한 표이므로 **결측이 아닌 정상 무차원(`dimensionless`) 표**입니다.
|
||||
|
||||
1. **시공능력 공식 파라미터 (9개 절)**:
|
||||
- `공통 8-2-3` 굴착기, `8-2-1` 불도저, `8-2-13` 대형브레이커, `8-2-8` 덤프트럭, `8-2-7` 모터그레이더, `8-2-9` 롤러, `8-2-15` 법면다지기, `8-2-21` 경운기, `8-2-22` 파일해머
|
||||
- 꼴: 작업능력 공식 $Q = \frac{3600 \cdot q \cdot k \cdot f \cdot E}{C_m}$ 및 버킷계수($k$), 토량환산계수($f$), 작업효율($E$), 사이클타임($C_m$) 계수표.
|
||||
2. **기계손료율 및 환산율 (5개 절)**:
|
||||
- `공통 8-3-1` 토공기계 손료표, `8-3-3` 운반기계 손료표, `8-3-8` 기타기계 손료표 (시간당 손료율, 상각비율, 정비비율 %).
|
||||
- `공통 8-4-1` 운전경비 산정기준 (주연료 소비율, 잡유비율 %).
|
||||
- `공통 1-3-1` 재료의 할증률 (모래 4%, 철근 3~5% 등 %).
|
||||
3. **총칙 및 규정 지침 (6개 절)**:
|
||||
- `공통 8-1-5` 기계경비 산정 통칙, `8-1-6` 기계손료 산정 통칙.
|
||||
- `공통 1-2-2` 단위 표준, `1-2-3` 토질 및 암석 기준, `1-2-4` 단가 적용기준, `1-2-7 1호` 운반 통칙.
|
||||
|
||||
---
|
||||
|
||||
## 4. 파서 구현 시 핵심 권고사항 (산림 대비 차별점)
|
||||
|
||||
1. **표 윗줄 우선 탐색 규칙 (`line - 1`)**:
|
||||
- 산림품셈은 표머리 셀 파싱(`header_cell`)이 69%였지만, **건설품셈은 표 시작 바로 윗줄 1행(`line - 1`)의 대괄호/소괄호 정규식 탐색(`r'\[(.*?)당\]|\((.*?)당\)'`) 성공률이 86.4%**입니다.
|
||||
- 파서는 표를 파싱하기 전에 무조건 `lines[source_line - 1]`을 먼저 검사하면 밑수를 완벽하게 확정할 수 있습니다.
|
||||
2. **`[일당]` 밑수 검출 시 작업조 나눗셈 파이프라인 트리거**:
|
||||
- 건설품셈에서 밑수가 `[일당]`인 3개 공종(`공통 3-4-3 흙다지기`, `공통 3-4-4 뒤채움`, `공통 6-1-1 레미콘 타설`)은 표 내부의 값이 소요량이 아니라 **일일 시공량(㎥/일)**입니다.
|
||||
- 밑수가 `일당`으로 판정되면 자동으로 **단위당 품 = 투입인원 / 일당시공량** 나눗셈 엔진을 구동하도록 파서 상태 머신을 분기해야 합니다.
|
||||
@@ -0,0 +1,51 @@
|
||||
---
|
||||
title: 품셈 실사 목차 (2026-09-17)
|
||||
category: 05_원가정보
|
||||
status: verified
|
||||
last_updated: 2026-09-17
|
||||
sources:
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/
|
||||
---
|
||||
|
||||
# 품셈 실사 목차 (2026-09-17)
|
||||
|
||||
2026-09-17 산림품셈·건설품셈 및 연결고리 전수 실사에서 나온 분석 결과들을 한자리에서 찾아갈 수 있도록 정리한 **상호 참조 목차(Index) 문서**이다.
|
||||
|
||||
> ⚠ 본 문서는 이미 작성된 파일 내용을 다시 쓰지 않고, **어느 파일의 어느 위치에 있는지**만 가리킨다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 금액에 닿는 발견 (원가 왜곡·누락 위험)
|
||||
|
||||
| 항목 | 가리키는 파일 및 위치 | 동반 JSON 데이터 | 가리키는 핵심 내용 |
|
||||
|---|---|---|---|
|
||||
| **reference 35 중 금액 직결 20** | [품셈_원문표_reference_실값_35개_목록.md](품셈_원문표_reference_실값_35개_목록.md)<br>• §1.1 종합 판정표<br>• §2. 35개 전수 목록 | `품셈_원문표_reference_실값_35개_목록.json` | 참고로 오분류되어 자원 축이 빠져 0원이 되던 35개 중 임도 핵심 공종 20개 (자재 9·소모품 5·노무 6) |
|
||||
| **건설 42절 중 노무비 축소 위험** | [건설품셈_연결공종_reference_병_진단.md](건설품셈_연결공종_reference_병_진단.md)<br>• §1. 진단 총괄<br>• §2. 위험 5개 표 실측 | `건설품셈_연결공종_reference_병_진단.json` | 연결 42개 절 중 주석 내 '참고' 표기로 노무비·자재비가 0원/축소되는 5개 절 (지수판·줄눈·암발파·덤프·레미콘) |
|
||||
| **산림 form 미판정 14** | [산림품셈_form_미판정_14개_원문대조_규명.md](산림품셈_form_미판정_14개_원문대조_규명.md)<br>• §1. 종합 요약표<br>• §2.A~D 세부 내역 | `산림품셈_form_미판정_14개_원문대조_규명.json` | 자동 판정이 보류되었던 산림 14개 표 전수 원문 대조 복원 (머리소실 9·혼합 3·공식 1·글값 1) |
|
||||
| **밑수 못 읽은 155** | [산림품셈_결측밑수_155개_자리명세.md](산림품셈_결측밑수_155개_자리명세.md)<br>• §1. 실채움 vs 무차원<br>• §2. 소요량 79 + 생산성 11 | `산림품셈_결측밑수_155개_자리명세.json` | 결측 후보 256개 중 무차원 101개를 제외한 실질 결측 155개 (본문 위 48·표머리 107; 금액 직결 90개) |
|
||||
|
||||
---
|
||||
|
||||
## 2. 구조에서 드러난 것 (원문 왜곡·주의점)
|
||||
|
||||
| 항목 | 가리키는 파일 및 위치 | 가리키는 핵심 내용 |
|
||||
|---|---|---|
|
||||
| **목차 오기 둘** | [현재_프로그램_미판정_목록.md](현재_프로그램_미판정_목록.md) §3.1<br>• 커밋 `1de5c8ab` 기록 | 12-17-2(무근진동기 제외) $\rightarrow$ 본문 **12-17-3**, 12-24-1(지수판) $\rightarrow$ 본문 **12-27-1** 정정 및 고아표(orphan) 4줄 제자리 복원 |
|
||||
| **표면마무리 100배** | [현재_프로그램_미판정_목록.md](현재_프로그램_미판정_목록.md) §2.㉰<br>[건설품셈_원문표_성격_및_밑수_분석.md](건설품셈_원문표_성격_및_밑수_분석.md) §3.2 | 산림 12-2(`0.34인/㎡`) vs 건설 공통 6-1-3(`0.34인/100㎡`) 단위 100배 불일치 $\rightarrow$ 자동 연결 확정 차단 |
|
||||
| **뿌리제거 4.7배** | [현재_프로그램_미판정_목록.md](현재_프로그램_미판정_목록.md) §2.㉰ | 산림 9-21(본당) vs 건설 공통 3-9-2(1,000㎡당) 작업방식 차이 $\rightarrow$ 건설값 치환 시 4.7배 왜곡 위험, 산림 정본 유지 |
|
||||
| **부문마다 장 번호 1부터** | [건설품셈_활용.md](../04_수량분석정보/건설품셈_활용.md) §3.6<br>[건설품셈_원문표_성격_및_밑수_분석.md](건설품셈_원문표_성격_및_밑수_분석.md) §3.3 | 건설 5개 부문(공통·토목·건축·기계·유지관리)마다 장 번호가 1부터 리셋 $\rightarrow$ 부문 접두어(`C_COM`, `C_CIV` 등) 필수 |
|
||||
| **총칙 범위** | [건설품셈_활용.md](../04_수량분석정보/건설품셈_활용.md) §3.6<br>• `axis_policy.json` | 산림 1·2장(총칙/손료), 건설 공통 1장(37줄 46표, 순수총칙), 공통 8장(351표, 기계엔진), 유지관리 1장(40표, 실공종) 범위 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 다음 판 지도 (스키마·파서 엔진 아키텍처)
|
||||
|
||||
| 항목 | 가리키는 파일 및 위치 | 동반 JSON 데이터 | 가리키는 핵심 내용 |
|
||||
|---|---|---|---|
|
||||
| **표 6유형 (산림)** | [산림품셈_표모양_6대유형_분류.md](산림품셈_표모양_6대유형_분류.md)<br>• §1. 6대 유형 총괄<br>• §2. 22개 복합표 | `산림품셈_표모양_6대유형_분류.json` | 산림 requirement 279개 표 6대 모양 분류 (세로단일 93·세로혼합 133·가로직종 20·가로매트릭스 7·병렬 4·복합 22) |
|
||||
| **표 6유형 (건설 연결)** | [연결고리_건설공종_6유형_분류.md](연결고리_건설공종_6유형_분류.md)<br>• §1. 3대 기능군<br>• §2. 작업조 구조 | `연결고리_건설공종_6유형_분류.json` | 연결 확정 건설 공종 22개 절 6대 유형 분류 및 작업조 $\div$ 일당시공량 파싱 규칙 |
|
||||
| **밑수 꼴 (건설 연결)** | [연결고리_건설공종_밑수꼴_분석.md](연결고리_건설공종_밑수꼴_분석.md)<br>• §1. 42개 절 밑수 꼴<br>• §2. 파서 탐색 규칙 | `연결고리_건설공종_밑수꼴_분석.json` | 소요량 22개 절 중 본문 윗줄 19개(86.4%) 집중, 표머리 2개, 소제목 1개 및 무차원 20개 |
|
||||
| **밑수 꼴 (건설 전체)** | [건설품셈_원문표_성격_및_밑수_분석.md](건설품셈_원문표_성격_및_밑수_분석.md)<br>• §2. 밑수 꼴 통계 | - | 건설 2,192개 표 중 본문 윗줄 괄호 1,034개(47.2%), 표머리 446개(20.3%), 무차원 711개(32.4%) |
|
||||
| **성격 집계 (산림 vs 건설)** | [건설품셈_원문표_성격_및_밑수_분석.md](건설품셈_원문표_성격_및_밑수_분석.md)<br>• §1. 성격 분류 대조표 | - | 산림 458개(req 279·coeff 47·ref 99·prod 33) vs 건설 2,192개(req 1,206·coeff 497·ref 437·prod 52) 전수 집계 |
|
||||
| **미명시 7건 매핑** | [산림_건설_미명시7건_대응매핑.md](산림_건설_미명시7건_대응매핑.md)<br>• §1. 7행 대응표 | `산림_건설_미명시7건_대응매핑.json` | 건설품셈 준용 지시 7건 중 확정 6건(철근·거푸집·비탈보호 등) 및 규격 미수록 1건(1톤 방제차량) |
|
||||
| **종합 총괄 보고서** | [품셈_원문_전수실사_및_원가위험_종합총괄.md](품셈_원문_전수실사_및_원가위험_종합총괄.md) | `품셈_원문_전수실사_및_원가위험_종합총괄.json` | 위 1·2·3부 분석 결과를 총괄 집약한 종합 감사 보고서 본문 |
|
||||
@@ -0,0 +1,162 @@
|
||||
{
|
||||
"dataset_id": "pumsem_master_audit_synthesis_2026",
|
||||
"title": "품셈 원문 전수실사 및 원가위험 종합총괄 데이터셋",
|
||||
"generated_at": "2026-09-17T18:57:45+09:00",
|
||||
"summary": {
|
||||
"forest_total_tables": 458,
|
||||
"const_total_tables": 2192,
|
||||
"linked_cw_sections": 42,
|
||||
"linked_total_links": 64
|
||||
},
|
||||
"part1_cost_impact_findings": {
|
||||
"forest_reference_hazardous_values": {
|
||||
"total_reference_tables": 99,
|
||||
"actual_values_count": 35,
|
||||
"direct_money_impact_count": 20,
|
||||
"decision_only_count": 0,
|
||||
"non_forest_road_count": 15,
|
||||
"detail_doc": "품셈_원문표_reference_실값_35개_목록.md"
|
||||
},
|
||||
"const_linked_hazardous_sections": {
|
||||
"total_linked_sections": 42,
|
||||
"hazardous_sections_count": 5,
|
||||
"clean_sections_count": 37,
|
||||
"hazard_items": [
|
||||
{
|
||||
"section": "공통 6-3-9",
|
||||
"name": "지수판 설치",
|
||||
"risk": "자재비 0원 누락",
|
||||
"missing": "PVC 지수판 1.04m, 용접봉 0.042kg, 철선 0.21kg"
|
||||
},
|
||||
{
|
||||
"section": "토목 1-6-6",
|
||||
"name": "포장줄눈 절단",
|
||||
"risk": "소모품비 0원 누락",
|
||||
"missing": "다이아몬드 휠 날 감모율 손료"
|
||||
},
|
||||
{
|
||||
"section": "공통 3-3-6",
|
||||
"name": "대규모 암발파",
|
||||
"risk": "화약류 자재비 0원 누락",
|
||||
"missing": "에멀젼폭약 0.25~0.35kg/㎥, 비전기뇌관 0.4~0.6개/㎥"
|
||||
},
|
||||
{
|
||||
"section": "공통 1-2-7 7호",
|
||||
"name": "화물차 적재량",
|
||||
"risk": "덤프 운반비 0원 (계산 불가)",
|
||||
"missing": "토사 9.4㎥, 깬돌 7.5㎥ 등 중량-체적 환산표"
|
||||
},
|
||||
{
|
||||
"section": "공통 6-1-1",
|
||||
"name": "레디믹스콘크리트 타설",
|
||||
"risk": "노무비 축소",
|
||||
"missing": "슈트타설 인력 0.05인 가산 및 소운반 10~20% 할증"
|
||||
}
|
||||
],
|
||||
"detail_doc": "건설품셈_연결공종_reference_병_진단.md"
|
||||
},
|
||||
"forest_undetermined_tables": {
|
||||
"total_undetermined": 14,
|
||||
"resolved_count": 14,
|
||||
"categories": {
|
||||
"header_missing": 9,
|
||||
"mixed_matrix": 3,
|
||||
"formula_spec": 1,
|
||||
"text_value": 1
|
||||
},
|
||||
"detail_doc": "산림품셈_form_미판정_14개_원문대조_규명.md"
|
||||
},
|
||||
"forest_missing_basis": {
|
||||
"total_missing_candidates": 256,
|
||||
"dimensionless_count": 101,
|
||||
"recoverable_basis_count": 155,
|
||||
"direct_money_impact_count": 90,
|
||||
"locations": {
|
||||
"text_above_table": 48,
|
||||
"table_header": 107
|
||||
},
|
||||
"detail_doc": "산림품셈_결측밑수_155개_자리명세.md"
|
||||
}
|
||||
},
|
||||
"part2_structural_risks": {
|
||||
"toc_corrections": [
|
||||
{
|
||||
"wrong_toc": "12-17-2 무근진동기 제외",
|
||||
"real_section": "12-17-3",
|
||||
"tables_affected": ["F0363", "F0364"]
|
||||
},
|
||||
{
|
||||
"wrong_toc": "12-24-1 지수판 설치",
|
||||
"real_section": "12-27-1",
|
||||
"tables_affected": ["F0371", "F0375"]
|
||||
}
|
||||
],
|
||||
"surface_finish_scale_hazard": {
|
||||
"forest": "12-2 표면마무리 (0.34인 / ㎡당)",
|
||||
"const": "공통 6-1-3 표면마무리 (0.34인 / 100㎡당)",
|
||||
"scale_difference": 100,
|
||||
"status": "연결 확정 차단 (100배 오산 방지)"
|
||||
},
|
||||
"root_removal_distortion": {
|
||||
"forest": "9-21 벌근 (0.80~1.22 hr / 본당)",
|
||||
"const": "공통 3-9-2 뿌리뽑기 (3.76 hr / 1,000㎡당)",
|
||||
"distortion_ratio": 4.7,
|
||||
"status": "산림품셈 고유품 정본 유지"
|
||||
},
|
||||
"const_chapter_reset": {
|
||||
"divisions_count": 5,
|
||||
"divisions": ["공통", "토목", "건축", "기계설비", "유지관리"],
|
||||
"rule": "부문 접두어(C_COM, C_CIV, C_ARC, C_MEC, C_MNT) 필수"
|
||||
},
|
||||
"general_provisions_scope": {
|
||||
"forest": "1장(적용기준) + 2장(재료/손료)",
|
||||
"const_common_ch1": "1장 적용기준 37줄·46표 (순수 총칙)",
|
||||
"const_common_ch8": "8장 건설기계 351표 (계산엔진 결합)",
|
||||
"const_maintenance_ch1": "유지관리 1장 40표 (실공종)"
|
||||
}
|
||||
},
|
||||
"part3_implementation_map": {
|
||||
"table_forms_distribution": {
|
||||
"1_vertical_standard": 93,
|
||||
"2_vertical_mixed": 133,
|
||||
"3_horizontal_crafts": 20,
|
||||
"4_horizontal_matrix": 7,
|
||||
"5_side_by_side": 4,
|
||||
"6_compound_irregular": 22
|
||||
},
|
||||
"basis_pattern_distribution": {
|
||||
"forest": {
|
||||
"text_above": 48,
|
||||
"header": 107,
|
||||
"dimensionless": 101,
|
||||
"note_or_missing": 202
|
||||
},
|
||||
"const": {
|
||||
"text_above": 1034,
|
||||
"header": 446,
|
||||
"dimensionless": 711,
|
||||
"note_or_missing": 1
|
||||
}
|
||||
},
|
||||
"pum_form_counts": {
|
||||
"forest": {
|
||||
"requirement": 279,
|
||||
"coefficient": 47,
|
||||
"reference": 99,
|
||||
"productivity": 33,
|
||||
"undetermined": 0
|
||||
},
|
||||
"const": {
|
||||
"requirement": 1206,
|
||||
"coefficient": 497,
|
||||
"reference": 437,
|
||||
"productivity": 52,
|
||||
"undetermined": 881
|
||||
}
|
||||
},
|
||||
"unspecified_7_items_resolution": {
|
||||
"confirmed_mapped": 6,
|
||||
"specification_missing": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
---
|
||||
title: 품셈 원문 전수실사 및 원가위험 종합총괄 보고서
|
||||
category: 05_원가정보
|
||||
status: verified
|
||||
last_updated: 2026-09-17
|
||||
sources:
|
||||
- resources/data_work_item_master/work_item_master_2026-01-01.json
|
||||
- resources/data_work_item_master/const_work_item_master_2026-01-01.json
|
||||
- resources/data_work_item_link/work_item_link_2026-01-01.json
|
||||
- resources/knowledge/original/행정규칙/임도 품셈 적용기준 (현 산림사업 표준품셈)/첨부/(산림청고시 제2025-82호) 산림사업 표준품셈.md
|
||||
- resources/knowledge/original/원가계산/건설공사_표준품셈/2026년_건설공사_표준품셈.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/품셈_원문표_reference_실값_35개_목록.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/건설품셈_연결공종_reference_병_진단.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/산림품셈_form_미판정_14개_원문대조_규명.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/산림품셈_결측밑수_155개_자리명세.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/산림품셈_표모양_6대유형_분류.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/연결고리_건설공종_6유형_분류.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/연결고리_건설공종_밑수꼴_분석.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/건설품셈_원문표_성격_및_밑수_분석.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/산림_건설_미명시7건_대응매핑.md
|
||||
- resources/knowledge/technical_info/01_임도/05_원가정보/현재_프로그램_미판정_목록.md
|
||||
- resources/knowledge/technical_info/01_임도/04_수량분석정보/건설품셈_활용.md
|
||||
---
|
||||
|
||||
# 품셈 원문 전수실사 및 원가위험 종합총괄 보고서
|
||||
|
||||
2026년 9월 17일 산림품셈(458개 표)과 건설품셈(2,192개 표), 그리고 산림↔건설 연결고리(64개 링크, 고유 건설 42개 절)를 대상으로 진행된 **원문 대조 전수 실사 및 감사 결과를 한 벌로 집대성한 종합 총괄 장부**이다.
|
||||
|
||||
각 세부 주제별 실사 보고서들이 상호 링크로 연결되어 있어, 본 문서를 관문(Hub)으로 삼아 모든 실사 근거와 파싱 규칙을 추적할 수 있다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 금액에 닿는 핵심 발견 (원가 왜곡·누락 위험)
|
||||
|
||||
파서의 오분류나 밑수 결측으로 인해 **실제 설계 예산에서 금액이 0원으로 누락되거나 축소·왜곡되는 4대 위험 구역**을 전수 특정하였다.
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph "금액 직결 4대 위험 구역"
|
||||
A["산림 reference 99개 중<br><b>실값 35개 (금액직결 20개)</b><br>자원축 건너뛰어 0원 누락"]
|
||||
B["건설 연결 42개 절 중<br><b>5개 절 위험 (노무·자재비 누락)</b><br>주석 내 참고 표기 병"]
|
||||
C["산림 form 미판정 14개<br><b>전부 금액 직결 대상</b><br>머리소실9·혼합3·공식1·글값1"]
|
||||
D["산림 결측 밑수 155개<br><b>금액 직결 90개</b><br>소요량 79 + 생산성 11"]
|
||||
end
|
||||
A --> E["Aislo 원가 계산 엔진<br>무결성 보장 및 파서 교정"]
|
||||
B --> E
|
||||
C --> E
|
||||
D --> E
|
||||
```
|
||||
|
||||
### 1) 산림 reference 99개 중 실은 값 35개 (금액 직결 20개)
|
||||
- **상세 보고서**: [품셈_원문표_reference_실값_35개_목록.md](품셈_원문표_reference_실값_35개_목록.md) (`.json`)
|
||||
- **위험 본질**: 파서가 테이블 레벨에서 `reference`(참고)로 오분류하여 자원 축 생성 대상에서 제외시킴으로써, 내역서 일위대가에서 **자재대·경비·노무비가 0원으로 빠지는 치명적 결함**.
|
||||
- **3대 갈래 분류**:
|
||||
1. **㉮ 금액에 바로 닿음 (임도 핵심 공종, 20개)**:
|
||||
- 자재비 직결 9개: 유로폼 자재량(F0393), 찰쌓기 콘크리트(F0410), 비탈덮기 거적(F0146) 등
|
||||
- 기계·소모품비 직결 5개: 삭도운반 동력(F0288), 임내차 연료(F0201), 기계톱 오일(F0175) 등
|
||||
- 노무비·비율단가 직결 6개: 떼붙임 인부(F0135), 목재상하차(F0197), 기계경비 인건비비율(F0039) 등
|
||||
2. **㉯ 판정·구분용 (값이나 금액 무관, 0개)**: 해당 없음.
|
||||
3. **㉰ 임도 외 산림사업에 붙음 (15개)**: 벌채 목탄·신재(F0188), 방제 약제량(F0107~F0110), 묘목굴취 소요품(F0081) 등.
|
||||
|
||||
### 2) 건설 연결 42개 절 중 "노무비·자재비 축소 및 0원 위험" 5개 절
|
||||
- **상세 보고서**: [건설품셈_연결공종_reference_병_진단.md](건설품셈_연결공종_reference_병_진단.md) (`.json`)
|
||||
- **위험 본질**: 연결고리 확정 건설 공종 42개 절 중 **37개 절은 정상**이나, **5개 절에서 산림과 동일한 "주석 잠입 자재량 누락 병"이 발견**됨. 본체 표에는 노무비만 적고, 주석 `[주]`에 "참고하여 적용한다"며 자재량·손료·가산품을 분리해 두어 파서가 건너뜀.
|
||||
- **5대 위험 표 명세**:
|
||||
1. **공통 6-3-9 지수판**: PVC지수판 1.04m, 용접봉 0.042kg, 철선 0.21kg 누락 $\rightarrow$ **자재비 0원 위험**
|
||||
2. **토목 1-6-6 포장줄눈절단**: 다이아몬드 휠 날 마모 감모율 손료 누락 $\rightarrow$ **소모품비 0원 위험**
|
||||
3. **공통 3-3-6 대규모 암발파**: 에멀젼폭약(0.25~0.35kg/㎥), 뇌관 소요량 누락 $\rightarrow$ **화약대 0원 위험**
|
||||
4. **공통 1-2-7 7호 화물차 적재량**: 토사(9.4㎥), 깬돌(7.5㎥) 덤프 환산표 누락 $\rightarrow$ **덤프 운반비 계산 불가(0원)**
|
||||
5. **공통 6-1-1 레디믹스콘크리트**: 인력 슈트타설(0.05인 가산) 및 산악 소운반(10~20% 할증) 누락 $\rightarrow$ **노무비 축소 위험**
|
||||
|
||||
### 3) 산림 form 미판정 14개 표 전수 규명 (전부 금액 대상)
|
||||
- **상세 보고서**: [산림품셈_form_미판정_14개_원문대조_규명.md](산림품셈_form_미판정_14개_원문대조_규명.md) (`.json`)
|
||||
- **진단 결과**: 토목·임도 시공량 및 자원량에 직결되나 표 모양 신호 혼선으로 보류되었던 14개 표를 원문 대조로 완전 규명함.
|
||||
- **머리 소실 9개**: 막갈이(F0140)·흙부수기(F0141)·돌자갈치우기(F0142)·VR관(F0346) 등 2단 헤더 복원, 드론운반(F0322)·인력운반(F0323) 1행 가로 룩업 테이블 복원, 한중시후카(F0333) 복합축 복원, 브레이커계수(F0248) coefficient 승격.
|
||||
- **혼합 행렬 3개**: 천연림수확(F0169, L3369에서 인공림과 분기), 10종자재운반(F0304, 자재 10종×거리 10구간 피벗 정규화), 펌프카타설(F0356, 슬럼프×콘크리트 기준시공량 연동).
|
||||
- **공식 1개 (F0257)**: 콘크리트 줄눈 물운반 일일량 산정식($N, Q$)과 5개 고정 변수 대입식 규명.
|
||||
- **글값 1개 (F0349)**: 파형강관 관부설 비고란의 `별산`($\rightarrow$ 자재대 별도계상 플래그), `필요시적용`($\rightarrow$ 6m당 1EA 조건부 가산 플래그) 보존 처리 규칙 확정.
|
||||
|
||||
### 4) 산림 결측 밑수 155개 자리 명세 (금액 직결 90개)
|
||||
- **상세 보고서**: [산림품셈_결측밑수_155개_자리명세.md](산림품셈_결측밑수_155개_자리명세.md) (`.json`)
|
||||
- **규명 결과**: 1차 결측 후보 256개 표 중 무차원 계수·서식 101개를 제외한 실질 결측 155개의 원문 위치를 전수 특정함.
|
||||
- **본문 윗줄 괄호 명시**: 48개 표 (`(100㎡당)`, `(km당)`, `(1공당)` 등 단독 행)
|
||||
- **표머리 헤더 내부 명시**: 107개 표 (`단위: m`, `수량(인/100m)` 등)
|
||||
- **금액 직결 우선순위**: 155개 중 **소요량(`requirement`) 79개 + 생산성(`productivity`) 11개 = 90개 표**가 직접 곱셈 밑수이므로 파서 우선 수거 대상임.
|
||||
|
||||
---
|
||||
|
||||
## 2. 구조 및 스키마 실사에서 드러난 위험·왜곡 주의점
|
||||
|
||||
원문 목차와 단위 체계 실사에서 확인된 5대 구조적 불일치 및 왜곡 요인이다.
|
||||
|
||||
### 1) 목차 오기 둘 (원문 목차와 본문 절 번호 불일치)
|
||||
- **근거**: 커밋 `1de5c8ab` (`fix(b08): 공종 축 목차 오기 둘을 본문 절 번호로`)
|
||||
- **오기 내역 및 정정**:
|
||||
1. 목차 `12-17-2. 무근진동기 제외` $\rightarrow$ 본문 실제 절 번호는 **`12-17-3`**
|
||||
2. 목차 `12-24-1. 지수판 설치` $\rightarrow$ 본문 실제 절 번호는 **`12-27-1`**
|
||||
- **영향 및 조치**: 목차 번호만으로 파싱할 경우 원문 표(F0363, F0364, F0371, F0375)가 엉뚱한 부모에 붙어 orphan(고아표)이 발생하므로, 목차가 아닌 **본문 절 제목과 원문 줄(line)을 정본으로 삼아 트리를 조립**함 (`orphan 17개 $\rightarrow$ 15개`로 축소).
|
||||
|
||||
### 2) 표면마무리 100배 차이 (단위 스케일 불일치)
|
||||
- **근거**: [건설품셈_원문표_성격_및_밑수_분석.md](건설품셈_원문표_성격_및_밑수_분석.md), [현재_프로그램_미판정_목록.md](현재_프로그램_미판정_목록.md) §2
|
||||
- **비교**:
|
||||
- **산림품셈 12-2**: 미장공 `0.34인 / ㎡당`
|
||||
- **건설품셈 공통 6-1-3**: 미장공 `0.34인 / 100㎡당`
|
||||
- **치명적 위험**: 숫자 수치(`0.34`)는 완전히 동일하지만 **밑수 단위가 100배 차이**남. 이름과 수치만 보고 산림과 건설을 자동 매핑할 경우 **노무비가 100배 과다 또는 과소 계상**되는 대형 사고가 발생함 $\rightarrow$ **확정 차단(연결 금지)** 유지.
|
||||
|
||||
### 3) 뿌리제거 4.7배 왜곡 (작업 방식 및 단위 차이)
|
||||
- **근거**: [현재_프로그램_미판정_목록.md](현재_프로그램_미판정_목록.md) §2
|
||||
- **비교**:
|
||||
- **산림품셈 9-21 (벌근)**: 인력/기계 소밀도별 `0.80 / 1.01 / 1.22 hr / 본당`
|
||||
- **건설품셈 공통 3-9-2 (뿌리뽑기)**: 굴착기(0.7㎥)+그래플 `3.76 hr / 1,000㎡당`
|
||||
- **위험**: 산림의 본당 작업과 건설의 면적당(1,000㎡) 작업은 산림 현장의 수목 밀도 차이로 인해 직접 치환 시 **최소 4.7배 이상의 단가 왜곡**이 발생함 $\rightarrow$ 산림품셈 고유 품을 정본으로 확정.
|
||||
|
||||
### 4) 부문마다 장 번호 1부터 리셋 (코드 충돌 방지)
|
||||
- **근거**: [건설품셈_활용.md](../04_수량분석정보/건설품셈_활용.md) §3.6, [건설품셈_원문표_성격_및_밑수_분석.md](건설품셈_원문표_성격_및_밑수_분석.md) §3
|
||||
- **구조**: 산림품셈은 단일 14개 장(`FP-01` ~ `FP-14`)이나, 건설품셈은 **5개 부문(공통·토목·건축·기계·유지관리)마다 제1장부터 장 번호가 다시 시작**함.
|
||||
- 예: `1-1-1` 절이 공통(적용기준), 토목(포장공사), 건축(적용범위)에 각각 독립 존재함.
|
||||
- **파서 규칙**: 건설 공종 및 표 ID 생성 시 반드시 **부문 접두어(`C_COM`, `C_CIV`, `C_ARC`, `C_MEC`, `C_MNT`)**를 부여하여 코드 충돌을 방지함.
|
||||
|
||||
### 5) 총칙 범위와 공종 경계 (엔진 분리 원칙)
|
||||
- **근거**: `axis_policy.json`, [건설품셈_활용.md](../04_수량분석정보/건설품셈_활용.md) §3.6
|
||||
- **영역별 정의**:
|
||||
- **산림 총칙**: 제1장(적용기준) + 제2장(소요재료 및 기계손료). 공종 목록에선 감추더라도 단위·할증·연료·손료계수는 원가 엔진이 읽어야 하므로 보존.
|
||||
- **건설 공통 제1장**: 37줄·46표 전체가 순수 규정(총칙).
|
||||
- **건설 공통 제8장 (351개 표)**: 건설기계 경비 표로, 시공능력 $Q$ 공식 및 기계손료 계수가 결합되어 있어 별도의 기계 계산 엔진 파이프라인으로 분리.
|
||||
- **건설 유지관리 제1장 (40개 표)**: '공통'이라는 이름이 붙어 있으나 실무상 수목관리·시설물유지 공종 표이므로 이름만 보고 총칙으로 배제하지 않음.
|
||||
|
||||
---
|
||||
|
||||
## 3. 다음 판 구현 지도 (스키마·파서 엔진 아키텍처)
|
||||
|
||||
다음 개발 단계에서 파서 엔진이 표준품셈 전체 표를 자동 해석할 수 있도록 정리한 기술 지도이다.
|
||||
|
||||
### 1) 산림 requirement 279개 표의 6대 표 모양 분류
|
||||
- **상세 보고서**: [산림품셈_표모양_6대유형_분류.md](산림품셈_표모양_6대유형_분류.md) (`.json`)
|
||||
- **분류 통계**:
|
||||
|
||||
| 유형 | 명칭 | 표 수 | 비율 | 파싱 전략 및 특징 |
|
||||
|---|---|---:|---:|---|
|
||||
| **1형** | **세로 단일자원형** | 93개 | 33.3% | 단일 자원(보통인부 등)에 조건이 행으로 전개 $\rightarrow$ 단일 룩업 |
|
||||
| **2형** | **세로 자원혼합형 (작업조형)** | 133개 | 47.7% | 직종·장비·자재가 세로로 나열 $\rightarrow$ **1형+2형 합산 226개(81%)로 전체의 주류** |
|
||||
| **3형** | **가로 직종 열 전개형** | 20개 | 7.2% | 직종명이 열 헤더로 가로 전개 $\rightarrow$ 피벗 필요 |
|
||||
| **4형** | **가로 조건 매트릭스형** | 7개 | 2.5% | 2축 조건 매트릭스(거리×토질 등) $\rightarrow$ 2차원 배열 매핑 |
|
||||
| **5형** | **좌우 2단 병렬형** | 4개 | 1.4% | 좌우 두 표가 지면 절약형으로 병렬 결합 $\rightarrow$ 좌우 분할 파싱 |
|
||||
| **6형** | **⚠ 모양이 섞인 복합 표** | 22개 | 7.9% | 다단 헤더, 조건 축 혼합 등 **가장 깨지기 쉬운 고위험군 (전용 스키마 필요)** |
|
||||
|
||||
### 2) 밑수 꼴 4대 패턴 통계 및 파서 규칙
|
||||
- **상세 보고서**: [연결고리_건설공종_밑수꼴_분석.md](연결고리_건설공종_밑수꼴_분석.md), [건설품셈_원문표_성격_및_밑수_분석.md](건설품셈_원문표_성격_및_밑수_분석.md)
|
||||
- **비교 분석**:
|
||||
|
||||
| 밑수 꼴 | 산림품셈 (458표) | 건설품셈 (2,192표) | 파서 수거 전략 |
|
||||
|---|---:|---:|---|
|
||||
| **본문 윗줄 괄호** | 48개 (10.5%) | **1,034개 (47.2%)** | 표 직전 행(`source_line - 1`)에서 `(단위: ...당)` 정규식 탐색 (건설 70% 적중) |
|
||||
| **표머리 헤더 내부** | 107개 (23.4%) | **446개 (20.3%)** | 헤더 셀 내부 텍스트 `단위:`, `인/...` 정규식 탐색 |
|
||||
| **무차원 / 서식** | 101개 (22.1%) | **711개 (32.4%)** | 기계손료율·할증률 등 곱셈 밑수가 없는 정상 표 (`basis = dimensionless`) |
|
||||
| **주석([주]) 기재 / 결측** | 202개 (44.0%) | 1개 (0.0%) | 산림은 주석 기재 빈발, 건설은 본문 윗줄 집중 |
|
||||
|
||||
### 3) 산림 vs 건설 원문 표 성격(`pum_form`) 전수 집계 대조표
|
||||
|
||||
| 성격 (`pum_form`) | 산림품셈 (458개) | 건설품셈 (2,192개) | 스키마 취급 규칙 |
|
||||
|---|---:|---:|---|
|
||||
| **소요량 (`requirement`)** | 279개 (60.9%) | 1,206개 (55.0%) | 일위대가 직접 노무·자재·기계 투입량 |
|
||||
| **계수·손료 (`coefficient`)** | 47개 (10.3%) | 497개 (22.7%) | 기계손료율, 할증률, 시공능력 $Q$ 계수 |
|
||||
| **참고·규정 (`reference`)** | 99개 (21.6%) | 437개 (19.9%) | 일반 적용기준, 서식, 규정 안내 (단, 실값 35개 제외) |
|
||||
| **시공능력 (`productivity`)** | 33개 (7.2%) | 52개 (2.4%) | 기계 및 인력 시공능력 산정 공식 |
|
||||
| **미판정 (`undetermined`)** | 14개 $\rightarrow$ **0개 (완전 규명)** | 881개 (임도 대상 0개) | 산림 14개 전수 해소 완료 |
|
||||
|
||||
### 4) 산림-건설 미명시 7건 대응 규명
|
||||
- **상세 보고서**: [산림_건설_미명시7건_대응매핑.md](산림_건설_미명시7건_대응매핑.md) (`.json`)
|
||||
- **결과**: 산림 원문에서 절 번호 없이 "건설품셈에 따른다"고 한 7건 중 **확정 6건** 매핑(철근 현장가공, 거푸집 조립, 비탈면 보호 등) 및 **1건 미수록(1톤 방제차량 손료 규격 부재)** 규명 완료.
|
||||
|
||||
---
|
||||
|
||||
## 4. 상호 참조 링크 색인표 (관련 파일 11종 연결 지도)
|
||||
|
||||
본 종합 총괄 보고서와 연동되는 기술정보DB 세부 문서 및 원본 JSON 파일 색인표이다.
|
||||
|
||||
| 번호 | 문서 파일명 | JSON 데이터 파일명 | 주요 핵심 내용 |
|
||||
|:---:|---|---|---|
|
||||
| **1** | [품셈_원문표_reference_실값_35개_목록.md](품셈_원문표_reference_실값_35개_목록.md) | `품셈_원문표_reference_실값_35개_목록.json` | 산림 reference 99개 중 실값 35개(금액 직결 20개) 전수 명세 |
|
||||
| **2** | [건설품셈_연결공종_reference_병_진단.md](건설품셈_연결공종_reference_병_진단.md) | `건설품셈_연결공종_reference_병_진단.json` | 연결 42개 절 중 5개 위험 절(지수판·줄눈·암발파·덤프·레미콘) 규명 |
|
||||
| **3** | [산림품셈_form_미판정_14개_원문대조_규명.md](산림품셈_form_미판정_14개_원문대조_규명.md) | `산림품셈_form_미판정_14개_원문대조_규명.json` | 미판정 14개 표(머리소실9·혼합3·공식1·글값1) 원문 헤더 및 복원 규칙 |
|
||||
| **4** | [산림품셈_결측밑수_155개_자리명세.md](산림품셈_결측밑수_155개_자리명세.md) | `산림품셈_결측밑수_155개_자리명세.json` | 결측 155개 표(본문위48·표머리107, 금액직결 90개) 자리 및 규칙 |
|
||||
| **5** | [산림품셈_표모양_6대유형_분류.md](산림품셈_표모양_6대유형_분류.md) | `산림품셈_표모양_6대유형_분류.json` | 산림 requirement 279개 표 6대 모양 분류 및 복합 22개 표 명세 |
|
||||
| **6** | [연결고리_건설공종_6유형_분류.md](연결고리_건설공종_6유형_분류.md) | `연결고리_건설공종_6유형_분류.json` | 연결 확정 건설 공종 22개 절 6대 유형 및 작업조/일당시공량 규칙 |
|
||||
| **7** | [연결고리_건설공종_밑수꼴_분석.md](연결고리_건설공종_밑수꼴_분석.md) | `연결고리_건설공종_밑수꼴_분석.json` | 연결 확정 건설 공종 42개 절 밑수 꼴(윗줄 19개·86.4%) 실사 |
|
||||
| **8** | [건설품셈_원문표_성격_및_밑수_분석.md](건설품셈_원문표_성격_및_밑수_분석.md) | - | 건설 원문 2,192개 표 전수 실사 및 산림 대비 5대 구조 차이점 |
|
||||
| **9** | [산림_건설_미명시7건_대응매핑.md](산림_건설_미명시7건_대응매핑.md) | `산림_건설_미명시7건_대응매핑.json` | 미명시 7건 실측 매핑 (확정 6건, 규격 미수록 1건 정밀 사유) |
|
||||
| **10** | [현재_프로그램_미판정_목록.md](현재_프로그램_미판정_목록.md) | - | 프로그램 차원의 연결고리·공종축·표판독 미판정 감사 총괄 |
|
||||
| **11** | [건설품셈_활용.md](../04_수량분석정보/건설품셈_활용.md) | - | 산림 대비 건설품셈 보완 역할 및 5부문 45장 연계 총람 |
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
| 트리 | 그룹 | 상태 |
|
||||
|---|---|---|
|
||||
| 01_임도/ | 01_계획노선 · 02_상세설계 · 03_계산정보 · 04_수량분석정보 · 05_원가정보 | 58문서(목록 기준, draft) |
|
||||
| 01_임도/ | 01_계획노선 · 02_상세설계 · 03_계산정보 · 04_수량분석정보 · 05_원가정보 | 63문서(목록 기준, draft) |
|
||||
| 02_사방댐/ | 01_대상지_타당성평가 · 02_상세설계 · 03_계산정보 · 04_수량분석정보 · 05_원가정보 | 15문서 draft (2026-08-11) |
|
||||
|
||||
## 01_임도/01_계획노선 — 임도망·노선계획 영역 (프로그램 반영 2027 예정, 문서 수립은 현재 진행)
|
||||
@@ -122,6 +122,11 @@
|
||||
| 01_임도/05_원가정보/산림품셈_결측밑수_155개_자리명세.md | 산림품셈 결측 밑수 256개 실측 — 무차원 101개 제외 실채움 155개(본문 윗줄 48·표머리 헤더 107) 전수 원문 위치 및 파싱 규칙 명세서 | 산림사업 표준품셈 2025-82호 (2026-09-17) | draft |
|
||||
| 01_임도/05_원가정보/연결고리_건설공종_6유형_분류.md | 임도-건설 확정 연결 64개 링크(고유 건설 42개 절) 스키마 분석 — 공종 소요량 22개 절 6대 유형(세로단일 6·세로혼합 9·가로직종 3·가로매트릭스 3·복합 1) 분류, 일당시공량 작업조 나눗셈 규칙 및 산림 대비 3대 구조 차이점 명세 | 국토부 건설공사 표준품셈 2026년판 및 연결고리 마스터 실사 (2026-09-17) | draft |
|
||||
| 01_임도/05_원가정보/품셈_원문표_reference_실값_35개_목록.md | 산림품셈 reference(참고) 99개 표 전수 실사 — 실은 자재비·노무비·기계경비에 직접 닿는 실값 35개(직접자원 15·유류소모품 5·비율단가 5·약제 5·계수 5) 전수 명세, 누락된 금액 분석 및 4대 오분류 원인 규명 | 산림사업 표준품셈 2025-82호 (2026-09-17) | draft |
|
||||
| 01_임도/05_원가정보/연결고리_건설공종_밑수꼴_분석.md | 임도 연결 확정 건설 공종 42개 절 밑수 꼴 전수 실사 — 소요량 22개 절 중 본문 윗줄 19개(86.4%)·표머리 2개·소제목 1개 및 무차원 20개 분류, 작업조 일당시공량 나눗셈 및 윗줄 단독행 탐색 파서 규칙 명세 | 국토부 건설공사 표준품셈 2026년판 및 연결고리 마스터 실사 (2026-09-17) | draft |
|
||||
| 01_임도/05_원가정보/건설품셈_연결공종_reference_병_진단.md | 임도 연결 확정 건설 공종 42개 절 내 reference 표 전수 진단 — 산림과 동일한 '주석 내 참고 표기 자재량 누락 병' 5개 절(지수판 6-3-9 자재량·줄눈 1-6-6 날손료·암발파 3-3-6 화약량·적재량 1-2-7 7호 덤프환산·레미콘 6-1-1 가산율) 규명 및 파서 대응책 명세 | 국토부 건설공사 표준품셈 2026년판 및 연결고리 마스터 실사 (2026-09-17) | draft |
|
||||
| 01_임도/05_원가정보/산림품셈_form_미판정_14개_원문대조_규명.md | 산림품셈 form 미판정(undetermined) 14개 표 전수 원문 실사 규명 — 머리 소실 9개(막갈이 등 2단헤더/1행 룩업 복원)·혼합 행렬 3개(천연림 수확/10종자재 피벗/펌프카)·공식 1개(물운반 파라미터)·글값 1개(파형강관 별산/필요시적용 플래그) 명세 | 산림사업 표준품셈 2025-82호 (2026-09-17) | verified |
|
||||
| 01_임도/05_원가정보/품셈_원문_전수실사_및_원가위험_종합총괄.md | 2026-09-17 산림·건설 품셈 및 연결고리 전수 실사 종합 총괄 보고서 — 금액 직결 4대 위험(reference 실값 20·건설 노무비 위험 5·미판정 14·밑수 155), 5대 구조 왜곡(목차오기·표면마무리 100배·뿌리 4.7배 등), 6유형·밑수 지도 및 관련 11문서 상호 연결 총괄 | 산림사업 표준품셈 & 건설공사 표준품셈 2026 전수 실사 집약 (2026-09-17) | verified |
|
||||
| 01_임도/05_원가정보/품셈_실사_목차.md | 2026-09-17 품셈 실사 상호 참조 목차(Index) 문서 — 금액에 닿는 발견(4건)·구조에서 드러난 것(5건)·다음 판 지도(6건)의 파일 위치·동반 JSON·핵심 요약만 간결하게 가리키는 관문 장부 | 기술정보DB 원가정보 실사 문서 11종 색인 (2026-09-17) | verified |
|
||||
|
||||
|
||||
## 02_사방댐 — 사방댐 설계자동화 기술문서
|
||||
|
||||
@@ -45,7 +45,10 @@ MASTER = OUT_DIR / "work_item_master_2026-01-01.json"
|
||||
#: 2026-09-17 랩탑 메인 — 목차 오기 둘을 본문 번호로 바로잡아(브레인 지시) **네 줄만** 바뀌어 새로 뜸
|
||||
#: (옛 f8b8fba1…). 네 줄 모습은 `test_목차_오기는_본문_번호로_바로잡고_열쇠는_그대로` 가 잼 ·
|
||||
#: 미판정·밑수 목록 파일은 한 글자도 안 바뀜.
|
||||
BASELINE_WORK_ITEMS_SHA = "be88f730b325c290012e5a2a79ad593ce5a74ffd82464226857191fefe6647e3"
|
||||
#: 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 = "2accafe5e366c32eb6e95123642b4330e28537b2199dee851247e996fcd839da"
|
||||
|
||||
#: 열쇠 작업이 새로 얹은 칸. 지문을 잴 때만 떼어낸다.
|
||||
ADDED_FIELDS = (
|
||||
@@ -273,7 +276,7 @@ def test_갈래에도_불변_열쇠가_있다(master: dict) -> None:
|
||||
assert re.fullmatch(r"\d{2}", v["variant_key"]), v
|
||||
keys.append(f"{it['work_item_key']}#{v['variant_key']}")
|
||||
pairs.append((v["name"], v["name_clean"]))
|
||||
assert len(keys) == 335 # 갈래 수
|
||||
assert len(keys) == 332 # 갈래 수 — 헛단위 13-3 갈래 3 뺌(335 → 332 · 2026-09-17 · 장부 번호는 남음)
|
||||
assert len(set(keys)) == len(keys) # 겹침 0
|
||||
# 한 공종 안에서 번호는 1부터 빠짐없이
|
||||
for it in items:
|
||||
@@ -282,7 +285,8 @@ def test_갈래에도_불변_열쇠가_있다(master: dict) -> None:
|
||||
# 이름 칸 둘 — 원문은 손대지 않고, 다듬은 것이 따로
|
||||
raw = [it.get("variant_keys") or [] for it in items]
|
||||
assert [n for it in items for n in (it.get("variant_keys") or [])] == [p[0] for p in pairs]
|
||||
assert sum(1 for a, b in pairs if a != b) == 14 # 자간·물결표가 다듬어진 줄
|
||||
# 자간·물결표가 다듬어진 줄 — 14 → 70(2026-09-17 한 글자 낱말 자간 붙이기 「메 붙 임」→「메붙임」 · 열쇠는 그대로)
|
||||
assert sum(1 for a, b in pairs if a != b) == 70
|
||||
assert raw # 원문 목록은 그대로 남아 있다
|
||||
|
||||
|
||||
@@ -314,7 +318,7 @@ def test_갈래_문자열이_열쇠라_흔들림을_못박음(master: dict) -> N
|
||||
import collections
|
||||
|
||||
keys = [k for it in master["work_items"] for k in (it.get("variant_keys") or [])]
|
||||
assert len(keys) == 335
|
||||
assert len(keys) == 332 # 2026-09-17 헛단위 13-3 갈래 3 뺌(335 → 332)
|
||||
tilde = collections.Counter(ch for k in keys for ch in k if ch in "∼~")
|
||||
assert tilde == {"∼": 26, "~": 8}, "물결표 쓰임이 바뀜 — 열쇠가 갈렸는지 볼 것"
|
||||
squeezed = collections.defaultdict(set)
|
||||
|
||||
@@ -38,6 +38,7 @@ def _same_except_time(fresh: dict, saved: dict) -> None:
|
||||
for doc in (fresh, saved):
|
||||
doc.pop("generated_at")
|
||||
doc["stats"].pop("keys_newly_issued") # 첫 뽑기만 발급 · 다시 뽑으면 0
|
||||
doc["stats"].pop("variant_keys_newly_issued", None) # 갈래 열쇠도 같음
|
||||
assert fresh == saved
|
||||
|
||||
|
||||
@@ -149,3 +150,42 @@ def test_산림을_고르는_쪽이_건설_파일을_안_집음() -> None:
|
||||
|
||||
assert load_master()["dataset_id"] == "work_item_master_forest"
|
||||
assert not list(OUT.glob("work_item_master_*const*.json"))
|
||||
|
||||
|
||||
def test_건설_갈래도_이름을_다듬어도_같은_열쇠(master: dict) -> None:
|
||||
"""④ 건설 갈래 펴기(2026-09-17) — 갈래 열쇠는 번호(`CW-00063#01`) · 자간·물결표를 손질해도 새로 안 남."""
|
||||
import copy
|
||||
|
||||
from B08_Quantity.B08_Quantity_Build_WorkItemMaster_Keys import (
|
||||
assign_variant_keys,
|
||||
load_registry,
|
||||
)
|
||||
|
||||
items = master["work_items"]
|
||||
spread = [it for it in items if it.get("variants")]
|
||||
assert len(spread) > 100 and sum(len(it["variants"]) for it in spread) > 400
|
||||
registry = load_registry(const.CONST_KEY_REGISTRY, const.KEY_PREFIX)
|
||||
nodes = copy.deepcopy(spread)
|
||||
for node in nodes: # 사람이 이름을 다듬은 날 — 자간 한 칸 · 물결표 다른 벌
|
||||
node["variant_keys"] = [
|
||||
" ".join(k.split()).replace("∼", "~") for k in node["variant_keys"]
|
||||
]
|
||||
assert assign_variant_keys(nodes, registry) == [] # 새 번호 0
|
||||
for before, after in zip(spread, nodes):
|
||||
assert [v["variant_key"] for v in after["variants"]] == [
|
||||
v["variant_key"] for v in before["variants"]
|
||||
]
|
||||
|
||||
|
||||
def test_자간_다듬기는_진짜_띄어쓰기를_안_붙임() -> None:
|
||||
from B08_Quantity.B08_Quantity_Build_WorkItemMaster_Keys import tidy_spacing
|
||||
|
||||
assert tidy_spacing("측 량") == "측량"
|
||||
assert tidy_spacing("평 규 준 틀") == "평규준틀"
|
||||
assert tidy_spacing("굴 삭 기 (무한궤도)") == "굴삭기 (무한궤도)"
|
||||
assert tidy_spacing("메 붙 임 · 깬 돌 · 뒷길이 25㎝") == "메붙임 · 깬돌 · 뒷길이 25㎝"
|
||||
assert tidy_spacing("토목부문 › 측 량 › 기준점 측량") == "토목부문 › 측량 › 기준점 측량"
|
||||
assert (
|
||||
tidy_spacing("그 외 자재의 운반품셈") == "그 외 자재의 운반품셈"
|
||||
) # 한 글자 낱말 둘은 진짜 띄어쓰기
|
||||
assert tidy_spacing("호박돌 및 야면석 · 뒷길이 25㎝") == "호박돌 및 야면석 · 뒷길이 25㎝"
|
||||
|
||||
@@ -4,8 +4,12 @@
|
||||
뒤 줄(「무근진동기 제외」)이 앞 표(F0363 「철근, 펌프카 0-15m」)를 물고, 진짜 표(F0364)는 orphan 으로 사라졌음.
|
||||
표 번호로는 안 잡힘(번호는 같았음) — **표 절 제목의 이름이 다른 줄 이름과 똑같은데 그 줄이 아닌 데 붙음**이 그 꼴.
|
||||
⚠ 이름 글자만 조금 다른 자리(목차 「깍기」 · 본문 「깎기」)는 판정하지 않음 — 번호·이름이 딴 줄을 가리킬 때만.
|
||||
⚠ 부록 사례 표 7(F0455·F0456·F0472~F0476)은 번호가 본문 절과 겹쳐 그 절에 붙어 있으나 모두 참조형 —
|
||||
일위대가로 안 읽혀 금액 무관(브레인 전수 판정). 자리 판정은 데스크탑 서브 몫.
|
||||
⚠ 2026-09-17 둘째 — **헛단위**(목록에 없는 공종이 섬 · 서브 훑기 · 브레인):
|
||||
· [주] 인용 「‘13-3. 기초다짐 및 뒤채움’ 항을 적용한다」를 제목으로 읽어 표 셋(F0405·F0406·F0418)이 13-3 에 붙음
|
||||
· 부록 사례 표 일곱(F0455·F0456·F0472~F0476)이 본문 절 번호와 겹쳐 4-1·4-2 따위에 붙음
|
||||
⇒ 인용은 제목이 아님 · 번호만 겹치고 이름이 딴판이면 못 붙인 표 목록으로.
|
||||
단가표 대조(677 제목 전후) — 헛단위 B-FP-13-03 셋이 빠지고 **B-FP-13-05-02 가 메붙임+찰붙임 합으로 약 두 배**
|
||||
(쓰는 곳 0 · `KnownGaps` 에 「쓰면 안 됨」 표시 · 갈래 가르기 대기). 나머지 단가 한 원도 안 바뀜.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -62,3 +66,35 @@ def test_사라진_표는_목록으로_남음(master: dict) -> None:
|
||||
master["stats"]["tables_attached"] + len(master["orphan_tables"])
|
||||
== master["stats"]["tables_total"]
|
||||
)
|
||||
|
||||
|
||||
APPENDIX = {"F0455", "F0456", "F0472", "F0473", "F0474", "F0475", "F0476"}
|
||||
|
||||
|
||||
def test_인용은_제목이_아니라_표가_제_절에_붙음(master: dict) -> None:
|
||||
by_code = {it["work_item_code"]: it for it in master["work_items"]}
|
||||
tables = lambda code: [t["pum_table_id"] for t in by_code[code]["tables"]] # noqa: E731
|
||||
assert tables("FP-13-03") == [] # 헛단위 — 표 없는 묶는 마디로
|
||||
assert {"F0405", "F0406"} <= set(tables("FP-13-04-01"))
|
||||
assert "F0418" in tables("FP-13-05-02")
|
||||
|
||||
|
||||
def test_부록_사례_표는_번호가_겹쳐도_안_붙고_목록으로(master: dict) -> None:
|
||||
attached = {t["pum_table_id"] for it in master["work_items"] for t in it["tables"]}
|
||||
assert not attached & APPENDIX
|
||||
assert APPENDIX <= {o["pum_table_id"] for o in master["orphan_tables"]}
|
||||
by_code = {it["work_item_code"]: it for it in master["work_items"]}
|
||||
assert by_code["FP-04-01"]["tables"] == [] and by_code["FP-04-02"]["tables"] == []
|
||||
|
||||
|
||||
def test_이름_닮음_잣대() -> None:
|
||||
from B08_Quantity.B08_Quantity_Build_WorkItemMaster import _is_section_title, title_names_node
|
||||
|
||||
assert not _is_section_title("13-3. 기초다짐 및 뒤채움’ 항을 적용한다.", {})
|
||||
assert _is_section_title(
|
||||
"2-9. 어린나무가꾸기, (1) 치수림단계 (제거대상 피복도 ‘소’, 가지치기)", {}
|
||||
)
|
||||
assert not title_names_node("4-1. 소나무재선충병방제", {"name": "수확베기"})
|
||||
assert title_names_node("9-19-2. 비탈면 고르기(암절취)", {"name": "비탈면 면고르기(암절취)"})
|
||||
assert title_names_node("12-13. 면벽", {"name": "면벅"})
|
||||
assert title_names_node("9-7-1. T=30㎝ 미만", {"name": "T=30cm 미만"})
|
||||
|
||||
@@ -85,6 +85,9 @@ def test_돌쌓기_경사는_도면에도_닿는다고_알림(client: TestClient
|
||||
"""아홉 중 하나만 수량 말고 **그림**에도 닿음 — 화면이 사전을 가지면 문구가 두 벌(브레인)."""
|
||||
slope = _get(client, "masonry_slope", size=1)["notice"]
|
||||
assert any("횡단 도면" in line for line in slope) and len(slope) == 2
|
||||
# ⚠ 지금 상태를 먼저 — 덮개를 읽는 곳이 Z01 밖에 0(2026-09-17 브레인 「없으면 없다고」)
|
||||
assert any(line.startswith("⚠ **B06 횡단설계가 아직") for line in slope)
|
||||
assert slope[0].startswith("⚠ **아직 어디에도 안 쓰임**")
|
||||
assert all(
|
||||
not any("횡단 도면" in line for line in _get(client, kind, size=1)["notice"])
|
||||
for kind in NEW_KINDS
|
||||
|
||||
@@ -85,7 +85,8 @@ def test_트리_표_id_와_이름표_표_id_는_양쪽으로_같음(client: Test
|
||||
assert not_labelled == [], not_labelled
|
||||
assert label_only == [], label_only
|
||||
# 2026-09-17 92 → 101 — 공종 축 산출 일곱 + 갈래 열쇠 장부 표.
|
||||
assert sum(len(t) for t in files.values()) == LABELS["counts"]["tables"] == 101
|
||||
# 2026-09-17 101 → 102 — 건설 열쇠 장부에도 갈래 표(건설 갈래 펴기 ④).
|
||||
assert sum(len(t) for t in files.values()) == LABELS["counts"]["tables"] == 102
|
||||
for entry in LABELS["files"]: # 이름이 실제로 붙음 · 줄 수도 이름표 셈과 같음
|
||||
named = {t["key"]: t for t in entry["tables"]}
|
||||
for t in files[entry["file_id"]]:
|
||||
|
||||
@@ -38,7 +38,9 @@ def _get(client: TestClient, kind: str, **params) -> dict:
|
||||
def test_산림_평평한_잎_목록과_계산_규칙(client: TestClient) -> None:
|
||||
listed = client.get("/api/master-data/base-prices").json()["kinds"]
|
||||
forest = next(i for i in listed if i["kind"] == "work_item_forest")
|
||||
assert forest["group"] == "work_item" and forest["rows"] == 627 # 갈래마다 한 줄
|
||||
assert (
|
||||
forest["group"] == "work_item" and forest["rows"] == 620
|
||||
) # 갈래마다 한 줄 · 헛단위 7줄 뺌(2026-09-17)
|
||||
# 상자 이름은 이름표 것 — 영문 키(work_item)로 뜨던 자리(2026-09-17 브레인 ①)
|
||||
assert {i["group"]: i["group_label"] for i in listed} == {
|
||||
"base_price": "기초단가",
|
||||
@@ -47,12 +49,12 @@ def test_산림_평평한_잎_목록과_계산_규칙(client: TestClient) -> Non
|
||||
}
|
||||
|
||||
table = _get(client, "work_item_forest", size=500, axis_role="") # 「전부」 — 총칙까지
|
||||
assert table["total"] == 627 and table["stats"] == {"work_items": 365, "units": 627}
|
||||
assert table["total"] == 620 and table["stats"] == {"work_items": 360, "units": 620}
|
||||
assert table["editable"] == [] and set(table["locked"]) == set(table["sortable"])
|
||||
rows = table["rows"] + _get(client, "work_item_forest", size=500, page=2, axis_role="")["rows"]
|
||||
assert len({r["@id"] for r in rows}) == 627
|
||||
assert len({r["@id"] for r in rows}) == 620
|
||||
assert (
|
||||
len({r["@key"] for r in rows}) == len({r["name"] for r in rows}) == 365
|
||||
len({r["@key"] for r in rows}) == len({r["name"] for r in rows}) == 360
|
||||
) # 잎 이름 겹침 — 경로로 풀림 · 목차 오기 바로잡아 358 → 360(12-17-2 · 12-24-1)
|
||||
by_code = {r["work_item_code"]: r for r in rows}
|
||||
assert by_code["FP-09-03-02"]["name"] == "토공 › 토사깍기 › 기계"
|
||||
@@ -74,9 +76,11 @@ def test_산림_평평한_잎_목록과_계산_규칙(client: TestClient) -> Non
|
||||
|
||||
|
||||
def test_건설_공종_축도_같은_길(client: TestClient) -> None:
|
||||
"""건설(2026-09-17 뽑음) — 부문이 뿌리라 경로가 부문부터 · 열쇠 CW- · 계산 규칙은 전부 choose_one."""
|
||||
"""건설(2026-09-17 뽑음) — 부문이 뿌리라 경로가 부문부터 · 열쇠 CW- · 계산 규칙은 전부 choose_one.
|
||||
갈래도 산림과 같은 표 읽기로 폄(④ · 공종 997 → 줄 1,293 · 갈래 열쇠 `CW-00063#01`)."""
|
||||
table = _get(client, "work_item_const", size=500, axis_role="")
|
||||
assert table["total"] == table["stats"]["work_items"] > 900
|
||||
assert table["stats"] == {"work_items": 997, "units": 1293} and table["total"] == 1293
|
||||
assert sum(1 for r in table["rows"] if "#" in r["@id"]) > 0
|
||||
rows = table["rows"]
|
||||
assert all(r["@id"].startswith("CW-") for r in rows)
|
||||
assert all(r["name"].split(" › ")[0].endswith("부문") for r in rows)
|
||||
@@ -198,7 +202,11 @@ def test_연결고리_표가_이은_줄에_연결됨_감추지_않고_표시만(
|
||||
} - confirmed
|
||||
for kind, prefix in (("work_item_const", "CW-"), ("work_item_forest", "FW-")):
|
||||
every = _get(client, kind, size=500, axis_role="")
|
||||
rows = every["rows"] + _get(client, kind, size=500, page=2, axis_role="")["rows"]
|
||||
rows = [
|
||||
row
|
||||
for page in range(1, every["total"] // 500 + 2)
|
||||
for row in _get(client, kind, size=500, page=page, axis_role="")["rows"]
|
||||
]
|
||||
assert len(rows) == every["total"] # 연결 거르기 기본은 「전부」 — 다 보임
|
||||
marked = {r["@key"] for r in rows if r["link"] == "연결됨"} # 갈래 줄은 공종 열쇠로
|
||||
listed = {r["@key"] for r in rows} # 표가 안 붙은 묶는 마디(CW-01329 따위)는 목록 밖
|
||||
@@ -248,3 +256,54 @@ def test_총칙_줄은_기본_감춤_전부를_고르면_보임(client: TestClie
|
||||
_get(client, kind, size=1, axis_role="general_provision")["total"]
|
||||
== (counts["general_provision"])
|
||||
)
|
||||
|
||||
|
||||
def test_찾기는_물결표_가운뎃점_띄어쓰기를_같게_봄(client: TestClient) -> None:
|
||||
"""원문이 물결표를 둘(∼·~)로 쓰고 자간 공백이 들쭉날쭉 — 사람이 친 「~」·붙여 쓴 이름으로도 찾힘.
|
||||
⚠ 찾기만 — 줄 값·열쇠는 원문 그대로(서브 훑기 · 브레인 2026-09-17)."""
|
||||
wavy = _get(client, "work_item_forest", size=50, q="2.1∼2.5")["total"]
|
||||
assert wavy >= 1
|
||||
assert _get(client, "work_item_forest", size=50, q="2.1~2.5")["total"] == wavy
|
||||
assert _get(client, "work_item_forest", size=50, q="2.1~2.5")["total"] == wavy
|
||||
rows = _get(client, "work_item_forest", size=50, q="2.1~2.5")["rows"]
|
||||
assert all("~" not in r["@id"] for r in rows) # 열쇠는 손질 안 함
|
||||
spaced = _get(client, "work_item_forest", size=50, q="토사 깍기", axis_role="")["total"]
|
||||
assert (
|
||||
spaced == _get(client, "work_item_forest", size=50, q="토사깍기", axis_role="")["total"] > 0
|
||||
)
|
||||
|
||||
|
||||
def test_이름_다듬기는_보일_이름만_열쇠는_그대로(
|
||||
client: TestClient, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
"""⭐ 갈래 불변 열쇠를 세운 까닭(브레인 2026-09-17) — 자간 공백(「측 량」·「평 규 준 틀」)을 다듬어도
|
||||
줄 열쇠(`FW-…#01`)가 한 글자도 안 흔들림. 다듬기를 끈 목록과 켠 목록의 열쇠를 맞댐."""
|
||||
from B08_Quantity import B08_Quantity_Build_WorkItemMaster_Keys as keys
|
||||
from Z01_MasterData import Z01_MasterData_WorkItems as work_items
|
||||
|
||||
for kind in work_items.KINDS:
|
||||
tidy = work_items.base_rows(kind)
|
||||
with monkeypatch.context() as patch:
|
||||
patch.setattr(keys, "tidy_spacing", lambda text: " ".join(str(text or "").split()))
|
||||
raw = work_items.base_rows(kind)
|
||||
assert [r["@id"] for r in tidy] == [r["@id"] for r in raw]
|
||||
if kind == "work_item_const":
|
||||
assert (
|
||||
sum(a["name"] != b["name"] for a, b in zip(tidy, raw)) > 0
|
||||
) # 실제로 다듬어진 줄이 있음
|
||||
shown = _get(client, "work_item_const", size=50, q="기준점 측량", axis_role="")["rows"]
|
||||
assert shown and all("측 량" not in r["name"] and "› 측량 ›" in r["name"] for r in shown)
|
||||
|
||||
|
||||
def test_품셈_번호는_마디마다_수로_세움(client: TestClient) -> None:
|
||||
"""글자로 세우면 「10-1」이 「2-1」 앞에 섬(서브 훑기) — 마디마다 수로."""
|
||||
rows = _get(client, "work_item_forest", size=500, sort="number", axis_role="")["rows"]
|
||||
numbers = [tuple(int(x) for x in r["number"].split("-")) for r in rows if "-" in r["number"]]
|
||||
assert len(numbers) > 300 and numbers == sorted(numbers)
|
||||
|
||||
|
||||
def test_건설_늘_빈_칸은_감춤(client: TestClient) -> None:
|
||||
"""건설은 합산형 선언이 없어 「단계 무게」가 늘 빈칸 — 감춤(산림은 보임)."""
|
||||
hidden = lambda kind: {c["key"]: c["hidden"] for c in _get(client, kind, size=1)["columns"]} # noqa: E731
|
||||
assert hidden("work_item_const")["step_weight"] is True
|
||||
assert hidden("work_item_forest")["step_weight"] is False
|
||||
|
||||
Reference in New Issue
Block a user