From 8076731f01b470f3ef241c053efe83c57648f8cc Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 00:43:11 +0900 Subject: [PATCH 01/12] =?UTF-8?q?feat(B09):=20=EA=B8=B0=EA=B3=84=20?= =?UTF-8?q?=EC=8B=9C=EA=B3=B5=EB=8A=A5=EB=A0=A5=20=EA=B3=B5=EC=8B=9D?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=ED=86=A0=EA=B3=B5=20=EC=9E=A5=EB=B9=84=20?= =?UTF-8?q?=EB=AA=AB=20=EC=A1=B0=EB=A6=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 품셈 8-1-4 `Q = 3600÷Cm · q · K · f · E` 구현. 계수는 품셈 표에서 읽고 q(버킷 용량)는 기종 규격에서 옴. 수량 1단위당 기계 소요시간 = 1÷Q - 「유압식백호우 (무한궤도,0.7㎥)」를 카탈로그 굴착기(무한궤도) 0.7 로 이음. 이름·규격이 둘 다 맞을 때만 고름 - 배분율 표는 각 몫을 그 비율만큼만 셈 — 인력 0.23인 × 10 %, 장비 1/Q × 90 %. 종전엔 인력 원단위가 전량에 곱해져 9 배 부풀 자리였음 - 범위 표기(「0.55∼0.45」)는 확정값이 아니므로 가운데값을 취하지 않고 `FactorGap` 으로 드러냄. 계수 16 표 성립 / 못 세운 것은 목록으로 남김 - 산출근거 문구를 줄에 적어 사람이 검산 가능 (예 `Q = 3600 ÷ 18 × 0.7 × 0.9 × 0.77 × 0.60`) 결과: 배분율 미완 25 → 13 공종. 측구터파기 토사 5,288.4원/㎥ (인력 3,957.5 + 장비 1,330.9). 실물 인계자료 내역서 합계 478,680원 ㉣ 오탐 방지: 이 모듈은 `reject_efficiency_in_hourly_rate` 를 부르지 않음. E 는 품셈이 작업량 쪽에 넣으라는 값이라 여기서 막으면 정상 계산이 멈춤. 짝 시험 3건으로 못 박음 — Q 의 E 는 통과 / 사용료의 E 는 차단 / 같은 E 가 두 번 곱해지지 않았는지 금액으로 대조 검증: pytest 158 통과(신규 12). 공식은 손계산과 일치(58.212㎥/hr) Co-Authored-By: Claude Opus 5 (1M context) --- .../B09_Estimation_MachineProductivity.py | 300 ++++++++++++++++++ B09_Estimation/B09_Estimation_UnitPrice.py | 81 ++++- 2 files changed, 378 insertions(+), 3 deletions(-) create mode 100644 B09_Estimation/B09_Estimation_MachineProductivity.py diff --git a/B09_Estimation/B09_Estimation_MachineProductivity.py b/B09_Estimation/B09_Estimation_MachineProductivity.py new file mode 100644 index 00000000..cd3fff20 --- /dev/null +++ b/B09_Estimation/B09_Estimation_MachineProductivity.py @@ -0,0 +1,300 @@ +"""B09 원가계산 — 기계 시공능력 `Q` (품셈 8-1-4, PLAN 9-5 ③). + +**왜 있는가** — 토공 주요 공종(흙깎기·측구터파기·성토)의 품셈 표는 **소요량표가 아니다.** +「인력 10 % + 장비 90 %」로 갈리고, 장비 몫은 자원 수량이 아니라 **공식의 계수** +(`K`·`f`·`E`·`Cm`)로 적혀 있다. 그래서 표를 베끼면 **인력 몫만 서고 장비 몫이 통째로 +빠진다** — 2026-09-08 실측으로 측구터파기가 인력 10 % 몫(39,575.6원/㎥)만으로 서 있었다. + +공식 (지식DB `05_원가정보/기계경비_산정.md` §4 — 품셈 8-1-4) + + Q = n · q · K · f · E n = 3600 ÷ Cm (시간당 싸이클 수) + + q 1싸이클 표준작업량 (버킷 용량 ㎥ — **기종 규격에서 온다**) + K 버킷계수 (표의 `K`·`k`) + f 체적환산계수 (표의 `f`) + E 작업효율 = 현장능력계수 × 실작업시간율 (표의 `E`) + Cm 1싸이클 소요시간(초) (표의 `㎝(sec)` — 원문 표기가 「㎝」이지 센티미터가 아니다) + + 수량 1단위당 기계 소요시간(hr) = 1 ÷ Q → × 시간당 사용료 = 그 공종의 기계경비 + +⚠ **㉣ 와 어긋나지 않는다** (PLAN 9-6). ㉣ 는 「작업효율 `E` 를 **시간당 사용료** 쪽에 +넣지 말라」이고, 품셈이 `E` 를 넣으라는 자리가 **바로 여기(작업량 `Q`)** 다. 그러므로 +`reject_efficiency_in_hourly_rate()` 는 이 모듈에서 **부르지 않는다** — 부르면 정상 +계산이 멈추는 오탐이 된다. 진짜 위반은 **같은 `E` 를 `Q` 와 사용료에 둘 다 넣는 것**이라, +그쪽은 사용료 계산 자리(`B09_Estimation_MachineCost`)의 가드가 그대로 지킨다. + +⚠ **모르는 값을 지어내지 않는다.** 표가 범위(「0.55∼0.45」)만 주고 확정값을 안 주면 +계수를 못 세운 것으로 보고 `FactorGap` 으로 드러낸다 — 가운데값을 임의로 취하지 않는다 +(CLAUDE.md 3장). +""" + +from __future__ import annotations + +import re +from dataclasses import dataclass +from decimal import Decimal +from typing import Any + +from B09_Estimation.B09_Estimation_MachineCost import load_machine_catalog + +_ZERO = Decimal(0) +_SECONDS_PER_HOUR = Decimal(3600) + +#: 표의 행 머리 — 대문자·소문자가 섞여 온다(`K` 와 `k` 가 같은 표 안에 있다). +_KEY_BUCKET = ("k",) +_KEY_VOLUME = ("f",) +_KEY_EFFICIENCY = ("e",) +_KEY_CYCLE = ("㎝(sec)", "cm(sec)", "cm", "㎝") + +#: 품셈 표의 기계 이름 → 기종 카탈로그 이름. **표기만 다르고 같은 기종**이다. +#: 「유압식백호우」는 카탈로그에 없어 그대로 두면 장비 몫이 통째로 빠진다. +#: ⚠ 넓게 잡지 않는다 — 이름 전체가 이 표의 열쇠와 같을 때만 바꾼다. +MACHINE_NAME_ALIASES = { + "유압식백호우": "굴착기", + "백호우": "굴착기", + "백호": "굴착기", + "유압식굴삭기": "굴착기", + "굴삭기": "굴착기", +} + +#: 무한궤도·타이어 갈래. 카탈로그 이름이 「굴착기(무한궤도)」처럼 갈래를 품고 있다. +_TRACK_WORDS = ("무한궤도", "타이어", "습지") + +_RE_PARENS = re.compile(r"[((]([^))]*)[))]") +_RE_NUMBER = re.compile(r"-?\d+(?:\.\d+)?") +_RE_FRACTION = re.compile(r"^(\d+(?:\.\d+)?)\s*/\s*(\d+(?:\.\d+)?)$") +#: 범위 표기 — 「0.55∼0.45」·「0.2~0.8」. **확정값이 아니다.** +_RE_RANGE = re.compile(r"\d+(?:\.\d+)?\s*[∼~~-]\s*\d+(?:\.\d+)?") + + +class ProductivityError(ValueError): + """시공능력을 못 세운 경우. 0 이나 가운데값으로 때우지 않는다.""" + + +def parse_measure(cell: str) -> Decimal | None: + """계수 셀 하나를 수로 읽는다. **확정값이 아니면 `None`.** + + 읽는 모양 — 「0.77」 · 「1/1.30」(분수) · 「20(135°)」(괄호는 조건 설명이라 버린다). + 안 읽는 모양 — 「0.55∼0.45」(범위) · 「육상과동일」(참조) · 빈 칸. + """ + text = str(cell).strip() + if not text: + return None + if _RE_RANGE.search(text): + return None # 범위는 확정값이 아니다 — 가운데를 임의로 취하지 않는다 + fraction = _RE_FRACTION.match(text) + if fraction: + divisor = Decimal(fraction.group(2)) + return None if divisor == 0 else Decimal(fraction.group(1)) / divisor + # 괄호 안은 조건 설명(각도 등)이므로 떼고 본다 — 「20(135°)」 → 20 + outside = _RE_PARENS.sub("", text).strip() + found = _RE_NUMBER.search(outside) + return Decimal(found.group(0)) if found else None + + +@dataclass(frozen=True) +class CycleFactors: + """한 표에서 뽑아낸 시공능력 계수 한 벌.""" + + work_item_code: str + pum_table_id: str + machine_code: str + machine_name: str + bucket_capacity_m3: Decimal # q + bucket_coefficient: Decimal # K + volume_factor: Decimal # f + efficiency: Decimal # E — **작업량 쪽에만 들어간다** (㉣) + cycle_seconds: Decimal # Cm + #: 인력 몫 배분율(%) — 「인력(10%)」이면 `10`. 없으면 `None`. + labor_ratio_pct: Decimal | None = None + machine_ratio_pct: Decimal | None = None + + @property + def formula_text(self) -> str: + return ( + f"Q = 3600 ÷ {self.cycle_seconds} × {self.bucket_capacity_m3} × " + f"{self.bucket_coefficient} × {self.volume_factor} × {self.efficiency}" + ) + + +@dataclass(frozen=True) +class FactorGap: + """계수를 못 세운 표. **빈칸으로 두지 않고 무엇이 없는지 적는다.**""" + + work_item_code: str + pum_table_id: str + missing: tuple[str, ...] + note: str = "" + + +def hourly_output(factors: CycleFactors) -> Decimal: + """시간당 작업량 `Q` (㎥/hr). + + `Q = (3600 ÷ Cm) · q · K · f · E` — 품셈 8-1-4. + """ + if factors.cycle_seconds <= 0: + raise ProductivityError( + f"{factors.work_item_code}: 1싸이클 시간(Cm)이 {factors.cycle_seconds} 입니다." + ) + cycles_per_hour = _SECONDS_PER_HOUR / factors.cycle_seconds + output = ( + cycles_per_hour + * factors.bucket_capacity_m3 + * factors.bucket_coefficient + * factors.volume_factor + * factors.efficiency + ) + if output <= 0: + raise ProductivityError(f"{factors.work_item_code}: 시간당 작업량이 {output} 입니다.") + return output + + +def machine_hours_per_unit(factors: CycleFactors) -> Decimal: + """수량 1단위당 기계 소요시간(hr). 여기에 시간당 사용료를 곱하면 기계경비가 된다.""" + return Decimal(1) / hourly_output(factors) + + +def resolve_machine(cell: str) -> tuple[str, str] | None: + """표의 기계 이름 셀을 기종 카탈로그 한 줄로 푼다. + + 「유압식백호우 (무한궤도,0.7㎥)」 → `0201-0070` 굴착기(무한궤도) 0.7. + **이름과 규격이 둘 다 맞을 때만** 고른다 — 규격이 안 맞으면 안 고른다. + """ + text = str(cell).strip() + if not text: + return None + inside = " ".join(_RE_PARENS.findall(text)) + head = _RE_PARENS.sub("", text).strip() + name = MACHINE_NAME_ALIASES.get(head.replace(" ", ""), head) + + capacity = parse_measure(_capacity_token(inside)) + track = next((word for word in _TRACK_WORDS if word in inside), "") + if capacity is None: + return None + + catalog = load_machine_catalog() + for code, machine in catalog.machines.items(): + if name not in machine.name: + continue + if track and track not in machine.name: + continue + spec = parse_measure(machine.specification) + if spec is not None and spec == capacity: + return code, f"{machine.name} {machine.specification}" + return None + + +def _capacity_token(inside: str) -> str: + """괄호 안에서 용량 토막만 뽑는다 — 「무한궤도,0.7㎥」 → 「0.7㎥」.""" + for token in re.split(r"[,,]", inside): + if any(unit in token for unit in ("㎥", "m3", "M3", "루베")): + return token + return "" + + +def extract_cycle_factors( + work_item_code: str, + table: dict[str, Any], +) -> CycleFactors | FactorGap | None: + """표 하나에서 계수를 뽑는다. + + 공식 계수가 하나도 없으면 `None`(이 표는 공식형이 아니다), 일부만 있으면 + `FactorGap`, 다 있으면 `CycleFactors`. + """ + rows = table.get("raw_row") or [] + values: dict[str, Decimal] = {} + machine: tuple[str, str] | None = None + bucket_from_machine_row: Decimal | None = None + ratios: dict[str, Decimal] = {} + saw_key = False + + for row in rows: + cells = [str(c).strip() for c in row] + if not cells: + continue + head = cells[0].lower().replace(" ", "") + rest = cells[1:] + + # 「장비(90%) | 유압식백호우 (무한궤도,0.7㎥) | k | 0.9」 모양 + for index, cell in enumerate(cells): + found = resolve_machine(cell) + if found is not None and machine is None: + machine = found + bucket_from_machine_row = parse_measure( + _capacity_token(" ".join(_RE_PARENS.findall(cell))) + ) + # 같은 줄 뒤쪽에 「k | 0.9」가 붙어 오는 표가 있다 + tail = cells[index + 1 :] + for position, token in enumerate(tail): + if token.lower() in _KEY_BUCKET and position + 1 < len(tail): + parsed = parse_measure(tail[position + 1]) + if parsed is not None: + values["K"] = parsed + break + + ratio = _ratio_of(cells[0]) + if ratio is not None: + label = "labor" if "인력" in cells[0] else "machine" if "장비" in cells[0] else "" + if label: + ratios[label] = ratio + + if head in _KEY_BUCKET: + saw_key = True + values.setdefault("K", _first_measure(rest)) + elif head in _KEY_VOLUME: + saw_key = True + values.setdefault("f", _first_measure(rest)) + elif head in _KEY_EFFICIENCY: + saw_key = True + values.setdefault("E", _first_measure(rest)) + elif head in _KEY_CYCLE: + saw_key = True + values.setdefault("Cm", _first_measure(rest)) + + if not saw_key and machine is None: + return None + + missing = [key for key in ("K", "f", "E", "Cm") if values.get(key) is None] + capacity = bucket_from_machine_row + if machine is None: + missing.append("기계") + if capacity is None: + missing.append("q(버킷 용량)") + if missing: + return FactorGap( + work_item_code=work_item_code, + pum_table_id=str(table.get("pum_table_id", "")), + missing=tuple(missing), + note="표가 확정값 대신 범위·참조만 주었거나 기종을 못 골랐습니다.", + ) + + return CycleFactors( + work_item_code=work_item_code, + pum_table_id=str(table.get("pum_table_id", "")), + machine_code=machine[0], + machine_name=machine[1], + bucket_capacity_m3=capacity, + bucket_coefficient=values["K"], + volume_factor=values["f"], + efficiency=values["E"], + cycle_seconds=values["Cm"], + labor_ratio_pct=ratios.get("labor"), + machine_ratio_pct=ratios.get("machine"), + ) + + +def _first_measure(cells: list[str]) -> Decimal | None: + """그 행에서 **처음 읽히는 확정값**. 뒤 칸은 유도식·참조라 앞 칸이 우선이다.""" + for cell in cells: + parsed = parse_measure(cell) + if parsed is not None: + return parsed + return None + + +_RE_RATIO = re.compile(r"[((]\s*(\d+(?:\.\d+)?)\s*%\s*[))]") + + +def _ratio_of(cell: str) -> Decimal | None: + found = _RE_RATIO.search(str(cell)) + return Decimal(found.group(1)) if found else None diff --git a/B09_Estimation/B09_Estimation_UnitPrice.py b/B09_Estimation/B09_Estimation_UnitPrice.py index 61219251..815a8f78 100644 --- a/B09_Estimation/B09_Estimation_UnitPrice.py +++ b/B09_Estimation/B09_Estimation_UnitPrice.py @@ -24,6 +24,12 @@ from functools import lru_cache from B09_Estimation.B09_Estimation_Guards import check_column_sums, check_surcharge_once from B09_Estimation.B09_Estimation_MachineCost import load_machine_catalog +from B09_Estimation.B09_Estimation_MachineProductivity import ( + CycleFactors, + FactorGap, + extract_cycle_factors, + machine_hours_per_unit, +) from B09_Estimation.B09_Estimation_MachineOperating import ( load_fuel_price, load_operating_records, @@ -68,6 +74,10 @@ class UnitPriceBuild: incomplete_machines: list[str] = field(default_factory=list) #: 배분율 표인데 일부 몫만 붙은 공종 — 「단가가 일부만 섬」. 값은 붙은 몫(%). partial_ratio: dict[str, Decimal] = field(default_factory=dict) + #: 시공능력 공식으로 장비 몫을 세운 공종 — 산출근거를 화면에 그대로 보인다. + cycle_factors: dict[str, CycleFactors] = field(default_factory=dict) + #: 계수를 못 세운 표 — **무엇이 없는지**를 들고 있는다. + factor_gaps: dict[str, FactorGap] = field(default_factory=dict) def _add_labor_titles(book: PriceBook, wages: dict[str, Decimal]) -> None: @@ -228,19 +238,84 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: unit=unit, ) ) + # 배분율 표는 각 몫을 **그 비율만큼만** 센다 — 인력 원단위를 전량에 곱하면 틀린다. for row, ref in attachable: - build.book.add_detail(PriceDetail(title_code, ref, row.amount)) + share = _share_of(row) + build.book.add_detail(PriceDetail(title_code, ref, row.amount * share)) + + # 장비 몫은 자원 수량이 아니라 **시공능력 공식**으로 온다 (품셈 8-1-4). + machine_share = _attach_machine_share(build, master, work_item_code, title_code) # ⚠ **배분율이 있는 표는 「몇 %가 실제로 붙었나」를 세어 둔다.** # 「인력(10%)·장비(90%)」 표에서 인력만 붙으면 단가가 10 % 몫만인데, 그 값이 # 조용히 서면 내역서가 틀린 줄 모른다(2026-09-08 실측: 측구터파기 39,575.6원/㎥ # 이 인력 10 % 몫만이었다). 0 으로 때우는 것과 같은 종류의 사고다. covered = _covered_ratio_pct(rows, {ref for _, ref in attachable}, build) - if covered is not None and covered < Decimal(100): - build.partial_ratio[work_item_code] = covered + if covered is not None: + covered += machine_share + if covered < Decimal(100): + build.partial_ratio[work_item_code] = covered return build +def _share_of(row) -> Decimal: + """그 줄이 차지하는 몫(0~1). 배분율이 없으면 1 — 종전과 같다.""" + ratio = getattr(row, "group_ratio_pct", None) + return Decimal(1) if ratio is None else Decimal(str(ratio)) / Decimal(100) + + +def _attach_machine_share( + build: UnitPriceBuild, + master: dict, + work_item_code: str, + title_code: str, +) -> Decimal: + """시공능력 공식으로 **장비 몫**을 붙인다. 붙인 비율(%)을 돌려준다. + + 계수가 다 안 서면 **아무것도 안 붙이고 0 을 돌려준다** — 그러면 그 공종은 + `partial_ratio` 에 남아 내역서에서 금액이 안 붙는다(지어낸 값이 서는 것보다 낫다). + """ + node = next( + (w for w in master.get("work_items", []) if w.get("work_item_code") == work_item_code), + None, + ) + if node is None: + return _ZERO + + for table in node.get("tables", []): + factors = extract_cycle_factors(work_item_code, table) + if not isinstance(factors, CycleFactors): + if isinstance(factors, FactorGap): + build.factor_gaps[work_item_code] = factors + continue + hourly_code = f"X-{factors.machine_code}" + if hourly_code not in build.book.titles: + # 기계 층이 안 섰다 — 지어내지 않고 못 붙인 채로 둔다. + build.factor_gaps[work_item_code] = FactorGap( + work_item_code=work_item_code, + pum_table_id=factors.pum_table_id, + missing=("시간당 사용료",), + note=f"{factors.machine_name} 의 시간당 사용료가 아직 안 섰습니다.", + ) + continue + share = ( + Decimal(1) + if factors.machine_ratio_pct is None + else Decimal(str(factors.machine_ratio_pct)) / Decimal(100) + ) + build.book.add_detail( + PriceDetail( + title_code, + hourly_code, + machine_hours_per_unit(factors) * share, + note=factors.formula_text, + ) + ) + build.cycle_factors[work_item_code] = factors + return share * Decimal(100) + return _ZERO + + def _covered_ratio_pct( rows: list, attached_refs: set[str], build: UnitPriceBuild ) -> Decimal | None: From 2ad66dce5d3a3c943467c1bb2b5c9040e90ee41f Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 00:53:58 +0900 Subject: [PATCH 02/12] =?UTF-8?q?feat(B09):=20=EC=97=B4=EC=9D=B4=20?= =?UTF-8?q?=EC=9E=90=EC=9B=90=EC=9D=B8=20=ED=91=9C(=EC=A0=84=EC=B9=98?= =?UTF-8?q?=ED=98=95)=20=EC=9D=BD=EA=B8=B0=20+=20=EC=98=A4=EB=8F=85=203?= =?UTF-8?q?=EC=A2=85=20=EC=B0=A8=EB=8B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 품셈에는 자원이 행이 아니라 **열 머리**에 오는 표가 39건 있음 (「구 분 | 콘크리트공(인) | 보통인부(인)」, 행은 무근·철근·소형구조물). 행-자원으로 읽어 콘크리트 타설(12-1)이 하나도 안 서고 있었음 - 갈래(variant)마다 따로 세움 — 품이 달라 뭉치면 어느 것도 안 맞음. 코드는 `B-FP-12-01-01#무근구조물`, 이름에 갈래를 적어 사람이 고를 수 있음 - 레디믹스트콘크리트 타설: 무근 58,635.0 / 철근 65,826.4 / 소형 117,270.0 원 읽다가 잡은 오독 3종 — 전부 **고쳐 읽지 않고 버림** (자리를 단정할 수 없음) - 병합 셀로 한 칸 밀린 행: 목재틀흙막이가 등급 글자를 건축목공 자리에 두어 단가 503만원으로 섰음 - 좌우 두 판이 붙은 표: 소운반에서 거리값 60 이 「보통인부 60인」으로 읽혀 1,553만원이 섰음. 열 머리가 되풀이되면 표째 버림 - 같은 갈래 이름 중복: 목재틀흙막이 「상」이 8.760 + 13.767 로 합산돼 667만원이 섰음. 그 줄들을 버림 - 갈래 이름에 자원용 머리글 필터를 쓰던 것도 고침 — 「중」·「상」 등급이 통째로 지워지고 있었음. 합계 줄만 걸러 냄 기준 단위 미상 드러내기 (막지 않음 — 막으면 125 중 122 가 멈춤) - `unknown_basis` 122건, 그중 100만원 넘는 10건을 목록으로 냄 (떼채취 평떼 1,032,408원 등 — 「100매당」류 묶음 기준 의심) - 내역서 줄 비고에도 「기준 단위가 표에 없습니다 — 수량 단위와 같다고 보고 곱했습니다」를 적음. 반영률 문구를 덮지 않고 이어 붙임 700줄 제한으로 전치형 처리를 `_Transposed.py` 로 분리 (647 + 138줄) 검증: pytest 163 통과(신규 5). 자원 축 198줄·갈래 54, 일위대가 85 → 125, 분포 최소 233.4 · 중앙 72,268.5 · 최대 5,030,954.6 Co-Authored-By: Claude Opus 5 (1M context) --- .../B09_Estimation_BillOfQuantities.py | 15 + B09_Estimation/B09_Estimation_ResourceAxis.py | 13 + .../B09_Estimation_ResourceAxis_Transposed.py | 180 +++ B09_Estimation/B09_Estimation_UnitPrice.py | 44 +- .../resource_axis_2026-01-01.json | 1048 ++++++++++++++++- .../unmatched_2026-01-01.json | 258 +--- 6 files changed, 1351 insertions(+), 207 deletions(-) create mode 100644 B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py diff --git a/B09_Estimation/B09_Estimation_BillOfQuantities.py b/B09_Estimation/B09_Estimation_BillOfQuantities.py index b52bce61..5a4c0df4 100644 --- a/B09_Estimation/B09_Estimation_BillOfQuantities.py +++ b/B09_Estimation/B09_Estimation_BillOfQuantities.py @@ -423,6 +423,21 @@ def _leaf_row( ) return row + title = unit_prices.book.title(price_code) + if not title.unit: + # ⚠ 품셈 표가 기준 단위를 안 준 단가다 — 「10㎡당」 같은 묶음 기준일 수 있다. + # 값을 막지는 않되(막으면 대부분이 멈춘다) **모르는 채 곱했다는 사실을 적는다**. + # 비고를 **덮지 않고 잇는다** — 반영률 문구가 먼저 적혀 있을 수 있다. + row.note = " / ".join( + part + for part in ( + row.note, + f"단가의 기준 단위가 표에 없습니다 — B08 수량 단위({row.unit})와 같다고 " + "보고 곱했습니다. 확인 필요.", + ) + if part + ) + unit_money = unit_prices.book.resolve(price_code) line = unit_money.scaled(item.quantity) row.unit_price_krw = round_at(unit_money.total, OutputPlace.UNIT_PRICE_ROW) diff --git a/B09_Estimation/B09_Estimation_ResourceAxis.py b/B09_Estimation/B09_Estimation_ResourceAxis.py index f48679dd..7234e50d 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis.py @@ -366,6 +366,9 @@ class ResourceRow: amount: Decimal amount_unit: str raw_row_index: int + #: 규격 갈래 — 열이 자원인 표에서 행 이름(「무근구조물」). 없으면 빈 문자열. + #: **갈래마다 품이 다르므로 한 일위대가로 뭉치지 않는다.** + variant: str = "" #: 분류 딱지가 달고 온 배분율 — 「인력(10%)」이면 `10`. 없으면 `None`. #: ⚠ **이 값을 안 보면 단가가 조용히 틀린다** — 인력 몫 원단위를 전량에 곱하게 된다 #: (2026-09-08 실측: 측구터파기 39,575.6원/㎥ 이 인력 10 % 몫만이었다). @@ -383,6 +386,7 @@ class ResourceRow: "amount": str(self.amount), "amount_unit": self.amount_unit, "raw_row_index": self.raw_row_index, + "variant": self.variant, "group_ratio_pct": None if self.group_ratio_pct is None else str(self.group_ratio_pct), } @@ -456,6 +460,15 @@ def match_table( basis_quantity = None if basis is None else Decimal(str(basis)) unit = table.get("basis_unit") or "" + # ⚠ **자원이 열 머리에 오는 표가 따로 있다** (2026-09-08 발견, 39 표). + # 「구 분 | 콘크리트공(인) | 보통인부(인)」처럼 **열이 자원**이고 행은 규격 갈래 + # (무근·철근·소형구조물)다. 행을 자원으로 읽는 길로 보내면 통째로 못 맞춘다 — + # 콘크리트 타설(12-1)이 그래서 하나도 안 서고 있었다. + from B09_Estimation.B09_Estimation_ResourceAxis_Transposed import match_transposed_table + + if match_transposed_table(node, table, catalog, result, basis_quantity, unit): + return + for index, row in enumerate(table.get("raw_row", [])): cells = [str(c) for c in row] if not cells: diff --git a/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py b/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py new file mode 100644 index 00000000..5fbccb26 --- /dev/null +++ b/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py @@ -0,0 +1,180 @@ +"""B09 원가계산 — **열이 자원인 표** 읽기 (자원 축 보조, 2026-09-08). + +품셈 표에는 자원이 **행**이 아니라 **열 머리**에 오는 모양이 따로 있다 (39 표). + + 구 분 | 콘크리트공(인) | 보통인부(인) + 무근구조물 | 0.12 | 0.15 + 철근구조물 | 0.14 | 0.16 + +행은 **규격 갈래**(무근·철근·소형구조물)이고 갈래마다 품이 다르다. 이 모양을 행-자원 +표로 읽으면 통째로 안 맞는다 — 콘크리트 타설(12-1)이 그래서 하나도 안 서고 있었다. + +⚠ **자리 밀림을 고쳐 읽지 않는다.** 첫 칸이 병합된 표는 값이 한 칸씩 밀려 오는데 +(목재틀흙막이가 「건축목공 8.760」 자리에 등급 글자를 두어 단가가 503만원으로 섰다), +밀린 행은 **버리고 `unmatched` 에 남긴다.** 어느 칸이 어느 자원인지 단정할 수 없다. + +`B09_Estimation_ResourceAxis` 가 700줄 제한에 걸려 이 표 모양만 떼어 낸 파일이다. +""" + +from __future__ import annotations + +from decimal import Decimal +from typing import Any + +from B09_Estimation.B09_Estimation_ResourceAxis import ( + AxisResult, + ResourceCatalog, + ResourceRow, + UnmatchedRow, + parse_amount, + split_name_and_spec, +) + +#: 갈래 이름 자리에서 걸러 낼 말 — **합계 줄만**이다. 넓게 잡으면 등급이 지워진다. +_TOTAL_LABELS = ("계", "합계", "소계", "총계", "구분") + + +def _normalize_label(text: str) -> str: + return "".join(str(text).split()) + + +def transposed_columns(table: dict[str, Any], catalog: ResourceCatalog) -> list[tuple[int, Any]]: + """열 머리에서 자원을 찾는다. `[(열 번호, 카탈로그 줄)]`. + + 첫 칸은 갈래 이름(「구 분」)이라 **1번 열부터** 본다. 카탈로그에 있는 이름만 + 자원으로 본다 — 필터로 거르지 않는다(넓은 필터가 정상 자원을 지운 전례). + """ + headers = table.get("condition_note") or [] + found: list[tuple[int, Any]] = [] + for position, header in enumerate(headers[1:], start=1): + name, spec = split_name_and_spec(str(header)) + entry = catalog.resolve(name, spec) + if entry is None and not spec: + candidates = catalog.by_name(name) + entry = candidates[0] if len(candidates) == 1 else None + if entry is not None: + found.append((position, entry)) + return found + + +def match_transposed_table( + node: dict[str, Any], + table: dict[str, Any], + catalog: ResourceCatalog, + result: AxisResult, + basis_quantity: Decimal | None, + unit: str, +) -> bool: + """열이 자원인 표를 읽는다. 그런 표가 아니면 `False` 를 돌려 원래 길로 보낸다. + + 행마다 **규격 갈래 하나**가 되므로 `variant` 를 달아 둔다 — 「무근구조물」과 + 「철근구조물」은 품이 달라 **한 일위대가로 뭉치면 안 된다**. + """ + columns = transposed_columns(table, catalog) + if not columns: + return False + + # ⚠ **좌우로 두 판이 붙은 표는 통째로 버린다.** 열 머리가 되풀이되면 + # (「거리 | 보통인부 | 거리 | 보통인부」) 오른쪽 판의 **거리값이 인원으로** 읽힌다 + # — 2026-09-08 실측: 소운반이 「보통인부 60인」이 되어 단가가 1,553만원으로 섰다. + # 판 경계를 짐작해 읽지 않는다. + codes = [entry.code for _, entry in columns] + if len(codes) != len(set(codes)): + result.unmatched.append( + UnmatchedRow( + work_item_code=node.get("work_item_code", ""), + pum_table_id=str(table.get("pum_table_id", "")), + cell=" | ".join(str(c) for c in (table.get("condition_note") or [])), + reason="열 머리가 되풀이되는 두 판 짜리 표 — 자리를 단정할 수 없어 버렸습니다.", + ) + ) + return True + + # ⚠ **갈래 이름이 되풀이되면 그 줄들을 버린다.** 첫 칸이 병합된 표에서 상위 등급이 + # 떨어져 나가면 「상」이 두 번 나오고, 그대로 두면 서로 다른 등급의 품이 **합산**된다 + # (2026-09-08 실측: 목재틀흙막이 「상」이 8.760 + 13.767 = 22.5 인이 되어 단가가 + # 667만원으로 섰다). 어느 등급인지 단정할 수 없으므로 고쳐 읽지 않는다. + labels = [str(row[0]).strip() for row in (table.get("raw_row") or []) if row] + repeated = {label for label in labels if label and labels.count(label) > 1} + + work_item_code = node.get("work_item_code", "") + table_id = str(table.get("pum_table_id", "")) + form = str(table.get("pum_form", "")) + matched_any = False + + for index, row in enumerate(table.get("raw_row", [])): + cells = [str(c) for c in row] + if not cells: + continue + variant = cells[0].strip() + # ⚠ 첫 칸은 **갈래 이름**이지 자원 이름이 아니다 — 자원용 머리글 필터를 여기 쓰면 + # 「중」·「상」 같은 정상 등급이 통째로 지워진다(2026-09-08 실측: 목재틀흙막이의 + # 중·상 등급이 사라지고 상등구조만 남았다). 합계 줄만 걸러 낸다. + if not variant or _normalize_label(variant) in _TOTAL_LABELS: + continue + if variant in repeated: + result.unmatched.append( + UnmatchedRow( + work_item_code=work_item_code, + pum_table_id=table_id, + cell=variant, + reason="같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + ) + ) + continue + # ⚠ **자리 밀림 검사** — 자원 열 가운데 하나라도 수가 아니면 그 행은 밀린 것이다. + # 첫 칸이 병합된 표에서 값이 한 칸씩 밀려 들어온다(2026-09-08 실측: 목재틀흙막이가 + # 「건축목공 8.760」 자리에 등급 글자를 두어 단가가 503만원으로 섰다). + # **밀린 행은 고쳐 읽지 않고 버린다** — 어느 칸이 어느 자원인지 단정할 수 없다. + readable = [ + parse_amount(cells[position]) if position < len(cells) else None + for position, _ in columns + ] + if any(value is None for value in readable) and any( + value is not None for value in readable + ): + result.unmatched.append( + UnmatchedRow( + work_item_code=work_item_code, + pum_table_id=table_id, + cell=variant, + reason="자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + ) + ) + continue + + for position, entry in columns: + if position >= len(cells): + # 칸이 모자란 행 — **자리를 밀어 읽지 않는다**. 밀려 읽으면 다른 직종의 + # 품이 붙는다(기계경비 표에서 실제로 겪은 사고). + result.unmatched.append( + UnmatchedRow( + work_item_code=work_item_code, + pum_table_id=table_id, + cell=f"{variant} / {entry.name}", + reason="칸 수가 열 머리와 안 맞아 버렸습니다(자리 밀림 방지).", + ) + ) + continue + amount = parse_amount(cells[position]) + if amount is None: + continue + if basis_quantity not in (None, 0, Decimal(1)): + amount = amount / basis_quantity + result.rows.append( + ResourceRow( + work_item_code=work_item_code, + pum_table_id=table_id, + pum_form=form, + resource_kind=entry.kind, + resource_code=entry.code, + resource_name=entry.name, + resource_spec=entry.spec, + amount=amount, + amount_unit=unit, + raw_row_index=index, + variant=variant, + ) + ) + matched_any = True + return matched_any diff --git a/B09_Estimation/B09_Estimation_UnitPrice.py b/B09_Estimation/B09_Estimation_UnitPrice.py index 815a8f78..670b79e5 100644 --- a/B09_Estimation/B09_Estimation_UnitPrice.py +++ b/B09_Estimation/B09_Estimation_UnitPrice.py @@ -56,6 +56,11 @@ _ZERO = Decimal(0) FUEL_CODE_PREFIX = "M-FUEL-" #: 일위대가 총액이 이보다 작으면 **성분이 빠졌을 가능성**이 크다 — 값이 있어도 경고한다. SUSPICIOUSLY_LOW_KRW = Decimal(100) +#: 기준 단위를 모르는 채 이 금액을 넘으면 **사람이 한 번 봐야 한다**. +#: 품셈 표가 「10㎡당」처럼 묶음 기준일 수 있어 값 자체는 맞고 기준만 모르는 경우가 많다 +#: (2026-09-08: 목재틀흙막이 상등구조 = 건축목공 16.975인 → 503만원. 값은 품셈대로다). +#: **막지 않고 드러내기만 한다** — 막으면 120 중 117 이 멈춘다. +SUSPICIOUSLY_HIGH_KRW = Decimal(1_000_000) def _slots(value: Decimal) -> list[Decimal | None]: @@ -76,6 +81,8 @@ class UnitPriceBuild: partial_ratio: dict[str, Decimal] = field(default_factory=dict) #: 시공능력 공식으로 장비 몫을 세운 공종 — 산출근거를 화면에 그대로 보인다. cycle_factors: dict[str, CycleFactors] = field(default_factory=dict) + #: 공종 하나가 낳은 규격 갈래들 — 「무근구조물」·「철근구조물」·「소형구조물」. + variants: dict[str, list[str]] = field(default_factory=dict) #: 계수를 못 세운 표 — **무엇이 없는지**를 들고 있는다. factor_gaps: dict[str, FactorGap] = field(default_factory=dict) @@ -208,12 +215,14 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: machine_codes = {r.resource_code for r in axis.rows if r.resource_kind == "machine"} build.incomplete_machines = _add_machine_layers(build.book, machine_codes) - by_item: dict[str, list] = {} + # 규격 갈래(`variant`)가 있으면 **갈래마다 따로 세운다** — 무근·철근·소형구조물은 + # 품이 달라 한 일위대가로 뭉치면 어느 것도 안 맞는다. + by_item: dict[tuple[str, str], list] = {} for row in axis.rows: - by_item.setdefault(row.work_item_code, []).append(row) + by_item.setdefault((row.work_item_code, getattr(row, "variant", "")), []).append(row) - for work_item_code, rows in sorted(by_item.items()): - title_code = f"B-{work_item_code}" + for (work_item_code, variant), rows in sorted(by_item.items()): + title_code = f"B-{work_item_code}" + (f"#{variant}" if variant else "") if title_code in build.book.titles: continue # ⚠ **붙을 상세를 먼저 모으고, 하나도 없으면 제목도 안 세운다.** @@ -229,22 +238,27 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: continue unit = next((r.amount_unit for r in rows if r.amount_unit), "") + base_name = names.get(work_item_code) or work_item_code build.book.add_title( PriceTitle( code=title_code, kind=PriceKind.UNIT_PRICE, - name=names.get(work_item_code) or work_item_code, - spec=work_item_code, + name=f"{base_name} ({variant})" if variant else base_name, + spec=variant or work_item_code, unit=unit, ) ) + if variant: + build.variants.setdefault(work_item_code, []).append(variant) # 배분율 표는 각 몫을 **그 비율만큼만** 센다 — 인력 원단위를 전량에 곱하면 틀린다. for row, ref in attachable: share = _share_of(row) build.book.add_detail(PriceDetail(title_code, ref, row.amount * share)) # 장비 몫은 자원 수량이 아니라 **시공능력 공식**으로 온다 (품셈 8-1-4). - machine_share = _attach_machine_share(build, master, work_item_code, title_code) + machine_share = ( + _ZERO if variant else _attach_machine_share(build, master, work_item_code, title_code) + ) # ⚠ **배분율이 있는 표는 「몇 %가 실제로 붙었나」를 세어 둔다.** # 「인력(10%)·장비(90%)」 표에서 인력만 붙으면 단가가 10 % 몫만인데, 그 값이 @@ -453,11 +467,27 @@ def build_summary(build: UnitPriceBuild) -> dict: and (money := build.book.resolve(code).total) < SUSPICIOUSLY_LOW_KRW ] + # 기준 단위를 모르는 채 큰 값 — 「10㎡당」 같은 묶음 기준일 수 있다. + high = [ + {"code": code, "name": title.name, "total": _money_text(money)} + for code, title in build.book.titles.items() + if title.kind is PriceKind.UNIT_PRICE + and not title.unit + and (money := build.book.resolve(code).total) >= SUSPICIOUSLY_HIGH_KRW + ] + return { "titles": len(build.book.titles), "unit_price_totals": stats, # 값이 서기는 했는데 **크기가 이상한** 것 — 성분이 빠졌을 가능성이 크다. "suspiciously_low": low, + # 기준 단위가 없는 채로 큰 값 — 값이 틀린 게 아니라 **기준을 모르는 것**이다. + "unknown_basis_high": high, + "unknown_basis": sum( + 1 + for code, title in build.book.titles.items() + if title.kind is PriceKind.UNIT_PRICE and not title.unit + ), "unit_prices": kinds.get(PriceKind.UNIT_PRICE.value, 0), "machine_hourly": kinds.get(PriceKind.MACHINE_HOURLY.value, 0), "skipped_work_items": len(build.skipped), diff --git a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json index 6a986ebe..bdf32dd5 100644 --- a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json +++ b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json @@ -10,6 +10,7 @@ { "amount": "0.42", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0089", "raw_row_index": 0, @@ -17,11 +18,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-04-04" }, { "amount": "0.084", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0092", "raw_row_index": 1, @@ -29,11 +32,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-01-01" }, { "amount": "0.012", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0092", "raw_row_index": 2, @@ -41,11 +46,41 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-01-01" }, + { + "amount": "3.0", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0096", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "줄떼", + "work_item_code": "FP-05-01-04" + }, + { + "amount": "6.0", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0096", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "평떼", + "work_item_code": "FP-05-01-04" + }, { "amount": "0.19", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0102", "raw_row_index": 1, @@ -53,11 +88,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-03-02" }, { "amount": "0.06", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0102", "raw_row_index": 2, @@ -65,11 +102,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-03-02" }, { "amount": "0.07", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0103", "raw_row_index": 1, @@ -77,11 +116,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-03-03" }, { "amount": "0.02", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0103", "raw_row_index": 2, @@ -89,11 +130,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-03-03" }, { "amount": "0.47", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0114", "raw_row_index": 0, @@ -101,11 +144,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-09" }, { "amount": "0.43", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0116", "raw_row_index": 0, @@ -113,11 +158,139 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-11" }, + { + "amount": "4.5", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0118", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "줄떼심기", + "work_item_code": "FP-05-13" + }, + { + "amount": "6.0", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0118", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "띠떼심기", + "work_item_code": "FP-05-13" + }, + { + "amount": "2.4", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0121", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "절 취", + "work_item_code": "FP-05-16-01" + }, + { + "amount": "0.34", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0121", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "수평잡기 및 단정리", + "work_item_code": "FP-05-16-01" + }, + { + "amount": "0.36", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0121", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "잡석 및 뿌리 정리", + "work_item_code": "FP-05-16-01" + }, + { + "amount": "1.17", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0121", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "절·성토면 고르기", + "work_item_code": "FP-05-16-01" + }, + { + "amount": "0.34", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0129", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "채 취", + "work_item_code": "FP-05-21" + }, + { + "amount": "0.26", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0129", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "운 반", + "work_item_code": "FP-05-21" + }, + { + "amount": "0.47", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0129", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "붙이기", + "work_item_code": "FP-05-21" + }, { "amount": "0.0099", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0130", "raw_row_index": 0, @@ -125,11 +298,13 @@ "resource_kind": "labor", "resource_name": "조경공", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-22-02" }, { "amount": "0.0231", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0130", "raw_row_index": 1, @@ -137,11 +312,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-22-02" }, { "amount": "0.011", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0131", "raw_row_index": 0, @@ -149,11 +326,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-22-03" }, { "amount": "2", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0132", "raw_row_index": 0, @@ -161,11 +340,13 @@ "resource_kind": "labor", "resource_name": "조경공", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-22-04" }, { "amount": "1", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0132", "raw_row_index": 1, @@ -173,11 +354,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-22-04" }, { "amount": "0.0084", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0133", "raw_row_index": 0, @@ -185,11 +368,13 @@ "resource_kind": "labor", "resource_name": "조경공", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-23-02" }, { "amount": "0.0196", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0133", "raw_row_index": 1, @@ -197,11 +382,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-23-02" }, { "amount": "0.0033", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0134", "raw_row_index": 0, @@ -209,11 +396,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-23-03" }, { "amount": "0.0007", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0135", "raw_row_index": 8, @@ -221,11 +410,13 @@ "resource_kind": "labor", "resource_name": "조경공", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-24-01" }, { "amount": "0.0004", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0135", "raw_row_index": 9, @@ -233,11 +424,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-24-01" }, { "amount": "0.0007", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0136", "raw_row_index": 8, @@ -245,11 +438,13 @@ "resource_kind": "labor", "resource_name": "조경공", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-24-02" }, { "amount": "0.0004", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0136", "raw_row_index": 9, @@ -257,11 +452,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-24-02" }, { "amount": "0.002", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0139", "raw_row_index": 1, @@ -269,11 +466,13 @@ "resource_kind": "labor", "resource_name": "조경공", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-25" }, { "amount": "0.0007", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0139", "raw_row_index": 2, @@ -281,11 +480,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-25" }, { "amount": "0.01", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0143", "raw_row_index": 0, @@ -293,11 +494,13 @@ "resource_kind": "labor", "resource_name": "조경공", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-27" }, { "amount": "0.08", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0143", "raw_row_index": 1, @@ -305,11 +508,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-27" }, { "amount": "0.19", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0144", "raw_row_index": 0, @@ -317,11 +522,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-28-01" }, { "amount": "0.06", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0144", "raw_row_index": 1, @@ -329,11 +536,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-05-28-01" }, { "amount": "3.00", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0163", "raw_row_index": 0, @@ -341,11 +550,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-06-05" }, { "amount": "2.00", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0163", "raw_row_index": 2, @@ -353,11 +564,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-06-05" }, { "amount": "0.29", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0165", "raw_row_index": 1, @@ -365,11 +578,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-06-07-01" }, { "amount": "0.09", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0165", "raw_row_index": 2, @@ -377,11 +592,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-06-07-01" }, { "amount": "0.3", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0166", "raw_row_index": 0, @@ -389,11 +606,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-06-07-02" }, { "amount": "0.8", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0166", "raw_row_index": 1, @@ -401,11 +620,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-06-07-02" }, { "amount": "0.75", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0236", "raw_row_index": 1, @@ -413,11 +634,13 @@ "resource_kind": "machine", "resource_name": "", "resource_spec": "0.75", + "variant": "", "work_item_code": "FP-08-10" }, { "amount": "0.16", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0239", "raw_row_index": 0, @@ -425,11 +648,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-03-01" }, { "amount": "0.041", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0243", "raw_row_index": 4, @@ -437,11 +662,13 @@ "resource_kind": "labor", "resource_name": "착암공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-05-01" }, { "amount": "0.103", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0243", "raw_row_index": 5, @@ -449,11 +676,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-05-01" }, { "amount": "0.02", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0251", "raw_row_index": 0, @@ -461,11 +690,13 @@ "resource_kind": "labor", "resource_name": "용접공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-08-01" }, { "amount": "0.08", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0251", "raw_row_index": 1, @@ -473,11 +704,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-08-01" }, { "amount": "0.23", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0258", "raw_row_index": 0, @@ -485,11 +718,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-12-01" }, { "amount": "1.6", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0259", "raw_row_index": 0, @@ -497,11 +732,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-12-02" }, { "amount": "0.8", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0259", "raw_row_index": 1, @@ -509,11 +746,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-12-02" }, { "amount": "2.8", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0260", "raw_row_index": 0, @@ -521,11 +760,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-12-03" }, { "amount": "1.266", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0260", "raw_row_index": 1, @@ -533,11 +774,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-12-03" }, { "amount": "0.23", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0261", "raw_row_index": 0, @@ -545,11 +788,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-01" }, { "amount": "0.31", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0262", "raw_row_index": 0, @@ -557,11 +802,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-02" }, { "amount": "0.39", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0263", "raw_row_index": 0, @@ -569,11 +816,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-03" }, { "amount": "0.345", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0264", "raw_row_index": 0, @@ -581,11 +830,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-04" }, { "amount": "0.465", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0265", "raw_row_index": 0, @@ -593,11 +844,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-05" }, { "amount": "0.585", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0266", "raw_row_index": 0, @@ -605,11 +858,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-06" }, { "amount": "1.6", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0267", "raw_row_index": 0, @@ -617,11 +872,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-07" }, { "amount": "0.8", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0267", "raw_row_index": 1, @@ -629,11 +886,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-07" }, { "amount": "1.8", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0268", "raw_row_index": 0, @@ -641,11 +900,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-08" }, { "amount": "0.9", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0268", "raw_row_index": 1, @@ -653,11 +914,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-08" }, { "amount": "2.0", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0269", "raw_row_index": 0, @@ -665,11 +928,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-09" }, { "amount": "1.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0269", "raw_row_index": 1, @@ -677,11 +942,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-09" }, { "amount": "1.2", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0270", "raw_row_index": 0, @@ -689,11 +956,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-10" }, { "amount": "1.35", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0271", "raw_row_index": 0, @@ -701,11 +970,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-11" }, { "amount": "1.5", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0272", "raw_row_index": 0, @@ -713,11 +984,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-12" }, { "amount": "2.8", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0273", "raw_row_index": 0, @@ -725,11 +998,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-13" }, { "amount": "1.266", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0273", "raw_row_index": 1, @@ -737,11 +1012,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-13" }, { "amount": "3.5", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0274", "raw_row_index": 0, @@ -749,11 +1026,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-14" }, { "amount": "1.566", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0274", "raw_row_index": 1, @@ -761,11 +1040,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-14" }, { "amount": "4.2", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0275", "raw_row_index": 0, @@ -773,11 +1054,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-15" }, { "amount": "1.866", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0275", "raw_row_index": 1, @@ -785,11 +1068,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-15" }, { "amount": "4.20", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0276", "raw_row_index": 0, @@ -797,11 +1082,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-16" }, { "amount": "1.899", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0276", "raw_row_index": 1, @@ -809,11 +1096,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-16" }, { "amount": "5.25", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0277", "raw_row_index": 0, @@ -821,11 +1110,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-17" }, { "amount": "2.349", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0277", "raw_row_index": 1, @@ -833,11 +1124,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-17" }, { "amount": "6.3", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0278", "raw_row_index": 0, @@ -845,11 +1138,13 @@ "resource_kind": "labor", "resource_name": "할석공", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-18" }, { "amount": "2.799", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0278", "raw_row_index": 1, @@ -857,11 +1152,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-13-18" }, { "amount": "0.10", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0279", "raw_row_index": 0, @@ -869,11 +1166,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-14-01" }, { "amount": "0.019", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0290", "raw_row_index": 0, @@ -881,11 +1180,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-19-02" }, { "amount": "0.0328", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0291", "raw_row_index": 0, @@ -893,11 +1194,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-19-03" }, { "amount": "0.80", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0294", "raw_row_index": 0, @@ -905,11 +1208,13 @@ "resource_kind": "machine", "resource_name": "굴착기(무한궤도)", "resource_spec": "0.2", + "variant": "", "work_item_code": "FP-09-21" }, { "amount": "0.03", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0294", "raw_row_index": 1, @@ -917,11 +1222,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-21" }, { "amount": "0.46", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0294", "raw_row_index": 2, @@ -929,11 +1236,13 @@ "resource_kind": "machine", "resource_name": "굴착기(무한궤도)", "resource_spec": "0.7", + "variant": "", "work_item_code": "FP-09-21" }, { "amount": "0.03", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0294", "raw_row_index": 3, @@ -941,11 +1250,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-09-21" }, { "amount": "0.5", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0303", "raw_row_index": 0, @@ -953,11 +1264,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-06-02" }, { "amount": "0.35", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0305", "raw_row_index": 0, @@ -965,11 +1278,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-07-01" }, { "amount": "0.35", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0305", "raw_row_index": 1, @@ -977,11 +1292,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-07-01" }, { "amount": "2.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0306", "raw_row_index": 0, @@ -989,11 +1306,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-07-02" }, { "amount": "2.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0306", "raw_row_index": 1, @@ -1001,11 +1320,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-07-02" }, { "amount": "6.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0306", "raw_row_index": 2, @@ -1013,11 +1334,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-07-02" }, { "amount": "1.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0307", "raw_row_index": 0, @@ -1025,11 +1348,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-07-03" }, { "amount": "1.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0307", "raw_row_index": 1, @@ -1037,11 +1362,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-07-03" }, { "amount": "3.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0307", "raw_row_index": 2, @@ -1049,11 +1376,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-07-03" }, { "amount": "2.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0310", "raw_row_index": 0, @@ -1061,11 +1390,41 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-07-04" }, + { + "amount": "1.0", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0313", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "콘크리트", + "work_item_code": "FP-10-08-01" + }, + { + "amount": "3.0", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0313", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "제 자재", + "work_item_code": "FP-10-08-01" + }, { "amount": "2.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0317", "raw_row_index": 0, @@ -1073,11 +1432,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-10-01" }, { "amount": "2.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0318", "raw_row_index": 0, @@ -1085,11 +1446,265 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-10-10-02" }, + { + "amount": "0.12", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0329", + "raw_row_index": 0, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "무근구조물", + "work_item_code": "FP-12-01-01" + }, + { + "amount": "0.15", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0329", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "무근구조물", + "work_item_code": "FP-12-01-01" + }, + { + "amount": "0.14", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0329", + "raw_row_index": 1, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "철근구조물", + "work_item_code": "FP-12-01-01" + }, + { + "amount": "0.16", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0329", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "철근구조물", + "work_item_code": "FP-12-01-01" + }, + { + "amount": "0.24", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0329", + "raw_row_index": 2, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "소형구조물", + "work_item_code": "FP-12-01-01" + }, + { + "amount": "0.30", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0329", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "소형구조물", + "work_item_code": "FP-12-01-01" + }, + { + "amount": "0.15", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0330", + "raw_row_index": 0, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "무근구조물", + "work_item_code": "FP-12-01-02" + }, + { + "amount": "0.46", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0330", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "무근구조물", + "work_item_code": "FP-12-01-02" + }, + { + "amount": "0.17", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0330", + "raw_row_index": 1, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "철근구조물", + "work_item_code": "FP-12-01-02" + }, + { + "amount": "0.68", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0330", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "철근구조물", + "work_item_code": "FP-12-01-02" + }, + { + "amount": "0.24", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0330", + "raw_row_index": 2, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "소형구조물", + "work_item_code": "FP-12-01-02" + }, + { + "amount": "0.94", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0330", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "소형구조물", + "work_item_code": "FP-12-01-02" + }, + { + "amount": "0.85", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0331", + "raw_row_index": 0, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "무근구조물", + "work_item_code": "FP-12-01-03" + }, + { + "amount": "0.82", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0331", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "무근구조물", + "work_item_code": "FP-12-01-03" + }, + { + "amount": "0.87", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0331", + "raw_row_index": 1, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "철근구조물", + "work_item_code": "FP-12-01-03" + }, + { + "amount": "0.99", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0331", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "철근구조물", + "work_item_code": "FP-12-01-03" + }, + { + "amount": "1.29", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0331", + "raw_row_index": 2, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "소형구조물", + "work_item_code": "FP-12-01-03" + }, + { + "amount": "1.36", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0331", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "소형구조물", + "work_item_code": "FP-12-01-03" + }, { "amount": "0.22", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0336", "raw_row_index": 6, @@ -1097,11 +1712,13 @@ "resource_kind": "labor", "resource_name": "형틀목공", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-04" }, { "amount": "0.12", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0336", "raw_row_index": 7, @@ -1109,11 +1726,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-04" }, { "amount": "0.03", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0337", "raw_row_index": 2, @@ -1121,11 +1740,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-05" }, { "amount": "1", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0339", "raw_row_index": 1, @@ -1133,11 +1754,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-07-01" }, { "amount": "2", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0339", "raw_row_index": 2, @@ -1145,11 +1768,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-07-01" }, { "amount": "2", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0340", "raw_row_index": 0, @@ -1157,11 +1782,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-07-02" }, { "amount": "3", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0340", "raw_row_index": 1, @@ -1169,11 +1796,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-07-02" }, { "amount": "0.0055", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0345", "raw_row_index": 1, @@ -1181,11 +1810,13 @@ "resource_kind": "labor", "resource_name": "배관공", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-10" }, { "amount": "0.0055", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0345", "raw_row_index": 2, @@ -1193,11 +1824,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-10" }, { "amount": "0.003", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0345", "raw_row_index": 4, @@ -1205,11 +1838,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-10" }, { "amount": "0.13", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0345", "raw_row_index": 7, @@ -1217,11 +1852,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-10" }, { "amount": "0.12", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0348", "raw_row_index": 1, @@ -1229,11 +1866,13 @@ "resource_kind": "labor", "resource_name": "일반기계운전사", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-11-02" }, { "amount": "1.23", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0348", "raw_row_index": 2, @@ -1241,11 +1880,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-11-02" }, { "amount": "0.05", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0363", "raw_row_index": 2, @@ -1253,11 +1894,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-17-02" }, { "amount": "4.2", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0365", "raw_row_index": 1, @@ -1265,11 +1908,13 @@ "resource_kind": "labor", "resource_name": "철근공", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-18" }, { "amount": "2.4", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0365", "raw_row_index": 2, @@ -1277,11 +1922,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-18" }, { "amount": "0.07", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0367", "raw_row_index": 3, @@ -1289,11 +1936,13 @@ "resource_kind": "labor", "resource_name": "형틀목공", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-20" }, { "amount": "0.05", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0367", "raw_row_index": 4, @@ -1301,11 +1950,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-20" }, { "amount": "0.034", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0368", "raw_row_index": 1, @@ -1313,11 +1964,13 @@ "resource_kind": "labor", "resource_name": "방수공", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-21" }, { "amount": "0.04", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0368", "raw_row_index": 2, @@ -1325,11 +1978,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-21" }, { "amount": "0.003", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0370", "raw_row_index": 2, @@ -1337,11 +1992,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-23" }, { "amount": "0.2", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0372", "raw_row_index": 1, @@ -1349,11 +2006,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-24-02" }, { "amount": "4.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0372", "raw_row_index": 2, @@ -1361,11 +2020,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-24-02" }, { "amount": "1", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0374", "raw_row_index": 3, @@ -1373,11 +2034,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-26" }, { "amount": "0.2", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0371", "raw_row_index": 1, @@ -1385,11 +2048,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-24-01" }, { "amount": "4.0", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0371", "raw_row_index": 2, @@ -1397,11 +2062,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-24-01" }, { "amount": "0.12", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0378", "raw_row_index": 2, @@ -1409,11 +2076,13 @@ "resource_kind": "labor", "resource_name": "미장공", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-28" }, { "amount": "0.004", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0384", "raw_row_index": 1, @@ -1421,11 +2090,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-33" }, { "amount": "3.8", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0387", "raw_row_index": 1, @@ -1433,11 +2104,13 @@ "resource_kind": "labor", "resource_name": "철근공", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-34-03" }, { "amount": "2.2", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0387", "raw_row_index": 2, @@ -1445,11 +2118,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-34-03" }, { "amount": "0.05", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0389", "raw_row_index": 2, @@ -1457,11 +2132,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-12-35" }, { "amount": "0.5", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0397", "raw_row_index": 1, @@ -1469,11 +2146,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-02-01" }, { "amount": "0.17", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0398", "raw_row_index": 0, @@ -1481,11 +2160,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-02-02" }, { "amount": "2.6", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0399", "raw_row_index": 0, @@ -1493,11 +2174,125 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-02-03" }, + { + "amount": "0.05", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0402", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "두 께 3㎝", + "work_item_code": "FP-13-03-01" + }, + { + "amount": "0.04", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0402", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "두 께 6㎝", + "work_item_code": "FP-13-03-01" + }, + { + "amount": "0.05", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0402", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "자갈 기초다짐 지름 1~3㎝", + "work_item_code": "FP-13-03-01" + }, + { + "amount": "0.019", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0403", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "기초다짐 뒷채움", + "work_item_code": "FP-13-03-02" + }, + { + "amount": "0.087", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0403", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "75이상", + "work_item_code": "FP-13-03-02" + }, + { + "amount": "0.05", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0415", + "raw_row_index": 0, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "25㎝", + "work_item_code": "FP-13-04-06" + }, + { + "amount": "0.08", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0415", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "30㎝", + "work_item_code": "FP-13-04-06" + }, + { + "amount": "0.09", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0415", + "raw_row_index": 2, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "35㎝", + "work_item_code": "FP-13-04-06" + }, { "amount": "0.83", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0419", "raw_row_index": 1, @@ -1505,11 +2300,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-06-01" }, { "amount": "1.04", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0419", "raw_row_index": 2, @@ -1517,11 +2314,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-06-01" }, { "amount": "0.83", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0420", "raw_row_index": 1, @@ -1529,11 +2328,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-06-02" }, { "amount": "1.30", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0420", "raw_row_index": 2, @@ -1541,11 +2342,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-06-02" }, { "amount": "4.80", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0420", "raw_row_index": 4, @@ -1553,11 +2356,13 @@ "resource_kind": "machine", "resource_name": "굴착기(무한궤도)", "resource_spec": "0.8", + "variant": "", "work_item_code": "FP-13-06-02" }, { "amount": "1.19", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0421", "raw_row_index": 1, @@ -1565,11 +2370,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-06-03" }, { "amount": "1.86", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0421", "raw_row_index": 2, @@ -1577,11 +2384,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-06-03" }, { "amount": "6.86", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0421", "raw_row_index": 4, @@ -1589,11 +2398,13 @@ "resource_kind": "machine", "resource_name": "굴착기(무한궤도)", "resource_spec": "0.8", + "variant": "", "work_item_code": "FP-13-06-03" }, { "amount": "0.58", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0422", "raw_row_index": 1, @@ -1601,11 +2412,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-07-01" }, { "amount": "0.58", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0422", "raw_row_index": 2, @@ -1613,11 +2426,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-07-01" }, { "amount": "2.40", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0422", "raw_row_index": 4, @@ -1625,11 +2440,13 @@ "resource_kind": "machine", "resource_name": "굴착기(무한궤도)", "resource_spec": "0.8", + "variant": "", "work_item_code": "FP-13-07-01" }, { "amount": "0.58", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0423", "raw_row_index": 1, @@ -1637,11 +2454,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-07-02" }, { "amount": "1.01", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0423", "raw_row_index": 2, @@ -1649,11 +2468,41 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-07-02" }, + { + "amount": "0.09", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0426", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 15㎝ 길이 4m", + "work_item_code": "FP-13-10-01" + }, + { + "amount": "0.22", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0426", + "raw_row_index": 0, + "resource_code": "1007", + "resource_kind": "labor", + "resource_name": "형틀목공", + "resource_spec": "", + "variant": "직경 15㎝ 길이 4m", + "work_item_code": "FP-13-10-01" + }, { "amount": "0.015", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0432", "raw_row_index": 1, @@ -1661,11 +2510,13 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-11-01" }, { "amount": "0.005", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0434", "raw_row_index": 1, @@ -1673,11 +2524,41 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-11-02" }, + { + "amount": "0.16", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0437", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "절 취(㎥)", + "work_item_code": "FP-13-12-01" + }, + { + "amount": "0.05", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0437", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "투 입(㎥)", + "work_item_code": "FP-13-12-01" + }, { "amount": "0.0141", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0438", "raw_row_index": 0, @@ -1685,11 +2566,13 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-12-02" }, { "amount": "0.0381", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0438", "raw_row_index": 1, @@ -1697,11 +2580,13 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-12-02" }, { "amount": "0.0099", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0438", "raw_row_index": 2, @@ -1709,11 +2594,69 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-12-02" }, + { + "amount": "7.274", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0440", + "raw_row_index": 1, + "resource_code": "1023", + "resource_kind": "labor", + "resource_name": "건축목공", + "resource_spec": "", + "variant": "중", + "work_item_code": "FP-13-13-01" + }, + { + "amount": "0.786", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0440", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "중", + "work_item_code": "FP-13-13-01" + }, + { + "amount": "16.975", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0440", + "raw_row_index": 5, + "resource_code": "1023", + "resource_kind": "labor", + "resource_name": "건축목공", + "resource_spec": "", + "variant": "상등구조", + "work_item_code": "FP-13-13-01" + }, + { + "amount": "1.848", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0440", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "상등구조", + "work_item_code": "FP-13-13-01" + }, { "amount": "0.20", "amount_unit": "", + "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0441", "raw_row_index": 0, @@ -1721,11 +2664,111 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-13-02" }, + { + "amount": "2.80", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0443", + "raw_row_index": 0, + "resource_code": "1023", + "resource_kind": "labor", + "resource_name": "건축목공", + "resource_spec": "", + "variant": "간 단 구 조", + "work_item_code": "FP-13-13-02" + }, + { + "amount": "0.80", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0443", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "간 단 구 조", + "work_item_code": "FP-13-13-02" + }, + { + "amount": "6.31", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0443", + "raw_row_index": 1, + "resource_code": "1023", + "resource_kind": "labor", + "resource_name": "건축목공", + "resource_spec": "", + "variant": "보 통 구 조", + "work_item_code": "FP-13-13-02" + }, + { + "amount": "1.31", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0443", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "보 통 구 조", + "work_item_code": "FP-13-13-02" + }, + { + "amount": "0.030", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0444", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "단 끊 기", + "work_item_code": "FP-13-14" + }, + { + "amount": "0.035", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0444", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "흙채우기(마대채우기)", + "work_item_code": "FP-13-14" + }, + { + "amount": "0.025", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0444", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "마대쌓기", + "work_item_code": "FP-13-14" + }, { "amount": "0.0027", "amount_unit": "", + "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0445", "raw_row_index": 0, @@ -1733,6 +2776,7 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", + "variant": "", "work_item_code": "FP-13-15-01" } ], @@ -1748,12 +2792,12 @@ "sha256": "593653135d5a2871180e7a3921f9238629b275438ef47230412aa21e9bdd80c0" }, "stats": { - "rows": 144, + "rows": 198, "skipped_forms": { "coefficient": 19, "reference": 98, "undetermined": 76 }, - "unmatched": 330 + "unmatched": 307 } } \ No newline at end of file diff --git a/resources/data_cost_resource_axis/unmatched_2026-01-01.json b/resources/data_cost_resource_axis/unmatched_2026-01-01.json index 119aa796..0a0c37a9 100644 --- a/resources/data_cost_resource_axis/unmatched_2026-01-01.json +++ b/resources/data_cost_resource_axis/unmatched_2026-01-01.json @@ -242,18 +242,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-04-02-02" }, - { - "cell": "줄떼", - "pum_table_id": "F0096", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-01-04" - }, - { - "cell": "평떼", - "pum_table_id": "F0096", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-01-04" - }, { "cell": "지게", "pum_table_id": "F0097", @@ -350,66 +338,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-08" }, - { - "cell": "줄떼심기", - "pum_table_id": "F0118", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-13" - }, - { - "cell": "띠떼심기", - "pum_table_id": "F0118", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-13" - }, - { - "cell": "절 취", - "pum_table_id": "F0121", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-16-01" - }, - { - "cell": "수평잡기 및 단정리", - "pum_table_id": "F0121", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-16-01" - }, - { - "cell": "잡석 및 뿌리 정리", - "pum_table_id": "F0121", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-16-01" - }, - { - "cell": "절·성토면 고르기", - "pum_table_id": "F0121", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-16-01" - }, { "cell": "표토절취", "pum_table_id": "F0126", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-19-01" }, - { - "cell": "채 취", - "pum_table_id": "F0129", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-21" - }, - { - "cell": "운 반", - "pum_table_id": "F0129", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-21" - }, - { - "cell": "붙이기", - "pum_table_id": "F0129", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-21" - }, { "cell": "트럭", "pum_table_id": "F0132", @@ -1395,15 +1329,21 @@ "work_item_code": "FP-09-19-03" }, { - "cell": "콘크리트", + "cell": "거리 (m) | 보통인부(인) | 거리 (m) | 보통인부(인) | 비고", + "pum_table_id": "F0302", + "reason": "열 머리가 되풀이되는 두 판 짜리 표 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-10-06-01" + }, + { + "cell": "〃", "pum_table_id": "F0313", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", "work_item_code": "FP-10-08-01" }, { - "cell": "제 자재", + "cell": "〃", "pum_table_id": "F0313", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", "work_item_code": "FP-10-08-01" }, { @@ -1418,60 +1358,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-10-10-02" }, - { - "cell": "무근구조물", - "pum_table_id": "F0329", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-01-01" - }, - { - "cell": "철근구조물", - "pum_table_id": "F0329", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-01-01" - }, - { - "cell": "소형구조물", - "pum_table_id": "F0329", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-01-01" - }, - { - "cell": "무근구조물", - "pum_table_id": "F0330", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-01-02" - }, - { - "cell": "철근구조물", - "pum_table_id": "F0330", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-01-02" - }, - { - "cell": "소형구조물", - "pum_table_id": "F0330", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-01-02" - }, - { - "cell": "무근구조물", - "pum_table_id": "F0331", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-01-03" - }, - { - "cell": "철근구조물", - "pum_table_id": "F0331", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-01-03" - }, - { - "cell": "소형구조물", - "pum_table_id": "F0331", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-01-03" - }, { "cell": "간 단", "pum_table_id": "F0335", @@ -1790,30 +1676,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-03" }, - { - "cell": "두 께 3㎝", - "pum_table_id": "F0402", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-03-01" - }, - { - "cell": "두 께 6㎝", - "pum_table_id": "F0402", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-03-01" - }, - { - "cell": "자갈 기초다짐 지름 1~3㎝", - "pum_table_id": "F0402", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-03-01" - }, - { - "cell": "기초다짐 뒷채움", - "pum_table_id": "F0403", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-03-02" - }, { "cell": "굴 삭 기 (무한궤도)", "pum_table_id": "F0419", @@ -1827,10 +1689,46 @@ "work_item_code": "FP-13-07-02" }, { - "cell": "직경 15㎝ 길이 4m", - "pum_table_id": "F0426", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-10-01" + "cell": "8 9", + "pum_table_id": "F0430", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "12", + "pum_table_id": "F0430", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "15", + "pum_table_id": "F0430", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "18", + "pum_table_id": "F0430", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "21", + "pum_table_id": "F0430", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "24", + "pum_table_id": "F0430", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "27", + "pum_table_id": "F0430", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-10-02" }, { "cell": "조약돌량(㎥)", @@ -1904,34 +1802,28 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-11-02" }, - { - "cell": "절 취(㎥)", - "pum_table_id": "F0437", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-12-01" - }, - { - "cell": "투 입(㎥)", - "pum_table_id": "F0437", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-12-01" - }, { "cell": "보통구조", "pum_table_id": "F0440", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-13-01" + }, + { + "cell": "상", + "pum_table_id": "F0440", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-13-01" }, { "cell": "중등구조", "pum_table_id": "F0440", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-13-01" }, { - "cell": "상등구조", + "cell": "상", "pum_table_id": "F0440", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-13-01" }, { @@ -1940,36 +1832,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-13-02" }, - { - "cell": "간 단 구 조", - "pum_table_id": "F0443", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-13-02" - }, - { - "cell": "보 통 구 조", - "pum_table_id": "F0443", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-13-02" - }, - { - "cell": "단 끊 기", - "pum_table_id": "F0444", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-14" - }, - { - "cell": "흙채우기(마대채우기)", - "pum_table_id": "F0444", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-14" - }, - { - "cell": "마대쌓기", - "pum_table_id": "F0444", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-14" - }, { "cell": "어려운 조건", "pum_table_id": "F0447", From f0608bd31500350267d1e167a8e27eb3706a13fb Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 00:59:45 +0900 Subject: [PATCH 03/12] =?UTF-8?q?feat(B09):=202=EB=8B=A8=20=EC=97=B4=20?= =?UTF-8?q?=EB=A8=B8=EB=A6=AC=20=ED=91=9C=20=EC=9D=BD=EA=B8=B0=20+=20?= =?UTF-8?q?=E3=80=8C=EA=B3=84=E3=80=8D=20=EC=97=B4=20=EC=9D=B4=EC=A4=91?= =?UTF-8?q?=EA=B3=84=EC=83=81=20=EC=B0=A8=EB=8B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 자원 이름이 **둘째 줄**에 오는 표를 읽음 (철근 12-3: `구조별 | 가공 | 조립 | 계` 아래에 `철근공(인) | 보통인부(인)` 세 벌) - ⚠ 「계」 열은 가공 + 조립을 이미 더한 값이라 **통째로 뺌** — 같이 읽으면 두 번 셈(㉤ 열 방향 사고 자리). 검산: 간단 = 1.07 + 1.69 = 2.76 으로 품셈 「계」와 일치 - 머리 줄에는 갈래 칸이 없어 자료 행과 한 칸 어긋나는 것 보정 - 열 머리 되풀이 금지는 **1단 표에만** 적용. 2단 표에서 같은 직종이 공정마다 되풀이되는 것은 정상이라, 한 규칙으로 뭉치면 철근이 통째로 버려짐 - 내역서 후보 목록에 **규격 갈래**(`#무근구조물`)도 넣음 — B08 이 갈래 없는 코드를 보내면 후보로 보이고 임의로 안 고름 철근 현장가공 및 조립 4갈래 성립 (간단 919,146.7 … 매우복잡 1,278,375.3) 검증: pytest 165 통과(신규 2 — 「계」 열 제외 확인 + 되풀이 규칙 짝 시험) Co-Authored-By: Claude Opus 5 (1M context) --- .../B09_Estimation_BillOfQuantities.py | 8 +- .../B09_Estimation_ResourceAxis_Transposed.py | 71 +- .../resource_axis_2026-01-01.json | 2454 ++++++++++++++++- .../unmatched_2026-01-01.json | 258 +- 4 files changed, 2708 insertions(+), 83 deletions(-) diff --git a/B09_Estimation/B09_Estimation_BillOfQuantities.py b/B09_Estimation/B09_Estimation_BillOfQuantities.py index 5a4c0df4..82725380 100644 --- a/B09_Estimation/B09_Estimation_BillOfQuantities.py +++ b/B09_Estimation/B09_Estimation_BillOfQuantities.py @@ -383,10 +383,16 @@ def _leaf_row( if price_code not in unit_prices.book.titles: # 한 층 아래에 일위대가가 있으면 **후보로 보여준다** — 임의로 고르지 않는다 # (CLAUDE.md 3장 「미결 항목 임의 확정 금지」, B08 `mapping_pending_user` 와 같은 태도). + # 한 층 아래 공종 + **규격 갈래**(`#무근구조물`) 둘 다 후보로 본다. children = sorted( code for code in unit_prices.book.titles - if code.startswith(f"{price_code}-") and code.count("-") == price_code.count("-") + 1 + if ( + code.startswith(f"{price_code}-") + and code.count("-") == price_code.count("-") + 1 + and "#" not in code + ) + or code.startswith(f"{price_code}#") ) if children: names = ", ".join(f"{c[2:]} {unit_prices.book.title(c).name}" for c in children) diff --git a/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py b/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py index 5fbccb26..d19e8956 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py @@ -38,6 +38,64 @@ def _normalize_label(text: str) -> str: return "".join(str(text).split()) +#: 「계」 열 — **가공 + 조립을 이미 더한 값**이다. 같이 읽으면 두 번 센다(㉤ 열 방향). +_SUM_GROUP_LABELS = ("계", "합계", "소계", "총계") + + +def _sum_group_positions(headers: list, resource_count: int) -> set: + """「계」 묶음이 차지하는 열 번호. 2단 머리에서 묶음 하나가 여러 열을 먹는다. + + 첫 줄이 `구조별 | 가공 | 조립 | 계` 이고 둘째 줄이 `철근공 | 보통인부` × 3 벌이면 + 묶음 하나가 **2열씩** 차지한다. 「계」 묶음의 열은 통째로 뺀다. + """ + groups = [str(h).strip() for h in headers[1:]] + if not groups or resource_count % len(groups) != 0: + return set() + per_group = resource_count // len(groups) + blocked = set() + for index, group in enumerate(groups): + if "".join(group.split()) in _SUM_GROUP_LABELS: + start = index * per_group + blocked.update(range(start, start + per_group)) + return blocked + + +def second_row_columns(table: dict, catalog: ResourceCatalog): + """**첫 자료 행이 진짜 열 머리**인 2단 표를 읽는다. + + `condition_note` 가 공정(「가공·조립·계」)뿐이고 자원 이름이 그 아래 줄에 오는 표다 + (철근 현장가공 및 조립 12-3). 자원을 못 찾으면 빈 목록을 돌려준다. + """ + rows = table.get("raw_row") or [] + if not rows: + return [], 0 + header_row = [str(c).strip() for c in rows[0]] + found = [] + for position, cell in enumerate(header_row): + if not cell: + continue + name, spec = split_name_and_spec(cell) + entry = catalog.resolve(name, spec) + if entry is None and not spec: + candidates = catalog.by_name(name) + entry = candidates[0] if len(candidates) == 1 else None + if entry is not None: + found.append((position, entry)) + if len(found) < 2: + return [], 0 + + # ⚠ 「계」 묶음은 뺀다 — 가공 + 조립을 이미 더한 값이라 같이 읽으면 두 번 센다. + blocked = _sum_group_positions(table.get("condition_note") or [], len(found)) + # ⚠ 머리 줄에는 **갈래 칸이 없다** — 자료 행은 첫 칸이 갈래 이름이라 한 칸 밀려 있다. + # 이 보정을 빼면 갈래 이름 칸을 자원 값으로 읽는다. + kept = [ + (position + 1, entry) + for order, (position, entry) in enumerate(found) + if order not in blocked + ] + return kept, 1 + + def transposed_columns(table: dict[str, Any], catalog: ResourceCatalog) -> list[tuple[int, Any]]: """열 머리에서 자원을 찾는다. `[(열 번호, 카탈로그 줄)]`. @@ -71,6 +129,10 @@ def match_transposed_table( 「철근구조물」은 품이 달라 **한 일위대가로 뭉치면 안 된다**. """ columns = transposed_columns(table, catalog) + skip_rows = 0 + if not columns: + # 자원 이름이 **둘째 줄**에 오는 2단 표일 수 있다. + columns, skip_rows = second_row_columns(table, catalog) if not columns: return False @@ -78,8 +140,11 @@ def match_transposed_table( # (「거리 | 보통인부 | 거리 | 보통인부」) 오른쪽 판의 **거리값이 인원으로** 읽힌다 # — 2026-09-08 실측: 소운반이 「보통인부 60인」이 되어 단가가 1,553만원으로 섰다. # 판 경계를 짐작해 읽지 않는다. + # ⚠ 2단 표에서는 **같은 직종이 공정마다 되풀이되는 것이 정상**이다 + # (철근 12-3: 가공 철근공 + 조립 철근공 = 합쳐야 맞는 값). 되풀이 금지는 + # **1단 표에만** 건다 — 거기서만 「두 판이 좌우로 붙은 표」를 뜻한다. codes = [entry.code for _, entry in columns] - if len(codes) != len(set(codes)): + if skip_rows == 0 and len(codes) != len(set(codes)): result.unmatched.append( UnmatchedRow( work_item_code=node.get("work_item_code", ""), @@ -94,7 +159,7 @@ def match_transposed_table( # 떨어져 나가면 「상」이 두 번 나오고, 그대로 두면 서로 다른 등급의 품이 **합산**된다 # (2026-09-08 실측: 목재틀흙막이 「상」이 8.760 + 13.767 = 22.5 인이 되어 단가가 # 667만원으로 섰다). 어느 등급인지 단정할 수 없으므로 고쳐 읽지 않는다. - labels = [str(row[0]).strip() for row in (table.get("raw_row") or []) if row] + labels = [str(row[0]).strip() for row in (table.get("raw_row") or [])[skip_rows:] if row] repeated = {label for label in labels if label and labels.count(label) > 1} work_item_code = node.get("work_item_code", "") @@ -103,6 +168,8 @@ def match_transposed_table( matched_any = False for index, row in enumerate(table.get("raw_row", [])): + if index < skip_rows: + continue # 그 줄은 자료가 아니라 **열 머리**다 cells = [str(c) for c in row] if not cells: continue diff --git a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json index bdf32dd5..b48feb7b 100644 --- a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json +++ b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json @@ -7,6 +7,216 @@ "work_item_axis_owner": "B08" }, "rows": [ + { + "amount": "0.14", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 1, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "16~20cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.28", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 1, + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "16~20cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.28", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "16~20cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.18", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "22~30cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.36", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 2, + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "22~30cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.36", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "22~30cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.27", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 3, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "32~40cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.53", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 3, + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "32~40cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.53", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "32~40cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.35", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 4, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "42~50cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.70", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 4, + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "42~50cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.70", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "42~50cm", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.38", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 5, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "52cm이상", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.75", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 5, + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "52cm이상", + "work_item_code": "FP-04-03" + }, + { + "amount": "0.75", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0088", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "52cm이상", + "work_item_code": "FP-04-03" + }, { "amount": "0.42", "amount_unit": "", @@ -49,6 +259,734 @@ "variant": "", "work_item_code": "FP-05-01-01" }, + { + "amount": "0.072", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 1, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "1.0 이하", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.012", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "1.0 이하", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.084", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "1.1∼1.5", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.024", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "1.1∼1.5", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.096", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 3, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "1.6∼2.0", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.024", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "1.6∼2.0", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.120", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 4, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "2.1∼2.5", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.036", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "2.1∼2.5", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.132", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 5, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "2.6∼3.0", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.036", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "2.6∼3.0", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.156", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 6, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "3.1∼3.5", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.036", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 6, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "3.1∼3.5", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.180", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 7, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "3.6∼4.0", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.048", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 7, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "3.6∼4.0", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.204", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 8, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "4.1∼4.5", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.048", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 8, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "4.1∼4.5", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.228", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 9, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "4.6∼5.0", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.060", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0093", + "raw_row_index": 9, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "4.6∼5.0", + "work_item_code": "FP-05-01-02" + }, + { + "amount": "0.096", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 1, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "4이하", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.024", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "4이하", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.120", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "5(4이하)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.036", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "5(4이하)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.204", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 3, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "6 ∼ 7(5 ∼ 6)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.048", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "6 ∼ 7(5 ∼ 6)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.324", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 4, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "8 ∼ 9(7 ∼ 8)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.084", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "8 ∼ 9(7 ∼ 8)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.180", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 5, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "10 ∼ 11(9)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.072", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "10 ∼ 11(9)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.312", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 6, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "12 ∼ 14(10 ∼ 12)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.096", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 6, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "12 ∼ 14(10 ∼ 12)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.480", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 7, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "15 ∼ 17(13 ∼ 14)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.120", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 7, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "15 ∼ 17(13 ∼ 14)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.612", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 8, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "18 ∼ 19(15 ∼ 16)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.132", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 8, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "18 ∼ 19(15 ∼ 16)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.804", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 9, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "20 ∼ 24(17 ∼ 20)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.156", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 9, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "20 ∼ 24(17 ∼ 20)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "1.080", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 10, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "25 ∼ 29(21 ∼ 24)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.192", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 10, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "25 ∼ 29(21 ∼ 24)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "1.344", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 11, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "30 ∼ 34(25 ∼ 28)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.228", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 11, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "30 ∼ 34(25 ∼ 28)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "1.620", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 12, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "35 ∼ 39(29 ∼ 32)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.264", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 12, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "35 ∼ 39(29 ∼ 32)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "1.884", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 13, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "40 ∼ 44(33 ∼ 37)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.300", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 13, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "40 ∼ 44(33 ∼ 37)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "2.160", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 14, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "45 ∼ 49(38 ∼ 41)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.336", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 14, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "45 ∼ 49(38 ∼ 41)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "2.424", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 15, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "50 ∼ 54(42 ∼ 45)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.372", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 15, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "50 ∼ 54(42 ∼ 45)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "2.700", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 16, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "55 ∼ 59(46 ∼ 49)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.408", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 16, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "55 ∼ 59(46 ∼ 49)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "2.856", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 17, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "60(50)", + "work_item_code": "FP-05-01-03" + }, + { + "amount": "0.432", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0094", + "raw_row_index": 17, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "60(50)", + "work_item_code": "FP-05-01-03" + }, { "amount": "3.0", "amount_unit": "", @@ -77,6 +1015,622 @@ "variant": "평떼", "work_item_code": "FP-05-01-04" }, + { + "amount": "0.03", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 1, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "3", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.01", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "3", + "work_item_code": "FP-05-02" + }, + { + "amount": "36", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 1, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "3", + "work_item_code": "FP-05-02" + }, + { + "amount": "1.86", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "3", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.06", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "5", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.01", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "5", + "work_item_code": "FP-05-02" + }, + { + "amount": "42", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "5", + "work_item_code": "FP-05-02" + }, + { + "amount": "2.04", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "5", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.11", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 3, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "7", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.01", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "7", + "work_item_code": "FP-05-02" + }, + { + "amount": "48", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 3, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "7", + "work_item_code": "FP-05-02" + }, + { + "amount": "2.32", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "7", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.17", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 4, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "9", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.02", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "9", + "work_item_code": "FP-05-02" + }, + { + "amount": "54", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 4, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "9", + "work_item_code": "FP-05-02" + }, + { + "amount": "2.79", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "9", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.23", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 5, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "11", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.03", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "11", + "work_item_code": "FP-05-02" + }, + { + "amount": "60", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 5, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "11", + "work_item_code": "FP-05-02" + }, + { + "amount": "3.07", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "11", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.30", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 6, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "13", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.03", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 6, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "13", + "work_item_code": "FP-05-02" + }, + { + "amount": "66", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 6, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "13", + "work_item_code": "FP-05-02" + }, + { + "amount": "4.18", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 6, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "13", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.37", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 7, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "15", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.05", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 7, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "15", + "work_item_code": "FP-05-02" + }, + { + "amount": "72", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 7, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "15", + "work_item_code": "FP-05-02" + }, + { + "amount": "4.65", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 7, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "15", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.56", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 8, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "18", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.06", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 8, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "18", + "work_item_code": "FP-05-02" + }, + { + "amount": "78", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 8, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "18", + "work_item_code": "FP-05-02" + }, + { + "amount": "5.21", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 8, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "18", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.65", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 9, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "21", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.08", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 9, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "21", + "work_item_code": "FP-05-02" + }, + { + "amount": "84", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 9, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "21", + "work_item_code": "FP-05-02" + }, + { + "amount": "6.51", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 9, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "21", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.74", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 10, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "24", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.09", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 10, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "24", + "work_item_code": "FP-05-02" + }, + { + "amount": "90", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 10, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "24", + "work_item_code": "FP-05-02" + }, + { + "amount": "7.06", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 10, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "24", + "work_item_code": "FP-05-02" + }, + { + "amount": "1.58", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 11, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "30", + "work_item_code": "FP-05-02" + }, + { + "amount": "0.19", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 11, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "30", + "work_item_code": "FP-05-02" + }, + { + "amount": "100", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 11, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "30", + "work_item_code": "FP-05-02" + }, + { + "amount": "7.90", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0098", + "raw_row_index": 11, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "30", + "work_item_code": "FP-05-02" + }, { "amount": "0.19", "amount_unit": "", @@ -133,6 +1687,426 @@ "variant": "", "work_item_code": "FP-05-03-03" }, + { + "amount": "0.10", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 1, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "4(5)이하", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.06", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "4(5)이하", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.17", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "5(6)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.08", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "5(6)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.26", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 3, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "6 ∼ 7(7 ∼ 8)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.13", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "6 ∼ 7(7 ∼ 8)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.19", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 4, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "8 ∼ 9(9 ∼ 11)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.11", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "8 ∼ 9(9 ∼ 11)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.24", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 5, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "10 ∼ 11(12 ∼ 13)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.13", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "10 ∼ 11(12 ∼ 13)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.31", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 6, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "12 ∼ 14(14 ∼ 17)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.15", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 6, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "12 ∼ 14(14 ∼ 17)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.39", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 7, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "15 ∼ 17(18 ∼ 20)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.17", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 7, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "15 ∼ 17(18 ∼ 20)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.47", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 8, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "18 ∼ 19(21 ∼ 23)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.20", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 8, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "18 ∼ 19(21 ∼ 23)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.56", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 9, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "20 ∼ 24(24 ∼ 29)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.22", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 9, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "20 ∼ 24(24 ∼ 29)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.69", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 10, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "25 ∼ 29(30 ∼ 35)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.26", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 10, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "25 ∼ 29(30 ∼ 35)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.83", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 11, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "30 ∼ 34(36 ∼ 41)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.30", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 11, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "30 ∼ 34(36 ∼ 41)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.97", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 12, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "35 ∼ 39(42 ∼ 47)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.35", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 12, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "35 ∼ 39(42 ∼ 47)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "1.11", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 13, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "40 ∼ 44(48 ∼ 53)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.38", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 13, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "40 ∼ 44(48 ∼ 53)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "1.24", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 14, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "45 ∼ 49(54 ∼ 59)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.43", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 14, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "45 ∼ 49(54 ∼ 59)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "1.33", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 15, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "50(60)", + "work_item_code": "FP-05-03-05" + }, + { + "amount": "0.45", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0106", + "raw_row_index": 15, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "50(60)", + "work_item_code": "FP-05-03-05" + }, { "amount": "0.47", "amount_unit": "", @@ -623,6 +2597,174 @@ "variant": "", "work_item_code": "FP-06-07-02" }, + { + "amount": "0.2352", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0228", + "raw_row_index": 1, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "무인헬기 (ha당)", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.1193", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0228", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "무인헬기 (ha당)", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.0067", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0228", + "raw_row_index": 3, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "취수 및 약제조제", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.0067", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0228", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "취수 및 약제조제", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.1126", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0228", + "raw_row_index": 5, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "주유 및 약제충전 기체정비", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.1126", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0228", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "주유 및 약제충전 기체정비", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.3148", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0229", + "raw_row_index": 1, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "멀티콥터 (ha당)", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.2099", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0229", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "멀티콥터 (ha당)", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.0067", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0229", + "raw_row_index": 3, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "취수 및 약제조제", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.0067", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0229", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "취수 및 약제조제", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.2032", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0229", + "raw_row_index": 5, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "기체 및 약제충전 기체정비", + "work_item_code": "FP-08-06-02" + }, + { + "amount": "0.2032", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0229", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "기체 및 약제충전 기체정비", + "work_item_code": "FP-08-06-02" + }, { "amount": "0.75", "amount_unit": "", @@ -1701,6 +3843,314 @@ "variant": "소형구조물", "work_item_code": "FP-12-01-03" }, + { + "amount": "0.9", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0361", + "raw_row_index": 1, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "1:2:4", + "work_item_code": "FP-12-02" + }, + { + "amount": "1.0", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0361", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "1:2:4", + "work_item_code": "FP-12-02" + }, + { + "amount": "0.9", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0361", + "raw_row_index": 2, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "1:3:6", + "work_item_code": "FP-12-02" + }, + { + "amount": "0.9", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0361", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "1:3:6", + "work_item_code": "FP-12-02" + }, + { + "amount": "0.9", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0361", + "raw_row_index": 3, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "1:4:8", + "work_item_code": "FP-12-02" + }, + { + "amount": "0.7", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0361", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "1:4:8", + "work_item_code": "FP-12-02" + }, + { + "amount": "1.07", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 1, + "resource_code": "1008", + "resource_kind": "labor", + "resource_name": "철근공", + "resource_spec": "", + "variant": "간 단", + "work_item_code": "FP-12-03" + }, + { + "amount": "0.35", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "간 단", + "work_item_code": "FP-12-03" + }, + { + "amount": "1.69", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 1, + "resource_code": "1008", + "resource_kind": "labor", + "resource_name": "철근공", + "resource_spec": "", + "variant": "간 단", + "work_item_code": "FP-12-03" + }, + { + "amount": "0.69", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "간 단", + "work_item_code": "FP-12-03" + }, + { + "amount": "1.24", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 2, + "resource_code": "1008", + "resource_kind": "labor", + "resource_name": "철근공", + "resource_spec": "", + "variant": "보 통", + "work_item_code": "FP-12-03" + }, + { + "amount": "0.45", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "보 통", + "work_item_code": "FP-12-03" + }, + { + "amount": "1.84", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 2, + "resource_code": "1008", + "resource_kind": "labor", + "resource_name": "철근공", + "resource_spec": "", + "variant": "보 통", + "work_item_code": "FP-12-03" + }, + { + "amount": "0.75", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "보 통", + "work_item_code": "FP-12-03" + }, + { + "amount": "1.51", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 3, + "resource_code": "1008", + "resource_kind": "labor", + "resource_name": "철근공", + "resource_spec": "", + "variant": "복 잡", + "work_item_code": "FP-12-03" + }, + { + "amount": "0.50", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "복 잡", + "work_item_code": "FP-12-03" + }, + { + "amount": "1.92", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 3, + "resource_code": "1008", + "resource_kind": "labor", + "resource_name": "철근공", + "resource_spec": "", + "variant": "복 잡", + "work_item_code": "FP-12-03" + }, + { + "amount": "0.80", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "복 잡", + "work_item_code": "FP-12-03" + }, + { + "amount": "1.69", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 4, + "resource_code": "1008", + "resource_kind": "labor", + "resource_name": "철근공", + "resource_spec": "", + "variant": "매우복잡", + "work_item_code": "FP-12-03" + }, + { + "amount": "0.60", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "매우복잡", + "work_item_code": "FP-12-03" + }, + { + "amount": "2.14", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 4, + "resource_code": "1008", + "resource_kind": "labor", + "resource_name": "철근공", + "resource_spec": "", + "variant": "매우복잡", + "work_item_code": "FP-12-03" + }, + { + "amount": "0.86", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0335", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "매우복잡", + "work_item_code": "FP-12-03" + }, { "amount": "0.22", "amount_unit": "", @@ -2792,12 +5242,12 @@ "sha256": "593653135d5a2871180e7a3921f9238629b275438ef47230412aa21e9bdd80c0" }, "stats": { - "rows": 198, + "rows": 373, "skipped_forms": { "coefficient": 19, "reference": 98, "undetermined": 76 }, - "unmatched": 307 + "unmatched": 324 } } \ No newline at end of file diff --git a/resources/data_cost_resource_axis/unmatched_2026-01-01.json b/resources/data_cost_resource_axis/unmatched_2026-01-01.json index 0a0c37a9..da7f6280 100644 --- a/resources/data_cost_resource_axis/unmatched_2026-01-01.json +++ b/resources/data_cost_resource_axis/unmatched_2026-01-01.json @@ -680,6 +680,60 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-13" }, + { + "cell": "600개 이하", + "pum_table_id": "F0201", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-01-01" + }, + { + "cell": "1,300개 이하", + "pum_table_id": "F0201", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-01-01" + }, + { + "cell": "2,000개 이하", + "pum_table_id": "F0201", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-01-01" + }, + { + "cell": "2,700개 이하", + "pum_table_id": "F0201", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-01-01" + }, + { + "cell": "3,400개 이하", + "pum_table_id": "F0201", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-01-01" + }, + { + "cell": "4,100개 이하", + "pum_table_id": "F0201", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-01-01" + }, + { + "cell": "300개 이하", + "pum_table_id": "F0202", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-01-02" + }, + { + "cell": "900개 이하", + "pum_table_id": "F0202", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-01-02" + }, + { + "cell": "1,500개 이하", + "pum_table_id": "F0202", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-01-02" + }, { "cell": "경비(기계경비)", "pum_table_id": "F0454", @@ -716,6 +770,78 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-05" }, + { + "cell": "소형헬기 (160ha당)", + "pum_table_id": "F0225", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "사전조사", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "헬기장정리", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "깃발설치", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "양수기설치", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "약제조제", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "대형헬기 (400ha당)", + "pum_table_id": "F0225", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "사전조사", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "헬기장정리", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "깃발설치", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "양수기설치", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, + { + "cell": "약제조제", + "pum_table_id": "F0225", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-01" + }, { "cell": "소형헬기 (160ha당)", "pum_table_id": "F0225", @@ -794,77 +920,41 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-06-01" }, - { - "cell": "무인헬기 (ha당)", - "pum_table_id": "F0228", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" - }, { "cell": "이착륙장 정리(1개소/4ha)", "pum_table_id": "F0228", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" - }, - { - "cell": "취수 및 약제조제", - "pum_table_id": "F0228", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" - }, - { - "cell": "약제살포", - "pum_table_id": "F0228", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" - }, - { - "cell": "주유 및 약제충전 기체정비", - "pum_table_id": "F0228", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" - }, - { - "cell": "비행준비", - "pum_table_id": "F0228", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" - }, - { - "cell": "멀티콥터 (ha당)", - "pum_table_id": "F0229", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-08-06-02" }, { "cell": "이착륙장 정리(1개소/4ha)", "pum_table_id": "F0229", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-08-06-02" }, { - "cell": "취수 및 약제조제", - "pum_table_id": "F0229", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" + "cell": "차량살포 (동력분무기)", + "pum_table_id": "F0230", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-03" }, { - "cell": "약제살포", - "pum_table_id": "F0229", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" + "cell": "사전조사", + "pum_table_id": "F0230", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-03" }, { - "cell": "기체 및 약제충전 기체정비", - "pum_table_id": "F0229", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" + "cell": "운전", + "pum_table_id": "F0230", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-03" }, { - "cell": "비행준비", - "pum_table_id": "F0229", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-02" + "cell": "물주입, 살포", + "pum_table_id": "F0230", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-06-03" }, { "cell": "차량살포 (동력분무기)", @@ -902,6 +992,42 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-09" }, + { + "cell": "1㎥", + "pum_table_id": "F0236", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-10" + }, + { + "cell": "벌목조재", + "pum_table_id": "F0236", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-10" + }, + { + "cell": "피복작업", + "pum_table_id": "F0236", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-10" + }, + { + "cell": "2㎥", + "pum_table_id": "F0236", + "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-10" + }, + { + "cell": "벌목조재", + "pum_table_id": "F0236", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-10" + }, + { + "cell": "피복작업", + "pum_table_id": "F0236", + "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-08-10" + }, { "cell": "벌목조재", "pum_table_id": "F0236", @@ -1358,30 +1484,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-10-10-02" }, - { - "cell": "간 단", - "pum_table_id": "F0335", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-03" - }, - { - "cell": "보 통", - "pum_table_id": "F0335", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-03" - }, - { - "cell": "복 잡", - "pum_table_id": "F0335", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-03" - }, - { - "cell": "매우복잡", - "pum_table_id": "F0335", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-03" - }, { "cell": "합 판", "pum_table_id": "F0336", From 06329e2101b4d3437465639b0149f4c7c4bea77c Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 01:05:11 +0900 Subject: [PATCH 04/12] =?UTF-8?q?fix(B09):=20=ED=91=9C=20=EC=9E=90?= =?UTF-8?q?=EB=A6=AC=20=EB=A7=9E=EC=B6=A4=EC=9D=84=20=EA=B0=9C=EC=88=98=20?= =?UTF-8?q?=EB=8C=80=EC=A1=B0=EB=A1=9C=20=EB=B0=94=EA=BF=94=20=EC=A1=B0?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=20=EC=98=A4=EB=8F=85=203=EC=A2=85=20?= =?UTF-8?q?=EC=B0=A8=EB=8B=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2단 표를 열자마자 과잉 매칭이 드러남 — 자원 축이 208 → 373 으로 뛰고 최대 단가가 2,436만원이 됨. 「한 칸 밀림」 가정이 표마다 안 맞았음 - **좌우 두 판 + 2단 머리** — 뿌리돌림 05-2 는 `근원직경 | 수량 | 근원직경 | 수량`이라 오른쪽 판의 **직경 100 이 「특별인부 100인」**으로 읽혔음. 첫 줄 머리가 되풀이되면 2단이라도 버림 - **라벨 칸 수가 표마다 다름** — 드론방제 08-6-2 는 라벨이 둘(`구 분 | 항 목`). 고정 보정 대신 **숫자 칸을 순서대로** 맞추고 개수가 다르면 그 행을 버림. 또 머리 줄 이름을 하나라도 못 풀면 표째 버림 — 넷 중 둘만 풀린 채 숫자 둘이 **엉뚱한 직종**에 붙고 있었음 - **차원이 하나 더 있는 표** — 뭉기기 13-12-1 은 행이 공정, 숫자 칸이 토질 3갈래인데 자원 열은 하나뿐이라 **첫 토질 값만 조용히** 서고 있었음. 숫자 칸이 자원 열보다 많으면 버림 결과: 자원 축 231줄(갈래 88) · 일위대가 133 · 최대 5,030,954.6 (품셈대로인 값). 철근 12-3 과 콘크리트 타설 12-1 3갈래는 그대로 섬 검증: pytest 167 통과(신규 2). 갈래 표 5건 손대조 — 전부 표와 일치 Co-Authored-By: Claude Opus 5 (1M context) --- .../B09_Estimation_ResourceAxis_Transposed.py | 120 +- .../resource_axis_2026-01-01.json | 2146 +---------------- .../unmatched_2026-01-01.json | 488 ++-- 3 files changed, 380 insertions(+), 2374 deletions(-) diff --git a/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py b/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py index d19e8956..6da1c57c 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py @@ -69,6 +69,16 @@ def second_row_columns(table: dict, catalog: ResourceCatalog): rows = table.get("raw_row") or [] if not rows: return [], 0 + + # ⚠ **첫 줄 머리가 되풀이되면 좌우 두 판짜리 표다** — 2단이라도 마찬가지다 + # (뿌리돌림 05-2: `근원직경(㎝) | 수 량 | 근원직경(㎝) | 수 량`). + # 이걸 안 가르면 오른쪽 판의 **직경 100 이 「특별인부 100인」**으로 읽혀 + # 단가가 2,436만원으로 선다(2026-09-08 실측). 공정 머리(가공·조립·계)는 + # 되풀이가 없으므로 이 검사에 안 걸린다. + groups = ["".join(str(h).split()) for h in (table.get("condition_note") or [])[1:]] + if len(groups) != len(set(groups)): + return [], 0 + header_row = [str(c).strip() for c in rows[0]] found = [] for position, cell in enumerate(header_row): @@ -84,16 +94,20 @@ def second_row_columns(table: dict, catalog: ResourceCatalog): if len(found) < 2: return [], 0 + # ⚠ **머리 줄의 이름을 하나라도 못 풀면 자리를 맞출 수 없다.** 드론방제 08-6-2 는 + # 「드론조종자·부조종자」가 카탈로그에 없어 넷 중 둘만 풀리는데, 그대로 두면 + # 숫자 두 개짜리 행이 **엉뚱한 직종 둘**에 붙는다. 통째로 버린다. + named = [cell for cell in header_row if cell] + if len(found) != len(named): + return [], 0 + # ⚠ 「계」 묶음은 뺀다 — 가공 + 조립을 이미 더한 값이라 같이 읽으면 두 번 센다. + # ⚠ **자리를 고정 보정으로 맞추지 않는다.** 라벨 칸이 하나인 표도 둘인 표도 있어 + # (드론방제 08-6-2 는 `구 분 | 항 목` 둘) 「한 칸 밀림」으로 단정하면 값이 어긋난다 + # — 실측에서 「특별인부 0.2352」 자리에 다른 직종 값이 붙었다. + # 대신 **자료 행의 숫자 칸을 순서대로** 맞추고, 개수가 다르면 그 행을 버린다. blocked = _sum_group_positions(table.get("condition_note") or [], len(found)) - # ⚠ 머리 줄에는 **갈래 칸이 없다** — 자료 행은 첫 칸이 갈래 이름이라 한 칸 밀려 있다. - # 이 보정을 빼면 갈래 이름 칸을 자원 값으로 읽는다. - kept = [ - (position + 1, entry) - for order, (position, entry) in enumerate(found) - if order not in blocked - ] - return kept, 1 + return [(order, entry, order in blocked) for order, (_, entry) in enumerate(found)], 1 def transposed_columns(table: dict[str, Any], catalog: ResourceCatalog) -> list[tuple[int, Any]]: @@ -115,6 +129,73 @@ def transposed_columns(table: dict[str, Any], catalog: ResourceCatalog) -> list[ return found +def _match_two_row_table( + node: dict, + table: dict, + catalog: ResourceCatalog, + result: AxisResult, + unit: str, + ordinal: list, + skip_rows: int, +) -> bool: + """2단 표 — **숫자 칸을 순서대로** 자원에 맞춘다. + + 개수가 다른 행은 **버린다.** 라벨 칸 수가 표마다 달라(하나 또는 둘) 자리를 + 단정할 수 없기 때문이다. 「계」 묶음에 든 자원은 맞춘 뒤 뺀다 — + 가공 + 조립을 이미 더한 값이라 같이 세면 두 번이다. + """ + work_item_code = node.get("work_item_code", "") + table_id = str(table.get("pum_table_id", "")) + form = str(table.get("pum_form", "")) + rows = (table.get("raw_row") or [])[skip_rows:] + labels = [str(row[0]).strip() for row in rows if row] + repeated = {label for label in labels if label and labels.count(label) > 1} + matched = False + + for index, row in enumerate(rows): + cells = [str(c).strip() for c in row] + if not cells: + continue + variant = cells[0] + if not variant or _normalize_label(variant) in _TOTAL_LABELS or variant in repeated: + continue + numbers = [parse_amount(c) for c in cells[1:]] + numbers = [value for value in numbers if value is not None] + if len(numbers) != len(ordinal): + result.unmatched.append( + UnmatchedRow( + work_item_code=work_item_code, + pum_table_id=table_id, + cell=variant, + reason=( + f"숫자 칸 {len(numbers)} 개가 자원 열 {len(ordinal)} 개와 안 맞아 " + "버렸습니다(자리 밀림 방지)." + ), + ) + ) + continue + for (order, entry, blocked), amount in zip(ordinal, numbers): + if blocked: + continue # 「계」 묶음 — 이미 더한 값이다 + result.rows.append( + ResourceRow( + work_item_code=work_item_code, + pum_table_id=table_id, + pum_form=form, + resource_kind=entry.kind, + resource_code=entry.code, + resource_name=entry.name, + resource_spec=entry.spec, + amount=amount, + amount_unit=unit, + raw_row_index=index + skip_rows, + variant=variant, + ) + ) + matched = True + return matched + + def match_transposed_table( node: dict[str, Any], table: dict[str, Any], @@ -130,9 +211,12 @@ def match_transposed_table( """ columns = transposed_columns(table, catalog) skip_rows = 0 + ordinal: list = [] if not columns: # 자원 이름이 **둘째 줄**에 오는 2단 표일 수 있다. - columns, skip_rows = second_row_columns(table, catalog) + ordinal, skip_rows = second_row_columns(table, catalog) + if ordinal: + return _match_two_row_table(node, table, catalog, result, unit, ordinal, skip_rows) if not columns: return False @@ -193,6 +277,24 @@ def match_transposed_table( # 첫 칸이 병합된 표에서 값이 한 칸씩 밀려 들어온다(2026-09-08 실측: 목재틀흙막이가 # 「건축목공 8.760」 자리에 등급 글자를 두어 단가가 503만원으로 섰다). # **밀린 행은 고쳐 읽지 않고 버린다** — 어느 칸이 어느 자원인지 단정할 수 없다. + # ⚠ **숫자 칸이 자원 열보다 많으면 차원이 하나 더 있는 표다.** + # 뭉기기 13-12-1 은 행이 공정, 숫자 칸이 토질 3갈래인데 열 머리엔 자원이 하나뿐이라 + # 그대로 두면 **첫 토질 값만 조용히 취한다**(보통토사 0.16 만 서고 나머지가 사라짐). + numeric_count = sum(1 for cell in cells[1:] if parse_amount(cell) is not None) + if numeric_count > len(columns): + result.unmatched.append( + UnmatchedRow( + work_item_code=work_item_code, + pum_table_id=table_id, + cell=variant, + reason=( + f"숫자 칸 {numeric_count} 개가 자원 열 {len(columns)} 개보다 많습니다 — " + "갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다." + ), + ) + ) + continue + readable = [ parse_amount(cells[position]) if position < len(cells) else None for position, _ in columns diff --git a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json index b48feb7b..58ad3db3 100644 --- a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json +++ b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json @@ -7,216 +7,6 @@ "work_item_axis_owner": "B08" }, "rows": [ - { - "amount": "0.14", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 1, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "16~20cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.28", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 1, - "resource_code": "1037", - "resource_kind": "labor", - "resource_name": "벌목부", - "resource_spec": "", - "variant": "16~20cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.28", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "16~20cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.18", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 2, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "22~30cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.36", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 2, - "resource_code": "1037", - "resource_kind": "labor", - "resource_name": "벌목부", - "resource_spec": "", - "variant": "22~30cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.36", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "22~30cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.27", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 3, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "32~40cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.53", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 3, - "resource_code": "1037", - "resource_kind": "labor", - "resource_name": "벌목부", - "resource_spec": "", - "variant": "32~40cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.53", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 3, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "32~40cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.35", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 4, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "42~50cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.70", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 4, - "resource_code": "1037", - "resource_kind": "labor", - "resource_name": "벌목부", - "resource_spec": "", - "variant": "42~50cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.70", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 4, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "42~50cm", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.38", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 5, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "52cm이상", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.75", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 5, - "resource_code": "1037", - "resource_kind": "labor", - "resource_name": "벌목부", - "resource_spec": "", - "variant": "52cm이상", - "work_item_code": "FP-04-03" - }, - { - "amount": "0.75", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0088", - "raw_row_index": 5, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "52cm이상", - "work_item_code": "FP-04-03" - }, { "amount": "0.42", "amount_unit": "", @@ -511,482 +301,6 @@ "variant": "4.6∼5.0", "work_item_code": "FP-05-01-02" }, - { - "amount": "0.096", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 1, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "4이하", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.024", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "4이하", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.120", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 2, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "5(4이하)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.036", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "5(4이하)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.204", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 3, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "6 ∼ 7(5 ∼ 6)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.048", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 3, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "6 ∼ 7(5 ∼ 6)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.324", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 4, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "8 ∼ 9(7 ∼ 8)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.084", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 4, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "8 ∼ 9(7 ∼ 8)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.180", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 5, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "10 ∼ 11(9)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.072", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 5, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "10 ∼ 11(9)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.312", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 6, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "12 ∼ 14(10 ∼ 12)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.096", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 6, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "12 ∼ 14(10 ∼ 12)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.480", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 7, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "15 ∼ 17(13 ∼ 14)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.120", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 7, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "15 ∼ 17(13 ∼ 14)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.612", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 8, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "18 ∼ 19(15 ∼ 16)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.132", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 8, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "18 ∼ 19(15 ∼ 16)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.804", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 9, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "20 ∼ 24(17 ∼ 20)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.156", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 9, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "20 ∼ 24(17 ∼ 20)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "1.080", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 10, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "25 ∼ 29(21 ∼ 24)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.192", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 10, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "25 ∼ 29(21 ∼ 24)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "1.344", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 11, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "30 ∼ 34(25 ∼ 28)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.228", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 11, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "30 ∼ 34(25 ∼ 28)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "1.620", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 12, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "35 ∼ 39(29 ∼ 32)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.264", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 12, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "35 ∼ 39(29 ∼ 32)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "1.884", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 13, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "40 ∼ 44(33 ∼ 37)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.300", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 13, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "40 ∼ 44(33 ∼ 37)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "2.160", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 14, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "45 ∼ 49(38 ∼ 41)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.336", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 14, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "45 ∼ 49(38 ∼ 41)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "2.424", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 15, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "50 ∼ 54(42 ∼ 45)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.372", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 15, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "50 ∼ 54(42 ∼ 45)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "2.700", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 16, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "55 ∼ 59(46 ∼ 49)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.408", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 16, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "55 ∼ 59(46 ∼ 49)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "2.856", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 17, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "60(50)", - "work_item_code": "FP-05-01-03" - }, - { - "amount": "0.432", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0094", - "raw_row_index": 17, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "60(50)", - "work_item_code": "FP-05-01-03" - }, { "amount": "3.0", "amount_unit": "", @@ -1015,622 +329,6 @@ "variant": "평떼", "work_item_code": "FP-05-01-04" }, - { - "amount": "0.03", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 1, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "3", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.01", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "3", - "work_item_code": "FP-05-02" - }, - { - "amount": "36", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 1, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "3", - "work_item_code": "FP-05-02" - }, - { - "amount": "1.86", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "3", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.06", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 2, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "5", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.01", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "5", - "work_item_code": "FP-05-02" - }, - { - "amount": "42", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 2, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "5", - "work_item_code": "FP-05-02" - }, - { - "amount": "2.04", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "5", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.11", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 3, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "7", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.01", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 3, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "7", - "work_item_code": "FP-05-02" - }, - { - "amount": "48", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 3, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "7", - "work_item_code": "FP-05-02" - }, - { - "amount": "2.32", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 3, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "7", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.17", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 4, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "9", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.02", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 4, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "9", - "work_item_code": "FP-05-02" - }, - { - "amount": "54", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 4, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "9", - "work_item_code": "FP-05-02" - }, - { - "amount": "2.79", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 4, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "9", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.23", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 5, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "11", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.03", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 5, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "11", - "work_item_code": "FP-05-02" - }, - { - "amount": "60", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 5, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "11", - "work_item_code": "FP-05-02" - }, - { - "amount": "3.07", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 5, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "11", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.30", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 6, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "13", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.03", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 6, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "13", - "work_item_code": "FP-05-02" - }, - { - "amount": "66", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 6, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "13", - "work_item_code": "FP-05-02" - }, - { - "amount": "4.18", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 6, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "13", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.37", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 7, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "15", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.05", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 7, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "15", - "work_item_code": "FP-05-02" - }, - { - "amount": "72", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 7, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "15", - "work_item_code": "FP-05-02" - }, - { - "amount": "4.65", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 7, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "15", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.56", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 8, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "18", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.06", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 8, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "18", - "work_item_code": "FP-05-02" - }, - { - "amount": "78", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 8, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "18", - "work_item_code": "FP-05-02" - }, - { - "amount": "5.21", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 8, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "18", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.65", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 9, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "21", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.08", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 9, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "21", - "work_item_code": "FP-05-02" - }, - { - "amount": "84", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 9, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "21", - "work_item_code": "FP-05-02" - }, - { - "amount": "6.51", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 9, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "21", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.74", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 10, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "24", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.09", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 10, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "24", - "work_item_code": "FP-05-02" - }, - { - "amount": "90", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 10, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "24", - "work_item_code": "FP-05-02" - }, - { - "amount": "7.06", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 10, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "24", - "work_item_code": "FP-05-02" - }, - { - "amount": "1.58", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 11, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "30", - "work_item_code": "FP-05-02" - }, - { - "amount": "0.19", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 11, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "30", - "work_item_code": "FP-05-02" - }, - { - "amount": "100", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 11, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "30", - "work_item_code": "FP-05-02" - }, - { - "amount": "7.90", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0098", - "raw_row_index": 11, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "30", - "work_item_code": "FP-05-02" - }, { "amount": "0.19", "amount_unit": "", @@ -1687,426 +385,6 @@ "variant": "", "work_item_code": "FP-05-03-03" }, - { - "amount": "0.10", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 1, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "4(5)이하", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.06", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "4(5)이하", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.17", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 2, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "5(6)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.08", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "5(6)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.26", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 3, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "6 ∼ 7(7 ∼ 8)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.13", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 3, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "6 ∼ 7(7 ∼ 8)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.19", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 4, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "8 ∼ 9(9 ∼ 11)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.11", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 4, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "8 ∼ 9(9 ∼ 11)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.24", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 5, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "10 ∼ 11(12 ∼ 13)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.13", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 5, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "10 ∼ 11(12 ∼ 13)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.31", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 6, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "12 ∼ 14(14 ∼ 17)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.15", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 6, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "12 ∼ 14(14 ∼ 17)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.39", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 7, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "15 ∼ 17(18 ∼ 20)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.17", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 7, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "15 ∼ 17(18 ∼ 20)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.47", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 8, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "18 ∼ 19(21 ∼ 23)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.20", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 8, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "18 ∼ 19(21 ∼ 23)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.56", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 9, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "20 ∼ 24(24 ∼ 29)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.22", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 9, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "20 ∼ 24(24 ∼ 29)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.69", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 10, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "25 ∼ 29(30 ∼ 35)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.26", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 10, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "25 ∼ 29(30 ∼ 35)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.83", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 11, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "30 ∼ 34(36 ∼ 41)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.30", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 11, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "30 ∼ 34(36 ∼ 41)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.97", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 12, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "35 ∼ 39(42 ∼ 47)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.35", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 12, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "35 ∼ 39(42 ∼ 47)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "1.11", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 13, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "40 ∼ 44(48 ∼ 53)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.38", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 13, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "40 ∼ 44(48 ∼ 53)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "1.24", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 14, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "45 ∼ 49(54 ∼ 59)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.43", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 14, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "45 ∼ 49(54 ∼ 59)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "1.33", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 15, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "50(60)", - "work_item_code": "FP-05-03-05" - }, - { - "amount": "0.45", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0106", - "raw_row_index": 15, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "50(60)", - "work_item_code": "FP-05-03-05" - }, { "amount": "0.47", "amount_unit": "", @@ -2163,62 +441,6 @@ "variant": "띠떼심기", "work_item_code": "FP-05-13" }, - { - "amount": "2.4", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0121", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "절 취", - "work_item_code": "FP-05-16-01" - }, - { - "amount": "0.34", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0121", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "수평잡기 및 단정리", - "work_item_code": "FP-05-16-01" - }, - { - "amount": "0.36", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0121", - "raw_row_index": 3, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "잡석 및 뿌리 정리", - "work_item_code": "FP-05-16-01" - }, - { - "amount": "1.17", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0121", - "raw_row_index": 4, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "절·성토면 고르기", - "work_item_code": "FP-05-16-01" - }, { "amount": "0.34", "amount_unit": "", @@ -2598,172 +820,88 @@ "work_item_code": "FP-06-07-02" }, { - "amount": "0.2352", - "amount_unit": "", + "amount": "0.8", + "amount_unit": "ha", "group_ratio_pct": null, "pum_form": "requirement", - "pum_table_id": "F0228", + "pum_table_id": "F0225", "raw_row_index": 1, "resource_code": "1003", "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", - "variant": "무인헬기 (ha당)", - "work_item_code": "FP-08-06-02" + "variant": "소형헬기 (160ha당)", + "work_item_code": "FP-08-06-01" }, { - "amount": "0.1193", - "amount_unit": "", + "amount": "8.2", + "amount_unit": "ha", "group_ratio_pct": null, "pum_form": "requirement", - "pum_table_id": "F0228", + "pum_table_id": "F0225", "raw_row_index": 1, "resource_code": "1002", "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", - "variant": "무인헬기 (ha당)", - "work_item_code": "FP-08-06-02" + "variant": "소형헬기 (160ha당)", + "work_item_code": "FP-08-06-01" }, { - "amount": "0.0067", - "amount_unit": "", + "amount": "2.1", + "amount_unit": "ha", "group_ratio_pct": null, "pum_form": "requirement", - "pum_table_id": "F0228", - "raw_row_index": 3, + "pum_table_id": "F0225", + "raw_row_index": 7, "resource_code": "1003", "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", - "variant": "취수 및 약제조제", - "work_item_code": "FP-08-06-02" + "variant": "대형헬기 (400ha당)", + "work_item_code": "FP-08-06-01" }, { - "amount": "0.0067", - "amount_unit": "", + "amount": "13.4", + "amount_unit": "ha", "group_ratio_pct": null, "pum_form": "requirement", - "pum_table_id": "F0228", - "raw_row_index": 3, + "pum_table_id": "F0225", + "raw_row_index": 7, "resource_code": "1002", "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", - "variant": "취수 및 약제조제", - "work_item_code": "FP-08-06-02" + "variant": "대형헬기 (400ha당)", + "work_item_code": "FP-08-06-01" }, { - "amount": "0.1126", + "amount": "1.05", "amount_unit": "", "group_ratio_pct": null, "pum_form": "requirement", - "pum_table_id": "F0228", - "raw_row_index": 5, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "주유 및 약제충전 기체정비", - "work_item_code": "FP-08-06-02" - }, - { - "amount": "0.1126", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0228", - "raw_row_index": 5, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "주유 및 약제충전 기체정비", - "work_item_code": "FP-08-06-02" - }, - { - "amount": "0.3148", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0229", + "pum_table_id": "F0230", "raw_row_index": 1, "resource_code": "1003", "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", - "variant": "멀티콥터 (ha당)", - "work_item_code": "FP-08-06-02" + "variant": "차량살포 (동력분무기)", + "work_item_code": "FP-08-06-03" }, { - "amount": "0.2099", + "amount": "2.00", "amount_unit": "", "group_ratio_pct": null, "pum_form": "requirement", - "pum_table_id": "F0229", + "pum_table_id": "F0230", "raw_row_index": 1, "resource_code": "1002", "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", - "variant": "멀티콥터 (ha당)", - "work_item_code": "FP-08-06-02" - }, - { - "amount": "0.0067", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0229", - "raw_row_index": 3, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "취수 및 약제조제", - "work_item_code": "FP-08-06-02" - }, - { - "amount": "0.0067", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0229", - "raw_row_index": 3, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "취수 및 약제조제", - "work_item_code": "FP-08-06-02" - }, - { - "amount": "0.2032", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0229", - "raw_row_index": 5, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "기체 및 약제충전 기체정비", - "work_item_code": "FP-08-06-02" - }, - { - "amount": "0.2032", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0229", - "raw_row_index": 5, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "기체 및 약제충전 기체정비", - "work_item_code": "FP-08-06-02" + "variant": "차량살포 (동력분무기)", + "work_item_code": "FP-08-06-03" }, { "amount": "0.75", @@ -2772,11 +910,53 @@ "pum_form": "requirement", "pum_table_id": "F0236", "raw_row_index": 1, - "resource_code": "7930-0001", - "resource_kind": "machine", - "resource_name": "", - "resource_spec": "0.75", - "variant": "", + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "1㎥", + "work_item_code": "FP-08-10" + }, + { + "amount": "0.23", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0236", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "1㎥", + "work_item_code": "FP-08-10" + }, + { + "amount": "1.50", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0236", + "raw_row_index": 4, + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "2㎥", + "work_item_code": "FP-08-10" + }, + { + "amount": "0.46", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0236", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "2㎥", "work_item_code": "FP-08-10" }, { @@ -3535,34 +1715,6 @@ "variant": "", "work_item_code": "FP-10-07-04" }, - { - "amount": "1.0", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0313", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "콘크리트", - "work_item_code": "FP-10-08-01" - }, - { - "amount": "3.0", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0313", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "제 자재", - "work_item_code": "FP-10-08-01" - }, { "amount": "2.0", "amount_unit": "", @@ -3843,90 +1995,6 @@ "variant": "소형구조물", "work_item_code": "FP-12-01-03" }, - { - "amount": "0.9", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0361", - "raw_row_index": 1, - "resource_code": "1013", - "resource_kind": "labor", - "resource_name": "콘크리트공", - "resource_spec": "", - "variant": "1:2:4", - "work_item_code": "FP-12-02" - }, - { - "amount": "1.0", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0361", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "1:2:4", - "work_item_code": "FP-12-02" - }, - { - "amount": "0.9", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0361", - "raw_row_index": 2, - "resource_code": "1013", - "resource_kind": "labor", - "resource_name": "콘크리트공", - "resource_spec": "", - "variant": "1:3:6", - "work_item_code": "FP-12-02" - }, - { - "amount": "0.9", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0361", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "1:3:6", - "work_item_code": "FP-12-02" - }, - { - "amount": "0.9", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0361", - "raw_row_index": 3, - "resource_code": "1013", - "resource_kind": "labor", - "resource_name": "콘크리트공", - "resource_spec": "", - "variant": "1:4:8", - "work_item_code": "FP-12-02" - }, - { - "amount": "0.7", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0361", - "raw_row_index": 3, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "1:4:8", - "work_item_code": "FP-12-02" - }, { "amount": "1.07", "amount_unit": "", @@ -4669,34 +2737,6 @@ "variant": "자갈 기초다짐 지름 1~3㎝", "work_item_code": "FP-13-03-01" }, - { - "amount": "0.019", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0403", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "기초다짐 뒷채움", - "work_item_code": "FP-13-03-02" - }, - { - "amount": "0.087", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0403", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "75이상", - "work_item_code": "FP-13-03-02" - }, { "amount": "0.05", "amount_unit": "", @@ -4977,34 +3017,6 @@ "variant": "", "work_item_code": "FP-13-11-02" }, - { - "amount": "0.16", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0437", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "절 취(㎥)", - "work_item_code": "FP-13-12-01" - }, - { - "amount": "0.05", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0437", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "투 입(㎥)", - "work_item_code": "FP-13-12-01" - }, { "amount": "0.0141", "amount_unit": "", @@ -5242,12 +3254,12 @@ "sha256": "593653135d5a2871180e7a3921f9238629b275438ef47230412aa21e9bdd80c0" }, "stats": { - "rows": 373, + "rows": 231, "skipped_forms": { "coefficient": 19, "reference": 98, "undetermined": 76 }, - "unmatched": 324 + "unmatched": 306 } } \ No newline at end of file diff --git a/resources/data_cost_resource_axis/unmatched_2026-01-01.json b/resources/data_cost_resource_axis/unmatched_2026-01-01.json index da7f6280..caf29413 100644 --- a/resources/data_cost_resource_axis/unmatched_2026-01-01.json +++ b/resources/data_cost_resource_axis/unmatched_2026-01-01.json @@ -242,6 +242,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-04-02-02" }, + { + "cell": "비 고", + "pum_table_id": "F0093", + "reason": "숫자 칸 0 개가 자원 열 2 개와 안 맞아 버렸습니다(자리 밀림 방지).", + "work_item_code": "FP-05-01-02" + }, { "cell": "지게", "pum_table_id": "F0097", @@ -338,6 +344,54 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-08" }, + { + "cell": "절 취", + "pum_table_id": "F0121", + "reason": "숫자 칸 3 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "수평잡기 및 단정리", + "pum_table_id": "F0121", + "reason": "숫자 칸 3 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "잡석 및 뿌리 정리", + "pum_table_id": "F0121", + "reason": "숫자 칸 3 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "절·성토면 고르기", + "pum_table_id": "F0121", + "reason": "숫자 칸 3 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "절 취", + "pum_table_id": "F0121", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "수평잡기 및 단정리", + "pum_table_id": "F0121", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "잡석 및 뿌리 정리", + "pum_table_id": "F0121", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "절·성토면 고르기", + "pum_table_id": "F0121", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-16-01" + }, { "cell": "표토절취", "pum_table_id": "F0126", @@ -680,60 +734,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-13" }, - { - "cell": "600개 이하", - "pum_table_id": "F0201", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-01-01" - }, - { - "cell": "1,300개 이하", - "pum_table_id": "F0201", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-01-01" - }, - { - "cell": "2,000개 이하", - "pum_table_id": "F0201", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-01-01" - }, - { - "cell": "2,700개 이하", - "pum_table_id": "F0201", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-01-01" - }, - { - "cell": "3,400개 이하", - "pum_table_id": "F0201", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-01-01" - }, - { - "cell": "4,100개 이하", - "pum_table_id": "F0201", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-01-01" - }, - { - "cell": "300개 이하", - "pum_table_id": "F0202", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-01-02" - }, - { - "cell": "900개 이하", - "pum_table_id": "F0202", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-01-02" - }, - { - "cell": "1,500개 이하", - "pum_table_id": "F0202", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-01-02" - }, { "cell": "경비(기계경비)", "pum_table_id": "F0454", @@ -770,214 +770,100 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-05" }, - { - "cell": "소형헬기 (160ha당)", - "pum_table_id": "F0225", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "사전조사", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "헬기장정리", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "깃발설치", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "양수기설치", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "약제조제", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "대형헬기 (400ha당)", - "pum_table_id": "F0225", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "사전조사", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "헬기장정리", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "깃발설치", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "양수기설치", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "약제조제", - "pum_table_id": "F0225", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "소형헬기 (160ha당)", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "사전조사", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "헬기장정리", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "깃발설치", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "양수기설치", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "약제조제", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "대형헬기 (400ha당)", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "사전조사", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "헬기장정리", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "깃발설치", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "양수기설치", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, - { - "cell": "약제조제", - "pum_table_id": "F0225", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-01" - }, { "cell": "유인헬기", "pum_table_id": "F0226", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-06-01" }, + { + "cell": "무인헬기 (ha당)", + "pum_table_id": "F0228", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" + }, { "cell": "이착륙장 정리(1개소/4ha)", "pum_table_id": "F0228", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" + }, + { + "cell": "취수 및 약제조제", + "pum_table_id": "F0228", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" + }, + { + "cell": "약제살포", + "pum_table_id": "F0228", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" + }, + { + "cell": "주유 및 약제충전 기체정비", + "pum_table_id": "F0228", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" + }, + { + "cell": "비행준비", + "pum_table_id": "F0228", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" + }, + { + "cell": "멀티콥터 (ha당)", + "pum_table_id": "F0229", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-06-02" }, { "cell": "이착륙장 정리(1개소/4ha)", "pum_table_id": "F0229", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-06-02" }, { - "cell": "차량살포 (동력분무기)", - "pum_table_id": "F0230", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-03" + "cell": "취수 및 약제조제", + "pum_table_id": "F0229", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" + }, + { + "cell": "약제살포", + "pum_table_id": "F0229", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" + }, + { + "cell": "기체 및 약제충전 기체정비", + "pum_table_id": "F0229", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" + }, + { + "cell": "비행준비", + "pum_table_id": "F0229", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-06-02" }, { "cell": "사전조사", "pum_table_id": "F0230", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "숫자 칸 1 개가 자원 열 2 개와 안 맞아 버렸습니다(자리 밀림 방지).", "work_item_code": "FP-08-06-03" }, { "cell": "운전", "pum_table_id": "F0230", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "숫자 칸 1 개가 자원 열 2 개와 안 맞아 버렸습니다(자리 밀림 방지).", "work_item_code": "FP-08-06-03" }, { "cell": "물주입, 살포", "pum_table_id": "F0230", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-06-03" - }, - { - "cell": "차량살포 (동력분무기)", - "pum_table_id": "F0230", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-03" - }, - { - "cell": "사전조사", - "pum_table_id": "F0230", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-03" - }, - { - "cell": "운전", - "pum_table_id": "F0230", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-06-03" - }, - { - "cell": "물주입, 살포", - "pum_table_id": "F0230", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "숫자 칸 1 개가 자원 열 2 개와 안 맞아 버렸습니다(자리 밀림 방지).", "work_item_code": "FP-08-06-03" }, { @@ -992,66 +878,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-09" }, - { - "cell": "1㎥", - "pum_table_id": "F0236", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-10" - }, - { - "cell": "벌목조재", - "pum_table_id": "F0236", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-10" - }, - { - "cell": "피복작업", - "pum_table_id": "F0236", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-10" - }, - { - "cell": "2㎥", - "pum_table_id": "F0236", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-10" - }, - { - "cell": "벌목조재", - "pum_table_id": "F0236", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-10" - }, - { - "cell": "피복작업", - "pum_table_id": "F0236", - "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", - "work_item_code": "FP-08-10" - }, - { - "cell": "벌목조재", - "pum_table_id": "F0236", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-10" - }, - { - "cell": "피복작업", - "pum_table_id": "F0236", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-10" - }, - { - "cell": "벌목조재", - "pum_table_id": "F0236", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-10" - }, - { - "cell": "피복작업", - "pum_table_id": "F0236", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-08-10" - }, { "cell": "대형브레이커+ 유압식백호우 (무한궤도,0.7㎥)", "pum_table_id": "F0241", @@ -1460,6 +1286,18 @@ "reason": "열 머리가 되풀이되는 두 판 짜리 표 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-10-06-01" }, + { + "cell": "콘크리트", + "pum_table_id": "F0313", + "reason": "숫자 칸 2 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-10-08-01" + }, + { + "cell": "제 자재", + "pum_table_id": "F0313", + "reason": "숫자 칸 2 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-10-08-01" + }, { "cell": "〃", "pum_table_id": "F0313", @@ -1472,6 +1310,18 @@ "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", "work_item_code": "FP-10-08-01" }, + { + "cell": "콘크리트", + "pum_table_id": "F0313", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-10-08-01" + }, + { + "cell": "제 자재", + "pum_table_id": "F0313", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-10-08-01" + }, { "cell": "버켓 손료", "pum_table_id": "F0317", @@ -1778,6 +1628,24 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-03" }, + { + "cell": "기초다짐 뒷채움", + "pum_table_id": "F0403", + "reason": "숫자 칸 4 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-03-02" + }, + { + "cell": "75이상", + "pum_table_id": "F0403", + "reason": "숫자 칸 4 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-03-02" + }, + { + "cell": "기초다짐 뒷채움", + "pum_table_id": "F0403", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-03-02" + }, { "cell": "굴 삭 기 (무한궤도)", "pum_table_id": "F0419", @@ -1793,43 +1661,43 @@ { "cell": "8 9", "pum_table_id": "F0430", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "숫자 칸 8 개가 자원 열 3 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-10-02" }, { "cell": "12", "pum_table_id": "F0430", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "숫자 칸 8 개가 자원 열 3 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-10-02" }, { "cell": "15", "pum_table_id": "F0430", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "숫자 칸 8 개가 자원 열 3 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-10-02" }, { "cell": "18", "pum_table_id": "F0430", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "숫자 칸 8 개가 자원 열 3 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-10-02" }, { "cell": "21", "pum_table_id": "F0430", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "숫자 칸 8 개가 자원 열 3 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-10-02" }, { "cell": "24", "pum_table_id": "F0430", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "숫자 칸 8 개가 자원 열 3 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-10-02" }, { "cell": "27", "pum_table_id": "F0430", - "reason": "자원 열의 값이 한 칸 밀린 행 — 자리를 단정할 수 없어 버렸습니다.", + "reason": "숫자 칸 8 개가 자원 열 3 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-10-02" }, { @@ -1904,6 +1772,30 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-11-02" }, + { + "cell": "절 취(㎥)", + "pum_table_id": "F0437", + "reason": "숫자 칸 3 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-12-01" + }, + { + "cell": "투 입(㎥)", + "pum_table_id": "F0437", + "reason": "숫자 칸 3 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-13-12-01" + }, + { + "cell": "절 취(㎥)", + "pum_table_id": "F0437", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-12-01" + }, + { + "cell": "투 입(㎥)", + "pum_table_id": "F0437", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-12-01" + }, { "cell": "보통구조", "pum_table_id": "F0440", From d78f59ba5c9631ffb567973c54a78ea5b8576445 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 01:11:32 +0900 Subject: [PATCH 05/12] =?UTF-8?q?feat(B09):=20=EB=B0=91=EC=88=98=20?= =?UTF-8?q?=EB=B0=98=EC=98=81=20=EC=9E=AC=EC=83=9D=EC=84=B1=20+=20?= =?UTF-8?q?=EB=B0=91=EC=88=98=20=EB=AF=B8=ED=99=95=EB=B3=B4=20=EC=A4=84=20?= =?UTF-8?q?=EC=B0=A8=EB=8B=A8=20+=20=E3=89=A1=20=EB=AC=B4=EB=8C=80=20?= =?UTF-8?q?=EA=B0=80=EB=93=9C=20=EA=B0=80=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit B08 이 밑수(「10㎡당」 같은 기준 수량)를 본문에서 찾아 181표를 채움. 그 위에서 자원 축·일위대가를 다시 냄 - **떼채취 평떼 1,032,408 → 10,324원/㎡** — 100 배 부풀어 있던 것이 교정됨. 「100매당일 것」이라던 의심이 실제로 `100㎡당`이었음 - 기준 미상 122 → 40, 100만원 초과 10 → 2 건. 중앙값 73,989 → 48,961 - 파생물 지문이 새 마스터(`fe454c56…`)로 따라 바뀜 — 낡음 감지 장치가 처음으로 실제 갱신에서 동작 확인됨 밑수 미확보 표(`basis_missing` 144건 → 26 공종) - 1 단위당으로 단정하면 곱셈이 10배·100배 틀리므로 **곱하지 않음**. 내역서에 「밑수를 못 찾은 표입니다 — 곱하지 않았습니다. 원문 4-4. 가지정리」로 뜸 ㉡ 무대 가드 가동 (B08 이 운반을 실물로 내기 시작) - 인계에서 `haul_distance_m`·`haul_equipment` 를 받아 조판에서 실제로 호출 - 무대(20 m 이내)는 줄로 서되 금액 없음. 운반토량 합이 총 절취량을 넘는지도 검사 - 짝 시험 — 무대에 단가가 붙으면 멈추고, **암 운반·덤프 줄은 안 걸림** 검증: pytest 170 통과(신규 3) Co-Authored-By: Claude Opus 5 (1M context) --- .../B09_Estimation_BillOfQuantities.py | 60 ++- B09_Estimation/B09_Estimation_UnitPrice.py | 36 ++ .../resource_axis_2026-01-01.json | 396 +++++++++--------- 3 files changed, 293 insertions(+), 199 deletions(-) diff --git a/B09_Estimation/B09_Estimation_BillOfQuantities.py b/B09_Estimation/B09_Estimation_BillOfQuantities.py index 82725380..5d18cacf 100644 --- a/B09_Estimation/B09_Estimation_BillOfQuantities.py +++ b/B09_Estimation/B09_Estimation_BillOfQuantities.py @@ -23,7 +23,11 @@ from dataclasses import dataclass, field from decimal import Decimal from typing import Any -from B09_Estimation.B09_Estimation_Guards import check_excluded_rows_not_priced +from B09_Estimation.B09_Estimation_Guards import ( + check_excluded_rows_not_priced, + check_free_haul_not_priced, + check_haul_volume_within_cut, +) from B09_Estimation.B09_Estimation_ResourceAxis import load_work_item_master from B09_Estimation.B09_Estimation_Rounding import OutputPlace, round_at from B09_Estimation.B09_Estimation_UnitPrice import UnitPriceBuild, cached_build @@ -49,6 +53,9 @@ class HandoffWorkItem: unit: str quantity: Decimal in_bill: bool + #: 운반 줄에만 있다 — 거리(m)와 수단. 무대(20 m 이내)는 `free_haul` 로 온다. + haul_distance_m: Decimal | None = None + haul_equipment: str | None = None in_bill_reason: str = "" origin: str = "" ground_class: str = "" @@ -181,6 +188,8 @@ def parse_handoff(payload: dict[str, Any]) -> tuple[list[HandoffWorkItem], list[ in_bill_reason=row.get("in_bill_reason") or "", origin=row.get("origin") or "", ground_class=row.get("ground_class") or "", + haul_distance_m=_decimal(row.get("haul_distance_m"), None), + haul_equipment=row.get("haul_equipment"), # ⚠ 있으면 **적기만** 한다 — 곱하기는 B08 한 곳에서만(2026-09-08 이견 ①). application_ratio_pct=_decimal(row.get("application_ratio_pct"), None), ) @@ -327,6 +336,31 @@ def build_bill( # ── 4) 검사 — `in_bill=false` 줄에 금액이 붙지 않았는가 ────────────────────── check_excluded_rows_not_priced(rows=[r.as_dict() for r in result.excluded]) + # ㉡ **무대(20 m 이내)에 단가가 붙지 않았는가** (PLAN 8-7 ㉡). + # 줄 자체는 실무 서식대로 남기되 **금액을 매기지 않는다** — 품에 이미 들어 있다. + # 2026-09-08: B08 이 운반을 실물로 내기 시작해 이 검사가 처음으로 실제로 돈다. + haul_rows = [ + { + "equipment": item.haul_equipment, + "unit_price_krw": _haul_price_of(item, result), + } + for item in work_items + if item.haul_equipment + ] + check_free_haul_not_priced(haul_rows=haul_rows) + + # ㉡ 보조 — 운반토량 합이 총 절취량을 넘지 않는가(같은 흙을 두 번 세지 않았는가). + cut_total = sum( + (item.quantity for item in work_items if "깎기" in item.name or "절취" in item.name), + _ZERO, + ) + haul_total = sum((item.quantity for item in work_items if item.haul_equipment), _ZERO) + if cut_total > 0 and haul_total > 0: + check_haul_volume_within_cut( + haul_volume_total_m3=haul_total, + total_cut_volume_m3=cut_total, + ) + if any(m.surcharge_pct is None for m in materials): result.notes.append( "자재 할증률이 아직 없습니다 — 할증 전 값으로 섰습니다. " @@ -335,6 +369,14 @@ def build_bill( return result +def _haul_price_of(item: HandoffWorkItem, result: BillResult) -> Decimal: + """그 운반 줄에 실제로 붙은 단가. 안 붙었으면 0 — ㉡ 검사에 넘길 값이다.""" + for row in result.rows: + if row.name == item.name and row.unit_price_krw is not None: + return row.unit_price_krw + return _ZERO + + def _excluded_row(item: HandoffWorkItem) -> BillRow: """검산용 줄(`in_bill=false`). **수량만 보이고 단가·금액을 안 붙인다.**""" return BillRow( @@ -413,6 +455,22 @@ def _leaf_row( ) return row + missing_basis = unit_prices.basis_missing.get(node.code) + if missing_basis: + # ⚠ 밑수를 모르는 표다 — 「10㎡당」인지 「1㎡당」인지 모른 채 곱하면 10배·100배 + # 틀린다(떼채취가 실제로 100배였다). **곱하지 않고 드러낸다.** + row.note = f"밑수(기준 수량)를 못 찾은 표입니다 — 곱하지 않았습니다. 원문 {missing_basis}" + result.missing.append( + { + "name": row.name, + "code": node.code, + "unit": row.unit, + "quantity": str(item.quantity), + "reason": "밑수 미확보 — 곱하면 10배·100배 틀림", + } + ) + return row + covered = unit_prices.partial_ratio.get(node.code) if covered is not None: # ⚠ **일부 몫만 선 단가는 안 붙인다.** 「인력(10%)·장비(90%)」 표에서 인력만 diff --git a/B09_Estimation/B09_Estimation_UnitPrice.py b/B09_Estimation/B09_Estimation_UnitPrice.py index 670b79e5..a487376e 100644 --- a/B09_Estimation/B09_Estimation_UnitPrice.py +++ b/B09_Estimation/B09_Estimation_UnitPrice.py @@ -83,6 +83,9 @@ class UnitPriceBuild: cycle_factors: dict[str, CycleFactors] = field(default_factory=dict) #: 공종 하나가 낳은 규격 갈래들 — 「무근구조물」·「철근구조물」·「소형구조물」. variants: dict[str, list[str]] = field(default_factory=dict) + #: 밑수(「10㎡당」)를 못 찾은 표를 쓰는 공종 — **곱하면 안 되는 줄**이다. + #: 1 단위당으로 단정하면 곱셈이 10배·100배 틀린다(B08 `basis_missing` 목록). + basis_missing: dict[str, str] = field(default_factory=dict) #: 계수를 못 세운 표 — **무엇이 없는지**를 들고 있는다. factor_gaps: dict[str, FactorGap] = field(default_factory=dict) @@ -196,6 +199,31 @@ def _add_machine_layers(book: PriceBook, machine_codes: set[str]) -> list[str]: return incomplete +@lru_cache(maxsize=1) +def load_basis_missing( + file_name: str = "basis_missing_2026-01-01.json", +) -> dict[str, str]: + """B08 이 낸 **밑수 못 찾은 표** 목록 — `{표 번호: 절 이름}`. + + 「10㎡당」 같은 기준을 원문에서 못 찾은 표다. 1 단위당으로 단정하면 곱셈이 + 10배·100배 틀리므로(떼채취가 실제로 100배였다) 그 표를 쓰는 공종은 + **금액을 안 만든다**. + """ + import json + import os + + root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + path = os.path.join(root, "resources", "data_work_item_master", file_name) + if not os.path.exists(path): + return {} + with open(path, encoding="utf-8") as handle: + payload = json.load(handle) + return { + str(item.get("pum_table_id")): str(item.get("section", "")) + for item in payload.get("items", []) + } + + def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: """자원 축을 일위대가(`B`)로 조립한다. @@ -209,6 +237,7 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: names = {w["work_item_code"]: w.get("name", "") for w in master.get("work_items", [])} build = UnitPriceBuild() + missing_basis = load_basis_missing() wages = load_operator_wages() _add_labor_titles(build.book, wages) @@ -237,6 +266,13 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: build.skipped.append(work_item_code) continue + # ⚠ 밑수를 못 찾은 표를 쓰면 **곱하면 안 되는 줄**로 표시한다. + for row in rows: + section = missing_basis.get(str(row.pum_table_id)) + if section: + build.basis_missing[work_item_code] = section + break + unit = next((r.amount_unit for r in rows if r.amount_unit), "") base_name = names.get(work_item_code) or work_item_code build.book.add_title( diff --git a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json index 58ad3db3..1b2d76f7 100644 --- a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json +++ b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json @@ -302,8 +302,8 @@ "work_item_code": "FP-05-01-02" }, { - "amount": "3.0", - "amount_unit": "", + "amount": "0.03", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0096", @@ -316,8 +316,8 @@ "work_item_code": "FP-05-01-04" }, { - "amount": "6.0", - "amount_unit": "", + "amount": "0.06", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0096", @@ -485,7 +485,7 @@ }, { "amount": "0.0099", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0130", @@ -499,7 +499,7 @@ }, { "amount": "0.0231", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0130", @@ -513,7 +513,7 @@ }, { "amount": "0.011", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0131", @@ -555,7 +555,7 @@ }, { "amount": "0.0084", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0133", @@ -569,7 +569,7 @@ }, { "amount": "0.0196", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0133", @@ -583,7 +583,7 @@ }, { "amount": "0.0033", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0134", @@ -597,7 +597,7 @@ }, { "amount": "0.0007", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0135", @@ -611,7 +611,7 @@ }, { "amount": "0.0004", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0135", @@ -625,7 +625,7 @@ }, { "amount": "0.0007", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0136", @@ -639,7 +639,7 @@ }, { "amount": "0.0004", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0136", @@ -653,7 +653,7 @@ }, { "amount": "0.002", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0139", @@ -667,7 +667,7 @@ }, { "amount": "0.0007", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0139", @@ -877,7 +877,7 @@ }, { "amount": "1.05", - "amount_unit": "", + "amount_unit": "인", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0230", @@ -891,7 +891,7 @@ }, { "amount": "2.00", - "amount_unit": "", + "amount_unit": "인", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0230", @@ -961,7 +961,7 @@ }, { "amount": "0.16", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0239", @@ -975,7 +975,7 @@ }, { "amount": "0.041", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0243", @@ -989,7 +989,7 @@ }, { "amount": "0.103", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0243", @@ -1031,7 +1031,7 @@ }, { "amount": "0.23", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0258", @@ -1045,7 +1045,7 @@ }, { "amount": "1.6", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0259", @@ -1059,7 +1059,7 @@ }, { "amount": "0.8", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0259", @@ -1073,7 +1073,7 @@ }, { "amount": "2.8", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0260", @@ -1087,7 +1087,7 @@ }, { "amount": "1.266", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0260", @@ -1101,7 +1101,7 @@ }, { "amount": "0.23", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0261", @@ -1115,7 +1115,7 @@ }, { "amount": "0.31", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0262", @@ -1129,7 +1129,7 @@ }, { "amount": "0.39", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0263", @@ -1143,7 +1143,7 @@ }, { "amount": "0.345", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0264", @@ -1157,7 +1157,7 @@ }, { "amount": "0.465", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0265", @@ -1171,7 +1171,7 @@ }, { "amount": "0.585", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0266", @@ -1185,7 +1185,7 @@ }, { "amount": "1.6", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0267", @@ -1199,7 +1199,7 @@ }, { "amount": "0.8", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0267", @@ -1213,7 +1213,7 @@ }, { "amount": "1.8", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0268", @@ -1227,7 +1227,7 @@ }, { "amount": "0.9", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0268", @@ -1240,8 +1240,8 @@ "work_item_code": "FP-09-13-08" }, { - "amount": "2.0", - "amount_unit": "", + "amount": "2", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0269", @@ -1254,8 +1254,8 @@ "work_item_code": "FP-09-13-09" }, { - "amount": "1.0", - "amount_unit": "", + "amount": "1", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0269", @@ -1269,7 +1269,7 @@ }, { "amount": "1.2", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0270", @@ -1283,7 +1283,7 @@ }, { "amount": "1.35", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0271", @@ -1297,7 +1297,7 @@ }, { "amount": "1.5", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0272", @@ -1311,7 +1311,7 @@ }, { "amount": "2.8", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0273", @@ -1325,7 +1325,7 @@ }, { "amount": "1.266", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0273", @@ -1339,7 +1339,7 @@ }, { "amount": "3.5", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0274", @@ -1353,7 +1353,7 @@ }, { "amount": "1.566", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0274", @@ -1367,7 +1367,7 @@ }, { "amount": "4.2", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0275", @@ -1381,7 +1381,7 @@ }, { "amount": "1.866", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0275", @@ -1394,8 +1394,8 @@ "work_item_code": "FP-09-13-15" }, { - "amount": "4.20", - "amount_unit": "", + "amount": "4.2", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0276", @@ -1409,7 +1409,7 @@ }, { "amount": "1.899", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0276", @@ -1423,7 +1423,7 @@ }, { "amount": "5.25", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0277", @@ -1437,7 +1437,7 @@ }, { "amount": "2.349", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0277", @@ -1451,7 +1451,7 @@ }, { "amount": "6.3", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0278", @@ -1465,7 +1465,7 @@ }, { "amount": "2.799", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0278", @@ -1478,8 +1478,8 @@ "work_item_code": "FP-09-13-18" }, { - "amount": "0.10", - "amount_unit": "", + "amount": "0.1", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0279", @@ -1493,7 +1493,7 @@ }, { "amount": "0.019", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0290", @@ -1507,7 +1507,7 @@ }, { "amount": "0.0328", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0291", @@ -1577,7 +1577,7 @@ }, { "amount": "0.5", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0303", @@ -1590,8 +1590,8 @@ "work_item_code": "FP-10-06-02" }, { - "amount": "0.35", - "amount_unit": "", + "amount": "0.0035", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0305", @@ -1604,8 +1604,8 @@ "work_item_code": "FP-10-07-01" }, { - "amount": "0.35", - "amount_unit": "", + "amount": "0.0035", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0305", @@ -1618,8 +1618,8 @@ "work_item_code": "FP-10-07-01" }, { - "amount": "2.0", - "amount_unit": "", + "amount": "0.02", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0306", @@ -1632,8 +1632,8 @@ "work_item_code": "FP-10-07-02" }, { - "amount": "2.0", - "amount_unit": "", + "amount": "0.02", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0306", @@ -1646,8 +1646,8 @@ "work_item_code": "FP-10-07-02" }, { - "amount": "6.0", - "amount_unit": "", + "amount": "0.06", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0306", @@ -1660,8 +1660,8 @@ "work_item_code": "FP-10-07-02" }, { - "amount": "1.0", - "amount_unit": "", + "amount": "0.01", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0307", @@ -1674,8 +1674,8 @@ "work_item_code": "FP-10-07-03" }, { - "amount": "1.0", - "amount_unit": "", + "amount": "0.01", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0307", @@ -1688,8 +1688,8 @@ "work_item_code": "FP-10-07-03" }, { - "amount": "3.0", - "amount_unit": "", + "amount": "0.03", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0307", @@ -1745,7 +1745,7 @@ }, { "amount": "0.12", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0329", @@ -1759,7 +1759,7 @@ }, { "amount": "0.15", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0329", @@ -1773,7 +1773,7 @@ }, { "amount": "0.14", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0329", @@ -1787,7 +1787,7 @@ }, { "amount": "0.16", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0329", @@ -1801,7 +1801,7 @@ }, { "amount": "0.24", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0329", @@ -1815,7 +1815,7 @@ }, { "amount": "0.30", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0329", @@ -1829,7 +1829,7 @@ }, { "amount": "0.15", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0330", @@ -1843,7 +1843,7 @@ }, { "amount": "0.46", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0330", @@ -1857,7 +1857,7 @@ }, { "amount": "0.17", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0330", @@ -1871,7 +1871,7 @@ }, { "amount": "0.68", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0330", @@ -1885,7 +1885,7 @@ }, { "amount": "0.24", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0330", @@ -1899,7 +1899,7 @@ }, { "amount": "0.94", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0330", @@ -1913,7 +1913,7 @@ }, { "amount": "0.85", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0331", @@ -1927,7 +1927,7 @@ }, { "amount": "0.82", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0331", @@ -1941,7 +1941,7 @@ }, { "amount": "0.87", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0331", @@ -1955,7 +1955,7 @@ }, { "amount": "0.99", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0331", @@ -1969,7 +1969,7 @@ }, { "amount": "1.29", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0331", @@ -1983,7 +1983,7 @@ }, { "amount": "1.36", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0331", @@ -1997,7 +1997,7 @@ }, { "amount": "1.07", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2011,7 +2011,7 @@ }, { "amount": "0.35", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2025,7 +2025,7 @@ }, { "amount": "1.69", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2039,7 +2039,7 @@ }, { "amount": "0.69", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2053,7 +2053,7 @@ }, { "amount": "1.24", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2067,7 +2067,7 @@ }, { "amount": "0.45", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2081,7 +2081,7 @@ }, { "amount": "1.84", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2095,7 +2095,7 @@ }, { "amount": "0.75", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2109,7 +2109,7 @@ }, { "amount": "1.51", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2123,7 +2123,7 @@ }, { "amount": "0.50", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2137,7 +2137,7 @@ }, { "amount": "1.92", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2151,7 +2151,7 @@ }, { "amount": "0.80", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2165,7 +2165,7 @@ }, { "amount": "1.69", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2179,7 +2179,7 @@ }, { "amount": "0.60", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2193,7 +2193,7 @@ }, { "amount": "2.14", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2207,7 +2207,7 @@ }, { "amount": "0.86", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0335", @@ -2221,7 +2221,7 @@ }, { "amount": "0.22", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0336", @@ -2235,7 +2235,7 @@ }, { "amount": "0.12", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0336", @@ -2319,7 +2319,7 @@ }, { "amount": "0.0055", - "amount_unit": "", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0345", @@ -2333,7 +2333,7 @@ }, { "amount": "0.0055", - "amount_unit": "", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0345", @@ -2347,7 +2347,7 @@ }, { "amount": "0.003", - "amount_unit": "", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0345", @@ -2361,7 +2361,7 @@ }, { "amount": "0.13", - "amount_unit": "", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0345", @@ -2375,7 +2375,7 @@ }, { "amount": "0.12", - "amount_unit": "", + "amount_unit": "개소", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0348", @@ -2389,7 +2389,7 @@ }, { "amount": "1.23", - "amount_unit": "", + "amount_unit": "개소", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0348", @@ -2403,7 +2403,7 @@ }, { "amount": "0.05", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0363", @@ -2417,7 +2417,7 @@ }, { "amount": "4.2", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0365", @@ -2431,7 +2431,7 @@ }, { "amount": "2.4", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0365", @@ -2445,7 +2445,7 @@ }, { "amount": "0.07", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0367", @@ -2459,7 +2459,7 @@ }, { "amount": "0.05", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0367", @@ -2473,7 +2473,7 @@ }, { "amount": "0.034", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0368", @@ -2487,7 +2487,7 @@ }, { "amount": "0.04", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0368", @@ -2501,7 +2501,7 @@ }, { "amount": "0.003", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0370", @@ -2514,8 +2514,8 @@ "work_item_code": "FP-12-23" }, { - "amount": "0.2", - "amount_unit": "", + "amount": "0.002", + "amount_unit": "㎡", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0372", @@ -2528,8 +2528,8 @@ "work_item_code": "FP-12-24-02" }, { - "amount": "4.0", - "amount_unit": "", + "amount": "0.04", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0372", @@ -2543,7 +2543,7 @@ }, { "amount": "1", - "amount_unit": "", + "amount_unit": "개소", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0374", @@ -2556,8 +2556,8 @@ "work_item_code": "FP-12-26" }, { - "amount": "0.2", - "amount_unit": "", + "amount": "0.002", + "amount_unit": "㎡", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0371", @@ -2570,8 +2570,8 @@ "work_item_code": "FP-12-24-01" }, { - "amount": "4.0", - "amount_unit": "", + "amount": "0.04", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0371", @@ -2585,7 +2585,7 @@ }, { "amount": "0.12", - "amount_unit": "", + "amount_unit": "개소", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0378", @@ -2599,7 +2599,7 @@ }, { "amount": "0.004", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0384", @@ -2613,7 +2613,7 @@ }, { "amount": "3.8", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0387", @@ -2627,7 +2627,7 @@ }, { "amount": "2.2", - "amount_unit": "", + "amount_unit": "ton", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0387", @@ -2641,7 +2641,7 @@ }, { "amount": "0.05", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0389", @@ -2655,7 +2655,7 @@ }, { "amount": "0.5", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0397", @@ -2669,7 +2669,7 @@ }, { "amount": "0.17", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0398", @@ -2682,8 +2682,8 @@ "work_item_code": "FP-13-02-02" }, { - "amount": "2.6", - "amount_unit": "", + "amount": "0.026", + "amount_unit": "개", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0399", @@ -2696,8 +2696,8 @@ "work_item_code": "FP-13-02-03" }, { - "amount": "0.05", - "amount_unit": "㎡", + "amount": "0.5", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0402", @@ -2710,8 +2710,8 @@ "work_item_code": "FP-13-03-01" }, { - "amount": "0.04", - "amount_unit": "㎡", + "amount": "0.4", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0402", @@ -2724,8 +2724,8 @@ "work_item_code": "FP-13-03-01" }, { - "amount": "0.05", - "amount_unit": "㎡", + "amount": "0.5", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0402", @@ -2739,7 +2739,7 @@ }, { "amount": "0.05", - "amount_unit": "", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0415", @@ -2753,7 +2753,7 @@ }, { "amount": "0.08", - "amount_unit": "", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0415", @@ -2767,7 +2767,7 @@ }, { "amount": "0.09", - "amount_unit": "", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0415", @@ -2780,8 +2780,8 @@ "work_item_code": "FP-13-04-06" }, { - "amount": "0.83", - "amount_unit": "", + "amount": "0.083", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0419", @@ -2794,8 +2794,8 @@ "work_item_code": "FP-13-06-01" }, { - "amount": "1.04", - "amount_unit": "", + "amount": "0.104", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0419", @@ -2808,8 +2808,8 @@ "work_item_code": "FP-13-06-01" }, { - "amount": "0.83", - "amount_unit": "", + "amount": "0.083", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0420", @@ -2822,8 +2822,8 @@ "work_item_code": "FP-13-06-02" }, { - "amount": "1.30", - "amount_unit": "", + "amount": "0.13", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0420", @@ -2836,8 +2836,8 @@ "work_item_code": "FP-13-06-02" }, { - "amount": "4.80", - "amount_unit": "", + "amount": "0.48", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0420", @@ -2850,8 +2850,8 @@ "work_item_code": "FP-13-06-02" }, { - "amount": "1.19", - "amount_unit": "", + "amount": "0.119", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0421", @@ -2864,8 +2864,8 @@ "work_item_code": "FP-13-06-03" }, { - "amount": "1.86", - "amount_unit": "", + "amount": "0.186", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0421", @@ -2878,8 +2878,8 @@ "work_item_code": "FP-13-06-03" }, { - "amount": "6.86", - "amount_unit": "", + "amount": "0.686", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0421", @@ -2892,8 +2892,8 @@ "work_item_code": "FP-13-06-03" }, { - "amount": "0.58", - "amount_unit": "", + "amount": "0.058", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0422", @@ -2906,8 +2906,8 @@ "work_item_code": "FP-13-07-01" }, { - "amount": "0.58", - "amount_unit": "", + "amount": "0.058", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0422", @@ -2920,8 +2920,8 @@ "work_item_code": "FP-13-07-01" }, { - "amount": "2.40", - "amount_unit": "", + "amount": "0.24", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0422", @@ -2934,8 +2934,8 @@ "work_item_code": "FP-13-07-01" }, { - "amount": "0.58", - "amount_unit": "", + "amount": "0.058", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0423", @@ -2948,8 +2948,8 @@ "work_item_code": "FP-13-07-02" }, { - "amount": "1.01", - "amount_unit": "", + "amount": "0.101", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0423", @@ -2962,8 +2962,8 @@ "work_item_code": "FP-13-07-02" }, { - "amount": "0.09", - "amount_unit": "", + "amount": "0.009", + "amount_unit": "개", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0426", @@ -2976,8 +2976,8 @@ "work_item_code": "FP-13-10-01" }, { - "amount": "0.22", - "amount_unit": "", + "amount": "0.022", + "amount_unit": "개", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0426", @@ -2991,7 +2991,7 @@ }, { "amount": "0.015", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0432", @@ -3005,7 +3005,7 @@ }, { "amount": "0.005", - "amount_unit": "", + "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0434", @@ -3061,7 +3061,7 @@ }, { "amount": "7.274", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0440", @@ -3075,7 +3075,7 @@ }, { "amount": "0.786", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0440", @@ -3089,7 +3089,7 @@ }, { "amount": "16.975", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0440", @@ -3103,7 +3103,7 @@ }, { "amount": "1.848", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0440", @@ -3116,8 +3116,8 @@ "work_item_code": "FP-13-13-01" }, { - "amount": "0.20", - "amount_unit": "", + "amount": "0.2", + "amount_unit": "㎥", "group_ratio_pct": "10", "pum_form": "requirement", "pum_table_id": "F0441", @@ -3131,7 +3131,7 @@ }, { "amount": "2.80", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0443", @@ -3145,7 +3145,7 @@ }, { "amount": "0.80", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0443", @@ -3159,7 +3159,7 @@ }, { "amount": "6.31", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0443", @@ -3173,7 +3173,7 @@ }, { "amount": "1.31", - "amount_unit": "", + "amount_unit": "㎥", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0443", @@ -3229,7 +3229,7 @@ }, { "amount": "0.0027", - "amount_unit": "", + "amount_unit": "m", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0445", @@ -3251,7 +3251,7 @@ }, "source_master_file": { "file": "work_item_master_2026-01-01.json", - "sha256": "593653135d5a2871180e7a3921f9238629b275438ef47230412aa21e9bdd80c0" + "sha256": "fe454c56c9dc01ad7dae04a8f90d776d08c5ce33badeadb2606b35234bfce7eb" }, "stats": { "rows": 231, From 7591670e9355e33fb74da49269987b7a450ec596 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 01:14:47 +0900 Subject: [PATCH 06/12] =?UTF-8?q?fix(B09):=20=EA=B0=92=20=EB=AA=BB=20?= =?UTF-8?q?=EC=9D=BD=EC=9D=80=20=EC=9E=90=EC=9B=90=20=EC=A4=84=EC=9D=B4=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20=EA=B3=B5=EC=A2=85=EC=9D=80=20=EA=B8=88?= =?UTF-8?q?=EC=95=A1=EC=9D=84=20=EB=A7=89=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기초잡석 12-25 를 붙이다 발견 — `소할(30%) | 할석공(인) | 0.2 × 30%` 를 못 읽어 **부설다짐 0.6인만으로 107,145원**이 서고 있었음. 값이 그럴듯해 어떤 검사에도 안 걸림(「부분 성공이 가장 위험」) - 이름 칸 판정을 **낱말 목록이 아니라 「풀리는지」**로 바꿈 — 첫 칸이 공정 이름인 표(기초잡석)가 딱지 목록에 없어 통째로 못 맞추고 있었음. 자원 축 231 → 243 - **자원은 알아봤는데 값을 못 읽은 줄**이 있으면 그 공종을 `partial_items` 로 표시하고 일위대가 금액을 만들지 않음. 그런 공종이 **28건** 있었고, 그중 23건이 조용히 성분 빠진 단가로 서 있었음 - 못 읽은 줄은 `unmatched` 에 사유째 남김 검증: pytest 172 통과(신규 2 — 표시되는지 + 실제로 막는지 짝) Co-Authored-By: Claude Opus 5 (1M context) --- B09_Estimation/B09_Estimation_ResourceAxis.py | 32 ++- B09_Estimation/B09_Estimation_UnitPrice.py | 4 + .../resource_axis_2026-01-01.json | 172 ++++++++++- .../unmatched_2026-01-01.json | 270 ++++++++++++++---- 4 files changed, 415 insertions(+), 63 deletions(-) diff --git a/B09_Estimation/B09_Estimation_ResourceAxis.py b/B09_Estimation/B09_Estimation_ResourceAxis.py index 7234e50d..54a8b041 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis.py @@ -414,6 +414,10 @@ class AxisResult: rows: list[ResourceRow] = field(default_factory=list) unmatched: list[UnmatchedRow] = field(default_factory=list) skipped_forms: dict[str, int] = field(default_factory=dict) + #: 자원은 알아봤는데 **값을 못 읽은** 줄이 있는 공종 — 그 단가는 「일부만 선 것」이다. + #: 기초잡석 12-25 가 `소할(30%) | 할석공(인) | 0.2 × 30%` 를 못 읽어 부설다짐만으로 + #: 107,145 원이 서고 있었다(2026-09-08). **부분 성공이 가장 위험하다.** + partial_items: dict[str, str] = field(default_factory=dict) def _resolve_cell(catalog: ResourceCatalog, name_cell: str, cells: list[str]): @@ -474,10 +478,22 @@ def match_table( if not cells: continue # 첫 칸이 분류 딱지(「자재」·「장비」)면 **이름은 둘째 칸**이다. + # + # ⚠ 딱지 목록만으로는 모자란다 — 첫 칸이 **공정 이름**인 표가 따로 있다 + # (기초잡석 12-25: `소할(30%) | 할석공(인) | 0.2 × 30%`). 목록에 없는 말이라 + # 통째로 못 맞추고 있었다. 그래서 **딱지 목록에 없더라도 첫 칸이 자원으로 안 풀리고 + # 둘째 칸이 풀리면** 이름을 둘째 칸에서 읽는다 — 판정을 낱말이 아니라 + # **풀리는지**로 한다. 배분율 꼬리표(「(30%)」)는 어느 쪽이든 첫 칸에서 읽는다. name_cell = cells[0] value_cells = cells[1:] group_ratio = None - if _group_label_of(name_cell) is not None and len(cells) > 1: + if len(cells) > 1 and ( + _group_label_of(name_cell) is not None + or ( + _resolve_cell(catalog, name_cell, cells) is None + and _resolve_cell(catalog, cells[1], cells[1:]) is not None + ) + ): group_ratio = _group_ratio_of(name_cell) name_cell = cells[1] value_cells = cells[2:] @@ -487,6 +503,20 @@ def match_table( (parse_amount(c) for c in value_cells if parse_amount(c) is not None), None ) if amount_cell is None: + # ⚠ **이름은 자원인데 값을 못 읽은 줄**은 다르다 — 그 공종 단가는 성분이 + # 빠진 채 서게 된다. 조용히 넘기지 않고 「일부만 섬」으로 표시한다. + if _resolve_cell(catalog, name_cell, [name_cell, *value_cells]) is not None: + result.partial_items[node.get("work_item_code", "")] = ( + f"{name_cell} 줄의 값을 못 읽었습니다" + ) + result.unmatched.append( + UnmatchedRow( + work_item_code=node.get("work_item_code", ""), + pum_table_id=str(table.get("pum_table_id", "")), + cell=" | ".join(cells[:3]), + reason="자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + ) + ) continue # ⚠ **카탈로그 조회를 먼저 한다.** 이름 필터를 앞에 두면 필터가 넓을 때 diff --git a/B09_Estimation/B09_Estimation_UnitPrice.py b/B09_Estimation/B09_Estimation_UnitPrice.py index a487376e..30d79b39 100644 --- a/B09_Estimation/B09_Estimation_UnitPrice.py +++ b/B09_Estimation/B09_Estimation_UnitPrice.py @@ -300,6 +300,10 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: # 「인력(10%)·장비(90%)」 표에서 인력만 붙으면 단가가 10 % 몫만인데, 그 값이 # 조용히 서면 내역서가 틀린 줄 모른다(2026-09-08 실측: 측구터파기 39,575.6원/㎥ # 이 인력 10 % 몫만이었다). 0 으로 때우는 것과 같은 종류의 사고다. + # 값을 못 읽은 자원 줄이 있으면 **일부만 선 단가**다 — 금액을 만들지 않는다. + if work_item_code in axis.partial_items: + build.partial_ratio.setdefault(work_item_code, _ZERO) + covered = _covered_ratio_pct(rows, {ref for _, ref in attachable}, build) if covered is not None: covered += machine_share diff --git a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json index 1b2d76f7..80a17298 100644 --- a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json +++ b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json @@ -441,6 +441,34 @@ "variant": "띠떼심기", "work_item_code": "FP-05-13" }, + { + "amount": "0.20", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0126", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-05-19-01" + }, + { + "amount": "0.004666666666666666666666666667", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0127", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-05-19-02" + }, { "amount": "0.34", "amount_unit": "", @@ -2247,6 +2275,20 @@ "variant": "", "work_item_code": "FP-12-04" }, + { + "amount": "0.07", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0337", + "raw_row_index": 1, + "resource_code": "1007", + "resource_kind": "labor", + "resource_name": "형틀목공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-05" + }, { "amount": "0.03", "amount_unit": "", @@ -2401,6 +2443,20 @@ "variant": "", "work_item_code": "FP-12-11-02" }, + { + "amount": "0.07", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0363", + "raw_row_index": 1, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-17-02" + }, { "amount": "0.05", "amount_unit": "㎥", @@ -2541,6 +2597,20 @@ "variant": "", "work_item_code": "FP-12-24-02" }, + { + "amount": "0.6", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0373", + "raw_row_index": 6, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-25" + }, { "amount": "1", "amount_unit": "개소", @@ -2583,6 +2653,34 @@ "variant": "", "work_item_code": "FP-12-24-01" }, + { + "amount": "0.08", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0376", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-27-02" + }, + { + "amount": "0.04", + "amount_unit": "개소", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0377", + "raw_row_index": 1, + "resource_code": "1026", + "resource_kind": "labor", + "resource_name": "방수공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-27-03" + }, { "amount": "0.12", "amount_unit": "개소", @@ -2639,6 +2737,20 @@ "variant": "", "work_item_code": "FP-12-34-03" }, + { + "amount": "0.14", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0389", + "raw_row_index": 1, + "resource_code": "1027", + "resource_kind": "labor", + "resource_name": "미장공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-35" + }, { "amount": "0.05", "amount_unit": "㎡", @@ -2989,6 +3101,20 @@ "variant": "직경 15㎝ 길이 4m", "work_item_code": "FP-13-10-01" }, + { + "amount": "0.035", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0432", + "raw_row_index": 0, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-11-01" + }, { "amount": "0.015", "amount_unit": "㎡", @@ -3003,6 +3129,34 @@ "variant": "", "work_item_code": "FP-13-11-01" }, + { + "amount": "0.037", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0432", + "raw_row_index": 2, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-11-01" + }, + { + "amount": "0.013", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0434", + "raw_row_index": 0, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-11-02" + }, { "amount": "0.005", "amount_unit": "㎡", @@ -3017,6 +3171,20 @@ "variant": "", "work_item_code": "FP-13-11-02" }, + { + "amount": "0.039", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0434", + "raw_row_index": 2, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-11-02" + }, { "amount": "0.0141", "amount_unit": "", @@ -3254,12 +3422,12 @@ "sha256": "fe454c56c9dc01ad7dae04a8f90d776d08c5ce33badeadb2606b35234bfce7eb" }, "stats": { - "rows": 231, + "rows": 243, "skipped_forms": { "coefficient": 19, "reference": 98, "undetermined": 76 }, - "unmatched": 306 + "unmatched": 331 } } \ No newline at end of file diff --git a/resources/data_cost_resource_axis/unmatched_2026-01-01.json b/resources/data_cost_resource_axis/unmatched_2026-01-01.json index caf29413..72431775 100644 --- a/resources/data_cost_resource_axis/unmatched_2026-01-01.json +++ b/resources/data_cost_resource_axis/unmatched_2026-01-01.json @@ -80,6 +80,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-02-02" }, + { + "cell": "0.2 | 보통인부", + "pum_table_id": "F0075", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, { "cell": "경비(기계경비)", "pum_table_id": "F0472", @@ -242,12 +248,36 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-04-02-02" }, + { + "cell": "특별인부 | 벌목부 | 보통인부", + "pum_table_id": "F0088", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-03" + }, + { + "cell": "0.13인 | 벌목부", + "pum_table_id": "F0090", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-05" + }, + { + "cell": "1인 | 보통인부", + "pum_table_id": "F0091", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-06" + }, { "cell": "비 고", "pum_table_id": "F0093", "reason": "숫자 칸 0 개가 자원 열 2 개와 안 맞아 버렸습니다(자리 밀림 방지).", "work_item_code": "FP-05-01-02" }, + { + "cell": "특별인부(인) | 보통인부(인) | 굴착기(시간)", + "pum_table_id": "F0094", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-03" + }, { "cell": "지게", "pum_table_id": "F0097", @@ -266,6 +296,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-01-05" }, + { + "cell": "특별인부 | 보통인부 | 특별인부", + "pum_table_id": "F0098", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-02" + }, { "cell": "소묘식재", "pum_table_id": "F0099", @@ -284,6 +320,18 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-03-01" }, + { + "cell": "특별인부(인) | 보통인부(인) | 특별인부(인)", + "pum_table_id": "F0104", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-03-04" + }, + { + "cell": "특별인부(인) | 보통인부(인) | 굴착기(시간)", + "pum_table_id": "F0106", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-03-05" + }, { "cell": "파종상 만들기", "pum_table_id": "F0109", @@ -393,10 +441,28 @@ "work_item_code": "FP-05-16-01" }, { - "cell": "표토절취", - "pum_table_id": "F0126", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-19-01" + "cell": "표토채취 | 보통인부 | 0.2인", + "pum_table_id": "F0128", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-20" + }, + { + "cell": "굴착기(무한궤도, 0.7㎥) | 0.1시간 | ", + "pum_table_id": "F0128", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-20" + }, + { + "cell": "표토붙이기 | 보통인부 | 0.2인", + "pum_table_id": "F0128", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-20" + }, + { + "cell": "굴착기(무한궤도, 0.7㎥) | 0.1시간 | ", + "pum_table_id": "F0128", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-20" }, { "cell": "트럭", @@ -734,6 +800,18 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-13" }, + { + "cell": "특별인부 | 보통인부 | 특별인부", + "pum_table_id": "F0201", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-01-01" + }, + { + "cell": "특별인부 | 보통인부 | 특별인부", + "pum_table_id": "F0202", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-01-02" + }, { "cell": "경비(기계경비)", "pum_table_id": "F0454", @@ -878,6 +956,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-09" }, + { + "cell": "특별인부 | 5인/km | 10인/km", + "pum_table_id": "F0238", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-02" + }, { "cell": "대형브레이커+ 유압식백호우 (무한궤도,0.7㎥)", "pum_table_id": "F0241", @@ -1220,6 +1304,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-14-01" }, + { + "cell": "보통인부 (인) | 공기압축기 (시간) | 소형브레이커 (시간)", + "pum_table_id": "F0288", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-19-01" + }, { "cell": "모래ㆍ사질토ㆍ점토ㆍ점질토", "pum_table_id": "F0288", @@ -1322,12 +1412,24 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-10-08-01" }, + { + "cell": "보통인부 | | 인 〃 〃 〃", + "pum_table_id": "F0317", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-10-10-01" + }, { "cell": "버켓 손료", "pum_table_id": "F0317", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-10-10-01" }, + { + "cell": "보통인부 | | 인 〃 〃 〃", + "pum_table_id": "F0318", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-10-10-02" + }, { "cell": "와이어 손료", "pum_table_id": "F0318", @@ -1370,12 +1472,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-05" }, - { - "cell": "설치 및 해체", - "pum_table_id": "F0337", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-05" - }, { "cell": "형틀목공 보통인부", "pum_table_id": "F0341", @@ -1400,6 +1496,18 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-11-02" }, + { + "cell": "배관공 | | 인", + "pum_table_id": "F0347", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-11-02" + }, + { + "cell": "보통인부 | | 인", + "pum_table_id": "F0347", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-11-02" + }, { "cell": "절단기", "pum_table_id": "F0348", @@ -1436,6 +1544,24 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-16" }, + { + "cell": "보통인부 | 인 | ", + "pum_table_id": "F0354", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-16" + }, + { + "cell": "벽체 | 특별인부 | 인", + "pum_table_id": "F0354", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-16" + }, + { + "cell": "보통인부 | 인 | ", + "pum_table_id": "F0354", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-16" + }, { "cell": "설치비", "pum_table_id": "F0354", @@ -1448,12 +1574,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-17-02" }, - { - "cell": "타설", - "pum_table_id": "F0363", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-17-02" - }, { "cell": "펌프카(80㎥/hr)", "pum_table_id": "F0363", @@ -1520,6 +1640,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-24-02" }, + { + "cell": "소할(30%) | 할석공(인) | 0.2 × 30%", + "pum_table_id": "F0373", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-25" + }, { "cell": "적사", "pum_table_id": "F0373", @@ -1527,11 +1653,17 @@ "work_item_code": "FP-12-25" }, { - "cell": "부설 및 다짐", + "cell": "운반 | 덤프트럭(15ton) | ", "pum_table_id": "F0373", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-25" }, + { + "cell": "기계 | 양수기(150m/m) | ", + "pum_table_id": "F0374", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-26" + }, { "cell": "운반 및 설치 (목도운반)", "pum_table_id": "F0374", @@ -1550,24 +1682,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-27-02" }, - { - "cell": "인력(설치비)", - "pum_table_id": "F0376", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-27-02" - }, { "cell": "실런트", "pum_table_id": "F0377", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-27-03" }, - { - "cell": "인력(설치비)", - "pum_table_id": "F0377", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-27-03" - }, { "cell": "에폭시 접착제", "pum_table_id": "F0378", @@ -1592,12 +1712,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-34-03" }, - { - "cell": "설치", - "pum_table_id": "F0389", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-35" - }, { "cell": "굴착기", "pum_table_id": "F0399", @@ -1646,18 +1760,78 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-03-02" }, + { + "cell": "석공 (인) | 보통인부 (인) | 석공 (인)", + "pum_table_id": "F0404", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-01" + }, + { + "cell": "석 공 (인) | 보통인부 (인) | 석공 (인)", + "pum_table_id": "F0409", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "뒷길이 (㎝) | 석공 (인) | 보통 인부 (인)", + "pum_table_id": "F0416", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-05-01" + }, + { + "cell": "보통인부 | | 〃", + "pum_table_id": "F0419", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-06-01" + }, { "cell": "굴 삭 기 (무한궤도)", "pum_table_id": "F0419", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-06-01" }, + { + "cell": "보통인부 | | 〃", + "pum_table_id": "F0420", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-06-02" + }, + { + "cell": "보통인부 | | 〃", + "pum_table_id": "F0421", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-06-03" + }, + { + "cell": "보통인부 | | 〃", + "pum_table_id": "F0422", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-07-01" + }, + { + "cell": "보통인부 | | 〃", + "pum_table_id": "F0423", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-07-02" + }, { "cell": "굴 삭 기 (무한궤도)", "pum_table_id": "F0423", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-07-02" }, + { + "cell": "보통 인부 (인) | 0.9m 1.2m 1.5m 1.8m 2.1m 2.4m 2.7m 3.0m 3.5m 4.0m 4.5m | 0.022 0.034 0.05 0.07 - - - - - - -", + "pum_table_id": "F0427", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "보 통 인 부 (인) | 3.5m 4.0m 4.5m 5.0m 5.5m 6.0m 6.5m 7.0m 7.5m 8.0m 8.5m 9.0m 10.0m 11.0m 12.0m | 0.75 1.10 1.50 1.93 - - - - - - - - - - -", + "pum_table_id": "F0428", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-10-02" + }, { "cell": "8 9", "pum_table_id": "F0430", @@ -1718,18 +1892,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-11-01" }, - { - "cell": "조립 설치", - "pum_table_id": "F0432", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-11-01" - }, - { - "cell": "돌채움", - "pum_table_id": "F0432", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-11-01" - }, { "cell": "굴착기(1.0㎥)", "pum_table_id": "F0432", @@ -1754,18 +1916,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-11-02" }, - { - "cell": "조립 설치", - "pum_table_id": "F0434", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-11-02" - }, - { - "cell": "돌채움", - "pum_table_id": "F0434", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-11-02" - }, { "cell": "굴착기 (1.0㎥)", "pum_table_id": "F0434", From 50f3ab70d36abe4ef5d0b09ccb9f790cd923c8b3 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 01:20:48 +0900 Subject: [PATCH 07/12] =?UTF-8?q?fix(B09):=20=E3=80=8C=EA=B0=92=20?= =?UTF-8?q?=EB=AA=BB=20=EC=9D=BD=EC=9D=8C=E3=80=8D=20=EC=98=A4=ED=83=90=20?= =?UTF-8?q?=EC=A2=81=ED=9E=88=EA=B3=A0=20=E3=80=8C=EA=B0=92=20=C3=97=20?= =?UTF-8?q?=EB=B9=84=EC=9C=A8%=E3=80=8D=20=ED=91=9C=EA=B8=B0=20=EC=9D=BD?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ⚠ 앞 커밋의 「값 못 읽은 줄」 판정이 **머리 줄까지 잡고 있었음** — 「특별인부 | 벌목부 | 보통인부」처럼 자원 이름만 나열된 줄. 28 공종 중 대부분이 오탐이었음. **숫자가 있는데** 못 읽은 줄만 성분 빠짐으로 봄 (28 → 12) - 「0.2 × 30%」꼴을 0.06 으로 읽음. ⚠ 딱지의 30 % 를 **또 곱하지 않음** — 두 번 곱하면 0.018. 그 밖의 식(「5인/km」)은 기준이 달라 안 읽고 막은 채 둠 기초잡석 12-25 성립 (121,661.1원/㎥) 소할 할석공 0.06 + 부설다짐 보통인부 0.6 + 적사 굴착기 0.04535hr (Q = 3600 ÷ 22 × 0.7 × 0.55 × 1.0 × 0.35 = 22.05㎥/hr) 운반(덤프)은 품셈이 10장에서 따로 내므로 여기 안 붙음 ⇒ 옹벽 묶음 4조각이 모두 섬 — 타설 65,826.4 · 거푸집 81,321.9 · 철근 1,032,497.4 · 기초잡석 121,661.1 검증: pytest 174 통과(신규 4 — 오탐 짝 시험 포함: 머리 줄은 안 걸리고, 숫자 있는 미해독 줄은 걸림) Co-Authored-By: Claude Opus 5 (1M context) --- B09_Estimation/B09_Estimation_ResourceAxis.py | 40 +++++- .../resource_axis_2026-01-01.json | 18 ++- .../unmatched_2026-01-01.json | 114 ------------------ 3 files changed, 55 insertions(+), 117 deletions(-) diff --git a/B09_Estimation/B09_Estimation_ResourceAxis.py b/B09_Estimation/B09_Estimation_ResourceAxis.py index 54a8b041..2c9a4a06 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis.py @@ -333,6 +333,23 @@ def parse_amount(cell: str) -> Decimal | None: return None +#: 「0.2 × 30%」 꼴 — 값과 배분율이 **한 칸에** 적힌 표기(기초잡석 12-25). +#: ⚠ 이 값을 읽었으면 **딱지의 배분율을 또 곱하면 안 된다** — 같은 30 % 가 두 번 곱해진다. +_RE_RATIO_EXPRESSION = re.compile(r"^(\d+(?:\.\d+)?)\s*[×xX*]\s*(\d+(?:\.\d+)?)\s*%$") + + +def parse_amount_expression(cell: str) -> Decimal | None: + """「0.2 × 30%」를 0.06 으로 읽는다. 그 밖의 식은 **읽지 않는다**. + + 식을 넓게 읽으려 들면 「5인/km」처럼 **기준이 다른 값**까지 삼킨다. 여기서 보는 것은 + 「값 × 비율%」 한 모양뿐이다. + """ + found = _RE_RATIO_EXPRESSION.match(_normalize(cell)) + if found is None: + return None + return Decimal(found.group(1)) * Decimal(found.group(2)) / Decimal(100) + + def convert_amount(raw: Decimal, *, pum_form: str, basis_quantity: Decimal | None) -> Decimal: """표 형태에 맞춰 소요량으로 환산한다. @@ -502,10 +519,31 @@ def match_table( amount_cell = next( (parse_amount(c) for c in value_cells if parse_amount(c) is not None), None ) + if amount_cell is None: + # 「0.2 × 30%」 꼴은 값과 배분율이 한 칸에 있다 — 읽었으면 딱지 배분율은 버린다. + expression = next( + ( + parse_amount_expression(c) + for c in value_cells + if parse_amount_expression(c) is not None + ), + None, + ) + if expression is not None: + amount_cell = expression + group_ratio = None # ⚠ 이미 값 안에 들어 있다 — 또 곱하면 두 번이다 if amount_cell is None: # ⚠ **이름은 자원인데 값을 못 읽은 줄**은 다르다 — 그 공종 단가는 성분이 # 빠진 채 서게 된다. 조용히 넘기지 않고 「일부만 섬」으로 표시한다. - if _resolve_cell(catalog, name_cell, [name_cell, *value_cells]) is not None: + # ⚠ **숫자가 아예 없는 줄은 머리 줄**이다 — 자원 이름만 나열된 줄 + # (「특별인부 | 벌목부 | 보통인부」). 그것까지 「못 읽은 값」으로 세면 + # 정상 공종이 무더기로 막힌다(2026-09-08: 28건 중 대부분이 이 오탐이었다). + # 숫자가 **있는데** 못 읽은 줄만 성분 빠짐으로 본다. + has_digit = any(ch.isdigit() for cell in value_cells for ch in cell) + if ( + has_digit + and _resolve_cell(catalog, name_cell, [name_cell, *value_cells]) is not None + ): result.partial_items[node.get("work_item_code", "")] = ( f"{name_cell} 줄의 값을 못 읽었습니다" ) diff --git a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json index 80a17298..d6b0bfbe 100644 --- a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json +++ b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json @@ -2597,6 +2597,20 @@ "variant": "", "work_item_code": "FP-12-24-02" }, + { + "amount": "0.06", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0373", + "raw_row_index": 0, + "resource_code": "1017", + "resource_kind": "labor", + "resource_name": "할석공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-25" + }, { "amount": "0.6", "amount_unit": "㎥", @@ -3422,12 +3436,12 @@ "sha256": "fe454c56c9dc01ad7dae04a8f90d776d08c5ce33badeadb2606b35234bfce7eb" }, "stats": { - "rows": 243, + "rows": 244, "skipped_forms": { "coefficient": 19, "reference": 98, "undetermined": 76 }, - "unmatched": 331 + "unmatched": 312 } } \ No newline at end of file diff --git a/resources/data_cost_resource_axis/unmatched_2026-01-01.json b/resources/data_cost_resource_axis/unmatched_2026-01-01.json index 72431775..2926fae4 100644 --- a/resources/data_cost_resource_axis/unmatched_2026-01-01.json +++ b/resources/data_cost_resource_axis/unmatched_2026-01-01.json @@ -80,12 +80,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-02-02" }, - { - "cell": "0.2 | 보통인부", - "pum_table_id": "F0075", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-03-01" - }, { "cell": "경비(기계경비)", "pum_table_id": "F0472", @@ -248,36 +242,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-04-02-02" }, - { - "cell": "특별인부 | 벌목부 | 보통인부", - "pum_table_id": "F0088", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-04-03" - }, - { - "cell": "0.13인 | 벌목부", - "pum_table_id": "F0090", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-04-05" - }, - { - "cell": "1인 | 보통인부", - "pum_table_id": "F0091", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-04-06" - }, { "cell": "비 고", "pum_table_id": "F0093", "reason": "숫자 칸 0 개가 자원 열 2 개와 안 맞아 버렸습니다(자리 밀림 방지).", "work_item_code": "FP-05-01-02" }, - { - "cell": "특별인부(인) | 보통인부(인) | 굴착기(시간)", - "pum_table_id": "F0094", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-05-01-03" - }, { "cell": "지게", "pum_table_id": "F0097", @@ -296,12 +266,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-01-05" }, - { - "cell": "특별인부 | 보통인부 | 특별인부", - "pum_table_id": "F0098", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-05-02" - }, { "cell": "소묘식재", "pum_table_id": "F0099", @@ -320,18 +284,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-03-01" }, - { - "cell": "특별인부(인) | 보통인부(인) | 특별인부(인)", - "pum_table_id": "F0104", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-05-03-04" - }, - { - "cell": "특별인부(인) | 보통인부(인) | 굴착기(시간)", - "pum_table_id": "F0106", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-05-03-05" - }, { "cell": "파종상 만들기", "pum_table_id": "F0109", @@ -800,18 +752,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-13" }, - { - "cell": "특별인부 | 보통인부 | 특별인부", - "pum_table_id": "F0201", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-08-01-01" - }, - { - "cell": "특별인부 | 보통인부 | 특별인부", - "pum_table_id": "F0202", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-08-01-02" - }, { "cell": "경비(기계경비)", "pum_table_id": "F0454", @@ -1304,12 +1244,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-14-01" }, - { - "cell": "보통인부 (인) | 공기압축기 (시간) | 소형브레이커 (시간)", - "pum_table_id": "F0288", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-09-19-01" - }, { "cell": "모래ㆍ사질토ㆍ점토ㆍ점질토", "pum_table_id": "F0288", @@ -1544,24 +1478,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-16" }, - { - "cell": "보통인부 | 인 | ", - "pum_table_id": "F0354", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-12-16" - }, { "cell": "벽체 | 특별인부 | 인", "pum_table_id": "F0354", "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-16" }, - { - "cell": "보통인부 | 인 | ", - "pum_table_id": "F0354", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-12-16" - }, { "cell": "설치비", "pum_table_id": "F0354", @@ -1640,30 +1562,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-24-02" }, - { - "cell": "소할(30%) | 할석공(인) | 0.2 × 30%", - "pum_table_id": "F0373", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-12-25" - }, { "cell": "적사", "pum_table_id": "F0373", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-25" }, - { - "cell": "운반 | 덤프트럭(15ton) | ", - "pum_table_id": "F0373", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-12-25" - }, - { - "cell": "기계 | 양수기(150m/m) | ", - "pum_table_id": "F0374", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-12-26" - }, { "cell": "운반 및 설치 (목도운반)", "pum_table_id": "F0374", @@ -1760,24 +1664,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-03-02" }, - { - "cell": "석공 (인) | 보통인부 (인) | 석공 (인)", - "pum_table_id": "F0404", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-13-04-01" - }, - { - "cell": "석 공 (인) | 보통인부 (인) | 석공 (인)", - "pum_table_id": "F0409", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-13-04-04" - }, - { - "cell": "뒷길이 (㎝) | 석공 (인) | 보통 인부 (인)", - "pum_table_id": "F0416", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-13-05-01" - }, { "cell": "보통인부 | | 〃", "pum_table_id": "F0419", From a9749a7e91926b9a9c4c7f850de915f3207ddd97 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 01:28:56 +0900 Subject: [PATCH 08/12] =?UTF-8?q?feat(B09):=20=E2=91=A3=20=EC=98=88?= =?UTF-8?q?=EC=82=B0=EB=82=B4=EC=97=AD=EC=84=9C=20=EC=97=94=EB=93=9C?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `GET /api/projects/{id}/estimation/bill` — B08 인계를 서버 안에서 그대로 받아 계층을 세우고 단가를 붙여 돌려줌 - 수량은 B08 것이 정본, 여기서 다시 세지 않음 (CLAUDE.md 5장) - 단가 없음·밑수 미확보·공종코드 없음은 0 으로 안 때우고 `missing` 으로 냄 - 이중계상 감시에 걸리면 표를 그리지 않고 409 로 멈춤 실측(프로젝트 5cff3920, 공용 브라우저 5174): 14줄(세부 7·머리 7) · 검산줄 1 · 자재 4 · 본체합계 478,680원 측구터파기 90.51㎥ × 5,288.6 = 478,680, 나머지 6줄은 사유째 미확보로 뜸 Co-Authored-By: Claude Opus 5 (1M context) --- B09_Estimation/B09_Estimation_Router.py | 52 +++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/B09_Estimation/B09_Estimation_Router.py b/B09_Estimation/B09_Estimation_Router.py index 762d581f..9531369b 100644 --- a/B09_Estimation/B09_Estimation_Router.py +++ b/B09_Estimation/B09_Estimation_Router.py @@ -10,6 +10,7 @@ from __future__ import annotations +import json import logging from dataclasses import replace as dataclass_replace from decimal import Decimal @@ -27,6 +28,8 @@ from B09_Estimation.B09_Estimation_Engine_Cost import ( proposed_profit_adjustment, ) from B09_Estimation.B09_Estimation_PriceBook import PriceBookError +from B09_Estimation.B09_Estimation_BillOfQuantities import bill_summary, build_bill +from B09_Estimation.B09_Estimation_Guards import DoubleCountError from B09_Estimation.B09_Estimation_Rates import RateLookupError from B09_Estimation.B09_Estimation_Statutory import STATUTORY_ITEMS from B09_Estimation.B09_Estimation_Rounding import OutputPlace, round_at @@ -246,3 +249,52 @@ async def confirm_estimation(project_id: UUID) -> JSONResponse: content={"status": "error", "message": "원가계산 단계 확정에 실패했습니다."}, ) return JSONResponse(content={"status": "success", "project_id": str(project_id)}) + + +@router.get("/{project_id}/estimation/bill") +async def get_bill(project_id: UUID) -> JSONResponse: + """④ 예산내역서 한 장 — B08 인계를 그대로 받아 계층을 세워 돌려준다. + + ⚠ **수량을 다시 세지 않는다.** B08 인계가 정본이고 여기서는 단가를 붙여 금액만 + 만든다(CLAUDE.md 5장 「같은 계산을 두 벌로 짜지 않는다」). + + ⚠ 단가가 없거나 밑수를 모르는 줄은 **0 으로 안 때우고** `missing` 으로 드러낸다 — + 화면이 그 목록을 그대로 보인다. + """ + from B08_Quantity.B08_Quantity_Router_Material import get_handoff + + try: + response = await get_handoff(project_id) + payload = json.loads(bytes(response.body).decode("utf-8")) + except Exception: + logger.exception("B09 내역서 조회 실패(인계): project_id=%s", project_id) + return JSONResponse( + status_code=502, + content={"status": "error", "message": "B08 인계 자료를 받지 못했습니다."}, + ) + if "work_items" not in payload: + # B08 이 오류 응답을 준 경우 — 그 사유를 그대로 넘긴다(감추지 않는다). + return JSONResponse(status_code=502, content={"status": "error", **payload}) + + try: + result = build_bill(payload) + except DoubleCountError as error: + # 이중계상 감시에 걸린 경우 — 표를 그리지 않고 멈춘다. + logger.warning("B09 내역서 이중계상 감지: project_id=%s, %s", project_id, error) + return JSONResponse(status_code=409, content={"status": "error", "message": str(error)}) + except Exception: + logger.exception("B09 내역서 조판 실패: project_id=%s", project_id) + return JSONResponse( + status_code=500, + content={"status": "error", "message": "예산내역서를 세우지 못했습니다."}, + ) + + return JSONResponse( + content={ + "status": "success", + "rows": [row.as_dict() for row in result.rows], + "excluded": [row.as_dict() for row in result.excluded], + "materials": [row.as_dict() for row in result.material_rows], + "summary": bill_summary(result), + } + ) From 573d7bbae2327eb32999747d969f4a518553945b Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 01:36:11 +0900 Subject: [PATCH 09/12] =?UTF-8?q?feat(B09):=20=EC=98=88=EC=82=B0=EB=82=B4?= =?UTF-8?q?=EC=97=AD=EC=84=9C=20=ED=99=94=EB=A9=B4=20=ED=83=AD=20=EC=8B=A0?= =?UTF-8?q?=EC=84=A4=20+=20ITEM=20NO.=20=EA=B2=B9=EC=B9=A8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 화면 - 「설계내역서」 탭을 켜고 [B08 수량 불러오기] 로 표를 세움. 계층은 들여쓰기, 머리글 줄은 굵게 - 못 세운 줄은 0 으로 채우지 않고 **사유째** 표와 목록에 보임 (「일위대가 없음」·「하위 공종에 있음(후보 2건)」·「밑수를 못 찾은 표」) - 검산용 줄(보정량계·무대)은 수량만 보이고 금액칸이 빔 - ⚠ 「사급 자재 단가가 없어 자재비가 빠져 있음 — 지금 합계는 모자란 값」을 합계 옆에 상시 표시 ITEM NO. 겹침 수정 - 같은 공종코드가 지반만 달리해 두 번 오면 번호가 겹치고 있었음 (실물: 도자운반 토사/리핑암이 둘 다 `3-1`). 잎 줄은 번호를 재사용하지 않음 실측(공용 브라우저 5174, 운반이 실린 실물 자료): 16줄 · 겹친 번호 0 · 합계 488,926원 운반 4줄이 3-1~3-4 로 서고 무대 2줄은 검산줄로 빠짐 (㉡ 가 실물에서 돎) 검증: pytest 175 통과(신규 1), tsc 0건 Co-Authored-By: Claude Opus 5 (1M context) --- .../B09_Estimation_BillOfQuantities.py | 7 +- B09_Estimation/B09_Estimation_UI_Page.ts | 234 +++++++++++++----- ui_template/ui_template_locale_b2.ts | 229 +++++------------ 3 files changed, 236 insertions(+), 234 deletions(-) diff --git a/B09_Estimation/B09_Estimation_BillOfQuantities.py b/B09_Estimation/B09_Estimation_BillOfQuantities.py index 5d18cacf..add44313 100644 --- a/B09_Estimation/B09_Estimation_BillOfQuantities.py +++ b/B09_Estimation/B09_Estimation_BillOfQuantities.py @@ -314,8 +314,11 @@ def build_bill( ) ) leaf = chain[-1] - item_no = emitted.get(leaf.code) or next_number(parent_no) - emitted[leaf.code] = item_no + # ⚠ **잎 줄은 번호를 재사용하지 않는다.** 같은 공종코드가 지반·규격만 달리해 + # 두 번 올 수 있고(2026-09-08 실물: 도자운반 토사/리핑암 두 줄), 그때 번호를 + # 물려주면 ITEM NO. 가 겹쳐 어느 줄인지 못 가린다. 머리글만 물려준다. + item_no = next_number(parent_no) + emitted.setdefault(leaf.code, item_no) result.rows.append(_leaf_row(item_no, leaf, item, unit_prices, result)) # ── 2) 공종을 못 고른 줄 — 이름째 남긴다 ──────────────────────────────────── diff --git a/B09_Estimation/B09_Estimation_UI_Page.ts b/B09_Estimation/B09_Estimation_UI_Page.ts index 01c4ca1e..603cbf96 100644 --- a/B09_Estimation/B09_Estimation_UI_Page.ts +++ b/B09_Estimation/B09_Estimation_UI_Page.ts @@ -14,18 +14,11 @@ * ========================================================================== */ import { ui_locales, currentLanguageIndex } from "@ui/ui_template_locale"; -import { - createButton, - createInputField, - showToast, -} from "@ui/ui_template_elements"; +import { createButton, createInputField, showToast } from "@ui/ui_template_elements"; import { createWorkflowLayout } from "@ui/ui_template_workflow_layout"; import { API_BASE_URL, CURRENT_PROJECT_ID_KEY } from "@config/config_frontend"; import { workflowSteps } from "../A00_Common/b_page_scaffold"; -import { - goToWorkflowStage, - WORKFLOW_STEP_ROUTES, -} from "../A00_Common/b_workflow_nav"; +import { goToWorkflowStage, WORKFLOW_STEP_ROUTES } from "../A00_Common/b_workflow_nav"; function L(key: keyof typeof ui_locales): string { return ui_locales[key][currentLanguageIndex]; @@ -234,10 +227,8 @@ function buildCostSheetTable(sheet: CostSheetDto): HTMLElement { for (const line of sheet.lines) { const tr = document.createElement("tr"); if (TOTAL_KEYS.has(line.key)) tr.classList.add("is-total"); - if (line.note === L("B09_Estimation_Adopted")) - tr.classList.add("is-adopted"); - if (line.note === L("B09_Estimation_NotAdopted")) - tr.classList.add("is-dropped"); + if (line.note === L("B09_Estimation_Adopted")) tr.classList.add("is-adopted"); + if (line.note === L("B09_Estimation_NotAdopted")) tr.classList.add("is-dropped"); const name = document.createElement("td"); name.className = "b09-left"; @@ -247,8 +238,7 @@ function buildCostSheetTable(sheet: CostSheetDto): HTMLElement { amount.textContent = formatWon(line.amount_krw); const rate = document.createElement("td"); - rate.textContent = - line.rate_percent === null ? "" : `${line.rate_percent}%`; + rate.textContent = line.rate_percent === null ? "" : `${line.rate_percent}%`; const basis = document.createElement("td"); basis.className = "b09-left"; @@ -394,13 +384,7 @@ function buildUnitPriceDetail( unit.className = "b09-left"; unit.textContent = row.unit; tr.append(name, spec, source, unit); - for (const value of [ - row.quantity, - row.material, - row.labor, - row.expense, - row.total, - ]) { + for (const value of [row.quantity, row.material, row.labor, row.expense, row.total]) { const cell = document.createElement("td"); cell.textContent = formatWon(value); tr.append(cell); @@ -415,12 +399,7 @@ function buildUnitPriceDetail( label.colSpan = 5; label.textContent = L("B09_Estimation_Col_Total"); sum.append(label); - for (const value of [ - detail.material, - detail.labor, - detail.expense, - detail.total, - ]) { + for (const value of [detail.material, detail.labor, detail.expense, detail.total]) { const cell = document.createElement("td"); cell.textContent = formatWon(value); sum.append(cell); @@ -548,12 +527,7 @@ function renderRateVersion(box: HTMLElement, sheet: CostSheetDto | null): void { if (!sheet) return; const rows: Array<[string, string]> = [ ["적용일", sheet.rate_version.effective_date || "—"], - [ - "지문", - sheet.rate_version.sha256 - ? `${sheet.rate_version.sha256.slice(0, 8)}…` - : "—", - ], + ["지문", sheet.rate_version.sha256 ? `${sheet.rate_version.sha256.slice(0, 8)}…` : "—"], ]; for (const [label, value] of rows) { const row = document.createElement("div"); @@ -573,7 +547,7 @@ function renderRateVersion(box: HTMLElement, sheet: CostSheetDto | null): void { const TAB_KEYS: Array<[string, keyof typeof ui_locales, boolean]> = [ ["cost_sheet", "B09_Estimation_Tab_CostSheet", true], - ["boq", "B09_Estimation_Tab_Boq", false], + ["boq", "B09_Estimation_Tab_Boq", true], ["unit_price", "B09_Estimation_Tab_UnitPrice", true], ["price_basis", "B09_Estimation_Tab_PriceBasis", false], ["machine", "B09_Estimation_Tab_Machine", false], @@ -582,10 +556,7 @@ const TAB_KEYS: Array<[string, keyof typeof ui_locales, boolean]> = [ ["base_data", "B09_Estimation_Tab_BaseData", false], ]; -function buildTabs( - active: string, - onSelect: (key: string) => void, -): HTMLElement { +function buildTabs(active: string, onSelect: (key: string) => void): HTMLElement { const bar = document.createElement("div"); bar.className = "b09-tabs"; for (const [key, labelKey, enabled] of TAB_KEYS) { @@ -623,8 +594,7 @@ function parseQuantities(text: string): Record { } function toRequestBody(form: CostFormState): Record { - const num = (value: string): string => - value.trim() === "" ? "0" : value.trim(); + const num = (value: string): string => (value.trim() === "" ? "0" : value.trim()); const body: Record = { direct_material_krw: num(form.direct_material_krw), direct_labor_krw: num(form.direct_labor_krw), @@ -642,10 +612,7 @@ function toRequestBody(form: CostFormState): Record { return body; } -async function fetchCostSheet( - projectId: string, - form: CostFormState, -): Promise { +async function fetchCostSheet(projectId: string, form: CostFormState): Promise { const response = await fetch( `${API_BASE_URL}/projects/${encodeURIComponent(projectId)}/estimation/cost`, { @@ -655,43 +622,72 @@ async function fetchCostSheet( body: JSON.stringify(toRequestBody(form)), }, ); - if (!response.ok) - throw new Error(`estimation cost failed: ${response.status}`); + if (!response.ok) throw new Error(`estimation cost failed: ${response.status}`); return (await response.json()) as CostSheetDto; } -async function fetchUnitPriceList( - projectId: string, -): Promise { +async function fetchUnitPriceList(projectId: string): Promise { const response = await fetch( `${API_BASE_URL}/projects/${encodeURIComponent(projectId)}/estimation/unit-prices`, { credentials: "include" }, ); - if (!response.ok) - throw new Error(`unit price list failed: ${response.status}`); + if (!response.ok) throw new Error(`unit price list failed: ${response.status}`); return (await response.json()) as UnitPriceListDto; } -async function fetchUnitPriceDetail( - projectId: string, - code: string, -): Promise { +async function fetchUnitPriceDetail(projectId: string, code: string): Promise { const response = await fetch( `${API_BASE_URL}/projects/${encodeURIComponent(projectId)}/estimation/unit-prices/${encodeURIComponent(code)}`, { credentials: "include" }, ); - if (!response.ok) - throw new Error(`unit price detail failed: ${response.status}`); + if (!response.ok) throw new Error(`unit price detail failed: ${response.status}`); return (await response.json()) as UnitPriceDetailDto; } +/** ④ 예산내역서 한 줄. 금액이 `null` 이면 **못 세운 것**이지 0 이 아니다. */ +interface BillRowDto { + item_no: string; + level: number; + code: string | null; + name: string; + spec: string; + unit: string; + quantity: string | null; + unit_price_krw: string | null; + amount_krw: string | null; + is_group: boolean; + in_bill: boolean; + note: string; +} + +interface BillDto { + rows: BillRowDto[]; + excluded: BillRowDto[]; + materials: BillRowDto[]; + summary: { + rows: number; + detail_rows: number; + body_total_krw: string; + missing: Array<{ name: string; reason: string; unit?: string; quantity?: string }>; + notes: string[]; + }; +} + +async function fetchBill(projectId: string): Promise { + const response = await fetch( + `${API_BASE_URL}/projects/${encodeURIComponent(projectId)}/estimation/bill`, + { credentials: "include" }, + ); + if (!response.ok) throw new Error(`estimation bill failed: ${response.status}`); + return (await response.json()) as BillDto; +} + async function confirmEstimationStage(projectId: string): Promise { const response = await fetch( `${API_BASE_URL}/projects/${encodeURIComponent(projectId)}/estimation/confirm`, { method: "POST", credentials: "include" }, ); - if (!response.ok) - throw new Error(`estimation confirm failed: ${response.status}`); + if (!response.ok) throw new Error(`estimation confirm failed: ${response.status}`); } /* ----------------------------------------------------------------------------- @@ -707,6 +703,7 @@ export async function renderB09Estimation(root: HTMLElement): Promise { let unitPriceList: UnitPriceListDto | null = null; let unitPriceDetail: UnitPriceDetailDto | null = null; let selectedUnitPrice: string | null = null; + let bill: BillDto | null = null; const main = document.createElement("div"); main.className = "b09-main"; @@ -762,12 +759,123 @@ export async function renderB09Estimation(root: HTMLElement): Promise { } }; + /** ④ 예산내역서 — B08 수량에 단가를 붙인 표. 못 세운 줄은 **그대로 보인다**. */ + const drawBoqTab = (): void => { + if (!bill) { + if (!projectId) { + const empty = document.createElement("div"); + empty.className = "b09-empty"; + empty.textContent = L("B09_Estimation_Boq_Failed"); + body.append(empty); + return; + } + const load = document.createElement("button"); + load.type = "button"; + load.className = "b09-btn"; + load.textContent = L("B09_Estimation_Boq_Load"); + load.addEventListener("click", () => { + void (async () => { + try { + bill = await fetchBill(projectId); + } catch { + bill = null; + window.alert(L("B09_Estimation_Boq_Failed")); + } + drawBody(); + })(); + }); + body.append(load); + return; + } + + const table = document.createElement("table"); + table.className = "b09-sheet"; + const head = document.createElement("thead"); + head.innerHTML = + "No.공종규격단위" + + "수량단가금액비고"; + const tbody = document.createElement("tbody"); + for (const row of bill.rows) { + const tr = document.createElement("tr"); + // 계층은 들여쓰기로 보인다 — 번호만으로는 깊이가 안 읽힌다. + const indent = " ".repeat(Math.max(0, (row.level - 1) * 2)); + const cells = row.is_group + ? [row.item_no, indent + row.name, "", "", "", "", "", ""] + : [ + row.item_no, + indent + row.name, + row.spec, + row.unit, + row.quantity ?? "", + row.unit_price_krw ?? "", + row.amount_krw ?? "", + row.note, + ]; + for (const text of cells) { + const td = document.createElement("td"); + td.textContent = text; + tr.append(td); + } + if (row.is_group) tr.style.fontWeight = "600"; + tbody.append(tr); + } + table.append(head, tbody); + body.append(table); + + const total = document.createElement("div"); + total.className = "b09-hint"; + total.textContent = `${L("B09_Estimation_Boq_Total")}: ${bill.summary.body_total_krw}`; + body.append(total); + + // ⚠ 자재비가 빠진 채 선 합계임을 숨기지 않는다. + const shortfall = document.createElement("div"); + shortfall.className = "b09-hint"; + shortfall.textContent = L("B09_Estimation_Boq_NoMaterialPrice"); + body.append(shortfall); + + if (bill.excluded.length > 0) { + const note = document.createElement("div"); + note.className = "b09-hint"; + note.textContent = + `${L("B09_Estimation_Boq_Excluded")}: ` + + bill.excluded.map((row) => `${row.name} ${row.quantity ?? ""}${row.unit}`).join(", "); + body.append(note); + } + + if (bill.summary.missing.length > 0) { + const note = document.createElement("div"); + note.className = "b09-hint"; + note.textContent = `${L("B09_Estimation_Boq_Missing")} (${bill.summary.missing.length})`; + body.append(note); + const list = document.createElement("ul"); + for (const item of bill.summary.missing) { + const li = document.createElement("li"); + li.textContent = `${item.name} — ${item.reason}`; + list.append(li); + } + body.append(list); + } + + if (bill.materials.length > 0) { + const note = document.createElement("div"); + note.className = "b09-hint"; + note.textContent = + `${L("B09_Estimation_Boq_Materials")}: ` + + bill.materials.map((row) => `${row.name} ${row.quantity ?? ""}${row.unit}`).join(", "); + body.append(note); + } + }; + const drawBody = (): void => { body.replaceChildren(); if (activeTab === "unit_price") { drawUnitPriceTab(); return; } + if (activeTab === "boq") { + drawBoqTab(); + return; + } if (activeTab !== "cost_sheet") { const empty = document.createElement("div"); empty.className = "b09-empty"; @@ -835,8 +943,7 @@ export async function renderB09Estimation(root: HTMLElement): Promise { sheet = await fetchCostSheet(projectId, form); renderRateVersion(panel.rateVersionBox, sheet); panel.hintBox.textContent = - sheet.suggested_profit_adjustment_krw && - sheet.suggested_profit_adjustment_krw !== "0" + sheet.suggested_profit_adjustment_krw && sheet.suggested_profit_adjustment_krw !== "0" ? `${L("B09_Estimation_Suggest_Adjust")} ${formatWon(sheet.suggested_profit_adjustment_krw)}` : ""; drawBody(); @@ -868,8 +975,7 @@ export async function renderB09Estimation(root: HTMLElement): Promise { mainContent: main, routes: WORKFLOW_STEP_ROUTES, onStepClick: (stepIndex) => { - if (projectId) - goToWorkflowStage(projectId, WORKFLOW_STEP_ROUTES[stepIndex]); + if (projectId) goToWorkflowStage(projectId, WORKFLOW_STEP_ROUTES[stepIndex]); }, }); root.append(layout.root); diff --git a/ui_template/ui_template_locale_b2.ts b/ui_template/ui_template_locale_b2.ts index 1c9317e4..df183a17 100644 --- a/ui_template/ui_template_locale_b2.ts +++ b/ui_template/ui_template_locale_b2.ts @@ -37,10 +37,7 @@ export const ui_locales_b2 = { "B04에서 분석해 둔 배수유역을 불러와, 지금 배치된 배관을 기준으로 세부유역(관이 담당하는 구역)을 다시 나눕니다. 관이 부족한 구간은 자동으로 보충합니다. B04 분석 결과가 없으면 B04에서 먼저 실행해야 합니다.", "Reloads the B04 drainage analysis and re-splits sub-basins around the current culverts, adding culverts where spacing requires. Run the analysis in B04 first if none exists.", ], - B05_Drainage_Btn_DeleteSelected: [ - "선택한 관 삭제", - "Delete selected culvert", - ], + B05_Drainage_Btn_DeleteSelected: ["선택한 관 삭제", "Delete selected culvert"], B05_Drainage_Btn_DeleteSelected_Tip: [ "지도에서 고른 배관 한 개를 지웁니다. 관을 먼저 눌러 고른 뒤에 쓸 수 있습니다.", "Removes the culvert selected on the map. Select a culvert marker first.", @@ -72,34 +69,19 @@ export const ui_locales_b2 = { "노선을 확정하면 배수유역도가 표시됩니다.", "The drainage map appears once the route is confirmed.", ], - B05_Drainage_Status_Analyzing: [ - "세부유역을 산정하는 중…", - "Computing sub-basins…", - ], - B05_Drainage_Status_NoBasin: [ - "산정된 배수유역이 없습니다.", - "No drainage basin was computed.", - ], + B05_Drainage_Status_Analyzing: ["세부유역을 산정하는 중…", "Computing sub-basins…"], + B05_Drainage_Status_NoBasin: ["산정된 배수유역이 없습니다.", "No drainage basin was computed."], B05_Drainage_Status_AnalyzeFailed: [ "세부유역 산정에 실패했습니다.", "Failed to compute sub-basins.", ], - B05_Drainage_Status_LoadingBase: [ - "배경도를 불러오는 중…", - "Loading the basemap…", - ], - B05_Drainage_Status_LoadingSheets: [ - "도엽 레이어를 불러오는 중…", - "Loading map sheet layers…", - ], + B05_Drainage_Status_LoadingBase: ["배경도를 불러오는 중…", "Loading the basemap…"], + B05_Drainage_Status_LoadingSheets: ["도엽 레이어를 불러오는 중…", "Loading map sheet layers…"], B05_Drainage_Status_NoSheets: [ "도엽 레이어가 없습니다. B04에서 임포트하세요.", "No map sheet layer found. Import them in B04.", ], - B05_Drainage_Status_LoadFailed: [ - "배경도를 불러오지 못했습니다.", - "Failed to load the basemap.", - ], + B05_Drainage_Status_LoadFailed: ["배경도를 불러오지 못했습니다.", "Failed to load the basemap."], B05_Drainage_Basin_Undecided: ["미정", "TBD"], /* 관 최대 규격 초과 계류 유역 — 관이 아니라 세월교 대상. 유효직경은 앞머리가 적는다 */ B05_Drainage_Basin_Bridge: ["세월교 제안", "Ford bridge proposal"], @@ -114,10 +96,7 @@ export const ui_locales_b2 = { "Tc {tc}min · I {i}mm/hr · Qd {q}m³/s (100yr, ×2.0)", ], /* {chainage}=측점 누가거리(m) */ - B05_Drainage_Basin_Chainage: [ - "측점 누가거리 {chainage}m", - "Station chainage {chainage}m", - ], + B05_Drainage_Basin_Chainage: ["측점 누가거리 {chainage}m", "Station chainage {chainage}m"], /* {d}=규격 스냅 관경(mm). 유효직경 이상인 가장 작은 레지스트리 선택지 */ B05_Drainage_Basin_RecPipe: ["Ø{d} 배관 제안", "Ø{d} pipe proposal"], /* 유효직경 Ø1,500 초과 — 교본 BOX암거 전환 유량 조건 */ @@ -142,10 +121,7 @@ export const ui_locales_b2 = { B05_Route_Field_Filter: ["지면 필터", "Ground filter"], B05_Route_Field_Method: ["지표면 표현", "Surface method"], B05_Route_Field_SurfaceId: ["지표면 모델 ID", "Surface model ID"], - B05_Route_Surface_Confirmed: [ - "확정 모델 #{id} · {method}", - "Confirmed model #{id} · {method}", - ], + B05_Route_Surface_Confirmed: ["확정 모델 #{id} · {method}", "Confirmed model #{id} · {method}"], B05_Route_Surface_NotConfirmed: [ "WF1에서 지표면 모델을 확정하세요.", "Confirm a surface model in WF1.", @@ -180,45 +156,27 @@ export const ui_locales_b2 = { ], B05_Route_Reset_Failed: ["초기화에 실패했습니다.", "Failed to reset."], B05_Route_Result_Title: ["경로 탐색 결과", "Route Result"], - B05_Route_Result_Empty: [ - "아직 계산된 경로가 없습니다.", - "No route computed yet.", - ], + B05_Route_Result_Empty: ["아직 계산된 경로가 없습니다.", "No route computed yet."], B05_Route_Result_Length: ["총 연장(m)", "Total length (m)"], B05_Route_Result_MinSlope: ["최소 경사", "Min slope"], B05_Route_Result_MaxSlope: ["최대 경사", "Max slope"], B05_Route_Result_MeanSlope: ["평균 경사", "Mean slope"], B05_Route_Result_Cost: ["비용 점수", "Cost score"], B05_Route_Result_Path: ["경로 파일", "Route file"], - B05_Route_Error_Project: [ - "먼저 프로젝트를 선택하세요.", - "Select a project first.", - ], + B05_Route_Error_Project: ["먼저 프로젝트를 선택하세요.", "Select a project first."], B05_Route_Error_Points: [ "시점과 종점 좌표를 모두 입력하세요.", "Enter both begin and end coordinates.", ], - B05_Route_Error_Filter: [ - "지면 필터 키를 입력하세요.", - "Enter a ground filter key.", - ], + B05_Route_Error_Filter: ["지면 필터 키를 입력하세요.", "Enter a ground filter key."], B05_Route_Solve_Success: ["경로 탐색을 완료했습니다.", "Route solved."], B05_Route_Solve_Failed: ["경로 탐색에 실패했습니다.", "Route solve failed."], B05_Route_Confirm_Success: ["경로를 확정했습니다.", "Route confirmed."], - B05_Route_Confirm_Failed: [ - "경로 확정에 실패했습니다.", - "Route confirm failed.", - ], - B05_Route_Group_SectionOptions: [ - "시작 측점 및 샘플링 설정", - "Start Station & Sampling Settings", - ], + B05_Route_Confirm_Failed: ["경로 확정에 실패했습니다.", "Route confirm failed."], + B05_Route_Group_SectionOptions: ["시작 측점 및 샘플링 설정", "Start Station & Sampling Settings"], B05_Route_Field_StationInterval: ["측점 간격(m)", "Station interval (m)"], B05_Route_Field_CrossHalfWidth: ["횡단 반폭(m)", "Cross half-width (m)"], - B05_Route_Field_CrossSample: [ - "횡단 샘플 간격(m)", - "Cross sample interval (m)", - ], + B05_Route_Field_CrossSample: ["횡단 샘플 간격(m)", "Cross sample interval (m)"], B05_Route_Field_LongSample: ["종단 샘플 간격(m)", "Long sample interval (m)"], B05_Route_Field_StationLines: ["측점 가로선", "Station cross lines"], B05_Route_Field_StationLabels: ["측점 라벨", "Station labels"], @@ -231,10 +189,7 @@ export const ui_locales_b2 = { B06_Profile_Field_Method: ["지표면 표현", "Surface method"], B06_Profile_Field_Crs: ["좌표계", "CRS"], B06_Profile_Group_Display: ["표시 옵션", "Display Options"], - B06_Profile_Field_VerticalExaggeration: [ - "높이 배율", - "Vertical exaggeration", - ], + B06_Profile_Field_VerticalExaggeration: ["높이 배율", "Vertical exaggeration"], B06_Profile_Field_Smooth: ["지표면 스무딩", "Smooth surface"], B06_Profile_Smooth_On: ["사용", "On"], B06_Profile_Smooth_Off: ["미사용", "Off"], @@ -261,18 +216,9 @@ export const ui_locales_b2 = { B06_Profile_Result_Length: ["종단 연장(m)", "Longitudinal length (m)"], B06_Profile_Result_CrossCount: ["횡단 개수", "Cross-section count"], B06_Profile_Result_Path: ["종단 파일", "Longitudinal file"], - B06_Profile_Error_Project: [ - "먼저 프로젝트를 선택하세요.", - "Select a project first.", - ], - B06_Profile_Confirm_Success: [ - "종·횡단을 확정했습니다.", - "Sections confirmed.", - ], - B06_Profile_Confirm_Failed: [ - "종·횡단 확정에 실패했습니다.", - "Section confirm failed.", - ], + B06_Profile_Error_Project: ["먼저 프로젝트를 선택하세요.", "Select a project first."], + B06_Profile_Confirm_Success: ["종·횡단을 확정했습니다.", "Sections confirmed."], + B06_Profile_Confirm_Failed: ["종·횡단 확정에 실패했습니다.", "Section confirm failed."], B06_Profile_Detail_Failed: [ "종·횡단 도면 데이터를 불러오지 못했습니다.", "Failed to load section drawing data.", @@ -298,18 +244,9 @@ export const ui_locales_b2 = { B06_Cross_Revet_Pipe: ["관 길이", "Pipe length"], B06_Cross_Revet_Outward: ["바깥", "outward"], B06_Cross_Revet_Inward: ["안쪽", "inward"], - B06_Cross_Revet_Left: [ - "왼쪽으로 — 관 길이 1m 단위", - "Move left — 1m of pipe length", - ], - B06_Cross_Revet_Right: [ - "오른쪽으로 — 관 길이 1m 단위", - "Move right — 1m of pipe length", - ], - B06_Cross_Revet_Reset: [ - "기슭막이 자동 자리로 초기화", - "Reset revetment to solved position", - ], + B06_Cross_Revet_Left: ["왼쪽으로 — 관 길이 1m 단위", "Move left — 1m of pipe length"], + B06_Cross_Revet_Right: ["오른쪽으로 — 관 길이 1m 단위", "Move right — 1m of pipe length"], + B06_Cross_Revet_Reset: ["기슭막이 자동 자리로 초기화", "Reset revetment to solved position"], B06_Cross_Revet_Inlet: ["기슭막이(유입)", "Revetment (inlet)"], B06_Cross_Revet_Outlet: ["기슭막이(유출)", "Revetment (outlet)"], /* 배관과 무관한 독립 기슭막이(구조물 정본 D군) — 2026-08-28. */ @@ -330,10 +267,7 @@ export const ui_locales_b2 = { "Cannot move further down the slope", ], B06_Cross_Height_Label: ["높이", "Height"], - B06_Cross_Move_Label: [ - "이동(좌우·사면 상하)", - "Move (lateral / along slope)", - ], + B06_Cross_Move_Label: ["이동(좌우·사면 상하)", "Move (lateral / along slope)"], B06_Cross_Lateral_Label: ["좌우", "Lateral"], B06_Cross_Slope_Label: ["상하(사면)", "Along slope"], B06_Cross_Height_Minus: ["높이 −0.1m", "Height −0.1m"], @@ -342,10 +276,7 @@ export const ui_locales_b2 = { "{mat} 높이 한계 {limit}m — 더 올리려면 재질을 변경하세요", "{mat} height limit {limit}m — change material to go higher", ], - B06_Cross_Height_Floor: [ - "최소 높이라 더 낮출 수 없습니다", - "Already at the minimum height", - ], + B06_Cross_Height_Floor: ["최소 높이라 더 낮출 수 없습니다", "Already at the minimum height"], B06_Cross_Basin_Limit_Pipe: [ "여기까지입니다 — 더 옮기면 배관 길이가 달라집니다(I형은 관을 감싸는 구조)", "Limit reached — moving further changes the pipe length (type I wraps the pipe)", @@ -513,10 +444,7 @@ export const ui_locales_b2 = { B06_Design_Area_Total: ["계", "Total"], /* 단위는 값 칸마다 붙이지 않고 표 좌상단(행제목 × 열제목 교차) 칸에 한 번만 적는다. */ B06_Design_Area_Unit: ["㎡", "㎡"], - B06_Design_Area_Highlight: [ - "누르면 해당 면적을 강조합니다", - "Click to highlight this area", - ], + B06_Design_Area_Highlight: ["누르면 해당 면적을 강조합니다", "Click to highlight this area"], B06_Design_Fill_Area: ["성토", "Fill"], B06_Design_Unset: ["미지정", "Not set"], B06_Design_DitchType_Legend: ["측구형식", "Ditch type"], @@ -557,14 +485,8 @@ export const ui_locales_b2 = { B06_Design_RockBoundary_Legend: ["암 경계", "Rock boundary"], B06_Design_RockBoundary_Up: ["암 경계선 올림", "Raise rock boundary"], B06_Design_RockBoundary_Down: ["암 경계선 내림", "Lower rock boundary"], - B06_Design_RockBoundary_Reset: [ - "암 경계선 기본값 복원", - "Reset rock boundary", - ], - B06_Design_Failed: [ - "횡단 설계 계산에 실패했습니다.", - "Failed to compute cross-section design.", - ], + B06_Design_RockBoundary_Reset: ["암 경계선 기본값 복원", "Reset rock boundary"], + B06_Design_Failed: ["횡단 설계 계산에 실패했습니다.", "Failed to compute cross-section design."], B06_Profile_Confirm_NeedDesign: [ "지반유형이 지정되지 않은 측점이 있습니다.", "Some stations have no ground type assigned.", @@ -577,29 +499,17 @@ export const ui_locales_b2 = { "표시 반폭만 바로 반영합니다(측점 설계 재계산 없음). 계산 반폭(20m)을 넘는 값만 재생성이 필요해 시간이 걸립니다.", "Applies the display half-width only (no per-station redesign). Only values beyond the sampled 20 m need regeneration.", ], - B06_View_Apply_Success: [ - "표시 반폭을 반영했습니다.", - "Display half-width applied.", - ], + B06_View_Apply_Success: ["표시 반폭을 반영했습니다.", "Display half-width applied."], /* --- B06 표준 횡단면 설정 패널 --- */ B06_Std_Title: ["표준 횡단면 설정", "Standard cross-section"], B06_Std_Group_Soil: ["토사 구간", "Soil section"], - B06_Std_Group_Rock: [ - "암 구간 (리핑/발파)", - "Rock section (ripping/blasting)", - ], + B06_Std_Group_Rock: ["암 구간 (리핑/발파)", "Rock section (ripping/blasting)"], B06_Std_Group_Paved: ["포장 구간", "Paved section"], B06_Std_Detail_Title: ["표준횡단면 상세값", "Standard cross-section details"], B06_Std_Section_Common: ["공통", "Common"], - B06_Std_Section_RockOnly: [ - "암 구간 — 다른 값만", - "Rock section - differing values", - ], - B06_Std_Section_PavedOnly: [ - "포장 구간 — 다른 값만", - "Paved section - differing values", - ], + B06_Std_Section_RockOnly: ["암 구간 — 다른 값만", "Rock section - differing values"], + B06_Std_Section_PavedOnly: ["포장 구간 — 다른 값만", "Paved section - differing values"], B06_Std_Field_RoadWidth: ["노폭(m)", "Road width (m)"], B06_Std_Field_ShoulderLeft: ["노견 좌(m)", "Shoulder L (m)"], B06_Std_Field_ShoulderRight: ["노견 우(m)", "Shoulder R (m)"], @@ -622,10 +532,7 @@ export const ui_locales_b2 = { "패널 설정을 전체 측점에 반영했습니다.", "Applied panel settings to all stations.", ], - B06_Std_Load_Title: [ - "다른 프로젝트에서 불러오기", - "Load from another project", - ], + B06_Std_Load_Title: ["다른 프로젝트에서 불러오기", "Load from another project"], B06_Std_Load_Select: ["프로젝트 선택", "Select project"], B06_Std_Load_Placeholder: ["— 프로젝트 선택 —", "— Select a project —"], B06_Std_Load_Empty: [ @@ -635,10 +542,7 @@ export const ui_locales_b2 = { B06_Std_Load_Loading: ["불러오는 중…", "Loading…"], B06_Std_Load_Apply: ["현재 설정에 적용", "Apply to current settings"], B06_Std_Load_Applied: ["적용되었습니다.", "Applied."], - B06_Std_Load_Failed: [ - "설계값을 불러오지 못했습니다.", - "Failed to load design values.", - ], + B06_Std_Load_Failed: ["설계값을 불러오지 못했습니다.", "Failed to load design values."], B06_Std_Load_None: [ "선택한 프로젝트에 저장된 설계값이 없습니다.", "The selected project has no saved design values.", @@ -665,10 +569,7 @@ export const ui_locales_b2 = { "Side panel will be configured after the upstream data spec is finalized.", ], B07_Cad_Loading: ["도면을 불러오는 중...", "Loading drawing..."], - B07_Cad_Load_Failed: [ - "도면을 불러오지 못했습니다.", - "Failed to load drawing.", - ], + B07_Cad_Load_Failed: ["도면을 불러오지 못했습니다.", "Failed to load drawing."], B07_Info_Ground_Title: ["지반정보", "Ground info"], B07_Info_Plan_Title: ["계획정보", "Plan info"], B07_Info_GroundType: ["지반유형", "Ground type"], @@ -683,10 +584,7 @@ export const ui_locales_b2 = { B07_Info_FillArea: ["성토 단면적", "Fill area"], B07_Info_Provisional: ["잠정", "Provisional"], B07_Info_Confirmed: ["확정", "Confirmed"], - B07_Info_NoDesign: [ - "지반·계획 지정 데이터가 없습니다.", - "No ground/plan designation data.", - ], + B07_Info_NoDesign: ["지반·계획 지정 데이터가 없습니다.", "No ground/plan designation data."], B07_Info_Station: ["측점", "Station"], /* 장(여러 측점을 담은 횡단 도면)은 측점 단위 지반·계획 정보를 갖지 않는다 — 제목을 「측점」으로 달면 어느 측점 값인지 오해된다(2026-09-03 정리). */ @@ -712,10 +610,7 @@ export const ui_locales_b2 = { "Failed to confirm the quantity stage.", ], B08_Quantity_Tab_Earthwork: ["토적표", "Earthwork Table"], - B08_Quantity_Grid_Loading: [ - "토적표를 만드는 중입니다…", - "Building the earthwork table…", - ], + B08_Quantity_Grid_Loading: ["토적표를 만드는 중입니다…", "Building the earthwork table…"], B08_Quantity_Grid_Empty: [ "측점 단면적이 아직 없습니다. 횡단 설계를 먼저 마치세요.", "No cross-section areas yet. Finish the cross-section design first.", @@ -756,15 +651,31 @@ export const ui_locales_b2 = { B08_Quantity_Unsaved: ["저장하지 않은 변경이 있습니다.", "You have unsaved changes."], B08_Quantity_Side_Method: ["산출법", "Method"], B08_Quantity_Side_Method_Value: ["평균단면적법", "Average end area"], - B08_Quantity_Side_Factors: [ - "토량환산계수(다짐)", - "Conversion factors (compacted)", - ], + B08_Quantity_Side_Factors: ["토량환산계수(다짐)", "Conversion factors (compacted)"], /* --- B09_Estimation 원가계산 --- */ B09_Estimation_Title: ["원가계산", "Cost Estimate"], B09_Estimation_Tab_CostSheet: ["공사원가계산서", "Cost Statement"], B09_Estimation_Tab_Boq: ["설계내역서", "Bill of Quantities"], + B09_Estimation_Boq_Total: ["내역서 합계", "Bill total"], + B09_Estimation_Boq_Excluded: [ + "검산용 줄 — 수량만 보이고 금액을 매기지 않습니다", + "Check rows — quantity only, never priced", + ], + B09_Estimation_Boq_Missing: [ + "금액을 못 세운 줄 — 0 으로 채우지 않고 그대로 보입니다", + "Rows without an amount — shown as-is, not zero-filled", + ], + B09_Estimation_Boq_Materials: ["자재 (별도 벌)", "Materials (separate set)"], + B09_Estimation_Boq_NoMaterialPrice: [ + "사급 자재 단가가 아직 없어 자재비가 빠져 있습니다 — 지금 합계는 모자란 값입니다.", + "Contractor-supplied material prices are missing, so material cost is absent — this total is short.", + ], + B09_Estimation_Boq_Load: ["B08 수량 불러오기", "Load B08 quantities"], + B09_Estimation_Boq_Failed: [ + "B08 인계 자료를 받지 못했습니다.", + "Could not load the B08 handoff.", + ], B09_Estimation_Tab_UnitPrice: ["일위대가", "Unit Price"], B09_Estimation_Tab_PriceBasis: ["단가산출근거", "Price Basis"], B09_Estimation_Tab_Machine: ["중기", "Equipment"], @@ -797,10 +708,7 @@ export const ui_locales_b2 = { "목표 도급공사비를 맞추려면 이윤을 이만큼 깎아야 합니다 — 적용하려면 조정액에 직접 넣으세요.", "To hit the target contract amount, profit must be reduced by this much — enter it in Adjustment to apply.", ], - B09_Estimation_Calc_Failed: [ - "원가계산에 실패했습니다.", - "Cost calculation failed.", - ], + B09_Estimation_Calc_Failed: ["원가계산에 실패했습니다.", "Cost calculation failed."], B09_Estimation_Confirm_Success: [ "원가계산 단계를 확정했습니다.", "Cost estimate stage confirmed.", @@ -812,10 +720,7 @@ export const ui_locales_b2 = { B09_Estimation_Tab_Pending: ["준비 중", "Coming soon"], B09_Estimation_UP_List: ["일위대가 목록표", "Unit Price Index"], B09_Estimation_UP_Detail: ["일위대가표", "Unit Price Sheet"], - B09_Estimation_UP_Pick: [ - "목록에서 항목을 고르세요.", - "Pick an item from the index.", - ], + B09_Estimation_UP_Pick: ["목록에서 항목을 고르세요.", "Pick an item from the index."], B09_Estimation_UP_Drill: ["펼쳐 보기", "Open"], B09_Estimation_Col_Name: ["명칭", "Name"], B09_Estimation_Col_Spec: ["규격", "Spec"], @@ -827,10 +732,7 @@ export const ui_locales_b2 = { B09_Estimation_Col_Expense: ["경비", "Expense"], B09_Estimation_Col_Total: ["합계", "Total"], B09_Estimation_UP_SumOk: ["합계 = 재료+노무+경비 일치", "Total = M+L+E ✓"], - B09_Estimation_UP_SumBad: [ - "⚠ 합계가 재료+노무+경비와 다릅니다", - "⚠ Total ≠ M+L+E", - ], + B09_Estimation_UP_SumBad: ["⚠ 합계가 재료+노무+경비와 다릅니다", "⚠ Total ≠ M+L+E"], B09_Estimation_UP_RoundGap: [ "행별로 0.1원 미만을 버려 합계 끝자리가 다릅니다 (정상). 자르기 전 합계:", "Rows are floored to 0.1 KRW, so the total's last digit differs (expected). Unrounded total:", @@ -840,10 +742,7 @@ export const ui_locales_b2 = { "공종별 수량 (한 줄에 「공종코드=수량」)", 'Quantities (one "code=qty" per line)', ], - B09_Estimation_Src_Manual: [ - "수량 원천: 손입력(직접비 직접 입력)", - "Source: manual direct costs", - ], + B09_Estimation_Src_Manual: ["수량 원천: 손입력(직접비 직접 입력)", "Source: manual direct costs"], B09_Estimation_Src_Quantities: [ "수량 원천: 손입력 공종 수량 × 일위대가", "Source: manual quantities × unit prices", @@ -852,10 +751,7 @@ export const ui_locales_b2 = { "수량은 있는데 단가가 없는 공종 — 총액에서 빠졌습니다:", "Quantities without a unit price — excluded from the total:", ], - B09_Estimation_UP_Load_Failed: [ - "일위대가를 못 불러왔습니다.", - "Failed to load unit prices.", - ], + B09_Estimation_UP_Load_Failed: ["일위대가를 못 불러왔습니다.", "Failed to load unit prices."], /* --- B10_Payment 결재 --- */ B10_Payment_Title: ["결재", "Payment"], @@ -873,10 +769,7 @@ export const ui_locales_b2 = { B10_Payment_Deposit_Title: ["계좌 입금 안내", "Bank Transfer Guide"], B10_Payment_Deposit_Account: ["입금 계좌", "Deposit Account"], B10_Payment_Deposit_Amount: ["입금 금액", "Deposit Amount"], - B10_Payment_Deposit_Pending: [ - "견적 확정 후 표시", - "Shown after estimate confirmation", - ], + B10_Payment_Deposit_Pending: ["견적 확정 후 표시", "Shown after estimate confirmation"], B10_Payment_Deposit_Note: [ "입금 확인 후 설계문서와 DWG 다운로드가 허용됩니다.", "Design documents and DWG downloads are enabled after the deposit is confirmed.", From a8f0248bf7bd040924ad843414299e22fb432e2e Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 01:42:20 +0900 Subject: [PATCH 10/12] =?UTF-8?q?feat(B09):=20=EC=9E=91=EC=97=85=EC=A1=B0+?= =?UTF-8?q?=EC=8B=9C=EA=B3=B5=EB=9F=89=20=ED=91=9C=20=EC=9D=BD=EA=B8=B0=20?= =?UTF-8?q?=E2=80=94=20=EC=9C=A0=EB=A1=9C=ED=8F=BC=20=EB=85=B8=EB=AC=B4=20?= =?UTF-8?q?=EC=84=B1=EB=A6=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 품셈에는 소요량 대신 **「작업조 몇 인이 하루 몇 ㎡」**로 주는 표가 11건 있음. 1단위당 품 = 인원 ÷ 시공량. 행-자원으로 읽으면 **인원 4를 소요량 4로** 오해해 35배 부풀어, 형태 판정보다 **먼저** 가름 (유로폼 12-38-3 은 마스터에서 `reference` 로 찍혀 형태 필터에 버려지고 있었음) - 유로폼 설치·해체: 형틀목공 4 ÷ 35 = 0.1143인/㎡, 보통인부 1 ÷ 35 = 0.0286인/㎡ → 유형별 갈래로 세움 (복잡 51,009.1 · 보통 36,435.0 · 간단 31,880.7 원/㎡) - 유형은 우리가 안 고름 — 품셈 12-38-3 [유형] 이 「보통: 측구·수로·옹벽」으로 정해 두었으므로 갈래로 세우고 고르는 것은 B08 (철근 12-3 [주]① 과 같은 모양) - ⚠ 못 푼 작업조 줄이 있으면 **표째 버림** — 평떼 시비에서 「트럭 2.5ton 1대」가 조용히 빠지고 노무만으로 28.6원/㎡ 이 서 있었음(분포 최소값이 233 → 28.5 로 떨어진 것으로 발견) - 이름 안에 공백이 든 줄(「비 계 공」)은 한 이름으로 먼저 시도 — 공백을 구분자로만 보면 그런 표가 통째로 버려짐 결과: 자원 축 246 → 256, 일위대가 139 → 145, 최소값 233.4 유지 검증: pytest 181 통과(신규 6 — 손계산 대조 + 오탐 짝 시험 포함) Co-Authored-By: Claude Opus 5 (1M context) --- B09_Estimation/B09_Estimation_CrewOutput.py | 240 ++++++++++++++ B09_Estimation/B09_Estimation_ResourceAxis.py | 9 + .../resource_axis_2026-01-01.json | 294 ++++++++++++++---- .../unmatched_2026-01-01.json | 32 +- 4 files changed, 508 insertions(+), 67 deletions(-) create mode 100644 B09_Estimation/B09_Estimation_CrewOutput.py diff --git a/B09_Estimation/B09_Estimation_CrewOutput.py b/B09_Estimation/B09_Estimation_CrewOutput.py new file mode 100644 index 00000000..81bc628b --- /dev/null +++ b/B09_Estimation/B09_Estimation_CrewOutput.py @@ -0,0 +1,240 @@ +"""B09 원가계산 — **작업조 + 시공량** 표 읽기 (2026-09-08). + +품셈에는 소요량을 직접 안 주고 **「작업조 몇 인이 하루 몇 ㎡」** 로 주는 표가 있다. + + 구 분 | 단 위 | 수 량 | 시 공 량 (㎡) + | | | 복잡 보통 간단 + 형틀목공 | 인 | 4 | 25 35 40 + 보통인부 | 인 | 1 | + + 1단위당 품 = 인원 ÷ 시공량 (유로폼 12-38-3: 형틀목공 4 ÷ 35 = 0.1143 인/㎡) + +**유형은 우리가 안 고른다.** 품셈 12-38-3 [유형] 표가 「보통 : 측구, 수로, 옹벽 …」로 +정해 두었으므로 **갈래(`#복잡`·`#보통`·`#간단`)로 세워 두고 고르는 것은 B08**에 맡긴다 +(철근 12-3 [주]① 과 같은 모양). + +⚠ **뭉쳐 온 칸을 짝지어 읽는다.** 이름·단위·인원이 한 칸에 붙어 온다 +(`형틀목공 보통인부` | `인 인` | `4 1`). **개수가 안 맞으면 그 표를 통째로 버린다** — +자리를 밀어 읽으면 다른 직종의 품이 붙는다(오늘 여러 번 겪은 자리). +""" + +from __future__ import annotations + +import re +from dataclasses import dataclass +from decimal import Decimal +from typing import Any + +from B09_Estimation.B09_Estimation_ResourceAxis import ( + AxisResult, + ResourceCatalog, + ResourceRow, + UnmatchedRow, + parse_amount, + split_name_and_spec, +) + +_RE_NUMBER = re.compile(r"^\d+(?:,\d{3})*(?:\.\d+)?$") +#: 시공량 열을 알아보는 말. 「시 공 량 (㎡)」처럼 띄어쓰기가 섞여 온다. +_OUTPUT_WORDS = ("시공량", "기준시공량", "적용시공량") + + +@dataclass(frozen=True) +class CrewMember: + """작업조 한 사람(또는 한 대).""" + + code: str + name: str + spec: str + kind: str + count: Decimal + + +@dataclass(frozen=True) +class CrewTable: + """작업조 표 한 장. `outputs` 는 유형별 시공량 — 갈래가 하나면 이름이 빈 문자열.""" + + members: tuple[CrewMember, ...] + outputs: tuple[tuple[str, Decimal], ...] + + def amount_of(self, member: CrewMember, output: Decimal) -> Decimal: + """1단위당 품 = 인원 ÷ 시공량.""" + return member.count / output + + +def _normalize(text: str) -> str: + return " ".join(str(text).split()) + + +def _is_output_header(cell: str) -> bool: + tight = "".join(str(cell).split()) + return any(word in tight for word in _OUTPUT_WORDS) + + +def _numbers_in(cell: str) -> list[Decimal]: + """한 칸에 뭉쳐 온 수들 — 「4 1」 → [4, 1].""" + found: list[Decimal] = [] + for token in _normalize(cell).split(" "): + if _RE_NUMBER.match(token): + found.append(Decimal(token.replace(",", ""))) + return found + + +def output_columns(table: dict[str, Any]) -> list[int]: + """시공량 열의 번호. 없으면 빈 목록 — 작업조 표가 아니다.""" + headers = table.get("condition_note") or [] + return [index for index, cell in enumerate(headers) if _is_output_header(cell)] + + +def parse_crew_table( + table: dict[str, Any], + catalog: ResourceCatalog, +) -> CrewTable | str: + """작업조 표를 읽는다. 못 읽으면 **사유 문자열**을 돌려준다(빈 표를 만들지 않는다).""" + if not output_columns(table): + return "시공량 열이 없습니다" + + rows = [[str(c).strip() for c in row] for row in (table.get("raw_row") or [])] + if not rows: + return "빈 표입니다" + + members: list[CrewMember] = [] + outputs: list[Decimal] = [] + labels: list[str] = [] + + for row in rows: + if not row or not row[0]: + continue + head = row[0] + # 첫 칸에 자원 이름이 뭉쳐 올 수 있다 — 「형틀목공 보통인부」. + # ⚠ 이름 안에 공백이 든 표가 있다 — 「조 경 공」·「비 계 공」. 공백을 구분자로만 + # 보면 그런 줄이 통째로 안 풀린다. **한 이름으로 먼저 시도**하고, 안 되면 쪼갠다. + tight = "".join(_normalize(head).split(" ")) + single = _resolve(catalog, tight) + if single is not None: + names, resolved = [tight], [single] + else: + names = [part for part in _normalize(head).split(" ") if part] + resolved = [_resolve(catalog, name) for name in names] + if not all(resolved): + # 자원이 아니면 유형 라벨 줄로 본다 — 「복 잡 | 보 통 | 간 단」. + if not _numbers_in(" ".join(row)): + if not members: + labels = [_normalize(cell) for cell in row if _normalize(cell)] + continue + # ⚠ **수가 있는데 이름을 못 푼 줄은 작업조의 한 몫**이다 — 조용히 건너뛰면 + # 그 몫이 빠진 채 단가가 선다(2026-09-08: 평떼 시비에서 「트럭 2.5ton 1대」가 + # 빠지고 노무만으로 28.6원/㎡ 이 섰다). 표를 통째로 버린다. + return f"작업조 줄 「{_normalize(head)[:20]}」을 못 풀었습니다" + + counts = _counts_of(row, len(resolved)) + if counts is None: + return f"인원 수가 이름 {len(resolved)} 개와 안 맞습니다" + for entry, count in zip(resolved, counts): + members.append( + CrewMember( + code=entry.code, + name=entry.name, + spec=entry.spec, + kind=entry.kind, + count=count, + ) + ) + # 시공량은 보통 **첫 작업조 줄**에 붙어 온다. + if not outputs: + outputs = _outputs_of(row, counts) + + if not members: + return "작업조 줄을 못 찾았습니다" + if not outputs: + return "시공량 값을 못 찾았습니다" + if labels and len(labels) != len(outputs): + # 라벨과 값의 개수가 다르면 **어느 유형인지 단정할 수 없다** — 읽지 않는다. + return f"유형 {len(labels)} 개와 시공량 {len(outputs)} 개가 안 맞습니다" + + named = tuple((labels[index] if labels else "", value) for index, value in enumerate(outputs)) + return CrewTable(members=tuple(members), outputs=named) + + +def _resolve(catalog: ResourceCatalog, name_cell: str): + name, spec = split_name_and_spec(name_cell) + entry = catalog.resolve(name, spec) + if entry is not None: + return entry + if spec: + return None + found = catalog.by_name(name) + return found[0] if len(found) == 1 else None + + +def _counts_of(row: list[str], wanted: int) -> list[Decimal] | None: + """이름 개수와 같은 만큼의 인원 수를 가진 칸을 찾는다. 없으면 `None`.""" + for cell in row[1:]: + numbers = _numbers_in(cell) + if len(numbers) == wanted: + return numbers + return None + + +def _outputs_of(row: list[str], counts: list[Decimal]) -> list[Decimal]: + """인원 칸 **뒤**에 오는 수들이 시공량이다.""" + seen_counts = False + values: list[Decimal] = [] + for cell in row[1:]: + numbers = _numbers_in(cell) + if not numbers: + continue + if not seen_counts and numbers == counts: + seen_counts = True + continue + if seen_counts: + values.extend(numbers) + return values + + +def match_crew_table( + node: dict[str, Any], + table: dict[str, Any], + catalog: ResourceCatalog, + result: AxisResult, + unit: str, +) -> bool: + """작업조 표를 자원 축 줄로 바꾼다. 그런 표가 아니면 `False`.""" + if not output_columns(table): + return False + + work_item_code = node.get("work_item_code", "") + table_id = str(table.get("pum_table_id", "")) + form = str(table.get("pum_form", "")) + parsed = parse_crew_table(table, catalog) + if isinstance(parsed, str): + result.unmatched.append( + UnmatchedRow( + work_item_code=work_item_code, + pum_table_id=table_id, + cell=_normalize(" | ".join(str(c) for c in (table.get("condition_note") or []))), + reason=f"작업조 표를 못 읽었습니다 — {parsed}", + ) + ) + return True # 다른 길로 보내지 않는다 — 행-자원으로 읽으면 인원을 소요량으로 오해한다 + + for index, (label, output) in enumerate(parsed.outputs): + if output <= 0: + continue + for member in parsed.members: + result.rows.append( + ResourceRow( + work_item_code=work_item_code, + pum_table_id=table_id, + pum_form=form, + resource_kind=member.kind, + resource_code=member.code, + resource_name=member.name, + resource_spec=member.spec, + amount=parsed.amount_of(member, output), + amount_unit=unit, + raw_row_index=index, + variant=label, + ) + ) + return True diff --git a/B09_Estimation/B09_Estimation_ResourceAxis.py b/B09_Estimation/B09_Estimation_ResourceAxis.py index 2c9a4a06..9f67f8d1 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis.py @@ -472,6 +472,15 @@ def match_table( result: AxisResult, ) -> None: """표 하나에 자원 축을 붙인다. 값이 안 서면 `unmatched` 로 보낸다.""" + from B09_Estimation.B09_Estimation_CrewOutput import match_crew_table + + # ⚠ **작업조 표는 형태 판정보다 먼저 가른다.** 「형틀목공 4인 / 시공량 35㎡」 표는 + # 마스터에서 `reference` 로 찍혀 형태 필터에 먼저 걸려 버려지고 있었다(유로폼 12-38-3). + # 그 표는 모양이 스스로를 말한다 — 시공량 열 + 작업조 줄이 있으면 그것이다. + # 행-자원으로 읽으면 **인원 4를 소요량 4로** 오해해 35배 부푼다. + if match_crew_table(node, table, catalog, result, table.get("basis_unit") or ""): + return + form = table.get("pum_form", "") if form in NON_WORK_ITEM_FORMS or form in UNUSABLE_FORMS or form not in USABLE_FORMS: result.skipped_forms[form] = result.skipped_forms.get(form, 0) + 1 diff --git a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json index d6b0bfbe..41542a88 100644 --- a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json +++ b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json @@ -553,34 +553,6 @@ "variant": "", "work_item_code": "FP-05-22-03" }, - { - "amount": "2", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0132", - "raw_row_index": 0, - "resource_code": "1038", - "resource_kind": "labor", - "resource_name": "조경공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-05-22-04" - }, - { - "amount": "1", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0132", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-05-22-04" - }, { "amount": "0.0084", "amount_unit": "㎡", @@ -763,6 +735,62 @@ "variant": "", "work_item_code": "FP-05-28-01" }, + { + "amount": "0.02222222222222222222222222222", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0145", + "raw_row_index": 0, + "resource_code": "1038", + "resource_kind": "labor", + "resource_name": "조경공", + "resource_spec": "", + "variant": "폭 1.5m 이하", + "work_item_code": "FP-05-28-02" + }, + { + "amount": "0.01111111111111111111111111111", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0145", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "폭 1.5m 이하", + "work_item_code": "FP-05-28-02" + }, + { + "amount": "0.01538461538461538461538461538", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0145", + "raw_row_index": 1, + "resource_code": "1038", + "resource_kind": "labor", + "resource_name": "조경공", + "resource_spec": "", + "variant": "폭 2.0m 이하", + "work_item_code": "FP-05-28-02" + }, + { + "amount": "0.007692307692307692307692307692", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0145", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "폭 2.0m 이하", + "work_item_code": "FP-05-28-02" + }, { "amount": "3.00", "amount_unit": "", @@ -2023,6 +2051,34 @@ "variant": "소형구조물", "work_item_code": "FP-12-01-03" }, + { + "amount": "0.009090909090909090909090909091", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0362", + "raw_row_index": 0, + "resource_code": "1006", + "resource_kind": "labor", + "resource_name": "비계공", + "resource_spec": "", + "variant": "설 치", + "work_item_code": "FP-12-02" + }, + { + "amount": "0.006060606060606060606060606061", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0362", + "raw_row_index": 1, + "resource_code": "1006", + "resource_kind": "labor", + "resource_name": "비계공", + "resource_spec": "", + "variant": "철 거", + "work_item_code": "FP-12-02" + }, { "amount": "1.07", "amount_unit": "ton", @@ -2304,35 +2360,7 @@ "work_item_code": "FP-12-05" }, { - "amount": "1", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0339", - "raw_row_index": 1, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-07-01" - }, - { - "amount": "2", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0339", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-07-01" - }, - { - "amount": "2", + "amount": "0.002857142857142857142857142857", "amount_unit": "", "group_ratio_pct": null, "pum_form": "requirement", @@ -2346,12 +2374,12 @@ "work_item_code": "FP-12-07-02" }, { - "amount": "3", + "amount": "0.004285714285714285714285714286", "amount_unit": "", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0340", - "raw_row_index": 1, + "raw_row_index": 0, "resource_code": "1002", "resource_kind": "labor", "resource_name": "보통인부", @@ -2779,6 +2807,90 @@ "variant": "", "work_item_code": "FP-12-35" }, + { + "amount": "0.16", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0395", + "raw_row_index": 0, + "resource_code": "1007", + "resource_kind": "labor", + "resource_name": "형틀목공", + "resource_spec": "", + "variant": "복 잡", + "work_item_code": "FP-12-38-03" + }, + { + "amount": "0.04", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0395", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "복 잡", + "work_item_code": "FP-12-38-03" + }, + { + "amount": "0.1142857142857142857142857143", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0395", + "raw_row_index": 1, + "resource_code": "1007", + "resource_kind": "labor", + "resource_name": "형틀목공", + "resource_spec": "", + "variant": "보 통", + "work_item_code": "FP-12-38-03" + }, + { + "amount": "0.02857142857142857142857142857", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0395", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "보 통", + "work_item_code": "FP-12-38-03" + }, + { + "amount": "0.1", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0395", + "raw_row_index": 2, + "resource_code": "1007", + "resource_kind": "labor", + "resource_name": "형틀목공", + "resource_spec": "", + "variant": "간 단", + "work_item_code": "FP-12-38-03" + }, + { + "amount": "0.025", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0395", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "간 단", + "work_item_code": "FP-12-38-03" + }, { "amount": "0.5", "amount_unit": "㎥", @@ -3422,6 +3534,62 @@ "resource_spec": "", "variant": "", "work_item_code": "FP-13-15-01" + }, + { + "amount": "0.02222222222222222222222222222", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0449", + "raw_row_index": 0, + "resource_code": "1038", + "resource_kind": "labor", + "resource_name": "조경공", + "resource_spec": "", + "variant": "폭 1.5m 이하", + "work_item_code": "FP-13-16-02" + }, + { + "amount": "0.01111111111111111111111111111", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0449", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "폭 1.5m 이하", + "work_item_code": "FP-13-16-02" + }, + { + "amount": "0.01538461538461538461538461538", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0449", + "raw_row_index": 1, + "resource_code": "1038", + "resource_kind": "labor", + "resource_name": "조경공", + "resource_spec": "", + "variant": "폭 2.0m 이하", + "work_item_code": "FP-13-16-02" + }, + { + "amount": "0.007692307692307692307692307692", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "reference", + "pum_table_id": "F0449", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "폭 2.0m 이하", + "work_item_code": "FP-13-16-02" } ], "schema_version": "1.0", @@ -3436,12 +3604,12 @@ "sha256": "fe454c56c9dc01ad7dae04a8f90d776d08c5ce33badeadb2606b35234bfce7eb" }, "stats": { - "rows": 244, + "rows": 256, "skipped_forms": { "coefficient": 19, - "reference": 98, - "undetermined": 76 + "reference": 92, + "undetermined": 75 }, - "unmatched": 312 + "unmatched": 316 } } \ No newline at end of file diff --git a/resources/data_cost_resource_axis/unmatched_2026-01-01.json b/resources/data_cost_resource_axis/unmatched_2026-01-01.json index 2926fae4..06e7a35f 100644 --- a/resources/data_cost_resource_axis/unmatched_2026-01-01.json +++ b/resources/data_cost_resource_axis/unmatched_2026-01-01.json @@ -2,6 +2,12 @@ "effective_date": "2026-01-01", "note": "못 맞춘 자원 이름. 빈칸으로 두지 않고 여기 모은다. 기계·자재 카탈로그가 아직 없어 그 계열은 전부 여기로 온다.", "rows": [ + { + "cell": "구분 | 조 건 | 적용시공량", + "pum_table_id": "F0038", + "reason": "작업조 표를 못 읽었습니다 — 작업조 줄 「1」을 못 풀었습니다", + "work_item_code": "FP-01-04-26" + }, { "cell": "보통휘발유 (주연료)", "pum_table_id": "F0042", @@ -417,9 +423,9 @@ "work_item_code": "FP-05-20" }, { - "cell": "트럭", + "cell": "구 분 | 규 격 | 단위 | 수량 | 시공량(㎡)", "pum_table_id": "F0132", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "작업조 표를 못 읽었습니다 — 작업조 줄 「트럭」을 못 풀었습니다", "work_item_code": "FP-05-22-04" }, { @@ -1370,6 +1376,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-10-10-02" }, + { + "cell": "슬 럼 프 | 기준 시공량", + "pum_table_id": "F0356", + "reason": "작업조 표를 못 읽었습니다 — 작업조 줄 「8 ~ 12 cm」을 못 풀었습니다", + "work_item_code": "FP-12-02" + }, { "cell": "합 판", "pum_table_id": "F0336", @@ -1407,9 +1419,21 @@ "work_item_code": "FP-12-05" }, { - "cell": "형틀목공 보통인부", + "cell": "배치인원(인) | 포장두께 | 시공량(㎥)", + "pum_table_id": "F0338", + "reason": "작업조 표를 못 읽었습니다 — 작업조 줄 「30㎝」을 못 풀었습니다", + "work_item_code": "FP-12-06" + }, + { + "cell": "배치인원(인) | 사용기계(1대) | 시공량(m)", + "pum_table_id": "F0339", + "reason": "작업조 표를 못 읽었습니다 — 유형 4 개와 시공량 1 개가 안 맞습니다", + "work_item_code": "FP-12-07-01" + }, + { + "cell": "배치인원(인) | 시공량(거푸집연장 m)", "pum_table_id": "F0341", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "작업조 표를 못 읽었습니다 — 작업조 줄 「20㎝ ≤ 포장두께 ≤ 25㎝」을 못 풀었습니다", "work_item_code": "FP-12-08" }, { From 0728e4bae700e26d351b66ca258e5dbccd408034 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 01:48:47 +0900 Subject: [PATCH 11/12] =?UTF-8?q?fix(B09):=20=EA=B8=B0=EC=A2=85=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=ED=91=9C=EA=B8=B0=20=EB=A7=9E=EC=B6=A4=20?= =?UTF-8?q?+=20=EA=B3=B5=EC=8B=9D=20=EA=B3=84=EC=88=98=20=EC=A4=84?= =?UTF-8?q?=EC=9D=84=20=EC=9E=90=EC=9B=90=EC=9C=BC=EB=A1=9C=20=EC=95=88=20?= =?UTF-8?q?=EC=85=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 석재 할증률을 찾으러 12·13장 본문을 훑다 발견한 둘 - 품셈은 같은 기종을 「굴 삭 기」·「굴착기」·「유압식백호우」로 섞어 적음. 메쌓기 13-6-1 의 「굴 삭 기 (무한궤도)」가 안 붙어 **장비 몫이 통째로 빠져 있었음**. 이름 안 공백 제거 + 기종 별칭만 맞춤(규격은 안 건드림) - ⚠ 그 정규화가 새 오독을 열었음 — 측구터파기의 「유압식백호우 … | k | 0.9」 줄이 자원으로 잡혀 **버킷계수 0.9 를 소요량으로** 읽었음(사용료 0.9시간분 이중). 공식 기호(K·f·E)를 단 줄은 자원으로 세지 않음 — 그 줄은 시공능력 공식 쪽에서 씀 결과: 자원 축 256 → 259, 일위대가 145 유지, 최소 233.4 / 최대 5,030,954.6 석재 할증률은 **품셈에 없음을 확인** — 1-3-1 재료 할증률표에 야면석·막자갈· 고임돌이 없고, 13-4~13-7 돌쌓기 본문 [주]에도 할증 문구 없음. 사용자 확정 대기 검증: pytest 183 통과(신규 2 — 공식 줄 제외 + 공백 이름 매칭 짝 시험) Co-Authored-By: Claude Opus 5 (1M context) --- B09_Estimation/B09_Estimation_ResourceAxis.py | 31 ++++ .../resource_axis_2026-01-01.json | 46 ++++- .../unmatched_2026-01-01.json | 158 +++++++----------- 3 files changed, 139 insertions(+), 96 deletions(-) diff --git a/B09_Estimation/B09_Estimation_ResourceAxis.py b/B09_Estimation/B09_Estimation_ResourceAxis.py index 9f67f8d1..bbc20b28 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis.py @@ -437,6 +437,26 @@ class AxisResult: partial_items: dict[str, str] = field(default_factory=dict) +def _tidy_resource_name(cell: str) -> str: + """이름 표기를 카탈로그 쪽으로 맞춘다 — **뜻을 바꾸지 않는 표기 차이만.** + + ① 이름 안 공백 제거 (「굴 삭 기 (무한궤도)」 → 「굴삭기(무한궤도)」) + ② 같은 기종의 다른 이름 (「굴삭기」·「유압식백호우」 → 「굴착기」) + + ⚠ 규격은 안 건드린다 — 규격을 맞추려 들면 엉뚱한 기종이 붙는다. + """ + from B09_Estimation.B09_Estimation_MachineProductivity import MACHINE_NAME_ALIASES + + text = str(cell) + head, sep, tail = text.partition("(") + tight = "".join(head.split()) + for wrong, right in MACHINE_NAME_ALIASES.items(): + if tight == wrong: + tight = right + break + return tight + sep + tail + + def _resolve_cell(catalog: ResourceCatalog, name_cell: str, cells: list[str]): """셀 하나를 카탈로그 한 줄로 푼다 — 세 가지 모양을 차례로 시도한다. @@ -444,6 +464,10 @@ def _resolve_cell(catalog: ResourceCatalog, name_cell: str, cells: list[str]): ② 기종 셀 (「굴착기(무한궤도, 0.7㎥)」 → 이름 + 규격) ③ 규격이 **옆 칸**에 있는 표 (「굴착기 (무한궤도)」 | 「0.7㎥」) """ + # ⚠ **이름 안 공백·표기 차이를 먼저 없앤다.** 품셈은 같은 기종을 「굴 삭 기」· + # 「굴착기」·「유압식백호우」로 섞어 적는다(2026-09-08: 메쌓기 13-6-1 의 + # 「굴 삭 기 (무한궤도)」가 안 붙어 그 공종 장비 몫이 통째로 빠졌다). + name_cell = _tidy_resource_name(name_cell) machine_name, machine_spec = parse_machine_cell(name_cell) plain_name, plain_spec = split_name_and_spec(name_cell) @@ -524,6 +548,13 @@ def match_table( name_cell = cells[1] value_cells = cells[2:] + # ⚠ **공식 계수를 단 줄은 자원 줄이 아니다.** 「유압식백호우 … | k | 0.9」 처럼 + # 같은 줄에 버킷계수가 붙어 오는데, 그 0.9 를 소요량으로 읽으면 **시간당 사용료가 + # 0.9시간분** 붙어 이중이 된다(2026-09-08: 이름 표기를 맞추자 측구터파기에 + # 「굴착기 0.81」 줄이 새로 생겨 발견). 그 줄은 시공능력 공식 쪽에서 쓴다. + if any(_normalize(c).lower() in ("k", "f", "e") for c in value_cells): + continue + # 숫자 셀이 없는 행은 자원 줄이 아니다(제목·설명 행) — 목록에 안 올린다. amount_cell = next( (parse_amount(c) for c in value_cells if parse_amount(c) is not None), None diff --git a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json index 41542a88..0da9168e 100644 --- a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json +++ b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json @@ -1561,6 +1561,20 @@ "variant": "", "work_item_code": "FP-09-19-02" }, + { + "amount": "0.045", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0290", + "raw_row_index": 1, + "resource_code": "0201-0070", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.7", + "variant": "", + "work_item_code": "FP-09-19-02" + }, { "amount": "0.0328", "amount_unit": "㎡", @@ -3045,6 +3059,20 @@ "variant": "", "work_item_code": "FP-13-06-01" }, + { + "amount": "0.384", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0419", + "raw_row_index": 4, + "resource_code": "0201-0080", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.8", + "variant": "", + "work_item_code": "FP-13-06-01" + }, { "amount": "0.083", "amount_unit": "㎡", @@ -3199,6 +3227,20 @@ "variant": "", "work_item_code": "FP-13-07-02" }, + { + "amount": "0.336", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0423", + "raw_row_index": 4, + "resource_code": "0201-0080", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.8", + "variant": "", + "work_item_code": "FP-13-07-02" + }, { "amount": "0.009", "amount_unit": "개", @@ -3604,12 +3646,12 @@ "sha256": "fe454c56c9dc01ad7dae04a8f90d776d08c5ce33badeadb2606b35234bfce7eb" }, "stats": { - "rows": 256, + "rows": 259, "skipped_forms": { "coefficient": 19, "reference": 92, "undetermined": 75 }, - "unmatched": 316 + "unmatched": 311 } } \ No newline at end of file diff --git a/resources/data_cost_resource_axis/unmatched_2026-01-01.json b/resources/data_cost_resource_axis/unmatched_2026-01-01.json index 06e7a35f..3ca2ddb2 100644 --- a/resources/data_cost_resource_axis/unmatched_2026-01-01.json +++ b/resources/data_cost_resource_axis/unmatched_2026-01-01.json @@ -1022,12 +1022,6 @@ "reason": "규격이 없어 같은 이름 여럿 중 고를 수 없음", "work_item_code": "FP-09-10-02" }, - { - "cell": "유압식백호우 (무한궤도,0.7㎥)", - "pum_table_id": "F0258", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-12-01" - }, { "cell": "대형브레이커(㎥/hr)", "pum_table_id": "F0259", @@ -1040,12 +1034,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-12-02" }, - { - "cell": "유압식백호우 (무한궤도,0.7㎥)", - "pum_table_id": "F0259", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-12-02" - }, { "cell": "대형브레이커(㎥/hr)", "pum_table_id": "F0260", @@ -1059,22 +1047,28 @@ "work_item_code": "FP-09-12-03" }, { - "cell": "유압식백호우 (무한궤도,0.7㎥)", - "pum_table_id": "F0260", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-12-03" + "cell": "장비 (90%) | 유압식백호우 (무한궤도,0.7㎥) | 육상토사(0~1m)와 동일", + "pum_table_id": "F0262", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-02" }, { - "cell": "유압식백호우 (무한궤도,0.7㎥)", - "pum_table_id": "F0261", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-01" + "cell": "장비 (90%) | 유압식백호우 (무한궤도,0.7㎥) | 육상토사(0~1m)와 동일", + "pum_table_id": "F0263", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-03" }, { - "cell": "유압식백호우 (무한궤도,0.7㎥)", - "pum_table_id": "F0264", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-04" + "cell": "장비 (90%) | 유압식백호우 (무한궤도,0.7㎥) | 용수토사(0~1m)와 동일", + "pum_table_id": "F0265", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-05" + }, + { + "cell": "장비 (90%) | 유압식백호우 (무한궤도,0.7㎥) | 용수토사(0~1m)와 동일", + "pum_table_id": "F0266", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-06" }, { "cell": "깨기", @@ -1088,12 +1082,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-07" }, - { - "cell": "들어 내기", - "pum_table_id": "F0267", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-07" - }, { "cell": "깨기", "pum_table_id": "F0268", @@ -1106,6 +1094,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-08" }, + { + "cell": "들어내기 | 유압식백호우 (무한궤도,0.7㎥) | 육상 암절취(0~1m)와 동일", + "pum_table_id": "F0268", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-08" + }, { "cell": "깨기", "pum_table_id": "F0269", @@ -1118,6 +1112,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-09" }, + { + "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 육상 암절취(0~1m)와 동일", + "pum_table_id": "F0269", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-09" + }, { "cell": "깨기", "pum_table_id": "F0270", @@ -1130,12 +1130,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-10" }, - { - "cell": "들어 내기", - "pum_table_id": "F0270", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-10" - }, { "cell": "깨기", "pum_table_id": "F0271", @@ -1148,6 +1142,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-11" }, + { + "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 용수 암절취(0~1m)와 동일", + "pum_table_id": "F0271", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-11" + }, { "cell": "깨기", "pum_table_id": "F0272", @@ -1160,6 +1160,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-12" }, + { + "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 용수 암절취(0~1m)와 동일", + "pum_table_id": "F0272", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-12" + }, { "cell": "깨기", "pum_table_id": "F0273", @@ -1172,12 +1178,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-13" }, - { - "cell": "들어 내기", - "pum_table_id": "F0273", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-13" - }, { "cell": "깨기", "pum_table_id": "F0274", @@ -1190,6 +1190,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-14" }, + { + "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 육상 발파암(1~2m)와 동일", + "pum_table_id": "F0274", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-14" + }, { "cell": "깨기", "pum_table_id": "F0275", @@ -1202,6 +1208,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-15" }, + { + "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 육상 발파암(1~2m)와 동일", + "pum_table_id": "F0275", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-15" + }, { "cell": "깨기", "pum_table_id": "F0276", @@ -1214,12 +1226,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-16" }, - { - "cell": "들어 내기", - "pum_table_id": "F0276", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-16" - }, { "cell": "깨기", "pum_table_id": "F0277", @@ -1232,6 +1238,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-17" }, + { + "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 용수 발파암(0~1m)와 동일", + "pum_table_id": "F0277", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-17" + }, { "cell": "깨기", "pum_table_id": "F0278", @@ -1245,10 +1257,10 @@ "work_item_code": "FP-09-13-18" }, { - "cell": "유압식백호우 (무한궤도,0.7㎥)", - "pum_table_id": "F0279", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-14-01" + "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 용수 발파암(0~1m)와 동일", + "pum_table_id": "F0278", + "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-13-18" }, { "cell": "모래ㆍ사질토ㆍ점토ㆍ점질토", @@ -1286,12 +1298,6 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-19-01" }, - { - "cell": "유압식백호우 (무한궤도,0.7㎥)", - "pum_table_id": "F0290", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-19-02" - }, { "cell": "공기압축기(3.5㎥/min)", "pum_table_id": "F0291", @@ -1580,30 +1586,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-23" }, - { - "cell": "부설", - "pum_table_id": "F0372", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-24-02" - }, - { - "cell": "적사", - "pum_table_id": "F0373", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-25" - }, { "cell": "운반 및 설치 (목도운반)", "pum_table_id": "F0374", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-26" }, - { - "cell": "부설", - "pum_table_id": "F0371", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-24-01" - }, { "cell": "접착제", "pum_table_id": "F0376", @@ -1694,12 +1682,6 @@ "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-13-06-01" }, - { - "cell": "굴 삭 기 (무한궤도)", - "pum_table_id": "F0419", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-06-01" - }, { "cell": "보통인부 | | 〃", "pum_table_id": "F0420", @@ -1724,12 +1706,6 @@ "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-13-07-02" }, - { - "cell": "굴 삭 기 (무한궤도)", - "pum_table_id": "F0423", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-07-02" - }, { "cell": "보통 인부 (인) | 0.9m 1.2m 1.5m 1.8m 2.1m 2.4m 2.7m 3.0m 3.5m 4.0m 4.5m | 0.022 0.034 0.05 0.07 - - - - - - -", "pum_table_id": "F0427", @@ -1880,12 +1856,6 @@ "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-13-01" }, - { - "cell": "굴착기 (0.2㎥)", - "pum_table_id": "F0441", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-13-13-02" - }, { "cell": "어려운 조건", "pum_table_id": "F0447", From 15bdf6bd64fc2a97bd5a8e82eaf0758a7f17da28 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Tue, 8 Sep 2026 02:04:42 +0900 Subject: [PATCH 12/12] =?UTF-8?q?feat(B09):=20=EB=AD=89=EC=B9=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84+=EA=B0=88=EB=9E=98=20=EC=97=B4=20=ED=91=9C?= =?UTF-8?q?=20=EC=9D=BD=EA=B8=B0=20=E2=80=94=20=EB=8F=8C=EC=8C=93=EA=B8=B0?= =?UTF-8?q?=20=EA=B3=84=EC=97=B4=20=EC=84=B1=EB=A6=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 메인이 `reference` 오판 41건을 되살려(bc4b6837) 돌쌓기(장비)가 마스터에 들어왔으나, 그 표는 **이름도 값도 뭉쳐 오고 열이 규격 갈래**인 또 다른 모양이라 여전히 안 섰음 (「석공 보통인부 | 0.09 0.05 | 0.08 0.04 | 0.07 0.03」) - 뭉친 이름·값을 갈래 열에 짝지어 읽음. 개수가 어긋나면 표째 버림 - 「굴착기+부착용 집게」는 **두 기종 조합**으로 보아 같은 시간을 둘 다 붙임 (TODO(미결) 해석 잠정 — 사용자 확인 대기) - 규격이 **옆 칸**에 있고 갈래(무한궤도)가 안 적힌 기종은 규격 일치 + 무한궤도 우선으로 잠정 채택. 카탈로그 규격이 범위(0.6∼0.8)면 그 안에 드는지로 판정 - ⚠ 「1.04(1.17)」 괄호값은 **조건 시공 시 대안값**임이 원문에서 확인됨 (13-6-1 [주]② 흡출방지재 시공 시 ( ) 값). 기본은 괄호 밖, 대안값은 `alternative_amount` 로 남겨 화면에 「시공 시 다름」으로 보이게 함 - 라벨 줄 판정을 **모든 칸**으로 — 첫 칸만 보면 기초잡석 12-25 를 라벨 줄로 오해해 표째 가로챘음(그 탓에 기초잡석이 한때 다시 막혔음) - 갈래 키를 **공백 없는 것**으로 통일(`#보통`), 원문 문구는 이름에 보존 (두 창 합의) 결과: 자원 축 259 → 354, 일위대가 145 → 176 돌쌓기(찰) 35cm이하 58,166.7 / 55cm이하 52,938.7 / 75cm이하 46,892.7 원/㎡ 메쌓기·찰쌓기·붙이기 계열도 직경 3갈래로 섬 검증: pytest 184 통과(신규 1). 화면 실측 — 지금 인계 자료에 구조물 줄이 없어 표에는 아직 안 뜸(B08 이 갈래를 골라 보내면 그대로 금액이 섬) Co-Authored-By: Claude Opus 5 (1M context) --- B09_Estimation/B09_Estimation_ResourceAxis.py | 42 +- .../B09_Estimation_ResourceAxis_Transposed.py | 222 + B09_Estimation/B09_Estimation_UnitPrice.py | 8 +- .../resource_axis_2026-01-01.json | 2868 ++++++++--- .../unmatched_2026-01-01.json | 4556 ++++++++++++++++- 5 files changed, 6912 insertions(+), 784 deletions(-) diff --git a/B09_Estimation/B09_Estimation_ResourceAxis.py b/B09_Estimation/B09_Estimation_ResourceAxis.py index bbc20b28..775ef8c4 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis.py @@ -350,6 +350,24 @@ def parse_amount_expression(cell: str) -> Decimal | None: return Decimal(found.group(1)) * Decimal(found.group(2)) / Decimal(100) +#: 「1.04(1.17)」 — 괄호 밖이 기본, 괄호 안이 **조건 시공 시** 값. +#: 근거: 품셈 13-6-1 [주]② 「흡출방지재를 시공하는 경우는 ( )의 값을 적용한다」 +#: (13-6-2·13-6-3·13-7-1·13-7-2 도 같은 [주]). +#: ⚠ **기본은 괄호 밖** — 방지재 시공 여부가 설계 조건에 아직 없다(사용자 확정 대기). +#: 괄호 값을 쓰려면 그 조건이 들어와야 하므로, 지금은 값과 함께 **대안값을 남겨** 둔다. +_RE_ALTERNATIVE = re.compile(r"^(\d+(?:\.\d+)?)\s*[((](\d+(?:\.\d+)?)[))]$") + + +def parse_amount_pair(cell: str) -> tuple[Decimal, Decimal | None] | None: + """「1.04(1.17)」 → `(1.04, 1.17)`. 괄호가 없으면 `(값, None)`.""" + text = _normalize(cell) + found = _RE_ALTERNATIVE.match(text) + if found: + return Decimal(found.group(1)), Decimal(found.group(2)) + plain = parse_amount(text) + return None if plain is None else (plain, None) + + def convert_amount(raw: Decimal, *, pum_form: str, basis_quantity: Decimal | None) -> Decimal: """표 형태에 맞춰 소요량으로 환산한다. @@ -383,6 +401,9 @@ class ResourceRow: amount: Decimal amount_unit: str raw_row_index: int + #: 조건 시공 시 쓰는 대안값 — 「1.04(1.17)」의 1.17 (품셈 13-6-1 [주]②). + #: **기본값은 `amount`(괄호 밖)** 이고 이 값은 화면에 「시공 시 다름」으로 보인다. + alternative_amount: Decimal | None = None #: 규격 갈래 — 열이 자원인 표에서 행 이름(「무근구조물」). 없으면 빈 문자열. #: **갈래마다 품이 다르므로 한 일위대가로 뭉치지 않는다.** variant: str = "" @@ -404,6 +425,9 @@ class ResourceRow: "amount_unit": self.amount_unit, "raw_row_index": self.raw_row_index, "variant": self.variant, + "alternative_amount": ( + None if self.alternative_amount is None else str(self.alternative_amount) + ), "group_ratio_pct": None if self.group_ratio_pct is None else str(self.group_ratio_pct), } @@ -523,6 +547,13 @@ def match_table( if match_transposed_table(node, table, catalog, result, basis_quantity, unit): return + # 「석공 보통인부 | 0.09 0.05 | …」처럼 **이름도 값도 뭉쳐 오고 열이 갈래**인 표 + # (돌쌓기 13-4 계열). 행-자원으로는 첫 이름조차 안 풀린다. + from B09_Estimation.B09_Estimation_ResourceAxis_Transposed import match_packed_rows + + if match_packed_rows(node, table, catalog, result, basis_quantity, unit): + return + for index, row in enumerate(table.get("raw_row", [])): cells = [str(c) for c in row] if not cells: @@ -556,9 +587,13 @@ def match_table( continue # 숫자 셀이 없는 행은 자원 줄이 아니다(제목·설명 행) — 목록에 안 올린다. - amount_cell = next( - (parse_amount(c) for c in value_cells if parse_amount(c) is not None), None - ) + alternative: Decimal | None = None + amount_cell = None + for cell in value_cells: + pair = parse_amount_pair(cell) + if pair is not None: + amount_cell, alternative = pair + break if amount_cell is None: # 「0.2 × 30%」 꼴은 값과 배분율이 한 칸에 있다 — 읽었으면 딱지 배분율은 버린다. expression = next( @@ -638,6 +673,7 @@ def match_table( amount_unit=unit, raw_row_index=index, group_ratio_pct=group_ratio, + alternative_amount=alternative, ) ) diff --git a/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py b/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py index 6da1c57c..50e01c28 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis_Transposed.py @@ -18,6 +18,8 @@ from __future__ import annotations +import re + from decimal import Decimal from typing import Any @@ -196,6 +198,226 @@ def _match_two_row_table( return matched +#: 「석공 보통인부」처럼 **여러 자원이 한 칸에** 뭉쳐 오고, 값도 「0.09 0.05」로 뭉쳐 오며, +#: 열이 규격 갈래(35cm 이하 · 55cm 이하 · 75cm 이하)인 표. 돌쌓기 13-4 계열이 그 모양이다. +#: +#: ⚠ **개수가 하나라도 안 맞으면 표째 버린다** — 이름 2 개에 값 3 개면 어느 값이 누구 +#: 것인지 단정할 수 없다. 오늘 여러 번 겪은 자리다. +_RE_PACKED_NUMBER = re.compile(r"\d+(?:\.\d+)?") + + +#: 「1.04(1.17)」의 괄호 값 — **조건 시공 시 대안값**이라 기본 수에 안 센다 +#: (품셈 13-6-1 [주]②). 안 떼면 값이 하나 더 있는 것으로 보여 표가 통째로 버려진다. +_RE_ALTERNATIVE_TAIL = re.compile(r"(?<=\d)\s*[((]\s*\d+(?:\.\d+)?\s*[))]") + + +def _packed_numbers(cell: str) -> list: + text = _RE_ALTERNATIVE_TAIL.sub("", str(cell)) + return [Decimal(t) for t in _RE_PACKED_NUMBER.findall(text)] + + +def _packed_names(cell: str) -> list[str]: + """한 칸에 뭉친 이름들. 「굴착기+부착용 집게」는 **조합 기종**이라 통째로 둔다.""" + text = " ".join(str(cell).split()) + if "+" in text: + return [text] + return [part for part in text.split(" ") if part] + + +def _resolve_packed(catalog: ResourceCatalog, name: str, specs: list[str] | None = None) -> list: + """이름 하나를 카탈로그 줄들로 푼다. + + 「굴착기+부착용 집게」처럼 **두 기종을 함께 쓰는 조합**은 둘 다 돌려준다 — + 같은 시간을 둘이 함께 쓰므로 사용료도 둘 다 붙는다. + ⚠ TODO(미결) 조합 표기의 해석은 잠정이다 — 사용자·메인 확인 대기(PLAN 9-6). + """ + parts = [part.strip() for part in str(name).split("+") if part.strip()] + found = [] + for part in parts: + base, spec = split_name_and_spec(part) + entry = catalog.resolve(base, spec) + if entry is None and not spec: + candidates = catalog.by_name(base) + entry = candidates[0] if len(candidates) == 1 else None + if entry is None: + entry = _resolve_with_side_spec(catalog, base, specs or []) + if entry is None: + return [] + found.append(entry) + return found + + +#: 갈래(무한궤도/타이어)를 안 적은 기종을 고를 때의 **잠정** 우선순위. +#: 품셈 13-4 는 「굴착기+부착용 집게 | 0.6㎥」로만 적는데 카탈로그는 갈래까지 나뉜다. +#: ⚠ TODO(미결) 임도 현장 표준이 무한궤도라 그쪽을 잠정 채택 — 사용자 확정 대기(PLAN 9-6). +_TRACK_PREFERENCE = ("무한궤도",) + + +_RE_SPEC_RANGE = re.compile(r"^(\d+(?:\.\d+)?)[∼~~-](\d+(?:\.\d+)?)$") + + +def _spec_matches(catalog_spec: str, wanted: str) -> bool: + """카탈로그 규격이 표의 규격을 담는가. + + 카탈로그가 **범위**로 적는 경우가 있다 — 「부착용 집게 0.6∼0.8」은 0.6㎥ 를 담는다. + 범위 밖이면 안 고른다. + """ + if catalog_spec == wanted or wanted.startswith(catalog_spec): + return True + found = _RE_SPEC_RANGE.match(catalog_spec) + if not found: + return False + numbers = _RE_PACKED_NUMBER.findall(wanted) + if not numbers: + return False + value = Decimal(numbers[0]) + return Decimal(found.group(1)) <= value <= Decimal(found.group(2)) + + +def _resolve_with_side_spec(catalog: ResourceCatalog, name: str, specs: list[str]): + """이름에 갈래가 없고 규격이 **옆 칸**에 있는 기종을 고른다. + + 이름이 카탈로그 이름의 앞머리이고 규격이 **정확히 같을 때만** 고른다 — + 규격이 다르면 안 고른다(엉뚱한 기종이 붙으면 사용료가 통째로 틀린다). + """ + if not name or not specs: + return None + wanted = {"".join(str(s).split()) for s in specs if str(s).strip()} + hits = [] + for entry in catalog.entries: + if not entry.name.startswith(name): + continue + spec = "".join(str(entry.spec).split()) + if spec and any(_spec_matches(spec, w) for w in wanted): + hits.append(entry) + if not hits: + return None + if len(hits) == 1: + return hits[0] + for word in _TRACK_PREFERENCE: + preferred = [e for e in hits if word in e.name] + if len(preferred) == 1: + return preferred[0] + return None + + +def match_packed_rows( + node: dict, + table: dict, + catalog: ResourceCatalog, + result: AxisResult, + basis_quantity, + unit: str, +) -> bool: + """뭉친 이름 + 갈래 열 표를 읽는다. 그런 표가 아니면 `False`.""" + rows = [[str(c).strip() for c in row] for row in (table.get("raw_row") or [])] + if len(rows) < 2: + return False + + labels = [cell for cell in rows[0] if cell] + # ⚠ 라벨에 수가 들어 있을 수 있다 — 「35cm 이하」. 수의 유무로 가르면 안 된다. + # 자원으로 **안 풀리는** 줄이면 갈래 라벨 줄로 본다. + if not labels: + return False + # ⚠ **첫 줄의 어느 칸이라도 자원이면 라벨 줄이 아니다.** 첫 칸만 보면 기초잡석 + # 12-25 처럼 「소할(30%) | 할석공(인) | 0.2 × 30%」인 표를 라벨 줄로 오해해 + # 표째 가로챈다(2026-09-08: 그 탓에 기초잡석이 다시 막혔다). + for cell in rows[0]: + if not cell: + continue + if any(_resolve_packed(catalog, name, []) for name in _packed_names(cell)): + return False + + # ⚠ **뭉친 표에만 쓴다.** 이 길이 넓으면 행-자원 표까지 가로채 자원 축이 줄어든다 + # (2026-09-08 실측: 304 → 244 줄로 떨어졌다). 이름이 둘 이상 뭉쳤거나 값이 한 칸에 + # 둘 이상 뭉친 줄이 **하나라도** 있어야 이 표로 본다. + packed = False + for cells in rows[1:]: + if not cells or not cells[0]: + continue + if len(_packed_names(cells[0])) > 1: + packed = True + break + if any(len(_packed_numbers(cell)) > 1 for cell in cells[1:]): + packed = True + break + if not packed: + return False + + work_item_code = node.get("work_item_code", "") + table_id = str(table.get("pum_table_id", "")) + form = str(table.get("pum_form", "")) + staged: list = [] + + for index, cells in enumerate(rows[1:], start=1): + if not cells or not cells[0]: + continue + names = _packed_names(cells[0]) + # 규격은 **옆 칸**에 있을 수 있다 — 「굴착기+부착용 집게 | 0.6㎥ | 시간 | …」. + side_specs = [cell for cell in cells[1:3] if cell] + resolved = [_resolve_packed(catalog, name, side_specs) for name in names] + if not all(resolved): + if _packed_numbers(" ".join(cells[1:])): + # 수가 있는데 이름을 못 풀었다 — 그 몫이 빠진 채 서면 안 된다. + result.partial_items[work_item_code] = f"{cells[0][:20]} 줄을 못 풀었습니다" + result.unmatched.append( + UnmatchedRow( + work_item_code=work_item_code, + pum_table_id=table_id, + cell=cells[0], + reason="뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + ) + ) + continue + + groups = [_packed_numbers(cell) for cell in cells[1:]] + groups = [group for group in groups if group] + # 앞쪽에 규격·단위 칸이 낄 수 있다 — 「0.6㎥ | 시간 | 0.31 | 0.30 | 0.28」. + # 갈래 수만큼 **뒤에서** 잘라 쓴다. + if len(groups) > len(labels): + groups = groups[-len(labels) :] + if len(groups) != len(labels) or any(len(g) != len(names) for g in groups): + result.unmatched.append( + UnmatchedRow( + work_item_code=work_item_code, + pum_table_id=table_id, + cell=cells[0], + reason=( + f"값 묶음 {len(groups)} 개가 갈래 {len(labels)} 개와 안 맞습니다 " + "— 자리를 단정할 수 없어 버렸습니다." + ), + ) + ) + return True + + for label, group in zip(labels, groups): + for entries, amount in zip(resolved, group): + value = amount + if basis_quantity not in (None, 0, Decimal(1)): + value = value / basis_quantity + for entry in entries: + staged.append( + ResourceRow( + work_item_code=work_item_code, + pum_table_id=table_id, + pum_form=form, + resource_kind=entry.kind, + resource_code=entry.code, + resource_name=entry.name, + resource_spec=entry.spec, + amount=value, + amount_unit=unit, + raw_row_index=index, + variant=label, + ) + ) + + if not staged: + return False + result.rows.extend(staged) + return True + + def match_transposed_table( node: dict[str, Any], table: dict[str, Any], diff --git a/B09_Estimation/B09_Estimation_UnitPrice.py b/B09_Estimation/B09_Estimation_UnitPrice.py index 30d79b39..ee62b7ac 100644 --- a/B09_Estimation/B09_Estimation_UnitPrice.py +++ b/B09_Estimation/B09_Estimation_UnitPrice.py @@ -251,7 +251,11 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: by_item.setdefault((row.work_item_code, getattr(row, "variant", "")), []).append(row) for (work_item_code, variant), rows in sorted(by_item.items()): - title_code = f"B-{work_item_code}" + (f"#{variant}" if variant else "") + # 갈래 키는 **내부 공백을 지운 것**, 화면 문구는 **원문 그대로** + # (2026-09-08 두 창 합의). 원문이 「보 통」·「보 통」으로 들쭉날쭉해 + # 키에 공백을 남기면 한 칸 차이로 영영 안 맞는다. 공백 말고는 손대지 않는다. + variant_key = "".join(variant.split()) + title_code = f"B-{work_item_code}" + (f"#{variant_key}" if variant_key else "") if title_code in build.book.titles: continue # ⚠ **붙을 상세를 먼저 모으고, 하나도 없으면 제목도 안 세운다.** @@ -284,7 +288,7 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: unit=unit, ) ) - if variant: + if variant_key: build.variants.setdefault(work_item_code, []).append(variant) # 배분율 표는 각 몫을 **그 비율만큼만** 센다 — 인력 원단위를 전량에 곱하면 틀린다. for row, ref in attachable: diff --git a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json index 0da9168e..fc23d526 100644 --- a/resources/data_cost_resource_axis/resource_axis_2026-01-01.json +++ b/resources/data_cost_resource_axis/resource_axis_2026-01-01.json @@ -8,6 +8,97 @@ }, "rows": [ { + "alternative_amount": null, + "amount": "2.14", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0087", + "raw_row_index": 1, + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "5m 미만", + "work_item_code": "FP-04-02-02" + }, + { + "alternative_amount": null, + "amount": "0.51", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0087", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "5m 미만", + "work_item_code": "FP-04-02-02" + }, + { + "alternative_amount": null, + "amount": "2.80", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0087", + "raw_row_index": 1, + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "5m이상~8m미만", + "work_item_code": "FP-04-02-02" + }, + { + "alternative_amount": null, + "amount": "0.66", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0087", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "5m이상~8m미만", + "work_item_code": "FP-04-02-02" + }, + { + "alternative_amount": null, + "amount": "3.65", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0087", + "raw_row_index": 1, + "resource_code": "1037", + "resource_kind": "labor", + "resource_name": "벌목부", + "resource_spec": "", + "variant": "8m 이상", + "work_item_code": "FP-04-02-02" + }, + { + "alternative_amount": null, + "amount": "0.87", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0087", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "8m 이상", + "work_item_code": "FP-04-02-02" + }, + { + "alternative_amount": null, "amount": "0.42", "amount_unit": "", "group_ratio_pct": null, @@ -22,6 +113,7 @@ "work_item_code": "FP-04-04" }, { + "alternative_amount": null, "amount": "0.084", "amount_unit": "", "group_ratio_pct": null, @@ -36,6 +128,7 @@ "work_item_code": "FP-05-01-01" }, { + "alternative_amount": null, "amount": "0.012", "amount_unit": "", "group_ratio_pct": null, @@ -50,6 +143,7 @@ "work_item_code": "FP-05-01-01" }, { + "alternative_amount": null, "amount": "0.072", "amount_unit": "", "group_ratio_pct": null, @@ -64,6 +158,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.012", "amount_unit": "", "group_ratio_pct": null, @@ -78,6 +173,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.084", "amount_unit": "", "group_ratio_pct": null, @@ -92,6 +188,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.024", "amount_unit": "", "group_ratio_pct": null, @@ -106,6 +203,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.096", "amount_unit": "", "group_ratio_pct": null, @@ -120,6 +218,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.024", "amount_unit": "", "group_ratio_pct": null, @@ -134,6 +233,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.120", "amount_unit": "", "group_ratio_pct": null, @@ -148,6 +248,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.036", "amount_unit": "", "group_ratio_pct": null, @@ -162,6 +263,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.132", "amount_unit": "", "group_ratio_pct": null, @@ -176,6 +278,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.036", "amount_unit": "", "group_ratio_pct": null, @@ -190,6 +293,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.156", "amount_unit": "", "group_ratio_pct": null, @@ -204,6 +308,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.036", "amount_unit": "", "group_ratio_pct": null, @@ -218,6 +323,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.180", "amount_unit": "", "group_ratio_pct": null, @@ -232,6 +338,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.048", "amount_unit": "", "group_ratio_pct": null, @@ -246,6 +353,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.204", "amount_unit": "", "group_ratio_pct": null, @@ -260,6 +368,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.048", "amount_unit": "", "group_ratio_pct": null, @@ -274,6 +383,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.228", "amount_unit": "", "group_ratio_pct": null, @@ -288,6 +398,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.060", "amount_unit": "", "group_ratio_pct": null, @@ -302,6 +413,7 @@ "work_item_code": "FP-05-01-02" }, { + "alternative_amount": null, "amount": "0.03", "amount_unit": "㎡", "group_ratio_pct": null, @@ -316,6 +428,7 @@ "work_item_code": "FP-05-01-04" }, { + "alternative_amount": null, "amount": "0.06", "amount_unit": "㎡", "group_ratio_pct": null, @@ -330,6 +443,7 @@ "work_item_code": "FP-05-01-04" }, { + "alternative_amount": null, "amount": "0.19", "amount_unit": "", "group_ratio_pct": null, @@ -344,6 +458,7 @@ "work_item_code": "FP-05-03-02" }, { + "alternative_amount": null, "amount": "0.06", "amount_unit": "", "group_ratio_pct": null, @@ -358,6 +473,7 @@ "work_item_code": "FP-05-03-02" }, { + "alternative_amount": null, "amount": "0.07", "amount_unit": "", "group_ratio_pct": null, @@ -372,6 +488,7 @@ "work_item_code": "FP-05-03-03" }, { + "alternative_amount": null, "amount": "0.02", "amount_unit": "", "group_ratio_pct": null, @@ -386,6 +503,7 @@ "work_item_code": "FP-05-03-03" }, { + "alternative_amount": null, "amount": "0.47", "amount_unit": "", "group_ratio_pct": null, @@ -400,6 +518,37 @@ "work_item_code": "FP-05-09" }, { + "alternative_amount": null, + "amount": "1.33", + "amount_unit": "㏊", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0115", + "raw_row_index": 4, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-05-10" + }, + { + "alternative_amount": null, + "amount": "2E+1", + "amount_unit": "㏊", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0115", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-05-10" + }, + { + "alternative_amount": null, "amount": "0.43", "amount_unit": "", "group_ratio_pct": null, @@ -414,6 +563,7 @@ "work_item_code": "FP-05-11" }, { + "alternative_amount": null, "amount": "4.5", "amount_unit": "", "group_ratio_pct": null, @@ -428,6 +578,7 @@ "work_item_code": "FP-05-13" }, { + "alternative_amount": null, "amount": "6.0", "amount_unit": "", "group_ratio_pct": null, @@ -442,6 +593,67 @@ "work_item_code": "FP-05-13" }, { + "alternative_amount": null, + "amount": "0.0328", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0119", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-05-14" + }, + { + "alternative_amount": null, + "amount": "0.0328", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0119", + "raw_row_index": 4, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-05-14" + }, + { + "alternative_amount": null, + "amount": "0.00055", + "amount_unit": "m", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0125", + "raw_row_index": 6, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-05-18" + }, + { + "alternative_amount": null, + "amount": "0.00838", + "amount_unit": "m", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0125", + "raw_row_index": 7, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-05-18" + }, + { + "alternative_amount": null, "amount": "0.20", "amount_unit": "", "group_ratio_pct": null, @@ -456,6 +668,7 @@ "work_item_code": "FP-05-19-01" }, { + "alternative_amount": null, "amount": "0.004666666666666666666666666667", "amount_unit": "㎥", "group_ratio_pct": null, @@ -470,6 +683,7 @@ "work_item_code": "FP-05-19-02" }, { + "alternative_amount": null, "amount": "0.34", "amount_unit": "", "group_ratio_pct": null, @@ -484,6 +698,7 @@ "work_item_code": "FP-05-21" }, { + "alternative_amount": null, "amount": "0.26", "amount_unit": "", "group_ratio_pct": null, @@ -498,6 +713,7 @@ "work_item_code": "FP-05-21" }, { + "alternative_amount": null, "amount": "0.47", "amount_unit": "", "group_ratio_pct": null, @@ -512,6 +728,7 @@ "work_item_code": "FP-05-21" }, { + "alternative_amount": null, "amount": "0.0099", "amount_unit": "㎡", "group_ratio_pct": null, @@ -526,6 +743,7 @@ "work_item_code": "FP-05-22-02" }, { + "alternative_amount": null, "amount": "0.0231", "amount_unit": "㎡", "group_ratio_pct": null, @@ -540,6 +758,7 @@ "work_item_code": "FP-05-22-02" }, { + "alternative_amount": null, "amount": "0.011", "amount_unit": "㎡", "group_ratio_pct": null, @@ -554,6 +773,7 @@ "work_item_code": "FP-05-22-03" }, { + "alternative_amount": null, "amount": "0.0084", "amount_unit": "㎡", "group_ratio_pct": null, @@ -568,6 +788,7 @@ "work_item_code": "FP-05-23-02" }, { + "alternative_amount": null, "amount": "0.0196", "amount_unit": "㎡", "group_ratio_pct": null, @@ -582,6 +803,7 @@ "work_item_code": "FP-05-23-02" }, { + "alternative_amount": null, "amount": "0.0033", "amount_unit": "㎡", "group_ratio_pct": null, @@ -596,6 +818,7 @@ "work_item_code": "FP-05-23-03" }, { + "alternative_amount": null, "amount": "0.0007", "amount_unit": "㎡", "group_ratio_pct": null, @@ -610,6 +833,7 @@ "work_item_code": "FP-05-24-01" }, { + "alternative_amount": null, "amount": "0.0004", "amount_unit": "㎡", "group_ratio_pct": null, @@ -624,34 +848,7 @@ "work_item_code": "FP-05-24-01" }, { - "amount": "0.0007", - "amount_unit": "㎡", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0136", - "raw_row_index": 8, - "resource_code": "1038", - "resource_kind": "labor", - "resource_name": "조경공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-05-24-02" - }, - { - "amount": "0.0004", - "amount_unit": "㎡", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0136", - "raw_row_index": 9, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-05-24-02" - }, - { + "alternative_amount": null, "amount": "0.002", "amount_unit": "㎡", "group_ratio_pct": null, @@ -666,6 +863,7 @@ "work_item_code": "FP-05-25" }, { + "alternative_amount": null, "amount": "0.0007", "amount_unit": "㎡", "group_ratio_pct": null, @@ -680,6 +878,7 @@ "work_item_code": "FP-05-25" }, { + "alternative_amount": null, "amount": "0.01", "amount_unit": "", "group_ratio_pct": null, @@ -694,6 +893,7 @@ "work_item_code": "FP-05-27" }, { + "alternative_amount": null, "amount": "0.08", "amount_unit": "", "group_ratio_pct": null, @@ -708,6 +908,7 @@ "work_item_code": "FP-05-27" }, { + "alternative_amount": null, "amount": "0.19", "amount_unit": "", "group_ratio_pct": null, @@ -722,6 +923,7 @@ "work_item_code": "FP-05-28-01" }, { + "alternative_amount": null, "amount": "0.06", "amount_unit": "", "group_ratio_pct": null, @@ -736,10 +938,11 @@ "work_item_code": "FP-05-28-01" }, { + "alternative_amount": null, "amount": "0.02222222222222222222222222222", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0145", "raw_row_index": 0, "resource_code": "1038", @@ -750,10 +953,11 @@ "work_item_code": "FP-05-28-02" }, { + "alternative_amount": null, "amount": "0.01111111111111111111111111111", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0145", "raw_row_index": 0, "resource_code": "1002", @@ -764,10 +968,11 @@ "work_item_code": "FP-05-28-02" }, { + "alternative_amount": null, "amount": "0.01538461538461538461538461538", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0145", "raw_row_index": 1, "resource_code": "1038", @@ -778,10 +983,11 @@ "work_item_code": "FP-05-28-02" }, { + "alternative_amount": null, "amount": "0.007692307692307692307692307692", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0145", "raw_row_index": 1, "resource_code": "1002", @@ -792,6 +998,7 @@ "work_item_code": "FP-05-28-02" }, { + "alternative_amount": null, "amount": "3.00", "amount_unit": "", "group_ratio_pct": null, @@ -806,6 +1013,7 @@ "work_item_code": "FP-06-05" }, { + "alternative_amount": null, "amount": "2.00", "amount_unit": "", "group_ratio_pct": null, @@ -820,6 +1028,7 @@ "work_item_code": "FP-06-05" }, { + "alternative_amount": null, "amount": "0.29", "amount_unit": "", "group_ratio_pct": null, @@ -834,6 +1043,7 @@ "work_item_code": "FP-06-07-01" }, { + "alternative_amount": null, "amount": "0.09", "amount_unit": "", "group_ratio_pct": null, @@ -848,6 +1058,7 @@ "work_item_code": "FP-06-07-01" }, { + "alternative_amount": null, "amount": "0.3", "amount_unit": "", "group_ratio_pct": null, @@ -862,6 +1073,7 @@ "work_item_code": "FP-06-07-02" }, { + "alternative_amount": null, "amount": "0.8", "amount_unit": "", "group_ratio_pct": null, @@ -876,6 +1088,52 @@ "work_item_code": "FP-06-07-02" }, { + "alternative_amount": null, + "amount": "0.00004", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0167", + "raw_row_index": 0, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-06-07-03" + }, + { + "alternative_amount": null, + "amount": "0.00014", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0167", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-06-07-03" + }, + { + "alternative_amount": null, + "amount": "0.02", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0168", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-06-08" + }, + { + "alternative_amount": null, "amount": "0.8", "amount_unit": "ha", "group_ratio_pct": null, @@ -890,6 +1148,7 @@ "work_item_code": "FP-08-06-01" }, { + "alternative_amount": null, "amount": "8.2", "amount_unit": "ha", "group_ratio_pct": null, @@ -904,6 +1163,7 @@ "work_item_code": "FP-08-06-01" }, { + "alternative_amount": null, "amount": "2.1", "amount_unit": "ha", "group_ratio_pct": null, @@ -918,6 +1178,7 @@ "work_item_code": "FP-08-06-01" }, { + "alternative_amount": null, "amount": "13.4", "amount_unit": "ha", "group_ratio_pct": null, @@ -932,6 +1193,7 @@ "work_item_code": "FP-08-06-01" }, { + "alternative_amount": null, "amount": "1.05", "amount_unit": "인", "group_ratio_pct": null, @@ -946,6 +1208,7 @@ "work_item_code": "FP-08-06-03" }, { + "alternative_amount": null, "amount": "2.00", "amount_unit": "인", "group_ratio_pct": null, @@ -960,6 +1223,7 @@ "work_item_code": "FP-08-06-03" }, { + "alternative_amount": null, "amount": "0.75", "amount_unit": "", "group_ratio_pct": null, @@ -974,6 +1238,7 @@ "work_item_code": "FP-08-10" }, { + "alternative_amount": null, "amount": "0.23", "amount_unit": "", "group_ratio_pct": null, @@ -988,6 +1253,7 @@ "work_item_code": "FP-08-10" }, { + "alternative_amount": null, "amount": "1.50", "amount_unit": "", "group_ratio_pct": null, @@ -1002,6 +1268,7 @@ "work_item_code": "FP-08-10" }, { + "alternative_amount": null, "amount": "0.46", "amount_unit": "", "group_ratio_pct": null, @@ -1016,6 +1283,7 @@ "work_item_code": "FP-08-10" }, { + "alternative_amount": null, "amount": "0.16", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1030,34 +1298,7 @@ "work_item_code": "FP-09-03-01" }, { - "amount": "0.041", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0243", - "raw_row_index": 4, - "resource_code": "1015", - "resource_kind": "labor", - "resource_name": "착암공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-05-01" - }, - { - "amount": "0.103", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0243", - "raw_row_index": 5, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-05-01" - }, - { + "alternative_amount": null, "amount": "0.02", "amount_unit": "", "group_ratio_pct": null, @@ -1072,6 +1313,7 @@ "work_item_code": "FP-09-08-01" }, { + "alternative_amount": null, "amount": "0.08", "amount_unit": "", "group_ratio_pct": null, @@ -1086,6 +1328,37 @@ "work_item_code": "FP-09-08-01" }, { + "alternative_amount": null, + "amount": "1", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0256", + "raw_row_index": 0, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-09-11-01" + }, + { + "alternative_amount": null, + "amount": "2", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0256", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-09-11-01" + }, + { + "alternative_amount": null, "amount": "0.23", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1100,62 +1373,7 @@ "work_item_code": "FP-09-12-01" }, { - "amount": "1.6", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0259", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-12-02" - }, - { - "amount": "0.8", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0259", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-12-02" - }, - { - "amount": "2.8", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0260", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-12-03" - }, - { - "amount": "1.266", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0260", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-12-03" - }, - { + "alternative_amount": null, "amount": "0.23", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1170,6 +1388,7 @@ "work_item_code": "FP-09-13-01" }, { + "alternative_amount": null, "amount": "0.31", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1184,6 +1403,7 @@ "work_item_code": "FP-09-13-02" }, { + "alternative_amount": null, "amount": "0.39", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1198,6 +1418,7 @@ "work_item_code": "FP-09-13-03" }, { + "alternative_amount": null, "amount": "0.345", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1212,6 +1433,7 @@ "work_item_code": "FP-09-13-04" }, { + "alternative_amount": null, "amount": "0.465", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1226,6 +1448,7 @@ "work_item_code": "FP-09-13-05" }, { + "alternative_amount": null, "amount": "0.585", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1240,6 +1463,7 @@ "work_item_code": "FP-09-13-06" }, { + "alternative_amount": null, "amount": "1.6", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1254,6 +1478,7 @@ "work_item_code": "FP-09-13-07" }, { + "alternative_amount": null, "amount": "0.8", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1268,62 +1493,7 @@ "work_item_code": "FP-09-13-07" }, { - "amount": "1.8", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0268", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-08" - }, - { - "amount": "0.9", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0268", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-08" - }, - { - "amount": "2", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0269", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-09" - }, - { - "amount": "1", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0269", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-09" - }, - { + "alternative_amount": null, "amount": "1.2", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1338,6 +1508,7 @@ "work_item_code": "FP-09-13-10" }, { + "alternative_amount": null, "amount": "1.35", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1352,6 +1523,7 @@ "work_item_code": "FP-09-13-11" }, { + "alternative_amount": null, "amount": "1.5", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1366,174 +1538,7 @@ "work_item_code": "FP-09-13-12" }, { - "amount": "2.8", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0273", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-13" - }, - { - "amount": "1.266", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0273", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-13" - }, - { - "amount": "3.5", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0274", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-14" - }, - { - "amount": "1.566", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0274", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-14" - }, - { - "amount": "4.2", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0275", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-15" - }, - { - "amount": "1.866", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0275", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-15" - }, - { - "amount": "4.2", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0276", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-16" - }, - { - "amount": "1.899", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0276", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-16" - }, - { - "amount": "5.25", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0277", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-17" - }, - { - "amount": "2.349", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0277", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-17" - }, - { - "amount": "6.3", - "amount_unit": "㎥", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0278", - "raw_row_index": 0, - "resource_code": "1017", - "resource_kind": "labor", - "resource_name": "할석공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-18" - }, - { - "amount": "2.799", - "amount_unit": "㎥", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0278", - "raw_row_index": 1, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-09-13-18" - }, - { + "alternative_amount": null, "amount": "0.1", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -1548,6 +1553,22 @@ "work_item_code": "FP-09-14-01" }, { + "alternative_amount": null, + "amount": "0.017", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0289", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-09-19-01" + }, + { + "alternative_amount": null, "amount": "0.019", "amount_unit": "㎡", "group_ratio_pct": null, @@ -1562,6 +1583,7 @@ "work_item_code": "FP-09-19-02" }, { + "alternative_amount": null, "amount": "0.045", "amount_unit": "㎡", "group_ratio_pct": null, @@ -1576,6 +1598,7 @@ "work_item_code": "FP-09-19-02" }, { + "alternative_amount": null, "amount": "0.0328", "amount_unit": "㎡", "group_ratio_pct": null, @@ -1590,6 +1613,82 @@ "work_item_code": "FP-09-19-03" }, { + "alternative_amount": null, + "amount": "0.063", + "amount_unit": "주", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0292", + "raw_row_index": 0, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-09-20-01" + }, + { + "alternative_amount": null, + "amount": "0.042", + "amount_unit": "주", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0292", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-09-20-01" + }, + { + "alternative_amount": null, + "amount": "0.33", + "amount_unit": "주", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0292", + "raw_row_index": 2, + "resource_code": "0201-0070", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.7", + "variant": "", + "work_item_code": "FP-09-20-01" + }, + { + "alternative_amount": null, + "amount": "0.027", + "amount_unit": "주", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0293", + "raw_row_index": 0, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-09-20-02" + }, + { + "alternative_amount": null, + "amount": "0.36", + "amount_unit": "주", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0293", + "raw_row_index": 1, + "resource_code": "0201-0070", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.7", + "variant": "", + "work_item_code": "FP-09-20-02" + }, + { + "alternative_amount": null, "amount": "0.80", "amount_unit": "", "group_ratio_pct": null, @@ -1604,6 +1703,7 @@ "work_item_code": "FP-09-21" }, { + "alternative_amount": null, "amount": "0.03", "amount_unit": "", "group_ratio_pct": null, @@ -1618,6 +1718,7 @@ "work_item_code": "FP-09-21" }, { + "alternative_amount": null, "amount": "0.46", "amount_unit": "", "group_ratio_pct": null, @@ -1632,6 +1733,7 @@ "work_item_code": "FP-09-21" }, { + "alternative_amount": null, "amount": "0.03", "amount_unit": "", "group_ratio_pct": null, @@ -1646,6 +1748,7 @@ "work_item_code": "FP-09-21" }, { + "alternative_amount": null, "amount": "0.5", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1660,6 +1763,7 @@ "work_item_code": "FP-10-06-02" }, { + "alternative_amount": null, "amount": "0.0035", "amount_unit": "m", "group_ratio_pct": null, @@ -1674,6 +1778,7 @@ "work_item_code": "FP-10-07-01" }, { + "alternative_amount": null, "amount": "0.0035", "amount_unit": "m", "group_ratio_pct": null, @@ -1688,6 +1793,7 @@ "work_item_code": "FP-10-07-01" }, { + "alternative_amount": null, "amount": "0.02", "amount_unit": "m", "group_ratio_pct": null, @@ -1702,6 +1808,7 @@ "work_item_code": "FP-10-07-02" }, { + "alternative_amount": null, "amount": "0.02", "amount_unit": "m", "group_ratio_pct": null, @@ -1716,6 +1823,7 @@ "work_item_code": "FP-10-07-02" }, { + "alternative_amount": null, "amount": "0.06", "amount_unit": "m", "group_ratio_pct": null, @@ -1730,6 +1838,7 @@ "work_item_code": "FP-10-07-02" }, { + "alternative_amount": null, "amount": "0.01", "amount_unit": "m", "group_ratio_pct": null, @@ -1744,6 +1853,7 @@ "work_item_code": "FP-10-07-03" }, { + "alternative_amount": null, "amount": "0.01", "amount_unit": "m", "group_ratio_pct": null, @@ -1758,6 +1868,7 @@ "work_item_code": "FP-10-07-03" }, { + "alternative_amount": null, "amount": "0.03", "amount_unit": "m", "group_ratio_pct": null, @@ -1772,6 +1883,7 @@ "work_item_code": "FP-10-07-03" }, { + "alternative_amount": null, "amount": "2.0", "amount_unit": "", "group_ratio_pct": null, @@ -1786,6 +1898,37 @@ "work_item_code": "FP-10-07-04" }, { + "alternative_amount": null, + "amount": "2", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0312", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-10-07-04" + }, + { + "alternative_amount": null, + "amount": "1", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0315", + "raw_row_index": 0, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-10-08-03" + }, + { + "alternative_amount": null, "amount": "2.0", "amount_unit": "", "group_ratio_pct": null, @@ -1800,6 +1943,7 @@ "work_item_code": "FP-10-10-01" }, { + "alternative_amount": null, "amount": "2.0", "amount_unit": "", "group_ratio_pct": null, @@ -1814,6 +1958,67 @@ "work_item_code": "FP-10-10-02" }, { + "alternative_amount": null, + "amount": "0.16", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0326", + "raw_row_index": 0, + "resource_code": "1023", + "resource_kind": "labor", + "resource_name": "건축목공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-11-02" + }, + { + "alternative_amount": null, + "amount": "0.14", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0326", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-11-02" + }, + { + "alternative_amount": null, + "amount": "0.21", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0327", + "raw_row_index": 0, + "resource_code": "1023", + "resource_kind": "labor", + "resource_name": "건축목공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-11-03" + }, + { + "alternative_amount": null, + "amount": "0.19", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0327", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-11-03" + }, + { + "alternative_amount": null, "amount": "0.12", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1828,6 +2033,7 @@ "work_item_code": "FP-12-01-01" }, { + "alternative_amount": null, "amount": "0.15", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1842,6 +2048,7 @@ "work_item_code": "FP-12-01-01" }, { + "alternative_amount": null, "amount": "0.14", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1856,6 +2063,7 @@ "work_item_code": "FP-12-01-01" }, { + "alternative_amount": null, "amount": "0.16", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1870,6 +2078,7 @@ "work_item_code": "FP-12-01-01" }, { + "alternative_amount": null, "amount": "0.24", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1884,6 +2093,7 @@ "work_item_code": "FP-12-01-01" }, { + "alternative_amount": null, "amount": "0.30", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1898,6 +2108,7 @@ "work_item_code": "FP-12-01-01" }, { + "alternative_amount": null, "amount": "0.15", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1912,6 +2123,7 @@ "work_item_code": "FP-12-01-02" }, { + "alternative_amount": null, "amount": "0.46", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1926,6 +2138,7 @@ "work_item_code": "FP-12-01-02" }, { + "alternative_amount": null, "amount": "0.17", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1940,6 +2153,7 @@ "work_item_code": "FP-12-01-02" }, { + "alternative_amount": null, "amount": "0.68", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1954,6 +2168,7 @@ "work_item_code": "FP-12-01-02" }, { + "alternative_amount": null, "amount": "0.24", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1968,6 +2183,7 @@ "work_item_code": "FP-12-01-02" }, { + "alternative_amount": null, "amount": "0.94", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1982,6 +2198,7 @@ "work_item_code": "FP-12-01-02" }, { + "alternative_amount": null, "amount": "0.85", "amount_unit": "㎥", "group_ratio_pct": null, @@ -1996,6 +2213,7 @@ "work_item_code": "FP-12-01-03" }, { + "alternative_amount": null, "amount": "0.82", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2010,6 +2228,7 @@ "work_item_code": "FP-12-01-03" }, { + "alternative_amount": null, "amount": "0.87", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2024,6 +2243,7 @@ "work_item_code": "FP-12-01-03" }, { + "alternative_amount": null, "amount": "0.99", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2038,6 +2258,7 @@ "work_item_code": "FP-12-01-03" }, { + "alternative_amount": null, "amount": "1.29", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2052,6 +2273,7 @@ "work_item_code": "FP-12-01-03" }, { + "alternative_amount": null, "amount": "1.36", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2066,10 +2288,26 @@ "work_item_code": "FP-12-01-03" }, { + "alternative_amount": null, + "amount": "0.34", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0334", + "raw_row_index": 0, + "resource_code": "1027", + "resource_kind": "labor", + "resource_name": "미장공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-02" + }, + { + "alternative_amount": null, "amount": "0.009090909090909090909090909091", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0362", "raw_row_index": 0, "resource_code": "1006", @@ -2080,10 +2318,11 @@ "work_item_code": "FP-12-02" }, { + "alternative_amount": null, "amount": "0.006060606060606060606060606061", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0362", "raw_row_index": 1, "resource_code": "1006", @@ -2094,6 +2333,7 @@ "work_item_code": "FP-12-02" }, { + "alternative_amount": null, "amount": "1.07", "amount_unit": "ton", "group_ratio_pct": null, @@ -2108,6 +2348,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "0.35", "amount_unit": "ton", "group_ratio_pct": null, @@ -2122,6 +2363,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "1.69", "amount_unit": "ton", "group_ratio_pct": null, @@ -2136,6 +2378,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "0.69", "amount_unit": "ton", "group_ratio_pct": null, @@ -2150,6 +2393,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "1.24", "amount_unit": "ton", "group_ratio_pct": null, @@ -2164,6 +2408,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "0.45", "amount_unit": "ton", "group_ratio_pct": null, @@ -2178,6 +2423,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "1.84", "amount_unit": "ton", "group_ratio_pct": null, @@ -2192,6 +2438,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "0.75", "amount_unit": "ton", "group_ratio_pct": null, @@ -2206,6 +2453,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "1.51", "amount_unit": "ton", "group_ratio_pct": null, @@ -2220,6 +2468,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "0.50", "amount_unit": "ton", "group_ratio_pct": null, @@ -2234,6 +2483,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "1.92", "amount_unit": "ton", "group_ratio_pct": null, @@ -2248,6 +2498,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "0.80", "amount_unit": "ton", "group_ratio_pct": null, @@ -2262,6 +2513,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "1.69", "amount_unit": "ton", "group_ratio_pct": null, @@ -2276,6 +2528,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "0.60", "amount_unit": "ton", "group_ratio_pct": null, @@ -2290,6 +2543,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "2.14", "amount_unit": "ton", "group_ratio_pct": null, @@ -2304,6 +2558,7 @@ "work_item_code": "FP-12-03" }, { + "alternative_amount": null, "amount": "0.86", "amount_unit": "ton", "group_ratio_pct": null, @@ -2318,62 +2573,7 @@ "work_item_code": "FP-12-03" }, { - "amount": "0.22", - "amount_unit": "㎡", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0336", - "raw_row_index": 6, - "resource_code": "1007", - "resource_kind": "labor", - "resource_name": "형틀목공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-04" - }, - { - "amount": "0.12", - "amount_unit": "㎡", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0336", - "raw_row_index": 7, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-04" - }, - { - "amount": "0.07", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0337", - "raw_row_index": 1, - "resource_code": "1007", - "resource_kind": "labor", - "resource_name": "형틀목공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-05" - }, - { - "amount": "0.03", - "amount_unit": "", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0337", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-05" - }, - { + "alternative_amount": null, "amount": "0.002857142857142857142857142857", "amount_unit": "", "group_ratio_pct": null, @@ -2388,6 +2588,7 @@ "work_item_code": "FP-12-07-02" }, { + "alternative_amount": null, "amount": "0.004285714285714285714285714286", "amount_unit": "", "group_ratio_pct": null, @@ -2402,62 +2603,7 @@ "work_item_code": "FP-12-07-02" }, { - "amount": "0.0055", - "amount_unit": "m", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0345", - "raw_row_index": 1, - "resource_code": "1039", - "resource_kind": "labor", - "resource_name": "배관공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-10" - }, - { - "amount": "0.0055", - "amount_unit": "m", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0345", - "raw_row_index": 2, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-10" - }, - { - "amount": "0.003", - "amount_unit": "m", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0345", - "raw_row_index": 4, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-10" - }, - { - "amount": "0.13", - "amount_unit": "m", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0345", - "raw_row_index": 7, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-10" - }, - { + "alternative_amount": null, "amount": "0.12", "amount_unit": "개소", "group_ratio_pct": null, @@ -2472,6 +2618,7 @@ "work_item_code": "FP-12-11-02" }, { + "alternative_amount": null, "amount": "1.23", "amount_unit": "개소", "group_ratio_pct": null, @@ -2486,6 +2633,52 @@ "work_item_code": "FP-12-11-02" }, { + "alternative_amount": null, + "amount": "3", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0355", + "raw_row_index": 1, + "resource_code": "1013", + "resource_kind": "labor", + "resource_name": "콘크리트공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-17-01" + }, + { + "alternative_amount": null, + "amount": "2", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0355", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-17-01" + }, + { + "alternative_amount": null, + "amount": "1", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0355", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-12-17-01" + }, + { + "alternative_amount": null, "amount": "0.07", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2500,6 +2693,7 @@ "work_item_code": "FP-12-17-02" }, { + "alternative_amount": null, "amount": "0.05", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2514,34 +2708,22 @@ "work_item_code": "FP-12-17-02" }, { - "amount": "4.2", - "amount_unit": "ton", + "alternative_amount": null, + "amount": "0.10", + "amount_unit": "", "group_ratio_pct": null, "pum_form": "requirement", - "pum_table_id": "F0365", - "raw_row_index": 1, - "resource_code": "1008", + "pum_table_id": "F0366", + "raw_row_index": 5, + "resource_code": "1006", "resource_kind": "labor", - "resource_name": "철근공", + "resource_name": "비계공", "resource_spec": "", "variant": "", - "work_item_code": "FP-12-18" - }, - { - "amount": "2.4", - "amount_unit": "ton", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0365", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-18" + "work_item_code": "FP-12-19" }, { + "alternative_amount": null, "amount": "0.07", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2556,6 +2738,7 @@ "work_item_code": "FP-12-20" }, { + "alternative_amount": null, "amount": "0.05", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2570,34 +2753,7 @@ "work_item_code": "FP-12-20" }, { - "amount": "0.034", - "amount_unit": "㎡", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0368", - "raw_row_index": 1, - "resource_code": "1026", - "resource_kind": "labor", - "resource_name": "방수공", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-21" - }, - { - "amount": "0.04", - "amount_unit": "㎡", - "group_ratio_pct": null, - "pum_form": "requirement", - "pum_table_id": "F0368", - "raw_row_index": 2, - "resource_code": "1002", - "resource_kind": "labor", - "resource_name": "보통인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-21" - }, - { + "alternative_amount": null, "amount": "0.003", "amount_unit": "㎡", "group_ratio_pct": null, @@ -2612,20 +2768,7 @@ "work_item_code": "FP-12-23" }, { - "amount": "0.002", - "amount_unit": "㎡", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0372", - "raw_row_index": 1, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-24-02" - }, - { + "alternative_amount": null, "amount": "0.04", "amount_unit": "㎡", "group_ratio_pct": null, @@ -2636,10 +2779,11 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", - "variant": "", + "variant": "뒷채움 자재비 및 운반비 별산", "work_item_code": "FP-12-24-02" }, { + "alternative_amount": null, "amount": "0.06", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2654,6 +2798,7 @@ "work_item_code": "FP-12-25" }, { + "alternative_amount": null, "amount": "0.6", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2668,6 +2813,7 @@ "work_item_code": "FP-12-25" }, { + "alternative_amount": null, "amount": "1", "amount_unit": "개소", "group_ratio_pct": null, @@ -2682,20 +2828,7 @@ "work_item_code": "FP-12-26" }, { - "amount": "0.002", - "amount_unit": "㎡", - "group_ratio_pct": "10", - "pum_form": "requirement", - "pum_table_id": "F0371", - "raw_row_index": 1, - "resource_code": "1003", - "resource_kind": "labor", - "resource_name": "특별인부", - "resource_spec": "", - "variant": "", - "work_item_code": "FP-12-24-01" - }, - { + "alternative_amount": null, "amount": "0.04", "amount_unit": "㎡", "group_ratio_pct": null, @@ -2706,10 +2839,11 @@ "resource_kind": "labor", "resource_name": "보통인부", "resource_spec": "", - "variant": "", + "variant": "뒷채움 자재비 및 운반비 별산", "work_item_code": "FP-12-24-01" }, { + "alternative_amount": null, "amount": "0.08", "amount_unit": "㎡", "group_ratio_pct": null, @@ -2724,6 +2858,7 @@ "work_item_code": "FP-12-27-02" }, { + "alternative_amount": null, "amount": "0.04", "amount_unit": "개소", "group_ratio_pct": null, @@ -2738,6 +2873,7 @@ "work_item_code": "FP-12-27-03" }, { + "alternative_amount": null, "amount": "0.12", "amount_unit": "개소", "group_ratio_pct": null, @@ -2752,6 +2888,7 @@ "work_item_code": "FP-12-28" }, { + "alternative_amount": null, "amount": "0.004", "amount_unit": "㎡", "group_ratio_pct": null, @@ -2766,6 +2903,7 @@ "work_item_code": "FP-12-33" }, { + "alternative_amount": null, "amount": "3.8", "amount_unit": "ton", "group_ratio_pct": null, @@ -2780,6 +2918,7 @@ "work_item_code": "FP-12-34-03" }, { + "alternative_amount": null, "amount": "2.2", "amount_unit": "ton", "group_ratio_pct": null, @@ -2794,6 +2933,7 @@ "work_item_code": "FP-12-34-03" }, { + "alternative_amount": null, "amount": "0.14", "amount_unit": "㎡", "group_ratio_pct": null, @@ -2808,6 +2948,7 @@ "work_item_code": "FP-12-35" }, { + "alternative_amount": null, "amount": "0.05", "amount_unit": "㎡", "group_ratio_pct": null, @@ -2822,10 +2963,11 @@ "work_item_code": "FP-12-35" }, { + "alternative_amount": null, "amount": "0.16", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0395", "raw_row_index": 0, "resource_code": "1007", @@ -2836,10 +2978,11 @@ "work_item_code": "FP-12-38-03" }, { + "alternative_amount": null, "amount": "0.04", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0395", "raw_row_index": 0, "resource_code": "1002", @@ -2850,10 +2993,11 @@ "work_item_code": "FP-12-38-03" }, { + "alternative_amount": null, "amount": "0.1142857142857142857142857143", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0395", "raw_row_index": 1, "resource_code": "1007", @@ -2864,10 +3008,11 @@ "work_item_code": "FP-12-38-03" }, { + "alternative_amount": null, "amount": "0.02857142857142857142857142857", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0395", "raw_row_index": 1, "resource_code": "1002", @@ -2878,10 +3023,11 @@ "work_item_code": "FP-12-38-03" }, { + "alternative_amount": null, "amount": "0.1", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0395", "raw_row_index": 2, "resource_code": "1007", @@ -2892,10 +3038,11 @@ "work_item_code": "FP-12-38-03" }, { + "alternative_amount": null, "amount": "0.025", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0395", "raw_row_index": 2, "resource_code": "1002", @@ -2906,6 +3053,7 @@ "work_item_code": "FP-12-38-03" }, { + "alternative_amount": null, "amount": "0.5", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2920,6 +3068,7 @@ "work_item_code": "FP-13-02-01" }, { + "alternative_amount": null, "amount": "0.17", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2934,6 +3083,7 @@ "work_item_code": "FP-13-02-02" }, { + "alternative_amount": null, "amount": "0.026", "amount_unit": "개", "group_ratio_pct": null, @@ -2948,6 +3098,187 @@ "work_item_code": "FP-13-02-03" }, { + "alternative_amount": null, + "amount": "0.11", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "35cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.04", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "35cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.10", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "55cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.03", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "55cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.09", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "75cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.02", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "75cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.22", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "35cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.22", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "35cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.21", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "55cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.21", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "55cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.20", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "75cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, + "amount": "0.20", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0418", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "75cm 이하", + "work_item_code": "FP-13-03" + }, + { + "alternative_amount": null, "amount": "0.5", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2962,6 +3293,7 @@ "work_item_code": "FP-13-03-01" }, { + "alternative_amount": null, "amount": "0.4", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2976,6 +3308,7 @@ "work_item_code": "FP-13-03-01" }, { + "alternative_amount": null, "amount": "0.5", "amount_unit": "㎥", "group_ratio_pct": null, @@ -2990,6 +3323,367 @@ "work_item_code": "FP-13-03-01" }, { + "alternative_amount": null, + "amount": "0.10", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "35cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.05", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "35cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.09", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "55cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.04", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "55cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.08", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "75cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.03", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "75cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.39", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "35cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.39", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "35cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.37", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "55cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.37", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "55cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.35", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "75cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.35", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0407", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "75cm 이하", + "work_item_code": "FP-13-04-02" + }, + { + "alternative_amount": null, + "amount": "0.09", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "35cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.05", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "35cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.08", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "55cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.04", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "55cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.07", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "75cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.03", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "75cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.31", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "35cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.31", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "35cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.30", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "55cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.30", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "55cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.28", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "75cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, + "amount": "0.28", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0414", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "75cm 이하", + "work_item_code": "FP-13-04-05" + }, + { + "alternative_amount": null, "amount": "0.05", "amount_unit": "m", "group_ratio_pct": null, @@ -3004,6 +3698,7 @@ "work_item_code": "FP-13-04-06" }, { + "alternative_amount": null, "amount": "0.08", "amount_unit": "m", "group_ratio_pct": null, @@ -3018,6 +3713,7 @@ "work_item_code": "FP-13-04-06" }, { + "alternative_amount": null, "amount": "0.09", "amount_unit": "m", "group_ratio_pct": null, @@ -3032,6 +3728,187 @@ "work_item_code": "FP-13-04-06" }, { + "alternative_amount": null, + "amount": "0.13", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "35cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.04", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "35cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.12", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "55cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.03", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "55cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.11", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "75cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.02", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "75cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.25", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "35cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.25", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "35cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.24", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "55cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.24", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "55cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.22", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 2, + "resource_code": "0201-0060", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.6", + "variant": "75cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, + "amount": "0.22", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0417", + "raw_row_index": 2, + "resource_code": "7206-0070", + "resource_kind": "machine", + "resource_name": "부착용 집게", + "resource_spec": "0.6∼0.8", + "variant": "75cm 이하", + "work_item_code": "FP-13-05-02" + }, + { + "alternative_amount": null, "amount": "0.083", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3042,10 +3919,41 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ∼60㎝미만", "work_item_code": "FP-13-06-01" }, { + "alternative_amount": null, + "amount": "0.075", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0419", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 60㎝이상 ∼80㎝미만", + "work_item_code": "FP-13-06-01" + }, + { + "alternative_amount": null, + "amount": "0.068", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0419", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 80㎝이상 ∼100㎝이하", + "work_item_code": "FP-13-06-01" + }, + { + "alternative_amount": null, "amount": "0.104", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3056,24 +3964,86 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ∼60㎝미만", "work_item_code": "FP-13-06-01" }, { - "amount": "0.384", + "alternative_amount": null, + "amount": "0.108", "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0419", - "raw_row_index": 4, - "resource_code": "0201-0080", - "resource_kind": "machine", - "resource_name": "굴착기(무한궤도)", - "resource_spec": "0.8", - "variant": "", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ∼80㎝미만", "work_item_code": "FP-13-06-01" }, { + "alternative_amount": null, + "amount": "0.111", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0419", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ∼100㎝이하", + "work_item_code": "FP-13-06-01" + }, + { + "alternative_amount": null, + "amount": "0.104", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0419", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 40㎝이상 ∼60㎝미만", + "work_item_code": "FP-13-06-01" + }, + { + "alternative_amount": null, + "amount": "0.108", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0419", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ∼80㎝미만", + "work_item_code": "FP-13-06-01" + }, + { + "alternative_amount": null, + "amount": "0.111", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0419", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ∼100㎝이하", + "work_item_code": "FP-13-06-01" + }, + { + "alternative_amount": null, "amount": "0.083", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3084,10 +4054,41 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ∼60㎝미만", "work_item_code": "FP-13-06-02" }, { + "alternative_amount": null, + "amount": "0.075", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0420", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 60㎝이상 ∼80㎝미만", + "work_item_code": "FP-13-06-02" + }, + { + "alternative_amount": null, + "amount": "0.068", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0420", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 80㎝이상 ∼100㎝이하", + "work_item_code": "FP-13-06-02" + }, + { + "alternative_amount": null, "amount": "0.13", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3098,24 +4099,86 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ∼60㎝미만", "work_item_code": "FP-13-06-02" }, { - "amount": "0.48", + "alternative_amount": null, + "amount": "0.135", "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0420", - "raw_row_index": 4, - "resource_code": "0201-0080", - "resource_kind": "machine", - "resource_name": "굴착기(무한궤도)", - "resource_spec": "0.8", - "variant": "", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ∼80㎝미만", "work_item_code": "FP-13-06-02" }, { + "alternative_amount": null, + "amount": "0.139", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0420", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ∼100㎝이하", + "work_item_code": "FP-13-06-02" + }, + { + "alternative_amount": null, + "amount": "0.13", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0420", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 40㎝이상 ∼60㎝미만", + "work_item_code": "FP-13-06-02" + }, + { + "alternative_amount": null, + "amount": "0.135", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0420", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ∼80㎝미만", + "work_item_code": "FP-13-06-02" + }, + { + "alternative_amount": null, + "amount": "0.139", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0420", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ∼100㎝이하", + "work_item_code": "FP-13-06-02" + }, + { + "alternative_amount": null, "amount": "0.119", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3126,10 +4189,41 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ~60㎝미만", "work_item_code": "FP-13-06-03" }, { + "alternative_amount": null, + "amount": "0.107", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0421", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 60㎝이상 ~80㎝미만", + "work_item_code": "FP-13-06-03" + }, + { + "alternative_amount": null, + "amount": "0.097", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0421", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 80㎝이상 ~100㎝이하", + "work_item_code": "FP-13-06-03" + }, + { + "alternative_amount": null, "amount": "0.186", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3140,24 +4234,86 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ~60㎝미만", "work_item_code": "FP-13-06-03" }, { - "amount": "0.686", + "alternative_amount": null, + "amount": "0.193", "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0421", - "raw_row_index": 4, - "resource_code": "0201-0080", - "resource_kind": "machine", - "resource_name": "굴착기(무한궤도)", - "resource_spec": "0.8", - "variant": "", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ~80㎝미만", "work_item_code": "FP-13-06-03" }, { + "alternative_amount": null, + "amount": "0.199", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0421", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ~100㎝이하", + "work_item_code": "FP-13-06-03" + }, + { + "alternative_amount": null, + "amount": "0.186", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0421", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 40㎝이상 ~60㎝미만", + "work_item_code": "FP-13-06-03" + }, + { + "alternative_amount": null, + "amount": "0.193", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0421", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ~80㎝미만", + "work_item_code": "FP-13-06-03" + }, + { + "alternative_amount": null, + "amount": "0.199", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0421", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ~100㎝이하", + "work_item_code": "FP-13-06-03" + }, + { + "alternative_amount": null, "amount": "0.058", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3168,10 +4324,41 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ~60㎝미만", "work_item_code": "FP-13-07-01" }, { + "alternative_amount": null, + "amount": "0.053", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0422", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 60㎝이상 ~80㎝미만", + "work_item_code": "FP-13-07-01" + }, + { + "alternative_amount": null, + "amount": "0.048", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0422", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 80㎝이상 ~100㎝이하", + "work_item_code": "FP-13-07-01" + }, + { + "alternative_amount": null, "amount": "0.058", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3182,24 +4369,86 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ~60㎝미만", "work_item_code": "FP-13-07-01" }, { - "amount": "0.24", + "alternative_amount": null, + "amount": "0.053", "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0422", - "raw_row_index": 4, - "resource_code": "0201-0080", - "resource_kind": "machine", - "resource_name": "굴착기(무한궤도)", - "resource_spec": "0.8", - "variant": "", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ~80㎝미만", "work_item_code": "FP-13-07-01" }, { + "alternative_amount": null, + "amount": "0.048", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0422", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ~100㎝이하", + "work_item_code": "FP-13-07-01" + }, + { + "alternative_amount": null, + "amount": "0.083", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0422", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 40㎝이상 ~60㎝미만", + "work_item_code": "FP-13-07-01" + }, + { + "alternative_amount": null, + "amount": "0.089", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0422", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ~80㎝미만", + "work_item_code": "FP-13-07-01" + }, + { + "alternative_amount": null, + "amount": "0.094", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0422", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ~100㎝이하", + "work_item_code": "FP-13-07-01" + }, + { + "alternative_amount": null, "amount": "0.058", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3210,10 +4459,41 @@ "resource_kind": "labor", "resource_name": "작업반장", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ∼60㎝미만", "work_item_code": "FP-13-07-02" }, { + "alternative_amount": null, + "amount": "0.053", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0423", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 60㎝이상 ∼80㎝미만", + "work_item_code": "FP-13-07-02" + }, + { + "alternative_amount": null, + "amount": "0.048", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0423", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "variant": "직경 80㎝이상 ∼100㎝이하", + "work_item_code": "FP-13-07-02" + }, + { + "alternative_amount": null, "amount": "0.101", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3224,24 +4504,131 @@ "resource_kind": "labor", "resource_name": "특별인부", "resource_spec": "", - "variant": "", + "variant": "직경 40㎝이상 ∼60㎝미만", "work_item_code": "FP-13-07-02" }, { - "amount": "0.336", + "alternative_amount": null, + "amount": "0.102", "amount_unit": "㎡", "group_ratio_pct": null, "pum_form": "requirement", "pum_table_id": "F0423", - "raw_row_index": 4, - "resource_code": "0201-0080", - "resource_kind": "machine", - "resource_name": "굴착기(무한궤도)", - "resource_spec": "0.8", - "variant": "", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ∼80㎝미만", "work_item_code": "FP-13-07-02" }, { + "alternative_amount": null, + "amount": "0.102", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0423", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ∼100㎝이하", + "work_item_code": "FP-13-07-02" + }, + { + "alternative_amount": null, + "amount": "0.101", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0423", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 40㎝이상 ∼60㎝미만", + "work_item_code": "FP-13-07-02" + }, + { + "alternative_amount": null, + "amount": "0.102", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0423", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 60㎝이상 ∼80㎝미만", + "work_item_code": "FP-13-07-02" + }, + { + "alternative_amount": null, + "amount": "0.102", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0423", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "직경 80㎝이상 ∼100㎝이하", + "work_item_code": "FP-13-07-02" + }, + { + "alternative_amount": null, + "amount": "0.3", + "amount_unit": "", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0424", + "raw_row_index": 0, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-08" + }, + { + "alternative_amount": null, + "amount": "0.084", + "amount_unit": "ton", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0425", + "raw_row_index": 0, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-09" + }, + { + "alternative_amount": null, + "amount": "0.251", + "amount_unit": "ton", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0425", + "raw_row_index": 1, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-09" + }, + { + "alternative_amount": null, "amount": "0.009", "amount_unit": "개", "group_ratio_pct": null, @@ -3256,6 +4643,7 @@ "work_item_code": "FP-13-10-01" }, { + "alternative_amount": null, "amount": "0.022", "amount_unit": "개", "group_ratio_pct": null, @@ -3270,6 +4658,7 @@ "work_item_code": "FP-13-10-01" }, { + "alternative_amount": null, "amount": "0.035", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3284,6 +4673,7 @@ "work_item_code": "FP-13-11-01" }, { + "alternative_amount": null, "amount": "0.015", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3298,6 +4688,7 @@ "work_item_code": "FP-13-11-01" }, { + "alternative_amount": null, "amount": "0.037", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3312,6 +4703,7 @@ "work_item_code": "FP-13-11-01" }, { + "alternative_amount": null, "amount": "0.013", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3326,6 +4718,7 @@ "work_item_code": "FP-13-11-02" }, { + "alternative_amount": null, "amount": "0.005", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3340,6 +4733,7 @@ "work_item_code": "FP-13-11-02" }, { + "alternative_amount": null, "amount": "0.039", "amount_unit": "㎡", "group_ratio_pct": null, @@ -3354,6 +4748,97 @@ "work_item_code": "FP-13-11-02" }, { + "alternative_amount": null, + "amount": "0.004", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0435", + "raw_row_index": 0, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-11-03" + }, + { + "alternative_amount": null, + "amount": "0.007", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0435", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-11-03" + }, + { + "alternative_amount": null, + "amount": "0.072", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0436", + "raw_row_index": 3, + "resource_code": "1033", + "resource_kind": "labor", + "resource_name": "석공", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-11-04" + }, + { + "alternative_amount": null, + "amount": "0.053", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0436", + "raw_row_index": 4, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-11-04" + }, + { + "alternative_amount": null, + "amount": "0.013", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0436", + "raw_row_index": 5, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-11-04" + }, + { + "alternative_amount": null, + "amount": "0.101", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0436", + "raw_row_index": 6, + "resource_code": "0201-0070", + "resource_kind": "machine", + "resource_name": "굴착기(무한궤도)", + "resource_spec": "0.7", + "variant": "", + "work_item_code": "FP-13-11-04" + }, + { + "alternative_amount": null, "amount": "0.0141", "amount_unit": "", "group_ratio_pct": null, @@ -3368,6 +4853,7 @@ "work_item_code": "FP-13-12-02" }, { + "alternative_amount": null, "amount": "0.0381", "amount_unit": "", "group_ratio_pct": null, @@ -3382,6 +4868,7 @@ "work_item_code": "FP-13-12-02" }, { + "alternative_amount": null, "amount": "0.0099", "amount_unit": "", "group_ratio_pct": null, @@ -3396,6 +4883,7 @@ "work_item_code": "FP-13-12-02" }, { + "alternative_amount": null, "amount": "7.274", "amount_unit": "㎥", "group_ratio_pct": null, @@ -3410,6 +4898,7 @@ "work_item_code": "FP-13-13-01" }, { + "alternative_amount": null, "amount": "0.786", "amount_unit": "㎥", "group_ratio_pct": null, @@ -3424,6 +4913,7 @@ "work_item_code": "FP-13-13-01" }, { + "alternative_amount": null, "amount": "16.975", "amount_unit": "㎥", "group_ratio_pct": null, @@ -3438,6 +4928,7 @@ "work_item_code": "FP-13-13-01" }, { + "alternative_amount": null, "amount": "1.848", "amount_unit": "㎥", "group_ratio_pct": null, @@ -3452,6 +4943,7 @@ "work_item_code": "FP-13-13-01" }, { + "alternative_amount": null, "amount": "0.2", "amount_unit": "㎥", "group_ratio_pct": "10", @@ -3466,6 +4958,37 @@ "work_item_code": "FP-13-13-02" }, { + "alternative_amount": null, + "amount": "0.014", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0442", + "raw_row_index": 1, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-13-02" + }, + { + "alternative_amount": null, + "amount": "0.003", + "amount_unit": "㎥", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0442", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-13-13-02" + }, + { + "alternative_amount": null, "amount": "2.80", "amount_unit": "㎥", "group_ratio_pct": null, @@ -3480,6 +5003,7 @@ "work_item_code": "FP-13-13-02" }, { + "alternative_amount": null, "amount": "0.80", "amount_unit": "㎥", "group_ratio_pct": null, @@ -3494,6 +5018,7 @@ "work_item_code": "FP-13-13-02" }, { + "alternative_amount": null, "amount": "6.31", "amount_unit": "㎥", "group_ratio_pct": null, @@ -3508,6 +5033,7 @@ "work_item_code": "FP-13-13-02" }, { + "alternative_amount": null, "amount": "1.31", "amount_unit": "㎥", "group_ratio_pct": null, @@ -3522,6 +5048,7 @@ "work_item_code": "FP-13-13-02" }, { + "alternative_amount": null, "amount": "0.030", "amount_unit": "", "group_ratio_pct": null, @@ -3536,6 +5063,7 @@ "work_item_code": "FP-13-14" }, { + "alternative_amount": null, "amount": "0.035", "amount_unit": "", "group_ratio_pct": null, @@ -3550,6 +5078,7 @@ "work_item_code": "FP-13-14" }, { + "alternative_amount": null, "amount": "0.025", "amount_unit": "", "group_ratio_pct": null, @@ -3564,6 +5093,7 @@ "work_item_code": "FP-13-14" }, { + "alternative_amount": null, "amount": "0.0027", "amount_unit": "m", "group_ratio_pct": null, @@ -3578,10 +5108,131 @@ "work_item_code": "FP-13-15-01" }, { + "alternative_amount": null, + "amount": "0.09", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0448", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "사 면", + "work_item_code": "FP-13-16-01" + }, + { + "alternative_amount": null, + "amount": "0.10", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0448", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "연약지반", + "work_item_code": "FP-13-16-01" + }, + { + "alternative_amount": null, + "amount": "0.16", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0448", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "사 면", + "work_item_code": "FP-13-16-01" + }, + { + "alternative_amount": null, + "amount": "0.24", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0448", + "raw_row_index": 2, + "resource_code": "1003", + "resource_kind": "labor", + "resource_name": "특별인부", + "resource_spec": "", + "variant": "연약지반", + "work_item_code": "FP-13-16-01" + }, + { + "alternative_amount": null, + "amount": "0.05", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0448", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "사 면", + "work_item_code": "FP-13-16-01" + }, + { + "alternative_amount": null, + "amount": "0.05", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0448", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "연약지반", + "work_item_code": "FP-13-16-01" + }, + { + "alternative_amount": null, + "amount": "0.12", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0448", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "사 면", + "work_item_code": "FP-13-16-01" + }, + { + "alternative_amount": null, + "amount": "0.12", + "amount_unit": "㎡", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0448", + "raw_row_index": 3, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "연약지반", + "work_item_code": "FP-13-16-01" + }, + { + "alternative_amount": null, "amount": "0.02222222222222222222222222222", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0449", "raw_row_index": 0, "resource_code": "1038", @@ -3592,10 +5243,11 @@ "work_item_code": "FP-13-16-02" }, { + "alternative_amount": null, "amount": "0.01111111111111111111111111111", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0449", "raw_row_index": 0, "resource_code": "1002", @@ -3606,10 +5258,11 @@ "work_item_code": "FP-13-16-02" }, { + "alternative_amount": null, "amount": "0.01538461538461538461538461538", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0449", "raw_row_index": 1, "resource_code": "1038", @@ -3620,10 +5273,11 @@ "work_item_code": "FP-13-16-02" }, { + "alternative_amount": null, "amount": "0.007692307692307692307692307692", "amount_unit": "", "group_ratio_pct": null, - "pum_form": "reference", + "pum_form": "requirement", "pum_table_id": "F0449", "raw_row_index": 1, "resource_code": "1002", @@ -3632,6 +5286,36 @@ "resource_spec": "", "variant": "폭 2.0m 이하", "work_item_code": "FP-13-16-02" + }, + { + "alternative_amount": null, + "amount": "0.05", + "amount_unit": "본", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0450", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-14-01" + }, + { + "alternative_amount": null, + "amount": "0.066", + "amount_unit": "본", + "group_ratio_pct": null, + "pum_form": "requirement", + "pum_table_id": "F0451", + "raw_row_index": 1, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "variant": "", + "work_item_code": "FP-14-02" } ], "schema_version": "1.0", @@ -3643,15 +5327,15 @@ }, "source_master_file": { "file": "work_item_master_2026-01-01.json", - "sha256": "fe454c56c9dc01ad7dae04a8f90d776d08c5ce33badeadb2606b35234bfce7eb" + "sha256": "f80d3ad4bf3ee242d282d8d54d18305e1b89fbbb9fc414c31b95cecc8b84d47f" }, "stats": { - "rows": 259, + "rows": 354, "skipped_forms": { "coefficient": 19, - "reference": 92, + "reference": 56, "undetermined": 75 }, - "unmatched": 311 + "unmatched": 1008 } } \ No newline at end of file diff --git a/resources/data_cost_resource_axis/unmatched_2026-01-01.json b/resources/data_cost_resource_axis/unmatched_2026-01-01.json index 3ca2ddb2..94131a11 100644 --- a/resources/data_cost_resource_axis/unmatched_2026-01-01.json +++ b/resources/data_cost_resource_axis/unmatched_2026-01-01.json @@ -8,6 +8,54 @@ "reason": "작업조 표를 못 읽었습니다 — 작업조 줄 「1」을 못 풀었습니다", "work_item_code": "FP-01-04-26" }, + { + "cell": "단 위 작 업 별", + "pum_table_id": "F0455", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0455", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01" + }, + { + "cell": "ㆍ 둘레베기", + "pum_table_id": "F0455", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01" + }, + { + "cell": "합 계", + "pum_table_id": "F0455", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01" + }, + { + "cell": "직접노무비", + "pum_table_id": "F0455", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01" + }, + { + "cell": "o 집단화 정도(1-4-3)", + "pum_table_id": "F0455", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01" + }, + { + "cell": "o 경사도(1-4-5)", + "pum_table_id": "F0455", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01" + }, + { + "cell": "합 계", + "pum_table_id": "F0455", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01" + }, { "cell": "보통휘발유 (주연료)", "pum_table_id": "F0042", @@ -38,12 +86,48 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-02-01-01" }, + { + "cell": "페인트", + "pum_table_id": "F0049", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-04" + }, + { + "cell": "마킹테이프", + "pum_table_id": "F0049", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-04" + }, + { + "cell": "페인트", + "pum_table_id": "F0050", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-04" + }, + { + "cell": "마킹테이프", + "pum_table_id": "F0051", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-04" + }, + { + "cell": "페인트", + "pum_table_id": "F0052", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-04" + }, { "cell": "농약 (Fluroxypyr -meptyl + Triclypyr-TEA 미탁제)", "pum_table_id": "F0053", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-02-01-05" }, + { + "cell": "친환경 비닐랩", + "pum_table_id": "F0055", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-05" + }, { "cell": "농약 (글리포세이트)", "pum_table_id": "F0055", @@ -56,6 +140,48 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-02-01-05" }, + { + "cell": "천공테이프", + "pum_table_id": "F0056", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-06" + }, + { + "cell": "흰색 페인트 (친환경성)", + "pum_table_id": "F0056", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-06" + }, + { + "cell": "표식라벨", + "pum_table_id": "F0056", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-06" + }, + { + "cell": "천공기날", + "pum_table_id": "F0056", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-06" + }, + { + "cell": "약재주입기", + "pum_table_id": "F0056", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-06" + }, + { + "cell": "방제복", + "pum_table_id": "F0056", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-06" + }, + { + "cell": "약제배낭", + "pum_table_id": "F0056", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-06" + }, { "cell": "천공기날", "pum_table_id": "F0056", @@ -80,30 +206,918 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-02-01-06" }, + { + "cell": "벌근훈증약제", + "pum_table_id": "F0057", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-02-01-07" + }, + { + "cell": "벌근피복제", + "pum_table_id": "F0057", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-02-01-07" + }, + { + "cell": "휘발유 (양수기)", + "pum_table_id": "F0058", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-08" + }, + { + "cell": "깃 발", + "pum_table_id": "F0058", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-08" + }, + { + "cell": "휘발유 (연료)", + "pum_table_id": "F0059", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-09" + }, + { + "cell": "잡품", + "pum_table_id": "F0059", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-09" + }, + { + "cell": "경유(차량살포)", + "pum_table_id": "F0061", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-01-11" + }, + { + "cell": "단 위 작 업 별", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "ㆍ 묘목찾기", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "2. 모두베기", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "ㆍ 예취기 사용", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "- 재료비(예취기)", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "ㆍ보통휘발유(주연료)", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "ㆍ보통휘발유(잡품)", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "- 기계경비(예취기)", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "합 계", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "직접노무비", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "재 료 비", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "경비(기계경비)", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "o 집단화 정도(1-4-3)", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "o 경사도(1-4-5)", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, + { + "cell": "합 계", + "pum_table_id": "F0456", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-02-02" + }, { "cell": "경비(기계경비)", "pum_table_id": "F0456", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-02-02" }, + { + "cell": "단 위 작 업 별", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ단목", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 재료비(체인톱)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ보통휘발유(주연료)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ보통휘발유(잡품)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ체인오일(일반)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 기계경비(체인톱)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "2. 집재", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ우드그래플", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "1.2m", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "1.8m", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "2.1m", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "2.7m", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "3.6m", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 재료비(우드그래플)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 기계경비(우드그래플)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "3. 운재", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ소형트럭", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 재료비(소형트럭)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 기계경비(소형트럭)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "4-1. 집적작업", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ우드그래플", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "1.8m", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "2.1m", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "2.7m", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "3.6m", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 재료비(우드그래플)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 기계경비(우드그래플)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "4-2. 토막내기", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ체인톱", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 재료비(체인톱)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ보통휘발유(주연료)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ보통휘발유(잡품)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "ㆍ체인오일(일반)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "- 기계경비(체인톱)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "합 계", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "직접노무비", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "재 료 비", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "경비(기계경비)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "o 경사도(1-4-5)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "o 장애물의 정도(1-4-8)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "o 주행 장애물 상태(1-4-13)", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "o 벌도목평균경급", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "o 잔존목 본수", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, + { + "cell": "합 계", + "pum_table_id": "F0472", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-01" + }, { "cell": "경비(기계경비)", "pum_table_id": "F0472", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-03-01" }, + { + "cell": "작업로 예정선 선정 및 표식", + "pum_table_id": "F0076", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, { "cell": "작업로 예정선 선정 및 표식", "pum_table_id": "F0076", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-03-02" }, + { + "cell": "단 위 작 업 별", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ전간", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 재료비(체인톱)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ보통휘발유(주연료)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ보통휘발유(잡품)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ체인오일(일반)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 기계경비(체인톱)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "2. 집재", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "2-1. 스마트집재기", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ스마트집재기", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "50m이하", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "51~100m", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "101~15m", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 재료비(집재기)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 기계경비(집재기)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "2-2. 임업용굴착기", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ우드그래플", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 재료비(우드그래플)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 기계경비(우드그래플)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "3. 운재", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ초소형포워더", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 재료비(초소형포워더)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 기계경비(초소형포워더)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "4. 집적", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "4-1. 집적작업", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ우드그래플", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "1.8m", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "2.1m", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "2.7m", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "3.6m", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 재료비(우드그래플)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 기계경비(우드그래플)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "4-2. 토막내기", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ체인톱", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 재료비(체인톱)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ보통휘발유(주연료)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ보통휘발유(잡품)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "ㆍ체인오일(일반)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "- 기계경비(체인톱)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "합 계", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "직접노무비", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "재 료 비", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "경비(기계경비)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "o 경사도(1-4-5)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "o 장애물의 정도(1-4-8)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "o 주행 장애물 상태(1-4-13)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "o 집재방향(1-4-14)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "o 횡단집재거리(1-4-15)", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "o 벌도목평균경급", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "o 잔존목 본수", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, + { + "cell": "합 계", + "pum_table_id": "F0473", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-02" + }, { "cell": "경비(기계경비)", "pum_table_id": "F0473", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-03-02" }, + { + "cell": "소작업로", + "pum_table_id": "F0077", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "대작업로", + "pum_table_id": "F0077", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, { "cell": "소작업로", "pum_table_id": "F0077", @@ -116,12 +1130,348 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-03-03" }, + { + "cell": "단 위 작 업 별", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ하베스터", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 재료비(하베스터)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 기계경비", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ하베스터헤드", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ0.6㎥굴착기", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "2. 집재", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "2-1. 타워야더", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ타워야더", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "100m이하", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "150m이하", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 재료비(집재기)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 기계경비(집재기)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "2-2. 임업용굴착기", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ우드그래플", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 재료비(우드그래플)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 기계경비(우드그래플)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "3. 운재", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ소형포워더", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 재료비(소형포워더)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 기계경비(소형포워더)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "4. 집적", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ우드그래플", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "1.8m", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "2.1m", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "2.7m", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "3.6m", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 재료비(우드그래플)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(주연료)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "ㆍ경유(잡품)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "- 기계경비(우드그래플)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "합 계", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "직접노무비", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "재 료 비", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "경비(기계경비)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "o 경사도(1-4-5)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "o 주행 장애물 상태(1-4-13)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "o 집재방향(1-4-14)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "o 횡단집재거리(1-4-15)", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "o 벌도목평균경급", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "o 잔존목 본수", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, + { + "cell": "합 계", + "pum_table_id": "F0474", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-03" + }, { "cell": "경비(기계경비)", "pum_table_id": "F0474", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-03-03" }, + { + "cell": "노면굴기", + "pum_table_id": "F0078", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-04-03" + }, { "cell": "모든 벌채산물 임내존치지역", "pum_table_id": "F0079", @@ -176,12 +1526,594 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-03-05" }, + { + "cell": "임내 정리", + "pum_table_id": "F0080", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-03-06" + }, { "cell": "임내 정리", "pum_table_id": "F0080", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-03-06" }, + { + "cell": "단 위 작 업 별", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "ㆍ경급별(cm)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "6", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "8", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "10", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "12", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "14", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "16", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "18", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "20", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "22", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "24", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "26", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "28", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "30", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "32", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "34", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "36", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "38", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "40", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "42", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "44", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "46", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "48", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "50이상", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "ㆍ방제실행 등록", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "- 재료비(체인톱)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "ㆍ보통휘발유(주연료)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "ㆍ보통휘발유(잡품)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "ㆍ체인오일(일반오일)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "- 기계경비(체인톱)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "2. 소운반", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "ㆍ경급별(cm)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "6", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "8", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "10", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "12", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "14", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "16", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "18", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "20", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "22", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "24", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "26", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "28", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "30", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "32", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "34", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "36", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "38", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "40", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "42", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "44", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "46", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "48", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "50이상", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "3. 무더기훈증", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "ㆍ경급별(cm)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "6", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "8", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "10", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "12", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "14", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "16", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "18", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "20", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "22", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "24", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "26", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "28", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "30", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "32", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "34", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "36", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "38", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "40", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "42", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "44", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "46", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "48", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "50이상", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "- 재료비", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "ㆍ훈증 라벨(KW-H)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "4. 잔가지줍기", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "합 계", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "o 노무비", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "o 재료비", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "o 경비(기계경비)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "o 장애물의 정도(1-4-8)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "o 방제대상목 분포(1-4-17)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "o 방제수종(1-4-22)", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, + { + "cell": "합 계", + "pum_table_id": "F0475", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-01" + }, { "cell": "o 노무비", "pum_table_id": "F0475", @@ -218,6 +2150,294 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-04-01-01" }, + { + "cell": "단 위 작 업 별", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ경급별(cm)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "10cm이하", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "12~14㎝", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "16~18㎝", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "20~22㎝", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "24~26㎝", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "28~30㎝", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "32~34㎝", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ작업보조", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ벌목작업안전 보조", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 재료비(체인톱)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 보통휘발유(주연료)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 보통휘발유(잡품)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 체인오일(일반오일)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 기계경비(체인톱)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "2. 작업로설치", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 소작업로", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 대작업로", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 재료비(체인톱)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 보통휘발유(주연료)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 보통휘발유(잡품)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 체인오일(일반오일)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 기계경비(체인톱)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "3. 산물수집", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "4. 집적", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 우드그래플", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "1.8m", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "2.1m", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "2.7m", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "3.6m", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 재료비(굴삭기)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 경유(주연료)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "ㆍ 경유(잡품)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "- 기계경비(굴삭기)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "합 계", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "o 노무비", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "o 재료비", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "o 경비(기계경비)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "o 집단화정도(1-4-3)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "o 경사도(1-4-5)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "o 장애물의 정도(1-4-8)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "o 제거대상 식생(1-4-9)", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, + { + "cell": "합 계", + "pum_table_id": "F0476", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02" + }, { "cell": "o 노무비", "pum_table_id": "F0476", @@ -236,6 +2456,78 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-04-02" }, + { + "cell": "10㎝이하", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "12~14㎝", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "16~18㎝", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "20~22㎝", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "24~26㎝", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "28~30㎝", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "32~34㎝", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "36~38㎝", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "40~42㎝", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "44~46㎝", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "48㎝ 이상", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, + { + "cell": "작업보조", + "pum_table_id": "F0086", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-01" + }, { "cell": "작업보조", "pum_table_id": "F0086", @@ -245,15 +2537,81 @@ { "cell": "굴착기+부착용집게", "pum_table_id": "F0087", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-04-02-02" }, + { + "cell": "비고", + "pum_table_id": "F0087", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-04-02-02" + }, + { + "cell": "특 별 인 부", + "pum_table_id": "F0092", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-01" + }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0092", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-01" + }, { "cell": "비 고", "pum_table_id": "F0093", "reason": "숫자 칸 0 개가 자원 열 2 개와 안 맞아 버렸습니다(자리 밀림 방지).", "work_item_code": "FP-05-01-02" }, + { + "cell": "20 ∼ 26", + "pum_table_id": "F0095", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-03" + }, + { + "cell": "27 ∼ 39", + "pum_table_id": "F0095", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-03" + }, + { + "cell": "40 ∼ 60", + "pum_table_id": "F0095", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-03" + }, + { + "cell": "리어카", + "pum_table_id": "F0097", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-05" + }, + { + "cell": "우마차", + "pum_table_id": "F0097", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-05" + }, + { + "cell": "2.5톤 트럭", + "pum_table_id": "F0097", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-05" + }, + { + "cell": "6톤 트럭", + "pum_table_id": "F0097", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-05" + }, + { + "cell": "8톤 트럭", + "pum_table_id": "F0097", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-01-05" + }, { "cell": "지게", "pum_table_id": "F0097", @@ -290,6 +2648,54 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-03-01" }, + { + "cell": "특 별 인 부", + "pum_table_id": "F0102", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-03-02" + }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0102", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-03-02" + }, + { + "cell": "특 별 인 부", + "pum_table_id": "F0103", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-03-03" + }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0103", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-03-03" + }, + { + "cell": "특별인부(인)", + "pum_table_id": "F0104", + "reason": "값 묶음 0 개가 갈래 2 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-05-03-04" + }, + { + "cell": "18 ∼ 22", + "pum_table_id": "F0108", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-03-05" + }, + { + "cell": "23 ∼ 34", + "pum_table_id": "F0108", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-03-05" + }, + { + "cell": "35 ∼ 50", + "pum_table_id": "F0108", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-03-05" + }, { "cell": "파종상 만들기", "pum_table_id": "F0109", @@ -350,6 +2756,84 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-08" }, + { + "cell": "묘목", + "pum_table_id": "F0115", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-10" + }, + { + "cell": "운반비", + "pum_table_id": "F0115", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-10" + }, + { + "cell": "평떼", + "pum_table_id": "F0117", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-12" + }, + { + "cell": "요소", + "pum_table_id": "F0119", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-14" + }, + { + "cell": "인산", + "pum_table_id": "F0119", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-14" + }, + { + "cell": "보통인부 (채집)", + "pum_table_id": "F0119", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-14" + }, + { + "cell": "보통인부 (심기)", + "pum_table_id": "F0119", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-14" + }, + { + "cell": "새운반", + "pum_table_id": "F0119", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-14" + }, + { + "cell": "새채집", + "pum_table_id": "F0119", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-14" + }, + { + "cell": "요소", + "pum_table_id": "F0119", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-14" + }, + { + "cell": "인산", + "pum_table_id": "F0119", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-14" + }, + { + "cell": "새운반", + "pum_table_id": "F0119", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-14" + }, + { + "cell": "보통인부", + "pum_table_id": "F0120", + "reason": "값 묶음 2 개가 갈래 4 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-05-15" + }, { "cell": "절 취", "pum_table_id": "F0121", @@ -374,6 +2858,36 @@ "reason": "숫자 칸 3 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-05-16-01" }, + { + "cell": "절 취", + "pum_table_id": "F0121", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "수평잡기 및 단정리", + "pum_table_id": "F0121", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "잡석 및 뿌리 정리", + "pum_table_id": "F0121", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "절·성토면 고르기", + "pum_table_id": "F0121", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-16-01" + }, + { + "cell": "합계", + "pum_table_id": "F0121", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-16-01" + }, { "cell": "절 취", "pum_table_id": "F0121", @@ -398,6 +2912,72 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-16-01" }, + { + "cell": "단끊기", + "pum_table_id": "F0122", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-16-02" + }, + { + "cell": "단끊기", + "pum_table_id": "F0123", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-17-01" + }, + { + "cell": "단끊기", + "pum_table_id": "F0124", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-17-02" + }, + { + "cell": "종자", + "pum_table_id": "F0125", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-18" + }, + { + "cell": "비료", + "pum_table_id": "F0125", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-18" + }, + { + "cell": "비토", + "pum_table_id": "F0125", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-18" + }, + { + "cell": "객토", + "pum_table_id": "F0125", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-18" + }, + { + "cell": "골파기", + "pum_table_id": "F0125", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-18" + }, + { + "cell": "씨덮기", + "pum_table_id": "F0125", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-18" + }, + { + "cell": "㎥ 당", + "pum_table_id": "F0127", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-19-02" + }, + { + "cell": "100㎡", + "pum_table_id": "F0127", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-19-02" + }, { "cell": "표토채취 | 보통인부 | 0.2인", "pum_table_id": "F0128", @@ -428,6 +3008,60 @@ "reason": "작업조 표를 못 읽었습니다 — 작업조 줄 「트럭」을 못 풀었습니다", "work_item_code": "FP-05-22-04" }, + { + "cell": "비 료", + "pum_table_id": "F0135", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-01" + }, + { + "cell": "피 복 제", + "pum_table_id": "F0135", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-01" + }, + { + "cell": "침식안정제", + "pum_table_id": "F0135", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-01" + }, + { + "cell": "색 소", + "pum_table_id": "F0135", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-01" + }, + { + "cell": "장비", + "pum_table_id": "F0135", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-01" + }, + { + "cell": "트 럭", + "pum_table_id": "F0135", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-01" + }, + { + "cell": "물 탱 크", + "pum_table_id": "F0135", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-01" + }, + { + "cell": "인력", + "pum_table_id": "F0135", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-01" + }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0135", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-01" + }, { "cell": "종 자", "pum_table_id": "F0135", @@ -476,52 +3110,58 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-24-01" }, - { - "cell": "종 자", - "pum_table_id": "F0136", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-05-24-02" - }, { "cell": "비 료", "pum_table_id": "F0136", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-05-24-02" }, { "cell": "피 복 제", "pum_table_id": "F0136", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-05-24-02" }, { "cell": "침식안정제", "pum_table_id": "F0136", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-05-24-02" }, { "cell": "색 소", "pum_table_id": "F0136", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-05-24-02" }, { - "cell": "종자살포기", + "cell": "장비", "pum_table_id": "F0136", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-05-24-02" }, { "cell": "트 럭", "pum_table_id": "F0136", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-05-24-02" }, { "cell": "물 탱 크", "pum_table_id": "F0136", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-02" + }, + { + "cell": "인력", + "pum_table_id": "F0136", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-24-02" + }, + { + "cell": "보통인부", + "pum_table_id": "F0136", + "reason": "값 묶음 1 개가 갈래 4 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-05-24-02" }, { @@ -530,6 +3170,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-25" }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0144", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-05-28-01" + }, { "cell": "표시봉 설치", "pum_table_id": "F0147", @@ -681,10 +3327,52 @@ "work_item_code": "FP-06-05" }, { - "cell": "병해충방제", - "pum_table_id": "F0172", + "cell": "보 통 인 부", + "pum_table_id": "F0166", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-06-07-02" + }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0167", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-06-07-03" + }, + { + "cell": "트 럭(2.5t)", + "pum_table_id": "F0167", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-06-07-03" + }, + { + "cell": "트 럭(2.5t)", + "pum_table_id": "F0167", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-07-01-02" + "work_item_code": "FP-06-07-03" + }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0168", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-06-08" + }, + { + "cell": "소 운 반", + "pum_table_id": "F0168", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-06-08" + }, + { + "cell": "우 드 칩", + "pum_table_id": "F0168", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-06-08" + }, + { + "cell": "소 운 반", + "pum_table_id": "F0168", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-06-08" }, { "cell": "병해충방제", @@ -710,12 +3398,282 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-01-02" }, + { + "cell": "병해충방제", + "pum_table_id": "F0172", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-07-01-02" + }, + { + "cell": "0.1", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "0.2", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "0.3", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "0.4", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "0.5", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "0.6", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "0.7", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "0.8", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "0.9", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "1.0", + "pum_table_id": "F0175", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-01" + }, + { + "cell": "집재량", + "pum_table_id": "F0176", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-04-02" + }, { "cell": "집재량", "pum_table_id": "F0176", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-04-02" }, + { + "cell": "0.1", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "0.2", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "0.3", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "0.4", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "0.5", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "0.6", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "0.7", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "0.8", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "0.9", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "1.0", + "pum_table_id": "F0177", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-01" + }, + { + "cell": "0∼40m", + "pum_table_id": "F0178", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-02" + }, + { + "cell": "0∼60m", + "pum_table_id": "F0178", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-02" + }, + { + "cell": "0∼80m", + "pum_table_id": "F0178", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-02" + }, + { + "cell": "0∼100m", + "pum_table_id": "F0178", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-02" + }, + { + "cell": "0∼120m", + "pum_table_id": "F0178", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-05-02" + }, + { + "cell": "26㎥", + "pum_table_id": "F0179", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-06" + }, + { + "cell": "0.1", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "0.2", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "0.3", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "0.4", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "0.5", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "0.6", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "0.7", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "0.8", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "0.9", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "1.0", + "pum_table_id": "F0180", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-01" + }, + { + "cell": "0∼20㎥", + "pum_table_id": "F0181", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-02" + }, + { + "cell": "21∼40㎥", + "pum_table_id": "F0181", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-02" + }, + { + "cell": "41∼60㎥", + "pum_table_id": "F0181", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-02" + }, + { + "cell": "61∼80㎥", + "pum_table_id": "F0181", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-02" + }, + { + "cell": "81∼100㎥", + "pum_table_id": "F0181", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-07-02" + }, + { + "cell": "상향집재", + "pum_table_id": "F0182", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-01" + }, + { + "cell": "하향집재", + "pum_table_id": "F0182", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-01" + }, { "cell": "상향집재", "pum_table_id": "F0182", @@ -728,6 +3686,18 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-08-01" }, + { + "cell": "상향집재", + "pum_table_id": "F0183", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-02" + }, + { + "cell": "하향집재", + "pum_table_id": "F0183", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-02" + }, { "cell": "상향집재", "pum_table_id": "F0183", @@ -740,6 +3710,132 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-08-02" }, + { + "cell": "0.1", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "0.2", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "0.3", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "0.4", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "0.5", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "0.6", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "0.7", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "0.8", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "0.9", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "1.0", + "pum_table_id": "F0184", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-08-03" + }, + { + "cell": "0~20㎥", + "pum_table_id": "F0185", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-01" + }, + { + "cell": "21~40㎥", + "pum_table_id": "F0185", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-01" + }, + { + "cell": "41~60㎥", + "pum_table_id": "F0185", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-01" + }, + { + "cell": "61~80㎥", + "pum_table_id": "F0185", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-01" + }, + { + "cell": "81~100㎥", + "pum_table_id": "F0185", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-01" + }, + { + "cell": "0~20㎥", + "pum_table_id": "F0186", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-02" + }, + { + "cell": "21~40㎥", + "pum_table_id": "F0186", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-02" + }, + { + "cell": "41~60㎥", + "pum_table_id": "F0186", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-02" + }, + { + "cell": "61~80㎥", + "pum_table_id": "F0186", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-02" + }, + { + "cell": "81~100㎥", + "pum_table_id": "F0186", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-09-02" + }, + { + "cell": "작업량", + "pum_table_id": "F0188", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-10" + }, { "cell": "작업량", "pum_table_id": "F0188", @@ -752,18 +3848,474 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-11" }, + { + "cell": "1.8m", + "pum_table_id": "F0192", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-12" + }, + { + "cell": "2.1m", + "pum_table_id": "F0192", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-12" + }, + { + "cell": "2.7m", + "pum_table_id": "F0192", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-12" + }, + { + "cell": "3.6m", + "pum_table_id": "F0192", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-07-12" + }, { "cell": "생산목 검척", "pum_table_id": "F0193", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-13" }, + { + "cell": "14~16", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "18~20", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "22~24", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "26~28", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "30~32", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "34~36", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "38~40", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "42~44", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "46~48", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "50~52", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "54~56", + "pum_table_id": "F0203", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "14~16", + "pum_table_id": "F0204", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "18~20", + "pum_table_id": "F0204", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "22~24", + "pum_table_id": "F0204", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "26~28", + "pum_table_id": "F0204", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "30~32", + "pum_table_id": "F0204", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "34~36", + "pum_table_id": "F0204", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "38~40", + "pum_table_id": "F0204", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "42~44", + "pum_table_id": "F0204", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "46~48", + "pum_table_id": "F0204", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "14~16", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "18~20", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "22~24", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "26~28", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "30~32", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "34~36", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "38~40", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "42~44", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "46~48", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "50~52", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "54~56", + "pum_table_id": "F0206", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "18~22", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "24~26", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "28~32", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "34~36", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "38~42", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "44~46", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "48~52", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "54~56", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "58~62", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "64~66", + "pum_table_id": "F0207", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-01" + }, + { + "cell": "단 위 작 업 별", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ벌채부산물 임내정리 (벌채와 동시 정리지역)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "- 재료비(체인톱)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ보통휘발유(주연료)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ보통휘발유(잡품)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ체인오일(친환경)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "- 기계경비(체인톱)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "2. 식 재", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "- 직접노무비", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ식재작업", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ표시봉설치", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ소운반", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "- 재료비", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ묘목", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ표시봉", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "- 경 비", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "ㆍ대운반", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "합 계", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "직접노무비", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "재 료 비", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "경비(기계경비)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "o 벌채구역 크기(1-4-4)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "o 경사도(1-4-5)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "o 작업장까지 이동거리(1-4-6)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "o 토양상태(1-4-10)", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "o 미이용산림 바이오 메스 정리량", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "o 산불피해지", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, + { + "cell": "합 계", + "pum_table_id": "F0454", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-02-03" + }, { "cell": "경비(기계경비)", "pum_table_id": "F0454", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-02-03" }, + { + "cell": "롤트랩 설치", + "pum_table_id": "F0223", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-04" + }, + { + "cell": "롤트랩 제거", + "pum_table_id": "F0223", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-04" + }, { "cell": "롤트랩 설치", "pum_table_id": "F0223", @@ -776,6 +4328,18 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-04" }, + { + "cell": "트랩통수거 및 교체", + "pum_table_id": "F0224", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-05" + }, + { + "cell": "트랩철거", + "pum_table_id": "F0224", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-05" + }, { "cell": "트랩설치", "pum_table_id": "F0224", @@ -896,6 +4460,36 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-08-07" }, + { + "cell": "1.0RM 이하", + "pum_table_id": "F0233", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-08-01" + }, + { + "cell": "1.1~1.5RM", + "pum_table_id": "F0233", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-08-01" + }, + { + "cell": "1.6~2.0RM", + "pum_table_id": "F0233", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-08-01" + }, + { + "cell": "굴 삭 기 우드그랩", + "pum_table_id": "F0234", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-08-02" + }, + { + "cell": "인 력", + "pum_table_id": "F0234", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-08-08-02" + }, { "cell": "잔가지 줍기", "pum_table_id": "F0235", @@ -908,6 +4502,18 @@ "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-09-02" }, + { + "cell": "보통암", + "pum_table_id": "F0241", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-04-01" + }, + { + "cell": "경 암", + "pum_table_id": "F0241", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-04-01" + }, { "cell": "대형브레이커+ 유압식백호우 (무한궤도,0.7㎥)", "pum_table_id": "F0241", @@ -926,42 +4532,48 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-04-01" }, - { - "cell": "폭 약", - "pum_table_id": "F0243", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-05-01" - }, { "cell": "뇌 관", "pum_table_id": "F0243", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-09-05-01" }, { "cell": "비 트", "pum_table_id": "F0243", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-09-05-01" }, { - "cell": "화 약 공", + "cell": "인력", "pum_table_id": "F0243", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-09-05-01" }, { - "cell": "착 암 기", + "cell": "착 암 공", "pum_table_id": "F0243", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-09-05-01" }, { - "cell": "공기압축기", + "cell": "보통인부", "pum_table_id": "F0243", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 5 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-05-01" }, + { + "cell": "보통암", + "pum_table_id": "F0244", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-05-02" + }, + { + "cell": "경 암", + "pum_table_id": "F0244", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-09-05-02" + }, { "cell": "연 암", "pum_table_id": "F0244", @@ -1023,27 +4635,33 @@ "work_item_code": "FP-09-10-02" }, { - "cell": "대형브레이커(㎥/hr)", - "pum_table_id": "F0259", + "cell": "콘크리트커트", + "pum_table_id": "F0256", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-11-01" + }, + { + "cell": "브레이드", + "pum_table_id": "F0256", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-11-01" + }, + { + "cell": "잡자재", + "pum_table_id": "F0256", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-11-01" + }, + { + "cell": "보통인부(인)", + "pum_table_id": "F0259", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-12-02" }, { - "cell": "치즐소모(본/hr)", - "pum_table_id": "F0259", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-12-02" - }, - { - "cell": "대형브레이커(㎥/hr)", + "cell": "보통인부(인)", "pum_table_id": "F0260", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-12-03" - }, - { - "cell": "치즐소모량(본/hr)", - "pum_table_id": "F0260", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-12-03" }, { @@ -1083,39 +4701,15 @@ "work_item_code": "FP-09-13-07" }, { - "cell": "깨기", + "cell": "보통인부(인)", "pum_table_id": "F0268", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-13-08" }, { - "cell": "치즐소모량(본/hr)", - "pum_table_id": "F0268", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-08" - }, - { - "cell": "들어내기 | 유압식백호우 (무한궤도,0.7㎥) | 육상 암절취(0~1m)와 동일", - "pum_table_id": "F0268", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-09-13-08" - }, - { - "cell": "깨기", + "cell": "보통인부(인)", "pum_table_id": "F0269", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-09" - }, - { - "cell": "치즐소모량(본/hr)", - "pum_table_id": "F0269", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-09" - }, - { - "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 육상 암절취(0~1m)와 동일", - "pum_table_id": "F0269", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-13-09" }, { @@ -1167,99 +4761,39 @@ "work_item_code": "FP-09-13-12" }, { - "cell": "깨기", + "cell": "보통인부(인)", "pum_table_id": "F0273", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-13-13" }, { - "cell": "치즐소모량(본/hr)", - "pum_table_id": "F0273", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-13" - }, - { - "cell": "깨기", + "cell": "보통인부(인)", "pum_table_id": "F0274", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-13-14" }, { - "cell": "치즐소모량(본/hr)", - "pum_table_id": "F0274", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-14" - }, - { - "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 육상 발파암(1~2m)와 동일", - "pum_table_id": "F0274", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-09-13-14" - }, - { - "cell": "깨기", + "cell": "보통인부(인)", "pum_table_id": "F0275", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-13-15" }, { - "cell": "치즐소모량(본/hr)", - "pum_table_id": "F0275", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-15" - }, - { - "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 육상 발파암(1~2m)와 동일", - "pum_table_id": "F0275", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-09-13-15" - }, - { - "cell": "깨기", + "cell": "보통인부(인)", "pum_table_id": "F0276", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 4 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-13-16" }, { - "cell": "치즐소모량(본/hr)", - "pum_table_id": "F0276", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-16" - }, - { - "cell": "깨기", + "cell": "보통인부(인)", "pum_table_id": "F0277", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 4 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-13-17" }, { - "cell": "치즐소모량(본/hr)", - "pum_table_id": "F0277", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-17" - }, - { - "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 용수 발파암(0~1m)와 동일", - "pum_table_id": "F0277", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", - "work_item_code": "FP-09-13-17" - }, - { - "cell": "깨기", + "cell": "보통인부(인)", "pum_table_id": "F0278", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-18" - }, - { - "cell": "치즐소모량(본/hr)", - "pum_table_id": "F0278", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-09-13-18" - }, - { - "cell": "들어 내기 | 유압식백호우 (무한궤도,0.7㎥) | 용수 발파암(0~1m)와 동일", - "pum_table_id": "F0278", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "값 묶음 1 개가 갈래 4 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-09-13-18" }, { @@ -1298,6 +4832,18 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-19-01" }, + { + "cell": "인력시공", + "pum_table_id": "F0289", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-19-01" + }, + { + "cell": "기계시공", + "pum_table_id": "F0289", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-19-01" + }, { "cell": "공기압축기(3.5㎥/min)", "pum_table_id": "F0291", @@ -1316,12 +4862,24 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-19-03" }, + { + "cell": "제잡비율", + "pum_table_id": "F0292", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-20-01" + }, { "cell": "거리 (m) | 보통인부(인) | 거리 (m) | 보통인부(인) | 비고", "pum_table_id": "F0302", "reason": "열 머리가 되풀이되는 두 판 짜리 표 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-10-06-01" }, + { + "cell": "작업반장", + "pum_table_id": "F0311", + "reason": "값 묶음 0 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-10-07-04" + }, { "cell": "콘크리트", "pum_table_id": "F0313", @@ -1346,6 +4904,30 @@ "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", "work_item_code": "FP-10-08-01" }, + { + "cell": "콘크리트", + "pum_table_id": "F0313", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-10-08-01" + }, + { + "cell": "제 자재", + "pum_table_id": "F0313", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-10-08-01" + }, + { + "cell": "〃", + "pum_table_id": "F0313", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-10-08-01" + }, + { + "cell": "〃", + "pum_table_id": "F0313", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-10-08-01" + }, { "cell": "콘크리트", "pum_table_id": "F0313", @@ -1358,6 +4940,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-10-08-01" }, + { + "cell": "운반기구 손료", + "pum_table_id": "F0315", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-10-08-03" + }, { "cell": "보통인부 | | 인 〃 〃 〃", "pum_table_id": "F0317", @@ -1382,6 +4970,36 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-10-10-02" }, + { + "cell": "(B)", + "pum_table_id": "F0332", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-01-03" + }, + { + "cell": "(C)", + "pum_table_id": "F0332", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-01-03" + }, + { + "cell": "40", + "pum_table_id": "F0332", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-01-03" + }, + { + "cell": "(B)", + "pum_table_id": "F0332", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-01-03" + }, + { + "cell": "(C)", + "pum_table_id": "F0332", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-01-03" + }, { "cell": "슬 럼 프 | 기준 시공량", "pum_table_id": "F0356", @@ -1391,37 +5009,49 @@ { "cell": "합 판", "pum_table_id": "F0336", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-04" }, { "cell": "각 재", "pum_table_id": "F0336", - "reason": "규격이 없어 같은 이름 여럿 중 고를 수 없음", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-04" }, { "cell": "철 선", "pum_table_id": "F0336", - "reason": "규격이 없어 같은 이름 여럿 중 고를 수 없음", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-04" + }, + { + "cell": "못", + "pum_table_id": "F0336", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-04" }, { "cell": "박 리 제", "pum_table_id": "F0336", - "reason": "규격이 없어 같은 이름 여럿 중 고를 수 없음", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-04" }, { - "cell": "사용고재 평가기준", + "cell": "형틀목공", "pum_table_id": "F0336", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-12-04" }, { - "cell": "문양 스티로폴(자재비 포함)", + "cell": "설치 및 해체", "pum_table_id": "F0337", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-05" + }, + { + "cell": "보통인부", + "pum_table_id": "F0337", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-12-05" }, { @@ -1443,33 +5073,57 @@ "work_item_code": "FP-12-08" }, { - "cell": "유공관 설치", - "pum_table_id": "F0345", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", - "work_item_code": "FP-12-10" + "cell": "거 푸 집", + "pum_table_id": "F0342", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-09-01" }, { - "cell": "소운반 인부", + "cell": "연결철근", + "pum_table_id": "F0342", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-09-01" + }, + { + "cell": "거 푸 집", + "pum_table_id": "F0343", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-09-02" + }, + { + "cell": "철근가공조립", + "pum_table_id": "F0343", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-09-02" + }, + { + "cell": "거 푸 집", + "pum_table_id": "F0344", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-09-03" + }, + { + "cell": "배관공", "pum_table_id": "F0345", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 2 개가 갈래 5 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-12-10" }, { "cell": "흄 관", "pum_table_id": "F0347", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-11-02" }, { - "cell": "배관공 | | 인", + "cell": "거 푸 집", "pum_table_id": "F0347", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-11-02" }, { - "cell": "보통인부 | | 인", + "cell": "크레인", "pum_table_id": "F0347", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "값 묶음 3 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-12-11-02" }, { @@ -1490,6 +5144,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-13" }, + { + "cell": "철 거", + "pum_table_id": "F0352", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-14" + }, { "cell": "다짐:봉상후렉시블(45mm)", "pum_table_id": "F0353", @@ -1505,21 +5165,57 @@ { "cell": "봉상후렉시블(45mm)", "pum_table_id": "F0354", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-16" }, { - "cell": "벽체 | 특별인부 | 인", + "cell": "버림콘크리트 (레미콘)", "pum_table_id": "F0354", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-16" + }, + { + "cell": "원형거푸집 (PE10회)", + "pum_table_id": "F0354", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-16" }, { "cell": "설치비", "pum_table_id": "F0354", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-16" }, + { + "cell": "보통인부", + "pum_table_id": "F0354", + "reason": "값 묶음 0 개가 갈래 4 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", + "work_item_code": "FP-12-16" + }, + { + "cell": "콘 크 리 트 공", + "pum_table_id": "F0355", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-17-01" + }, + { + "cell": "특 별 인 부", + "pum_table_id": "F0355", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-17-01" + }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0355", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-17-01" + }, + { + "cell": "콘크리트펌프차", + "pum_table_id": "F0355", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-17-01" + }, { "cell": "구체콘크리트 (철근)", "pum_table_id": "F0363", @@ -1539,17 +5235,83 @@ "work_item_code": "FP-12-17-02" }, { - "cell": "결속선(R=0.9mm)", + "cell": "철 근 공", "pum_table_id": "F0365", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-12-18" }, { - "cell": "기구손료(노무비의)", + "cell": "보통인부", "pum_table_id": "F0365", - "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "reason": "값 묶음 1 개가 갈래 3 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-12-18" }, + { + "cell": "이음철물", + "pum_table_id": "F0366", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-19" + }, + { + "cell": "조임철물", + "pum_table_id": "F0366", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-19" + }, + { + "cell": "받침철물", + "pum_table_id": "F0366", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-19" + }, + { + "cell": "철 물", + "pum_table_id": "F0366", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-19" + }, + { + "cell": "인력", + "pum_table_id": "F0366", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-19" + }, + { + "cell": "경비", + "pum_table_id": "F0366", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-19" + }, + { + "cell": "강관(∅48.6mm×2.4mm)", + "pum_table_id": "F0366", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-12-19" + }, + { + "cell": "이음철물", + "pum_table_id": "F0366", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-12-19" + }, + { + "cell": "조임철물", + "pum_table_id": "F0366", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-12-19" + }, + { + "cell": "받침철물", + "pum_table_id": "F0366", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-12-19" + }, + { + "cell": "철 물", + "pum_table_id": "F0366", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-12-19" + }, { "cell": "강관 동바리", "pum_table_id": "F0367", @@ -1569,9 +5331,15 @@ "work_item_code": "FP-12-20" }, { - "cell": "아스팔트(㏊-500)", + "cell": "인력", "pum_table_id": "F0368", - "reason": "규격이 없어 같은 이름 여럿 중 고를 수 없음", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-21" + }, + { + "cell": "보통인부", + "pum_table_id": "F0368", + "reason": "값 묶음 2 개가 갈래 5 개와 안 맞습니다 — 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-12-21" }, { @@ -1586,12 +5354,96 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-23" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0372", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-02" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0372", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-02" + }, + { + "cell": "f", + "pum_table_id": "F0372", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-02" + }, + { + "cell": "E", + "pum_table_id": "F0372", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-02" + }, + { + "cell": "㎝(sec)", + "pum_table_id": "F0372", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-02" + }, + { + "cell": "살수", + "pum_table_id": "F0372", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-02" + }, + { + "cell": "다짐", + "pum_table_id": "F0372", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-02" + }, { "cell": "운반 및 설치 (목도운반)", "pum_table_id": "F0374", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-26" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0371", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-01" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0371", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-01" + }, + { + "cell": "f", + "pum_table_id": "F0371", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-01" + }, + { + "cell": "E", + "pum_table_id": "F0371", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-01" + }, + { + "cell": "㎝(sec)", + "pum_table_id": "F0371", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-01" + }, + { + "cell": "살수", + "pum_table_id": "F0371", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-01" + }, + { + "cell": "다짐", + "pum_table_id": "F0371", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-12-24-01" + }, { "cell": "접착제", "pum_table_id": "F0376", @@ -1670,6 +5522,18 @@ "reason": "숫자 칸 4 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-03-02" }, + { + "cell": "기초다짐 뒷채움", + "pum_table_id": "F0403", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-03-02" + }, + { + "cell": "75이상", + "pum_table_id": "F0403", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-03-02" + }, { "cell": "기초다짐 뒷채움", "pum_table_id": "F0403", @@ -1677,41 +5541,209 @@ "work_item_code": "FP-13-03-02" }, { - "cell": "보통인부 | | 〃", + "cell": "25", + "pum_table_id": "F0404", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-01" + }, + { + "cell": "30", + "pum_table_id": "F0404", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-01" + }, + { + "cell": "35", + "pum_table_id": "F0404", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-01" + }, + { + "cell": "45", + "pum_table_id": "F0404", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-01" + }, + { + "cell": "55", + "pum_table_id": "F0404", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-01" + }, + { + "cell": "60", + "pum_table_id": "F0404", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-01" + }, + { + "cell": "75", + "pum_table_id": "F0404", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-01" + }, + { + "cell": "25", + "pum_table_id": "F0409", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "30", + "pum_table_id": "F0409", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "35", + "pum_table_id": "F0409", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "45", + "pum_table_id": "F0409", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "55", + "pum_table_id": "F0409", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "60", + "pum_table_id": "F0409", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "75", + "pum_table_id": "F0409", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "메쌓기(㎝) 찰쌓기(㎝)", + "pum_table_id": "F0412", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "절토", + "pum_table_id": "F0413", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "찰쌓기", + "pum_table_id": "F0413", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "절토", + "pum_table_id": "F0413", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-04-04" + }, + { + "cell": "25 30 35 45 55 60 70", + "pum_table_id": "F0416", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-05-01" + }, + { + "cell": "굴 삭 기 (무한궤도)", "pum_table_id": "F0419", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-13-06-01" }, { - "cell": "보통인부 | | 〃", + "cell": "제잡비 비율", + "pum_table_id": "F0419", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-06-01" + }, + { + "cell": "굴착기 (무한궤도)", "pum_table_id": "F0420", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-13-06-02" }, { - "cell": "보통인부 | | 〃", + "cell": "제잡비 비율", + "pum_table_id": "F0420", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-06-02" + }, + { + "cell": "굴착기 (무한궤도)", "pum_table_id": "F0421", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-13-06-03" }, { - "cell": "보통인부 | | 〃", + "cell": "제잡비 비율", + "pum_table_id": "F0421", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-06-03" + }, + { + "cell": "굴착기 (무한궤도)", "pum_table_id": "F0422", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-13-07-01" }, { - "cell": "보통인부 | | 〃", + "cell": "제 잡비 비율", + "pum_table_id": "F0422", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-07-01" + }, + { + "cell": "굴 삭 기 (무한궤도)", "pum_table_id": "F0423", - "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-13-07-02" }, + { + "cell": "제잡비 비율", + "pum_table_id": "F0423", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-07-02" + }, + { + "cell": "석 공", + "pum_table_id": "F0425", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-09" + }, + { + "cell": "장 비", + "pum_table_id": "F0425", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-09" + }, + { + "cell": "굴 삭 기", + "pum_table_id": "F0425", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-09" + }, { "cell": "보통 인부 (인) | 0.9m 1.2m 1.5m 1.8m 2.1m 2.4m 2.7m 3.0m 3.5m 4.0m 4.5m | 0.022 0.034 0.05 0.07 - - - - - - -", "pum_table_id": "F0427", "reason": "자원은 알아봤으나 값을 못 읽었습니다 — 단가가 일부만 섭니다.", "work_item_code": "FP-13-10-02" }, + { + "cell": "보 통 인 부 (인)", + "pum_table_id": "F0428", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-10-02" + }, { "cell": "보 통 인 부 (인) | 3.5m 4.0m 4.5m 5.0m 5.5m 6.0m 6.5m 7.0m 7.5m 8.0m 8.5m 9.0m 10.0m 11.0m 12.0m | 0.75 1.10 1.50 1.93 - - - - - - - - - - -", "pum_table_id": "F0428", @@ -1760,6 +5792,54 @@ "reason": "숫자 칸 8 개가 자원 열 3 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-10-02" }, + { + "cell": "12", + "pum_table_id": "F0430", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "15", + "pum_table_id": "F0430", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "18", + "pum_table_id": "F0430", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "21", + "pum_table_id": "F0430", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "24", + "pum_table_id": "F0430", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "27", + "pum_table_id": "F0430", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-10-02" + }, + { + "cell": "인력(인)", + "pum_table_id": "F0431", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-11-01" + }, + { + "cell": "돌 채 움", + "pum_table_id": "F0431", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-11-01" + }, { "cell": "조약돌량(㎥)", "pum_table_id": "F0431", @@ -1784,6 +5864,18 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-11-01" }, + { + "cell": "인력(인)", + "pum_table_id": "F0433", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-11-02" + }, + { + "cell": "돌 채 움", + "pum_table_id": "F0433", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-11-02" + }, { "cell": "조약돌량(㎥)", "pum_table_id": "F0433", @@ -1808,6 +5900,24 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-11-02" }, + { + "cell": "철망태", + "pum_table_id": "F0436", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-11-04" + }, + { + "cell": "채움재", + "pum_table_id": "F0436", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-11-04" + }, + { + "cell": "잡재료", + "pum_table_id": "F0436", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-11-04" + }, { "cell": "절 취(㎥)", "pum_table_id": "F0437", @@ -1820,6 +5930,24 @@ "reason": "숫자 칸 3 개가 자원 열 1 개보다 많습니다 — 갈래가 하나 더 있는 표라 자리를 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-12-01" }, + { + "cell": "절 취(㎥)", + "pum_table_id": "F0437", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-12-01" + }, + { + "cell": "투 입(㎥)", + "pum_table_id": "F0437", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-12-01" + }, + { + "cell": "면고르기(시간)", + "pum_table_id": "F0437", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-12-01" + }, { "cell": "절 취(㎥)", "pum_table_id": "F0437", @@ -1832,6 +5960,24 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-12-01" }, + { + "cell": "면고르기(시간)", + "pum_table_id": "F0437", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-12-01" + }, + { + "cell": "특 별 인 부", + "pum_table_id": "F0438", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-12-02" + }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0438", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-12-02" + }, { "cell": "보통구조", "pum_table_id": "F0440", @@ -1856,6 +6002,30 @@ "reason": "같은 갈래 이름이 두 번 나오는 표 — 등급을 단정할 수 없어 버렸습니다.", "work_item_code": "FP-13-13-01" }, + { + "cell": "특 별 인 부", + "pum_table_id": "F0442", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-13-02" + }, + { + "cell": "보 통 인 부", + "pum_table_id": "F0442", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-13-02" + }, + { + "cell": "굴 삭 기", + "pum_table_id": "F0442", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-13-02" + }, + { + "cell": "굴 삭 기", + "pum_table_id": "F0442", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-13-02" + }, { "cell": "어려운 조건", "pum_table_id": "F0447", @@ -1867,6 +6037,18 @@ "pum_table_id": "F0447", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-15-02" + }, + { + "cell": "잠 수 조", + "pum_table_id": "F0448", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-16-01" + }, + { + "cell": "굴 삭 기", + "pum_table_id": "F0448", + "reason": "뭉친 자원 줄의 이름을 못 풀었습니다 — 단가가 일부만 섭니다.", + "work_item_code": "FP-13-16-01" } ], "schema_version": "1.0"