Merge remote-tracking branch 'origin/sub_laptop_2' into sub_laptop_2
This commit is contained in:
@@ -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.3∼0.7m 이하 | 0.8∼1.1m 이하 | 1.2∼1.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.1∼1.5 | 0.084 | 0.024 |
|
||||
| 1.6∼2.0 | 0.096 | 0.024 |
|
||||
| 2.1∼2.5 | 0.120 | 0.036 |
|
||||
| 2.6∼3.0 | 0.132 | 0.036 |
|
||||
| 3.1∼3.5 | 0.156 | 0.036 |
|
||||
| 3.6∼4.0 | 0.180 | 0.048 |
|
||||
| 4.1∼4.5 | 0.204 | 0.048 |
|
||||
| 4.6∼5.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) 집재
|
||||
상태: 대기
|
||||
작성:
|
||||
검증:
|
||||
원천: 글자층
|
||||
기계검사:
|
||||
확정지문:
|
||||
---
|
||||
+14
@@ -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
Reference in New Issue
Block a user