From 5aa3cebc678aad16b41048b3758ba187f6ebe940 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 19 Sep 2026 17:03:50 +0900 Subject: [PATCH 1/5] =?UTF-8?q?fix(master=5Fdata):=20=EA=B2=80=EC=82=AC=20?= =?UTF-8?q?=EB=8F=84=EA=B5=AC=20=EC=A7=80=EC=A0=81=20=EB=B0=98=EC=98=81=20?= =?UTF-8?q?=E2=80=94=20=EA=B3=84=EC=88=98=20=ED=91=9C=20=EA=B5=AC=EB=B6=84?= =?UTF-8?q?=20=EC=A1=B0=EA=B1=B4=20=C2=B7=2012=EC=9E=A5=20=EA=B8=B0?= =?UTF-8?q?=EC=A4=80=C2=B7=EC=B6=9C=EC=B2=98=C2=B7=EB=B9=88=20=EA=B0=92=20?= =?UTF-8?q?=EC=A4=84=20=C2=B7=20=EA=B8=B0=EA=B3=84=20=EB=8B=A8=EC=9C=84=20?= =?UTF-8?q?=EC=B9=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 2장 우드그래플 소모율 · 6장 소작업로 기준 계수 표에 구분 조건 추가 - 12장 기준 칸 본문 표기(㎡당 등)로 · 12-17-1 하위 표 출처를 12-17-1 로 · 값 칸 빈 항목은 주로 - 기계 2-2-9 1톤(방제차량) 단위 묶음 칸을 값 묶음과 맞춤 Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT --- resources/master_data/기계_산림품셈.json | 2 +- .../master_data/소요량_산림품셈_02장.json | 2 +- .../master_data/소요량_산림품셈_06장.json | 2 +- .../master_data/소요량_산림품셈_12장.json | 162 ++++++++++-------- 4 files changed, 97 insertions(+), 71 deletions(-) diff --git a/resources/master_data/기계_산림품셈.json b/resources/master_data/기계_산림품셈.json index a5b09ba2..19808200 100644 --- a/resources/master_data/기계_산림품셈.json +++ b/resources/master_data/기계_산림품셈.json @@ -190,7 +190,7 @@ "출처": { "손료계수": "산림품셈 2-2-8", "취득가액": "산림품셈 2-2-8" }, "비고": "취득가액은 10조 기준" }, { "열쇠": "2-2-9 1톤(방제차량)", "이름": "1톤(방제차량)", "규격": "1톤", - "단위": {}, + "단위": { "손료계수": "" }, "값": { "손료계수": null }, "출처": { "손료계수": "산림품셈 2-2-9" }, "비고": "손료계수 원문: 「건설품셈 적산기준에 준함」" }, diff --git a/resources/master_data/소요량_산림품셈_02장.json b/resources/master_data/소요량_산림품셈_02장.json index 03e9451f..b4fca65e 100644 --- a/resources/master_data/소요량_산림품셈_02장.json +++ b/resources/master_data/소요량_산림품셈_02장.json @@ -79,7 +79,7 @@ "기준": "", "출처": "산림품셈 2-1-3 1~3", "그룹": "계수", - "조건": {}, + "조건": { "구분": "고르기" }, "값칸": { "적용": "줄 따름", "적용원문": "글", "단위": "글" }, "줄": [ { "구분": "연 근로일수", "적용": 247, "단위": "일" }, diff --git a/resources/master_data/소요량_산림품셈_06장.json b/resources/master_data/소요량_산림품셈_06장.json index b77f5f92..34ac3966 100644 --- a/resources/master_data/소요량_산림품셈_06장.json +++ b/resources/master_data/소요량_산림품셈_06장.json @@ -246,7 +246,7 @@ "기준": "", "출처": "산림품셈 6-5 【소요인력 산출】", "그룹": "계수", - "조건": {}, + "조건": { "구분": "고르기" }, "값칸": { "적용": "줄 따름", "단위": "글" }, "줄": [ { "구분": "소작업로 간격", "적용": 20, "단위": "m" }, diff --git a/resources/master_data/소요량_산림품셈_12장.json b/resources/master_data/소요량_산림품셈_12장.json index 752d41f2..08fa4513 100644 --- a/resources/master_data/소요량_산림품셈_12장.json +++ b/resources/master_data/소요량_산림품셈_12장.json @@ -101,25 +101,29 @@ { "열쇠": "12-2 표면 마무리", "이름": "표면 마무리", - "기준": "1㎡", + "기준": "㎡당", "출처": "산림품셈 12-2", "조건": { "구분": "고르기" }, "값칸": { "수량": "인" }, - "줄": [{ "구분": "미장공", "수량": 0.34 }], - "주": ["본 품은 콘크리트 타설 후 쇠흙손을 이용하여 마감하는 기준이다."] + "줄": [ + { "구분": "미장공", "수량": 0.34 } + ], + "주": [ + "본 품은 콘크리트 타설 후 쇠흙손을 이용하여 마감하는 기준이다." + ] }, { "열쇠": "12-3 철근 현장가공 및 조립", "이름": "철근 현장가공 및 조립", - "기준": "1ton", + "기준": "ton당", "출처": "산림품셈 12-3", "조건": { "구조별": "고르기" }, "값칸": { "가공_철근공": "인", "가공_보통인부": "인", "조립_철근공": "인", "조립_보통인부": "인", "계_철근공": "인", "계_보통인부": "인" }, "줄": [ { "구조별": "간단", "가공_철근공": 1.07, "가공_보통인부": 0.35, "조립_철근공": 1.69, "조립_보통인부": 0.69, "계_철근공": 2.76, "계_보통인부": 1.04 }, - { "구조별": "보통", "가공_철근공": 1.24, "가공_보통인부": 0.45, "조립_철근공": 1.84, "조립_보통인부": 0.75, "계_철근공": 3.08, "계_보통인부": 1.20 }, - { "구조별": "복잡", "가공_철근공": 1.51, "가공_보통인부": 0.50, "조립_철근공": 1.92, "조립_보통인부": 0.80, "계_철근공": 3.43, "계_보통인부": 1.30 }, - { "구조별": "매우복잡", "가공_철근공": 1.69, "가공_보통인부": 0.60, "조립_철근공": 2.14, "조립_보통인부": 0.86, "계_철근공": 3.83, "계_보통인부": 1.46 } + { "구조별": "보통", "가공_철근공": 1.24, "가공_보통인부": 0.45, "조립_철근공": 1.84, "조립_보통인부": 0.75, "계_철근공": 3.08, "계_보통인부": 1.2 }, + { "구조별": "복잡", "가공_철근공": 1.51, "가공_보통인부": 0.5, "조립_철근공": 1.92, "조립_보통인부": 0.8, "계_철근공": 3.43, "계_보통인부": 1.3 }, + { "구조별": "매우복잡", "가공_철근공": 1.69, "가공_보통인부": 0.6, "조립_철근공": 2.14, "조립_보통인부": 0.86, "계_철근공": 3.83, "계_보통인부": 1.46 } ], "주": [ "① 간단한 것이란 측구, 간단한 기초 및 중력식 옹벽 등을 말하며, 보통의 것이란 수문, 반중력식 옹벽 및 교대 등을 말하고, 복잡한 것이란 교량의 슬래브, 암거, 우물통 부벽식 옹벽 등을 말하며, 매우 복잡한 것이란 구주식(기둥형) 교대, 교각, 지하철, 터널 등을 말한다.", @@ -200,7 +204,7 @@ { "열쇠": "12-6 콘크리트 포장(인력시공) 배치인원", "이름": "콘크리트 포장(인력시공) 배치인원", - "기준": "1일", + "기준": "일당", "출처": "산림품셈 12-6", "조건": { "직종": "고르기" }, "값칸": { "인원": "인" }, @@ -213,7 +217,7 @@ { "열쇠": "12-6 콘크리트 포장(인력시공) 시공량", "이름": "콘크리트 포장(인력시공) 포장두께별 시공량", - "기준": "1일(포장공3인, 보통인부3인)", + "기준": "일당(포장공3인, 보통인부3인)", "출처": "산림품셈 12-6", "조건": { "포장두께": "고르기" }, "값칸": { "믹서트럭_직접타설": "㎥", "믹서트럭_후진진입_경운기운반": "글자" }, @@ -256,7 +260,7 @@ { "열쇠": "12-7-2 줄눈설치", "이름": "줄눈설치", - "기준": "1일", + "기준": "일당", "출처": "산림품셈 12-7-2", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수" }, @@ -265,7 +269,9 @@ { "구분": "보통인부", "단위": "인", "적용": 3 }, { "구분": "시공량", "단위": "m", "적용": 700 } ], - "주": ["줄눈재, 백업재 등 부대 재료비는 별도 계상한다."] + "주": [ + "줄눈재, 백업재 등 부대 재료비는 별도 계상한다." + ] }, { "열쇠": "12-8 콘크리트 포장 거푸집 배치인원", @@ -341,7 +347,7 @@ { "열쇠": "12-9-3 소단 측구", "이름": "소단 측구", - "기준": "1m", + "기준": "m당", "출처": "산림품셈 12-9-3", "조건": { "구분": "고르기" }, "값칸": { "규격": "글자", "단위": "글자" }, @@ -520,22 +526,22 @@ { "열쇠": "12-14 가배수관", "이름": "가배수관(파형강관부설)", - "기준": "1m", + "기준": "m당", "출처": "산림품셈 12-14", "조건": { "구분": "고르기", "관경": "수" }, "값칸": { "배관공_수도": "인", "보통인부": "인", "크레인": "hr", "비고": "글자" }, "줄": [ { "구분": "파형강관부설", "관경": 250, "배관공_수도": 0.04, "보통인부": 0.02, "크레인": 0.12 }, { "구분": "파형강관부설", "관경": 300, "배관공_수도": 0.06, "보통인부": 0.03, "크레인": 0.13 }, - { "구분": "파형강관부설", "관경": 400, "배관공_수도": 0.10, "보통인부": 0.05, "크레인": 0.16 }, + { "구분": "파형강관부설", "관경": 400, "배관공_수도": 0.1, "보통인부": 0.05, "크레인": 0.16 }, { "구분": "파형강관부설", "관경": 450, "배관공_수도": 0.12, "보통인부": 0.06, "크레인": 0.17 }, { "구분": "파형강관부설", "관경": 500, "배관공_수도": 0.13, "보통인부": 0.07, "크레인": 0.18 }, - { "구분": "파형강관부설", "관경": 600, "배관공_수도": 0.17, "보통인부": 0.08, "크레인": 0.20 }, - { "구분": "파형강관부설", "관경": 700, "배관공_수도": 0.21, "보통인부": 0.10, "크레인": 0.23 }, + { "구분": "파형강관부설", "관경": 600, "배관공_수도": 0.17, "보통인부": 0.08, "크레인": 0.2 }, + { "구분": "파형강관부설", "관경": 700, "배관공_수도": 0.21, "보통인부": 0.1, "크레인": 0.23 }, { "구분": "파형강관부설", "관경": 800, "배관공_수도": 0.24, "보통인부": 0.12, "크레인": 0.25 }, - { "구분": "파형강관부설", "관경": 1000, "배관공_수도": 0.32, "보통인부": 0.16, "크레인": 0.30 }, + { "구분": "파형강관부설", "관경": 1000, "배관공_수도": 0.32, "보통인부": 0.16, "크레인": 0.3 }, { "구분": "파형강관부설", "관경": 1200, "배관공_수도": 0.39, "보통인부": 0.19, "크레인": 0.35 }, - { "구분": "파형강관부설", "관경": 1500, "배관공_수도": 0.50, "보통인부": 0.25, "크레인": 0.43 }, + { "구분": "파형강관부설", "관경": 1500, "배관공_수도": 0.5, "보통인부": 0.25, "크레인": 0.43 }, { "구분": "철거", "비고": "부설비의 50%" } ], "주": [] @@ -637,7 +643,7 @@ "열쇠": "12-17-1-2 시설유형 계수(f1)", "이름": "그룹 계수 — 펌프카 시공량 시설유형(f1)", "기준": "", - "출처": "산림품셈 12-17-1-2 주②", + "출처": "산림품셈 12-17-1 주②", "조건": { "유형": "고르기" }, "값칸": { "f1": "배율" }, "줄": [ @@ -652,7 +658,7 @@ "열쇠": "12-17-1-2 시설유형(f1) 적용기준", "이름": "펌프카 시공량 시설유형(f1) 적용기준", "기준": "", - "출처": "산림품셈 12-17-1-2 주②", + "출처": "산림품셈 12-17-1 주②", "조건": { "유형": "고르기" }, "값칸": { "적용 기준": "글자" }, "줄": [ @@ -667,7 +673,7 @@ "열쇠": "12-17-1-2 현장조건 계수(f2)", "이름": "그룹 계수 — 펌프카 시공량 현장조건(f2)", "기준": "", - "출처": "산림품셈 12-17-1-2 주②", + "출처": "산림품셈 12-17-1 주②", "조건": { "유형": "고르기" }, "값칸": { "f2": "배율" }, "줄": [ @@ -675,13 +681,15 @@ { "유형": "Type-Ⅱ", "f2": 1.0 }, { "유형": "Type-Ⅲ", "f2": 0.8 } ], - "주": ["원문 그대로: 표 제목이 「시설유형」, 줄 이름이 「f₁」 로 찍혀 있으나 앞 문단상 이 표는 현장조건(f2) 표다."] + "주": [ + "원문 그대로: 표 제목이 「시설유형」, 줄 이름이 「f₁」 로 찍혀 있으나 앞 문단상 이 표는 현장조건(f2) 표다." + ] }, { "열쇠": "12-17-1-2 현장조건(f2) 적용기준", "이름": "펌프카 시공량 현장조건(f2) 적용기준", "기준": "", - "출처": "산림품셈 12-17-1-2 주②", + "출처": "산림품셈 12-17-1 주②", "조건": { "유형": "고르기" }, "값칸": { "적용 기준": "글자" }, "줄": [ @@ -695,15 +703,17 @@ "열쇠": "12-17-1-2 용적배합 콘크리트", "이름": "펌프카 타설 용적배합 콘크리트(손비비기)", "기준": "1㎥", - "출처": "산림품셈 12-17-1-2 주③", + "출처": "산림품셈 12-17-1 주③", "조건": { "배합비": "고르기" }, "값칸": { "시멘트": "kg", "모래": "㎥", "자갈": "㎥", "콘크리트공": "인", "보통인부": "인" }, "줄": [ - { "배합비": "1:2:4", "시멘트": 320, "모래": 0.45, "자갈": 0.90, "콘크리트공": 0.9, "보통인부": 1.0 }, + { "배합비": "1:2:4", "시멘트": 320, "모래": 0.45, "자갈": 0.9, "콘크리트공": 0.9, "보통인부": 1.0 }, { "배합비": "1:3:6", "시멘트": 220, "모래": 0.47, "자갈": 0.94, "콘크리트공": 0.9, "보통인부": 0.9 }, { "배합비": "1:4:8", "시멘트": 170, "모래": 0.48, "자갈": 0.96, "콘크리트공": 0.9, "보통인부": 0.7 } ], - "주": ["재료량에는 할증률이 포함되어 있다."] + "주": [ + "재료량에는 할증률이 포함되어 있다." + ] }, { "열쇠": "12-17-1-3 압송관 설치 및 철거", @@ -752,7 +762,7 @@ { "열쇠": "12-18 철근가공조립(복잡)", "이름": "철근가공조립(복잡)", - "기준": "1ton", + "기준": "ton당", "출처": "산림품셈 12-18", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수" }, @@ -767,7 +777,7 @@ { "열쇠": "12-19 강관비계", "이름": "강관비계", - "기준": "1공㎥", + "기준": "공㎥당", "출처": "산림품셈 12-19", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수" }, @@ -777,15 +787,17 @@ { "구분": "자재 - 조임철물", "단위": "개", "적용": 2.08 }, { "구분": "자재 - 받침철물", "단위": "개", "적용": 0.04 }, { "구분": "자재 - 철물", "단위": "개", "적용": 0.04 }, - { "구분": "인력 - 비계공", "단위": "인", "적용": 0.10 }, + { "구분": "인력 - 비계공", "단위": "인", "적용": 0.1 }, { "구분": "경비 - 기구손료(노무비의)", "단위": "%", "적용": 5 } ], - "주": ["공사기간에 따른 손율을 적용한다."] + "주": [ + "공사기간에 따른 손율을 적용한다." + ] }, { "열쇠": "12-20 강관동바리", "이름": "강관동바리", - "기준": "1㎥", + "기준": "㎥당", "출처": "산림품셈 12-20", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수" }, @@ -796,12 +808,14 @@ { "구분": "인력 - 형틀목공", "단위": "인", "적용": 0.07 }, { "구분": "인력 - 보통인부", "단위": "인", "적용": 0.05 } ], - "주": ["공사기간에 따른 손율을 적용한다."] + "주": [ + "공사기간에 따른 손율을 적용한다." + ] }, { "열쇠": "12-21 아스팔트코팅(2회)", "이름": "아스팔트코팅(2회)", - "기준": "1㎡", + "기준": "㎡당", "출처": "산림품셈 12-21", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수", "비고": "글자" }, @@ -815,20 +829,21 @@ { "열쇠": "12-22 P.V.C 파이프 설치(50mm)", "이름": "P.V.C 파이프 설치(50mm)", - "기준": "1개소", + "기준": "개소당", "출처": "산림품셈 12-22", "조건": { "구분": "고르기" }, "값칸": { "적용": "글자" }, "줄": [ - { "구분": "재료비" }, { "구분": "설치비", "적용": "재료비의 5%" } ], - "주": [] + "주": [ + "값 칸이 빈 항목: 재료비" + ] }, { "열쇠": "12-23 부직포설치", "이름": "부직포설치", - "기준": "1㎡", + "기준": "㎡당", "출처": "산림품셈 12-23", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수", "비고": "글자" }, @@ -851,12 +866,14 @@ { "구분": "인력(10%) - 보통인부", "단위": "인", "적용": 4.0 }, { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - k", "적용": 0.9 }, { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - f", "적용": 0.81, "비고": "0.95/1.175" }, - { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.60 }, - { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "18(90°)" }, - { "구분": "장비(90%) - 살수 - 물탱크(5,500ℓ)" }, - { "구분": "장비(90%) - 다짐 - 진동 로울러(10ton)" } + { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.6 }, + { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "18(90°)" } ], - "주": ["뒷채움 자재비 및 운반비 별산.", "원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임."] + "주": [ + "뒷채움 자재비 및 운반비 별산.", + "원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임.", + "값 칸이 빈 항목: 장비(90%) - 살수 - 물탱크(5,500ℓ), 장비(90%) - 다짐 - 진동 로울러(10ton)" + ] }, { "열쇠": "12-24-2 되메우기(노상재)", @@ -870,13 +887,14 @@ { "구분": "인력(10%) - 보통인부", "단위": "인", "적용": 4.0 }, { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - k", "적용": 0.9 }, { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - f", "적용": 0.69, "비고": "0.9/1.30" }, - { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.60 }, - { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "18(90°)" }, - { "구분": "장비(90%) - 살수 - 물탱크(5,500ℓ)" }, - { "구분": "장비(90%) - 다짐 - 진동 로울러(10ton)" }, - { "구분": "장비(90%) - 다짐 - 타이어 로울러(8-15ton)" } + { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.6 }, + { "구분": "장비(90%) - 부설 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "18(90°)" } ], - "주": ["뒷채움 자재비 및 운반비 별산.", "원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임."] + "주": [ + "뒷채움 자재비 및 운반비 별산.", + "원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임.", + "값 칸이 빈 항목: 장비(90%) - 살수 - 물탱크(5,500ℓ), 장비(90%) - 다짐 - 진동 로울러(10ton), 장비(90%) - 다짐 - 타이어 로울러(8-15ton)" + ] }, { "열쇠": "12-25 기초잡석", @@ -891,10 +909,12 @@ { "구분": "적사 - 유압식백호우(무한궤도 0.7㎥) - E", "적용": 0.35 }, { "구분": "적사 - 유압식백호우(무한궤도 0.7㎥) - f", "적용": 1.0 }, { "구분": "적사 - 유압식백호우(무한궤도 0.7㎥) - Cm(sec)", "적용": "22(180°)" }, - { "구분": "운반 - 덤프트럭(15ton)" }, { "구분": "부설 및 다짐 - 보통인부", "적용": 0.6 } ], - "주": ["원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임."] + "주": [ + "원문 그대로: ㎝(sec) — 싸이클 시간 Cm 자리로 보임.", + "값 칸이 빈 항목: 운반 - 덤프트럭(15ton)" + ] }, { "열쇠": "12-26 물푸기", @@ -904,12 +924,13 @@ "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수", "비고": "글자" }, "줄": [ - { "구분": "기계 - 양수기(150m/m)" }, { "구분": "기계 - 디젤엔진(15HP)", "비고": "11.19kW" }, { "구분": "운반 및 설치(목도운반) - 목도(인력운반공)", "단위": "인", "적용": 4, "비고": "L=30m, V=2500m/hr, T=25분" }, { "구분": "운반 및 설치(목도운반) - 보통인부", "단위": "인", "적용": 1 } ], - "주": [] + "주": [ + "값 칸이 빈 항목: 기계 - 양수기(150m/m)" + ] }, { "열쇠": "12-27-1 지수판 설치", @@ -931,13 +952,13 @@ { "열쇠": "12-27-2 JOINT FILLER", "이름": "JOINT FILLER", - "기준": "1㎡", + "기준": "㎡당", "출처": "산림품셈 12-27-2", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수", "비고": "글자" }, "줄": [ { "구분": "자재 - JOINT FILLER", "단위": "㎡", "적용": 1.1, "비고": "10% 할증" }, - { "구분": "자재 - 접착제", "단위": "kg", "적용": 0.30 }, + { "구분": "자재 - 접착제", "단위": "kg", "적용": 0.3 }, { "구분": "인력(설치비) - 보통인부", "단위": "인", "적용": 0.08 } ], "주": [] @@ -945,12 +966,12 @@ { "열쇠": "12-27-3 실런트(20×25mm)", "이름": "실런트(20×25mm)", - "기준": "1개소", + "기준": "개소당", "출처": "산림품셈 12-27-3", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수", "비고": "글자" }, "줄": [ - { "구분": "자재 - 실런트", "단위": "㎥", "적용": 0.70, "비고": "0.02×0.025×1400kg/㎥" }, + { "구분": "자재 - 실런트", "단위": "㎥", "적용": 0.7, "비고": "0.02×0.025×1400kg/㎥" }, { "구분": "인력(설치비) - 방수공", "단위": "인", "적용": 0.04 } ], "주": [] @@ -958,12 +979,12 @@ { "열쇠": "12-28 신구 BOX접합", "이름": "신구 BOX접합", - "기준": "1개소", + "기준": "개소당", "출처": "산림품셈 12-28", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수" }, "줄": [ - { "구분": "자재 - 에폭시 접착제", "단위": "kg", "적용": 1.20 }, + { "구분": "자재 - 에폭시 접착제", "단위": "kg", "적용": 1.2 }, { "구분": "자재 - 시너", "단위": "ℓ", "적용": 0.21 }, { "구분": "인력 - 미장공", "단위": "인", "적용": 0.12 } ], @@ -1001,7 +1022,7 @@ { "열쇠": "12-30-2 접속스라브부(D29m/m, L=500m/m)", "이름": "다웰바 설치 — 접속스라브부(D29m/m, L=500m/m)", - "기준": "1개소", + "기준": "개소당", "출처": "산림품셈 12-30-2", "조건": { "구분": "고르기" }, "값칸": { "규격": "글자", "단위": "글자", "적용": "수 또는 글자", "비고": "글자" }, @@ -1026,10 +1047,11 @@ "조건": { "구분": "고르기" }, "값칸": { "적용": "글자" }, "줄": [ - { "구분": "재료비" }, { "구분": "설치비", "적용": "주재료비의 5%" } ], - "주": [] + "주": [ + "값 칸이 빈 항목: 재료비" + ] }, { "열쇠": "12-32 전선관 설치(P.V.C ø54mm)", @@ -1047,7 +1069,7 @@ { "열쇠": "12-33 비닐깔기", "이름": "비닐깔기", - "기준": "1㎡", + "기준": "㎡당", "출처": "산림품셈 12-33", "조건": { "구분": "고르기" }, "값칸": { "규격": "글자", "단위": "글자", "적용": "수" }, @@ -1089,7 +1111,7 @@ { "열쇠": "12-34-3 철근가공조립(보통)", "이름": "암거이음받침 — 철근가공조립(보통)", - "기준": "1ton", + "기준": "ton당", "출처": "산림품셈 12-34-3", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수 또는 글자" }, @@ -1106,17 +1128,19 @@ { "열쇠": "12-34-4 채움재(T=20m/m)", "이름": "암거이음받침 — 채움재(T=20m/m)", - "기준": "1㎡", + "기준": "㎡당", "출처": "산림품셈 12-34-4", "조건": { "구분": "고르기" }, "값칸": { "적용": "글자" }, - "줄": [{ "구분": "재료비", "적용": "JOINT FILLER" }], + "줄": [ + { "구분": "재료비", "적용": "JOINT FILLER" } + ], "주": [] }, { "열쇠": "12-35 콘크리트 표면 강화재(하드너)", "이름": "콘크리트 표면 강화재(하드너)", - "기준": "1㎡", + "기준": "㎡당", "출처": "산림품셈 12-35", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수", "비고": "글자" }, @@ -1125,7 +1149,9 @@ { "구분": "설치 - 미장공", "단위": "인", "적용": 0.14 }, { "구분": "설치 - 보통인부", "단위": "인", "적용": 0.05 } ], - "주": ["바닥, 벽체에 칠한다."] + "주": [ + "바닥, 벽체에 칠한다." + ] }, { "열쇠": "12-36 P.C BOX 설치", @@ -1144,7 +1170,7 @@ { "열쇠": "12-37 콘크리트 타설(무근진동기 제외)", "이름": "콘크리트 타설(무근진동기 제외)", - "기준": "1㎥", + "기준": "㎥당", "출처": "산림품셈 12-37", "조건": { "구분": "고르기" }, "값칸": { "단위": "글자", "적용": "수", "비고": "글자" }, From 4757ac0039e6e3867840e5bb421c954d7aa26f14 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 19 Sep 2026 17:05:20 +0900 Subject: [PATCH 2/5] =?UTF-8?q?fix(master=5Fdata):=20=EA=B1=B4=EC=84=A4?= =?UTF-8?q?=ED=92=88=EC=85=88=20=EA=B3=B5=ED=86=B5=204=EC=9E=A5=20=C2=B7?= =?UTF-8?q?=205=EC=9E=A5=20=ED=91=9C=20=ED=8B=80=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC=20=E2=80=94=20=EC=A3=BC=20=EC=B9=B8=20=C2=B7?= =?UTF-8?q?=20=EA=B5=AC=EB=B6=84=20=EC=A1=B0=EA=B1=B4=20=C2=B7=20=EB=B9=84?= =?UTF-8?q?=EA=B3=A0=20=EA=B0=92=EC=B9=B8=20=C2=B7=20=EB=A7=A4=ED=8A=B8?= =?UTF-8?q?=EA=B3=A0=EC=A0=95=20=EA=B8=B0=EC=A4=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 주 칸 없는 표에 빈 주 추가 · 글 줄인 구분 조건을 고르기로 · 비고 칸 쓰는 표에 비고 값칸 선언 - 5-2-1 매트고정 재료량 기준에 P.P로프 9㎜ 표기로 본문 수 9 살림 Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT --- .../master_data/소요량_건설품셈_공통4장.json | 40 +++-- .../master_data/소요량_건설품셈_공통5장.json | 142 ++++++++++++------ 2 files changed, 117 insertions(+), 65 deletions(-) diff --git a/resources/master_data/소요량_건설품셈_공통4장.json b/resources/master_data/소요량_건설품셈_공통4장.json index ea51b2ec..717e8e60 100644 --- a/resources/master_data/소요량_건설품셈_공통4장.json +++ b/resources/master_data/소요량_건설품셈_공통4장.json @@ -170,7 +170,8 @@ "단위": "㎏", "수량": 0.2 } - ] + ], + "주": [] }, { "열쇠": "4-1-4 초화류 식재", @@ -226,7 +227,7 @@ "기준": "", "출처": "건설품셈 공통 4-1-4 주②", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "감액률": "%(범위 내)" @@ -236,7 +237,8 @@ "구분": "특수화단(화문화단, 리본화단, 포석화단)", "감액률": 17 } - ] + ], + "주": [] }, { "열쇠": "4-1-5 거적덮기", @@ -326,7 +328,7 @@ "기준": "", "출처": "건설품셈 공통 4-2-1 주⑦", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "감액률": "%(범위 내)" @@ -336,7 +338,8 @@ "구분": "야생 굴취", "감액률": 17 } - ] + ], + "주": [] }, { "열쇠": "4-2-2 식재(단식)", @@ -485,7 +488,8 @@ "수관폭": "100", "주수": 1 } - ] + ], + "주": [] }, { "열쇠": "4-3-1 뿌리돌림", @@ -713,7 +717,8 @@ "구분": "분이 없는 경우(비고)", "비율": 25 } - ] + ], + "주": [] }, { "열쇠": "4-3-3 굴취(근원직경)", @@ -871,7 +876,8 @@ "구분": "분이 없는 경우(비고)", "비율": 25 } - ] + ], + "주": [] }, { "열쇠": "4-3-4 식재(나무높이)", @@ -954,7 +960,7 @@ "기준": "", "출처": "건설품셈 공통 4-3-4", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "가산율": "%" @@ -964,7 +970,8 @@ "구분": "지주목 미설치(비고)", "가산율": 11 } - ] + ], + "주": [] }, { "열쇠": "4-3-5 식재(흉고직경)", @@ -1092,7 +1099,7 @@ "기준": "", "출처": "건설품셈 공통 4-3-5", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "가산율": "%" @@ -1102,7 +1109,8 @@ "구분": "지주목 미설치(비고)", "가산율": 11 } - ] + ], + "주": [] }, { "열쇠": "4-4-1 정원석 쌓기 및 놓기", @@ -1209,7 +1217,8 @@ "구분": "공구손료(주④)", "비율": 3 } - ] + ], + "주": [] }, { "열쇠": "4-4-2 조경유용석 쌓기 및 놓기", @@ -1361,7 +1370,7 @@ "기준": "", "출처": "건설품셈 공통 4-4-5 주④", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "비율": "%(인력품 대비)" @@ -1371,7 +1380,8 @@ "구분": "공구손료 및 경장비", "비율": 3 } - ] + ], + "주": [] }, { "열쇠": "4-4-6 인공식재지 배수판 설치", diff --git a/resources/master_data/소요량_건설품셈_공통5장.json b/resources/master_data/소요량_건설품셈_공통5장.json index 217ed486..78b9daf3 100644 --- a/resources/master_data/소요량_건설품셈_공통5장.json +++ b/resources/master_data/소요량_건설품셈_공통5장.json @@ -109,7 +109,8 @@ "시공법": "헐기", "굴착기규격": "1.0㎥" } - ] + ], + "주": [] }, { "열쇠": "5-1-2 H-Beam 설치(띠장)", @@ -652,7 +653,8 @@ "재료": "강재", "비고": "'[공통부문] 2-2-2 주요자재 / 강재류'를 적용한다." } - ] + ], + "주": [] }, { "열쇠": "5-1-7 장비조립·해체", @@ -984,7 +986,8 @@ "구분": "보통인부", "수량": 1 } - ] + ], + "주": [] }, { "열쇠": "5-1-7 PC강선 제거", @@ -1194,7 +1197,8 @@ "단위": "〃", "수량": 0.5 } - ] + ], + "주": [] }, { "열쇠": "5-1-9 장비편성", @@ -1283,7 +1287,7 @@ "기준": "", "출처": "건설품셈 공통 5-1-9 4 주①", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "부속장비": "%", @@ -1365,7 +1369,8 @@ "값칸": { "개요": "글", "산출방법": "식", - "산출방법원문": "글" + "산출방법원문": "글", + "비고": "글" }, "줄": [ { @@ -1396,7 +1401,8 @@ "개요": "작업계수", "산출방법": 0.8 } - ] + ], + "주": [] }, { "열쇠": "5-1-9 t4 콘크리트 타설 소요시간", @@ -1422,7 +1428,8 @@ "말뚝길이": "20m~30m", "소요시간": 7 } - ] + ], + "주": [] }, { "열쇠": "5-1-9 지층별 굴착시간(a1)", @@ -1705,7 +1712,7 @@ "기준": "", "출처": "건설품셈 공통 5-1-10 3가 주①", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "부속장비": "%", @@ -1733,7 +1740,8 @@ "값칸": { "개요": "글", "산출방법": "식", - "산출방법원문": "글" + "산출방법원문": "글", + "비고": "글" }, "줄": [ { @@ -1815,7 +1823,7 @@ "기준": "", "출처": "건설품셈 공통 5-1-10 4 주④", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "부속장비": "%", @@ -1827,7 +1835,8 @@ "부속장비": 8, "소모자재": 2 } - ] + ], + "주": [] }, { "열쇠": "5-1-11 직선형 기준틀 설치 및 해체", @@ -1936,7 +1945,8 @@ "구분": "공구손료 및 경장비(용접기 등)", "비율": 3 } - ] + ], + "주": [] }, { "열쇠": "5-2-1 매트부설", @@ -2036,7 +2046,7 @@ { "열쇠": "5-2-1 매트고정 재료량", "이름": "매트부설 매트고정 재료량(참고자료)", - "기준": "100㎡당", + "기준": "100㎡당(P.P로프 9㎜)", "출처": "건설품셈 공통 5-2-1", "조건": { "구분": "고르기" @@ -2225,7 +2235,8 @@ "단위": "〃", "수량": 2 } - ] + ], + "주": [] }, { "열쇠": "5-2-2 장비편성", @@ -2444,7 +2455,8 @@ "값칸": { "개요": "글", "산출방법": "식", - "산출방법원문": "글" + "산출방법원문": "글", + "비고": "글" }, "줄": [ { @@ -2531,7 +2543,8 @@ "토질": "전석/호박돌", "시간": 11.0 } - ] + ], + "주": [] }, { "열쇠": "5-2-2 유효직경별 분사주입시간(t3)", @@ -2565,7 +2578,8 @@ "유효직경": 2000, "분사주입시간": 22.57 } - ] + ], + "주": [] }, { "열쇠": "5-2-3 장비조립 및 해체", @@ -2661,7 +2675,7 @@ "기준": "", "출처": "건설품셈 공통 5-2-3 3 주①", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "부속장비": "%", @@ -2689,7 +2703,8 @@ "값칸": { "개요": "글", "산출방법": "식", - "산출방법원문": "글" + "산출방법원문": "글", + "비고": "글" }, "줄": [ { @@ -2785,7 +2800,8 @@ "L": "55이하", "t_1": 51 } - ] + ], + "주": [] }, { "열쇠": "5-2-3 표준타입·인발속도(V1,V2)", @@ -2810,7 +2826,8 @@ "V_1": 1.52, "V_2": 1.4 } - ] + ], + "주": [] }, { "열쇠": "5-2-4 적용범위", @@ -2955,7 +2972,8 @@ "단위": "〃", "수량": 1 } - ] + ], + "주": [] }, { "열쇠": "5-2-4 장비편성", @@ -3064,7 +3082,7 @@ "기준": "", "출처": "건설품셈 공통 5-2-4 4 주", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "부속장비": "%", @@ -3076,7 +3094,8 @@ "부속장비": 9, "소모자재": 3 } - ] + ], + "주": [] }, { "열쇠": "5-2-4 작업소요시간(본당)", @@ -3089,7 +3108,8 @@ "값칸": { "개요": "글", "산출방법": "식", - "산출방법원문": "글" + "산출방법원문": "글", + "비고": "글" }, "줄": [ { @@ -3163,7 +3183,8 @@ "구분": "공구손료 및 경장비(발전기, 전동드릴 등)", "비율": 3 } - ] + ], + "주": [] }, { "열쇠": "5-3-1 적용범위", @@ -3185,7 +3206,8 @@ "말뚝종류": "기성콘크리트말뚝", "말뚝직경": "400∼800" } - ] + ], + "주": [] }, { "열쇠": "5-3-1 장비조립·해체", @@ -3329,7 +3351,8 @@ "단위": "〃", "수량": 0.5 } - ] + ], + "주": [] }, { "열쇠": "5-3-1 장비편성", @@ -3439,7 +3462,7 @@ "기준": "", "출처": "건설품셈 공통 5-3-1 4 주①", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "단말뚝": "%", @@ -3556,7 +3579,8 @@ "값칸": { "개요": "글", "산출방법": "식", - "산출방법원문": "글" + "산출방법원문": "글", + "비고": "글" }, "줄": [ { @@ -3595,7 +3619,8 @@ "개요": "작업계수", "산출방법원문": "도로/철도 교량기초 : 0.75, 건축기초 : 0.85" } - ] + ], + "주": [] }, { "열쇠": "5-3-1 작업계수(f)", @@ -3617,7 +3642,8 @@ "구분": "건축기초", "작업계수": 0.85 } - ] + ], + "주": [] }, { "열쇠": "5-3-1 그라우팅 소요시간(t4)", @@ -3662,7 +3688,8 @@ "말뚝길이": "20∼30미만", "소요시간": 8 } - ] + ], + "주": [] }, { "열쇠": "5-3-1 용접 소요시간(t5)", @@ -3700,7 +3727,8 @@ "직경": 800, "시간": 29 } - ] + ], + "주": [] }, { "열쇠": "5-3-1 지층별 굴착시간(a1)", @@ -4082,7 +4110,8 @@ "단위": "〃", "수량": 0.5 } - ] + ], + "주": [] }, { "열쇠": "5-3-2 장비편성", @@ -4254,7 +4283,8 @@ "값칸": { "개요": "글", "산출방법": "식", - "산출방법원문": "글" + "산출방법원문": "글", + "비고": "글" }, "줄": [ { @@ -4611,7 +4641,8 @@ "적용공법": "전회전식 올케이싱", "말뚝직경": "1,000∼3,000" } - ] + ], + "주": [] }, { "열쇠": "5-3-5 장비조립·해체", @@ -4739,7 +4770,8 @@ "단위": "〃", "수량": 1 } - ] + ], + "주": [] }, { "열쇠": "5-3-5 굴착 장비편성", @@ -4865,7 +4897,7 @@ "기준": "", "출처": "건설품셈 공통 5-3-5 3나 주②", "조건": { - "구분": "수" + "구분": "고르기" }, "값칸": { "R.C.D": "%", @@ -4938,7 +4970,8 @@ "구분": "전회전식", "소요시간": 2 } - ] + ], + "주": [] }, { "열쇠": "5-3-5 지층별 천공시간(t1)", @@ -5369,7 +5402,8 @@ "구분": "케이싱 연결(올케이싱)", "소요시간": 0.4 } - ] + ], + "주": [] }, { "열쇠": "5-3-5 굴착 작업계수(f)", @@ -5391,7 +5425,8 @@ "구분": "올케이싱", "작업계수": 0.8 } - ] + ], + "주": [] }, { "열쇠": "5-3-5 말뚝조성 인력편성", @@ -5421,7 +5456,8 @@ "단위": "〃", "수량": 2 } - ] + ], + "주": [] }, { "열쇠": "5-3-5 말뚝조성 장비편성", @@ -5557,7 +5593,8 @@ "값칸": { "개요": "글", "산출방법": "식", - "산출방법원문": "글" + "산출방법원문": "글", + "비고": "글" }, "줄": [ { @@ -5629,7 +5666,8 @@ "구분": "올케이싱", "소요시간": 2.0 } - ] + ], + "주": [] }, { "열쇠": "5-3-5 철근망이음 적용시간(a1)", @@ -5688,7 +5726,8 @@ "구분": "올케이싱", "β": 1.08 } - ] + ], + "주": [] }, { "열쇠": "5-3 공구손료·경장비 보정 — 그룹 계수", @@ -5743,7 +5782,8 @@ "구분": "소모자재(용접봉, 철판재, 호스 등) 손료", "비율": 10 } - ] + ], + "주": [] }, { "열쇠": "5-4-1 차수재공", @@ -5831,7 +5871,8 @@ "구분": "시트", "요율": 5 } - ] + ], + "주": [] }, { "열쇠": "5-4-1 재료량", @@ -5909,7 +5950,8 @@ "구분": "공구손료 및 경장비(발전기, 자동융착기 등) — 시트", "비율": 5 } - ] + ], + "주": [] } ] } From 03d8c4daa3c96ab8a022858c6bf74ffabf9726a8 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 19 Sep 2026 17:06:52 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat(master=5Fdata):=20=EC=82=B0=EB=A6=BC?= =?UTF-8?q?=ED=92=88=EC=85=88=203=EC=9E=A5=C2=B74=EC=9E=A5=C2=B75=EC=9E=A5?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=2048=EC=A4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 로직_산림품셈_03장: 10줄(경계표시 · 작업로 설치+체인톱 · 운반로 신설 작업량+돈 · 보수 · 상용인부 · 예정지정리 할증 · 임내정리 · 재해산물 수집 · 드론 촬영) - 로직_산림품셈_04장: 5줄(하베스터 벌도·조재 · 조재 · 가지정리 · 위험목 점검 · 작업안전 보조) - 로직_산림품셈_05장: 33줄(떼채취 · 나무식재 · 파종 · 움싹 · 생태보완 · 큰나무 · 해안 · 사방 · 사초 · 떼 · 새 · 바자 · 씨뿌리기 · 표토 · 뿜어붙이기 · 거적 · 짚망 · 복사이식 · 표시봉 · 지주목 · 대절 · 가식 · 소운반) - 1-4 할증은 1-4-10 토양상태 · 1-4-14 집재방향만(나머지는 칸 이름 문법 막힘) - 시험 둘 더함(18 통과) Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj --- resources/master_data/로직_산림품셈_03장.json | 385 +++++++ resources/master_data/로직_산림품셈_04장.json | 195 ++++ resources/master_data/로직_산림품셈_05장.json | 982 ++++++++++++++++++ resources/tester/test_masterdata_check.py | 26 + 4 files changed, 1588 insertions(+) create mode 100644 resources/master_data/로직_산림품셈_03장.json create mode 100644 resources/master_data/로직_산림품셈_04장.json create mode 100644 resources/master_data/로직_산림품셈_05장.json diff --git a/resources/master_data/로직_산림품셈_03장.json b/resources/master_data/로직_산림품셈_03장.json new file mode 100644 index 00000000..8f8636b4 --- /dev/null +++ b/resources/master_data/로직_산림품셈_03장.json @@ -0,0 +1,385 @@ +{ + "그룹": "로직", + "원문": "산림품셈", + "판": "2026-01-01", + "줄": [ + { + "열쇠": "3-1 경계표시", + "이름": "경계표시", + "결과단위": "원/ha", + "출처": "산림품셈 3-1", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "찾기(소요량:산림품셈:3-1 경계표시).소요인력", "비목": "노무비" } + ], + "덧줄": [], + "끝수": null, + "비고": "할인·할증 못 넣음 — 1-4-3 집단화정도(조건 「개소당 평균면적」 빈칸 · 범위규칙이 글) · 1-4-5 경사도(값 칸 「할인·할증률」) — 칸 이름 · 범위규칙 문법 · 페인트(2-1-4) 재료 요소 없음" + }, + { + "열쇠": "3-3 작업로 설치", + "이름": "작업로 설치", + "결과단위": "원/km", + "출처": "산림품셈 3-3", + "소유": "공용", + "입력": [ + { "이름": "구분", "고르기": ["소작업로", "대작업로"] }, + { "이름": "체인톱가격", "단위": "원" }, + { "이름": "체인오일단가", "단위": "원/ℓ" }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [ + { "이름": "소요", "식": "찾기(소요량:산림품셈:3-3 작업로 설치, 구분=구분).소요인력" }, + { "이름": "체인톱대수", "식": "소요 * 0.5", "출처": "산림품셈 2-1-1 주② 「작업로 설치 — 산출 인원의 50%」" } + ], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1037", + "이름": "벌목부", + "단위": "인", + "수량": "소요 * 0.5", + "비목": "노무비", + "출처": "산림품셈 3-3 인력구성 「벌목부 50%」" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "소요 * 0.5", + "비목": "노무비", + "출처": "산림품셈 3-3 인력구성 「보통인부 50%」" + }, + { + "종류": "재료", + "요소": "재료:오피넷유가:휘발유:{지역}", + "이름": "휘발유(체인톱)", + "단위": "ℓ", + "수량": "체인톱대수 * 찾기(소요량:산림품셈:2-1-1 휘발유·오일, 기계명='체인톱', 재료명='보통휘발유(주연료)').주연료", + "비목": "재료비", + "출처": "산림품셈 2-1-1 주③" + } + ], + "덧줄": [ + { + "이름": "잡품", + "식": "재료비 * 찾기(소요량:산림품셈:2-1-1 휘발유·오일, 기계명='체인톱', 재료명='보통휘발유(주연료)').잡품 / 100", + "비목": "재료비", + "출처": "산림품셈 2-1-1 주⑤" + }, + { + "이름": "체인오일", + "식": "체인톱대수 * 찾기(소요량:산림품셈:2-1-1 휘발유·오일, 기계명='체인톱', 재료명='체인오일(일반오일)').주연료 * 체인오일단가", + "비목": "재료비", + "출처": "산림품셈 2-1-1 주④" + }, + { "이름": "체인톱 손료", "식": "체인톱대수 * 기계:산림품셈:2-2-1 체인톱.손료계수 * 체인톱가격", "비목": "경비", "출처": "산림품셈 2-2-1" } + ], + "끝수": null, + "비고": "할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-9 제거대상 식생(조건 「제거대상 식생」 빈칸) — 칸 이름 · 범위규칙 문법 · 체인톱 가격 · 체인오일 단가 원문에 없음(시중가격) — 설계자 입력 · 상층목은 솎아베기 본수에 포함(주③⑥)" + }, + { + "열쇠": "3-4-2 임산물 운반로 신설 작업량", + "이름": "임산물 운반로 신설 굴착기 시간당 작업량", + "결과단위": "㎥/시간", + "출처": "산림품셈 3-4-2 1", + "소유": "공용", + "입력": [], + "중간": [ + { "이름": "q", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='q(버킷용량)').값" }, + { "이름": "K", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='K(버킷계수)').값" }, + { "이름": "f", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='f(체적환산계수)').값" }, + { "이름": "E", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='E(작업효율)').값" }, + { "이름": "Cm", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='Cm(1회 사이클의 시간)').값" } + ], + "결과": { "식": "반올림(3600 * q * K * f * E / Cm, 3)", "출처": "건설품셈 공통 8-1-4 주①" }, + "끝수": "소수 3자리 사사오입(건설품셈 공통 8-1-4 주①)", + "비고": "해석: 원문 단가산출 예시의 값(q 0.2 · K 0.7 · f 0.71 · E 0.45 · Cm 18)을 표준 값으로 씀" + }, + { + "열쇠": "3-4-2 임산물 운반로 신설", + "이름": "임산물 운반로 및 작업로 신설(굴착기 0.2㎥)", + "결과단위": "원/m", + "출처": "산림품셈 3-4-2", + "소유": "공용", + "입력": [ + { "이름": "횡단경사", "단위": "%" }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [ + { "이름": "작업량", "식": "로직(산림품셈:3-4-2 임산물 운반로 신설 작업량)" }, + { "이름": "절토량", "식": "찾기(소요량:산림품셈:3-4-2 신설비 산정 예시, 구분='m당 절토량').값" }, + { "이름": "할증", "식": "만약(횡단경사 >= 55, 찾기(소요량:산림품셈:3-4-2 횡단경사별 할증률, 횡단경사=횡단경사).할증률, 0)", "출처": "산림품셈 3-4-2 6" } + ], + "호표": [ + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0020', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기(무한궤도) 0.2㎥", + "단위": "시간", + "수량": "(절토량 / 작업량) * (1 + 할증 / 100)" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 원문 예시(시간당 단가 ÷ Q × 절토량)를 식으로 씀 · 굴착기 규격 0.2㎥ 는 예시 값 · 건설품셈 공통 8-2-3 계수 필요(0.2㎥ · 0.4㎥ 굴착기를 쓸 때) · 벌목 · 제근 · 암절취 · 임시 공작물 · 유용토 운반 별도(4)" + }, + { + "열쇠": "3-4-3 보수공정", + "이름": "임산물 운반로 보수공정", + "결과단위": "원/100㎡", + "출처": "산림품셈 3-4-3", + "소유": "공용", + "입력": [{ "이름": "종별", "고르기": ["노면정지", "노면굴기"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:3-4-3 보수공정표, 종별=종별).인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 원문 「인부」 = 보통인부" + }, + { + "열쇠": "3-4-3 상용인부 고용경비", + "이름": "임산물 운반로 상용인부 고용경비", + "결과단위": "원/일", + "출처": "산림품셈 3-4-3", + "소유": "공용", + "입력": [ + { + "이름": "조건", + "고르기": ["입지적 조건과 계절에 따른 기상적인 조건이 불량한 경우", "입지적 조건과 계절에 따른 기상적인 조건이 보통인 경우", "입지적 조건과 계절에 따른 입지적 조건이 양호한 경우"] + }, + { "이름": "연장", "단위": "km" } + ], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "연장 / 찾기(소요량:산림품셈:3-4-3 상용인부 고용경비 산정조건, 조건=조건).거리", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 상용인부 = 보통인부 · 1일 인원 = 연장 ÷ 기준거리(끝수 규정 없음) · 고용기간(반출 지정기간 등)은 설계자 몫" + }, + { + "열쇠": "3-5 예정지정리", + "이름": "예정지정리", + "결과단위": "원/ha", + "출처": "산림품셈 3-5", + "소유": "공용", + "입력": [ + { + "이름": "작업내용", + "고르기": [ + "보완사업지 정리", + "휴경지 등 정리", + "관목지 등 정리", + "산불 등 피해지 정리", + "불량림 정리", + "인력 정리", + "임업기계장비 이용 정리", + "벌채부산물 임내정리", + "모든 벌채부산물 반출" + ] + }, + { "이름": "정리량", "단위": "㎥/ha" }, + { "이름": "임상", "고르기": ["침엽수림", "활엽수림", "해당 없음"] }, + { "이름": "개벌지", "고르기": ["700㎡ 이하(또는 벌채폭 30m)", "3000㎡ 미만(또는 벌채폭 60m)", "해당 없음"] }, + { "이름": "산불피해면적", "단위": "ha" }, + { "이름": "조림면적", "단위": "ha" } + ], + "중간": [ + { "이름": "소요", "식": "찾기(소요량:산림품셈:3-5 예정지정리, 작업내용=작업내용).소요인력" }, + { + "이름": "할증", + "식": "만약(정리량 >= 50, 찾기(소요량:산림품셈:3-5 미이용산림바이오매스 할증률, 정리량=정리량).할증률, 0) + 만약(임상 == '해당 없음', 0, 찾기(소요량:산림품셈:3-5 임상별 할인할증률, 임상=임상).할인할증률) + 만약(개벌지 == '해당 없음', 0, 찾기(소요량:산림품셈:3-5 개벌지 크기별 할증률, 구분=개벌지).할증률) + 찾기(소요량:산림품셈:3-5 산불피해지 할증률).할증률 * 산불피해면적 / 조림면적", + "출처": "산림품셈 3-5 주⑬⑬⑭⑮" + } + ], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "(소요 * 0.5) * (1 + 할증 / 100)", + "비목": "노무비", + "출처": "산림품셈 3-5 인력구분 「특별인부 50%」" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "(소요 * 0.5) * (1 + 할증 / 100)", + "비목": "노무비", + "출처": "산림품셈 3-5 인력구분 「보통인부 50%」" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 할인·할증은 합산해 품에 곱함(1-4-21 주③) · 임상 할인·할증은 수확벌채지만(주⑬) · 정리량 = 미이용 산림바이오매스(주⑬) · 산불피해 없으면 산불피해면적 0 · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법 · 이용가치 없는 불량목 벌채 · 운재로는 별도(주⑨)" + }, + { + "열쇠": "3-6 산물 임내정리", + "이름": "산물 임내정리", + "결과단위": "원/ha", + "출처": "산림품셈 3-6", + "소유": "공용", + "입력": [{ "이름": "정리산물", "단위": "㎥/ha" }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "정리산물 / 찾기(소요량:산림품셈:3-6 산물 임내정리, 정리산물=정리산물).소요인력", + "비목": "노무비", + "출처": "산림품셈 3-6 주⑤ 「임내정리량 ÷ 품」" + } + ], + "덧줄": [], + "끝수": null, + "비고": "정리산물 = ha당 임내정리량(지조 포함, 주④) · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) — 칸 이름 · 범위규칙 문법" + }, + { + "열쇠": "3-7 재해산물 수집", + "이름": "재해산물 수집", + "결과단위": "원/ha", + "출처": "산림품셈 3-7", + "소유": "공용", + "입력": [ + { "이름": "수집거리", "고르기": ["10m이하", "20m이하", "30m이하"] }, + { "이름": "수집량", "단위": "㎥/ha" }, + { "이름": "작업", "고르기": ["일반", "소나무재선충병방제"] }, + { "이름": "집재방향", "고르기": ["상향집재", "하향집재"] }, + { "이름": "경사", "고르기": ["급(30°초과)", "중(15~30°)", "완(15° 미만)"] } + ], + "중간": [ + { + "이름": "할증", + "식": "만약(작업 == '소나무재선충병방제' 그리고 집재방향 == '상향집재', 찾기(계수:산림품셈:1-4-14 집재방향, 구분='소나무재선충병 인력에 의한 원목 및 재해산물 수집', 집재방향='상향집재', 경사=경사).할증률, 0)", + "출처": "산림품셈 3-7 주② · 1-4-14" + } + ], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "(수집량 / 찾기(소요량:산림품셈:3-7 재해산물 수집, 수집거리=수집거리, 재해산물수집량=수집량).소요인력) * (1 + 할증 / 100)", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 소요인력 = 수집량 ÷ 품(3-6 주⑤와 같게) · 1-4-14 는 소나무재선충병방제만(주②) · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-8 장애물의 정도(조건 「장애물의 정도」 빈칸) — 칸 이름 · 범위규칙 문법" + }, + { + "열쇠": "3-8 드론 영상 촬영", + "이름": "드론 영상 촬영", + "결과단위": "원/ha", + "출처": "산림품셈 3-8", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "건설기계운전사", + "단위": "인", + "수량": "찾기(소요량:산림품셈:3-8 드론 영상 촬영, 종별='계').드론조종자", + "비목": "노무비", + "출처": "산림품셈 3-8 「드론조종자」" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "건설기계운전사", + "단위": "인", + "수량": "찾기(소요량:산림품셈:3-8 드론 영상 촬영, 종별='계').부조종자", + "비목": "노무비", + "출처": "산림품셈 3-8 「부조종자」" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:3-8 드론 영상 촬영, 종별='계').특별인부", + "비목": "노무비", + "출처": "산림품셈 3-8 「특별인부(신호수)」" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 건설기계조종원·운전기사 = 건설노임 건설기계운전사(1048) · 사업 전·후 2회 촬영 기준(주①) · 드론 장비 손료 원문 표에 없음" + } + ] +} diff --git a/resources/master_data/로직_산림품셈_04장.json b/resources/master_data/로직_산림품셈_04장.json new file mode 100644 index 00000000..968ece49 --- /dev/null +++ b/resources/master_data/로직_산림품셈_04장.json @@ -0,0 +1,195 @@ +{ + "그룹": "로직", + "원문": "산림품셈", + "판": "2026-01-01", + "줄": [ + { + "열쇠": "4-1-2 벌도ㆍ조재", + "이름": "하베스터 벌도ㆍ조재", + "결과단위": "원/㎥", + "출처": "산림품셈 4-1-2", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [{ "이름": "공정량", "식": "찾기(소요량:산림품셈:4-1-2 벌도ㆍ조재).공정량" }], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "건설기계운전사", + "단위": "인", + "수량": "1 / 공정량", + "비목": "노무비", + "출처": "산림품셈 4-1-2 「하베스터 오퍼레이터 1인」" + }, + { + "종류": "재료", + "요소": "재료:오피넷유가:경유:{지역}", + "이름": "경유(하베스터)", + "단위": "ℓ", + "수량": "찾기(소요량:산림품셈:2-1-2 경유, 기계명='하베스터(헤드부착형)').주연료 / 공정량", + "비목": "재료비", + "출처": "산림품셈 2-1-2" + } + ], + "덧줄": [ + { "이름": "잡품", "식": "재료비 * 찾기(소요량:산림품셈:2-1-2 경유, 기계명='하베스터(헤드부착형)').잡품 / 100", "비목": "재료비", "출처": "산림품셈 2-1-2 주④" }, + { + "이름": "기계손료", + "식": "(기계:산림품셈:2-2-3 하베스터(헤드부착형).손료계수 * 기계:산림품셈:2-2-3 하베스터(헤드부착형).장비가격 + 기계:산림품셈:2-2-3 0.6㎥급 무한궤도형 굴착기.손료계수 * 기계:산림품셈:2-2-3 0.6㎥급 무한궤도형 굴착기.장비가격) * 1000 / 공정량", + "비목": "경비", + "출처": "산림품셈 2-2-3" + } + ], + "끝수": null, + "비고": "해석: 건설기계조종원·운전기사 = 건설노임 건설기계운전사(1048) · 해석: 하베스터 = 헤드 + 0.6㎥급 굴착기(2-1-2 적용기준) 손료 · 1일 기준(2-2-3 주③)" + }, + { + "열쇠": "4-1-2 조재", + "이름": "하베스터 조재", + "결과단위": "원/㎥", + "출처": "산림품셈 4-1-2", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [{ "이름": "공정량", "식": "찾기(소요량:산림품셈:4-1-2 조재).공정량" }], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1048", + "이름": "건설기계운전사", + "단위": "인", + "수량": "1 / 공정량", + "비목": "노무비", + "출처": "산림품셈 4-1-2 「하베스터 오퍼레이터 1인」" + }, + { + "종류": "재료", + "요소": "재료:오피넷유가:경유:{지역}", + "이름": "경유(하베스터)", + "단위": "ℓ", + "수량": "찾기(소요량:산림품셈:2-1-2 경유, 기계명='하베스터(헤드부착형)').주연료 / 공정량", + "비목": "재료비", + "출처": "산림품셈 2-1-2" + } + ], + "덧줄": [ + { "이름": "잡품", "식": "재료비 * 찾기(소요량:산림품셈:2-1-2 경유, 기계명='하베스터(헤드부착형)').잡품 / 100", "비목": "재료비", "출처": "산림품셈 2-1-2 주④" }, + { + "이름": "기계손료", + "식": "(기계:산림품셈:2-2-3 하베스터(헤드부착형).손료계수 * 기계:산림품셈:2-2-3 하베스터(헤드부착형).장비가격 + 기계:산림품셈:2-2-3 0.6㎥급 무한궤도형 굴착기.손료계수 * 기계:산림품셈:2-2-3 0.6㎥급 무한궤도형 굴착기.장비가격) * 1000 / 공정량", + "비목": "경비", + "출처": "산림품셈 2-2-3" + } + ], + "끝수": null, + "비고": "해석: 건설기계조종원·운전기사 = 건설노임 건설기계운전사(1048) · 해석: 하베스터 = 헤드 + 0.6㎥급 굴착기(2-1-2 적용기준) 손료 · 1일 기준(2-2-3 주③)" + }, + { + "열쇠": "4-4 가지정리", + "이름": "가지정리", + "결과단위": "원/100㎡", + "출처": "산림품셈 4-4", + "소유": "공용", + "입력": [{ "이름": "구분", "고르기": ["1종", "2종"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:4-4 가지정리, 구분=구분).보통인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null + }, + { + "열쇠": "4-5 벌도 위험목 점검", + "이름": "벌도 위험목 점검", + "결과단위": "원/ha", + "출처": "산림품셈 4-5", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1037", "이름": "벌목부", "단위": "인", "수량": "찾기(소요량:산림품셈:4-5 벌도 위험목 점검).소요인력", "비목": "노무비" } + ], + "덧줄": [], + "끝수": null + }, + { + "열쇠": "4-6 벌목부 작업안전 보조", + "이름": "벌목부 작업안전 보조", + "결과단위": "원/일", + "출처": "산림품셈 4-6", + "소유": "공용", + "입력": [{ "이름": "벌목부", "단위": "인" }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "올림(벌목부 / 찾기(소요량:산림품셈:4-6 주②, 구분='안전 벌목 보조(보통인부) 추가 기준 벌목부 인원').값, 0) * 찾기(소요량:산림품셈:4-6 주②, 구분='기준 인원당 추가 보통인부').값", + "비목": "노무비", + "출처": "산림품셈 4-6 주② · 투입인원 산출" + } + ], + "덧줄": [], + "끝수": null, + "비고": "벌목부 = 1일 투입 벌목부 인원 · 4인당 1인, 넘으면 1인 더(주②)" + } + ] +} diff --git a/resources/master_data/로직_산림품셈_05장.json b/resources/master_data/로직_산림품셈_05장.json new file mode 100644 index 00000000..4bec8ae9 --- /dev/null +++ b/resources/master_data/로직_산림품셈_05장.json @@ -0,0 +1,982 @@ +{ + "그룹": "로직", + "원문": "산림품셈", + "판": "2026-01-01", + "줄": [ + { + "열쇠": "5-1-4 떼채취", + "이름": "떼채취", + "결과단위": "원/100㎡", + "출처": "산림품셈 5-1-4", + "소유": "공용", + "입력": [{ "이름": "구분", "고르기": ["줄떼", "평떼"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-1-4 떼채취, 구분=구분).보통인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "운반비 별도(주①) · 산복 절토면 자갈·초목 제거 별도(주②)" + }, + { + "열쇠": "5-3-1 나무식재", + "이름": "나무식재", + "결과단위": "원/1,000본", + "출처": "산림품셈 5-3-1", + "소유": "공용", + "입력": [ + { "이름": "구분", "고르기": ["소묘식재", "중묘식재", "대묘식재"] }, + { "이름": "보식", "고르기": ["해당 없음", "해당"] }, + { + "이름": "토양조건", + "고르기": ["돌 등 장애물 함량이 30% 이상이고,\n나무뿌리가 밀하게 분포할 경우", "돌 등 장애물 함량이 10~30%이고,\n나무뿌리가 보통정도로 분포할 경우", "식혈시 장애물이 거의 없음"] + } + ], + "중간": [ + { + "이름": "소요", + "식": "찾기(소요량:산림품셈:5-3-1 나무식재, 구분=구분).소요인력 + 만약(보식 == '해당', 찾기(소요량:산림품셈:5-3-1 인력 구성비·보식 가산, 구분='보식 가산(나무식재 품에)').값 * 10, 0)", + "출처": "산림품셈 5-3-1 주② 「0.05인/100본당」 × 10" + }, + { "이름": "할증", "식": "찾기(계수:산림품셈:1-4-10 토양상태, 토양조건=토양조건).할증률", "출처": "산림품셈 1-4-10" } + ], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "(소요 * 찾기(소요량:산림품셈:5-3-1 인력 구성비·보식 가산, 구분='인력구분 특별인부 비율').값 / 100) * (1 + 할증 / 100)", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "(소요 * 찾기(소요량:산림품셈:5-3-1 인력 구성비·보식 가산, 구분='인력구분 보통인부 비율').값 / 100) * (1 + 할증 / 100)", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "해석: 보식 가산은 인력 나누기 앞 소요인력에 더함 · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법 · 묘목 가격 별도(주④)" + }, + { + "열쇠": "5-4 파종조림", + "이름": "파종조림", + "결과단위": "원/ha", + "출처": "산림품셈 5-4", + "소유": "공용", + "입력": [ + { "이름": "내용", "고르기": ["40cm×40cm×5,000개", "80cm×80cm×5,000개", "5,000판×3립", "조파", "점파"] }, + { + "이름": "토양조건", + "고르기": ["돌 등 장애물 함량이 30% 이상이고,\n나무뿌리가 밀하게 분포할 경우", "돌 등 장애물 함량이 10~30%이고,\n나무뿌리가 보통정도로 분포할 경우", "식혈시 장애물이 거의 없음"] + } + ], + "중간": [{ "이름": "할증", "식": "찾기(계수:산림품셈:1-4-10 토양상태, 토양조건=토양조건).할증률", "출처": "산림품셈 1-4-10" }], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "(찾기(소요량:산림품셈:5-4 파종조림, 내용=내용).소요인력) * (1 + 할증 / 100)", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법 · 종자 재료 별도 · 예정지정리는 3-5(주③)" + }, + { + "열쇠": "5-6 움싹갱신", + "이름": "움싹갱신(맹아근주 정리)", + "결과단위": "원/ha", + "출처": "산림품셈 5-6", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-6 움싹갱신, 구분='맹아근주 정리작업').소요인력 * 찾기(소요량:산림품셈:5-6 인력 구성비, 구분='인력구분 특별인부 비율').값 / 100", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-6 움싹갱신, 구분='맹아근주 정리작업').소요인력 * 찾기(소요량:산림품셈:5-6 인력 구성비, 구분='인력구분 보통인부 비율').값 / 100", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "기준 900본/ha · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법" + }, + { + "열쇠": "5-7 생태보완조림", + "이름": "생태보완조림", + "결과단위": "원/ha", + "출처": "산림품셈 5-7", + "소유": "공용", + "입력": [ + { "이름": "구분", "고르기": ["움싹본수조절", "치수이식"] }, + { + "이름": "토양조건", + "고르기": ["돌 등 장애물 함량이 30% 이상이고,\n나무뿌리가 밀하게 분포할 경우", "돌 등 장애물 함량이 10~30%이고,\n나무뿌리가 보통정도로 분포할 경우", "식혈시 장애물이 거의 없음"] + } + ], + "중간": [{ "이름": "할증", "식": "찾기(계수:산림품셈:1-4-10 토양상태, 토양조건=토양조건).할증률", "출처": "산림품셈 1-4-10" }], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "(찾기(소요량:산림품셈:5-7 생태보완조림, 구분=구분).소요인력 * 찾기(소요량:산림품셈:5-7 인력 구성비 · 주①④, 구분='인력구분 특별인부 비율').값 / 100) * (1 + 할증 / 100)", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "(찾기(소요량:산림품셈:5-7 생태보완조림, 구분=구분).소요인력 * 찾기(소요량:산림품셈:5-7 인력 구성비 · 주①④, 구분='인력구분 보통인부 비율').값 / 100) * (1 + 할증 / 100)", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "움싹본수조절 그루터기 900본 · 치수이식 100본 기준 · 보완조림은 5-3-1 나무식재(보식 해당)로(주④) · 할인·할증 못 넣음 — 1-4-5 경사도(값 칸 「할인·할증률」) · 1-4-6 이동거리(조건 「작업장까지 이동거리」 빈칸 · 범위규칙이 글) — 칸 이름 · 범위규칙 문법" + }, + { + "열쇠": "5-8 큰나무 공익조림", + "이름": "큰나무 공익조림", + "결과단위": "원/본", + "출처": "산림품셈 5-8", + "소유": "공용", + "입력": [{ "이름": "지주목", "고르기": ["세움", "세우지 않음"] }], + "중간": [ + { + "이름": "소요", + "식": "찾기(소요량:산림품셈:5-8 큰나무 공익조림, 구분='큰나무 식재').소요인력 * (1 - 만약(지주목 == '세우지 않음', 찾기(소요량:산림품셈:5-8 인력 구성비 · 주③, 구분='지주목을 세우지 않을 경우 인력품 감').값, 0) / 100)", + "출처": "산림품셈 5-8 주③" + } + ], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "소요 * 찾기(소요량:산림품셈:5-8 인력 구성비 · 주③, 구분='인력구분 특별인부 비율').값 / 100", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "소요 * 찾기(소요량:산림품셈:5-8 인력 구성비 · 주③, 구분='인력구분 보통인부 비율').값 / 100", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "묘목 · 지주대 재료비 별도(주②)" + }, + { + "열쇠": "5-9 해안조림", + "이름": "해안조림", + "결과단위": "원/100본", + "출처": "산림품셈 5-9", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-9 해안조림, 구분='보통인부').식혈 + 찾기(소요량:산림품셈:5-9 해안조림, 구분='보통인부').식재", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "대묘 기준(주④) · 비료 · 객토 · 지주목 · 볏짚 별도" + }, + { + "열쇠": "5-10 사방조림", + "이름": "사방조림", + "결과단위": "원/ha", + "출처": "산림품셈 5-10", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-10 사방조림, 명칭='특별인부').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-10 사방조림, 명칭='보통인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "묘목 4,000본 · 요소 · 인산 재료 요소 없음(요소 · 인산 수량 원문에 없음) · 운반비 별도(조견표)" + }, + { + "열쇠": "5-11 사초심기", + "이름": "사초심기", + "결과단위": "원/100본", + "출처": "산림품셈 5-11", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-11 사초심기, 구분='보통인부').사초굴취 + 찾기(소요량:산림품셈:5-11 사초심기, 구분='보통인부').사초식재", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "사초 운반 별도(주⑥)" + }, + { + "열쇠": "5-12 떼붙임(재배잔디)", + "이름": "떼붙임(재배잔디)", + "결과단위": "원/100㎡", + "출처": "산림품셈 5-12", + "소유": "공용", + "입력": [{ "이름": "품", "단위": "인/100㎡" }, { "이름": "비탈구배", "고르기": ["해당 없음", "평균 비탈구배 20˚~45˚ 이하"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "품 * (1 + 만약(비탈구배 == '해당 없음', 0, 찾기(소요량:산림품셈:5-12 주③, 구분='비탈구배 해당 시 품 할증').값) / 100)", + "비목": "노무비", + "출처": "산림품셈 5-12 주③" + } + ], + "덧줄": [], + "끝수": null, + "비고": "원문 품이 범위(줄떼 4.0∼5.0 · 평떼 5.0∼7.0 인/100㎡) — 설계자 입력 · 떼 값 · 운반 별도(주⑤)" + }, + { + "열쇠": "5-13 떼심기", + "이름": "떼심기", + "결과단위": "원/100㎡", + "출처": "산림품셈 5-13", + "소유": "공용", + "입력": [{ "이름": "구분", "고르기": ["줄떼심기", "띠떼심기"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-13 떼심기, 구분=구분).보통인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "골파기품 · 떼 값 별도(주④)" + }, + { + "열쇠": "5-14 새심기", + "이름": "새심기", + "결과단위": "원/㎡", + "출처": "산림품셈 5-14", + "소유": "공용", + "입력": [], + "중간": [{ "이름": "보통", "식": "찾기(소요량:산림품셈:5-14 새심기, 공정별='보통인부 (채집)').수량 + 찾기(소요량:산림품셈:5-14 새심기, 공정별='보통인부 (심기)').수량" }], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "보통", "비목": "노무비" }, + { + "종류": "인력", + "요소": "인력:건설노임:1001", + "이름": "작업반장", + "단위": "인", + "수량": "보통 / 찾기(소요량:산림품셈:5-14 비고·주②③⑥, 구분='작업반장 배치 기준 보통인부').값 * 찾기(소요량:산림품셈:5-14 비고·주②③⑥, 구분='기준 인원당 작업반장').값", + "비목": "노무비", + "출처": "산림품셈 5-14 주⑥" + } + ], + "덧줄": [], + "끝수": null, + "비고": "요소 · 인산 재료 요소 없음 · 새운반 조견표 별도(주③)" + }, + { + "열쇠": "5-15 바자얽기", + "이름": "바자얽기", + "결과단위": "원/10m", + "출처": "산림품셈 5-15", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-15 바자얽기, 명칭='보통인부').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-15 바자얽기, 명칭='특별인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "말뚝 20개 재료 요소 없음 · 바자용 나뭇가지 재료 없음" + }, + { + "열쇠": "5-18 씨뿌리기(줄)", + "이름": "씨뿌리기(줄)", + "결과단위": "원/m", + "출처": "산림품셈 5-18", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-18 씨뿌리기(줄), 공정별='특별인부').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-18 씨뿌리기(줄), 공정별='보통인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "종자 · 비료 · 비토 · 객토 재료 요소 없음 · 비료 · 비토 운반 조견표 별도" + }, + { + "열쇠": "5-20 표토관리", + "이름": "표토관리", + "결과단위": "원/㎡", + "출처": "산림품셈 5-20", + "소유": "공용", + "입력": [ + { "이름": "공정", "고르기": ["표토채취", "표토붙이기"] }, + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-20 표토관리, 공정=공정, 구분='보통인부').공정량", + "비목": "노무비" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0070', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기(무한궤도) 0.7㎥", + "단위": "시간", + "수량": "찾기(소요량:산림품셈:5-20 표토관리, 공정=공정, 구분='굴착기(무한궤도, 0.7㎥)').공정량" + } + ], + "덧줄": [], + "끝수": null + }, + { + "열쇠": "5-21 표토이식", + "이름": "표토이식", + "결과단위": "원/㎡", + "출처": "산림품셈 5-21", + "소유": "공용", + "입력": [{ "이름": "구분", "고르기": ["채취", "운반", "붙이기"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-21 표토이식, 구분=구분).보통인부", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "표토 두께 0.2m · 운반 30m 기준(주③④) · 복토 · 면고르기 · 잡관목 제거 별도(주⑤)" + }, + { + "열쇠": "5-22-2 평떼 붙임", + "이름": "평떼 붙임", + "결과단위": "원/㎡", + "출처": "산림품셈 5-22-2", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1038", + "이름": "조경공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-22-2 평떼 붙임, 구분='조경공').적용", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-22-2 평떼 붙임, 구분='보통인부').적용", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "떼 재료 요소 없음" + }, + { + "열쇠": "5-23-2 떼붙임", + "이름": "줄떼 떼붙임", + "결과단위": "원/㎡", + "출처": "산림품셈 5-23-2", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1038", + "이름": "조경공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-23-2 떼붙임, 구분='조경공').적용", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-23-2 떼붙임, 구분='보통인부').적용", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "떼 재료 요소 없음" + }, + { + "열쇠": "5-22-3 떼꽂이 제작 및 설치", + "이름": "평떼 떼꽂이 제작 및 설치", + "결과단위": "원/㎡", + "출처": "산림품셈 5-22-3", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-22-3 떼꽂이 제작 및 설치, 구분='보통인부').적용", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "평떼 품(0.06인)에 떼꽂이가 들어 있으면 비교 뒤 적용(5-22-3 주)" + }, + { + "열쇠": "5-23-3 떼꽂이 제작 및 설치", + "이름": "줄떼 떼꽂이 제작 및 설치", + "결과단위": "원/㎡", + "출처": "산림품셈 5-23-3", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-23-3 떼꽂이 제작 및 설치, 구분='보통인부').적용", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null + }, + { + "열쇠": "5-22-4 평떼 시비", + "이름": "평떼 시비", + "결과단위": "원/일", + "출처": "산림품셈 5-22-4", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1038", + "이름": "조경공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-22-4 평떼 시비, 구분='조경공').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-22-4 평떼 시비, 구분='보통인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "트럭 2.5ton 1대 — 화물트럭 기계 요소 없음 · 시공량 칸 「시공량(㎡)」 이름 때문에 ㎡당으로 못 바꿈 · 비료 별도(주③)" + }, + { + "열쇠": "5-24-1 뿜어붙이기-기계/일반", + "이름": "씨앗뿜어붙이기(일반)", + "결과단위": "원/㎡", + "출처": "산림품셈 5-24-1", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1038", + "이름": "조경공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-24-1 뿜어붙이기-기계/일반, 구분='인력', 명칭='조경공').적용수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-24-1 뿜어붙이기-기계/일반, 구분='인력', 명칭='보통인부').적용수량", + "비목": "노무비" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 기계 시간당 경비, 기계='7204-0055', 지역=지역)", + "이름": "물탱크(살수차) 5,500ℓ", + "단위": "시간", + "수량": "찾기(소요량:산림품셈:5-24-1 뿜어붙이기-기계/일반, 구분='장비', 명칭='물탱크').적용수량" + } + ], + "덧줄": [], + "끝수": null, + "비고": "종자살포기 · 트럭 4.5ton 기계 요소 없음 · 종자 · 비료 · 피복제 · 침식안정제 · 색소 재료 요소 없음" + }, + { + "열쇠": "5-24-2 뿜어붙이기-기계/마사토", + "이름": "씨앗뿜어붙이기(마사토)", + "결과단위": "원/㎡", + "출처": "산림품셈 5-24-2", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + } + ], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1038", + "이름": "조경공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-24-2 뿜어붙이기-기계/마사토, 구분='인력', 명칭='조경공').적용수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-24-2 뿜어붙이기-기계/마사토, 구분='인력', 명칭='보통인부').적용수량", + "비목": "노무비" + }, + { + "종류": "로직", + "요소": "로직(건설품셈:8 기계 시간당 경비, 기계='7204-0055', 지역=지역)", + "이름": "물탱크(살수차) 5,500ℓ", + "단위": "시간", + "수량": "찾기(소요량:산림품셈:5-24-2 뿜어붙이기-기계/마사토, 구분='장비', 명칭='물탱크').적용수량" + } + ], + "덧줄": [], + "끝수": null, + "비고": "종자살포기 · 트럭 4.5ton 기계 요소 없음 · 종자 · 비료 · 피복제 · 침식안정제 · 색소 재료 요소 없음" + }, + { + "열쇠": "5-25 거적덮기", + "이름": "거적덮기", + "결과단위": "원/㎡", + "출처": "산림품셈 5-25", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1038", + "이름": "조경공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-25 거적덮기, 구분='인력', 명칭='조경공').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-25 거적덮기, 구분='인력', 명칭='보통인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "거적 1.1㎡ 재료 요소 없음 · 부속자재 별도(주①)" + }, + { + "열쇠": "5-27 식재면 관리", + "이름": "식재면 관리", + "결과단위": "원/10㎡", + "출처": "산림품셈 5-27", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1038", + "이름": "조경공", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-27 식재면 관리, 구분='조경공').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-27 식재면 관리, 구분='보통인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null + }, + { + "열쇠": "5-28-1 짚망", + "이름": "짚망", + "결과단위": "원/100㎡", + "출처": "산림품셈 5-28-1", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1003", + "이름": "특별인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-28-1 짚망, 구분='특별인부').수량", + "비목": "노무비" + }, + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-28-1 짚망, 구분='보통인부').수량", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null, + "비고": "재료 설계수량 별도(주②)" + }, + { + "열쇠": "5-29 복사이식 작업량", + "이름": "복사이식 굴착기 시간당 작업량(Q1)", + "결과단위": "㎥/시간", + "출처": "산림품셈 5-29 주④", + "소유": "공용", + "입력": [], + "중간": [ + { "이름": "q", "식": "찾기(소요량:산림품셈:5-29 주③④, 구분='적용 굴착기(무한궤도형)').값", "출처": "산림품셈 5-29 주③ 1.0㎥" }, + { "이름": "K", "식": "찾기(소요량:산림품셈:5-29 복사이식, 구분='K(버킷계수)').적용" }, + { "이름": "f", "식": "찾기(소요량:산림품셈:5-29 복사이식, 구분='f(체적환산계수)').적용" }, + { "이름": "E", "식": "찾기(소요량:산림품셈:5-29 복사이식, 구분='E(작업효율)').적용" }, + { "이름": "Cm", "식": "찾기(소요량:산림품셈:5-29 복사이식, 구분='Cm(1회 사이클시간)').적용" } + ], + "결과": { "식": "반올림(3600 * q * K * f * E / Cm, 3)", "출처": "건설품셈 공통 8-1-4 주①" }, + "끝수": "소수 3자리 사사오입(건설품셈 공통 8-1-4 주①)", + "비고": "해석: q = 주③ 굴착기 용량 1.0㎥ · 주⑤ Q=Q1×T 는 단위가 안 맞아(㎥/시간 × m) 넣지 않음" + }, + { + "열쇠": "5-29 복사이식", + "이름": "복사이식(굴착기 1.0㎥)", + "결과단위": "원/㎥", + "출처": "산림품셈 5-29", + "소유": "공용", + "입력": [ + { + "이름": "지역", + "고르기": [ + "전국평균", + "전국", + "서울", + "경기", + "강원", + "충북", + "충남", + "전북", + "경북", + "경남", + "부산", + "제주", + "대구", + "인천", + "대전", + "울산", + "세종", + "전남광주" + ], + "출처": "건설품셈 공통 8-1-7 5" + }, + { "이름": "보정작업", "고르기": ["해당 없음", "암석작업(연암・보통암・경암)", "전석섞인토사"], "출처": "건설품셈 공통 8-1-7 1" } + ], + "중간": [{ "이름": "작업량", "식": "로직(산림품셈:5-29 복사이식 작업량)" }], + "호표": [ + { + "종류": "로직", + "요소": "로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0100', 지역=지역, 보정작업=보정작업)", + "이름": "굴착기(무한궤도) 1.0㎥", + "단위": "시간", + "수량": "1 / 작업량" + } + ], + "덧줄": [], + "끝수": null, + "비고": "Q1 기준(주④) · 주⑤ 표토두께 T 반영은 판정 필요 · 건설품셈 공통 8-2-3 계수 필요(0.2㎥ · 0.4㎥ 굴착기를 쓸 때)" + }, + { + "열쇠": "5-30 표시봉설치", + "이름": "표시봉 설치", + "결과단위": "원/1,000본", + "출처": "산림품셈 5-30", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "찾기(소요량:산림품셈:5-30 표시봉설치).소요인력", "비목": "노무비" } + ], + "덧줄": [], + "끝수": null, + "비고": "표시봉 가격 시장가격(주③)" + }, + { + "열쇠": "5-31 지주목설치", + "이름": "지주목 설치", + "결과단위": "원/1,000본", + "출처": "산림품셈 5-31", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1002", "이름": "보통인부", "단위": "인", "수량": "찾기(소요량:산림품셈:5-31 지주목설치).소요인력", "비목": "노무비" } + ], + "덧줄": [], + "끝수": null, + "비고": "대묘식재만 · 1본당 1개(주②) · 지주목 재료 별도" + }, + { + "열쇠": "5-32 대절작업", + "이름": "대절작업", + "결과단위": "원/1,000본", + "출처": "산림품셈 5-32", + "소유": "공용", + "입력": [], + "중간": [], + "호표": [ + { "종류": "인력", "요소": "인력:건설노임:1003", "이름": "특별인부", "단위": "인", "수량": "찾기(소요량:산림품셈:5-32 대절작업).소요인력", "비목": "노무비" } + ], + "덧줄": [], + "끝수": null + }, + { + "열쇠": "5-33 묘목 가식작업", + "이름": "묘목 가식작업", + "결과단위": "원/1,000본", + "출처": "산림품셈 5-33", + "소유": "공용", + "입력": [{ "이름": "구분", "고르기": ["소묘", "중묘", "대묘"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-33 묘목 가식작업, 구분=구분).소요인력", + "비목": "노무비" + } + ], + "덧줄": [], + "끝수": null + }, + { + "열쇠": "5-34 묘목 소운반", + "이름": "묘목 소운반", + "결과단위": "원/1,000본", + "출처": "산림품셈 5-34", + "소유": "공용", + "입력": [{ "이름": "구분", "고르기": ["소묘", "중묘", "대묘"] }, { "이름": "용기묘", "고르기": ["해당 없음", "해당"] }], + "중간": [], + "호표": [ + { + "종류": "인력", + "요소": "인력:건설노임:1002", + "이름": "보통인부", + "단위": "인", + "수량": "찾기(소요량:산림품셈:5-34 묘목 소운반, 구분=구분).소요인력 * 만약(구분 == '대묘' 그리고 용기묘 == '해당', 찾기(소요량:산림품셈:5-34 주②, 구분='대묘 중 용기묘 대묘 본 품 계상').값 / 100, 1)", + "비목": "노무비", + "출처": "산림품셈 5-34 주②" + } + ], + "덧줄": [], + "끝수": null, + "비고": "대운반비는 견적 · 적재량 자료로 별도(주③)" + } + ] +} diff --git a/resources/tester/test_masterdata_check.py b/resources/tester/test_masterdata_check.py index 9c102860..09070097 100644 --- a/resources/tester/test_masterdata_check.py +++ b/resources/tester/test_masterdata_check.py @@ -16,6 +16,9 @@ SAMPLES = [ "계수_산림품셈_9장.json", "기계_건설품셈.json", "로직_건설품셈_공통8장.json", + "로직_산림품셈_03장.json", + "로직_산림품셈_04장.json", + "로직_산림품셈_05장.json", "로직_산림품셈_10장.json", "로직_산림품셈_11장.json", "로직_산림품셈_13장.json", @@ -141,6 +144,29 @@ def test_중기운반_트레일러_횟수(whole): assert got["줄"][0]["수량"].quantize(Decimal("0.0001")) == Decimal("1.3041") +def test_예정지정리_할증_합산(whole): + """3-5 — 바이오매스 10 + 침엽수림 10 + 개벌지 10 + 산불 5×2/10 = 31% · 2.4×50%×1.31.""" + given = { + "작업내용": "보완사업지 정리", + "정리량": 120, + "임상": "침엽수림", + "개벌지": "700㎡ 이하(또는 벌채폭 30m)", + "산불피해면적": 2, + "조림면적": 10, + } + got = mf.run(whole, "산림품셈:3-5 예정지정리", given) + assert [line["수량"] for line in got["줄"]] == [Decimal("1.572"), Decimal("1.572")] + + +def test_작업안전_보조_올림(whole): + """4-6 — 벌목부 4인당 보통인부 1인 · 5인이면 2인.""" + qty = [ + mf.run(whole, "산림품셈:4-6 벌목부 작업안전 보조", {"벌목부": n})["줄"][0]["수량"] + for n in (3, 4, 5, 8) + ] + assert qty == [1, 1, 2, 2] + + def test_범위_입력은_막음(whole): with pytest.raises(mf.FormulaError): mf.run( From a09fbdfd7826bde72e0e5940d94ea13757dbdee1 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 19 Sep 2026 17:16:42 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat(master=5Fdata):=20=EA=B1=B4=EC=84=A4?= =?UTF-8?q?=20=ED=86=A0=EB=AA=A9=201=EC=9E=A5=202=EC=9E=A5=206=EC=9E=A5=20?= =?UTF-8?q?=EC=86=8C=EC=9A=94=EB=9F=89=20=EC=98=AE=EA=B9=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 소요량_건설품셈_토목1장(116표) · 토목2장(9표) · 토목6장(73표) — md 표 73 · 8 · 50 개 모두 + 글 속 계수 표 - 변환 스크립트 build_소요량_건설품셈_토목.py + _토목_읽기 · _토목_표 · _토목_손 · _토목_계수 - check_master 틀 · 본문 · 로직 0건 Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ --- resources/master_data/scripts/_토목_계수.py | 99 + resources/master_data/scripts/_토목_손.py | 204 ++ resources/master_data/scripts/_토목_읽기.py | 194 ++ resources/master_data/scripts/_토목_표.py | 322 +++ .../scripts/build_소요량_건설품셈_토목.py | 165 ++ .../master_data/소요량_건설품셈_토목1장.json | 1911 +++++++++++++++++ .../master_data/소요량_건설품셈_토목2장.json | 155 ++ .../master_data/소요량_건설품셈_토목6장.json | 1778 +++++++++++++++ 8 files changed, 4828 insertions(+) create mode 100644 resources/master_data/scripts/_토목_계수.py create mode 100644 resources/master_data/scripts/_토목_손.py create mode 100644 resources/master_data/scripts/_토목_읽기.py create mode 100644 resources/master_data/scripts/_토목_표.py create mode 100644 resources/master_data/scripts/build_소요량_건설품셈_토목.py create mode 100644 resources/master_data/소요량_건설품셈_토목1장.json create mode 100644 resources/master_data/소요량_건설품셈_토목2장.json create mode 100644 resources/master_data/소요량_건설품셈_토목6장.json diff --git a/resources/master_data/scripts/_토목_계수.py b/resources/master_data/scripts/_토목_계수.py new file mode 100644 index 00000000..18c9965f --- /dev/null +++ b/resources/master_data/scripts/_토목_계수.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +"""글 속 계산용 수 → 그룹 계수 표 (build_소요량_건설품셈_토목.py 가 씀). + +표에 붙은 주(①…)와 비고 글에서 정규식으로 수를 읽음(손으로 적지 않음). 주 한 줄마다 계수 표 하나. +""" + +import re + +from _md표_읽기 import R +from _토목_표 import conds_out + +PCT = r"([\d.]+)%" + + +def clean(line): + return re.sub(r"^(비고\s*-?\s*|-\s*|[①-⑳]\s*)", "", line).strip() + + +def rows_of(line): + """주 한 줄 → 계수 줄들 [(구분, 값, 단위, 딸린 칸)].""" + s = clean(line) + out = [] + m = re.search(r"^(.+?)(?:는|은) (인력품|주재료비|재료비)의 " + PCT, s) + if m: + out.append((m.group(1), R(m.group(3)), "%", {"기준": m.group(2)})) + m2 = re.search(r"(블록 정밀절단\(전동절단기\)에 의한 시공이 아닌 경우) " + PCT, s) + if m2: + out.append((f"{m.group(1)} — {m2.group(1)}", R(m2.group(2)), "%", {"기준": m.group(2)})) + return out + m = re.search( + r"(시공량|본 품|크레인\(시간\))(?:의|을) " + PCT + r"(?:를|까지| 범위 내에서) ?(감|가산)", s + ) + if m: + out.append((s, R(m.group(2)), "%", {"기준": m.group(1), "가감": m.group(3)})) + m = re.search(r"(특별인부) (\d+)인을 감", s) + if m: + out.append((s, R(m.group(2)), "인", {"기준": m.group(1), "가감": "감"})) + m = re.search(r"절단품은 본 품의 " + PCT + r", 선단가공\(Beveling\) 품은 본 품의 " + PCT, s) + if m: + out.append(("금긋기 및 절단품", R(m.group(1)), "%", {"기준": "본 품"})) + out.append(("선단가공(Beveling) 품", R(m.group(2)), "%", {"기준": "본 품"})) + m = re.search(r"두께 ([\d.]+)㎝일 때 ([\d,]+)㎡당 살수량은 일반적으로 ([\d.]+)ton", s) + if m: + out.append(("살수량 기준 두께", R(m.group(1)), "㎝", {})) + out.append(("살수량 기준 면적", R(m.group(2)), "㎡", {})) + out.append(("살수량", R(m.group(3)), "ton", {})) + m = re.search(r"보통인부 (\d+)인기준 두께 (\d+)㎝시 ([\d,]+)㎡, 두께 (\d+)㎝시 ([\d,]+)㎡", s) + if m: + out.append(("모래 부설 일당시공량 기준 인원", R(m.group(1)), "인", {"기준": "보통인부"})) + out.append((f"모래 부설 일당시공량 두께 {m.group(2)}㎝", R(m.group(3)), "㎡", {})) + out.append((f"모래 부설 일당시공량 두께 {m.group(4)}㎝", R(m.group(5)), "㎡", {})) + m = re.search(r"굴착기\(규격 ([\d.]+)㎥, 사용시간 ([\d.]+)hr\)", s) + if m: + out.append(("크레인 대체 굴착기 규격", R(m.group(1)), "㎥", {})) + out.append(("크레인 대체 굴착기 사용시간", R(m.group(2)), "hr", {})) + m = re.search(r"호칭압력 ([\d.]+)(㎏/㎠)를 기준", s) + if m: + out.append(("호칭압력 기준", R(m.group(1)), m.group(2), {})) + m = re.search(r"강관장 ([\d.]+)m를 기준", s) + if m: + out.append(("강관장 기준", R(m.group(1)), "m", {})) + return out + + +def lift(chdir, text, out): + src_tabs = list(out.tables) + for t in src_tabs: + ident = t["열쇠"].split()[0] + tags = {} + for line in t["주"]: + rs = rows_of(line) + if not rs: + continue + tag = "비고" if line.startswith("비고") else "주" + re.match(r"[①-⑳]", line).group(0) + tags.setdefault(tag, []).extend(rs) + for tag, rs in tags.items(): + cols, rows = {"값": "구분 따름", "단위": "글"}, [] + for g, v, u, extra in rs: + rows.append({"구분": g, "값": v, "단위": u, **extra}) + for k in extra: + cols.setdefault(k, "글") + label = f"{t['이름']} 계수 {tag}" + key = f"{ident} {label}" + if key in out.keys: + continue + out.keys.add(key) + out.tables.append( + { + "열쇠": key, + "이름": label, + "기준": "", + "출처": f"{t['출처']} {tag}", + "그룹": "계수", + "조건": conds_out(["구분"], rows), + "값칸": cols, + "줄": rows, + "주": [], + } + ) diff --git a/resources/master_data/scripts/_토목_손.py b/resources/master_data/scripts/_토목_손.py new file mode 100644 index 00000000..2c71ba6d --- /dev/null +++ b/resources/master_data/scripts/_토목_손.py @@ -0,0 +1,204 @@ +# -*- coding: utf-8 -*- +"""토목 표 손 지정 — 칸 안에 줄이 여럿(
)이거나 줄마다 머리가 달라 자동으로 못 읽는 표. (build_소요량_건설품셈_토목.py 가 씀)""" + +import re + +from _md표_읽기 import N, R, join +from _토목_읽기 import is_num, nz +from _토목_표 import bigo_items, conds_out, crew, jn, matrix, members, rate, tpose + +SPECIAL = {"1": {}, "2": {}, "6": {}} + + +def finish(rows, cols, bigo=(), label=None): + names = [] + for r in rows: + for k in r: + if k not in names and k not in cols: + names.append(k) + return conds_out(names, rows), cols, rows, list(bigo), label + + +def sp(ch, key): + def deco(fn): + SPECIAL[ch][key] = fn + return fn + + return deco + + +def lines(x): + return [p.strip() for p in x.split("
")] + + +# ── 제1장 ────────────────────────────────────────────────────── +sp("1", "1-8-9#4")(lambda t: (*tpose(t, "트럭", "작업"), None)) +sp("1", "1-8-2#2")(lambda t: (*tpose(t, "형식", "크레인"), None)) +sp("1", "1-8-14#2")(lambda t: (*rate(t), None)) + + +@sp("1", "1-9-1#1") +def _(t): + R0, rows, cols = t.rows, [], {"시공량": "개소"} + heads = R0[2][5:8] + for lo, hi in ((3, 6), (6, 9)): + blk = R0[lo:hi] + c_, v = members(blk, 2, 1, 3) + cols.update(c_) + hts = lines(blk[0][4]) + for j, hd in enumerate(heads): + vs = lines(blk[0][5 + j]) + for i, hv in enumerate(hts): + if nz(vs[i]): + rows.append({"지주높이": hv, "지주 간격": hd, "시공량": N(vs[i]), **v}) + return finish(rows, cols) + + +@sp("1", "1-9-1#2") +def _(t): + R0, rows, cols = t.rows, [], {"시공량": "개"} + heads = [jn(x) for x in R0[2][5:9]] + for lo, hi, hrows in ((3, 6, [3]), (6, 10, [6, 7, 8, 9])): + c_, v = members(R0[lo:hi], 2, 1, 3) + cols.update(c_) + for r in hrows: + for j, hd in enumerate(heads): + if nz(R0[r][5 + j]): + rows.append( + { + "지주높이": jn(R0[r][4]), + "방음벽 개당 면적": hd, + "시공량": N(R0[r][5 + j]), + **v, + } + ) + return finish(rows, cols) + + +@sp("1", "1-9-2#0") +def _(t): + R0, rows, cols = t.rows, [], {"시공량": "m"} + for lo, hi in ((2, 5), (5, 8)): + blk = R0[lo:hi] + c_, v = members(blk, 3, 2, 4, 1) + cols.update(c_) + sizes = lines(blk[0][5]) + for j, kind in enumerate((R0[1][6], R0[1][7])): + vs = lines(blk[0][6 + j]) + for i, sz in enumerate(sizes): + rows.append( + { + "형식": jn(blk[0][0]), + "규격(아래폭+높이㎜)": sz, + "구간": kind, + "시공량": N(vs[i]), + **v, + } + ) + return finish(rows, cols) + + +@sp("1", "1-9-4#2") +def _(t): + R0, rows, notes = t.rows, [], [] + for row in R0[1:]: + if join(row[0]) == "산출기준": + notes = ["산출기준 " + x[len("비고 ") :] for x in bigo_items(row[1])] + continue + d = {"구분": jn(row[0]), "단위": row[1], "수량": N(row[2])} + if nz(row[3]): + d["비고"] = jn(row[3]) + rows.append(d) + return conds_out(["구분"], rows), {"수량": "단위 칸 따름", "비고": "글"}, rows, notes, None + + +# ── 제6장 ────────────────────────────────────────────────────── +@sp("6", "6-1-1#0") +def _(t): + rows = [] + for row in t.rows[2:]: + d = {"구분": jn(row[0]), "내용": jn(row[1])} + for nm, c in (("요율 품", 2), ("요율 시공량", 3)): + if nz(row[c]): + d[nm] = R(row[c].rstrip("%")) + rows.append(d) + return ( + conds_out(["구분"], rows), + {"내용": "글", "요율 품": "%", "요율 시공량": "%"}, + rows, + [], + None, + ) + + +def multi(t): + """칸 안에 관경 · 시공량이 줄줄이 든 [구분 단위 수량 관경 시공량] 표.""" + R0, rows, cols, bigo = t.rows, [], {}, [] + unit = re.search(r"\((.*)\)", join(R0[0][4])).group(1) + cols["시공량"] = unit + blocks = [] + for row in R0[1:]: + if join(row[0]) == "비고": + bigo += bigo_items(row[1]) + elif nz(row[3]): + blocks.append([row]) + else: + blocks[-1].append(row) + for blk in blocks: + c_, v = members(blk, 1, None, 2) + cols.update(c_) + ds, vs = lines(blk[0][3]), lines(blk[0][4]) + assert len(ds) == len(vs), (t.ident, ds, vs) + for d, x in zip(ds, vs): + rows.append({"관경(㎜)": d, "시공량": N(x), **v}) + return conds_out(["관경(㎜)"], rows), cols, rows, bigo, None + + +for k in ( + "6-2-1#0", + "6-2-1#1", + "6-2-2#0", + "6-2-2#1", + "6-3-1#0", + "6-3-1#1", + "6-4-1#0", + "6-4-2#0", + "6-5-1#0", + "6-5-2#0", + "6-5-3#0", + "6-5-4#0", + "6-6-1#0", + "6-6-2#0", +): + SPECIAL["6"][k] = multi +sp("6", "6-2-2#2")(lambda t: (*rate(t), None)) +sp("6", "6-5-4#1")(lambda t: (*rate(t), None)) +sp("6", "6-8-5#2")(lambda t: (*rate(t), None)) +sp("6", "6-8-4#2")(lambda t: (*matrix(t, "본관", "지관", "중량", "㎏", 2), None)) +sp("6", "6-7-5#0")(lambda t: (*crew(t, prefix_group=True), None)) + + +@sp("6", "6-3-2#0") +def _(t): + R0, rows, cols = t.rows, [], {"시공량": "개소", "용접공": "인"} + heads = [ + (jn(R0[0][4]), jn(R0[1][4]), jn(R0[2][4])), + (None, jn(R0[1][4]), jn(R0[2][5])), + (None, jn(R0[1][6]), jn(R0[2][6])), + ] + combos = [(4, "A종", "겹치기 용접"), (5, "A종", "베벨엔드용접"), (6, "B종", "겹치기 용접")] + for r in R0[3:]: + if nz(r[0]): + qty = N(r[2]) + for c, a, b in combos: + if nz(r[c]): + rows.append( + { + "관경(㎜)": jn(r[3]), + "종별": a, + "용접방법": b, + "시공량": N(r[c]), + "용접공": qty, + } + ) + return conds_out(["관경(㎜)", "종별", "용접방법"], rows), cols, rows, [], None diff --git a/resources/master_data/scripts/_토목_읽기.py b/resources/master_data/scripts/_토목_읽기.py new file mode 100644 index 00000000..594cb8ea --- /dev/null +++ b/resources/master_data/scripts/_토목_읽기.py @@ -0,0 +1,194 @@ +# -*- coding: utf-8 -*- +"""건설품셈 토목 제1 · 2 · 6장 md 읽기 · 표 만들기 · 쓰기 도구 (build_소요량_건설품셈_토목.py 가 씀). + +값은 md 에서 읽음(손으로 적지 않음). 표 모양 다섯 갈래: 인력·장비 편성표(crew) · 줄이 관경인 납작표(flat) · +요율 · 글 표 · 손 지정. +""" + +import json +import re +from pathlib import Path + +from _md표_읽기 import N, R, Raw, join, js, unesc + +ROOT = Path(__file__).resolve().parents[3] +BASE = ROOT / "resources/knowledge/original/원가계산/건설공사_표준품셈/본문/02_토목부문" +DIV = "건설품셈 토목 " +NUM = r"\d[\d,]*(?:\.\d+)?" +UNITS = "인 hr 시간 ㎜ ㎡ ㎥ m % 대 회 식 일 본 개소 개 ㎏ kg ton 톤 m/일".split() +ROLE = re.compile(r"^(수량|시공량|소요일수)") + + +class Tab: + def __init__(self, ident, title, mok, base, rows, k): + self.ident, self.title, self.mok, self.base, self.rows, self.k = ( + ident, + title, + mok, + base, + rows, + k, + ) + self.notes: list[str] = [] + self.pre = "" # 표 앞 글줄(별표 제목 등) + + +def cells(line): + return [c.strip() for c in line.strip().strip("|").split("|")] + + +def title_of(s): + return re.sub(r"\s*\((?:['‘’]\d\d[^)]*)\)\s*$", "", s).strip() + + +def read_chapter(chdir): + """장 폴더의 항 · 표 · 주 를 차례로 읽음 → (표 목록, 항 본문 줄 사전).""" + tabs, text, order = [], {}, [] + for p in sorted((next(BASE.glob(chdir + "*"))).glob("*.md")): + L = p.read_text(encoding="utf-8").split("\n") + at = [i for i, x in enumerate(L) if x.strip() == "---"] + L = L[at[1] + 1 :] + ident = title = mok = base = pre = "" + k = 0 + in_note = False + i = 0 + while i < len(L): + ln = L[i].rstrip() + m = re.match(r"^(#{2,4})\s+(.*)$", ln) + if m: + in_note = False + d = len(m.group(1)) + if d == 3: + mm = re.match(r"^(\d+-\d+-\d+)\s+(.*)$", m.group(2)) + ident, title, mok, k = mm.group(1), title_of(mm.group(2)), "", 0 + order.append(ident) + text[ident] = [] + elif d == 4: + mk = re.match(r"^(\d+)\.\s*(.*)$", m.group(2)) + mok = title_of(mk.group(2)) if mk else title_of(m.group(2)) + i += 1 + continue + if not ident: + i += 1 + continue + text[ident].append(ln) + if ln.startswith("|"): + j = i + rows = [] + while j < len(L) and L[j].startswith("|"): + c = cells(L[j]) + if not all(re.fullmatch(r":?-+:?", x) for x in c): + rows.append(c) + j += 1 + b = base if re.fullmatch(r"\(.*당\)|\(m/일\)|\(.*\)", base) else "" + tabs.append(Tab(ident, title, mok, base[1:-1] if b else "", rows, k)) + tabs[-1].pre = pre + k += 1 + base = pre = "" + in_note = False + i = j + continue + s = ln.strip() + if s == "[주]": + in_note = True + elif in_note and s and not s.startswith(("