feat(master_data): 건설품셈 공통 5장 로직 35개 — 기초공사

- 로직_건설품셈_공통5장.json: 흙막이(마대 · H-Beam · 흙막이판 · 앵커 · 복공판 · 기준틀) · 지반개량(매트 · 고압분사 · PBD · 다짐말뚝) · 말뚝(기성 · 천공 · 두부정리 · 현장타설) · 차수재
- 장비조립·해체 = 인력·크레인 × (조립 + 해체 소요일수) · 본당 작업소요시간 = 지층별 연장 입력 × 굴착시간 표 · 편성 × T
- 부속장비·소모자재 = 인력편성 노무비 × 표 요율 · 공구손료율은 그룹 계수 표에서 찾기
- 8장: 연료 없는 기종 경비 로직 새로(공기식 크롤러드릴) · 기계 고르기 더함
- 재료_자체: 매트 · P.P로프 · 모래주머니 · 철근 19㎜ · 드레인 보드 · 차수재
- 식 엔진: 찾기·로직 머리는 「,」「)」에서만 끊음(표 이름 「P.P마대」)
- 막힘: 5-1-7 인장(「중급기술자」 노임 요소 없음) · 5-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:56:12 +09:00
co-authored by Claude Opus 5
parent 7f4fe9a8f5
commit 7fe462f972
5 changed files with 5351 additions and 13 deletions
@@ -122,8 +122,9 @@ class _Parser:
self.i = m.end()
return m.group()
def ref(self) -> str:
"""열쇠 글자 — 괄호 밖의 `,` · `)` · `.칸` · ` 연산자 ` 앞에서 멈춤(열쇠에 빈칸·괄호가 들어감)."""
def ref(self, head: bool = False) -> str:
"""열쇠 글자 — 괄호 밖의 `,` · `)` · `.칸` · ` 연산자 ` 앞에서 멈춤(열쇠에 빈칸·괄호가 들어감).
head = 찾기·로직 머리 — `,` · `)` 에서만 멈춤(표 이름의 `P.P마대` 같은 점)."""
start, depth = self.i, 0
while self.i < len(self.s):
ch = self.s[self.i]
@@ -135,6 +136,8 @@ class _Parser:
depth -= 1
elif depth == 0 and ch == ",":
break
elif head:
pass
elif depth == 0 and ch == "." and not self.s[self.i + 1 : self.i + 2].isdigit():
break
elif depth == 0 and re.match(r"\s[-+*/<>=!]", self.s[self.i : self.i + 2]):
@@ -172,10 +175,10 @@ class _Parser:
self.need("(")
head = self.name()
self.need(":")
return ("find", f"{head}:{self.ref()}", self.args())
return ("find", f"{head}:{self.ref(True)}", self.args())
if word == "로직":
self.need("(")
return ("logic", self.ref(), self.args())
return ("logic", self.ref(True), self.args())
if word in FUNCS:
self.need("(")
items = [self.expr()]
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", "7204-0018", "7204-0160"] },
{ "이름": "기계", "고르기": ["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", "5205-0210", "5405-0110", "7505-0450", "5205-0255", "7505-0150", "5205-0103", "6701-0147", "6701-0184", "5205-0170", "7505-0350", "0302-0134", "7505-0100", "7505-0050"] },
{
"이름": "지역",
"고르기": [
@@ -225,10 +225,7 @@
"입력": [
{
"이름": "기계",
"고르기": [
"4611-0350",
"7812-0015"
]
"고르기": ["4611-0350", "7812-0015", "4506-0200", "4506-0400"]
},
{
"이름": "지역",
@@ -304,7 +301,7 @@
"입력": [
{
"이름": "기계",
"고르기": ["7620-0003", "7730-0150", "6516-0060", "6516-0120", "6516-0250", "6516-0300", "6105-0190", "6202-0060", "0230-0002"]
"고르기": ["7620-0003", "7730-0150", "6516-0060", "6516-0120", "6516-0250", "6516-0300", "6105-0190", "6202-0060", "0230-0002", "6410-0080", "6410-0100", "6410-0120", "6410-0150", "6410-0200", "6901-0010", "6530-0090", "6530-0120", "6517-0100", "6517-0150", "6517-0200", "6517-0250", "6517-0300", "6510-0100", "6510-0150", "6510-0200", "6510-0250", "6510-0300", "6518-0100", "6518-0150", "6518-0200", "6518-0250", "6518-0300"]
}
],
"중간": [
@@ -335,7 +332,7 @@
"입력": [
{
"이름": "기계",
"고르기": ["2106-0002", "2106-0003", "2106-0005"]
"고르기": ["2106-0002", "2106-0003", "2106-0005", "6802-0040", "6802-0060", "6802-0100", "6802-0120", "6802-0135", "6802-0160", "6801-0010", "6803-0100", "6803-0120"]
},
{
"이름": "지역",
@@ -398,6 +395,58 @@
],
"끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음",
"비고": "원문 8-1-3 5 운전사 구분에 이름 없는 기종 — 조종원직종을 설계자가 고름"
},
{
"열쇠": "8 기계 시간당 경비(연료 없음)",
"이름": "기계 시간당 기계경비(연료 없는 기종)",
"결과단위": "원/시간",
"출처": "건설품셈 공통 8-1-5 · 8-1-6",
"소유": "공용",
"입력": [
{
"이름": "기계",
"고르기": ["5401-0017"]
},
{
"이름": "지역",
"고르기": ["전국평균", "전국", "서울", "경기", "강원", "충북", "충남", "전북", "경북", "경남", "부산", "제주", "대구", "인천", "대전", "울산", "세종", "전남광주"],
"출처": "건설품셈 공통 8-1-7 5"
}
],
"중간": [
{
"이름": "손료",
"식": "버림(기계:건설품셈:{기계}.가격 * 1000 * ((기계:건설품셈:{기계}.상각비계수 + 기계:건설품셈:{기계}.정비비계수) + 기계:건설품셈:{기계}.관리비계수) / 10000000, 0)",
"출처": "건설품셈 공통 8-1-5 12 · 8-1-6 4"
},
{
"이름": "직종",
"식": "기계:건설품셈:{기계}.조종원직종",
"출처": "건설품셈 공통 8-1-3 5"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:{직종}",
"이름": "조종원",
"단위": "인",
"수량": "기계:건설품셈:{기계}.조종원 / 8",
"비목": "노무비",
"출처": "건설품셈 공통 8-1-3 6",
"비고": "환산 근거 미확인 — 우선 하루 ÷ 8"
}
],
"덧줄": [
{
"이름": "기계손료",
"식": "손료",
"비목": "경비",
"출처": "건설품셈 공통 8-1-6 2"
}
],
"끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12) · 합계 원문 규정 없음",
"비고": "원문 운전경비 표에 주연료가 빈 기종(공기식 크롤러드릴 등 — 동력은 공기압축기) — 손료 + 조종원"
}
]
}
+10 -2
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 · 건설품셈 공통 2-11-1 재료량" },
{ "열쇠": "부직포", "이름": "부직포", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "산림품셈 12-10 · 12-23 · 건설품셈 공통 2-11-1 재료량 · 건설품셈 공통 5-4-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" },
@@ -119,6 +119,14 @@
{ "열쇠": "보호망", "이름": "보호망", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-8-8 재료량 · 2-8-9 재료량" },
{ "열쇠": "보호막", "이름": "보호막", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-10-1 재료량" },
{ "열쇠": "방진망", "이름": "방진망", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-10-2 재료량" },
{ "열쇠": "풀", "이름": "풀(보양지)", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-11-1 재료량" }
{ "열쇠": "풀", "이름": "풀(보양지)", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-11-1 재료량" },
{ "열쇠": "토목섬유 매트", "이름": "매트(합성수지 토목섬유)", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 5-2-1 매트고정 재료량" },
{ "열쇠": "PP로프 9㎜", "이름": "P.P로프", "규격": "9㎜", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 5-2-1 매트고정 재료량" },
{ "열쇠": "모래주머니", "이름": "모래주머니", "규격": "", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 공통 5-2-1 매트고정 재료량" },
{ "열쇠": "철근 19㎜", "이름": "철근", "규격": "19㎜", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 5-2-1 매트고정 재료량" },
{ "열쇠": "드레인 보드", "이름": "드레인 보드(연직배수재)", "규격": "", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 공통 5-2-3 주②" },
{ "열쇠": "지오콤포지트", "이름": "지오콤포지트", "규격": "6.0㎜", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 5-4-1 재료량" },
{ "열쇠": "벤토나이트매트", "이름": "벤토나이트매트", "규격": "6.0㎜", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 5-4-1 재료량" },
{ "열쇠": "HDPE 시트", "이름": "HDPE 시트", "규격": "22.5㎜", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 5-4-1 재료량" }
]
}
@@ -260,3 +260,7 @@ def test_찾기_값칸_있는_줄만():
assert (
mf.parse("찾기(소요량:건설품셈:시험, '규준틀 높이'=높이).수량")[1][2][0][0] == "규준틀 높이"
)
assert (
mf.parse("찾기(소요량:건설품셈:5-1-1 P.P마대 쌓기, 구분=구분).수량")[1][1]
== "소요량:건설품셈:5-1-1 P.P마대 쌓기"
)