Merge remote-tracking branch 'origin/sub_laptop_4' into sub_laptop_2

# Conflicts:
#	resources/master_data/재료_자체.json
This commit is contained in:
2026-09-19 19:16:08 +09:00
14 changed files with 2156 additions and 54 deletions
@@ -276,6 +276,19 @@ def check_logics(files: dict[str, dict], whole: mf.Master) -> list[str]:
out += [f"{name} · {x}" for x in found]
graph[f"{data.get('원문')}:{row.get('열쇠')}"] = calls
out += [f"돌고 도는 참조 · {''.join(loop)}" for loop in mf.find_loops(graph)]
return out + duplicate_keys(files)
def duplicate_keys(files: dict[str, dict]) -> list[str]:
"""같은 그룹·원문에 같은 열쇠 — 먼저 읽힌 파일 것만 찾기에 걸림"""
first, out = {}, []
for name, data in files.items():
rows = data.get("") if data.get("그룹") in mf.TABLE_GROUPS else data.get("")
for row in rows or []:
ref = f"{data.get('그룹')}:{data.get('원문')}:{row.get('열쇠')}"
if ref in first and first[ref] != name:
out.append(f"{name} · 열쇠 겹침 「{ref}」 — {first[ref]} 에도 있음")
first.setdefault(ref, name)
return out
@@ -4,7 +4,7 @@
"판": "2026",
"표": [
{
"열쇠": "1-1-1 계수",
"열쇠": "1-1-1 강관 용접접합 계수",
"이름": "강관 용접접합 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-1-1",
@@ -38,7 +38,7 @@
]
},
{
"열쇠": "1-1-2 계수",
"열쇠": "1-1-2 강관 용접배관 계수",
"이름": "강관 용접배관 계수",
"기준": "본 품",
"출처": "건설품셈 기계설비 1-1-2",
@@ -80,7 +80,7 @@
]
},
{
"열쇠": "1-1-3 계수",
"열쇠": "1-1-3 강관 나사식 접합 및 배관 계수",
"이름": "강관 나사식 접합 및 배관 계수",
"기준": "본 품",
"출처": "건설품셈 기계설비 1-1-3",
@@ -122,7 +122,7 @@
]
},
{
"열쇠": "1-1-4 계수",
"열쇠": "1-1-4 강관 그루브조인트식 접합 및 배관 계수",
"이름": "강관 그루브조인트식 접합 및 배관 계수",
"기준": "본 품",
"출처": "건설품셈 기계설비 1-1-4",
@@ -164,7 +164,7 @@
]
},
{
"열쇠": "1-2-1 계수",
"열쇠": "1-2-1 동관 용접접합 계수",
"이름": "동관 용접접합 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-2-1",
@@ -194,7 +194,7 @@
]
},
{
"열쇠": "1-2-2 계수",
"열쇠": "1-2-2 동관 용접배관 계수",
"이름": "동관 용접배관 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-2-2",
@@ -236,7 +236,7 @@
]
},
{
"열쇠": "1-3-1 계수",
"열쇠": "1-3-1 스테인리스 강관 용접접합 계수",
"이름": "스테인리스 강관 용접접합 계수",
"기준": "본 품",
"출처": "건설품셈 기계설비 1-3-1",
@@ -266,7 +266,7 @@
]
},
{
"열쇠": "1-3-2 계수",
"열쇠": "1-3-2 스테인리스 강관 용접배관 계수",
"이름": "스테인리스 강관 용접배관 계수",
"기준": "본 품",
"출처": "건설품셈 기계설비 1-3-2",
@@ -308,7 +308,7 @@
]
},
{
"열쇠": "1-3-3 계수",
"열쇠": "1-3-3 스테인리스 강관 그루브조인트식 접합 및 배관 계수",
"이름": "스테인리스 강관 그루브조인트식 접합 및 배관 계수",
"기준": "본 품",
"출처": "건설품셈 기계설비 1-3-3",
@@ -350,7 +350,7 @@
]
},
{
"열쇠": "1-3-4 계수",
"열쇠": "1-3-4 스테인리스 강관 프레스식 접합 및 배관 계수",
"이름": "스테인리스 강관 프레스식 접합 및 배관 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-3-4",
@@ -392,7 +392,7 @@
]
},
{
"열쇠": "1-3-5 계수",
"열쇠": "1-3-5 스테인리스 주름관 접합 및 배관 계수",
"이름": "스테인리스 주름관 접합 및 배관 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-3-5",
@@ -422,7 +422,7 @@
]
},
{
"열쇠": "1-4-1 계수",
"열쇠": "1-4-1 주철관 기계식접합 및 배관 계수",
"이름": "주철관 기계식접합 및 배관 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-4-1",
@@ -452,7 +452,7 @@
]
},
{
"열쇠": "1-4-2 계수",
"열쇠": "1-4-2 주철관 수밀밴드 접합 및 배관 계수",
"이름": "주철관 수밀밴드 접합 및 배관 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-4-2",
@@ -482,7 +482,7 @@
]
},
{
"열쇠": "1-5-1 계수",
"열쇠": "1-5-1 경질관 접착제 접합 및 배관 계수",
"이름": "경질관 접착제 접합 및 배관 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-5-1",
@@ -512,7 +512,7 @@
]
},
{
"열쇠": "1-5-2 계수",
"열쇠": "1-5-2 경질관 고무링 캡조임 접합 및 배관(일반 PVC) 계수",
"이름": "경질관 고무링 캡조임 접합 및 배관(일반 PVC) 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-5-2",
@@ -542,7 +542,7 @@
]
},
{
"열쇠": "1-5-3 계수",
"열쇠": "1-5-3 경질관 고무링 캡조임 접합 및 배관(고강도PVC) 계수",
"이름": "경질관 고무링 캡조임 접합 및 배관(고강도PVC) 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-5-3",
@@ -572,7 +572,7 @@
]
},
{
"열쇠": "1-6-1 계수",
"열쇠": "1-6-1 폴리부틸렌(PB) 일반접합 및 배관 계수",
"이름": "폴리부틸렌(PB) 일반접합 및 배관 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-6-1",
@@ -593,7 +593,7 @@
]
},
{
"열쇠": "1-6-2 계수",
"열쇠": "1-6-2 폴리부틸렌(PB) 이중관 접합 및 배관 계수",
"이름": "폴리부틸렌(PB) 이중관 접합 및 배관 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-6-2",
@@ -614,7 +614,7 @@
]
},
{
"열쇠": "1-6-3 계수",
"열쇠": "1-6-3 가교화 폴리에틸렌관 접합 및 배관 계수",
"이름": "가교화 폴리에틸렌관 접합 및 배관 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 1-6-3",
@@ -4,7 +4,7 @@
"판": "2026",
"표": [
{
"열쇠": "2-1-1 계수",
"열쇠": "2-1-1 아연도금강판덕트(각형덕트) 설치 계수",
"이름": "아연도금강판덕트(각형덕트) 설치 계수",
"기준": "",
"출처": "건설품셈 기계설비 2-1-1",
@@ -33,7 +33,7 @@
]
},
{
"열쇠": "2-1-2 계수",
"열쇠": "2-1-2 아연도금강판덕트(스파이럴덕트) 설치 계수",
"이름": "아연도금강판덕트(스파이럴덕트) 설치 계수",
"기준": "",
"출처": "건설품셈 기계설비 2-1-2",
@@ -62,7 +62,7 @@
]
},
{
"열쇠": "2-1-3 계수",
"열쇠": "2-1-3 스테인리스덕트(각형덕트) 설치 계수",
"이름": "스테인리스덕트(각형덕트) 설치 계수",
"기준": "",
"출처": "건설품셈 기계설비 2-1-3",
@@ -91,7 +91,7 @@
]
},
{
"열쇠": "2-1-4 계수",
"열쇠": "2-1-4 PVC덕트 설치 계수",
"이름": "PVC덕트 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 2-1-4",
@@ -112,7 +112,7 @@
]
},
{
"열쇠": "2-1-5 계수",
"열쇠": "2-1-5 세대내 환기덕트 설치 계수",
"이름": "세대내 환기덕트 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 2-1-5",
@@ -133,7 +133,7 @@
]
},
{
"열쇠": "2-2-6 계수",
"열쇠": "2-2-6 제연댐퍼 설치 계수",
"이름": "제연댐퍼 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 2-2-6",
@@ -4,7 +4,7 @@
"판": "2026",
"표": [
{
"열쇠": "3-1-1 계수",
"열쇠": "3-1-1 일반마감 배관보온 계수",
"이름": "일반마감 배관보온 계수",
"기준": "",
"출처": "건설품셈 기계설비 3-1-1",
@@ -41,7 +41,7 @@
]
},
{
"열쇠": "3-2-1 계수",
"열쇠": "3-2-1 일반마감 밸브보온 계수",
"이름": "일반마감 밸브보온 계수",
"기준": "",
"출처": "건설품셈 기계설비 3-2-1",
@@ -4,7 +4,7 @@
"판": "2026",
"표": [
{
"열쇠": "4-1-1 계수",
"열쇠": "4-1-1 일반펌프 설치 계수",
"이름": "일반펌프 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 4-1-1",
@@ -25,7 +25,7 @@
]
},
{
"열쇠": "4-1-2 계수",
"열쇠": "4-1-2 집수정 배수펌프 설치 계수",
"이름": "집수정 배수펌프 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 4-1-2",
@@ -46,7 +46,7 @@
]
},
{
"열쇠": "4-2-1 계수",
"열쇠": "4-2-1 송풍기 설치 계수",
"이름": "송풍기 설치 계수",
"기준": "",
"출처": "건설품셈 기계설비 4-2-1",
@@ -4,7 +4,7 @@
"판": "2026",
"표": [
{
"열쇠": "5-1-1 계수",
"열쇠": "5-1-1 일반밸브 및 콕류 설치 계수",
"이름": "일반밸브 및 콕류 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 5-1-1",
@@ -25,7 +25,7 @@
]
},
{
"열쇠": "5-1-2 계수",
"열쇠": "5-1-2 감압밸브장치 설치 계수",
"이름": "감압밸브장치 설치 계수",
"기준": "",
"출처": "건설품셈 기계설비 5-1-2",
@@ -51,7 +51,7 @@
]
},
{
"열쇠": "5-2-1 계수",
"열쇠": "5-2-1 스팀트랩 장치 설치 계수",
"이름": "스팀트랩 장치 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 5-2-1",
@@ -72,7 +72,7 @@
]
},
{
"열쇠": "5-3-1 계수",
"열쇠": "5-3-1 익스팬션조인트 설치 계수",
"이름": "익스팬션조인트 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 5-3-1",
@@ -93,7 +93,7 @@
]
},
{
"열쇠": "5-3-2 계수",
"열쇠": "5-3-2 플랙시블커넥터 설치 계수",
"이름": "플랙시블커넥터 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 5-3-2",
@@ -114,7 +114,7 @@
]
},
{
"열쇠": "5-4-1 계수",
"열쇠": "5-4-1 수격방지기 설치 계수",
"이름": "수격방지기 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 5-4-1",
@@ -4,7 +4,7 @@
"판": "2026",
"표": [
{
"열쇠": "6-1-1 계수",
"열쇠": "6-1-1 유량계(직독식) 설치 계수",
"이름": "유량계(직독식) 설치 계수",
"기준": "",
"출처": "건설품셈 기계설비 6-1-1",
@@ -34,7 +34,7 @@
]
},
{
"열쇠": "6-1-2 계수",
"열쇠": "6-1-2 유량계(원격식) 설치 계수",
"이름": "유량계(원격식) 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 6-1-2",
@@ -55,7 +55,7 @@
]
},
{
"열쇠": "6-1-3 계수",
"열쇠": "6-1-3 세대용 계량기함 설치 계수",
"이름": "세대용 계량기함 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 6-1-3",
@@ -76,7 +76,7 @@
]
},
{
"열쇠": "6-2-1 계수",
"열쇠": "6-2-1 세대용 적산열량계 설치 계수",
"이름": "세대용 적산열량계 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 6-2-1",
@@ -97,7 +97,7 @@
]
},
{
"열쇠": "6-2-2 계수",
"열쇠": "6-2-2 건물용 적산열량계 설치 계수",
"이름": "건물용 적산열량계 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 6-2-2",
@@ -118,7 +118,7 @@
]
},
{
"열쇠": "6-2-3 계수",
"열쇠": "6-2-3 산업용 적산열량계 설치 계수",
"이름": "산업용 적산열량계 설치 계수",
"기준": "인력품",
"출처": "건설품셈 기계설비 6-2-3",
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,713 @@
{
"그룹": "로직",
"원문": "건설품셈",
"부문": "기계설비",
"판": "2026",
"줄": [
{
"열쇠": "2-1-1 아연도금강판덕트(각형덕트) 설치",
"이름": "아연도금강판덕트(각형덕트) 설치",
"결과단위": "원/㎡",
"출처": "건설품셈 기계설비 2-1-1",
"소유": "공용",
"입력": [
{
"이름": "호칭두께",
"단위": "㎜"
},
{
"이름": "시공방법",
"고르기": [
"인력시공",
"고소작업대(시저형) 시공"
]
}
],
"중간": [
{
"이름": "시공량",
"식": "찾기(소요량:건설품셈:2-1-1 아연도금강판덕트(각형덕트) 설치, '호칭두께(mm)'=호칭두께).시공량 * (1 + 만약(시공방법 == '고소작업대(시저형) 시공', 찾기(계수:건설품셈:2-1-1 아연도금강판덕트(각형덕트) 설치 계수, 항목='고소작업대(시저형) 시공 시공량 가산율').값, 0) / 100)",
"출처": "건설품셈 기계설비 2-1-1"
},
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-1-1 아연도금강판덕트(각형덕트) 설치, '호칭두께(mm)'=호칭두께).덕트공 / 시공량"
},
{
"이름": "보통인부",
"식": "찾기(소요량:건설품셈:2-1-1 아연도금강판덕트(각형덕트) 설치, '호칭두께(mm)'=호칭두께).보통인부 / 시공량"
},
{
"이름": "기계경비율",
"식": "만약(시공방법 == '인력시공', 찾기(계수:건설품셈:2-1-1 아연도금강판덕트(각형덕트) 설치 계수, 항목='기계경비율 인력시공').값, 찾기(계수:건설품셈:2-1-1 아연도금강판덕트(각형덕트) 설치 계수, 항목='기계경비율 고소작업대(시저형) 시공').값)"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "보통인부",
"비목": "노무비"
}
],
"덧줄": [
{
"이름": "공구손료 및 경장비",
"식": "노무비 * 기계경비율 / 100",
"비목": "경비",
"출처": "건설품셈 기계설비 2-1-1 주④"
}
],
"끝수": null,
"비고": "제작 완료 덕트 설치 · 벽체통과 콘크리트 깨기 별도 · 크레인·지게차 이동비 별도 · 절단·가공 별도(주③)"
},
{
"열쇠": "2-1-2 아연도금강판덕트(스파이럴덕트) 설치",
"이름": "아연도금강판덕트(스파이럴덕트) 설치",
"결과단위": "원/m",
"출처": "건설품셈 기계설비 2-1-2",
"소유": "공용",
"입력": [
{
"이름": "규격",
"단위": "㎜"
},
{
"이름": "시공방법",
"고르기": [
"인력시공",
"고소작업대(시저형) 시공"
]
}
],
"중간": [
{
"이름": "시공량",
"식": "찾기(소요량:건설품셈:2-1-2 아연도금강판덕트(스파이럴덕트) 설치, '규격(mm)'=규격).시공량 * (1 + 만약(시공방법 == '고소작업대(시저형) 시공', 찾기(계수:건설품셈:2-1-2 아연도금강판덕트(스파이럴덕트) 설치 계수, 항목='고소작업대(시저형) 시공 시공량 가산율').값, 0) / 100)",
"출처": "건설품셈 기계설비 2-1-2"
},
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-1-2 아연도금강판덕트(스파이럴덕트) 설치, '규격(mm)'=규격).덕트공 / 시공량"
},
{
"이름": "보통인부",
"식": "찾기(소요량:건설품셈:2-1-2 아연도금강판덕트(스파이럴덕트) 설치, '규격(mm)'=규격).보통인부 / 시공량"
},
{
"이름": "기계경비율",
"식": "만약(시공방법 == '인력시공', 찾기(계수:건설품셈:2-1-2 아연도금강판덕트(스파이럴덕트) 설치 계수, 항목='기계경비율 인력시공').값, 찾기(계수:건설품셈:2-1-2 아연도금강판덕트(스파이럴덕트) 설치 계수, 항목='기계경비율 고소작업대(시저형) 시공').값)"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "보통인부",
"비목": "노무비"
}
],
"덧줄": [
{
"이름": "공구손료 및 경장비",
"식": "노무비 * 기계경비율 / 100",
"비목": "경비",
"출처": "건설품셈 기계설비 2-1-2 주③"
}
],
"끝수": null,
"비고": "제작 완료 덕트 설치 · 벽체통과 콘크리트 깨기 별도 · 크레인·지게차 이동비 별도 · 철판두께는 규격 칸이 정함(0.5∼1.0㎜)"
},
{
"열쇠": "2-1-3 스테인리스덕트(각형덕트) 설치",
"이름": "스테인리스덕트(각형덕트) 설치",
"결과단위": "원/㎡",
"출처": "건설품셈 기계설비 2-1-3",
"소유": "공용",
"입력": [
{
"이름": "호칭두께",
"단위": "㎜"
},
{
"이름": "시공방법",
"고르기": [
"인력시공",
"고소작업대(시저형) 시공"
]
}
],
"중간": [
{
"이름": "시공량",
"식": "찾기(소요량:건설품셈:2-1-3 스테인리스덕트(각형덕트) 설치, '호칭두께(mm)'=호칭두께).시공량 * (1 + 만약(시공방법 == '고소작업대(시저형) 시공', 찾기(계수:건설품셈:2-1-3 스테인리스덕트(각형덕트) 설치 계수, 항목='고소작업대(시저형) 시공 시공량 가산율').값, 0) / 100)",
"출처": "건설품셈 기계설비 2-1-3"
},
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-1-3 스테인리스덕트(각형덕트) 설치, '호칭두께(mm)'=호칭두께).덕트공 / 시공량"
},
{
"이름": "보통인부",
"식": "찾기(소요량:건설품셈:2-1-3 스테인리스덕트(각형덕트) 설치, '호칭두께(mm)'=호칭두께).보통인부 / 시공량"
},
{
"이름": "기계경비율",
"식": "만약(시공방법 == '인력시공', 찾기(계수:건설품셈:2-1-3 스테인리스덕트(각형덕트) 설치 계수, 항목='기계경비율 인력시공').값, 찾기(계수:건설품셈:2-1-3 스테인리스덕트(각형덕트) 설치 계수, 항목='기계경비율 고소작업대(시저형) 시공').값)"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "보통인부",
"비목": "노무비"
}
],
"덧줄": [
{
"이름": "공구손료 및 경장비",
"식": "노무비 * 기계경비율 / 100",
"비목": "경비",
"출처": "건설품셈 기계설비 2-1-3 주④"
}
],
"끝수": null,
"비고": "제작 완료 덕트 설치 · 벽체통과 콘크리트 깨기 별도 · 크레인·지게차 이동비 별도 · 절단·가공 별도(주③)"
},
{
"열쇠": "2-1-4 PVC덕트 설치",
"이름": "PVC덕트 설치",
"결과단위": "원/㎡",
"출처": "건설품셈 기계설비 2-1-4",
"소유": "공용",
"입력": [],
"중간": [
{
"이름": "시공량",
"식": "찾기(소요량:건설품셈:2-1-4 PVC덕트 설치).시공량",
"출처": "건설품셈 기계설비 2-1-4"
},
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-1-4 PVC덕트 설치).덕트공 / 시공량"
},
{
"이름": "보통인부",
"식": "찾기(소요량:건설품셈:2-1-4 PVC덕트 설치).보통인부 / 시공량"
},
{
"이름": "기계경비율",
"식": "찾기(계수:건설품셈:2-1-4 PVC덕트 설치 계수, 항목='기계경비율').값"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "보통인부",
"비목": "노무비"
}
],
"덧줄": [
{
"이름": "공구손료 및 경장비",
"식": "노무비 * 기계경비율 / 100",
"비목": "경비",
"출처": "건설품셈 기계설비 2-1-4 주④"
}
],
"끝수": null,
"비고": "호칭두께 3㎜ · 절단·가공·보온 별도 · 벽체통과 콘크리트 깨기 별도"
},
{
"열쇠": "2-1-5 세대내 환기덕트 설치",
"이름": "세대내 환기덕트 설치",
"결과단위": "원/m",
"출처": "건설품셈 기계설비 2-1-5",
"소유": "공용",
"입력": [],
"중간": [
{
"이름": "시공량",
"식": "찾기(소요량:건설품셈:2-1-5 세대내 환기덕트 설치).시공량",
"출처": "건설품셈 기계설비 2-1-5"
},
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-1-5 세대내 환기덕트 설치).덕트공 / 시공량"
},
{
"이름": "보통인부",
"식": "찾기(소요량:건설품셈:2-1-5 세대내 환기덕트 설치).보통인부 / 시공량"
},
{
"이름": "기계경비율",
"식": "찾기(계수:건설품셈:2-1-5 세대내 환기덕트 설치 계수, 항목='기계경비율').값"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "보통인부",
"비목": "노무비"
}
],
"덧줄": [
{
"이름": "공구손료 및 경장비",
"식": "노무비 * 기계경비율 / 100",
"비목": "경비",
"출처": "건설품셈 기계설비 2-1-5 주④"
}
],
"끝수": null,
"비고": "204×60㎜ 이하 · 플렉시블 덕트·취출구 별도 · 벽체통과 콘크리트 깨기 별도"
},
{
"열쇠": "2-1-6 플렉시블덕트 설치",
"이름": "플렉시블덕트 설치",
"결과단위": "원/개소",
"출처": "건설품셈 기계설비 2-1-6",
"소유": "공용",
"입력": [
{
"이름": "규격",
"단위": "㎜"
}
],
"중간": [
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-1-6 플렉시블덕트 설치, '규격(㎜)'=규격).덕트공"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "일반 덕트에 연결 · 원문에 공구손료 주 없음"
},
{
"열쇠": "2-2-1 취출구 설치",
"이름": "취출구 설치",
"결과단위": "원/개",
"출처": "건설품셈 기계설비 2-2-1",
"소유": "공용",
"입력": [
{
"이름": "구분",
"고르기": [
"아네모디퓨저",
"유니버설형",
"펀칭메탈형",
"슬릿형"
]
},
{
"이름": "규격",
"고르기": [
"100㎜이하",
"200㎜이하",
"300㎜이하",
"400㎜이하",
"500㎜이하",
"600㎜이하",
"0.04㎡이하",
"0.06",
"0.08",
"0.10",
"0.15",
"0.20",
"0.25",
"0.30",
"0.35",
"0.40",
"1m 미만",
"1m 미만(셔터)",
"1m이상",
"1m이상(셔터)",
"1m 이상"
]
}
],
"중간": [
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-2-1 취출구 설치, 구분=구분, 규격=규격).덕트공"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "규격기준(목지름·단면적·길이·변길이)은 구분이 정함 · 타공 별도"
},
{
"열쇠": "2-2-2 흡입구 설치",
"이름": "흡입구 설치",
"결과단위": "원/개",
"출처": "건설품셈 기계설비 2-2-2",
"소유": "공용",
"입력": [
{
"이름": "구분",
"고르기": [
"그릴(도어그릴)",
"점검구",
"후드"
]
},
{
"이름": "종류",
"고르기": [
"흡입구 장변길이",
"300㎜×300㎜ 이하",
"일반",
"2중",
"그리스필터",
"2중 그리스필터"
]
},
{
"이름": "규격",
"고르기": [
"1m미만",
"1m이상",
"투영면적 ㎡당"
]
}
],
"중간": [
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-2-2 흡입구 설치, 구분=구분, 종류=종류, 규격=규격).덕트공"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "후드는 투영면적 ㎡당 — 설계 수량을 ㎡ 로"
},
{
"열쇠": "2-2-3 덕트 플렉시블 조인트 설치",
"이름": "덕트 플렉시블 조인트 설치",
"결과단위": "원/개소",
"출처": "건설품셈 기계설비 2-2-3",
"소유": "공용",
"입력": [
{
"이름": "호칭번호",
"고르기": [
"032(2)",
"080(5⅓)",
"036(2⅓)",
"090(6)",
"040(2⅔)",
"100(6⅔)",
"045(3)",
"112(7½)",
"050(3⅓)",
"125(8⅓)",
"056(3⅔)",
"140(9⅓)",
"063(4)",
"160(10⅔)",
"071(4⅔)",
"180(12)"
]
}
],
"중간": [
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-2-3 덕트 플렉시블 조인트 설치, 호칭번호=호칭번호).덕트공"
},
{
"이름": "보통인부",
"식": "찾기(소요량:건설품셈:2-2-3 덕트 플렉시블 조인트 설치, 호칭번호=호칭번호).보통인부"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "보통인부",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "규격은 송풍기 호칭번호"
},
{
"열쇠": "2-2-4 일반댐퍼(사각) 설치",
"이름": "일반댐퍼(사각) 설치",
"결과단위": "원/개",
"출처": "건설품셈 기계설비 2-2-4",
"소유": "공용",
"입력": [
{
"이름": "댐퍼",
"고르기": [
"방화댐퍼",
"풍량조절댐퍼(수동식)"
]
},
{
"이름": "댐퍼면적",
"단위": "㎡"
}
],
"중간": [
{
"이름": "증가수",
"식": "올림(최대(댐퍼면적 - 0.1, 0) / 0.1)",
"출처": "건설품셈 기계설비 2-2-4"
},
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-2-4 일반댐퍼(사각) 설치, 댐퍼=댐퍼).덕트공 + 찾기(소요량:건설품셈:2-2-4 면적 증가 가산, 댐퍼=댐퍼).덕트공 * 증가수"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": "0.1㎡ 초과분은 0.1㎡ 증마다 가산 — 해석: 끝수 증분은 올려 한 번"
},
{
"열쇠": "2-2-5 일반댐퍼(원형) 설치",
"이름": "일반댐퍼(원형) 설치",
"결과단위": "원/개",
"출처": "건설품셈 기계설비 2-2-5",
"소유": "공용",
"입력": [
{
"이름": "구분",
"고르기": [
"방화댐퍼",
"풍량조절댐퍼(수동식)"
]
},
{
"이름": "규격",
"고르기": [
"ø100mm이하",
"200mm이하",
"300mm이하"
]
}
],
"중간": [
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-2-5 일반댐퍼(원형) 설치, 구분=구분, 규격=규격).덕트공"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
}
],
"덧줄": [],
"끝수": null,
"비고": ""
},
{
"열쇠": "2-2-6 제연댐퍼 설치",
"이름": "제연댐퍼 설치",
"결과단위": "원/㎡",
"출처": "건설품셈 기계설비 2-2-6",
"소유": "공용",
"입력": [
{
"이름": "연결방식",
"고르기": [
"수직덕트 연결방식",
"승강로 연결방식"
]
}
],
"중간": [
{
"이름": "덕트공",
"식": "찾기(소요량:건설품셈:2-2-6 제연댐퍼 설치, 연결방식=연결방식).덕트공"
},
{
"이름": "보통인부",
"식": "찾기(소요량:건설품셈:2-2-6 제연댐퍼 설치, 연결방식=연결방식).보통인부"
},
{
"이름": "기계경비율",
"식": "찾기(계수:건설품셈:2-2-6 제연댐퍼 설치 계수, 항목='기계경비율').값"
}
],
"호표": [
{
"종류": "인력",
"요소": "인력:건설노임:1043",
"이름": "덕트공",
"단위": "인",
"수량": "덕트공",
"비목": "노무비"
},
{
"종류": "인력",
"요소": "인력:건설노임:1002",
"이름": "보통인부",
"단위": "인",
"수량": "보통인부",
"비목": "노무비"
},
{
"종류": "재료",
"요소": "재료:자체:앵커 1/2〃",
"이름": "앵커",
"규격": "1/2〃",
"단위": "개",
"수량": "찾기(소요량:건설품셈:2-2-6 제연댐퍼 재료량, 구분='앵커').수량",
"비목": "재료비",
"출처": "건설품셈 기계설비 2-2-6"
},
{
"종류": "재료",
"요소": "재료:자체:블라인드리벳",
"이름": "블라인드리벳",
"단위": "개",
"수량": "찾기(소요량:건설품셈:2-2-6 제연댐퍼 재료량, 구분='블라인드리벳').수량",
"비목": "재료비",
"출처": "건설품셈 기계설비 2-2-6"
},
{
"종류": "재료",
"요소": "재료:자체:철물 D22 철근",
"이름": "철물",
"규격": "D22 철근",
"단위": "㎏",
"수량": "찾기(소요량:건설품셈:2-2-6 제연댐퍼 재료량, 구분='철물').수량",
"비목": "재료비",
"출처": "건설품셈 기계설비 2-2-6"
},
{
"종류": "재료",
"요소": "재료:자체:실리콘(㎏)",
"이름": "실리콘",
"단위": "㎏",
"수량": "찾기(소요량:건설품셈:2-2-6 제연댐퍼 재료량, 구분='실리콘').수량",
"비목": "재료비",
"출처": "건설품셈 기계설비 2-2-6"
}
],
"덧줄": [
{
"이름": "공구손료 및 경장비",
"식": "노무비 * 기계경비율 / 100",
"비목": "경비",
"출처": "건설품셈 기계설비 2-2-6 주③"
}
],
"끝수": null,
"비고": "댐퍼 ㎡당 · 승강로 연결방식은 입상덕트 타공·연결 제외 · 전기배관·입선 별도"
}
]
}
@@ -78,7 +78,7 @@
"보통인부": "인",
"시공량": "m"
},
"범위규칙": "규격(mm): 이상·이하",
"범위규칙": "이상·이하 · 규격(mm) 양 끝 포함",
"줄": [
{
"철판두께(mm)": 0.5,
@@ -15,7 +15,7 @@
"배관공": "인",
"보통인부": "인"
},
"범위규칙": "규격(㎜): 이상·이하",
"범위규칙": "이상·이하 · 규격(㎜) 양 끝 포함",
"줄": [
{
"규격(㎜)": [
@@ -113,7 +113,7 @@
"배관공": "인",
"보통인부": "인"
},
"범위규칙": "규격(㎜): 이상·이하",
"범위규칙": "이상·이하 · 규격(㎜) 양 끝 포함",
"줄": [
{
"규격(㎜)": [
@@ -285,7 +285,7 @@
"배관공": "인",
"보통인부": "인"
},
"범위규칙": "규격(㎜): 이상·이하",
"범위규칙": "이상·이하 · 규격(㎜) 양 끝 포함",
"줄": [
{
"규격(㎜)": [
@@ -486,7 +486,7 @@
"배관공": "인",
"보통인부": "인"
},
"범위규칙": "규격(㎜): 이상·이하",
"범위규칙": "이상·이하 · 규격(㎜) 양 끝 포함",
"줄": [
{
"규격(㎜)": [
@@ -588,7 +588,7 @@
"배관공": "인",
"보통인부": "인"
},
"범위규칙": "규격(㎜): 이상·이하",
"범위규칙": "이상·이하 · 규격(㎜) 양 끝 포함",
"줄": [
{
"규격(㎜)": [
@@ -16,7 +16,7 @@
"배관공": "인",
"보통인부": "인"
},
"범위규칙": "규격(mm): 이상·이하",
"범위규칙": "이상·이하 · 규격(mm) 양 끝 포함",
"줄": [
{
"규격(mm)": [
@@ -128,7 +128,7 @@
"배관공": "인",
"보통인부": "인"
},
"범위규칙": "규격(mm): 이상·이하",
"범위규칙": "이상·이하 · 규격(mm) 양 끝 포함",
"줄": [
{
"규격(mm)": [
@@ -190,7 +190,7 @@
"배관공": "인",
"보통인부": "인"
},
"범위규칙": "규격(mm): 이상·이하",
"범위규칙": "이상·이하 · 규격(mm) 양 끝 포함",
"줄": [
{
"규격(mm)": [
@@ -229,7 +229,7 @@
"배관공": "인",
"보통인부": "인"
},
"범위규칙": "규격(mm): 이상·이하",
"범위규칙": "이상·이하 · 규격(mm) 양 끝 포함",
"줄": [
{
"규격(mm)": [
@@ -285,7 +285,7 @@
"특별인부": "인",
"계장공": "인"
},
"범위규칙": "규격(mm): 이상·이하",
"범위규칙": "이상·이하 · 규격(mm) 양 끝 포함",
"줄": [
{
"규격(mm)": [
+8 -1
View File
@@ -199,6 +199,13 @@
{"열쇠": "앵커 ø10㎜", "이름": "앵커", "규격": "ø 10㎜", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 건축 8-2-2"},
{"열쇠": "AL리벳 ø4.2㎜", "이름": "AL리벳", "규격": "ø 4.2㎜", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 건축 8-2-2"},
{"열쇠": "혼화제", "이름": "혼화제", "규격": "", "단위": "g", "값": null, "출처": "자체", "비고": "건설품셈 건축 9-2-3"},
{"열쇠": "무수축모르타르", "이름": "무수축모르타르", "규격": "", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 건축 9-3-3"}
{"열쇠": "무수축모르타르", "이름": "무수축모르타르", "규격": "", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 건축 9-3-3"},
{"열쇠": "플럭스(브레이징)", "이름": "플럭스", "규격": "브레이징용", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 기계설비 1-2-1 · 원문 g"},
{"열쇠": "TIG 용접봉(스테인리스)", "이름": "TIG 용접봉", "규격": "스테인리스", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 기계설비 1-3-1"},
{"열쇠": "아르곤가스", "이름": "아르곤가스", "규격": "", "단위": "", "값": null, "출처": "자체", "비고": "건설품셈 기계설비 1-3-1"},
{"열쇠": "앵커 1/2〃", "이름": "앵커", "규격": "1/2〃", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 기계설비 2-2-6"},
{"열쇠": "블라인드리벳", "이름": "블라인드리벳", "규격": "", "단위": "개", "값": null, "출처": "자체", "비고": "건설품셈 기계설비 2-2-6"},
{"열쇠": "철물 D22 철근", "이름": "철물", "규격": "D22 철근", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 기계설비 2-2-6"},
{"열쇠": "실리콘(㎏)", "이름": "실리콘", "규격": "", "단위": "㎏", "값": null, "출처": "자체", "비고": "건설품셈 기계설비 2-2-6 · 나라장터 실링재(실리콘)는 L 단위"}
]
}
+38
View File
@@ -298,6 +298,44 @@ def test_견본_파일_검사_통과(whole):
assert cm.check_logics(files, whole) == []
def test_열쇠_겹침을_잡음():
"""다른 부문 표와 같은 열쇠면 먼저 읽힌 표만 찾기에 걸림."""
files = {
"계수_건설품셈_건축1장.json": {
"그룹": "계수",
"원문": "건설품셈",
"": [{"열쇠": "1-1-1 계수"}],
},
"계수_건설품셈_기계설비1장.json": {
"그룹": "계수",
"원문": "건설품셈",
"": [{"열쇠": "1-1-1 계수"}],
},
}
assert len(cm.duplicate_keys(files)) == 1
assert cm.duplicate_keys(cm.load()) == []
def test_기계설비_강관_용접배관(whole):
"""1-1-2 관규격 15 · (배관공 3인 × 247,897 + 보통인부 1인 × 172,068) ÷ 83m · 기계경비 2%."""
got = mf.run(
whole,
"건설품셈:1-1-2 강관 용접배관",
{"관규격": 15, "시공방법": "인력시공", "시공위치": "옥내일반배관"},
)
labor = (3 * Decimal(247897) + Decimal(172068)) / 83
assert cents(got["노무비"]) == cents(labor)
assert cents(got["경비"]) == cents(labor * Decimal("0.02"))
def test_기계설비_사각댐퍼_면적_가산(whole):
"""2-2-4 방화댐퍼 0.35㎡ · 0.1㎡ 초과 0.25㎡ = 증 3번 · 0.415 + 0.125×3 = 0.79인."""
got = mf.run(
whole, "건설품셈:2-2-4 일반댐퍼(사각) 설치", {"댐퍼": "방화댐퍼", "댐퍼면적": 0.35}
)
assert got[""][0]["수량"] == Decimal("0.790")
def test_로직_검사가_틀린_열쇠를_잡음(whole):
row = {
"열쇠": "시험",