Merge remote-tracking branch 'origin/sub_laptop_2' into sub_laptop_2

This commit is contained in:
2026-09-19 01:31:20 +09:00
187 changed files with 3374 additions and 6 deletions
@@ -0,0 +1,542 @@
# -*- coding: utf-8 -*-
"""품셈 PDF → 절별 md 도구 (규칙: `원가계산/_품셈md_작성규칙.md` · 2026-09-19).
판정 기준은 PDF 뿐 — 원가계산(B09)·공종 마스터·옛 md 는 보지 않음.
사용: python pum_md_tool.py plan <산림|건설> 차례에서 장·절 → 본문/ 빈 파일(머리만 · 상태 대기)
python pum_md_tool.py pages <산림|건설> [쪽범위] 쪽 그림 150dpi PNG → tmp/pum_pages/ (git 밖)
python pum_md_tool.py check <md 파일> ① 수 대조 ② 글자 대조 → 머리 「기계검사」 칸
python pum_md_tool.py status 장별 대기/작성중/검증대기/확정 표
절 경계 = 시작표지·끝표지 글자가 쪽 안에서 놓인 줄(좌표로 묶은 줄의 맨 앞).
좌표로 줄 묶기는 `resources/tester/test_const_pdf_coverage.py` 의 것을 그대로 씀(그 시험은 안 고침).
"""
from __future__ import annotations
import collections
import difflib
import hashlib
import re
import sys
from dataclasses import dataclass
from pathlib import Path
ROOT = Path(__file__).resolve().parents[4] # 저장소 뿌리
sys.path.insert(0, str(ROOT))
from resources.tester.test_const_pdf_coverage import _NUM, _page_rows # noqa: E402
COST = ROOT / "resources/knowledge/original/원가계산"
#: 책마다 — PDF · 차례 쪽(PDF 쪽 번호) · 인쇄 1쪽이 놓인 PDF 쪽 · 머리 「문서」 칸 · 새 md 뿌리
BOOKS = {
"산림": {
"pdf": COST / "산림_표준품셈/첨부/(산림청고시 제2025-82호) 산림사업 표준품셈.pdf",
"toc": (3, 12),
"first_body": 13,
"doc": "산림사업 표준품셈(산림청고시 제2025-82호)",
"out": COST / "산림_표준품셈/본문",
},
}
HEAD_KEYS = (
"문서",
"",
"PDF쪽",
"인쇄쪽",
"시작표지",
"끝표지",
"상태",
"작성",
"검증",
"원천",
"기계검사",
"확정지문",
)
STATES = ("대기", "작성중", "검증대기", "확정")
_TOC_SKIP = {"", "내 용", "페이지", "- 목 차 -"}
_TOC_ID = re.compile(r"\d+장|\d+-\d+(?:-\d+)*|부록\d*")
_BAD_NAME = re.compile(r'[/:*?"<>|\\]')
_LEADER = re.compile(r"\s*[·․…]{3,}.*$")
#: 글자층이 없다고 볼 쪽 글자 수(쪽 번호만 남은 쪽)
_EMPTY_PAGE_CHARS = 20
@dataclass
class Entry:
"""차례 한 줄 — 장(`제1장`) · 절(`1-1`) · 항(`1-1-1`) · 부록."""
ident: str
name: str
page: int # 인쇄 쪽
def toc_entries(doc, first: int, last: int) -> list[Entry]:
"""차례 쪽(PDF first~last)의 줄 — 번호 줄 · 이름 줄(점선) · 쪽 줄이 차례로 옴."""
lines = [
line
for number in range(first - 1, last)
for line in doc[number].get_text().splitlines()
if line.strip() not in _TOC_SKIP
]
return parse_toc(lines)
def parse_toc(raw: list[str]) -> list[Entry]:
lines = [
t for t in (_LEADER.sub("", line).strip() for line in raw) if t
] # 점선 뗌(「부록 ····」)
out, i = [], 0
while i < len(lines):
if not _TOC_ID.fullmatch(lines[i]):
raise ValueError(f"차례 모양이 다름: {lines[i]!r}")
j, name = i + 1, []
while j < len(lines) and not lines[j].isdigit():
name.append(lines[j])
j += 1
if j == len(lines):
raise ValueError(f"차례 쪽 번호 없음: {lines[i]}")
out.append(Entry(lines[i], " ".join(name), int(lines[j])))
i = j + 1
return out
#: 가운뎃점 여러 벌 — 차례는 「보수․복구」(U+2024) · 본문은 「보수·복구」(U+00B7). 맞대기에서만 같게 봄.
_DOTS = str.maketrans({"": "·", "": "·", "": "·", "": "·"})
def key(text: str) -> str:
"""표지 맞대기 — 공백·대괄호를 떼고 번호 뒤 점을 뗌(`9-5. 발파암` = `9-5 발파암`)."""
tight = re.sub(r"[\s\[\]]", "", text).translate(_DOTS)
return re.sub(r"^(\d+(?:-\d+)*)\.", r"\1", tight)
def locate(doc, marker: str, first_pdf: int, slack: int = 3) -> tuple[int, int]:
"""표지가 줄 맨 앞에 놓인 (PDF 쪽, 그 쪽 안 줄 차례) — first_pdf 부터 slack 쪽 안에서 찾음."""
want = key(marker)
for number in range(first_pdf, min(first_pdf + slack, doc.page_count) + 1):
for index, row in enumerate(_page_rows(doc[number - 1])):
if key(row).startswith(want):
return number, index
raise ValueError(f"표지를 못 찾음: {marker} (PDF {first_pdf}~{first_pdf + slack})")
def heading_pattern(ident: str) -> re.Pattern:
"""본문 머리 줄 — **번호로** 찾음. 차례 이름에 오타가 있어서(「면벅」=면벽 · 「조림」=조립 …)."""
if ident.startswith(""):
return re.compile(r"^제\s*" + ident[1:-1] + r"\s*장(?!\d)")
if ident.startswith("부록"):
return re.compile(r"^\[?" + re.escape(ident) + r"\]?(?!\d)")
return re.compile(r"^" + re.escape(ident) + r"\.(?!\d)")
#: 글자 사이 빈칸으로 볼 틈(글자 크기 대비) — 본문 머리 실측: 빈칸 7.7pt · 붙은 글자 0.7pt(14pt 글꼴)
_GAP = 0.25
def visual_text(page, row: str) -> str:
"""쪽 그림대로 띄운 줄 — 글자층은 빈칸을 잃어서(「설계및수량」) 글자 사이 틈으로 되살림."""
want = re.sub(r"\s", "", row)
for block in page.get_text("rawdict")["blocks"]:
for line in block.get("lines", []):
chars = [c for span in line["spans"] for c in span["chars"]]
if re.sub(r"\s", "", "".join(c["c"] for c in chars)) != want:
continue
size = max(span["size"] for span in line["spans"])
out = ""
for prev, ch in zip([None, *chars], chars):
gap = ch["bbox"][0] - prev["bbox"][2] if prev else 0
if prev and not prev["c"].isspace() and gap > size * _GAP:
out += " "
out += ch["c"]
return " ".join(out.split())
return row
def find_heading(doc, ident: str, first_pdf: int, slack: int = 3) -> tuple[int, int, str]:
"""(PDF 쪽, 쪽 안 줄 차례, 머리 글자) — 머리 글자는 PDF 그대로(번호 뒤 마침표 포함) · 띄어쓰기는 쪽 그림대로."""
pattern = heading_pattern(ident)
for number in range(first_pdf, min(first_pdf + slack, doc.page_count) + 1):
for index, row in enumerate(_page_rows(doc[number - 1])):
if pattern.match(row.strip()):
return number, index, visual_text(doc[number - 1], row.strip())
raise ValueError(f"머리를 못 찾음: {ident} (PDF {first_pdf}~{first_pdf + slack})")
def name_of(ident: str, title: str) -> str:
"""머리 글자에서 번호를 뗀 이름(「9-5. 발파암」 → 「발파암」)."""
return title[heading_pattern(ident).match(title).end() :].strip()
def claimed_elsewhere(root: Path) -> set[str]:
"""다른 창 브랜치에 이미 있는 새 md 경로 — 만들면 합칠 때 같은 자리 두 벌로 부딪힘."""
import subprocess
rel = root.relative_to(ROOT).as_posix()
refs = subprocess.run(
["git", "-C", str(ROOT), "for-each-ref", "--format=%(refname)", "refs/remotes/origin"],
capture_output=True,
text=True,
check=True,
).stdout.split()
out: set[str] = set()
for ref in refs:
listed = subprocess.run(
[
"git",
"-C",
str(ROOT),
"-c",
"core.quotepath=off",
"ls-tree",
"-r",
"--name-only",
ref,
"--",
rel,
],
capture_output=True,
text=True,
encoding="utf-8",
)
out.update(line[len(rel) + 1 :] for line in listed.stdout.splitlines() if line)
return out # root 아래 상대 경로
def safe(text: str) -> str:
return _BAD_NAME.sub("", text).replace(" ", "_")
def _span(a: int, b: int) -> str:
return str(a) if a == b else f"{a}~{b}"
def head_text(values: dict[str, str]) -> str:
return (
"---\n" + "".join(f"{k}: {values.get(k, '')}".rstrip() + "\n" for k in HEAD_KEYS) + "---\n"
)
def read_head(path: Path) -> dict[str, str]:
lines = path.read_text(encoding="utf-8").splitlines()
if not lines or lines[0] != "---":
raise ValueError(f"머리 없음: {path}")
out = {}
for line in lines[1:]:
if line == "---":
return out
k, _, v = line.partition(":")
out[k.strip()] = v.strip()
raise ValueError(f"머리 끝 없음: {path}")
_SLOT = re.compile(r"제(\d+)장_[^/]*/(\d+-\d+)_")
def plan(book_name: str) -> list[Path]:
"""장마다 `0-00_장머리.md` + 절마다 빈 파일(머리만 · 상태 대기).
**이미 있는 자리는 안 건드림** — 이 폴더에 있거나 다른 창 브랜치에 있는 장·절(이름이 달라도 번호로 봄).
"""
import pymupdf
book = BOOKS[book_name]
out = book["out"]
offset = book["first_body"] - 1 # 인쇄 쪽 + offset = PDF 쪽
have = claimed_elsewhere(out) | {p.relative_to(out).as_posix() for p in out.rglob("*.md")}
taken = {f"{int(m[1])}/{m[2]}" for m in map(_SLOT.match, have) if m}
folders = {int(m[1]): rel.split("/")[0] for rel in have if (m := _SLOT.match(rel))}
written = []
with pymupdf.open(book["pdf"]) as doc:
entries = toc_entries(doc, *book["toc"])
# 경계가 되는 차례 줄 — 장 · 절 · 부록N(항은 절 안 · 머리 없는 「부록」 묶음 줄은 뺌)
bounds = [e for e in entries if e.ident != "부록" and e.ident.count("-") < 2]
chapter_no = None
for n, entry in enumerate(bounds):
if entry.ident.startswith("부록"):
continue
start_pdf, _, title = find_heading(doc, entry.ident, entry.page + offset)
following = bounds[n + 1] if n + 1 < len(bounds) else None
if following is None: # 문서 맨 끝 절
end_pdf, end_marker = doc.page_count, ""
else: # 장 마지막 절이면 다음 장 제목 · 부록 앞이면 부록 제목
next_pdf, at, end_marker = find_heading(
doc, following.ident, following.page + offset
)
end_pdf = max(next_pdf - 1 if at == 0 else next_pdf, start_pdf)
if entry.ident.startswith(""):
chapter_no = int(entry.ident[1:-1])
folders.setdefault(
chapter_no, f"{chapter_no:02d}장_{safe(name_of(entry.ident, title))}"
)
slot, file_name = "0-00", "0-00_장머리.md"
else:
major, minor = entry.ident.split("-")
slot = f"{major}-{int(minor):02d}"
file_name = f"{slot}_{safe(name_of(entry.ident, title))}.md"
if chapter_no is None or f"{chapter_no}/{slot}" in taken:
continue
empty = any(
len(re.sub(r"\s", "", doc[p - 1].get_text())) < _EMPTY_PAGE_CHARS
for p in range(start_pdf, end_pdf + 1)
)
path = out / folders[chapter_no] / file_name
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(
head_text(
{
"문서": book["doc"],
"": title,
"PDF쪽": _span(start_pdf, end_pdf),
"인쇄쪽": _span(start_pdf - offset, end_pdf - offset),
"시작표지": title,
"끝표지": end_marker,
"상태": "대기",
"원천": "그림" if empty else "글자층",
}
),
encoding="utf-8",
)
written.append(path)
return written
# ── check ──────────────────────────────────────────────────────────────
#: 쪽 번호 줄(「- 123 -」) — 절 글자에서 뺌
_PAGE_NO = re.compile(r"^-\s*\d+\s*-$")
#: md 문법 — 글자 대조·수 대조에서 뺌(원문 글자가 아님)
_COMMENT = re.compile(r"<!--.*?-->", re.S)
_IMAGE = re.compile(r"!\[[^\]]*\]\([^)]*\)")
_TABLE_RULE = re.compile(r"^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)*\|?\s*$")
#: 막음표 — 원문 글자가 md 문법으로 읽히지 않게 앞에 `\` 를 붙인 것(`\*` `\-` `\#` `\>` `\|` …)
_ESCAPED = re.compile(r"\\([\\`*_{}\[\]()#+\-.!|>~^])")
_HOLD = "\x00"
def book_of(path: Path) -> dict:
path = path.resolve()
for book in BOOKS.values():
if path.is_relative_to(book["out"].resolve()):
return book
raise ValueError(f"본문/ 아래 파일이 아님: {path}")
def split_head(text: str) -> tuple[str, str]:
"""(머리, 몸) — 머리는 첫 `---` 부터 다음 `---` 까지."""
lines = text.split("\n")
end = lines.index("---", 1)
return "\n".join(lines[: end + 1]), "\n".join(lines[end + 1 :])
def md_lines(body: str) -> list[tuple[int, str]]:
"""몸의 (줄 번호, 원문 글자) — 주석 · 그림 · 표 구분 줄 · md 문법 글자를 뺌. 줄 번호는 몸 기준 1부터."""
body = _COMMENT.sub(lambda m: "\n" * m.group(0).count("\n"), body)
out = []
for number, line in enumerate(body.split("\n"), start=1):
if _TABLE_RULE.match(line):
continue
line = _IMAGE.sub("", line).replace("<br>", " ")
held = _ESCAPED.findall(line) # 막음표 뒤 원문 글자는 아래 문법 떼기에서 지킴
line = _ESCAPED.sub(_HOLD, line)
line = re.sub(r"^\s*#+\s", "", line) # 제목
line = re.sub(r"^\s*(>\s*)+", "", line) # 인용
line = re.sub(r"[|^_]", " ", line) # 표 칸 · 첨자 표시(`10^-7` · `C_m`)
for ch in held:
line = line.replace(_HOLD, ch, 1)
out.append((number, line))
return out
def pdf_lines(doc, head: dict[str, str]) -> list[tuple[int, str]]:
"""그 절 PDF 글자층의 (PDF 쪽, 줄) — 시작표지 줄부터 끝표지 줄 앞까지 · 쪽 번호 줄 뺌."""
first, _, last = head["PDF쪽"].partition("~")
first, last = int(first), int(last or first)
start_page, start_row = locate(doc, head["시작표지"], first, slack=0)
end_page, end_row = last + 1, 0
if head["끝표지"] and head["끝표지"] != "":
try:
end_page, end_row = locate(doc, head["끝표지"], last, slack=1)
except ValueError:
pass
out = []
for number in range(start_page, min(end_page, doc.page_count) + 1):
for index, row in enumerate(_page_rows(doc[number - 1])):
if (number, index) < (start_page, start_row) or (number, index) >= (end_page, end_row):
continue
if not _PAGE_NO.match(row.strip()):
out.append((number, row))
return out
def _tight(lines: list[tuple[int, str]]) -> tuple[str, list[int]]:
"""공백 뗀 글자 줄 + 글자마다 어디서 왔나(쪽 또는 md 줄)."""
text, where = [], []
for at, line in lines:
for ch in re.sub(r"\s", "", line):
text.append(ch)
where.append(at)
return "".join(text), where
def _numbers(lines: list[tuple[int, str]]) -> tuple[collections.Counter, dict[str, list[int]]]:
counts, where = collections.Counter(), collections.defaultdict(list)
for at, line in lines:
for token in _NUM.findall(line):
counts[token] += 1
where[token].append(at)
return counts, where
def compare(pdf: list[tuple[int, str]], md: list[tuple[int, str]]) -> dict:
"""① 수(갯수까지) ② 글자(공백 뗌 · 갯수까지) — 양방향."""
pdf_n, pdf_at = _numbers(pdf)
md_n, md_at = _numbers(md)
pdf_t, pdf_where = _tight(pdf)
md_t, md_where = _tight(md)
missing_c = collections.Counter(pdf_t) - collections.Counter(md_t)
extra_c = collections.Counter(md_t) - collections.Counter(pdf_t)
spots = []
if missing_c or extra_c: # 자리 — 차례대로 맞대 어긋난 토막(갯수 차가 난 글자가 든 것만)
matcher = difflib.SequenceMatcher(None, pdf_t, md_t, autojunk=False)
for op, i1, i2, j1, j2 in matcher.get_opcodes():
gone, added = pdf_t[i1:i2], md_t[j1:j2]
if op == "equal" or not (set(gone) & set(missing_c) or set(added) & set(extra_c)):
continue
spots.append(
{
"pdf": pdf_where[min(i1, len(pdf_where) - 1)] if pdf_where else None,
"md": md_where[min(j1, len(md_where) - 1)] if md_where else None,
"context": pdf_t[max(0, i1 - 8) : i1],
"pdf_only": gone,
"md_only": added,
}
)
return {
"num_missing": {k: (v, pdf_at[k][:v]) for k, v in (pdf_n - md_n).items()},
"num_extra": {k: (v, md_at[k][:v]) for k, v in (md_n - pdf_n).items()},
"char_missing": missing_c,
"char_extra": extra_c,
"spots": spots,
}
def verdict(result: dict) -> str:
counts = (
sum(v for v, _ in result["num_missing"].values()),
sum(v for v, _ in result["num_extra"].values()),
sum(result["char_missing"].values()),
sum(result["char_extra"].values()),
)
word = "통과" if not any(counts) else "불통"
return (
f"{word} · ①수 결손 {counts[0]} 허구 {counts[1]} · ②글자 빠짐 {counts[2]} 더함 {counts[3]}"
)
def fingerprint(text: str) -> str:
"""확정지문 — 줄끝을 LF 로 고쳐 셈(git 이 CRLF 로 풀어도 같게) · 도구가 적는 두 칸(기계검사·확정지문)은 뺌."""
lines = text.replace("\r\n", "\n").split("\n")
kept = [ln for ln in lines if not ln.startswith(("기계검사:", "확정지문:"))]
return hashlib.sha256("\n".join(kept).encode("utf-8")).hexdigest()
def set_head(text: str, field: str, value: str) -> str:
head, body = split_head(text)
head = re.sub(rf"(?m)^{field}:.*$", f"{field}: {value}".rstrip(), head, count=1)
return head + "\n" + body
def check_file(path: Path) -> tuple[dict, str]:
"""(대조 결과, 한 줄 판정) — 파일은 안 고침."""
import pymupdf
_, body = split_head(path.read_text(encoding="utf-8").replace("\r\n", "\n"))
with pymupdf.open(book_of(path)["pdf"]) as doc:
result = compare(pdf_lines(doc, read_head(path)), md_lines(body))
return result, verdict(result)
def check(path: Path) -> int:
"""검사하고 머리 「기계검사」 칸에 적음 · 상태 `확정` 이고 통과인데 확정지문이 비었으면 지문도 적음.
⚠ 있는 확정지문은 안 고침 — 확정 뒤 바뀐 파일을 지문을 다시 적어 덮으면 시험이 못 잡음.
"""
result, line = check_file(path)
print(f"{path.name}: {line}")
for token, (count, at) in sorted(result["num_missing"].items()):
print(f" ① 결손 {token} ×{count} (PDF {', '.join(map(str, at))}쪽)")
for token, (count, at) in sorted(result["num_extra"].items()):
print(f" ① 허구 {token} ×{count} (md 몸 {', '.join(map(str, at))}줄)")
for spot in result["spots"][:40]:
print(
f" ② PDF {spot['pdf']}쪽 · md 몸 {spot['md']}줄 · …{spot['context']}"
f" [PDF만 「{spot['pdf_only']}」 · md만 「{spot['md_only']}」]"
)
text = set_head(path.read_text(encoding="utf-8").replace("\r\n", "\n"), "기계검사", line)
head = read_head(path)
if head.get("상태") == "확정" and line.startswith("통과") and not head.get("확정지문"):
text = set_head(text, "확정지문", fingerprint(text))
path.write_text(text, encoding="utf-8", newline="\n")
return 0 if line.startswith("통과") else 1
# ── pages · status ─────────────────────────────────────────────────────
PAGES_DIR = ROOT / "tmp/pum_pages"
def pages(book_name: str, span: str = "") -> list[Path]:
"""쪽 그림 150dpi PNG — `tmp/pum_pages/<책>/p0135.png`(git 밖)."""
import pymupdf
out = PAGES_DIR / book_name
out.mkdir(parents=True, exist_ok=True)
made = []
with pymupdf.open(BOOKS[book_name]["pdf"]) as doc:
first, _, last = (span or f"1~{doc.page_count}").replace("-", "~").partition("~")
for number in range(int(first), int(last or first) + 1):
path = out / f"p{number:04d}.png"
doc[number - 1].get_pixmap(dpi=150).save(path)
made.append(path)
return made
def status() -> str:
"""장별 상태 표(md) — 머리 「상태」 칸을 모음."""
rows = [
"| 책 | 장 | " + " | ".join(STATES) + " | 계 |",
"|---|---|" + "---|" * (len(STATES) + 1),
]
for name, book in BOOKS.items():
by_chapter: dict[str, collections.Counter] = {}
for path in sorted(book["out"].rglob("*.md")):
chapter = path.relative_to(book["out"]).parts[0]
by_chapter.setdefault(chapter, collections.Counter())[
read_head(path).get("상태", "")
] += 1
for chapter, counts in by_chapter.items():
cells = " | ".join(str(counts[s]) for s in STATES)
rows.append(f"| {name} | {chapter} | {cells} | {sum(counts.values())} |")
return "\n".join(rows)
def main(argv: list[str]) -> int:
command, args = (argv[0], argv[1:]) if argv else ("", [])
if command == "plan" and args:
print(f"새 파일 {len(plan(args[0]))}")
return 0
if command == "pages" and args:
made = pages(args[0], args[1] if len(args) > 1 else "")
print(f"쪽 그림 {len(made)}{PAGES_DIR / args[0]}")
return 0
if command == "check" and args:
return max(check(Path(a)) for a in args)
if command == "status":
print(status())
return 0
print(__doc__)
return 2
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 제1장 적용기준
PDF쪽: 13
인쇄쪽: 1
시작표지: 제1장 적용기준
끝표지: 1-1. 일반사항
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 1-1. 일반사항
PDF쪽: 13~14
인쇄쪽: 1~2
시작표지: 1-1. 일반사항
끝표지: 1-2. 설계 및 수량
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 1-2. 설계 및 수량
PDF쪽: 14~27
인쇄쪽: 2~15
시작표지: 1-2. 설계 및 수량
끝표지: 1-3. 재료 및 노임의 할증
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 1-3. 재료 및 노임의 할증
PDF쪽: 27~29
인쇄쪽: 15~17
시작표지: 1-3. 재료 및 노임의 할증
끝표지: 1-4. 품의 할인․할증
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 1-4. 품의 할인․할증
PDF쪽: 29~36
인쇄쪽: 17~24
시작표지: 1-4. 품의 할인․할증
끝표지: 1-5. 목재 원목시가
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 1-5. 목재 원목시가
PDF쪽: 36
인쇄쪽: 24
시작표지: 1-5. 목재 원목시가
끝표지: 1-6. 원가 작성기준
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 1-6. 원가 작성기준
PDF쪽: 36~37
인쇄쪽: 24~25
시작표지: 1-6. 원가 작성기준
끝표지: 1-7. 기타사항
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 1-7. 기타사항
PDF쪽: 38~39
인쇄쪽: 26~27
시작표지: 1-7. 기타사항
끝표지: 제2장 소요재료 및 기계손료
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 제2장 소요재료 및 기계손료
PDF쪽: 40
인쇄쪽: 28
시작표지: 제2장 소요재료 및 기계손료
끝표지: 2-1. 소요재료
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 2-1. 소요재료
PDF쪽: 40~47
인쇄쪽: 28~35
시작표지: 2-1. 소요재료
끝표지: 2-2. 기계손료
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 2-2. 기계손료
PDF쪽: 48~51
인쇄쪽: 36~39
시작표지: 2-2. 기계손료
끝표지: 제3장 작업장 관리
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 제3장 작업장 관리
PDF쪽: 52
인쇄쪽: 40
시작표지: 제3장 작업장 관리
끝표지: 3-1. 경계표시
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 3-1. 경계표시
PDF쪽: 52
인쇄쪽: 40
시작표지: 3-1. 경계표시
끝표지: 3-2. 작업로 선정
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 3-2. 작업로 선정
PDF쪽: 52
인쇄쪽: 40
시작표지: 3-2. 작업로 선정
끝표지: 3-3. 작업로 설치
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 3-3. 작업로 설치
PDF쪽: 52~53
인쇄쪽: 40~41
시작표지: 3-3. 작업로 설치
끝표지: 3-4. 임산물 운반로 신설 및 보수·복구
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 3-4. 임산물 운반로 신설 및 보수·복구
PDF쪽: 53~55
인쇄쪽: 41~43
시작표지: 3-4. 임산물 운반로 신설 및 보수·복구
끝표지: 3-5. 예정지정리
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 3-5. 예정지정리
PDF쪽: 56~57
인쇄쪽: 44~45
시작표지: 3-5. 예정지정리
끝표지: 3-6. 산물 임내정리
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 3-6. 산물 임내정리
PDF쪽: 57
인쇄쪽: 45
시작표지: 3-6. 산물 임내정리
끝표지: 3-7. 재해산물 수집
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 3-7. 재해산물 수집
PDF쪽: 58
인쇄쪽: 46
시작표지: 3-7. 재해산물 수집
끝표지: 3-8. 드론 영상 촬영
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 3-8. 드론 영상 촬영
PDF쪽: 58
인쇄쪽: 46
시작표지: 3-8. 드론 영상 촬영
끝표지: 제4장 나무베기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -5,9 +5,9 @@ PDF쪽: 59
인쇄쪽: 47
시작표지: 제4장 나무베기
끝표지: 4-1. 수확베기
상태: 검증대기
상태: 확정
작성: sub_laptop_2
검증:
검증: sub_laptop_4
원천: 글자층
기계검사:
확정지문:
@@ -5,9 +5,9 @@ PDF쪽: 59~60
인쇄쪽: 47~48
시작표지: 4-1. 수확베기
끝표지: 4-2. 단목베기
상태: 검증대기
상태: 확정
작성: sub_laptop_2
검증:
검증: sub_laptop_4
원천: 글자층
기계검사:
확정지문:
@@ -5,9 +5,9 @@ PDF쪽: 60~61
인쇄쪽: 48~49
시작표지: 4-2. 단목베기
끝표지: 4-3. 위험목 베기
상태: 검증대기
상태: 확정
작성: sub_laptop_2
검증:
검증: sub_laptop_4
원천: 글자층
기계검사:
확정지문:
@@ -0,0 +1,16 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 제5장 식재 및 녹화
PDF쪽: 64
인쇄쪽: 52
시작표지: 제5장 식재 및 녹화
끝표지: 5-1. 굴취작업
상태: 검증대기
작성: sub_laptop_4
검증:
원천: 글자층
기계검사:
확정지문:
---
# 제5장 식재 및 녹화
@@ -0,0 +1,139 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-1. 굴취작업
PDF쪽: 64~66
인쇄쪽: 52~54
시작표지: 5-1. 굴취작업
끝표지: 5-2. 뿌리돌림
상태: 검증대기
작성: sub_laptop_4
검증:
원천: 글자층
기계검사:
확정지문:
---
## 5-1. 굴취작업
### 5-1-1. 관목굴취
(인/10본당)
| 구분 | 수량(수고기준) | | | |
|---|---|---|---|---|
| | 0.3m 미만 | 0.30.7m 이하 | 0.81.1m 이하 | 1.21.5m 이하 |
| 특별인부 | 0.084 | 0.168 | 0.264 | 0.408 |
| 보통인부 | 0.012 | 0.036 | 0.048 | 0.072 |
<!-- 머리: 몸 1행까지 머리 · 병합: 머리 2~5열 「수량(수고기준)」 · 1열 머리~몸 1행 -->
[주]
① 본 품은 근원부에서 분지되어 다년생으로 자라는 관목수종에 적용한다.
② 본 품은 분 보호재(녹화마대, 녹화끈 등)를 활용하여 분을 보호하지 않은 상태로 굴취하는 작업을 기준한다.
③ 나무높이가 1.5m를 초과할 때는 나무높이에 비례하여 할증할 수 있다.
④ 나무높이보다 수관폭이 더 클 때는 그 크기를 나무높이로 본다.
⑤ 굴취수목의 운반을 위하여 운반로를 개설하여야 하는 경우에는 그 비용을 별도 계상한다.
⑥ 녹화마대, 녹화끈을 사용하여 분을 보호할 경우 ‘굴취(나무높이)’를 적용한다.
⑦ 본 품은 야생의 관목류를 굴취할 때에 적용한다.
### 5-1-2. 교목굴취(나무높이)
(인/본당)
| 나무높이(m) | 수량 | |
|---|---|---|
| | 특별인부 | 보통인부 |
| 1.0 이하 | 0.072 | 0.012 |
| 1.11.5 | 0.084 | 0.024 |
| 1.62.0 | 0.096 | 0.024 |
| 2.12.5 | 0.120 | 0.036 |
| 2.63.0 | 0.132 | 0.036 |
| 3.13.5 | 0.156 | 0.036 |
| 3.64.0 | 0.180 | 0.048 |
| 4.14.5 | 0.204 | 0.048 |
| 4.65.0 | 0.228 | 0.060 |
| 비고 | 분이 없는 경우 굴취품의 20%를 감한다. | |
<!-- 머리: 몸 1행까지 머리 · 병합: 머리 2~3열 「수량」 · 1열 머리~몸 1행 · 11행 2~3열 「분이 없는 경우 …」 -->
[주]
① 본 품은 흉고직경 또는 근원직경을 추정하기 어려운 수종 기준이다.
② 분은 근원직경의 4∼5배로 한다.
③ 준비, 구덩이파기, 뿌리절단, 분뜨기, 운반준비 작업을 포함한다.
④ 분뜨기, 운반준비를 위한 재료비는 별도 계상한다.
⑤ 본 품은 야생의 교목류를 대상으로 적용한다.
⑥ 현장의 시공조건, 수목의 성상에 따라 기계 사용이 불가피한 경우 별도 계상한다.
⑦ 굴취수목의 운반을 위하여 운반로를 개설하여야 하는 경우에는 그 비용을 별도 계상한다.
### 5-1-3. 교목굴취(근원직경)
(인/본당)
| 근원(흉고)직경(㎝) | 수량 | | | |
|---|---|---|---|---|
| | 특별인부(인) | 보통인부(인) | 굴착기(시간) | 크레인(시간) |
| 4이하 | 0.096 | 0.024 | | |
| 5(4이하) | 0.120 | 0.036 | | |
| 6 7(5 6) | 0.204 | 0.048 | | |
| 8 9(7 8) | 0.324 | 0.084 | | |
| 10 11(9) | 0.180 | 0.072 | 0.588 | |
| 12 14(10 12) | 0.312 | 0.096 | 0.708 | |
| 15 17(13 14) | 0.480 | 0.120 | 0.852 | |
| 18 19(15 16) | 0.612 | 0.132 | 0.972 | |
| 20 24(17 20) | 0.804 | 0.156 | 1.140 | 0.228 |
| 25 29(21 24) | 1.080 | 0.192 | 1.380 | 0.276 |
| 30 34(25 28) | 1.344 | 0.228 | 1.620 | 0.324 |
| 35 39(29 32) | 1.620 | 0.264 | 1.860 | 0.372 |
| 40 44(33 37) | 1.884 | 0.300 | 2.088 | 0.420 |
| 45 49(38 41) | 2.160 | 0.336 | 2.328 | 0.468 |
| 50 54(42 45) | 2.424 | 0.372 | 2.568 | 0.516 |
| 55 59(46 49) | 2.700 | 0.408 | 2.808 | 0.564 |
| 60(50) | 2.856 | 0.432 | 2.952 | 0.600 |
| 비고 | 분이 없는 경우 굴취품의 20%를 감한다. | | | |
<!-- 머리: 몸 1행까지 머리 · 병합: 머리 2~5열 「수량」 · 1열 머리~몸 1행 · 19행 2~5열 「분이 없는 경우 …」 -->
[주]
① 본 품은 교목류 수종의 굴취 기준이다.
② 분은 근원직경의 4∼5배로 한다.
③ 준비, 구덩이파기, 뿌리절단, 분뜨기, 운반준비 작업을 포함한다.
④ 현장의 시공조건, 수목의 성상에 따라 기계사용이 불가피한 경우 별도 계상한다.
⑤ 분뜨기, 운반준비를 위한 재료비는 별도 계상한다.
⑥ 본 품은 야생의 교목류를 대상으로 적용한다.
⑦ 굴취수목의 운반을 위하여 운반로를 개설하여야 하는 경우에는 그 비용을 별도 계상한다.
⑧ 장비 규격은 다음을 기준으로 한다.
| 근원직경(cm) | 굴착기(㎥) | 크레인 |
|---|---|---|
| 10 19 | 0.4 | - |
| 20 26 | 0.6 | 트럭탑재형 크레인 10ton |
| 27 39 | 0.6 | 트럭탑재형 크레인 15ton |
| 40 60 | 0.6 | 크레인(타이어) 25 50ton |
<!-- 원문 그대로: 이 표는 밑수 줄 없음 · 1열 머리가 위 표의 「㎝」 과 달리 「cm」 · 첫 줄 「10∼ 19」 띄어쓰기도 원문 -->
### 5-1-4. 떼채취
(100㎡당)
| 구분 | 보통인부(인) | 비고 |
|---|---|---|
| 줄떼 | 3.0 | |
| 평떼 | 6.0 | |
[주]
① 본 품은 자연상태의 잔디를 채취하는 품으로 운반비는 별도 계상한다.
② 산복 절토면에서는 자갈, 초목의 제거비용은 별도 계상할 수 있다.
### 5-1-5. 떼운반 적재 기준표
| 구분 | 줄떼(매) | 평떼(매) | 싣고부리기시간(분) | 싣고부리기인부(인) | 비고 |
|---|---|---|---|---|---|
| 지게 | 30 | 10 | 2 | 1 | |
| 리어카 | 150 | 50 | 5 | 2 | |
| 우마차 | 480 | 160 | 13 | 2 | |
| 2.5톤 트럭 | 1,500 | 500 | 20 | 5 | |
| 6톤 트럭 | 3,600 | 1,200 | 50 | 5 | |
| 8톤 트럭 | 4,800 | 1,600 | 60 | 5 | |
<!-- 원문 그대로: 이 표는 밑수 줄 없음 -->
[주]
① 떼의 규격은 20㎝ × 20㎝ × 5㎝를 기준으로 한 것이며, 떼의 두께를 3㎝로 기준할 때에는 본 품에서 20%를 감한다.
② 본 품은 떼의 소운반 및 대운반시 적용한다.
③ 떼의 무게는 55.5kg/㎡를 기준으로 한 것이다.
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-7. 생태보완조림
PDF쪽: 72
인쇄쪽: 60
시작표지: 5-7. 생태보완조림
끝표지: 5-8. 큰나무 공익조림
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-8. 큰나무 공익조림
PDF쪽: 72
인쇄쪽: 60
시작표지: 5-8. 큰나무 공익조림
끝표지: 5-9. 해안조림
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-9. 해안조림
PDF쪽: 72~73
인쇄쪽: 60~61
시작표지: 5-9. 해안조림
끝표지: 5-10. 사방조림
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-10. 사방조림
PDF쪽: 73
인쇄쪽: 61
시작표지: 5-10. 사방조림
끝표지: 5-11. 사초심기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-21. 표토이식
PDF쪽: 79
인쇄쪽: 67
시작표지: 5-21. 표토이식
끝표지: 5-22. 평떼
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-22. 평떼
PDF쪽: 79~80
인쇄쪽: 67~68
시작표지: 5-22. 평떼
끝표지: 5-23. 줄떼
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-23. 줄떼
PDF쪽: 80
인쇄쪽: 68
시작표지: 5-23. 줄떼
끝표지: 5-24. 씨앗뿜어붙이기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-24. 씨앗뿜어붙이기
PDF쪽: 81~83
인쇄쪽: 69~71
시작표지: 5-24. 씨앗뿜어붙이기
끝표지: 5-25. 거적덮기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-25. 거적덮기
PDF쪽: 83
인쇄쪽: 71
시작표지: 5-25. 거적덮기
끝표지: 5-26. 흙갈이
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-26. 흙갈이
PDF쪽: 83~84
인쇄쪽: 71~72
시작표지: 5-26. 흙갈이
끝표지: 5-27. 식재면 관리
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-27. 식재면 관리
PDF쪽: 84
인쇄쪽: 72
시작표지: 5-27. 식재면 관리
끝표지: 5-28. 비탈덮기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-28. 비탈덮기
PDF쪽: 84~85
인쇄쪽: 72~73
시작표지: 5-28. 비탈덮기
끝표지: 5-29. 복사이식
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-29. 복사이식
PDF쪽: 85
인쇄쪽: 73
시작표지: 5-29. 복사이식
끝표지: 5-30. 표시봉설치
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-30. 표시봉설치
PDF쪽: 85
인쇄쪽: 73
시작표지: 5-30. 표시봉설치
끝표지: 5-31. 지주목설치
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-31. 지주목설치
PDF쪽: 86
인쇄쪽: 74
시작표지: 5-31. 지주목설치
끝표지: 5-32. 대절작업
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-32. 대절작업
PDF쪽: 86
인쇄쪽: 74
시작표지: 5-32. 대절작업
끝표지: 5-33. 묘목 가식작업
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-33. 묘목 가식작업
PDF쪽: 86
인쇄쪽: 74
시작표지: 5-33. 묘목 가식작업
끝표지: 5-34. 묘목 소운반
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 5-34. 묘목 소운반
PDF쪽: 86~88
인쇄쪽: 74~76
시작표지: 5-34. 묘목 소운반
끝표지: 제6장 생육보조
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 제6장 생육보조
PDF쪽: 89
인쇄쪽: 77
시작표지: 제6장 생육보조
끝표지: 6-1. 비료주기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 6-1. 비료주기
PDF쪽: 89
인쇄쪽: 77
시작표지: 6-1. 비료주기
끝표지: 6-2. 풀베기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 6-2. 풀베기
PDF쪽: 89~90
인쇄쪽: 77~78
시작표지: 6-2. 풀베기
끝표지: 6-3. 맹아제거
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 6-3. 맹아제거
PDF쪽: 91
인쇄쪽: 79
시작표지: 6-3. 맹아제거
끝표지: 6-4. 덩굴제거
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 6-4. 덩굴제거
PDF쪽: 91~93
인쇄쪽: 79~81
시작표지: 6-4. 덩굴제거
끝표지: 6-5. 어린나무 가꾸기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 6-5. 어린나무 가꾸기
PDF쪽: 94
인쇄쪽: 82
시작표지: 6-5. 어린나무 가꾸기
끝표지: 6-6. 가지치기 및 수형교정
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 6-6. 가지치기 및 수형교정
PDF쪽: 95
인쇄쪽: 83
시작표지: 6-6. 가지치기 및 수형교정
끝표지: 6-7. 토양개량 및 치환
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 6-7. 토양개량 및 치환
PDF쪽: 95~96
인쇄쪽: 83~84
시작표지: 6-7. 토양개량 및 치환
끝표지: 6-8. 목재칩 포설
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 6-8. 목재칩 포설
PDF쪽: 96
인쇄쪽: 84
시작표지: 6-8. 목재칩 포설
끝표지: 제7장 집재 및 운재
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 제7장 집재 및 운재
PDF쪽: 97
인쇄쪽: 85
시작표지: 제7장 집재 및 운재
끝표지: 7-1. 인력집재
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-1. 인력집재
PDF쪽: 97~98
인쇄쪽: 85~86
시작표지: 7-1. 인력집재
끝표지: 7-2. 수라집재
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-2. 수라집재
PDF쪽: 98
인쇄쪽: 86
시작표지: 7-2. 수라집재
끝표지: 7-3. 아키야윈치(임업용 윈치) 집재
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-3. 아키야윈치(임업용 윈치) 집재
PDF쪽: 99
인쇄쪽: 87
시작표지: 7-3. 아키야윈치(임업용 윈치) 집재
끝표지: 7-4. 소형가선 집재(2드럼 윈치)
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-4. 소형가선 집재(2드럼 윈치)
PDF쪽: 99~100
인쇄쪽: 87~88
시작표지: 7-4. 소형가선 집재(2드럼 윈치)
끝표지: 7-5. 트랙터부착형 집재(지면끌기)
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-5. 트랙터부착형 집재(지면끌기)
PDF쪽: 100~101
인쇄쪽: 88~89
시작표지: 7-5. 트랙터부착형 집재(지면끌기)
끝표지: 7-6. 스윙야더 집재
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-6. 스윙야더 집재
PDF쪽: 101
인쇄쪽: 89
시작표지: 7-6. 스윙야더 집재
끝표지: 7-7. HAM200 집재(춘천․스마트)
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-7. HAM200 집재(춘천․스마트)
PDF쪽: 102~103
인쇄쪽: 90~91
시작표지: 7-7. HAM200 집재(춘천․스마트)
끝표지: 7-8. 타워야더(RME 300T)
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-8. 타워야더(RME 300T)
PDF쪽: 103~104
인쇄쪽: 91~92
시작표지: 7-8. 타워야더(RME 300T)
끝표지: 7-9. 부착형 타워(K-301, HAM300) 집재
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-9. 부착형 타워(K-301, HAM300) 집재
PDF쪽: 104~105
인쇄쪽: 92~93
시작표지: 7-9. 부착형 타워(K-301, HAM300) 집재
끝표지: 7-10. 굴착기 우드그랩 산지집재-병해충방제
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-10. 굴착기 우드그랩 산지집재-병해충방제
PDF쪽: 106
인쇄쪽: 94
시작표지: 7-10. 굴착기 우드그랩 산지집재-병해충방제
끝표지: 7-11. 동력상하차기(우드그래플) 집재-수확
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-11. 동력상하차기(우드그래플) 집재-수확
PDF쪽: 106~107
인쇄쪽: 94~95
시작표지: 7-11. 동력상하차기(우드그래플) 집재-수확
끝표지: 7-12. 동력상하차기(우드그래플) 집적
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-12. 동력상하차기(우드그래플) 집적
PDF쪽: 107~108
인쇄쪽: 95~96
시작표지: 7-12. 동력상하차기(우드그래플) 집적
끝표지: 7-13. 검척
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-13. 검척
PDF쪽: 108
인쇄쪽: 96
시작표지: 7-13. 검척
끝표지: 7-14. 원목 운반-수확
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-14. 원목 운반-수확
PDF쪽: 109
인쇄쪽: 97
시작표지: 7-14. 원목 운반-수확
끝표지: 7-15. 초소형 포워더 운재
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-15. 초소형 포워더 운재
PDF쪽: 109~110
인쇄쪽: 97~98
시작표지: 7-15. 초소형 포워더 운재
끝표지: 7-16. 소형 포워더 운재
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-16. 소형 포워더 운재
PDF쪽: 110
인쇄쪽: 98
시작표지: 7-16. 소형 포워더 운재
끝표지: 7-17. 소형트럭 운재
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-17. 소형트럭 운재
PDF쪽: 110
인쇄쪽: 98
시작표지: 7-17. 소형트럭 운재
끝표지: 7-18. 지조운반(포워더 활용)
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 7-18. 지조운반(포워더 활용)
PDF쪽: 111
인쇄쪽: 99
시작표지: 7-18. 지조운반(포워더 활용)
끝표지: 제8장 방제
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 제8장 방제
PDF쪽: 112
인쇄쪽: 100
시작표지: 제8장 방제
끝표지: 8-1. 나무주사
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-1. 나무주사
PDF쪽: 112
인쇄쪽: 100
시작표지: 8-1. 나무주사
끝표지: 8-2. 약제주입 기준
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-2. 약제주입 기준
PDF쪽: 113~123
인쇄쪽: 101~111
시작표지: 8-2. 약제주입 기준
끝표지: 8-3. 소각, 매몰, 훈증, 박피
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-3. 소각, 매몰, 훈증, 박피
PDF쪽: 124~125
인쇄쪽: 112~113
시작표지: 8-3. 소각, 매몰, 훈증, 박피
끝표지: 8-4. 끈끈이 롤 트랩
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-4. 끈끈이 롤 트랩
PDF쪽: 126
인쇄쪽: 114
시작표지: 8-4. 끈끈이 롤 트랩
끝표지: 8-5. 페르몬 유인트랩
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-5. 페르몬 유인트랩
PDF쪽: 126
인쇄쪽: 114
시작표지: 8-5. 페르몬 유인트랩
끝표지: 8-6. 약제살포
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-6. 약제살포
PDF쪽: 127~130
인쇄쪽: 115~118
시작표지: 8-6. 약제살포
끝표지: 8-7. 방제 실행 등록
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-7. 방제 실행 등록
PDF쪽: 131
인쇄쪽: 119
시작표지: 8-7. 방제 실행 등록
끝표지: 8-8. 훈증더미 제거
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-8. 훈증더미 제거
PDF쪽: 131
인쇄쪽: 119
시작표지: 8-8. 훈증더미 제거
끝표지: 8-9. 잔가지줍기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-9. 잔가지줍기
PDF쪽: 132
인쇄쪽: 120
시작표지: 8-9. 잔가지줍기
끝표지: 8-10. 그물망 피복
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-10. 그물망 피복
PDF쪽: 132
인쇄쪽: 120
시작표지: 8-10. 그물망 피복
끝표지: 8-11. 이동식 임목 파쇄
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 8-11. 이동식 임목 파쇄
PDF쪽: 132
인쇄쪽: 120
시작표지: 8-11. 이동식 임목 파쇄
끝표지: 제9장 토공
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 제9장 토공
PDF쪽: 133
인쇄쪽: 121
시작표지: 제9장 토공
끝표지: 9-1. 굴착
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-1. 굴착
PDF쪽: 133
인쇄쪽: 121
시작표지: 9-1. 굴착
끝표지: 9-2. 노선 굴진 보조원
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-2. 노선 굴진 보조원
PDF쪽: 133
인쇄쪽: 121
시작표지: 9-2. 노선 굴진 보조원
끝표지: 9-3. 토사깍기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-3. 토사깍기
PDF쪽: 133~134
인쇄쪽: 121~122
시작표지: 9-3. 토사깍기
끝표지: 9-4. 암절취
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-4. 암절취
PDF쪽: 134
인쇄쪽: 122
시작표지: 9-4. 암절취
끝표지: 9-5. 발파암
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-5. 발파암
PDF쪽: 135
인쇄쪽: 123
시작표지: 9-5. 발파암
끝표지: 9-6. 발파암 소할
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-6. 발파암 소할
PDF쪽: 136
인쇄쪽: 124
시작표지: 9-6. 발파암 소할
끝표지: 9-7. 무근콘크리트 깨기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-7. 무근콘크리트 깨기
PDF쪽: 136~137
인쇄쪽: 124~125
시작표지: 9-7. 무근콘크리트 깨기
끝표지: 9-8. 철근콘크리트 깨기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-8. 철근콘크리트 깨기
PDF쪽: 137~138
인쇄쪽: 125~126
시작표지: 9-8. 철근콘크리트 깨기
끝표지: 9-9. 석축헐기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-9. 석축헐기
PDF쪽: 139
인쇄쪽: 127
시작표지: 9-9. 석축헐기
끝표지: 9-10. 기존포장 깨기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-10. 기존포장 깨기
PDF쪽: 139~140
인쇄쪽: 127~128
시작표지: 9-10. 기존포장 깨기
끝표지: 9-11. 포장절단
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-11. 포장절단
PDF쪽: 140~141
인쇄쪽: 128~129
시작표지: 9-11. 포장절단
끝표지: 9-12. 측구터파기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-12. 측구터파기
PDF쪽: 141~142
인쇄쪽: 129~130
시작표지: 9-12. 측구터파기
끝표지: 9-13. 구조물터파기
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-13. 구조물터파기
PDF쪽: 142~147
인쇄쪽: 130~135
시작표지: 9-13. 구조물터파기
끝표지: 9-14. 되메우기 및 다짐
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-14. 되메우기 및 다짐
PDF쪽: 147~148
인쇄쪽: 135~136
시작표지: 9-14. 되메우기 및 다짐
끝표지: 9-15. 표토제거
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---
@@ -0,0 +1,14 @@
---
문서: 산림사업 표준품셈(산림청고시 제2025-82호)
: 9-15. 표토제거
PDF쪽: 148~149
인쇄쪽: 136~137
시작표지: 9-15. 표토제거
끝표지: 9-16. 노체
상태: 대기
작성:
검증:
원천: 글자층
기계검사:
확정지문:
---

Some files were not shown because too many files have changed in this diff Show More