Merge remote-tracking branches 'origin/sub_laptop_2', 'origin/sub_laptop_3' and 'origin/sub_laptop_4' into sub_desktop_1

This commit is contained in:
2026-09-19 17:18:42 +09:00
20 changed files with 8207 additions and 136 deletions
@@ -0,0 +1,99 @@
# -*- coding: utf-8 -*-
"""글 속 계산용 수 → 그룹 계수 표 (build_소요량_건설품셈_토목.py 가 씀).
표에 붙은 주(①…)와 비고 글에서 정규식으로 수를 읽음(손으로 적지 않음). 주 한 줄마다 계수 표 하나.
"""
import re
from _md표_읽기 import R
from _토목_표 import conds_out
PCT = r"([\d.]+)%"
def clean(line):
return re.sub(r"^(비고\s*-?\s*|-\s*|[①-⑳]\s*)", "", line).strip()
def rows_of(line):
"""주 한 줄 → 계수 줄들 [(구분, 값, 단위, 딸린 칸)]."""
s = clean(line)
out = []
m = re.search(r"^(.+?)(?:는|은) (인력품|주재료비|재료비)의 " + PCT, s)
if m:
out.append((m.group(1), R(m.group(3)), "%", {"기준": m.group(2)}))
m2 = re.search(r"(블록 정밀절단\(전동절단기\)에 의한 시공이 아닌 경우) " + PCT, s)
if m2:
out.append((f"{m.group(1)}{m2.group(1)}", R(m2.group(2)), "%", {"기준": m.group(2)}))
return out
m = re.search(
r"(시공량|본 품|크레인\(시간\))(?:의|을) " + PCT + r"(?:를|까지| 범위 내에서) ?(감|가산)", s
)
if m:
out.append((s, R(m.group(2)), "%", {"기준": m.group(1), "가감": m.group(3)}))
m = re.search(r"(특별인부) (\d+)인을 감", s)
if m:
out.append((s, R(m.group(2)), "", {"기준": m.group(1), "가감": ""}))
m = re.search(r"절단품은 본 품의 " + PCT + r", 선단가공\(Beveling\) 품은 본 품의 " + PCT, s)
if m:
out.append(("금긋기 및 절단품", R(m.group(1)), "%", {"기준": "본 품"}))
out.append(("선단가공(Beveling) 품", R(m.group(2)), "%", {"기준": "본 품"}))
m = re.search(r"두께 ([\d.]+)㎝일 때 ([\d,]+)㎡당 살수량은 일반적으로 ([\d.]+)ton", s)
if m:
out.append(("살수량 기준 두께", R(m.group(1)), "", {}))
out.append(("살수량 기준 면적", R(m.group(2)), "", {}))
out.append(("살수량", R(m.group(3)), "ton", {}))
m = re.search(r"보통인부 (\d+)인기준 두께 (\d+)㎝시 ([\d,]+)㎡, 두께 (\d+)㎝시 ([\d,]+)㎡", s)
if m:
out.append(("모래 부설 일당시공량 기준 인원", R(m.group(1)), "", {"기준": "보통인부"}))
out.append((f"모래 부설 일당시공량 두께 {m.group(2)}", R(m.group(3)), "", {}))
out.append((f"모래 부설 일당시공량 두께 {m.group(4)}", R(m.group(5)), "", {}))
m = re.search(r"굴착기\(규격 ([\d.]+)㎥, 사용시간 ([\d.]+)hr\)", s)
if m:
out.append(("크레인 대체 굴착기 규격", R(m.group(1)), "", {}))
out.append(("크레인 대체 굴착기 사용시간", R(m.group(2)), "hr", {}))
m = re.search(r"호칭압력 ([\d.]+)(㎏/㎠)를 기준", s)
if m:
out.append(("호칭압력 기준", R(m.group(1)), m.group(2), {}))
m = re.search(r"강관장 ([\d.]+)m를 기준", s)
if m:
out.append(("강관장 기준", R(m.group(1)), "m", {}))
return out
def lift(chdir, text, out):
src_tabs = list(out.tables)
for t in src_tabs:
ident = t["열쇠"].split()[0]
tags = {}
for line in t[""]:
rs = rows_of(line)
if not rs:
continue
tag = "비고" if line.startswith("비고") else "" + re.match(r"[①-⑳]", line).group(0)
tags.setdefault(tag, []).extend(rs)
for tag, rs in tags.items():
cols, rows = {"": "구분 따름", "단위": ""}, []
for g, v, u, extra in rs:
rows.append({"구분": g, "": v, "단위": u, **extra})
for k in extra:
cols.setdefault(k, "")
label = f"{t['이름']} 계수 {tag}"
key = f"{ident} {label}"
if key in out.keys:
continue
out.keys.add(key)
out.tables.append(
{
"열쇠": key,
"이름": label,
"기준": "",
"출처": f"{t['출처']} {tag}",
"그룹": "계수",
"조건": conds_out(["구분"], rows),
"값칸": cols,
"": rows,
"": [],
}
)
@@ -0,0 +1,204 @@
# -*- coding: utf-8 -*-
"""토목 표 손 지정 — 칸 안에 줄이 여럿(<br>)이거나 줄마다 머리가 달라 자동으로 못 읽는 표. (build_소요량_건설품셈_토목.py 가 씀)"""
import re
from _md표_읽기 import N, R, join
from _토목_읽기 import is_num, nz
from _토목_표 import bigo_items, conds_out, crew, jn, matrix, members, rate, tpose
SPECIAL = {"1": {}, "2": {}, "6": {}}
def finish(rows, cols, bigo=(), label=None):
names = []
for r in rows:
for k in r:
if k not in names and k not in cols:
names.append(k)
return conds_out(names, rows), cols, rows, list(bigo), label
def sp(ch, key):
def deco(fn):
SPECIAL[ch][key] = fn
return fn
return deco
def lines(x):
return [p.strip() for p in x.split("<br>")]
# ── 제1장 ──────────────────────────────────────────────────────
sp("1", "1-8-9#4")(lambda t: (*tpose(t, "트럭", "작업"), None))
sp("1", "1-8-2#2")(lambda t: (*tpose(t, "형식", "크레인"), None))
sp("1", "1-8-14#2")(lambda t: (*rate(t), None))
@sp("1", "1-9-1#1")
def _(t):
R0, rows, cols = t.rows, [], {"시공량": "개소"}
heads = R0[2][5:8]
for lo, hi in ((3, 6), (6, 9)):
blk = R0[lo:hi]
c_, v = members(blk, 2, 1, 3)
cols.update(c_)
hts = lines(blk[0][4])
for j, hd in enumerate(heads):
vs = lines(blk[0][5 + j])
for i, hv in enumerate(hts):
if nz(vs[i]):
rows.append({"지주높이": hv, "지주 간격": hd, "시공량": N(vs[i]), **v})
return finish(rows, cols)
@sp("1", "1-9-1#2")
def _(t):
R0, rows, cols = t.rows, [], {"시공량": ""}
heads = [jn(x) for x in R0[2][5:9]]
for lo, hi, hrows in ((3, 6, [3]), (6, 10, [6, 7, 8, 9])):
c_, v = members(R0[lo:hi], 2, 1, 3)
cols.update(c_)
for r in hrows:
for j, hd in enumerate(heads):
if nz(R0[r][5 + j]):
rows.append(
{
"지주높이": jn(R0[r][4]),
"방음벽 개당 면적": hd,
"시공량": N(R0[r][5 + j]),
**v,
}
)
return finish(rows, cols)
@sp("1", "1-9-2#0")
def _(t):
R0, rows, cols = t.rows, [], {"시공량": "m"}
for lo, hi in ((2, 5), (5, 8)):
blk = R0[lo:hi]
c_, v = members(blk, 3, 2, 4, 1)
cols.update(c_)
sizes = lines(blk[0][5])
for j, kind in enumerate((R0[1][6], R0[1][7])):
vs = lines(blk[0][6 + j])
for i, sz in enumerate(sizes):
rows.append(
{
"형식": jn(blk[0][0]),
"규격(아래폭+높이㎜)": sz,
"구간": kind,
"시공량": N(vs[i]),
**v,
}
)
return finish(rows, cols)
@sp("1", "1-9-4#2")
def _(t):
R0, rows, notes = t.rows, [], []
for row in R0[1:]:
if join(row[0]) == "산출기준":
notes = ["산출기준 " + x[len("비고 ") :] for x in bigo_items(row[1])]
continue
d = {"구분": jn(row[0]), "단위": row[1], "수량": N(row[2])}
if nz(row[3]):
d["비고"] = jn(row[3])
rows.append(d)
return conds_out(["구분"], rows), {"수량": "단위 칸 따름", "비고": ""}, rows, notes, None
# ── 제6장 ──────────────────────────────────────────────────────
@sp("6", "6-1-1#0")
def _(t):
rows = []
for row in t.rows[2:]:
d = {"구분": jn(row[0]), "내용": jn(row[1])}
for nm, c in (("요율 품", 2), ("요율 시공량", 3)):
if nz(row[c]):
d[nm] = R(row[c].rstrip("%"))
rows.append(d)
return (
conds_out(["구분"], rows),
{"내용": "", "요율 품": "%", "요율 시공량": "%"},
rows,
[],
None,
)
def multi(t):
"""칸 안에 관경 · 시공량이 줄줄이 든 [구분 단위 수량 관경 시공량] 표."""
R0, rows, cols, bigo = t.rows, [], {}, []
unit = re.search(r"\((.*)\)", join(R0[0][4])).group(1)
cols["시공량"] = unit
blocks = []
for row in R0[1:]:
if join(row[0]) == "비고":
bigo += bigo_items(row[1])
elif nz(row[3]):
blocks.append([row])
else:
blocks[-1].append(row)
for blk in blocks:
c_, v = members(blk, 1, None, 2)
cols.update(c_)
ds, vs = lines(blk[0][3]), lines(blk[0][4])
assert len(ds) == len(vs), (t.ident, ds, vs)
for d, x in zip(ds, vs):
rows.append({"관경(㎜)": d, "시공량": N(x), **v})
return conds_out(["관경(㎜)"], rows), cols, rows, bigo, None
for k in (
"6-2-1#0",
"6-2-1#1",
"6-2-2#0",
"6-2-2#1",
"6-3-1#0",
"6-3-1#1",
"6-4-1#0",
"6-4-2#0",
"6-5-1#0",
"6-5-2#0",
"6-5-3#0",
"6-5-4#0",
"6-6-1#0",
"6-6-2#0",
):
SPECIAL["6"][k] = multi
sp("6", "6-2-2#2")(lambda t: (*rate(t), None))
sp("6", "6-5-4#1")(lambda t: (*rate(t), None))
sp("6", "6-8-5#2")(lambda t: (*rate(t), None))
sp("6", "6-8-4#2")(lambda t: (*matrix(t, "본관", "지관", "중량", "", 2), None))
sp("6", "6-7-5#0")(lambda t: (*crew(t, prefix_group=True), None))
@sp("6", "6-3-2#0")
def _(t):
R0, rows, cols = t.rows, [], {"시공량": "개소", "용접공": ""}
heads = [
(jn(R0[0][4]), jn(R0[1][4]), jn(R0[2][4])),
(None, jn(R0[1][4]), jn(R0[2][5])),
(None, jn(R0[1][6]), jn(R0[2][6])),
]
combos = [(4, "A종", "겹치기 용접"), (5, "A종", "베벨엔드용접"), (6, "B종", "겹치기 용접")]
for r in R0[3:]:
if nz(r[0]):
qty = N(r[2])
for c, a, b in combos:
if nz(r[c]):
rows.append(
{
"관경(㎜)": jn(r[3]),
"종별": a,
"용접방법": b,
"시공량": N(r[c]),
"용접공": qty,
}
)
return conds_out(["관경(㎜)", "종별", "용접방법"], rows), cols, rows, [], None
@@ -0,0 +1,194 @@
# -*- coding: utf-8 -*-
"""건설품셈 토목 제1 · 2 · 6장 md 읽기 · 표 만들기 · 쓰기 도구 (build_소요량_건설품셈_토목.py 가 씀).
값은 md 에서 읽음(손으로 적지 않음). 표 모양 다섯 갈래: 인력·장비 편성표(crew) · 줄이 관경인 납작표(flat) ·
요율 · 글 표 · 손 지정.
"""
import json
import re
from pathlib import Path
from _md표_읽기 import N, R, Raw, join, js, unesc
ROOT = Path(__file__).resolve().parents[3]
BASE = ROOT / "resources/knowledge/original/원가계산/건설공사_표준품셈/본문/02_토목부문"
DIV = "건설품셈 토목 "
NUM = r"\d[\d,]*(?:\.\d+)?"
UNITS = "인 hr 시간 ㎜ ㎡ ㎥ m % 대 회 식 일 본 개소 개 ㎏ kg ton 톤 m/일".split()
ROLE = re.compile(r"^(수량|시공량|소요일수)")
class Tab:
def __init__(self, ident, title, mok, base, rows, k):
self.ident, self.title, self.mok, self.base, self.rows, self.k = (
ident,
title,
mok,
base,
rows,
k,
)
self.notes: list[str] = []
self.pre = "" # 표 앞 글줄(별표 제목 등)
def cells(line):
return [c.strip() for c in line.strip().strip("|").split("|")]
def title_of(s):
return re.sub(r"\s*\((?:['‘’]\d\d[^)]*)\)\s*$", "", s).strip()
def read_chapter(chdir):
"""장 폴더의 항 · 표 · 주 를 차례로 읽음 → (표 목록, 항 본문 줄 사전)."""
tabs, text, order = [], {}, []
for p in sorted((next(BASE.glob(chdir + "*"))).glob("*.md")):
L = p.read_text(encoding="utf-8").split("\n")
at = [i for i, x in enumerate(L) if x.strip() == "---"]
L = L[at[1] + 1 :]
ident = title = mok = base = pre = ""
k = 0
in_note = False
i = 0
while i < len(L):
ln = L[i].rstrip()
m = re.match(r"^(#{2,4})\s+(.*)$", ln)
if m:
in_note = False
d = len(m.group(1))
if d == 3:
mm = re.match(r"^(\d+-\d+-\d+)\s+(.*)$", m.group(2))
ident, title, mok, k = mm.group(1), title_of(mm.group(2)), "", 0
order.append(ident)
text[ident] = []
elif d == 4:
mk = re.match(r"^(\d+)\.\s*(.*)$", m.group(2))
mok = title_of(mk.group(2)) if mk else title_of(m.group(2))
i += 1
continue
if not ident:
i += 1
continue
text[ident].append(ln)
if ln.startswith("|"):
j = i
rows = []
while j < len(L) and L[j].startswith("|"):
c = cells(L[j])
if not all(re.fullmatch(r":?-+:?", x) for x in c):
rows.append(c)
j += 1
b = base if re.fullmatch(r"\(.*당\)|\(m/일\)|\(.*\)", base) else ""
tabs.append(Tab(ident, title, mok, base[1:-1] if b else "", rows, k))
tabs[-1].pre = pre
k += 1
base = pre = ""
in_note = False
i = j
continue
s = ln.strip()
if s == "[주]":
in_note = True
elif in_note and s and not s.startswith(("<!--", "![")):
if re.match(r"^[①-⑳]", s):
(tabs[-1].notes if tabs and tabs[-1].ident == ident else []).append(unesc(s))
elif tabs and tabs[-1].ident == ident and tabs[-1].notes:
tabs[-1].notes[-1] += " " + unesc(s)
elif re.fullmatch(r"\(.*\)", s) and not s.startswith("(주"):
base = s
elif s.startswith("<별표>"):
pre = s
i += 1
return tabs, text, order
def unit_split(h):
"""머리 「배관공(수도)(인)」 → (이름, 단위)."""
h = join(h)
m = re.search(r"\(([^()]*)\)$", h)
if m and m.group(1) in UNITS:
return h[: m.start()].strip(), m.group(1)
return h, ""
def fill_right(row, start):
out, prev = [], ""
for c in row[start:]:
prev = c if c else prev
out.append(prev)
return out
def is_num(x):
return bool(re.fullmatch(NUM, x.strip()))
class Out:
def __init__(self):
self.tables, self.keys = [], set()
def add(
self, t, label, cond, cols, rows, *, src=None, base=None, group=None, rule=None, notes=None
):
ident = t.ident if t else src
key = f"{ident} {label}"
assert key not in self.keys, key
self.keys.add(key)
d = {
"열쇠": key,
"이름": label,
"기준": (t.base if t else "") if base is None else base,
"출처": DIV + (src or ident),
}
if group:
d["그룹"] = group
d["조건"] = cond
if rule:
d["범위규칙"] = rule
d["값칸"] = cols
d[""] = rows
d[""] = list(t.notes if (t and notes is None) else (notes or []))
self.tables.append(d)
def write(self, path):
L = ["{", ' "그룹": "소요량",', ' "원문": "건설품셈",', ' "": "2026",', ' "": [']
for ti, t in enumerate(self.tables):
L.append(" {")
keys = list(t)
for ki, k in enumerate(keys):
end = "," if ki < len(keys) - 1 else ""
v = t[k]
if k in ("", "") and v:
L.append(f" {js(k)}: [")
L += [
f" {js(x)}" + ("," if xi < len(v) - 1 else "")
for xi, x in enumerate(v)
]
L.append(f" ]{end}")
else:
L.append(f" {js(k)}: {js(v)}{end}")
L.append(" }" + ("," if ti < len(self.tables) - 1 else ""))
L += [" ]", "}", ""]
Path(path).write_text("\n".join(L), encoding="utf-8", newline="\n")
def kind_of(vals):
"""조건 칸 종류 — 모두 수면 수 · 아니면 고르기."""
return "" if all(is_num(v) for v in vals) else "고르기"
def nz(x):
return x not in ("", "-")
def cell_val(x):
"""값 칸 하나 → (값, 원문 or None). 수 하나가 든 글 = 수 + 원문 · 그 밖 글은 글."""
x = join(x)
if is_num(x):
return N(x), None
nums = re.findall(NUM, x)
if len(nums) == 1 and re.search(r"[가-힣%a-zA-Z]", x) and not re.search(r"[~\s]", x):
return R(nums[0]), x
return x, None
@@ -0,0 +1,322 @@
# -*- coding: utf-8 -*-
"""토목 표 만들기 — 편성표(crew) · 납작표(flat) · 요율 · 매트릭스. (build_소요량_건설품셈_토목.py 가 씀)"""
import re
from _md표_읽기 import N, R, Raw, join
from _토목_읽기 import NUM, ROLE, UNITS, cell_val, fill_right, is_num, kind_of, nz, unit_split
def head_paths(rows, h, start, ncol):
"""머리 h 줄 → 열별 층 목록. 빈 칸은 같은 맨 윗 층 무리 안에서만 왼쪽 값으로 채움."""
top, paths = fill_right(rows[0][start:], 0), {c: [] for c in range(start, ncol)}
for r in range(h):
row = list(rows[r][start:])
for i in range(1, len(row)):
if not row[i] and r > 0 and top[i] == top[i - 1]:
row[i] = row[i - 1]
elif not row[i] and r == 0:
row[i] = row[i - 1]
for i, c in enumerate(range(start, ncol)):
v = jn(row[i]) if row[i] else ""
if v and (not paths[c] or paths[c][-1] != v):
paths[c].append(v)
return paths
def is_text(v):
return isinstance(v, str) and not isinstance(v, Raw)
def jn(cell):
"""칸 글 — 「∼」 둘레 줄바꿈은 붙임."""
if "" in cell:
return re.sub(r"\s*<br>\s*", "", cell).replace(" ", "").replace(" ", "")
return join(cell)
def is_unit(p):
return p in UNITS or bool(re.fullmatch(r"[㎡㎥㎜㎝㎏a-zA-Z/개소본일회]+", p))
def conds_out(names, rows):
"""조건 이름별 종류를 정해 줄의 글을 수로 바꿈 → 조건 사전."""
cond = {}
for nm in names:
vals = [r[nm] for r in rows if nm in r]
kd = kind_of(vals)
cond[nm] = kd
if kd == "":
for r in rows:
if nm in r:
r[nm] = N(r[nm])
return cond
def bigo_items(text):
items = []
for p in (x.strip() for x in text.split("<br>")):
if p.startswith("- ") or not items:
items.append(p)
else:
items[-1] += " " + p
return ["비고 " + x for x in items]
def split_name(nm, spec):
"""이름 끝 괄호에 수가 들었으면(「…(폭 2.4m)」) 이름에서 떼어 규격 글로."""
m = re.search(r"\(([^()]*\d[^()]*)\)$", nm)
if m and " " not in nm[: m.start()].strip():
return nm[: m.start()].strip(), (m.group(1) + (" " + spec if spec else ""))
return nm, spec
# ── 편성표 ─────────────────────────────────────────────────────
def crew(t, cn=(), gname=None, prefix_group=False):
R0 = t.rows
head0 = R0[0]
uc = next(i for i, x in enumerate(head0) if join(x) == "단위")
sc = next((i for i, x in enumerate(head0) if join(x).startswith("규격")), None)
ncol = len(head0)
h = next(i for i in range(1, len(R0)) if R0[i][uc] != "")
namecols = [c for c in range(uc) if c != sc]
paths = head_paths(R0, h, uc + 1, ncol)
role, sig, cname_of = {}, {}, {}
for c, pth in paths.items():
ri = next((i for i, x in enumerate(pth) if ROLE.match(x)), None)
if ri is None: # 역할 글 없음(머리 = 조건) — 값은 모두 수량
role[c] = ("수량", "")
sig[c] = tuple(pth[1:] if len(pth) > 1 else pth)
cname_of[c] = (
[
re.sub(r"\(.*\)$", "", pth[0]).strip()
+ (
re.search(r"\(.*\)$", pth[0]).group(0)
if re.search(r"\(.*\)$", pth[0])
else ""
)
]
if len(pth) > 1
else []
)
continue
m = ROLE.match(pth[ri])
par = re.search(r"\((.*)\)", pth[ri])
p = par.group(1) if par else ""
role[c] = (m.group(1), p)
rest = [x for i, x in enumerate(pth) if i != ri]
sig[c] = tuple(rest)
cname_of[c] = [p] if (p and not is_unit(p) and rest) else []
prod = [c for c in role if role[c][0] != "수량"]
nc = namecols[-1]
for r in range(h, len(R0)): # 이름 칸이 비면(같은 이름 잇따름) 위 이름
if not R0[r][nc] and R0[r][uc] and R0[r - 1][nc]:
R0[r][nc] = R0[r - 1][nc]
# 블록
blocks, bigo, grp = [], [], ""
for r in range(h, len(R0)):
row = R0[r]
if join(row[0]) == "비고":
bigo += bigo_items(row[1])
continue
if len(namecols) > 1 and row[namecols[0]]:
grp = join(row[namecols[0]])
if (prod and any(row[c] for c in prod)) or not blocks:
blocks.append({"grp": grp, "rows": []})
blocks[-1]["rows"].append((grp, row))
cols, rows, condnames = {}, [], []
gcol = gname or (join(head0[namecols[0]]) if len(namecols) > 1 else "")
sigs = []
for c in sorted(role):
if sig[c] not in sigs:
sigs.append(sig[c])
nonempty = [s for s in sigs if s]
outsigs = nonempty if nonempty else [()]
for blk in blocks:
first = blk["rows"][0][1]
for sg in outsigs:
row = {}
if gcol and prod:
row[gcol] = blk["grp"]
names = list(cn) or next(
(cname_of[c] for c in role if sig[c] == sg and cname_of[c]), []
)
for lv, val in enumerate(sg):
nm = names[lv] if lv < len(names) else f"조건{lv + 1}"
if nm == "-":
continue
row[nm] = val[len(nm) + 1 :] if val.startswith(nm + " ") else val
vcols = [c for c in role if sig[c] in (sg, ())]
have_prod = False
for c in vcols:
if role[c][0] != "수량" and nz(first[c]):
nm = role[c][0]
pu = role[c][1] if is_unit(role[c][1]) else ""
cols[nm] = pu
row[nm] = N(first[c])
have_prod = True
if prod and not have_prod:
continue
for g, mrow in blk["rows"]:
nm = jn(mrow[namecols[-1]])
if prefix_group and g:
nm = f"{g} {nm}"
unit = mrow[uc]
for c in vcols:
if role[c][0] == "수량" and nz(mrow[c]):
assert is_num(mrow[c]), (t.ident, mrow[c])
spec = jn(mrow[sc]) if sc is not None and nz(mrow[sc]) else ""
nm, spec = split_name(nm, spec)
if nm in row: # 같은 이름 둘(규격만 다름) — 이름 뒤에 규격을 붙여 가름
nm = f"{nm} {spec}"
cols.setdefault(nm, unit)
row[nm] = N(mrow[c])
if spec and " " + spec not in nm:
cols[nm + "규격"] = ""
row[nm + "규격"] = spec
rows.append(row)
cnames = []
for r in rows:
for k in r:
if k not in cnames and k not in cols:
cnames.append(k)
cond = conds_out(cnames, rows)
return cond, cols, rows, bigo
# ── 납작표 ─────────────────────────────────────────────────────
def flat(t, lead=1, levels=("V",), hdr=None, vname=None, halves=False, unit=None):
R0 = t.rows
bigo = []
body_rows = []
for row in R0:
if join(row[0]) == "비고":
bigo += bigo_items(row[1])
R0 = [r for r in R0 if join(r[0]) != "비고"]
if halves:
w = len(R0[0]) // 2
parts = [[r[:w] for r in R0], [r[w:] for r in R0]]
else:
parts = [R0]
cols, rows, condnames = {}, [], []
for P in parts:
h = hdr
if h is None:
h = next(i for i, row in enumerate(P) if any(is_num(c) for c in row[lead:]))
ncol = len(P[0])
lead_names = []
for c in range(lead):
hs = [jn(P[r][c]) for r in range(h) if P[r][c]]
lead_names.append(re.sub(r"\s+\(", "(", hs[-1]) if hs else f"조건{c + 1}")
paths = head_paths(P, h, lead, ncol)
info = {}
for c, pth in paths.items():
cn_, vn_ = {}, []
for i, el in enumerate(pth):
lv = levels[i] if i < len(levels) else "V"
if lv.startswith("C:"):
cn_[lv[2:]] = el
elif lv == "V":
vn_.append(el)
info[c] = (tuple(cn_.items()), " ".join(vn_))
prev = [""] * lead
for row in P[h:]:
if not any(row):
continue
lc = {}
for c in range(lead):
if row[c]:
prev[c] = jn(row[c])
for c2 in range(c + 1, lead):
prev[c2] = ""
lc[lead_names[c]] = prev[c]
sigs = []
for c in range(lead, ncol):
if info[c][0] not in sigs:
sigs.append(info[c][0])
for sg in sigs:
out = dict(lc)
for k, v in sg:
out[k] = v
got = False
for c in range(lead, ncol):
if info[c][0] != sg or not nz(row[c]):
continue
name, un = unit_split(info[c][1]) if info[c][1] else (vname, "")
if info[c][1] == "" or vname:
name = vname or name
un = unit or t.base
v, orig = cell_val(row[c])
cols[name] = "" if is_text(v) or cols.get(name) == "" else un
out[name] = v
if orig:
cols[name + "원문"] = ""
out[name + "원문"] = orig
got = True
if got:
rows.append(out)
names = []
for r in rows:
for k in r:
if k not in names and k not in cols:
names.append(k)
cond = conds_out(names, rows)
return cond, cols, rows, bigo
def rate(t, cname=None, vname=None):
"""머리 = 조건, 둘째 줄 = 요율(%)."""
h, b = t.rows[0], t.rows[1]
cname = cname or jn(h[0])
vn = vname or re.sub(r"\(%\)$", "", jn(b[0]))
rows = [{cname: jn(h[c]), vn: R(b[c].rstrip("%"))} for c in range(1, len(h)) if nz(b[c])]
return {cname: "고르기"}, {vn: "%"}, rows, []
def matrix(t, rname, cname, vname, unit, hdr):
"""줄 머리 · 칸 머리 → 값 하나."""
P = t.rows
colh = [jn(x) for x in P[0]]
rows = []
for row in P[hdr:]:
for c in range(1, len(row)):
if nz(row[c]):
rows.append({rname: jn(row[0]), cname: colh[c], vname: N(row[c])})
cond = conds_out([rname, cname], rows)
return cond, {vname: unit}, rows, []
def tpose(t, cname, vname):
"""머리 = 조건, 둘째 줄 = 값(수 하나가 든 글은 수 + 원문)."""
h, b = t.rows[0], t.rows[1]
rows, cols = [], {}
for c in range(1, len(h)):
if not nz(b[c]):
continue
v, orig = cell_val(b[c])
d = {cname: jn(h[c]), vname: v}
cols[vname] = "" if is_text(v) else ""
if orig:
d[vname + "원문"] = orig
cols[vname + "원문"] = ""
rows.append(d)
return {cname: kind_of([r[cname] for r in rows])}, cols, rows, []
def members(rows, uc, sc, qc, nc=0):
"""몸 줄들 → (값칸, 값) — 수량 칸이 「-」 · 빈칸이면 뺌."""
cols, vals = {}, {}
for row in rows:
if not nz(row[qc]):
continue
nm = jn(row[nc])
spec = jn(row[sc]) if sc is not None and nz(row[sc]) else ""
nm, spec = split_name(nm, spec)
if nm in vals:
nm = f"{nm} {spec}"
cols.setdefault(nm, row[uc])
vals[nm] = N(row[qc])
if spec and " " + spec not in nm:
cols[nm + "규격"] = ""
vals[nm + "규격"] = spec
return cols, vals
@@ -0,0 +1,165 @@
# -*- coding: utf-8 -*-
"""건설품셈 토목 제1 · 2 · 6장 본문 md → resources/master_data/소요량_건설품셈_토목{1,2,6}장.json
값은 본문 md 에서만 읽음(손으로 적지 않음). 표마다 모양이 달라 표별 지정(CN · FLAT · 손 함수)과 글 속 계수(_토목_계수)는 손으로 둠.
돌리기: ./venv/Scripts/python.exe resources/master_data/scripts/build_소요량_건설품셈_토목.py
"""
import re
import sys
from _md표_읽기 import N, R, join
from _토목_계수 import lift
from _토목_손 import SPECIAL
from _토목_읽기 import ROOT, Out, read_chapter
from _토목_표 import crew, flat, rate, tpose
# 편성표 — 시공량 머리 층 이름(「-」 = 이름만 있는 층이라 뺌)
CN = {
"1-1-2#0": ["설치간격"],
"1-5-3#0": ["-", "1층 포설두께"],
"1-5-4#0": ["시공폭", "-", "1층 포설두께"],
"1-5-7#0": ["시공폭"],
"1-5-8#0": ["시공폭"],
"1-5-9#0": ["시공폭"],
"1-6-1#0": ["포장"],
"1-6-2#0": ["형식", "두께"],
"1-6-3#0": ["포장"],
"1-6-4#0": ["포장"],
"1-6-5#0": ["작업"],
"1-7-1#0": ["형식"],
"1-7-2#0": ["형식"],
"1-8-1#0": ["작업"],
"1-8-2#0": ["형식"],
"1-8-3#0": [""],
"1-8-5#0": ["설치위치"],
"1-8-9#0": ["도색"],
"1-8-9#1": ["도색"],
"1-8-9#2": ["도색"],
"1-8-9#3": ["도색"],
"1-8-9#6": ["도색"],
"1-8-10#0": ["지주간격"],
"1-8-10#1": ["지주간격", "W"],
"1-8-11#0": ["지주간격"],
"1-8-11#1": ["지주간격", "W"],
"1-8-12#0": ["높이"],
"1-8-13#0": ["형식"],
"1-8-14#0": ["형식"],
"1-8-15#0": ["높이"],
"1-9-4#1": [],
"2-2-1#0": ["돌망태 높이"],
"2-3-1#0": ["작업"],
"6-7-5#1": [],
}
# 납작표 — lead(줄 조건 칸 수) · levels(머리 층: C:이름 = 조건 · V = 값 이름 · N = 뺌) · hdr
FLAT = {
"1-6-2#1": dict(lead=1, hdr=1),
"1-7-1#1": dict(lead=1, hdr=1),
"1-7-2#1": dict(lead=1, hdr=1),
"1-8-13#1": dict(lead=1, hdr=1),
"1-8-14#1": dict(lead=1, hdr=1),
"1-9-2#1": dict(lead=1, hdr=1),
"6-2-3#0": dict(lead=1, hdr=1, halves=True),
"6-3-3#0": dict(lead=1, hdr=2, levels=("C:도장부위", "V")),
"6-3-4#0": dict(lead=1, hdr=2, halves=True, levels=("C:종별", "V")),
"6-5-5#0": dict(lead=1, hdr=1),
"6-6-3#0": dict(lead=1, hdr=1, halves=True),
"6-6-4#0": dict(lead=2, hdr=2),
"6-7-1#0": dict(lead=1, hdr=1),
"6-7-1#1": dict(lead=1, hdr=1),
"6-7-2#0": dict(lead=1, hdr=1),
"6-7-3#0": dict(lead=1, hdr=2, levels=("V", "C:관 종류")),
"6-7-3#1": dict(lead=1, hdr=1),
"6-7-4#0": dict(lead=1, hdr=1),
"6-7-5#3": dict(lead=1, hdr=3, levels=("C:토질", "-", "C:추진연장(m)"), vname="작업능력"),
"6-8-1#0": dict(lead=1, hdr=1),
"6-8-1#1": dict(lead=2, hdr=2, levels=("-", "V")),
"6-8-1#2": dict(lead=1, hdr=1),
"6-8-2#0": dict(lead=1, hdr=1),
"6-8-2#1": dict(lead=1, hdr=1),
"6-8-3#0": dict(lead=1, hdr=1),
"6-8-3#1": dict(lead=1, hdr=1),
"6-8-4#0": dict(lead=1, hdr=1),
"6-8-4#1": dict(lead=1, hdr=1),
"6-8-5#0": dict(lead=1, hdr=1),
"6-8-5#1": dict(lead=1, hdr=1),
"6-8-6#0": dict(lead=2, hdr=2),
"6-8-7#0": dict(lead=1, hdr=2, levels=("V", "V")),
}
LABEL = { # "항#k": 표 이름(기본 = 항 제목 + 목/표 번호)
"1-6-2#1": "표층 인력포설 적용기준",
"1-7-1#1": "보도용 블록 설치(소형) 적용기준",
"1-7-2#1": "보도용 블록 설치(대형) 적용기준",
"1-8-2#1": "도로 표지판 설치 표지판 규격별",
"1-8-2#2": "도로 표지판 설치 크레인 규격",
"1-8-9#4": "융착식 도료 수동식 트럭 작업",
"1-8-9#5": "융착식 도료 수동식 재료",
"1-8-13#1": "유색포장(미끄럼방지) 적용기준",
"1-8-14#1": "표시못 설치 적용기준",
"1-8-14#2": "표시못 설치 요율",
"1-9-2#1": "보차도 및 도로경계블록 설치 적용기준",
"1-9-4#2": "낙석방지망 설치 재료",
"6-2-1#1": "타이튼 접합 및 부설 인력",
"6-2-2#1": "K.P 메커니컬 접합 및 부설 인력",
"6-2-2#2": "K.P 메커니컬 접합 및 부설 요율",
"6-3-1#1": "부설 인력",
"6-5-4#1": "바트융착 접합 및 부설 요율",
"6-7-1#1": "PC관 부설 및 접합 크레인 규격",
"6-7-3#1": "유리섬유복합관 부설 및 접합 크레인 규격",
"6-7-5#4": "강관압입추진공 조명시설",
"6-8-1#1": "주철제 게이트 제수밸브 부설 및 접합 인력",
"6-8-1#2": "주철제 게이트 제수밸브 부설 및 접합 크레인 규격",
"6-8-2#1": "강관제 게이트 제수밸브 부설 및 접합 크레인 규격",
"6-8-3#1": "주철제・강관제 버터플라이 제수밸브 부설 및 접합 크레인 규격",
"6-8-4#1": "부단수 할정자관 부설 및 접합 부설장비 규격",
"6-8-4#2": "부단수 할정자관 부설 및 접합 할정자관 중량표",
"6-8-5#1": "부단수 천공 분기점 분기 부설장비 규격",
"6-8-5#2": "부단수 천공 분기점 분기 요율",
}
def label_of(t, all_in_item):
key = f"{t.ident}#{t.k}"
if key in LABEL:
return LABEL[key]
if t.mok:
return f"{t.title} {t.mok}"
return t.title if all_in_item[t.ident] == 1 or t.k == 0 else f"{t.title}{t.k + 1}"
def build(chdir, out_name, hand):
tabs, text, order = read_chapter(chdir)
count = {}
for t in tabs:
count[t.ident] = count.get(t.ident, 0) + 1
out = Out()
for t in tabs:
key = f"{t.ident}#{t.k}"
h0 = [join(x) for x in t.rows[0]]
label = label_of(t, count)
if key in hand:
cond, cols, rows, bigo, lab = hand[key](t)
label = lab or label
rule = None
elif key in FLAT:
cond, cols, rows, bigo = flat(t, **FLAT[key])
elif "단위" in h0:
cond, cols, rows, bigo = crew(t, CN.get(key, ()))
else:
raise SystemExit(f"지정 없는 표: {key} {h0[:4]}")
out.add(t, label, cond, cols, rows, notes=bigo + t.notes)
lift(chdir, text, out)
out.write(ROOT / "resources/master_data" / out_name)
return out
if __name__ == "__main__":
which = sys.argv[1:] or ["1", "2", "6"]
for w in which:
ch = {
"1": ("제01장", "소요량_건설품셈_토목1장.json"),
"2": ("제02장", "소요량_건설품셈_토목2장.json"),
"6": ("제06장", "소요량_건설품셈_토목6장.json"),
}[w]
o = build(ch[0], ch[1], SPECIAL.get(w, {}))
print(w, len(o.tables), "")
@@ -0,0 +1,510 @@
{
"그룹": "계수",
"원문": "건설품셈",
"판": "2026",
"표": [
{
"열쇠": "3-1-1 노임 산정식",
"이름": "터널노임 산정식",
"기준": "",
"출처": "건설품셈 토목 3-1-1",
"조건": {
"노임구분": "고르기"
},
"값칸": {
"기호": "글",
"산정식": "식"
},
"줄": [
{
"노임구분": "노임합계",
"기호": "PW",
"산정식": "P+PO"
},
{
"노임구분": "기본노임",
"기호": "P",
"산정식": "P"
},
{
"노임구분": "할증노임",
"기호": "PO",
"산정식": "P×β"
}
],
"주": [
"비고 - 터널작업 노임은 1일 8시간 기준\n- β : 할증률",
"① 본 노임 산정표준은 연장 1,000m까지의 일반터널의 경우이며, 장대터널은 별도 장대터널 할증을 가산한다.",
"② 3교대 이상인 때와 특수한 조건일 때 별도 계상할 수 있다.",
"③ 근로자에 대한 유해, 위험 예방조치에 필요한 비용은 별도 계상한다.",
"⑤ 터널굴착시 발생하는 잡재료비(록볼트 표시기, 전설걸이, 마대 등) 및 경장비의 기계경비는 인력품의 3%로 계상한다.",
"⑥ 버력처리비(적재, 운반, 버리기), 조명비, 동바리비, 착암설비(컴프레서, 소형브레이커, 송기관, 공기탱크), 배수처리비, 기계장치비, 가설비, 환기설비 등 갱내외 설비비는 굴착공법과 조건에 따라 별도 계상한다.",
"⑦ 환기설비는 갱구에서 200m 이상일 때 필요에 따라 별도 계상하며, 갱구에서 200m 미만은 자연환기로 한다. 단, 200m 미만이라도 필요에 따라 환기시설을 별도 계상할 수 있다.",
"⑧ 터널연장이 1000m 이상 시에는 급・배기 시설을 별도 계상할 수 있다."
]
},
{
"열쇠": "3-1-1 노임 기준시간",
"이름": "터널작업 노임 1일 기준시간",
"기준": "",
"출처": "건설품셈 토목 3-1-1",
"조건": {
"항목": "고르기"
},
"값칸": {
"기준시간": "시간"
},
"줄": [
{
"항목": "터널작업 노임 1일",
"기준시간": 8
}
],
"주": [
"- 터널작업 노임은 1일 8시간 기준"
]
},
{
"열쇠": "3-1-1 장대터널 할증률",
"이름": "장대 터널 할증률(α1)",
"기준": "갱구에서 뚫기점까지의 거리(m)",
"출처": "건설품셈 토목 3-1-1 주④",
"조건": {
"갱구에서 뚫기점까지의 거리": "범위"
},
"값칸": {
"할증률": "%"
},
"범위규칙": "까지 = 이하 · 마지막 「5,000m 이상」 만 이상",
"줄": [
{
"갱구에서 뚫기점까지의 거리": [
500,
1000
],
"할증률": 10
},
{
"갱구에서 뚫기점까지의 거리": [
1000,
1500
],
"할증률": 20
},
{
"갱구에서 뚫기점까지의 거리": [
1500,
2000
],
"할증률": 30
},
{
"갱구에서 뚫기점까지의 거리": [
2000,
2500
],
"할증률": 40
},
{
"갱구에서 뚫기점까지의 거리": [
2500,
3000
],
"할증률": 50
},
{
"갱구에서 뚫기점까지의 거리": [
3000,
3500
],
"할증률": 60
},
{
"갱구에서 뚫기점까지의 거리": [
3500,
4000
],
"할증률": 70
},
{
"갱구에서 뚫기점까지의 거리": [
4000,
4500
],
"할증률": 80
},
{
"갱구에서 뚫기점까지의 거리": [
4500,
5000
],
"할증률": 90
},
{
"갱구에서 뚫기점까지의 거리": [
5000,
null
],
"할증률": 100
}
],
"주": [
"갱구에서 500m 까지 - (할증 없음)"
]
},
{
"열쇠": "3-1-1 잡재료비·경장비",
"이름": "굴착 잡재료비 및 경장비 기계경비",
"기준": "인력품",
"출처": "건설품셈 토목 3-1-1 주⑤",
"조건": {
"항목": "고르기"
},
"값칸": {
"비율": "%"
},
"줄": [
{
"항목": "록볼트 표시기 · 전설걸이 · 마대 등 잡재료비 및 경장비 기계경비",
"비율": 3
}
],
"주": [
"⑤ 터널굴착시 발생하는 잡재료비(록볼트 표시기, 전설걸이, 마대 등) 및 경장비의 기계경비는 인력품의 3%로 계상한다."
]
},
{
"열쇠": "3-1-2 여굴량",
"이름": "터널 여굴(餘掘)량",
"기준": "",
"출처": "건설품셈 토목 3-1-2",
"조건": {
"구분": "고르기"
},
"값칸": {
"아치": "㎝",
"측벽": "㎝",
"바닥 및 인버트": "㎝"
},
"줄": [
{
"구분": "여굴두께(㎝)",
"아치": [
12,
19
],
"측벽": [
12,
18
],
"바닥 및 인버트": [
10,
15
]
}
],
"주": [
"① 본 여굴량은 발파공법(NATM)을 기준으로 한 것이다.",
"② 암질의 절리 및 풍화가 발달하여 터널타입과 관계없이 과다 여굴이 발생되거나, 해저터널에서 강관다단 등 터널보강이 필요하여 공법상 불가피하게 추가 여굴이 발생되는 경우에는 여굴기준의 20% 범위 내에서 추가 적용한다.",
"③ “바닥 및 인버트”구간은 버력을 제거한 후 콘크리트 등으로 채우는 경우에 적용하며, 암질에 따라 달리 적용 할 수 있다. 다만, 수로터널 등 단면이 적은 경우는 5㎝이내에서 현장 여건에 따라 적용한다."
]
},
{
"열쇠": "3-1-2 추가 여굴",
"이름": "추가 여굴 상한",
"기준": "여굴기준",
"출처": "건설품셈 토목 3-1-2 주②",
"조건": {
"항목": "고르기"
},
"값칸": {
"비율": "%"
},
"줄": [
{
"항목": "과다 여굴 · 보강 공법 추가 여굴",
"비율": 20
}
],
"주": [
"② 암질의 절리 및 풍화가 발달하여 터널타입과 관계없이 과다 여굴이 발생되거나, 해저터널에서 강관다단 등 터널보강이 필요하여 공법상 불가피하게 추가 여굴이 발생되는 경우에는 여굴기준의 20% 범위 내에서 추가 적용한다."
]
},
{
"열쇠": "3-1-2 수로터널 바닥 여굴",
"이름": "수로터널 등 단면이 적은 경우 바닥 및 인버트 여굴",
"기준": "",
"출처": "건설품셈 토목 3-1-2 주③",
"조건": {
"항목": "고르기"
},
"값칸": {
"여굴두께": "㎝"
},
"줄": [
{
"항목": "수로터널 등 바닥 및 인버트",
"여굴두께": 5
}
],
"주": [
"③ “바닥 및 인버트”구간은 버력을 제거한 후 콘크리트 등으로 채우는 경우에 적용하며, 암질에 따라 달리 적용 할 수 있다. 다만, 수로터널 등 단면이 적은 경우는 5㎝이내에서 현장 여건에 따라 적용한다."
]
},
{
"열쇠": "3-2-1 용수 증가",
"이름": "용수발생 굴착 싸이클 증가율 상한",
"기준": "싸이클",
"출처": "건설품셈 토목 3-2-1 주⑦",
"조건": {
"항목": "고르기"
},
"값칸": {
"증가율": "%"
},
"줄": [
{
"항목": "용수발생 굴착 싸이클",
"증가율": 30
}
],
"주": [
"⑦ 용수발생으로 굴착작업에 지장을 받는 경우 굴착 싸이클을 30% 범위 내에서 증하여 적용한다."
]
},
{
"열쇠": "3-2-1 바닥청소 T3",
"이름": "바닥청소 및 면정리 작업량(T_3)",
"기준": "",
"출처": "건설품셈 토목 3-2-1 주⑨",
"조건": {
"항목": "고르기"
},
"값칸": {
"작업량": "㎡/hr"
},
"줄": [
{
"항목": "T_3",
"작업량": 64
}
],
"주": [
"⑨ 바닥청소 및 면정리 (T_3) : 64㎡/hr"
]
},
{
"열쇠": "3-2-1 Pin 고정",
"이름": "와이어메시 Pin 고정 시간(T_4)",
"기준": "",
"출처": "건설품셈 토목 3-2-1 주⑩",
"조건": {
"항목": "고르기"
},
"값칸": {
"시간": "분/개"
},
"줄": [
{
"항목": "Pin 고정",
"시간": 1
}
],
"주": [
"⑩ 와이어메시 설치 (T_4)\n㉮ Pin 구멍천공 : 소형브레이커 사용천공\n㉯ Pin 고정 : 1분/개"
]
},
{
"열쇠": "3-2-1 뿜어붙이기 효율",
"이름": "뿜어붙이기 효율(E)",
"기준": "",
"출처": "건설품셈 토목 3-2-1 주⑪",
"조건": {
"항목": "고르기"
},
"값칸": {
"효율": "수"
},
"줄": [
{
"항목": "E",
"효율": 0.55
}
],
"주": [
"⑪ 뿜어붙이기 (T_5)\nQ = q×E(1-손실률) (㎥/hr)\n여기서, q : 뿜어붙임 기계의 능력 (㎥/hr)\nE : 효율 (0.55)\n손실률 = 반발되어 떨어진 재료의 전중량(㎏) / 뿜어붙임 콘크리트에 사용되는 재료의 전중량(㎏) ×100%\nT_5 = V / Q\n여기서, V : 숏크리트 타설 대상수량"
]
},
{
"열쇠": "3-2-1 소형터널 단면적",
"이름": "소형터널 단면적",
"기준": "",
"출처": "건설품셈 토목 3-2-1 주⑬",
"조건": {
"항목": "고르기"
},
"값칸": {
"단면적": "㎡"
},
"줄": [
{
"항목": "소형터널 기준 단면적(미만)",
"단면적": 10
}
],
"주": [
"⑬ 소형터널(단면적 10㎡미만의 터널)의 싸이클 타임에서 착암 및 버력처리의 싸이클 타임은 A군을 적용하며, 숏크리트 및 록볼트 작업이 필요치 않은 경우에는 해당 작업의 싸이클 타임은 적용하지 않는다. 다만, 동바리 설치 시간은 다음과 같이 적용한다."
]
},
{
"열쇠": "3-2-3 공기소비량",
"이름": "소형브레이커 공기소비량",
"기준": "",
"출처": "건설품셈 토목 3-2-3 주②",
"조건": {
"항목": "고르기"
},
"값칸": {
"공기소비량": "㎥/min"
},
"줄": [
{
"항목": "소형브레이커",
"공기소비량": 2.7
}
],
"주": [
"② 소형브레이커는 공기소비량 2.7㎥/min 기준이다."
]
},
{
"열쇠": "3-2-3 심빼기 폭약량 배율",
"이름": "심빼기 1구멍 1m당 폭약량 배율",
"기준": "소형터널 굴착 기준표",
"출처": "건설품셈 토목 3-2-3 ※",
"조건": {
"항목": "고르기"
},
"값칸": {
"배율": "배"
},
"줄": [
{
"항목": "심빼기 1구멍 1m당 폭약량",
"배율": [
1.5,
2.0
]
}
],
"주": [
"※ 심빼기 1구멍 1m당 폭약량은 본 표의 1.5∼2.0배를 표준으로 한다."
]
},
{
"열쇠": "3-2-3 풍화암 준용",
"이름": "풍화암 1발파 진행거리 준용",
"기준": "",
"출처": "건설품셈 토목 3-2-3 ※",
"조건": {
"항목": "고르기"
},
"값칸": {
"진행거리": "m"
},
"줄": [
{
"항목": "풍화암(연암 1발파 진행 준용)",
"진행거리": 0.8
}
],
"주": [
"※ 풍화암은 연암의 1발파 진행 0.8m를 준용할 수 있다."
]
},
{
"열쇠": "3-2-3 도갱 넓히기",
"이름": "도갱천공 후 넓히기 싸이클 시간 비율",
"기준": "도갱천공 싸이클 시간",
"출처": "건설품셈 토목 3-2-3 ※",
"조건": {
"항목": "고르기"
},
"값칸": {
"비율": "%"
},
"줄": [
{
"항목": "도갱천공 후 넓히기",
"비율": 65
}
],
"주": [
"※ 도갱천공 후 넓히기는 싸이클 시간을 계상하지 않을 경우 도갱천공 싸이클 시간의 65%로 한다."
]
},
{
"열쇠": "3-2-5 병렬터널",
"이름": "병렬터널 두막장 동시굴착 품 적용률",
"기준": "본 품",
"출처": "건설품셈 토목 3-2-5 비고",
"조건": {
"항목": "고르기"
},
"값칸": {
"비율": "%"
},
"줄": [
{
"항목": "일개 작업조가 두막장을 동시에 굴착",
"비율": 59
}
],
"주": [
"- 터널굴착시 병렬터널의 경우와 같이 일개 작업조가 두막장을 동시에 굴착하는 경우는 본 품의 59%를 적용한다."
]
},
{
"열쇠": "3-4-1 경장비",
"이름": "방수 공구손료 및 경장비 기계경비",
"기준": "인력품",
"출처": "건설품셈 토목 3-4-1 주③",
"조건": {
"항목": "고르기"
},
"값칸": {
"비율": "%"
},
"줄": [
{
"항목": "공구손료 및 경장비",
"비율": 6
}
],
"주": [
"③ 공구손료 및 경장비(용접기, 타정기, 공기압축기, 시험기기 등) 기계경비는 인력품의 6%로 계상한다."
]
},
{
"열쇠": "3-4-2 경장비",
"이름": "작업대차 공구손료 및 경장비 기계경비",
"기준": "인력품",
"출처": "건설품셈 토목 3-4-2 주③",
"조건": {
"항목": "고르기"
},
"값칸": {
"비율": "%"
},
"줄": [
{
"항목": "공구손료 및 경장비",
"비율": 2
}
],
"주": [
"③ 공구손료 및 경장비(전동드릴 등) 기계경비는 인력품의 2%로 계상한다."
]
}
]
}
@@ -190,7 +190,7 @@
"출처": { "손료계수": "산림품셈 2-2-8", "취득가액": "산림품셈 2-2-8" },
"비고": "취득가액은 10조 기준" },
{ "열쇠": "2-2-9 1톤(방제차량)", "이름": "1톤(방제차량)", "규격": "1톤",
"단위": {},
"단위": { "손료계수": "" },
"값": { "손료계수": null },
"출처": { "손료계수": "산림품셈 2-2-9" },
"비고": "손료계수 원문: 「건설품셈 적산기준에 준함」" },
@@ -0,0 +1,385 @@
{
"그룹": "로직",
"원문": "산림품셈",
"판": "2026-01-01",
"줄": [
{
"열쇠": "3-1 경계표시",
"이름": "경계표시",
"결과단위": "원/ha",
"출처": "산림품셈 3-1",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{ "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "찾기(소요량:산림품셈:3-1 경계표시).소요인력", "비목": "노무비" }
],
"덧줄": [],
"끝수": null,
"비고": "할인·할증 못 넣음 — 1-4-3 집단화정도(조건 「개소당 평균면적」 빈칸 · 범위규칙이 글) · 1-4-5 경사도(값 칸 「할인·할증률」) — 칸 이름 · 범위규칙 문법 · 페인트(2-1-4) 재료 요소 없음"
},
{
"열쇠": "3-3 작업로 설치",
"이름": "작업로 설치",
"결과단위": "원/km",
"출처": "산림품셈 3-3",
"소유": "공용",
"입력": [
{ "이름": "구분", "고르기": ["소작업로", "대작업로"] },
{ "이름": "체인톱가격", "단위": "원" },
{ "이름": "체인오일단가", "단위": "원/" },
{
"이름": "지역",
"고르기": [
"전국평균",
"전국",
"서울",
"경기",
"강원",
"충북",
"충남",
"전북",
"경북",
"경남",
"부산",
"제주",
"대구",
"인천",
"대전",
"울산",
"세종",
"전남광주"
],
"출처": "건설품셈 공통 8-1-7 5"
}
],
"중간": [
{ "이름": "소요", "식": "찾기(소요량:산림품셈:3-3 작업로 설치, 구분=구분).소요인력" },
{ "이름": "체인톱대수", "식": "소요 * 0.5", "출처": "산림품셈 2-1-1 주② 「작업로 설치 — 산출 인원의 50%」" }
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1037",
"이름": "벌목부",
"단위": "인",
"수량": "소요 * 0.5",
"비목": "노무비",
"출처": "산림품셈 3-3 인력구성 「벌목부 50%」"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "소요 * 0.5",
"비목": "노무비",
"출처": "산림품셈 3-3 인력구성 「보통인부 50%」"
},
{
"종류": "재료",
"요소": "재료:오피넷유가:휘발유:{지역}",
"이름": "휘발유(체인톱)",
"단위": "",
"수량": "체인톱대수 * 찾기(소요량:산림품셈:2-1-1 휘발유·오일, 기계명='체인톱', 재료명='보통휘발유(주연료)').주연료",
"비목": "재료비",
"출처": "산림품셈 2-1-1 주③"
}
],
"덧줄": [
{
"이름": "잡품",
"식": "재료비 * 찾기(소요량:산림품셈:2-1-1 휘발유·오일, 기계명='체인톱', 재료명='보통휘발유(주연료)').잡품 / 100",
"비목": "재료비",
"출처": "산림품셈 2-1-1 주⑤"
},
{
"이름": "체인오일",
"식": "체인톱대수 * 찾기(소요량:산림품셈:2-1-1 휘발유·오일, 기계명='체인톱', 재료명='체인오일(일반오일)').주연료 * 체인오일단가",
"비목": "재료비",
"출처": "산림품셈 2-1-1 주④"
},
{ "이름": "체인톱 손료", "식": "체인톱대수 * 기계:산림품셈:2-2-1 체인톱.손료계수 * 체인톱가격", "비목": "경비", "출처": "산림품셈 2-2-1" }
],
"끝수": null,
"비고": "할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-9 제거대상 식생(조건 「제거대상 식생」 빈칸) — 칸 이름 · 범위규칙 문법 · 체인톱 가격 · 체인오일 단가 원문에 없음(시중가격) — 설계자 입력 · 상층목은 솎아베기 본수에 포함(주③⑥)"
},
{
"열쇠": "3-4-2 임산물 운반로 신설 작업량",
"이름": "임산물 운반로 신설 굴착기 시간당 작업량",
"결과단위": "㎥/시간",
"출처": "산림품셈 3-4-2 1",
"소유": "공용",
"입력": [],
"중간": [
{ "이름": "q", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='q(버킷용량)').값" },
{ "이름": "K", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='K(버킷계수)').값" },
{ "이름": "f", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='f(체적환산계수)').값" },
{ "이름": "E", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='E(작업효율)').값" },
{ "이름": "Cm", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='Cm(1회 사이클의 시간)').값" }
],
"결과": { "식": "반올림(3600 * q * K * f * E / Cm, 3)", "출처": "건설품셈 공통 8-1-4 주①" },
"끝수": "소수 3자리 사사오입(건설품셈 공통 8-1-4 주①)",
"비고": "해석: 원문 단가산출 예시의 값(q 0.2 · K 0.7 · f 0.71 · E 0.45 · Cm 18)을 표준 값으로 씀"
},
{
"열쇠": "3-4-2 임산물 운반로 신설",
"이름": "임산물 운반로 및 작업로 신설(굴착기 0.2㎥)",
"결과단위": "원/m",
"출처": "산림품셈 3-4-2",
"소유": "공용",
"입력": [
{ "이름": "횡단경사", "단위": "%" },
{
"이름": "지역",
"고르기": [
"전국평균",
"전국",
"서울",
"경기",
"강원",
"충북",
"충남",
"전북",
"경북",
"경남",
"부산",
"제주",
"대구",
"인천",
"대전",
"울산",
"세종",
"전남광주"
],
"출처": "건설품셈 공통 8-1-7 5"
},
{ "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" }
],
"중간": [
{ "이름": "작업량", "식": "로직(산림품셈:3-4-2 임산물 운반로 신설 작업량)" },
{ "이름": "절토량", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='m당 절토량').값" },
{ "이름": "할증", "식": "만약(횡단경사 >= 55, 찾기(소요량:산림품셈:3-4-2 횡단경사별 할증률, 횡단경사=횡단경사).할증률, 0)", "출처": "산림품셈 3-4-2 6" }
],
"호표": [
{
"종류": "로직",
"요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0020', 지역=지역, 보정작업=보정작업)",
"이름": "굴착기(무한궤도) 0.2㎥",
"단위": "시간",
"수량": "(절토량 / 작업량) * (1 + 할증 / 100)"
}
],
"덧줄": [],
"끝수": null,
"비고": "해석: 원문 예시(시간당 단가 ÷ Q × 절토량)를 식으로 씀 · 굴착기 규격 0.2㎥ 는 예시 값 · 건설품셈 공통 8-2-3 계수 필요(0.2㎥ · 0.4㎥ 굴착기를 쓸 때) · 벌목 · 제근 · 암절취 · 임시 공작물 · 유용토 운반 별도(4)"
},
{
"열쇠": "3-4-3 보수공정",
"이름": "임산물 운반로 보수공정",
"결과단위": "원/100㎡",
"출처": "산림품셈 3-4-3",
"소유": "공용",
"입력": [{ "이름": "종별", "고르기": ["노면정지", "노면굴기"] }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:3-4-3 보수공정표, 종별=종별).인부",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "해석: 원문 「인부」 = 보통인부"
},
{
"열쇠": "3-4-3 상용인부 고용경비",
"이름": "임산물 운반로 상용인부 고용경비",
"결과단위": "원/일",
"출처": "산림품셈 3-4-3",
"소유": "공용",
"입력": [
{
"이름": "조건",
"고르기": ["입지적 조건과 계절에 따른 기상적인 조건이 불량한 경우", "입지적 조건과 계절에 따른 기상적인 조건이 보통인 경우", "입지적 조건과 계절에 따른 입지적 조건이 양호한 경우"]
},
{ "이름": "연장", "단위": "km" }
],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "연장 / 찾기(소요량:산림품셈:3-4-3 상용인부 고용경비 산정조건, 조건=조건).거리",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "해석: 상용인부 = 보통인부 · 1일 인원 = 연장 ÷ 기준거리(끝수 규정 없음) · 고용기간(반출 지정기간 등)은 설계자 몫"
},
{
"열쇠": "3-5 예정지정리",
"이름": "예정지정리",
"결과단위": "원/ha",
"출처": "산림품셈 3-5",
"소유": "공용",
"입력": [
{
"이름": "작업내용",
"고르기": [
"보완사업지 정리",
"휴경지 등 정리",
"관목지 등 정리",
"산불 등 피해지 정리",
"불량림 정리",
"인력 정리",
"임업기계장비 이용 정리",
"벌채부산물 임내정리",
"모든 벌채부산물 반출"
]
},
{ "이름": "정리량", "단위": "㎥/ha" },
{ "이름": "임상", "고르기": ["침엽수림", "활엽수림", "해당 없음"] },
{ "이름": "개벌지", "고르기": ["700㎡ 이하(또는 벌채폭 30m)", "3000㎡ 미만(또는 벌채폭 60m)", "해당 없음"] },
{ "이름": "산불피해면적", "단위": "ha" },
{ "이름": "조림면적", "단위": "ha" }
],
"중간": [
{ "이름": "소요", "식": "찾기(소요량:산림품셈:3-5 예정지정리, 작업내용=작업내용).소요인력" },
{
"이름": "할증",
"식": "만약(정리량 >= 50, 찾기(소요량:산림품셈:3-5 미이용산림바이오매스 할증률, 정리량=정리량).할증률, 0) + 만약(임상 == '해당 없음', 0, 찾기(소요량:산림품셈:3-5 임상별 할인할증률, 임상=임상).할인할증률) + 만약(개벌지 == '해당 없음', 0, 찾기(소요량:산림품셈:3-5 개벌지 크기별 할증률, 구분=개벌지).할증률) + 찾기(소요량:산림품셈:3-5 산불피해지 할증률).할증률 * 산불피해면적 / 조림면적",
"출처": "산림품셈 3-5 주⑬⑬⑭⑮"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "(소요 * 0.5) * (1 + 할증 / 100)",
"비목": "노무비",
"출처": "산림품셈 3-5 인력구분 「특별인부 50%」"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "(소요 * 0.5) * (1 + 할증 / 100)",
"비목": "노무비",
"출처": "산림품셈 3-5 인력구분 「보통인부 50%」"
}
],
"덧줄": [],
"끝수": null,
"비고": "해석: 할인·할증은 합산해 품에 곱함(1-4-21 주③) · 임상 할인·할증은 수확벌채지만(주⑬) · 정리량 = 미이용 산림바이오매스(주⑬) · 산불피해 없으면 산불피해면적 0 · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법 · 이용가치 없는 불량목 벌채 · 운재로는 별도(주⑨)"
},
{
"열쇠": "3-6 산물 임내정리",
"이름": "산물 임내정리",
"결과단위": "원/ha",
"출처": "산림품셈 3-6",
"소유": "공용",
"입력": [{ "이름": "정리산물", "단위": "㎥/ha" }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "정리산물 / 찾기(소요량:산림품셈:3-6 산물 임내정리, 정리산물=정리산물).소요인력",
"비목": "노무비",
"출처": "산림품셈 3-6 주⑤ 「임내정리량 ÷ 품」"
}
],
"덧줄": [],
"끝수": null,
"비고": "정리산물 = ha당 임내정리량(지조 포함, 주④) · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) — 칸 이름 · 범위규칙 문법"
},
{
"열쇠": "3-7 재해산물 수집",
"이름": "재해산물 수집",
"결과단위": "원/ha",
"출처": "산림품셈 3-7",
"소유": "공용",
"입력": [
{ "이름": "수집거리", "고르기": ["10m이하", "20m이하", "30m이하"] },
{ "이름": "수집량", "단위": "㎥/ha" },
{ "이름": "작업", "고르기": ["일반", "소나무재선충병방제"] },
{ "이름": "집재방향", "고르기": ["상향집재", "하향집재"] },
{ "이름": "경사", "고르기": ["급(30°초과)", "중(1530°)", "완(15° 미만)"] }
],
"중간": [
{
"이름": "할증",
"식": "만약(작업 == '소나무재선충병방제' 그리고 집재방향 == '상향집재', 찾기(계수:산림품셈:1-4-14 집재방향, 구분='소나무재선충병 인력에 의한 원목 및 재해산물 수집', 집재방향='상향집재', 경사=경사).할증률, 0)",
"출처": "산림품셈 3-7 주② · 1-4-14"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "(수집량 / 찾기(소요량:산림품셈:3-7 재해산물 수집, 수집거리=수집거리, 재해산물수집량=수집량).소요인력) * (1 + 할증 / 100)",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "해석: 소요인력 = 수집량 ÷ 품(3-6 주⑤와 같게) · 1-4-14 는 소나무재선충병방제만(주②) · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-8 장애물의 정도(조건 「장애물의 정도」 빈칸) — 칸 이름 · 범위규칙 문법"
},
{
"열쇠": "3-8 드론 영상 촬영",
"이름": "드론 영상 촬영",
"결과단위": "원/ha",
"출처": "산림품셈 3-8",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1048",
"이름": "건설기계운전사",
"단위": "인",
"수량": "찾기(소요량:산림품셈:3-8 드론 영상 촬영, 종별='계').드론조종자",
"비목": "노무비",
"출처": "산림품셈 3-8 「드론조종자」"
},
{
"종류": "인력",
"요소": "인력:건설노임:1048",
"이름": "건설기계운전사",
"단위": "인",
"수량": "찾기(소요량:산림품셈:3-8 드론 영상 촬영, 종별='계').부조종자",
"비목": "노무비",
"출처": "산림품셈 3-8 「부조종자」"
},
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:3-8 드론 영상 촬영, 종별='계').특별인부",
"비목": "노무비",
"출처": "산림품셈 3-8 「특별인부(신호수)」"
}
],
"덧줄": [],
"끝수": null,
"비고": "해석: 건설기계조종원·운전기사 = 건설노임 건설기계운전사(1048) · 사업 전·후 2회 촬영 기준(주①) · 드론 장비 손료 원문 표에 없음"
}
]
}
@@ -0,0 +1,195 @@
{
"그룹": "로직",
"원문": "산림품셈",
"판": "2026-01-01",
"줄": [
{
"열쇠": "4-1-2 벌도ㆍ조재",
"이름": "하베스터 벌도ㆍ조재",
"결과단위": "원/㎥",
"출처": "산림품셈 4-1-2",
"소유": "공용",
"입력": [
{
"이름": "지역",
"고르기": [
"전국평균",
"전국",
"서울",
"경기",
"강원",
"충북",
"충남",
"전북",
"경북",
"경남",
"부산",
"제주",
"대구",
"인천",
"대전",
"울산",
"세종",
"전남광주"
],
"출처": "건설품셈 공통 8-1-7 5"
}
],
"중간": [{ "이름": "공정량", "식": "찾기(소요량:산림품셈:4-1-2 벌도ㆍ조재).공정량" }],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1048",
"이름": "건설기계운전사",
"단위": "인",
"수량": "1 / 공정량",
"비목": "노무비",
"출처": "산림품셈 4-1-2 「하베스터 오퍼레이터 1인」"
},
{
"종류": "재료",
"요소": "재료:오피넷유가:경유:{지역}",
"이름": "경유(하베스터)",
"단위": "",
"수량": "찾기(소요량:산림품셈:2-1-2 경유, 기계명='하베스터(헤드부착형)').주연료 / 공정량",
"비목": "재료비",
"출처": "산림품셈 2-1-2"
}
],
"덧줄": [
{ "이름": "잡품", "식": "재료비 * 찾기(소요량:산림품셈:2-1-2 경유, 기계명='하베스터(헤드부착형)').잡품 / 100", "비목": "재료비", "출처": "산림품셈 2-1-2 주④" },
{
"이름": "기계손료",
"식": "(기계:산림품셈:2-2-3 하베스터(헤드부착형).손료계수 * 기계:산림품셈:2-2-3 하베스터(헤드부착형).장비가격 + 기계:산림품셈:2-2-3 0.6㎥급 무한궤도형 굴착기.손료계수 * 기계:산림품셈:2-2-3 0.6㎥급 무한궤도형 굴착기.장비가격) * 1000 / 공정량",
"비목": "경비",
"출처": "산림품셈 2-2-3"
}
],
"끝수": null,
"비고": "해석: 건설기계조종원·운전기사 = 건설노임 건설기계운전사(1048) · 해석: 하베스터 = 헤드 + 0.6㎥급 굴착기(2-1-2 적용기준) 손료 · 1일 기준(2-2-3 주③)"
},
{
"열쇠": "4-1-2 조재",
"이름": "하베스터 조재",
"결과단위": "원/㎥",
"출처": "산림품셈 4-1-2",
"소유": "공용",
"입력": [
{
"이름": "지역",
"고르기": [
"전국평균",
"전국",
"서울",
"경기",
"강원",
"충북",
"충남",
"전북",
"경북",
"경남",
"부산",
"제주",
"대구",
"인천",
"대전",
"울산",
"세종",
"전남광주"
],
"출처": "건설품셈 공통 8-1-7 5"
}
],
"중간": [{ "이름": "공정량", "식": "찾기(소요량:산림품셈:4-1-2 조재).공정량" }],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1048",
"이름": "건설기계운전사",
"단위": "인",
"수량": "1 / 공정량",
"비목": "노무비",
"출처": "산림품셈 4-1-2 「하베스터 오퍼레이터 1인」"
},
{
"종류": "재료",
"요소": "재료:오피넷유가:경유:{지역}",
"이름": "경유(하베스터)",
"단위": "",
"수량": "찾기(소요량:산림품셈:2-1-2 경유, 기계명='하베스터(헤드부착형)').주연료 / 공정량",
"비목": "재료비",
"출처": "산림품셈 2-1-2"
}
],
"덧줄": [
{ "이름": "잡품", "식": "재료비 * 찾기(소요량:산림품셈:2-1-2 경유, 기계명='하베스터(헤드부착형)').잡품 / 100", "비목": "재료비", "출처": "산림품셈 2-1-2 주④" },
{
"이름": "기계손료",
"식": "(기계:산림품셈:2-2-3 하베스터(헤드부착형).손료계수 * 기계:산림품셈:2-2-3 하베스터(헤드부착형).장비가격 + 기계:산림품셈:2-2-3 0.6㎥급 무한궤도형 굴착기.손료계수 * 기계:산림품셈:2-2-3 0.6㎥급 무한궤도형 굴착기.장비가격) * 1000 / 공정량",
"비목": "경비",
"출처": "산림품셈 2-2-3"
}
],
"끝수": null,
"비고": "해석: 건설기계조종원·운전기사 = 건설노임 건설기계운전사(1048) · 해석: 하베스터 = 헤드 + 0.6㎥급 굴착기(2-1-2 적용기준) 손료 · 1일 기준(2-2-3 주③)"
},
{
"열쇠": "4-4 가지정리",
"이름": "가지정리",
"결과단위": "원/100㎡",
"출처": "산림품셈 4-4",
"소유": "공용",
"입력": [{ "이름": "구분", "고르기": ["1종", "2종"] }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:4-4 가지정리, 구분=구분).보통인부",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null
},
{
"열쇠": "4-5 벌도 위험목 점검",
"이름": "벌도 위험목 점검",
"결과단위": "원/ha",
"출처": "산림품셈 4-5",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{ "종류": "인력", "요소": "인력:건설노임:1037", "이름": "벌목부", "단위": "인", "수량": "찾기(소요량:산림품셈:4-5 벌도 위험목 점검).소요인력", "비목": "노무비" }
],
"덧줄": [],
"끝수": null
},
{
"열쇠": "4-6 벌목부 작업안전 보조",
"이름": "벌목부 작업안전 보조",
"결과단위": "원/일",
"출처": "산림품셈 4-6",
"소유": "공용",
"입력": [{ "이름": "벌목부", "단위": "인" }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "올림(벌목부 / 찾기(소요량:산림품셈:4-6 주②, 구분='안전 벌목 보조(보통인부) 추가 기준 벌목부 인원').값, 0) * 찾기(소요량:산림품셈:4-6 주②, 구분='기준 인원당 추가 보통인부').값",
"비목": "노무비",
"출처": "산림품셈 4-6 주② · 투입인원 산출"
}
],
"덧줄": [],
"끝수": null,
"비고": "벌목부 = 1일 투입 벌목부 인원 · 4인당 1인, 넘으면 1인 더(주②)"
}
]
}
@@ -0,0 +1,982 @@
{
"그룹": "로직",
"원문": "산림품셈",
"판": "2026-01-01",
"줄": [
{
"열쇠": "5-1-4 떼채취",
"이름": "떼채취",
"결과단위": "원/100㎡",
"출처": "산림품셈 5-1-4",
"소유": "공용",
"입력": [{ "이름": "구분", "고르기": ["줄떼", "평떼"] }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-1-4 떼채취, 구분=구분).보통인부",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "운반비 별도(주①) · 산복 절토면 자갈·초목 제거 별도(주②)"
},
{
"열쇠": "5-3-1 나무식재",
"이름": "나무식재",
"결과단위": "원/1,000본",
"출처": "산림품셈 5-3-1",
"소유": "공용",
"입력": [
{ "이름": "구분", "고르기": ["소묘식재", "중묘식재", "대묘식재"] },
{ "이름": "보식", "고르기": ["해당 없음", "해당"] },
{
"이름": "토양조건",
"고르기": ["돌 등 장애물 함량이 30% 이상이고,\n나무뿌리가 밀하게 분포할 경우", "돌 등 장애물 함량이 10~30%이고,\n나무뿌리가 보통정도로 분포할 경우", "식혈시 장애물이 거의 없음"]
}
],
"중간": [
{
"이름": "소요",
"식": "찾기(소요량:산림품셈:5-3-1 나무식재, 구분=구분).소요인력 + 만약(보식 == '해당', 찾기(소요량:산림품셈:5-3-1 인력 구성비·보식 가산, 구분='보식 가산(나무식재 품에)').값 * 10, 0)",
"출처": "산림품셈 5-3-1 주② 「0.05인/100본당」 × 10"
},
{ "이름": "할증", "식": "찾기(계수:산림품셈:1-4-10 토양상태, 토양조건=토양조건).할증률", "출처": "산림품셈 1-4-10" }
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "(소요 * 찾기(소요량:산림품셈:5-3-1 인력 구성비·보식 가산, 구분='인력구분 특별인부 비율').값 / 100) * (1 + 할증 / 100)",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "(소요 * 찾기(소요량:산림품셈:5-3-1 인력 구성비·보식 가산, 구분='인력구분 보통인부 비율').값 / 100) * (1 + 할증 / 100)",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "해석: 보식 가산은 인력 나누기 앞 소요인력에 더함 · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법 · 묘목 가격 별도(주④)"
},
{
"열쇠": "5-4 파종조림",
"이름": "파종조림",
"결과단위": "원/ha",
"출처": "산림품셈 5-4",
"소유": "공용",
"입력": [
{ "이름": "내용", "고르기": ["40cm×40cm×5,000개", "80cm×80cm×5,000개", "5,000판×3립", "조파", "점파"] },
{
"이름": "토양조건",
"고르기": ["돌 등 장애물 함량이 30% 이상이고,\n나무뿌리가 밀하게 분포할 경우", "돌 등 장애물 함량이 10~30%이고,\n나무뿌리가 보통정도로 분포할 경우", "식혈시 장애물이 거의 없음"]
}
],
"중간": [{ "이름": "할증", "식": "찾기(계수:산림품셈:1-4-10 토양상태, 토양조건=토양조건).할증률", "출처": "산림품셈 1-4-10" }],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "(찾기(소요량:산림품셈:5-4 파종조림, 내용=내용).소요인력) * (1 + 할증 / 100)",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법 · 종자 재료 별도 · 예정지정리는 3-5(주③)"
},
{
"열쇠": "5-6 움싹갱신",
"이름": "움싹갱신(맹아근주 정리)",
"결과단위": "원/ha",
"출처": "산림품셈 5-6",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-6 움싹갱신, 구분='맹아근주 정리작업').소요인력 * 찾기(소요량:산림품셈:5-6 인력 구성비, 구분='인력구분 특별인부 비율').값 / 100",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-6 움싹갱신, 구분='맹아근주 정리작업').소요인력 * 찾기(소요량:산림품셈:5-6 인력 구성비, 구분='인력구분 보통인부 비율').값 / 100",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "기준 900본/ha · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법"
},
{
"열쇠": "5-7 생태보완조림",
"이름": "생태보완조림",
"결과단위": "원/ha",
"출처": "산림품셈 5-7",
"소유": "공용",
"입력": [
{ "이름": "구분", "고르기": ["움싹본수조절", "치수이식"] },
{
"이름": "토양조건",
"고르기": ["돌 등 장애물 함량이 30% 이상이고,\n나무뿌리가 밀하게 분포할 경우", "돌 등 장애물 함량이 10~30%이고,\n나무뿌리가 보통정도로 분포할 경우", "식혈시 장애물이 거의 없음"]
}
],
"중간": [{ "이름": "할증", "식": "찾기(계수:산림품셈:1-4-10 토양상태, 토양조건=토양조건).할증률", "출처": "산림품셈 1-4-10" }],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "(찾기(소요량:산림품셈:5-7 생태보완조림, 구분=구분).소요인력 * 찾기(소요량:산림품셈:5-7 인력 구성비 · 주①④, 구분='인력구분 특별인부 비율').값 / 100) * (1 + 할증 / 100)",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "(찾기(소요량:산림품셈:5-7 생태보완조림, 구분=구분).소요인력 * 찾기(소요량:산림품셈:5-7 인력 구성비 · 주①④, 구분='인력구분 보통인부 비율').값 / 100) * (1 + 할증 / 100)",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "움싹본수조절 그루터기 900본 · 치수이식 100본 기준 · 보완조림은 5-3-1 나무식재(보식 해당)로(주④) · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법"
},
{
"열쇠": "5-8 큰나무 공익조림",
"이름": "큰나무 공익조림",
"결과단위": "원/본",
"출처": "산림품셈 5-8",
"소유": "공용",
"입력": [{ "이름": "지주목", "고르기": ["세움", "세우지 않음"] }],
"중간": [
{
"이름": "소요",
"식": "찾기(소요량:산림품셈:5-8 큰나무 공익조림, 구분='큰나무 식재').소요인력 * (1 - 만약(지주목 == '세우지 않음', 찾기(소요량:산림품셈:5-8 인력 구성비 · 주③, 구분='지주목을 세우지 않을 경우 인력품 감').값, 0) / 100)",
"출처": "산림품셈 5-8 주③"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "소요 * 찾기(소요량:산림품셈:5-8 인력 구성비 · 주③, 구분='인력구분 특별인부 비율').값 / 100",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "소요 * 찾기(소요량:산림품셈:5-8 인력 구성비 · 주③, 구분='인력구분 보통인부 비율').값 / 100",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "묘목 · 지주대 재료비 별도(주②)"
},
{
"열쇠": "5-9 해안조림",
"이름": "해안조림",
"결과단위": "원/100본",
"출처": "산림품셈 5-9",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-9 해안조림, 구분='보통인부').식혈 + 찾기(소요량:산림품셈:5-9 해안조림, 구분='보통인부').식재",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "대묘 기준(주④) · 비료 · 객토 · 지주목 · 볏짚 별도"
},
{
"열쇠": "5-10 사방조림",
"이름": "사방조림",
"결과단위": "원/ha",
"출처": "산림품셈 5-10",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-10 사방조림, 명칭='특별인부').수량",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-10 사방조림, 명칭='보통인부').수량",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "묘목 4,000본 · 요소 · 인산 재료 요소 없음(요소 · 인산 수량 원문에 없음) · 운반비 별도(조견표)"
},
{
"열쇠": "5-11 사초심기",
"이름": "사초심기",
"결과단위": "원/100본",
"출처": "산림품셈 5-11",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-11 사초심기, 구분='보통인부').사초굴취 + 찾기(소요량:산림품셈:5-11 사초심기, 구분='보통인부').사초식재",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "사초 운반 별도(주⑥)"
},
{
"열쇠": "5-12 떼붙임(재배잔디)",
"이름": "떼붙임(재배잔디)",
"결과단위": "원/100㎡",
"출처": "산림품셈 5-12",
"소유": "공용",
"입력": [{ "이름": "품", "단위": "인/100㎡" }, { "이름": "비탈구배", "고르기": ["해당 없음", "평균 비탈구배 20˚~45˚ 이하"] }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "품 * (1 + 만약(비탈구배 == '해당 없음', 0, 찾기(소요량:산림품셈:5-12 주③, 구분='비탈구배 해당 시 품 할증').값) / 100)",
"비목": "노무비",
"출처": "산림품셈 5-12 주③"
}
],
"덧줄": [],
"끝수": null,
"비고": "원문 품이 범위(줄떼 4.05.0 · 평떼 5.07.0 인/100㎡) — 설계자 입력 · 떼 값 · 운반 별도(주⑤)"
},
{
"열쇠": "5-13 떼심기",
"이름": "떼심기",
"결과단위": "원/100㎡",
"출처": "산림품셈 5-13",
"소유": "공용",
"입력": [{ "이름": "구분", "고르기": ["줄떼심기", "띠떼심기"] }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-13 떼심기, 구분=구분).보통인부",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "골파기품 · 떼 값 별도(주④)"
},
{
"열쇠": "5-14 새심기",
"이름": "새심기",
"결과단위": "원/㎡",
"출처": "산림품셈 5-14",
"소유": "공용",
"입력": [],
"중간": [{ "이름": "보통", "식": "찾기(소요량:산림품셈:5-14 새심기, 공정별='보통인부 (채집)').수량 + 찾기(소요량:산림품셈:5-14 새심기, 공정별='보통인부 (심기)').수량" }],
"호표": [
{ "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "보통", "비목": "노무비" },
{
"종류": "인력",
"요소": "인력:건설노임:1001",
"이름": "작업반장",
"단위": "인",
"수량": "보통 / 찾기(소요량:산림품셈:5-14 비고·주②③⑥, 구분='작업반장 배치 기준 보통인부').값 * 찾기(소요량:산림품셈:5-14 비고·주②③⑥, 구분='기준 인원당 작업반장').값",
"비목": "노무비",
"출처": "산림품셈 5-14 주⑥"
}
],
"덧줄": [],
"끝수": null,
"비고": "요소 · 인산 재료 요소 없음 · 새운반 조견표 별도(주③)"
},
{
"열쇠": "5-15 바자얽기",
"이름": "바자얽기",
"결과단위": "원/10m",
"출처": "산림품셈 5-15",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-15 바자얽기, 명칭='보통인부').수량",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-15 바자얽기, 명칭='특별인부').수량",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "말뚝 20개 재료 요소 없음 · 바자용 나뭇가지 재료 없음"
},
{
"열쇠": "5-18 씨뿌리기(줄)",
"이름": "씨뿌리기(줄)",
"결과단위": "원/m",
"출처": "산림품셈 5-18",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-18 씨뿌리기(줄), 공정별='특별인부').수량",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-18 씨뿌리기(줄), 공정별='보통인부').수량",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "종자 · 비료 · 비토 · 객토 재료 요소 없음 · 비료 · 비토 운반 조견표 별도"
},
{
"열쇠": "5-20 표토관리",
"이름": "표토관리",
"결과단위": "원/㎡",
"출처": "산림품셈 5-20",
"소유": "공용",
"입력": [
{ "이름": "공정", "고르기": ["표토채취", "표토붙이기"] },
{
"이름": "지역",
"고르기": [
"전국평균",
"전국",
"서울",
"경기",
"강원",
"충북",
"충남",
"전북",
"경북",
"경남",
"부산",
"제주",
"대구",
"인천",
"대전",
"울산",
"세종",
"전남광주"
],
"출처": "건설품셈 공통 8-1-7 5"
},
{ "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" }
],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-20 표토관리, 공정=공정, 구분='보통인부').공정량",
"비목": "노무비"
},
{
"종류": "로직",
"요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0070', 지역=지역, 보정작업=보정작업)",
"이름": "굴착기(무한궤도) 0.7㎥",
"단위": "시간",
"수량": "찾기(소요량:산림품셈:5-20 표토관리, 공정=공정, 구분='굴착기(무한궤도, 0.7㎥)').공정량"
}
],
"덧줄": [],
"끝수": null
},
{
"열쇠": "5-21 표토이식",
"이름": "표토이식",
"결과단위": "원/㎡",
"출처": "산림품셈 5-21",
"소유": "공용",
"입력": [{ "이름": "구분", "고르기": ["채취", "운반", "붙이기"] }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-21 표토이식, 구분=구분).보통인부",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "표토 두께 0.2m · 운반 30m 기준(주③④) · 복토 · 면고르기 · 잡관목 제거 별도(주⑤)"
},
{
"열쇠": "5-22-2 평떼 붙임",
"이름": "평떼 붙임",
"결과단위": "원/㎡",
"출처": "산림품셈 5-22-2",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1038",
"이름": "조경공",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-22-2 평떼 붙임, 구분='조경공').적용",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-22-2 평떼 붙임, 구분='보통인부').적용",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "떼 재료 요소 없음"
},
{
"열쇠": "5-23-2 떼붙임",
"이름": "줄떼 떼붙임",
"결과단위": "원/㎡",
"출처": "산림품셈 5-23-2",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1038",
"이름": "조경공",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-23-2 떼붙임, 구분='조경공').적용",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-23-2 떼붙임, 구분='보통인부').적용",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "떼 재료 요소 없음"
},
{
"열쇠": "5-22-3 떼꽂이 제작 및 설치",
"이름": "평떼 떼꽂이 제작 및 설치",
"결과단위": "원/㎡",
"출처": "산림품셈 5-22-3",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-22-3 떼꽂이 제작 및 설치, 구분='보통인부').적용",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "평떼 품(0.06인)에 떼꽂이가 들어 있으면 비교 뒤 적용(5-22-3 주)"
},
{
"열쇠": "5-23-3 떼꽂이 제작 및 설치",
"이름": "줄떼 떼꽂이 제작 및 설치",
"결과단위": "원/㎡",
"출처": "산림품셈 5-23-3",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-23-3 떼꽂이 제작 및 설치, 구분='보통인부').적용",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null
},
{
"열쇠": "5-22-4 평떼 시비",
"이름": "평떼 시비",
"결과단위": "원/일",
"출처": "산림품셈 5-22-4",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1038",
"이름": "조경공",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-22-4 평떼 시비, 구분='조경공').수량",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-22-4 평떼 시비, 구분='보통인부').수량",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "트럭 2.5ton 1대 — 화물트럭 기계 요소 없음 · 시공량 칸 「시공량(㎡)」 이름 때문에 ㎡당으로 못 바꿈 · 비료 별도(주③)"
},
{
"열쇠": "5-24-1 뿜어붙이기-기계/일반",
"이름": "씨앗뿜어붙이기(일반)",
"결과단위": "원/㎡",
"출처": "산림품셈 5-24-1",
"소유": "공용",
"입력": [
{
"이름": "지역",
"고르기": [
"전국평균",
"전국",
"서울",
"경기",
"강원",
"충북",
"충남",
"전북",
"경북",
"경남",
"부산",
"제주",
"대구",
"인천",
"대전",
"울산",
"세종",
"전남광주"
],
"출처": "건설품셈 공통 8-1-7 5"
}
],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1038",
"이름": "조경공",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-24-1 뿜어붙이기-기계/일반, 구분='인력', 명칭='조경공').적용수량",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-24-1 뿜어붙이기-기계/일반, 구분='인력', 명칭='보통인부').적용수량",
"비목": "노무비"
},
{
"종류": "로직",
"요소": "로직(건설품셈:8 기계 시간당 경비, 기계='7204-0055', 지역=지역)",
"이름": "물탱크(살수차) 5,500",
"단위": "시간",
"수량": "찾기(소요량:산림품셈:5-24-1 뿜어붙이기-기계/일반, 구분='장비', 명칭='물탱크').적용수량"
}
],
"덧줄": [],
"끝수": null,
"비고": "종자살포기 · 트럭 4.5ton 기계 요소 없음 · 종자 · 비료 · 피복제 · 침식안정제 · 색소 재료 요소 없음"
},
{
"열쇠": "5-24-2 뿜어붙이기-기계/마사토",
"이름": "씨앗뿜어붙이기(마사토)",
"결과단위": "원/㎡",
"출처": "산림품셈 5-24-2",
"소유": "공용",
"입력": [
{
"이름": "지역",
"고르기": [
"전국평균",
"전국",
"서울",
"경기",
"강원",
"충북",
"충남",
"전북",
"경북",
"경남",
"부산",
"제주",
"대구",
"인천",
"대전",
"울산",
"세종",
"전남광주"
],
"출처": "건설품셈 공통 8-1-7 5"
}
],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1038",
"이름": "조경공",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-24-2 뿜어붙이기-기계/마사토, 구분='인력', 명칭='조경공').적용수량",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-24-2 뿜어붙이기-기계/마사토, 구분='인력', 명칭='보통인부').적용수량",
"비목": "노무비"
},
{
"종류": "로직",
"요소": "로직(건설품셈:8 기계 시간당 경비, 기계='7204-0055', 지역=지역)",
"이름": "물탱크(살수차) 5,500",
"단위": "시간",
"수량": "찾기(소요량:산림품셈:5-24-2 뿜어붙이기-기계/마사토, 구분='장비', 명칭='물탱크').적용수량"
}
],
"덧줄": [],
"끝수": null,
"비고": "종자살포기 · 트럭 4.5ton 기계 요소 없음 · 종자 · 비료 · 피복제 · 침식안정제 · 색소 재료 요소 없음"
},
{
"열쇠": "5-25 거적덮기",
"이름": "거적덮기",
"결과단위": "원/㎡",
"출처": "산림품셈 5-25",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1038",
"이름": "조경공",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-25 거적덮기, 구분='인력', 명칭='조경공').수량",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-25 거적덮기, 구분='인력', 명칭='보통인부').수량",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "거적 1.1㎡ 재료 요소 없음 · 부속자재 별도(주①)"
},
{
"열쇠": "5-27 식재면 관리",
"이름": "식재면 관리",
"결과단위": "원/10㎡",
"출처": "산림품셈 5-27",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1038",
"이름": "조경공",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-27 식재면 관리, 구분='조경공').수량",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-27 식재면 관리, 구분='보통인부').수량",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null
},
{
"열쇠": "5-28-1 짚망",
"이름": "짚망",
"결과단위": "원/100㎡",
"출처": "산림품셈 5-28-1",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1003",
"이름": "특별인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-28-1 짚망, 구분='특별인부').수량",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-28-1 짚망, 구분='보통인부').수량",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "재료 설계수량 별도(주②)"
},
{
"열쇠": "5-29 복사이식 작업량",
"이름": "복사이식 굴착기 시간당 작업량(Q1)",
"결과단위": "㎥/시간",
"출처": "산림품셈 5-29 주④",
"소유": "공용",
"입력": [],
"중간": [
{ "이름": "q", "식": "찾기(소요량:산림품셈:5-29 주③④, 구분='적용 굴착기(무한궤도형)').값", "출처": "산림품셈 5-29 주③ 1.0㎥" },
{ "이름": "K", "식": "찾기(소요량:산림품셈:5-29 복사이식, 구분='K(버킷계수)').적용" },
{ "이름": "f", "식": "찾기(소요량:산림품셈:5-29 복사이식, 구분='f(체적환산계수)').적용" },
{ "이름": "E", "식": "찾기(소요량:산림품셈:5-29 복사이식, 구분='E(작업효율)').적용" },
{ "이름": "Cm", "식": "찾기(소요량:산림품셈:5-29 복사이식, 구분='Cm(1회 사이클시간)').적용" }
],
"결과": { "식": "반올림(3600 * q * K * f * E / Cm, 3)", "출처": "건설품셈 공통 8-1-4 주①" },
"끝수": "소수 3자리 사사오입(건설품셈 공통 8-1-4 주①)",
"비고": "해석: q = 주③ 굴착기 용량 1.0㎥ · 주⑤ Q=Q1×T 는 단위가 안 맞아(㎥/시간 × m) 넣지 않음"
},
{
"열쇠": "5-29 복사이식",
"이름": "복사이식(굴착기 1.0㎥)",
"결과단위": "원/㎥",
"출처": "산림품셈 5-29",
"소유": "공용",
"입력": [
{
"이름": "지역",
"고르기": [
"전국평균",
"전국",
"서울",
"경기",
"강원",
"충북",
"충남",
"전북",
"경북",
"경남",
"부산",
"제주",
"대구",
"인천",
"대전",
"울산",
"세종",
"전남광주"
],
"출처": "건설품셈 공통 8-1-7 5"
},
{ "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" }
],
"중간": [{ "이름": "작업량", "식": "로직(산림품셈:5-29 복사이식 작업량)" }],
"호표": [
{
"종류": "로직",
"요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0100', 지역=지역, 보정작업=보정작업)",
"이름": "굴착기(무한궤도) 1.0㎥",
"단위": "시간",
"수량": "1 / 작업량"
}
],
"덧줄": [],
"끝수": null,
"비고": "Q1 기준(주④) · 주⑤ 표토두께 T 반영은 판정 필요 · 건설품셈 공통 8-2-3 계수 필요(0.2㎥ · 0.4㎥ 굴착기를 쓸 때)"
},
{
"열쇠": "5-30 표시봉설치",
"이름": "표시봉 설치",
"결과단위": "원/1,000본",
"출처": "산림품셈 5-30",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{ "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "찾기(소요량:산림품셈:5-30 표시봉설치).소요인력", "비목": "노무비" }
],
"덧줄": [],
"끝수": null,
"비고": "표시봉 가격 시장가격(주③)"
},
{
"열쇠": "5-31 지주목설치",
"이름": "지주목 설치",
"결과단위": "원/1,000본",
"출처": "산림품셈 5-31",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{ "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "찾기(소요량:산림품셈:5-31 지주목설치).소요인력", "비목": "노무비" }
],
"덧줄": [],
"끝수": null,
"비고": "대묘식재만 · 1본당 1개(주②) · 지주목 재료 별도"
},
{
"열쇠": "5-32 대절작업",
"이름": "대절작업",
"결과단위": "원/1,000본",
"출처": "산림품셈 5-32",
"소유": "공용",
"입력": [],
"중간": [],
"호표": [
{ "종류": "인력", "요소": "인력:건설노임:1003", "이름": "특별인부", "단위": "인", "수량": "찾기(소요량:산림품셈:5-32 대절작업).소요인력", "비목": "노무비" }
],
"덧줄": [],
"끝수": null
},
{
"열쇠": "5-33 묘목 가식작업",
"이름": "묘목 가식작업",
"결과단위": "원/1,000본",
"출처": "산림품셈 5-33",
"소유": "공용",
"입력": [{ "이름": "구분", "고르기": ["소묘", "중묘", "대묘"] }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-33 묘목 가식작업, 구분=구분).소요인력",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null
},
{
"열쇠": "5-34 묘목 소운반",
"이름": "묘목 소운반",
"결과단위": "원/1,000본",
"출처": "산림품셈 5-34",
"소유": "공용",
"입력": [{ "이름": "구분", "고르기": ["소묘", "중묘", "대묘"] }, { "이름": "용기묘", "고르기": ["해당 없음", "해당"] }],
"중간": [],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "찾기(소요량:산림품셈:5-34 묘목 소운반, 구분=구분).소요인력 * 만약(구분 == '대묘' 그리고 용기묘 == '해당', 찾기(소요량:산림품셈:5-34 주②, 구분='대묘 중 용기묘 대묘 본 품 계상').값 / 100, 1)",
"비목": "노무비",
"출처": "산림품셈 5-34 주②"
}
],
"덧줄": [],
"끝수": null,
"비고": "대운반비는 견적 · 적재량 자료로 별도(주③)"
}
]
}
@@ -170,7 +170,8 @@
"단위": "㎏",
"수량": 0.2
}
]
],
"주": []
},
{
"열쇠": "4-1-4 초화류 식재",
@@ -226,7 +227,7 @@
"기준": "",
"출처": "건설품셈 공통 4-1-4 주②",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"감액률": "%(범위 내)"
@@ -236,7 +237,8 @@
"구분": "특수화단(화문화단, 리본화단, 포석화단)",
"감액률": 17
}
]
],
"주": []
},
{
"열쇠": "4-1-5 거적덮기",
@@ -326,7 +328,7 @@
"기준": "",
"출처": "건설품셈 공통 4-2-1 주⑦",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"감액률": "%(범위 내)"
@@ -336,7 +338,8 @@
"구분": "야생 굴취",
"감액률": 17
}
]
],
"주": []
},
{
"열쇠": "4-2-2 식재(단식)",
@@ -485,7 +488,8 @@
"수관폭": "100",
"주수": 1
}
]
],
"주": []
},
{
"열쇠": "4-3-1 뿌리돌림",
@@ -713,7 +717,8 @@
"구분": "분이 없는 경우(비고)",
"비율": 25
}
]
],
"주": []
},
{
"열쇠": "4-3-3 굴취(근원직경)",
@@ -871,7 +876,8 @@
"구분": "분이 없는 경우(비고)",
"비율": 25
}
]
],
"주": []
},
{
"열쇠": "4-3-4 식재(나무높이)",
@@ -954,7 +960,7 @@
"기준": "",
"출처": "건설품셈 공통 4-3-4",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"가산율": "%"
@@ -964,7 +970,8 @@
"구분": "지주목 미설치(비고)",
"가산율": 11
}
]
],
"주": []
},
{
"열쇠": "4-3-5 식재(흉고직경)",
@@ -1092,7 +1099,7 @@
"기준": "",
"출처": "건설품셈 공통 4-3-5",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"가산율": "%"
@@ -1102,7 +1109,8 @@
"구분": "지주목 미설치(비고)",
"가산율": 11
}
]
],
"주": []
},
{
"열쇠": "4-4-1 정원석 쌓기 및 놓기",
@@ -1209,7 +1217,8 @@
"구분": "공구손료(주④)",
"비율": 3
}
]
],
"주": []
},
{
"열쇠": "4-4-2 조경유용석 쌓기 및 놓기",
@@ -1361,7 +1370,7 @@
"기준": "",
"출처": "건설품셈 공통 4-4-5 주④",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"비율": "%(인력품 대비)"
@@ -1371,7 +1380,8 @@
"구분": "공구손료 및 경장비",
"비율": 3
}
]
],
"주": []
},
{
"열쇠": "4-4-6 인공식재지 배수판 설치",
@@ -109,7 +109,8 @@
"시공법": "헐기",
"굴착기규격": "1.0㎥"
}
]
],
"주": []
},
{
"열쇠": "5-1-2 H-Beam 설치(띠장)",
@@ -652,7 +653,8 @@
"재료": "강재",
"비고": "'[공통부문] 2-2-2 주요자재 / 강재류'를 적용한다."
}
]
],
"주": []
},
{
"열쇠": "5-1-7 장비조립·해체",
@@ -984,7 +986,8 @@
"구분": "보통인부",
"수량": 1
}
]
],
"주": []
},
{
"열쇠": "5-1-7 PC강선 제거",
@@ -1194,7 +1197,8 @@
"단위": "〃",
"수량": 0.5
}
]
],
"주": []
},
{
"열쇠": "5-1-9 장비편성",
@@ -1283,7 +1287,7 @@
"기준": "",
"출처": "건설품셈 공통 5-1-9 4 주①",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"부속장비": "%",
@@ -1365,7 +1369,8 @@
"값칸": {
"개요": "글",
"산출방법": "식",
"산출방법원문": "글"
"산출방법원문": "글",
"비고": "글"
},
"줄": [
{
@@ -1396,7 +1401,8 @@
"개요": "작업계수",
"산출방법": 0.8
}
]
],
"주": []
},
{
"열쇠": "5-1-9 t4 콘크리트 타설 소요시간",
@@ -1422,7 +1428,8 @@
"말뚝길이": "20m~30m",
"소요시간": 7
}
]
],
"주": []
},
{
"열쇠": "5-1-9 지층별 굴착시간(a1)",
@@ -1705,7 +1712,7 @@
"기준": "",
"출처": "건설품셈 공통 5-1-10 3가 주①",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"부속장비": "%",
@@ -1733,7 +1740,8 @@
"값칸": {
"개요": "글",
"산출방법": "식",
"산출방법원문": "글"
"산출방법원문": "글",
"비고": "글"
},
"줄": [
{
@@ -1815,7 +1823,7 @@
"기준": "",
"출처": "건설품셈 공통 5-1-10 4 주④",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"부속장비": "%",
@@ -1827,7 +1835,8 @@
"부속장비": 8,
"소모자재": 2
}
]
],
"주": []
},
{
"열쇠": "5-1-11 직선형 기준틀 설치 및 해체",
@@ -1936,7 +1945,8 @@
"구분": "공구손료 및 경장비(용접기 등)",
"비율": 3
}
]
],
"주": []
},
{
"열쇠": "5-2-1 매트부설",
@@ -2036,7 +2046,7 @@
{
"열쇠": "5-2-1 매트고정 재료량",
"이름": "매트부설 매트고정 재료량(참고자료)",
"기준": "100㎡당",
"기준": "100㎡당(P.P로프 9㎜)",
"출처": "건설품셈 공통 5-2-1",
"조건": {
"구분": "고르기"
@@ -2225,7 +2235,8 @@
"단위": "〃",
"수량": 2
}
]
],
"주": []
},
{
"열쇠": "5-2-2 장비편성",
@@ -2444,7 +2455,8 @@
"값칸": {
"개요": "글",
"산출방법": "식",
"산출방법원문": "글"
"산출방법원문": "글",
"비고": "글"
},
"줄": [
{
@@ -2531,7 +2543,8 @@
"토질": "전석/호박돌",
"시간": 11.0
}
]
],
"주": []
},
{
"열쇠": "5-2-2 유효직경별 분사주입시간(t3)",
@@ -2565,7 +2578,8 @@
"유효직경": 2000,
"분사주입시간": 22.57
}
]
],
"주": []
},
{
"열쇠": "5-2-3 장비조립 및 해체",
@@ -2661,7 +2675,7 @@
"기준": "",
"출처": "건설품셈 공통 5-2-3 3 주①",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"부속장비": "%",
@@ -2689,7 +2703,8 @@
"값칸": {
"개요": "글",
"산출방법": "식",
"산출방법원문": "글"
"산출방법원문": "글",
"비고": "글"
},
"줄": [
{
@@ -2785,7 +2800,8 @@
"L": "55이하",
"t_1": 51
}
]
],
"주": []
},
{
"열쇠": "5-2-3 표준타입·인발속도(V1,V2)",
@@ -2810,7 +2826,8 @@
"V_1": 1.52,
"V_2": 1.4
}
]
],
"주": []
},
{
"열쇠": "5-2-4 적용범위",
@@ -2955,7 +2972,8 @@
"단위": "〃",
"수량": 1
}
]
],
"주": []
},
{
"열쇠": "5-2-4 장비편성",
@@ -3064,7 +3082,7 @@
"기준": "",
"출처": "건설품셈 공통 5-2-4 4 주",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"부속장비": "%",
@@ -3076,7 +3094,8 @@
"부속장비": 9,
"소모자재": 3
}
]
],
"주": []
},
{
"열쇠": "5-2-4 작업소요시간(본당)",
@@ -3089,7 +3108,8 @@
"값칸": {
"개요": "글",
"산출방법": "식",
"산출방법원문": "글"
"산출방법원문": "글",
"비고": "글"
},
"줄": [
{
@@ -3163,7 +3183,8 @@
"구분": "공구손료 및 경장비(발전기, 전동드릴 등)",
"비율": 3
}
]
],
"주": []
},
{
"열쇠": "5-3-1 적용범위",
@@ -3185,7 +3206,8 @@
"말뚝종류": "기성콘크리트말뚝",
"말뚝직경": "400800"
}
]
],
"주": []
},
{
"열쇠": "5-3-1 장비조립·해체",
@@ -3329,7 +3351,8 @@
"단위": "〃",
"수량": 0.5
}
]
],
"주": []
},
{
"열쇠": "5-3-1 장비편성",
@@ -3439,7 +3462,7 @@
"기준": "",
"출처": "건설품셈 공통 5-3-1 4 주①",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"단말뚝": "%",
@@ -3556,7 +3579,8 @@
"값칸": {
"개요": "글",
"산출방법": "식",
"산출방법원문": "글"
"산출방법원문": "글",
"비고": "글"
},
"줄": [
{
@@ -3595,7 +3619,8 @@
"개요": "작업계수",
"산출방법원문": "도로/철도 교량기초 : 0.75, 건축기초 : 0.85"
}
]
],
"주": []
},
{
"열쇠": "5-3-1 작업계수(f)",
@@ -3617,7 +3642,8 @@
"구분": "건축기초",
"작업계수": 0.85
}
]
],
"주": []
},
{
"열쇠": "5-3-1 그라우팅 소요시간(t4)",
@@ -3662,7 +3688,8 @@
"말뚝길이": "2030미만",
"소요시간": 8
}
]
],
"주": []
},
{
"열쇠": "5-3-1 용접 소요시간(t5)",
@@ -3700,7 +3727,8 @@
"직경": 800,
"시간": 29
}
]
],
"주": []
},
{
"열쇠": "5-3-1 지층별 굴착시간(a1)",
@@ -4082,7 +4110,8 @@
"단위": "〃",
"수량": 0.5
}
]
],
"주": []
},
{
"열쇠": "5-3-2 장비편성",
@@ -4254,7 +4283,8 @@
"값칸": {
"개요": "글",
"산출방법": "식",
"산출방법원문": "글"
"산출방법원문": "글",
"비고": "글"
},
"줄": [
{
@@ -4611,7 +4641,8 @@
"적용공법": "전회전식 올케이싱",
"말뚝직경": "1,0003,000"
}
]
],
"주": []
},
{
"열쇠": "5-3-5 장비조립·해체",
@@ -4739,7 +4770,8 @@
"단위": "〃",
"수량": 1
}
]
],
"주": []
},
{
"열쇠": "5-3-5 굴착 장비편성",
@@ -4865,7 +4897,7 @@
"기준": "",
"출처": "건설품셈 공통 5-3-5 3나 주②",
"조건": {
"구분": ""
"구분": "고르기"
},
"값칸": {
"R.C.D": "%",
@@ -4938,7 +4970,8 @@
"구분": "전회전식",
"소요시간": 2
}
]
],
"주": []
},
{
"열쇠": "5-3-5 지층별 천공시간(t1)",
@@ -5369,7 +5402,8 @@
"구분": "케이싱 연결(올케이싱)",
"소요시간": 0.4
}
]
],
"주": []
},
{
"열쇠": "5-3-5 굴착 작업계수(f)",
@@ -5391,7 +5425,8 @@
"구분": "올케이싱",
"작업계수": 0.8
}
]
],
"주": []
},
{
"열쇠": "5-3-5 말뚝조성 인력편성",
@@ -5421,7 +5456,8 @@
"단위": "〃",
"수량": 2
}
]
],
"주": []
},
{
"열쇠": "5-3-5 말뚝조성 장비편성",
@@ -5557,7 +5593,8 @@
"값칸": {
"개요": "글",
"산출방법": "식",
"산출방법원문": "글"
"산출방법원문": "글",
"비고": "글"
},
"줄": [
{
@@ -5629,7 +5666,8 @@
"구분": "올케이싱",
"소요시간": 2.0
}
]
],
"주": []
},
{
"열쇠": "5-3-5 철근망이음 적용시간(a1)",
@@ -5688,7 +5726,8 @@
"구분": "올케이싱",
"β": 1.08
}
]
],
"주": []
},
{
"열쇠": "5-3 공구손료·경장비 보정 — 그룹 계수",
@@ -5743,7 +5782,8 @@
"구분": "소모자재(용접봉, 철판재, 호스 등) 손료",
"비율": 10
}
]
],
"주": []
},
{
"열쇠": "5-4-1 차수재공",
@@ -5831,7 +5871,8 @@
"구분": "시트",
"요율": 5
}
]
],
"주": []
},
{
"열쇠": "5-4-1 재료량",
@@ -5909,7 +5950,8 @@
"구분": "공구손료 및 경장비(발전기, 자동융착기 등) — 시트",
"비율": 5
}
]
],
"주": []
}
]
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,155 @@
{
"그룹": "소요량",
"원문": "건설품셈",
"판": "2026",
"표": [
{
"열쇠": "2-1-1 사석부설",
"이름": "사석부설",
"기준": "㎥당",
"출처": "건설품셈 토목 2-1-1",
"조건": {},
"값칸": { "보통인부": "인", "굴삭기": "hr", "굴삭기규격": "글" },
"줄": [
{ "보통인부": 0.004, "굴삭기": 0.027, "굴삭기규격": "1.0㎥" }
],
"주": [
"① 본 품은 굴착기를 사용하여 사석을 부설하는 기준이다.",
"② 본 품은 사석 부설 및 정리 작업이 포함된 것이다.",
"③ 필터매트 설치는 ‘[공통부문] 5-2-1 매트부설’을 따른다."
]
},
{
"열쇠": "2-1-2 사석고르기",
"이름": "사석고르기",
"기준": "㎡당",
"출처": "건설품셈 토목 2-1-2",
"조건": {},
"값칸": { "보통인부": "인", "굴삭기+부착용집게": "hr", "굴삭기+부착용집게규격": "글" },
"줄": [
{ "보통인부": 0.005, "굴삭기+부착용집게": 0.070, "굴삭기+부착용집게규격": "1.0㎥" }
],
"주": [
"① 본 품은 사석 부설 후 굴착기(집게)를 사용하여 표면부 사석을 돌출되지 않게 고르는 기준이다.",
"② 사석 고르기, 잡석 채움 작업을 포함한다."
]
},
{
"열쇠": "2-2-1 타원형 돌망태 설치",
"이름": "타원형 돌망태 설치",
"기준": "㎡당",
"출처": "건설품셈 토목 2-2-1",
"조건": { "돌망태 높이": "고르기" },
"값칸": { "석공": "인", "특별인부": "인", "보통인부": "인", "굴착기": "hr", "굴착기규격": "글" },
"줄": [
{ "돌망태 높이": "40㎝", "석공": 0.039, "특별인부": 0.013, "보통인부": 0.005, "굴착기": 0.026, "굴착기규격": "1.0㎥" },
{ "돌망태 높이": "45㎝", "석공": 0.044, "특별인부": 0.014, "보통인부": 0.006, "굴착기": 0.030, "굴착기규격": "1.0㎥" },
{ "돌망태 높이": "50㎝", "석공": 0.049, "특별인부": 0.016, "보통인부": 0.007, "굴착기": 0.033, "굴착기규격": "1.0㎥" },
{ "돌망태 높이": "60㎝", "석공": 0.063, "특별인부": 0.019, "보통인부": 0.008, "굴착기": 0.040, "굴착기규격": "1.0㎥" },
{ "돌망태 높이": "70㎝", "석공": 0.073, "특별인부": 0.024, "보통인부": 0.010, "굴착기": 0.046, "굴착기규격": "1.0㎥" }
],
"주": [
"① 본 품은 타원형 돌망태를 설치하는 기준이다.",
"② 망태석 포설, 망태 조립 및 설치, 망태석 채움, 망태조임 및 마무리 작업을 포함한다.",
"③ 필터매트를 설치할 경우 ‘[공통부문] 5-2-1 매트부설’을 따른다."
]
},
{
"열쇠": "2-2-2 매트리스형 돌망태 설치",
"이름": "매트리스형 돌망태 설치",
"기준": "㎡당",
"출처": "건설품셈 토목 2-2-2",
"조건": {},
"값칸": { "석공": "인", "특별인부": "인", "보통인부": "인", "굴착기": "hr", "굴착기규격": "글" },
"줄": [
{ "석공": 0.027, "특별인부": 0.010, "보통인부": 0.010, "굴착기": 0.025, "굴착기규격": "1.0㎥" }
],
"주": [
"① 본 품은 매트리스형 돌망태(폭 200㎝, 높이 30㎝)를 설치하는 기준이다.",
"② 본 품은 망태 조립 및 설치, 망태석 채움, 덮개 조립 작업이 포함된 것이다.",
"③ 필터매트 설치는 ‘[공통부문] 5-2-1 매트부설’을 따른다."
]
},
{
"열쇠": "2-2-3 돌망태형옹벽 설치",
"이름": "돌망태형옹벽 설치",
"기준": "㎥당",
"출처": "건설품셈 토목 2-2-3",
"조건": {},
"값칸": { "석공": "인", "특별인부": "인", "보통인부": "인", "굴착기": "hr", "굴착기규격": "글" },
"줄": [
{ "석공": 0.190, "특별인부": 0.134, "보통인부": 0.117, "굴착기": 0.281, "굴착기규격": "0.6㎥" }
],
"주": [
"① 본 품은 높이 5m이하의 돌망태옹벽(GABION 철망태)을 설치하는 기준이다.",
"② 철망태의 조립 및 설치, 망태석 채움, 덮개조립 작업을 포함한다.",
"③ 터파기 및 지반고르기는 별도 계상한다.",
"④ 필터매트를 설치할 경우 ‘[공통부문] 5-2-1 매트부설’을 따른다."
]
},
{
"열쇠": "2-3-1 식생매트 설치",
"이름": "식생매트 설치",
"기준": "㎡당",
"출처": "건설품셈 토목 2-3-1",
"조건": { "작업": "고르기" },
"값칸": { "특별인부": "인", "보통인부": "인", "굴삭기": "hr", "굴삭기규격": "글" },
"줄": [
{ "작업": "식생매트설치", "특별인부": 0.014, "보통인부": 0.003 },
{ "작업": "복토", "보통인부": 0.005, "굴삭기": 0.031, "굴삭기규격": "0.6㎥" }
],
"주": [
"① 본 품은 호안등사면에 식생매트를 설치하는 기준이다.",
"② 인력 흙고르기, 식생매트 깔기, 복토 작업을 포함한다.",
"③ 매트부설 이외 기타공종(종자살포, 잔디심기, 관수, 시비 등)는 별도 계상한다."
]
},
{
"열쇠": "2-3-2 블록 붙이기(인력)",
"이름": "블록 붙이기(인력)",
"기준": "㎡당",
"출처": "건설품셈 토목 2-3-2",
"조건": {},
"값칸": { "특별인부": "인", "보통인부": "인" },
"줄": [
{ "특별인부": 0.076, "보통인부": 0.066 }
],
"주": [
"① 본 품은 하천제방에 인력으로 호안블록을 설치하는 기준이다.",
"② 본 품은 호안블록 설치, 철물 연결 작업이 포함된 것이다.",
"③ 비탈면 고르기, 흙 채움 및 잔디심기가 필요한 경우에는 별도 계상한다."
]
},
{
"열쇠": "2-3-3 블록 붙이기(기계)",
"이름": "블록 붙이기(기계)",
"기준": "㎡당",
"출처": "건설품셈 토목 2-3-3",
"조건": {},
"값칸": { "특별인부": "인", "보통인부": "인", "크레인": "시간", "크레인규격": "글" },
"줄": [
{ "특별인부": 0.017, "보통인부": 0.007, "크레인": 0.048, "크레인규격": "10 톤" }
],
"주": [
"① 본 품은 하천제방에 장비를 사용하여 호안블록을 설치하는 기준이다.",
"② 본 품은 호안블록 설치, 철물 연결 작업이 포함된 것이다.",
"③ 비탈면 고르기, 흙 채움 및 잔디심기가 필요한 경우에는 별도 계상한다.",
"④ 현장여건에 따라 크레인을 굴착기(규격 0.2㎥, 사용시간 0.063hr)로 적용할 수 있다."
]
},
{
"열쇠": "2-3-3 블록 붙이기(기계) 계수 주④",
"이름": "블록 붙이기(기계) 계수 주④",
"기준": "",
"출처": "건설품셈 토목 2-3-3 주④",
"그룹": "계수",
"조건": { "구분": "고르기" },
"값칸": { "값": "구분 따름", "단위": "글" },
"줄": [
{ "구분": "크레인 대체 굴착기 규격", "값": 0.2, "단위": "㎥" },
{ "구분": "크레인 대체 굴착기 사용시간", "값": 0.063, "단위": "hr" }
],
"주": []
}
]
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -79,7 +79,7 @@
"기준": "",
"출처": "산림품셈 2-1-3 1~3",
"그룹": "계수",
"조건": {},
"조건": { "구분": "고르기" },
"값칸": { "적용": "줄 따름", "적용원문": "글", "단위": "글" },
"줄": [
{ "구분": "연 근로일수", "적용": 247, "단위": "일" },
@@ -246,7 +246,7 @@
"기준": "",
"출처": "산림품셈 6-5 【소요인력 산출】",
"그룹": "계수",
"조건": {},
"조건": { "구분": "고르기" },
"값칸": { "적용": "줄 따름", "단위": "글" },
"줄": [
{ "구분": "소작업로 간격", "적용": 20, "단위": "m" },
@@ -101,25 +101,29 @@
{
"열쇠": "12-2 표면 마무리",
"이름": "표면 마무리",
"기준": "1㎡",
"기준": "㎡",
"출처": "산림품셈 12-2",
"조건": { "구분": "고르기" },
"값칸": { "수량": "인" },
"줄": [{ "구분": "미장공", "수량": 0.34 }],
"주": ["본 품은 콘크리트 타설 후 쇠흙손을 이용하여 마감하는 기준이다."]
"줄": [
{ "구분": "미장공", "수량": 0.34 }
],
"주": [
"본 품은 콘크리트 타설 후 쇠흙손을 이용하여 마감하는 기준이다."
]
},
{
"열쇠": "12-3 철근 현장가공 및 조립",
"이름": "철근 현장가공 및 조립",
"기준": "1ton",
"기준": "ton",
"출처": "산림품셈 12-3",
"조건": { "구조별": "고르기" },
"값칸": { "가공_철근공": "인", "가공_보통인부": "인", "조립_철근공": "인", "조립_보통인부": "인", "계_철근공": "인", "계_보통인부": "인" },
"줄": [
{ "구조별": "간단", "가공_철근공": 1.07, "가공_보통인부": 0.35, "조립_철근공": 1.69, "조립_보통인부": 0.69, "계_철근공": 2.76, "계_보통인부": 1.04 },
{ "구조별": "보통", "가공_철근공": 1.24, "가공_보통인부": 0.45, "조립_철근공": 1.84, "조립_보통인부": 0.75, "계_철근공": 3.08, "계_보통인부": 1.20 },
{ "구조별": "복잡", "가공_철근공": 1.51, "가공_보통인부": 0.50, "조립_철근공": 1.92, "조립_보통인부": 0.80, "계_철근공": 3.43, "계_보통인부": 1.30 },
{ "구조별": "매우복잡", "가공_철근공": 1.69, "가공_보통인부": 0.60, "조립_철근공": 2.14, "조립_보통인부": 0.86, "계_철근공": 3.83, "계_보통인부": 1.46 }
{ "구조별": "보통", "가공_철근공": 1.24, "가공_보통인부": 0.45, "조립_철근공": 1.84, "조립_보통인부": 0.75, "계_철근공": 3.08, "계_보통인부": 1.2 },
{ "구조별": "복잡", "가공_철근공": 1.51, "가공_보통인부": 0.5, "조립_철근공": 1.92, "조립_보통인부": 0.8, "계_철근공": 3.43, "계_보통인부": 1.3 },
{ "구조별": "매우복잡", "가공_철근공": 1.69, "가공_보통인부": 0.6, "조립_철근공": 2.14, "조립_보통인부": 0.86, "계_철근공": 3.83, "계_보통인부": 1.46 }
],
"주": [
"① 간단한 것이란 측구, 간단한 기초 및 중력식 옹벽 등을 말하며, 보통의 것이란 수문, 반중력식 옹벽 및 교대 등을 말하고, 복잡한 것이란 교량의 슬래브, 암거, 우물통 부벽식 옹벽 등을 말하며, 매우 복잡한 것이란 구주식(기둥형) 교대, 교각, 지하철, 터널 등을 말한다.",
@@ -200,7 +204,7 @@
{
"열쇠": "12-6 콘크리트 포장(인력시공) 배치인원",
"이름": "콘크리트 포장(인력시공) 배치인원",
"기준": "1일",
"기준": "일",
"출처": "산림품셈 12-6",
"조건": { "직종": "고르기" },
"값칸": { "인원": "인" },
@@ -213,7 +217,7 @@
{
"열쇠": "12-6 콘크리트 포장(인력시공) 시공량",
"이름": "콘크리트 포장(인력시공) 포장두께별 시공량",
"기준": "1일(포장공3인, 보통인부3인)",
"기준": "일(포장공3인, 보통인부3인)",
"출처": "산림품셈 12-6",
"조건": { "포장두께": "고르기" },
"값칸": { "믹서트럭_직접타설": "㎥", "믹서트럭_후진진입_경운기운반": "글자" },
@@ -256,7 +260,7 @@
{
"열쇠": "12-7-2 줄눈설치",
"이름": "줄눈설치",
"기준": "1일",
"기준": "일",
"출처": "산림품셈 12-7-2",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수" },
@@ -265,7 +269,9 @@
{ "구분": "보통인부", "단위": "인", "적용": 3 },
{ "구분": "시공량", "단위": "m", "적용": 700 }
],
"주": ["줄눈재, 백업재 등 부대 재료비는 별도 계상한다."]
"주": [
"줄눈재, 백업재 등 부대 재료비는 별도 계상한다."
]
},
{
"열쇠": "12-8 콘크리트 포장 거푸집 배치인원",
@@ -341,7 +347,7 @@
{
"열쇠": "12-9-3 소단 측구",
"이름": "소단 측구",
"기준": "1m",
"기준": "m",
"출처": "산림품셈 12-9-3",
"조건": { "구분": "고르기" },
"값칸": { "규격": "글자", "단위": "글자" },
@@ -520,22 +526,22 @@
{
"열쇠": "12-14 가배수관",
"이름": "가배수관(파형강관부설)",
"기준": "1m",
"기준": "m",
"출처": "산림품셈 12-14",
"조건": { "구분": "고르기", "관경": "수" },
"값칸": { "배관공_수도": "인", "보통인부": "인", "크레인": "hr", "비고": "글자" },
"줄": [
{ "구분": "파형강관부설", "관경": 250, "배관공_수도": 0.04, "보통인부": 0.02, "크레인": 0.12 },
{ "구분": "파형강관부설", "관경": 300, "배관공_수도": 0.06, "보통인부": 0.03, "크레인": 0.13 },
{ "구분": "파형강관부설", "관경": 400, "배관공_수도": 0.10, "보통인부": 0.05, "크레인": 0.16 },
{ "구분": "파형강관부설", "관경": 400, "배관공_수도": 0.1, "보통인부": 0.05, "크레인": 0.16 },
{ "구분": "파형강관부설", "관경": 450, "배관공_수도": 0.12, "보통인부": 0.06, "크레인": 0.17 },
{ "구분": "파형강관부설", "관경": 500, "배관공_수도": 0.13, "보통인부": 0.07, "크레인": 0.18 },
{ "구분": "파형강관부설", "관경": 600, "배관공_수도": 0.17, "보통인부": 0.08, "크레인": 0.20 },
{ "구분": "파형강관부설", "관경": 700, "배관공_수도": 0.21, "보통인부": 0.10, "크레인": 0.23 },
{ "구분": "파형강관부설", "관경": 600, "배관공_수도": 0.17, "보통인부": 0.08, "크레인": 0.2 },
{ "구분": "파형강관부설", "관경": 700, "배관공_수도": 0.21, "보통인부": 0.1, "크레인": 0.23 },
{ "구분": "파형강관부설", "관경": 800, "배관공_수도": 0.24, "보통인부": 0.12, "크레인": 0.25 },
{ "구분": "파형강관부설", "관경": 1000, "배관공_수도": 0.32, "보통인부": 0.16, "크레인": 0.30 },
{ "구분": "파형강관부설", "관경": 1000, "배관공_수도": 0.32, "보통인부": 0.16, "크레인": 0.3 },
{ "구분": "파형강관부설", "관경": 1200, "배관공_수도": 0.39, "보통인부": 0.19, "크레인": 0.35 },
{ "구분": "파형강관부설", "관경": 1500, "배관공_수도": 0.50, "보통인부": 0.25, "크레인": 0.43 },
{ "구분": "파형강관부설", "관경": 1500, "배관공_수도": 0.5, "보통인부": 0.25, "크레인": 0.43 },
{ "구분": "철거", "비고": "부설비의 50%" }
],
"주": []
@@ -637,7 +643,7 @@
"열쇠": "12-17-1-2 시설유형 계수(f1)",
"이름": "그룹 계수 — 펌프카 시공량 시설유형(f1)",
"기준": "",
"출처": "산림품셈 12-17-1-2 주②",
"출처": "산림품셈 12-17-1 주②",
"조건": { "유형": "고르기" },
"값칸": { "f1": "배율" },
"줄": [
@@ -652,7 +658,7 @@
"열쇠": "12-17-1-2 시설유형(f1) 적용기준",
"이름": "펌프카 시공량 시설유형(f1) 적용기준",
"기준": "",
"출처": "산림품셈 12-17-1-2 주②",
"출처": "산림품셈 12-17-1 주②",
"조건": { "유형": "고르기" },
"값칸": { "적용 기준": "글자" },
"줄": [
@@ -667,7 +673,7 @@
"열쇠": "12-17-1-2 현장조건 계수(f2)",
"이름": "그룹 계수 — 펌프카 시공량 현장조건(f2)",
"기준": "",
"출처": "산림품셈 12-17-1-2 주②",
"출처": "산림품셈 12-17-1 주②",
"조건": { "유형": "고르기" },
"값칸": { "f2": "배율" },
"줄": [
@@ -675,13 +681,15 @@
{ "유형": "Type-Ⅱ", "f2": 1.0 },
{ "유형": "Type-Ⅲ", "f2": 0.8 }
],
"주": ["원문 그대로: 표 제목이 「시설유형」, 줄 이름이 「f₁」 로 찍혀 있으나 앞 문단상 이 표는 현장조건(f2) 표다."]
"주": [
"원문 그대로: 표 제목이 「시설유형」, 줄 이름이 「f₁」 로 찍혀 있으나 앞 문단상 이 표는 현장조건(f2) 표다."
]
},
{
"열쇠": "12-17-1-2 현장조건(f2) 적용기준",
"이름": "펌프카 시공량 현장조건(f2) 적용기준",
"기준": "",
"출처": "산림품셈 12-17-1-2 주②",
"출처": "산림품셈 12-17-1 주②",
"조건": { "유형": "고르기" },
"값칸": { "적용 기준": "글자" },
"줄": [
@@ -695,15 +703,17 @@
"열쇠": "12-17-1-2 용적배합 콘크리트",
"이름": "펌프카 타설 용적배합 콘크리트(손비비기)",
"기준": "1㎥",
"출처": "산림품셈 12-17-1-2 주③",
"출처": "산림품셈 12-17-1 주③",
"조건": { "배합비": "고르기" },
"값칸": { "시멘트": "kg", "모래": "㎥", "자갈": "㎥", "콘크리트공": "인", "보통인부": "인" },
"줄": [
{ "배합비": "1:2:4", "시멘트": 320, "모래": 0.45, "자갈": 0.90, "콘크리트공": 0.9, "보통인부": 1.0 },
{ "배합비": "1:2:4", "시멘트": 320, "모래": 0.45, "자갈": 0.9, "콘크리트공": 0.9, "보통인부": 1.0 },
{ "배합비": "1:3:6", "시멘트": 220, "모래": 0.47, "자갈": 0.94, "콘크리트공": 0.9, "보통인부": 0.9 },
{ "배합비": "1:4:8", "시멘트": 170, "모래": 0.48, "자갈": 0.96, "콘크리트공": 0.9, "보통인부": 0.7 }
],
"주": ["재료량에는 할증률이 포함되어 있다."]
"주": [
"재료량에는 할증률이 포함되어 있다."
]
},
{
"열쇠": "12-17-1-3 압송관 설치 및 철거",
@@ -752,7 +762,7 @@
{
"열쇠": "12-18 철근가공조립(복잡)",
"이름": "철근가공조립(복잡)",
"기준": "1ton",
"기준": "ton",
"출처": "산림품셈 12-18",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수" },
@@ -767,7 +777,7 @@
{
"열쇠": "12-19 강관비계",
"이름": "강관비계",
"기준": "1공㎥",
"기준": "공㎥",
"출처": "산림품셈 12-19",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수" },
@@ -777,15 +787,17 @@
{ "구분": "자재 - 조임철물", "단위": "개", "적용": 2.08 },
{ "구분": "자재 - 받침철물", "단위": "개", "적용": 0.04 },
{ "구분": "자재 - 철물", "단위": "개", "적용": 0.04 },
{ "구분": "인력 - 비계공", "단위": "인", "적용": 0.10 },
{ "구분": "인력 - 비계공", "단위": "인", "적용": 0.1 },
{ "구분": "경비 - 기구손료(노무비의)", "단위": "%", "적용": 5 }
],
"주": ["공사기간에 따른 손율을 적용한다."]
"주": [
"공사기간에 따른 손율을 적용한다."
]
},
{
"열쇠": "12-20 강관동바리",
"이름": "강관동바리",
"기준": "1㎥",
"기준": "㎥",
"출처": "산림품셈 12-20",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수" },
@@ -796,12 +808,14 @@
{ "구분": "인력 - 형틀목공", "단위": "인", "적용": 0.07 },
{ "구분": "인력 - 보통인부", "단위": "인", "적용": 0.05 }
],
"주": ["공사기간에 따른 손율을 적용한다."]
"주": [
"공사기간에 따른 손율을 적용한다."
]
},
{
"열쇠": "12-21 아스팔트코팅(2회)",
"이름": "아스팔트코팅(2회)",
"기준": "1㎡",
"기준": "㎡",
"출처": "산림품셈 12-21",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수", "비고": "글자" },
@@ -815,20 +829,21 @@
{
"열쇠": "12-22 P.V.C 파이프 설치(50mm)",
"이름": "P.V.C 파이프 설치(50mm)",
"기준": "1개소",
"기준": "개소",
"출처": "산림품셈 12-22",
"조건": { "구분": "고르기" },
"값칸": { "적용": "글자" },
"줄": [
{ "구분": "재료비" },
{ "구분": "설치비", "적용": "재료비의 5%" }
],
"주": []
"주": [
"값 칸이 빈 항목: 재료비"
]
},
{
"열쇠": "12-23 부직포설치",
"이름": "부직포설치",
"기준": "1㎡",
"기준": "㎡",
"출처": "산림품셈 12-23",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수", "비고": "글자" },
@@ -851,12 +866,14 @@
{ "구분": "인력(10%) - 보통인부", "단위": "인", "적용": 4.0 },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - k", "적용": 0.9 },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - f", "적용": 0.81, "비고": "0.95/1.175" },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.60 },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "18(90°)" },
{ "구분": "장비(90%) - 살수 - 물탱크(5,500)" },
{ "구분": "장비(90%) - 다짐 - 진동 로울러(10ton)" }
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.6 },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "18(90°)" }
],
"주": ["뒷채움 자재비 및 운반비 별산.", "원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임."]
"주": [
"뒷채움 자재비 및 운반비 별산.",
"원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임.",
"값 칸이 빈 항목: 장비(90%) - 살수 - 물탱크(5,500), 장비(90%) - 다짐 - 진동 로울러(10ton)"
]
},
{
"열쇠": "12-24-2 되메우기(노상재)",
@@ -870,13 +887,14 @@
{ "구분": "인력(10%) - 보통인부", "단위": "인", "적용": 4.0 },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - k", "적용": 0.9 },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - f", "적용": 0.69, "비고": "0.9/1.30" },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.60 },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "18(90°)" },
{ "구분": "장비(90%) - 살수 - 물탱크(5,500)" },
{ "구분": "장비(90%) - 다짐 - 진동 로울러(10ton)" },
{ "구분": "장비(90%) - 다짐 - 타이어 로울러(8-15ton)" }
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.6 },
{ "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "18(90°)" }
],
"주": ["뒷채움 자재비 및 운반비 별산.", "원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임."]
"주": [
"뒷채움 자재비 및 운반비 별산.",
"원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임.",
"값 칸이 빈 항목: 장비(90%) - 살수 - 물탱크(5,500), 장비(90%) - 다짐 - 진동 로울러(10ton), 장비(90%) - 다짐 - 타이어 로울러(8-15ton)"
]
},
{
"열쇠": "12-25 기초잡석",
@@ -891,10 +909,12 @@
{ "구분": "적사 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.35 },
{ "구분": "적사 - 유압식백호우(무한궤도 0.7㎥) - f", "적용": 1.0 },
{ "구분": "적사 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "22(180°)" },
{ "구분": "운반 - 덤프트럭(15ton)" },
{ "구분": "부설 및 다짐 - 보통인부", "적용": 0.6 }
],
"주": ["원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임."]
"주": [
"원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임.",
"값 칸이 빈 항목: 운반 - 덤프트럭(15ton)"
]
},
{
"열쇠": "12-26 물푸기",
@@ -904,12 +924,13 @@
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수", "비고": "글자" },
"줄": [
{ "구분": "기계 - 양수기(150m/m)" },
{ "구분": "기계 - 디젤엔진(15HP)", "비고": "11.19kW" },
{ "구분": "운반 및 설치(목도운반) - 목도(인력운반공)", "단위": "인", "적용": 4, "비고": "L=30m, V=2500m/hr, T=25분" },
{ "구분": "운반 및 설치(목도운반) - 보통인부", "단위": "인", "적용": 1 }
],
"주": []
"주": [
"값 칸이 빈 항목: 기계 - 양수기(150m/m)"
]
},
{
"열쇠": "12-27-1 지수판 설치",
@@ -931,13 +952,13 @@
{
"열쇠": "12-27-2 JOINT FILLER",
"이름": "JOINT FILLER",
"기준": "1㎡",
"기준": "㎡",
"출처": "산림품셈 12-27-2",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수", "비고": "글자" },
"줄": [
{ "구분": "자재 - JOINT FILLER", "단위": "㎡", "적용": 1.1, "비고": "10% 할증" },
{ "구분": "자재 - 접착제", "단위": "kg", "적용": 0.30 },
{ "구분": "자재 - 접착제", "단위": "kg", "적용": 0.3 },
{ "구분": "인력(설치비) - 보통인부", "단위": "인", "적용": 0.08 }
],
"주": []
@@ -945,12 +966,12 @@
{
"열쇠": "12-27-3 실런트(20×25mm)",
"이름": "실런트(20×25mm)",
"기준": "1개소",
"기준": "개소",
"출처": "산림품셈 12-27-3",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수", "비고": "글자" },
"줄": [
{ "구분": "자재 - 실런트", "단위": "㎥", "적용": 0.70, "비고": "0.02×0.025×1400kg/㎥" },
{ "구분": "자재 - 실런트", "단위": "㎥", "적용": 0.7, "비고": "0.02×0.025×1400kg/㎥" },
{ "구분": "인력(설치비) - 방수공", "단위": "인", "적용": 0.04 }
],
"주": []
@@ -958,12 +979,12 @@
{
"열쇠": "12-28 신구 BOX접합",
"이름": "신구 BOX접합",
"기준": "1개소",
"기준": "개소",
"출처": "산림품셈 12-28",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수" },
"줄": [
{ "구분": "자재 - 에폭시 접착제", "단위": "kg", "적용": 1.20 },
{ "구분": "자재 - 에폭시 접착제", "단위": "kg", "적용": 1.2 },
{ "구분": "자재 - 시너", "단위": "", "적용": 0.21 },
{ "구분": "인력 - 미장공", "단위": "인", "적용": 0.12 }
],
@@ -1001,7 +1022,7 @@
{
"열쇠": "12-30-2 접속스라브부(D29m/m, L=500m/m)",
"이름": "다웰바 설치 — 접속스라브부(D29m/m, L=500m/m)",
"기준": "1개소",
"기준": "개소",
"출처": "산림품셈 12-30-2",
"조건": { "구분": "고르기" },
"값칸": { "규격": "글자", "단위": "글자", "적용": "수 또는 글자", "비고": "글자" },
@@ -1026,10 +1047,11 @@
"조건": { "구분": "고르기" },
"값칸": { "적용": "글자" },
"줄": [
{ "구분": "재료비" },
{ "구분": "설치비", "적용": "주재료비의 5%" }
],
"주": []
"주": [
"값 칸이 빈 항목: 재료비"
]
},
{
"열쇠": "12-32 전선관 설치(P.V.C ø54mm)",
@@ -1047,7 +1069,7 @@
{
"열쇠": "12-33 비닐깔기",
"이름": "비닐깔기",
"기준": "1㎡",
"기준": "㎡",
"출처": "산림품셈 12-33",
"조건": { "구분": "고르기" },
"값칸": { "규격": "글자", "단위": "글자", "적용": "수" },
@@ -1089,7 +1111,7 @@
{
"열쇠": "12-34-3 철근가공조립(보통)",
"이름": "암거이음받침 — 철근가공조립(보통)",
"기준": "1ton",
"기준": "ton",
"출처": "산림품셈 12-34-3",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수 또는 글자" },
@@ -1106,17 +1128,19 @@
{
"열쇠": "12-34-4 채움재(T=20m/m)",
"이름": "암거이음받침 — 채움재(T=20m/m)",
"기준": "1㎡",
"기준": "㎡",
"출처": "산림품셈 12-34-4",
"조건": { "구분": "고르기" },
"값칸": { "적용": "글자" },
"줄": [{ "구분": "재료비", "적용": "JOINT FILLER" }],
"줄": [
{ "구분": "재료비", "적용": "JOINT FILLER" }
],
"주": []
},
{
"열쇠": "12-35 콘크리트 표면 강화재(하드너)",
"이름": "콘크리트 표면 강화재(하드너)",
"기준": "1㎡",
"기준": "㎡",
"출처": "산림품셈 12-35",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수", "비고": "글자" },
@@ -1125,7 +1149,9 @@
{ "구분": "설치 - 미장공", "단위": "인", "적용": 0.14 },
{ "구분": "설치 - 보통인부", "단위": "인", "적용": 0.05 }
],
"주": ["바닥, 벽체에 칠한다."]
"주": [
"바닥, 벽체에 칠한다."
]
},
{
"열쇠": "12-36 P.C BOX 설치",
@@ -1144,7 +1170,7 @@
{
"열쇠": "12-37 콘크리트 타설(무근진동기 제외)",
"이름": "콘크리트 타설(무근진동기 제외)",
"기준": "1㎥",
"기준": "㎥",
"출처": "산림품셈 12-37",
"조건": { "구분": "고르기" },
"값칸": { "단위": "글자", "적용": "수", "비고": "글자" },
+26
View File
@@ -16,6 +16,9 @@ SAMPLES = [
"계수_산림품셈_9장.json",
"기계_건설품셈.json",
"로직_건설품셈_공통8장.json",
"로직_산림품셈_03장.json",
"로직_산림품셈_04장.json",
"로직_산림품셈_05장.json",
"로직_산림품셈_10장.json",
"로직_산림품셈_11장.json",
"로직_산림품셈_13장.json",
@@ -141,6 +144,29 @@ def test_중기운반_트레일러_횟수(whole):
assert got[""][0]["수량"].quantize(Decimal("0.0001")) == Decimal("1.3041")
def test_예정지정리_할증_합산(whole):
"""3-5 — 바이오매스 10 + 침엽수림 10 + 개벌지 10 + 산불 5×2/10 = 31% · 2.4×50%×1.31."""
given = {
"작업내용": "보완사업지 정리",
"정리량": 120,
"임상": "침엽수림",
"개벌지": "700㎡ 이하(또는 벌채폭 30m)",
"산불피해면적": 2,
"조림면적": 10,
}
got = mf.run(whole, "산림품셈:3-5 예정지정리", given)
assert [line["수량"] for line in got[""]] == [Decimal("1.572"), Decimal("1.572")]
def test_작업안전_보조_올림(whole):
"""4-6 — 벌목부 4인당 보통인부 1인 · 5인이면 2인."""
qty = [
mf.run(whole, "산림품셈:4-6 벌목부 작업안전 보조", {"벌목부": n})[""][0]["수량"]
for n in (3, 4, 5, 8)
]
assert qty == [1, 1, 2, 2]
def test_범위_입력은_막음(whole):
with pytest.raises(mf.FormulaError):
mf.run(