From 3762a06b252246e6a57776c31ff6cf52eea52fc6 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 7 Sep 2026 23:33:42 +0900 Subject: [PATCH] =?UTF-8?q?fix(B09):=20=EB=84=93=EC=9D=80=20=ED=95=84?= =?UTF-8?q?=ED=84=B0=EA=B0=80=20=EC=A0=95=EC=83=81=20=EC=9E=90=EC=9B=90=20?= =?UTF-8?q?70=EA=B1=B4=EC=9D=84=20=EC=A7=80=EC=9A=B0=EA=B3=A0=20=EC=9E=88?= =?UTF-8?q?=EC=97=88=EC=9D=8C=20=E2=80=94=20=EC=A1=B0=ED=9A=8C=20=EC=9A=B0?= =?UTF-8?q?=EC=84=A0=EC=9C=BC=EB=A1=9C=20=EB=B0=94=EA=BF=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 메인의 `막자갈`→배합 `자갈` 오탐 사례를 전해 듣고 내 필터를 재 봤더니 **같은 병이 있었음.** - **실측** — `is_non_resource_label()` 이 머리글 낱말을 **부분일치**로 보고 있어 `건설기계운전사`·`일반기계운전사`·`작업반장`·`인력운반공`·`비계공`·`계장공` 등 **정상 자원 70 / 745** 를 「자원 아님」으로 지우고 있었음(「계」·「작업」·「인력」에 걸림). 그 탓에 **매칭 14건이 조용히 없어졌음**. - **고침 둘** ① 머리글 판정을 **정확 일치 + 머리글 낱말 조합**(「단위작업별」·「위치및면적」)으로 좁힘. ② **카탈로그 조회를 필터보다 먼저** 함 — 카탈로그에 있는 이름은 **정의상 자원**이라, 필터가 넓어져도 정상 자원이 안 사라지는 구조가 됨. - **결과** — 매칭 91 → **106**(노무 100 · 기종 6). 산출 파일 다시 냄. **오탐 짝 시험을 함께 넣음** (「걸려야 한다」 + **「걸리면 안 된다」**) - 머리글 필터 — 정상 자원 8종은 안 먹고 머리글 7종은 잡는지. - ㉡ 무대 — 이름에 「운반」이 든 `도자운반`·`덤프운반` 줄은 **안 걸리는지** (판정을 이름이 아니라 `equipment` 정확 일치로 하는 근거). - ㉣ 효율 — 손료계수 0.0002085·조종원 0.125 처럼 **0~1 이지만 효율이 아닌 값**은 안 걸리는지(효율 자리로 들어올 때만 막는 근거). **덤으로 잡은 것** — 상세가 하나도 안 붙는 일위대가가 **제목만 서서** 「상세 줄이 없어 단가를 못 조립」하는 상태가 있었음. **붙을 상세를 먼저 모으고 없으면 제목도 안 세움** (일위대가 67 · 건너뜀 1). 전수 시험(`모든 일위대가 총액 > 0`)이 이걸 잡았음. PLAN 9-6 에 ㉤(열 방향 검사, 이중계상 규칙이 아니라 표 정합 검사)과 이번 필터 교훈 기록. 자체검증 — `pytest tmp/tests/ -q` **123 passed** · ruff 통과. Co-Authored-By: Claude Opus 5 (1M context) --- B09_Estimation/B09_Estimation_ResourceAxis.py | 32 +- B09_Estimation/B09_Estimation_UnitPrice.py | 21 +- .../resource_axis_2026-01-01.json | 184 ++++++- .../unmatched_2026-01-01.json | 452 +++++++++++++++++- 4 files changed, 674 insertions(+), 15 deletions(-) diff --git a/B09_Estimation/B09_Estimation_ResourceAxis.py b/B09_Estimation/B09_Estimation_ResourceAxis.py index ab7c6d58..881409c3 100644 --- a/B09_Estimation/B09_Estimation_ResourceAxis.py +++ b/B09_Estimation/B09_Estimation_ResourceAxis.py @@ -41,8 +41,12 @@ _CATALOG_SUBPATH = ("resources", "data_cost_input_value") _RE_SPEC = re.compile(r"[((]([^))]+)[))]|(\d+(?:\.\d+)?\s*(?:톤|ton|㎥|m3|㎡|㎜|mm|HP|kW))") _RE_NUMBER = re.compile(r"^-?\d+(?:,\d{3})*(?:\.\d+)?$") -#: 표 머리글·소계 행의 첫 칸에 흔히 오는 말. 자원이 아니므로 `unmatched` 로도 안 올린다. +#: 표 머리글·소계 행의 첫 칸에 오는 말. 자원이 아니므로 `unmatched` 로도 안 올린다. #: 이것을 안 거르면 못 맞춘 목록이 머리글로 가득 차 **쓸 수 없는 목록**이 된다. +#: ⚠ **부분일치로 보면 안 된다.** 「계」를 부분일치로 잡으면 `건설기계운전사`·`비계공`· +#: `계장공` 이, 「작업」을 잡으면 `작업반장` 이, 「인력」을 잡으면 `인력운반공` 이 +#: 통째로 사라진다(2026-09-07 실측 — 정상 자원 **70/745** 가 걸리고 있었음). +#: 그래서 **셀 전체가 그 말과 같을 때만** 머리글로 본다. _NON_RESOURCE_WORDS = ( "구분", "합계", @@ -149,7 +153,24 @@ def is_non_resource_label(cell: str) -> bool: # 자원 이름은 한글 두 자 이상이다. 기호(`f`·`E`)·숫자·단위만 있는 칸은 자원이 아니다. if len(_RE_HANGUL.findall(text)) < 2: return True - return any(word in text for word in _NON_RESOURCE_WORDS) + # ⚠ **정확 일치만** — 부분일치는 정상 자원을 통째로 지운다(위 주석). + if text in _NON_RESOURCE_WORDS: + return True + # 머리글 조각이 이어 붙은 칸(「단위작업별」·「위치및면적」)도 머리글이다. + return _is_header_composite(text) + + +def _is_header_composite(text: str) -> bool: + """머리글 낱말만으로 이루어진 칸인가 — 「단위작업별」·「위치및면적」 같은 것. + + 낱말을 차례로 벗겨 아무것도 안 남으면 머리글로 본다. 자원 이름은 낱말을 벗기면 + 반드시 무언가 남는다(`건설기계운전사` → `건설`·`운전사`). + """ + rest = text + for word in sorted(_NON_RESOURCE_WORDS, key=len, reverse=True): + rest = rest.replace(word, "") + rest = rest.replace("및", "").replace("별", "").strip() + return rest == "" def _normalize(text: str) -> str: @@ -400,8 +421,6 @@ def match_table( if not cells: continue name_cell = cells[0] - if is_non_resource_label(name_cell): - continue # 숫자 셀이 없는 행은 자원 줄이 아니다(제목·설명 행) — 목록에 안 올린다. amount_cell = next( @@ -410,8 +429,13 @@ def match_table( if amount_cell is None: continue + # ⚠ **카탈로그 조회를 먼저 한다.** 이름 필터를 앞에 두면 필터가 넓을 때 + # 정상 자원이 조용히 사라진다(2026-09-07 실측 — 부분일치 필터가 매칭 14건을 + # 지우고 있었음). 카탈로그에 있는 이름은 **정의상 자원**이다. entry = _resolve_cell(catalog, name_cell, cells) if entry is None: + if is_non_resource_label(name_cell): + continue # 머리글·소계 — 못 맞춘 목록에도 안 올린다 name, spec = split_name_and_spec(name_cell) found = catalog.by_name(name) if len(found) > 1: diff --git a/B09_Estimation/B09_Estimation_UnitPrice.py b/B09_Estimation/B09_Estimation_UnitPrice.py index 352c4ec9..bf17bf8d 100644 --- a/B09_Estimation/B09_Estimation_UnitPrice.py +++ b/B09_Estimation/B09_Estimation_UnitPrice.py @@ -200,6 +200,18 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: title_code = f"B-{work_item_code}" if title_code in build.book.titles: continue + # ⚠ **붙을 상세를 먼저 모으고, 하나도 없으면 제목도 안 세운다.** + # 제목만 세워 두면 「상세 줄이 없어 단가를 못 조립」하는 빈 일위대가가 남는다 + # (기계 층이 안 선 기종만 참조하는 공종에서 실제로 생겼음). + attachable = [ + (row, row.resource_code if row.resource_kind == "labor" else f"X-{row.resource_code}") + for row in rows + ] + attachable = [(row, ref) for row, ref in attachable if ref in build.book.titles] + if not attachable: + build.skipped.append(work_item_code) + continue + unit = next((r.amount_unit for r in rows if r.amount_unit), "") build.book.add_title( PriceTitle( @@ -210,15 +222,8 @@ def build_unit_prices(axis: AxisResult | None = None) -> UnitPriceBuild: unit=unit, ) ) - added = 0 - for row in rows: - ref = row.resource_code if row.resource_kind == "labor" else f"X-{row.resource_code}" - if ref not in build.book.titles: - continue + for row, ref in attachable: build.book.add_detail(PriceDetail(title_code, ref, row.amount)) - added += 1 - if added == 0: - build.skipped.append(work_item_code) return build 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 48e47176..a1abf61c 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 @@ -307,6 +307,18 @@ "resource_spec": "", "work_item_code": "FP-06-05" }, + { + "amount": "2.00", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0163", + "raw_row_index": 2, + "resource_code": "1002", + "resource_kind": "labor", + "resource_name": "보통인부", + "resource_spec": "", + "work_item_code": "FP-06-05" + }, { "amount": "0.29", "amount_unit": "", @@ -355,6 +367,18 @@ "resource_spec": "", "work_item_code": "FP-06-07-02" }, + { + "amount": "0.75", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0236", + "raw_row_index": 1, + "resource_code": "7930-0001", + "resource_kind": "machine", + "resource_name": "", + "resource_spec": "0.75", + "work_item_code": "FP-08-10" + }, { "amount": "0.16", "amount_unit": "", @@ -595,6 +619,18 @@ "resource_spec": "", "work_item_code": "FP-10-06-02" }, + { + "amount": "0.35", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0305", + "raw_row_index": 0, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-10-07-01" + }, { "amount": "0.35", "amount_unit": "", @@ -607,6 +643,18 @@ "resource_spec": "", "work_item_code": "FP-10-07-01" }, + { + "amount": "2.0", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0306", + "raw_row_index": 0, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-10-07-02" + }, { "amount": "2.0", "amount_unit": "", @@ -631,6 +679,18 @@ "resource_spec": "", "work_item_code": "FP-10-07-02" }, + { + "amount": "1.0", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0307", + "raw_row_index": 0, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-10-07-03" + }, { "amount": "1.0", "amount_unit": "", @@ -667,6 +727,30 @@ "resource_spec": "", "work_item_code": "FP-10-07-04" }, + { + "amount": "2.0", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0317", + "raw_row_index": 0, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-10-10-01" + }, + { + "amount": "2.0", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0318", + "raw_row_index": 0, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-10-10-02" + }, { "amount": "0.22", "amount_unit": "", @@ -799,6 +883,18 @@ "resource_spec": "", "work_item_code": "FP-12-10" }, + { + "amount": "0.12", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0348", + "raw_row_index": 1, + "resource_code": "1050", + "resource_kind": "labor", + "resource_name": "일반기계운전사", + "resource_spec": "", + "work_item_code": "FP-12-11-02" + }, { "amount": "1.23", "amount_unit": "", @@ -943,6 +1039,30 @@ "resource_spec": "", "work_item_code": "FP-13-02-02" }, + { + "amount": "2.6", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0399", + "raw_row_index": 0, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-13-02-03" + }, + { + "amount": "0.83", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0419", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-13-06-01" + }, { "amount": "1.04", "amount_unit": "", @@ -955,6 +1075,18 @@ "resource_spec": "", "work_item_code": "FP-13-06-01" }, + { + "amount": "0.83", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0420", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-13-06-02" + }, { "amount": "1.30", "amount_unit": "", @@ -979,6 +1111,18 @@ "resource_spec": "0.8", "work_item_code": "FP-13-06-02" }, + { + "amount": "1.19", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0421", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-13-06-03" + }, { "amount": "1.86", "amount_unit": "", @@ -1003,6 +1147,18 @@ "resource_spec": "0.8", "work_item_code": "FP-13-06-03" }, + { + "amount": "0.58", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0422", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-13-07-01" + }, { "amount": "0.58", "amount_unit": "", @@ -1027,6 +1183,18 @@ "resource_spec": "0.8", "work_item_code": "FP-13-07-01" }, + { + "amount": "0.58", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0423", + "raw_row_index": 1, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-13-07-02" + }, { "amount": "1.01", "amount_unit": "", @@ -1063,6 +1231,18 @@ "resource_spec": "", "work_item_code": "FP-13-11-02" }, + { + "amount": "0.0141", + "amount_unit": "", + "pum_form": "requirement", + "pum_table_id": "F0438", + "raw_row_index": 0, + "resource_code": "1001", + "resource_kind": "labor", + "resource_name": "작업반장", + "resource_spec": "", + "work_item_code": "FP-13-12-02" + }, { "amount": "0.0381", "amount_unit": "", @@ -1108,12 +1288,12 @@ "sha256": "111208fd482dcfc3b8c8dd58004b153382fc46555d0d00985c19b45ebbc2e0dd" }, "stats": { - "rows": 91, + "rows": 106, "skipped_forms": { "coefficient": 19, "reference": 94, "undetermined": 83 }, - "unmatched": 269 + "unmatched": 344 } } \ 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 d8aded08..5143c743 100644 --- a/resources/data_cost_resource_axis/unmatched_2026-01-01.json +++ b/resources/data_cost_resource_axis/unmatched_2026-01-01.json @@ -44,6 +44,12 @@ "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": "F0056", @@ -68,6 +74,48 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-02-01-06" }, + { + "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": "F0076", + "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": "F0474", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-03-03" + }, { "cell": "모든 벌채산물 임내존치지역", "pum_table_id": "F0079", @@ -104,6 +152,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-03-05" }, + { + "cell": "임업기계장비 이용 정리", + "pum_table_id": "F0079", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-03-05" + }, { "cell": "벌채와 동시정리지역", "pum_table_id": "F0079", @@ -128,6 +182,18 @@ "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": "단목", "pum_table_id": "F0083", @@ -152,6 +218,24 @@ "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": "작업보조", + "pum_table_id": "F0086", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-04-02-01" + }, { "cell": "굴착기+부착용집게", "pum_table_id": "F0087", @@ -230,6 +314,24 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-05-04" }, + { + "cell": "지면긁기작업", + "pum_table_id": "F0110", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-05" + }, + { + "cell": "폭 80cm × 열간거리 2m (전면적의 40%)", + "pum_table_id": "F0110", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-05" + }, + { + "cell": "맹아근주 정리작업", + "pum_table_id": "F0111", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-05-06" + }, { "cell": "움싹본수조절", "pum_table_id": "F0112", @@ -518,6 +620,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-06-04-02" }, + { + "cell": "작업보조", + "pum_table_id": "F0159", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-06-04-02" + }, { "cell": "소금 처리", "pum_table_id": "F0160", @@ -542,6 +650,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-06-04-04" }, + { + "cell": "유령림 단계", + "pum_table_id": "F0163", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-06-05" + }, { "cell": "병해충방제", "pum_table_id": "F0172", @@ -602,6 +716,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-08-02" }, + { + "cell": "작업량", + "pum_table_id": "F0188", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-07-10" + }, { "cell": "원목집재와 동시에 부산물 수집시", "pum_table_id": "F0191", @@ -614,6 +734,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-07-13" }, + { + "cell": "경비(기계경비)", + "pum_table_id": "F0454", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-08-02-03" + }, { "cell": "롤트랩 설치", "pum_table_id": "F0223", @@ -836,12 +962,24 @@ "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", @@ -944,6 +1082,30 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-10-02" }, + { + "cell": "인력(10%)", + "pum_table_id": "F0258", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-12-01" + }, + { + "cell": "장비(90%)", + "pum_table_id": "F0258", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-12-01" + }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0259", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-12-02" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0259", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-12-02" + }, { "cell": "치즐소모(본/hr)", "pum_table_id": "F0259", @@ -956,6 +1118,18 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-12-02" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0260", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-12-03" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0260", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-12-03" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0260", @@ -968,6 +1142,66 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-12-03" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0261", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-01" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0261", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-01" + }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0262", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-02" + }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0263", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-03" + }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0264", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-04" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0264", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-04" + }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0265", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-05" + }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0266", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-06" + }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0267", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-07" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0267", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-07" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0267", @@ -980,18 +1214,54 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-07" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0268", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-08" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0268", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-08" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0268", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-08" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0269", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-09" + }, + { + "cell": "장비 (90%)", + "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": "인력 (10%)", + "pum_table_id": "F0270", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-10" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0270", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-10" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0270", @@ -1004,18 +1274,54 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-10" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0271", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-11" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0271", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-11" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0271", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-11" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0272", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-12" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0272", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-12" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0272", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-12" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0273", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-13" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0273", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-13" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0273", @@ -1028,18 +1334,54 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-13" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0274", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-14" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0274", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-14" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0274", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-14" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0275", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-15" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0275", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-15" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0275", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-15" }, + { + "cell": "인력 (10%)", + "pum_table_id": "F0276", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-16" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0276", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-16" + }, { "cell": "치즐소모량(본/hr)", "pum_table_id": "F0276", @@ -1053,17 +1395,53 @@ "work_item_code": "FP-09-13-16" }, { - "cell": "치즐소모량(본/hr)", + "cell": "인력 (10%)", + "pum_table_id": "F0277", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-17" + }, + { + "cell": "장비 (90%)", "pum_table_id": "F0277", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-17" }, { "cell": "치즐소모량(본/hr)", + "pum_table_id": "F0277", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-13-17" + }, + { + "cell": "인력 (10%)", "pum_table_id": "F0278", "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-09-13-18" }, + { + "cell": "장비 (90%)", + "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": "인력 (10%)", + "pum_table_id": "F0279", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-14-01" + }, + { + "cell": "장비 (90%)", + "pum_table_id": "F0279", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-09-14-01" + }, { "cell": "모래ㆍ사질토ㆍ점토ㆍ점질토", "pum_table_id": "F0288", @@ -1238,6 +1616,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-04" }, + { + "cell": "사용고재 평가기준", + "pum_table_id": "F0336", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-12-04" + }, { "cell": "문양 스티로폴(자재비 포함)", "pum_table_id": "F0337", @@ -1364,6 +1748,24 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-12-23" }, + { + "cell": "잡재료비(재료비의)", + "pum_table_id": "F0370", + "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": "적사", "pum_table_id": "F0373", @@ -1382,6 +1784,18 @@ "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": "자재", "pum_table_id": "F0376", @@ -1394,6 +1808,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": "F0384", @@ -1430,6 +1850,12 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-02-03" }, + { + "cell": "제 잡비 비율", + "pum_table_id": "F0399", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-02-03" + }, { "cell": "인 부", "pum_table_id": "F0401", @@ -1490,6 +1916,12 @@ "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", @@ -1520,6 +1952,12 @@ "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", @@ -1574,6 +2012,18 @@ "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", "work_item_code": "FP-13-13-01" }, + { + "cell": "인력(10%)", + "pum_table_id": "F0441", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-13-02" + }, + { + "cell": "장비(90%)", + "pum_table_id": "F0441", + "reason": "카탈로그에 없는 이름 (기계·자재 카탈로그 미확보 포함)", + "work_item_code": "FP-13-13-02" + }, { "cell": "간 단 구 조", "pum_table_id": "F0443",