feat(master_data): 건설품셈 공통 2장 로직 76개 — 가설공사

- 로직_건설품셈_공통2장.json: 가설건축물 손료·설치 · 울타리 · 규준틀 · 동바리 · 비계 · 안전시설 · 흙막이 · 보양·청소 · 리프트
- 공구손료율은 장 계수 표에서 찾기 · 재료 손료 = 재료량 × 2-2 손율
- 재료_자체: 조립식 가설건축물 주자재 · 콘테이너 · 축중계 · 조립말비계 부재 · 방지망·보호망 재료
- 식 엔진: 조건 이름도 작은따옴표 허용(「규준틀 높이」)
- 막힘: 2-9-12 · 2-11-8 · 2-11-9 · 2-12-4(「중급기술자」 노임 요소 없음) · 2-1(면적 기준표 — 범위규칙 글이 엔진 규칙 이름 아님)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
This commit is contained in:
2026-09-19 17:47:38 +09:00
co-authored by Claude Opus 5
parent c68e26e882
commit 7f4fe9a8f5
6 changed files with 5146 additions and 6 deletions
+1 -1
View File
@@ -112,7 +112,7 @@
- 요소 — `그룹:원문:열쇠` · 값 묶음은 `.칸``기계:건설품셈:0201-0070.주연료` · 둘째 쌍점 뒤는 모두 열쇠(`재료:오피넷유가:경유:전국평균`).
- 열쇠에 `{이름}` — 입력·중간 값을 끼움 — `기계:건설품셈:{기계}.가격`
- 표 찾기 — `찾기(소요량:산림품셈:13-4-1 메쌓기, 뒷길이=뒷길이, 돌=돌, 쌓기=쌓기).석공`
- 맞는 줄이 여럿이면 찾는 값 칸이 있는 줄만 봄. 이름에 괄호·빈칸이 있으면 작은따옴표 — `.'시공량(m)'`
- 맞는 줄이 여럿이면 찾는 값 칸이 있는 줄만 봄. 값 칸·조건 이름에 괄호·빈칸이 있으면 작은따옴표 — `.'시공량(m)'` · `'규준틀 높이'=높이`
- 찾기·로직 인자의 글자 값은 작은따옴표 — `구분='V(다짐속도,km/hr)'` · 따옴표 없으면 이름(입력·중간).
- 로직 부르기 — `로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0070')` · 돈 로직의 결과는 비목 묶음 `.노무비` `.재료비` `.경비` `.계` · 돈 아닌 로직은 수 하나.
- 입력 · 중간 · 비목 합은 이름 그대로.
@@ -145,7 +145,7 @@ class _Parser:
def args(self) -> list[tuple[str, object]]:
out = []
while self.take(","):
key = self.name()
key = self.quoted() if self.take("'") else self.name()
self.need("=")
out.append((key, self.expr()))
self.need(")")
File diff suppressed because it is too large Load Diff
@@ -69,7 +69,7 @@
"출처": "건설품셈 공통 8-1-5 · 8-1-6",
"소유": "공용",
"입력": [
{ "이름": "기계", "고르기": ["1730-0015", "7204-0055", "0602-0150", "2702-0020", "0101-0007", "0101-0010", "0101-0012", "0101-0019", "0101-0032", "2105-0005", "2104-0010", "2104-0015", "2104-0020", "2104-0025", "2104-0030", "2104-0035", "2104-0040", "2104-0045", "2104-0050", "2104-0060", "2104-0070", "2104-0080", "2104-0100", "2104-0130", "2104-0160", "2104-0200", "2104-0220", "2104-0250", "2104-0300", "4504-0032", "4504-0036", "4504-0041", "4504-0043", "4504-0047", "4504-0052", "4205-0010", "4205-0017", "4205-0020", "4205-0030", "4205-0040", "4205-0045", "2105-0002", "2105-0003", "2105-0010", "2105-0015", "2105-0018", "2502-0025", "0602-0025", "2502-0050", "2101-0010", "2101-0015", "2101-0020", "2101-0025", "2101-0030", "2101-0035", "2101-0040", "2101-0050", "2101-0070", "2101-0080", "2101-0100", "2101-0150", "2101-0220", "2101-0280", "2101-0300"] },
{ "이름": "기계", "고르기": ["1730-0015", "7204-0055", "0602-0150", "2702-0020", "0101-0007", "0101-0010", "0101-0012", "0101-0019", "0101-0032", "2105-0005", "2104-0010", "2104-0015", "2104-0020", "2104-0025", "2104-0030", "2104-0035", "2104-0040", "2104-0045", "2104-0050", "2104-0060", "2104-0070", "2104-0080", "2104-0100", "2104-0130", "2104-0160", "2104-0200", "2104-0220", "2104-0250", "2104-0300", "4504-0032", "4504-0036", "4504-0041", "4504-0043", "4504-0047", "4504-0052", "4205-0010", "4205-0017", "4205-0020", "4205-0030", "4205-0040", "4205-0045", "2105-0002", "2105-0003", "2105-0010", "2105-0015", "2105-0018", "2502-0025", "0602-0025", "2502-0050", "2101-0010", "2101-0015", "2101-0020", "2101-0025", "2101-0030", "2101-0035", "2101-0040", "2101-0050", "2101-0070", "2101-0080", "2101-0100", "2101-0150", "2101-0220", "2101-0280", "2101-0300", "7204-0018", "7204-0160"] },
{
"이름": "지역",
"고르기": [
+40 -3
View File
@@ -24,7 +24,7 @@
{ "열쇠": "철재 거푸집", "이름": "철재 거푸집(콘크리트 포장)", "규격": "1본 3m", "단위": "본", "값": null, "출처": "자체", "비고": "산림품셈 12-8 주①④" },
{ "열쇠": "핀폴", "이름": "핀폴", "규격": "", "단위": "개", "값": null, "출처": "자체", "비고": "산림품셈 12-8 주①④" },
{ "열쇠": "유공관 ∅200㎜", "이름": "유공관", "규격": "∅200㎜", "단위": "m", "값": null, "출처": "자체", "비고": "산림품셈 12-10" },
{ "열쇠": "부직포", "이름": "부직포", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "산림품셈 12-10 · 12-23" },
{ "열쇠": "부직포", "이름": "부직포", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "산림품셈 12-10 · 12-23 · 건설품셈 공통 2-11-1 재료량" },
{ "열쇠": "잡석", "이름": "잡석", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 12-10 · 13-4-2 · 13-5-2" },
{ "열쇠": "VR관 ∅800㎜", "이름": "VR관(소켓식)", "규격": "∅800㎜", "단위": "m", "값": null, "출처": "자체", "비고": "산림품셈 12-11-1" },
{ "열쇠": "고무링 ∅800㎜", "이름": "고무링(VR관)", "규격": "∅800㎜", "단위": "개", "값": null, "출처": "자체", "비고": "산림품셈 12-11-1" },
@@ -66,7 +66,7 @@
{ "열쇠": "하드너", "이름": "콘크리트 표면 강화재(하드너)", "규격": "", "단위": "", "값": null, "출처": "자체", "비고": "산림품셈 12-35 · 원문 단위 없음" },
{ "열쇠": "소재", "이름": "소재(원목)", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 10-8-2" },
{ "열쇠": "각재·판재", "이름": "각재·판재", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 10-8-2" },
{ "열쇠": "목재", "이름": "목재(규준틀)", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 11-2 · 11-3 · 해석: 원문 단위 없음 — ㎥" },
{ "열쇠": "목재", "이름": "목재(규준틀)", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 11-2 · 11-3 · 해석: 원문 단위 없음 — ㎥ · 건설품셈 공통 2-5-4 · 2-11-1 재료량" },
{ "열쇠": "줄눈 모르타르", "이름": "줄눈메꿈 모르타르", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 13-4-4 주④ · 13-5-1 주③" },
{ "열쇠": "틈메우기돌", "이름": "틈메우기돌", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 13-5-1 주④" },
{ "열쇠": "철망태", "이름": "철망태(사각형 돌망태)", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 13-11-4" },
@@ -82,6 +82,43 @@
{ "열쇠": "합성수지 원형맨홀거푸집 ø1200", "이름": "합성수지(P.E) 원형 맨홀 거푸집", "규격": "ø1200", "단위": "조", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-5 주④" },
{ "열쇠": "합성수지 원형맨홀거푸집 ø1500", "이름": "합성수지(P.E) 원형 맨홀 거푸집", "규격": "ø1500", "단위": "조", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-5 주④" },
{ "열쇠": "합성수지 원형맨홀거푸집 ø1800", "이름": "합성수지(P.E) 원형 맨홀 거푸집", "규격": "ø1800", "단위": "조", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-5 주④" },
{ "열쇠": "쉬즈관", "이름": "쉬즈관", "규격": "", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-4-1 주④ · 6-4-2 주④" }
{ "열쇠": "쉬즈관", "이름": "쉬즈관", "규격": "", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-4-1 주④ · 6-4-2 주④" },
{ "열쇠": "조립식 가설건축물 BASECHANNEL", "이름": "BASECHANNEL", "규격": "두께 2.0㎜ 이상", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 TOPCHANNEL", "이름": "TOPCHANNEL", "규격": "두께 2.0㎜ 이상", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 외부PANEL(벽)", "이름": "외부PANEL(벽)", "규격": "1,200×2,400㎜", "단위": "매", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 외부PANEL (창문)", "이름": "외부PANEL (창문)", "규격": "1,200×2,400㎜", "단위": "매", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 외부PANEL (철재문)", "이름": "외부PANEL (철재문)", "규격": "1,200×2,400㎜", "단위": "매", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 내부PANEL(벽)", "이름": "내부PANEL(벽)", "규격": "1,200×2,400㎜", "단위": "매", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 내부PANEL (목재문)", "이름": "내부PANEL (목재문)", "규격": "1,200×2,400㎜", "단위": "매", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 PANEL JOINT(AL-BAR)", "이름": "PANEL JOINT(AL-BAR)", "규격": "L=2,400㎜", "단위": "조", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 CANOPY(출입구채양)", "이름": "CANOPY(출입구채양)", "규격": "600×1,200㎜", "단위": "매", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 박공PANEL", "이름": "박공PANEL", "규격": "", "단위": "매", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 ROOFSHEET", "이름": "ROOFSHEET", "규격": "0.5㎜ COLOR SHEET", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 트러스", "이름": "트러스", "규격": "L=7.2m", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 중도리(PURIN)", "이름": "중도리(PURIN)", "규격": "두께 2.0 이상", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 천장판", "이름": "천장판", "규격": "미장합판+50㎜ GLASSWOOL", "단위": "매", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "조립식 가설건축물 T-BAR", "이름": "T-BAR", "규격": "", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 주자재" },
{ "열쇠": "콘테이너형 가설건축물 3.0x3.0m", "이름": "콘테이너형 가설건축물", "규격": "3.0x3.0m", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 · 2-3-2" },
{ "열쇠": "콘테이너형 가설건축물 3.0x6.0m", "이름": "콘테이너형 가설건축물", "규격": "3.0x6.0m", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 · 2-3-2" },
{ "열쇠": "콘테이너형 가설건축물 3.0x9.0m", "이름": "콘테이너형 가설건축물", "규격": "3.0x9.0m", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-3 · 2-3-2" },
{ "열쇠": "축중계", "이름": "축중계(이동식)", "규격": "", "단위": "대", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-2-6" },
{ "열쇠": "조립말비계 가새", "이름": "조립말비계 가새", "규격": "L1518-2개", "단위": "조", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-7-6 재료량" },
{ "열쇠": "조립말비계 수평띠장", "이름": "조립말비계 수평띠장", "규격": "L1829", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-7-6 재료량" },
{ "열쇠": "조립말비계 손잡이기둥", "이름": "조립말비계 손잡이기둥", "규격": "", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-7-6 재료량" },
{ "열쇠": "조립말비계 손잡이 L1219", "이름": "조립말비계 손잡이", "규격": "L1219", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-7-6 재료량" },
{ "열쇠": "조립말비계 손잡이 L1829", "이름": "조립말비계 손잡이", "규격": "L1829", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-7-6 재료량" },
{ "열쇠": "조립말비계 바퀴", "이름": "조립말비계 바퀴", "규격": "", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-7-6 재료량" },
{ "열쇠": "조립말비계 자키", "이름": "조립말비계 자키", "규격": "", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-7-6 재료량" },
{ "열쇠": "조립말비계 발판", "이름": "조립말비계 발판", "규격": "45×200×2000", "단위": "장", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-7-6 재료량" },
{ "열쇠": "강관 ø48.6×2.4㎜", "이름": "강관(비계용)", "규격": "ø48.6㎜×2.4㎜", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-8-1 재료량 · 2-8-2 재료량" },
{ "열쇠": "낙하물방지망 브라켓", "이름": "브라켓(낙하물방지망)", "규격": "", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-8-1 재료량 · 2-8-2 재료량" },
{ "열쇠": "비계 클램프", "이름": "클램프", "규격": "", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-8-1 재료량 · 2-8-2 재료량" },
{ "열쇠": "그물망", "이름": "그물망", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-8-1 재료량 · 2-8-2 재료량 · 2-8-7 재료량" },
{ "열쇠": "플라잉넷 사다리", "이름": "사다리(플라잉넷)", "규격": "폭 30㎝×길이 3m 기준", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-8-2 재료량" },
{ "열쇠": "철골 안전망 보강재", "이름": "보강재(철골 안전망)", "규격": "", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-8-7 재료량" },
{ "열쇠": "보호망", "이름": "보호망", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-8-8 재료량 · 2-8-9 재료량" },
{ "열쇠": "보호막", "이름": "보호막", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-10-1 재료량" },
{ "열쇠": "방진망", "이름": "방진망", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-10-2 재료량" },
{ "열쇠": "풀", "이름": "풀(보양지)", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-11-1 재료량" }
]
}
@@ -257,3 +257,6 @@ def test_찾기_값칸_있는_줄만():
with pytest.raises(mf.FormulaError):
mf.find(table, {"높이": "7m이하"})
assert mf.parse("찾기(소요량:건설품셈:시험, 높이='7m이하').'시공량(m)'")[2] == "시공량(m)"
assert (
mf.parse("찾기(소요량:건설품셈:시험, '규준틀 높이'=높이).수량")[1][2][0][0] == "규준틀 높이"
)