Merge remote-tracking branch 'origin/dev' into main_desktop_1
This commit is contained in:
@@ -60,6 +60,7 @@
|
||||
```
|
||||
|
||||
- 조건 종류 — `수`(같은 값) · `고르기`(글자) · `범위`(줄에 `[아래, 위]` · 끝 열림은 `null` · 포함 여부는 `범위규칙` 에 「초과·이하」처럼).
|
||||
- `범위규칙` 첫 마디 = 엔진이 읽는 이름 — 「초과·이하」 · 「이상·미만」 · 「이하」(위 끝만) · 「이상·이하」(양 끝 포함). 뒤 마디(` · ` 뒤)는 원문 설명. 「이하」 · 「이상·이하」는 여러 줄이 맞으면 위 끝이 가장 작은 줄.
|
||||
- 원문 「-」 칸은 줄에서 그 값 칸을 뺌. 줄 전체가 「-」 면 줄을 뺌.
|
||||
- 원문에 없는 조건 칸은 줄에서 뺌 — 빈 조건 칸은 그 조건에 무엇이든 맞음.
|
||||
- 값 칸에 범위(「80 ∼ 100」)는 `[아래, 위]` — 로직은 설계자 입력 칸으로 받음(기본값 두지 않음).
|
||||
@@ -112,6 +113,7 @@
|
||||
- 요소 — `그룹:원문:열쇠` · 값 묶음은 `.칸` — `기계:건설품셈:0201-0070.주연료` · 둘째 쌍점 뒤는 모두 열쇠(`재료:오피넷유가:경유:전국평균`).
|
||||
- 열쇠에 `{이름}` — 입력·중간 값을 끼움 — `기계:건설품셈:{기계}.가격`
|
||||
- 표 찾기 — `찾기(소요량:산림품셈:13-4-1 메쌓기, 뒷길이=뒷길이, 돌=돌, 쌓기=쌓기).석공`
|
||||
- 맞는 줄이 여럿이면 찾는 값 칸이 있는 줄만 봄. 값 칸·조건 이름에 괄호·빈칸이 있으면 작은따옴표 — `.'시공량(m)'` · `'규준틀 높이'=높이`
|
||||
- 찾기·로직 인자의 글자 값은 작은따옴표 — `구분='V(다짐속도,km/hr)'` · 따옴표 없으면 이름(입력·중간).
|
||||
- 로직 부르기 — `로직(건설품셈:8 굴착기(무한궤도) 시간당 경비, 기계='0201-0070')` · 돈 로직의 결과는 비목 묶음 `.노무비` `.재료비` `.경비` `.계` · 돈 아닌 로직은 수 하나.
|
||||
- 입력 · 중간 · 비목 합은 이름 그대로.
|
||||
|
||||
@@ -104,9 +104,16 @@ class _Parser:
|
||||
return ("neg", self.unary())
|
||||
node = self.primary()
|
||||
while self.take("."):
|
||||
node = ("field", node, self.name())
|
||||
node = ("field", node, self.quoted() if self.take("'") else self.name())
|
||||
return node
|
||||
|
||||
def quoted(self) -> str:
|
||||
end = self.s.find("'", self.i)
|
||||
if end < 0:
|
||||
self.fail("작은따옴표 안 닫힘")
|
||||
text, self.i = self.s[self.i : end], end + 1
|
||||
return text
|
||||
|
||||
def name(self) -> str:
|
||||
self.ws()
|
||||
m = _NAME.match(self.s, self.i)
|
||||
@@ -115,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]
|
||||
@@ -128,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]):
|
||||
@@ -138,7 +148,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(")")
|
||||
@@ -165,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()]
|
||||
@@ -263,20 +273,24 @@ def _match(table: dict, row: dict, cond: str, want) -> bool:
|
||||
)
|
||||
if rule == "이하": # 칸마다 위 끝만 — 맞는 줄 가운데 위 끝이 가장 작은 줄(find)
|
||||
return (low is None or want > low) and (high is None or want <= high)
|
||||
if rule == "이상·이하": # 양 끝 포함 — 이웃 칸 끝이 겹치면 위 끝이 가장 작은 줄(find)
|
||||
return (low is None or want >= low) and (high is None or want <= high)
|
||||
raise FormulaError(f"모르는 범위규칙 「{table.get('범위규칙')}」")
|
||||
return have == want
|
||||
|
||||
|
||||
def find(table: dict, conds: dict) -> dict:
|
||||
def find(table: dict, conds: dict, want: str | None = None) -> dict:
|
||||
for cond in conds:
|
||||
if cond not in table.get("조건", {}):
|
||||
raise FormulaError(f"「{table['열쇠']}」 에 없는 조건 「{cond}」")
|
||||
hits = [row for row in table["줄"] if all(_match(table, row, c, v) for c, v in conds.items())]
|
||||
if len(hits) > 1 and table.get("범위규칙", "").split(" · ")[0] == "이하":
|
||||
if len(hits) > 1 and table.get("범위규칙", "").split(" · ")[0] in ("이하", "이상·이하"):
|
||||
for c in conds:
|
||||
ups = [r[c][1] for r in hits if table["조건"].get(c) == "범위" and r.get(c)]
|
||||
if ups and None not in ups:
|
||||
hits = [r for r in hits if not r.get(c) or r[c][1] == min(ups)]
|
||||
if len(hits) > 1 and want: # 여러 줄이면 찾는 값 칸이 있는 줄만
|
||||
hits = [row for row in hits if want in row]
|
||||
if len(hits) != 1:
|
||||
raise FormulaError(f"「{table['열쇠']}」 {conds} 맞는 줄 {len(hits)}개")
|
||||
return hits[0]
|
||||
@@ -298,7 +312,12 @@ def evaluate(node, env: dict, master: Master, depth: int = 0):
|
||||
raise FormulaError(f"「{node[1]}」 값이 범위 — 입력으로 받아야 함")
|
||||
return value
|
||||
if kind == "field":
|
||||
base = evaluate(node[1], env, master, depth)
|
||||
if node[1][0] == "find":
|
||||
table = master.get(fill(node[1][1], env))
|
||||
conds = {k: evaluate(v, env, master, depth) for k, v in node[1][2]}
|
||||
base = find(table, conds, node[2])
|
||||
else:
|
||||
base = evaluate(node[1], env, master, depth)
|
||||
if not isinstance(base, dict) or node[2] not in base:
|
||||
raise FormulaError(f"칸 「{node[2]}」 없음")
|
||||
value = base[node[2]]
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
"단위": { "손료계수": "1일 1대당 4시간 가동", "취득가액": "원" },
|
||||
"값": { "손료계수": 0.0040, "취득가액": 9894500 },
|
||||
"출처": { "손료계수": "산림품셈 2-2-8", "취득가액": "산림품셈 2-2-8" } },
|
||||
{ "열쇠": "2-2-8 리튬폴리머 배터리(평균가)", "이름": "리튬폴리머 배터리(평균가)", "규격": "16,000mA, 32,000mA",
|
||||
{ "열쇠": "2-2-8 리튬폴리머 배터리(평균가)", "이름": "리튬폴리머 배터리(평균가)", "규격": "16,000mA, 32000mA",
|
||||
"단위": { "손료계수": "1일 1대당 4시간 가동", "취득가액": "원" },
|
||||
"값": { "손료계수": 0.0028, "취득가액": 7104000 },
|
||||
"출처": { "손료계수": "산림품셈 2-2-8", "취득가액": "산림품셈 2-2-8" },
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
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", "5205-0071", "5205-0103", "5205-0210", "5405-0110", "7505-0025", "0502-0036", "1306-0100", "7204-0160", "1506-0032", "0121-0004", "2105-0002", "2105-0003", "2105-0010", "2105-0015", "2105-0018", "1305-0007", "1306-0120", "1106-0010", "1106-0012", "1206-0008", "3201-0003", "5205-0170"] },
|
||||
{ "이름": "기계", "고르기": ["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", "5205-0071", "5205-0103", "5205-0210", "5405-0110", "7505-0025", "0502-0036", "1306-0100", "7204-0160", "1506-0032", "0121-0004", "2105-0002", "2105-0003", "2105-0010", "2105-0015", "2105-0018", "1305-0007", "1306-0120", "1106-0010", "1106-0012", "1206-0008", "3201-0003", "5205-0170", "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", "7505-0450", "5205-0255", "7505-0150", "6701-0147", "6701-0184", "7505-0350", "0302-0134", "7505-0100", "7505-0050", "7204-0038", "7204-0065", "0302-0057"] },
|
||||
{
|
||||
"이름": "지역",
|
||||
"고르기": [
|
||||
@@ -318,7 +318,10 @@
|
||||
"2106-0003",
|
||||
"2106-0005",
|
||||
"3302-0038",
|
||||
"4430-0400"
|
||||
"4430-0400",
|
||||
"4506-0200",
|
||||
"4506-0400",
|
||||
"7210-0485"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -395,18 +398,7 @@
|
||||
"입력": [
|
||||
{
|
||||
"이름": "기계",
|
||||
"고르기": [
|
||||
"7620-0003",
|
||||
"7730-0150",
|
||||
"5501-0080",
|
||||
"6516-0060",
|
||||
"7750-0016",
|
||||
"7750-0025",
|
||||
"7730-0050",
|
||||
"5401-0017",
|
||||
"6105-0190",
|
||||
"6202-0060"
|
||||
]
|
||||
"고르기": ["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", "5501-0080", "7750-0016", "7750-0025", "7730-0050", "5401-0017", "5202-0127", "5202-0240", "5202-0300", "7611-0200", "7612-0200", "5204-0200", "5204-0300", "5204-0400", "5204-0500", "5204-0600"]
|
||||
}
|
||||
],
|
||||
"중간": [
|
||||
@@ -427,6 +419,131 @@
|
||||
],
|
||||
"끝수": "손료 원 미만 버림(건설품셈 공통 8-1-5 12)",
|
||||
"비고": "원문 운전경비 표에 주연료·조종원이 없는 기종(절단기 · 펌프) — 동력비는 원문대로 별도"
|
||||
},
|
||||
{
|
||||
"열쇠": "8 기계 시간당 경비(조종원직종 입력)",
|
||||
"이름": "기계 시간당 기계경비(조종원직종 입력)",
|
||||
"결과단위": "원/시간",
|
||||
"출처": "건설품셈 공통 8-1-5 · 8-1-6",
|
||||
"소유": "공용",
|
||||
"입력": [
|
||||
{
|
||||
"이름": "기계",
|
||||
"고르기": ["2106-0002", "2106-0003", "2106-0005", "6802-0040", "6802-0060", "6802-0100", "6802-0120", "6802-0135", "6802-0160", "6801-0010", "6803-0100", "6803-0120", "4430-0400"]
|
||||
},
|
||||
{
|
||||
"이름": "지역",
|
||||
"고르기": ["전국평균", "전국", "서울", "경기", "강원", "충북", "충남", "전북", "경북", "경남", "부산", "제주", "대구", "인천", "대전", "울산", "세종", "전남광주"],
|
||||
"출처": "건설품셈 공통 8-1-7 5"
|
||||
},
|
||||
{
|
||||
"이름": "조종원직종",
|
||||
"고르기": ["1048", "1049", "1050"],
|
||||
"출처": "건설품셈 공통 8-1-3 5",
|
||||
"비고": "원문 운전사 구분에 기종 이름 없음 — 설계자가 고름(1048 건설기계운전사 · 1049 화물차운전사 · 1050 일반기계운전사)"
|
||||
}
|
||||
],
|
||||
"중간": [
|
||||
{
|
||||
"이름": "손료",
|
||||
"식": "버림(기계:건설품셈:{기계}.가격 * 1000 * ((기계:건설품셈:{기계}.상각비계수 + 기계:건설품셈:{기계}.정비비계수) + 기계:건설품셈:{기계}.관리비계수) / 10000000, 0)",
|
||||
"출처": "건설품셈 공통 8-1-5 12 · 8-1-6 4"
|
||||
},
|
||||
{
|
||||
"이름": "연료",
|
||||
"식": "기계:건설품셈:{기계}.주연료종류",
|
||||
"출처": "건설품셈 공통 8-4 주①㉰"
|
||||
}
|
||||
],
|
||||
"호표": [
|
||||
{
|
||||
"종류": "재료",
|
||||
"요소": "재료:오피넷유가:{연료}:{지역}",
|
||||
"이름": "주연료",
|
||||
"단위": "ℓ",
|
||||
"수량": "기계:건설품셈:{기계}.주연료",
|
||||
"비목": "재료비",
|
||||
"출처": "건설품셈 공통 8-4-1"
|
||||
},
|
||||
{
|
||||
"종류": "인력",
|
||||
"요소": "인력:건설노임:{조종원직종}",
|
||||
"이름": "조종원",
|
||||
"단위": "인",
|
||||
"수량": "기계:건설품셈:{기계}.조종원 / 8",
|
||||
"비목": "노무비",
|
||||
"출처": "건설품셈 공통 8-1-3 6",
|
||||
"비고": "환산 근거 미확인 — 우선 하루 ÷ 8"
|
||||
}
|
||||
],
|
||||
"덧줄": [
|
||||
{
|
||||
"이름": "잡재료비",
|
||||
"식": "재료비 * 기계:건설품셈:{기계}.잡재료율 / 100",
|
||||
"비목": "재료비",
|
||||
"출처": "건설품셈 공통 8-4 주②"
|
||||
},
|
||||
{
|
||||
"이름": "기계손료",
|
||||
"식": "손료",
|
||||
"비목": "경비",
|
||||
"출처": "건설품셈 공통 8-1-6 2"
|
||||
}
|
||||
],
|
||||
"끝수": "손료 원 미만 버림(건설품셈 공통 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) · 합계 원문 규정 없음",
|
||||
"비고": "원문 운전경비 표에 주연료가 빈 기종(공기식 크롤러드릴 등 — 동력은 공기압축기) — 손료 + 조종원"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -737,7 +737,42 @@
|
||||
"결과단위": "원/m",
|
||||
"출처": "산림품셈 12-7-1",
|
||||
"소유": "공용",
|
||||
"입력": [],
|
||||
"입력": [
|
||||
{
|
||||
"이름": "지역",
|
||||
"고르기": [
|
||||
"전국평균",
|
||||
"전국",
|
||||
"서울",
|
||||
"경기",
|
||||
"강원",
|
||||
"충북",
|
||||
"충남",
|
||||
"전북",
|
||||
"경북",
|
||||
"경남",
|
||||
"부산",
|
||||
"제주",
|
||||
"대구",
|
||||
"인천",
|
||||
"대전",
|
||||
"울산",
|
||||
"세종",
|
||||
"전남광주"
|
||||
],
|
||||
"출처": "건설품셈 공통 8-1-7 5"
|
||||
},
|
||||
{
|
||||
"이름": "조종원직종",
|
||||
"고르기": [
|
||||
"1048",
|
||||
"1049",
|
||||
"1050"
|
||||
],
|
||||
"출처": "건설품셈 공통 8-1-3 5",
|
||||
"비고": "원문 운전사 구분에 기종 이름 없음 — 설계자가 고름(1048 건설기계운전사 · 1049 화물차운전사 · 1050 일반기계운전사)"
|
||||
}
|
||||
],
|
||||
"중간": [
|
||||
{
|
||||
"이름": "시공량",
|
||||
@@ -761,6 +796,15 @@
|
||||
"수량": "찾기(소요량:산림품셈:12-7-1 포장절단, 구분='보통인부').적용 / 시공량",
|
||||
"비목": "노무비"
|
||||
},
|
||||
{
|
||||
"종류": "로직",
|
||||
"요소": "로직(건설품셈:8 기계 시간당 경비(조종원직종 입력), 기계='4430-0400', 지역=지역, 조종원직종=조종원직종)",
|
||||
"이름": "커터(콘크리트 및 아스팔트용) 320~400㎜",
|
||||
"단위": "시간",
|
||||
"수량": "찾기(소요량:산림품셈:12-7-1 포장절단, 구분='커터').적용 * 8 / 시공량",
|
||||
"출처": "산림품셈 12-7-1",
|
||||
"비고": "해석: 1대 × 1일 8시간(건설품셈 공통 1-1) ÷ 일당 시공량"
|
||||
},
|
||||
{
|
||||
"종류": "재료",
|
||||
"요소": "재료:자체:커터 블레이드",
|
||||
@@ -782,7 +826,7 @@
|
||||
],
|
||||
"덧줄": [],
|
||||
"끝수": null,
|
||||
"비고": "막힘: 커터(4430-0400) 조종원직종 요소 빔 — 원문 8-1-3 5 운전사 구분에 커터 이름 없음 · 기계경비 못 부름 · 블레이드 · 물은 주③④ 글의 수를 식에 적음"
|
||||
"비고": "커터 조종원직종은 원문(건설품셈 공통 8-1-3 5) 운전사 구분에 이름 없음 — 설계자가 고름 · 블레이드 · 물은 주③④ 글의 수를 식에 적음"
|
||||
},
|
||||
{
|
||||
"열쇠": "12-7-2 줄눈설치",
|
||||
|
||||
@@ -672,7 +672,7 @@
|
||||
],
|
||||
"덧줄": [],
|
||||
"끝수": null,
|
||||
"비고": "해석: 채움 콘크리트 = 레디믹스트콘크리트 · 해석: 돌 이름을 채움·고임돌 표 종별로 맞춤(조약돌·호박돌 및 야면석 → 야면석 · 채움은 호박돌) · 줄눈 모르타르는 원문대로 메붙임에도 얹음 · 뒷길이 70 은 채움·고임돌 표에 없어 찾기 실패"
|
||||
"비고": "해석: 채움 콘크리트 = 레디믹스트콘크리트 · 해석: 돌 이름을 채움·고임돌 표 종별로 맞춤(조약돌·호박돌 및 야면석 → 야면석 · 채움은 호박돌) · 줄눈 모르타르는 원문대로 메붙임에도 얹음 · 뒷길이 70 은 찾기 실패 — 원문 표에 70 없음"
|
||||
},
|
||||
{
|
||||
"열쇠": "13-5-2 메붙임(장비)",
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"출처": "건설품셈 공통 2-1-1",
|
||||
"조건": { "직접노무비(억)": "범위", "시설": "고르기" },
|
||||
"값칸": { "면적": "㎡" },
|
||||
"범위규칙": "「1.5억 미만」 = 위 끝 제외 · 「500억 이상」 = 아래 끝 포함 · 「1.5 ∼ 3억」 등 = 양 끝 포함",
|
||||
"범위규칙": "이상·미만 · 원문 「1.5억 미만」 · 「1.5 ∼ 3억」 등 · 「500억 이상」 — 이웃 칸 끝이 겹쳐 아래 끝 포함으로 읽음",
|
||||
"줄": [
|
||||
{ "직접노무비(억)": [null, 1.5], "시설": "현장사무소 감독・감리자", "면적": 40 },
|
||||
{ "직접노무비(억)": [null, 1.5], "시설": "현장사무소 수급자", "면적": 50 },
|
||||
@@ -66,7 +66,7 @@
|
||||
"출처": "건설품셈 공통 2-1-2",
|
||||
"조건": { "직접노무비(억)": "범위", "시설": "고르기" },
|
||||
"값칸": { "면적": "㎡" },
|
||||
"범위규칙": "「1.5억 미만」 = 위 끝 제외 · 「500억 이상」 = 아래 끝 포함 · 「1.5 ∼ 3억」 등 = 양 끝 포함",
|
||||
"범위규칙": "이상·미만 · 원문 「1.5억 미만」 · 「1.5 ∼ 3억」 등 · 「500억 이상」 — 이웃 칸 끝이 겹쳐 아래 끝 포함으로 읽음",
|
||||
"줄": [
|
||||
{ "직접노무비(억)": [null, 1.5], "시설": "현장사무소 감독・감리자", "면적": 30 },
|
||||
{ "직접노무비(억)": [null, 1.5], "시설": "현장사무소 수급자", "면적": 30 },
|
||||
@@ -3006,7 +3006,7 @@
|
||||
"출처": "건설품셈 공통 2-12-4 2",
|
||||
"조건": { "명칭": "고르기", "추진관경(㎜)": "범위" },
|
||||
"값칸": { "수량": "줄 따름" },
|
||||
"범위규칙": "「300∼600」 등 양 끝 포함",
|
||||
"범위규칙": "이상·이하 · 원문 「300∼600」 등 양 끝 포함",
|
||||
"줄": [
|
||||
{ "명칭": "중급기술자", "단위": "인", "추진관경(㎜)": [300, 600], "수량": 1 },
|
||||
{ "명칭": "중급기술자", "단위": "인", "추진관경(㎜)": [700, 900], "수량": 1 },
|
||||
@@ -3045,7 +3045,7 @@
|
||||
"출처": "건설품셈 공통 2-12-4 4",
|
||||
"조건": { "토질별": "고르기", "관경(㎜)": "범위", "추진장(m)": "범위" },
|
||||
"값칸": { "작업능력": "m/일" },
|
||||
"범위규칙": "「300∼500」 등 양 끝 포함 · 추진장 「0∼10m」 · 「0∼20m」 등은 원문 그대로 겹친 누적 구간(양 끝 포함)",
|
||||
"범위규칙": "이상·이하 · 원문 「300∼500」 등 양 끝 포함 · 추진장 「0∼10m」 · 「0∼20m」 등은 원문 그대로 겹친 누적 구간 — 위 끝이 가장 작은 줄",
|
||||
"줄": [
|
||||
{ "토질별": "점토・실트", "관경(㎜)": [300, 500], "추진장(m)": [0, 10], "작업능력": 13 },
|
||||
{ "토질별": "점토・실트", "관경(㎜)": [300, 500], "추진장(m)": [0, 20], "작업능력": 12 },
|
||||
|
||||
@@ -501,16 +501,16 @@
|
||||
"조건": { "사용횟수": "고르기" },
|
||||
"값칸": { "합판": "%", "소모자재": "%" },
|
||||
"줄": [
|
||||
{ "사용횟수": "1회", "합판": 55.0, "소모자재": 4.0 },
|
||||
{ "사용횟수": "2회", "합판": 44.3, "소모자재": 7.0 },
|
||||
{ "사용횟수": "3회", "합판": 38.0, "소모자재": 8.0 },
|
||||
{ "사용횟수": "4회", "합판": 35.0, "소모자재": 9.0 },
|
||||
{ "사용횟수": "5회", "합판": 32.7, "소모자재": 10.0 },
|
||||
{ "사용횟수": "6회", "소모자재": 11.0 }
|
||||
{ "사용횟수": "1회", "소모자재": 4.0 },
|
||||
{ "사용횟수": "2회", "합판": 55.0, "소모자재": 7.0 },
|
||||
{ "사용횟수": "3회", "합판": 44.3, "소모자재": 8.0 },
|
||||
{ "사용횟수": "4회", "합판": 38.0, "소모자재": 9.0 },
|
||||
{ "사용횟수": "5회", "합판": 35.0, "소모자재": 10.0 },
|
||||
{ "사용횟수": "6회", "합판": 32.7, "소모자재": 11.0 }
|
||||
],
|
||||
"주": [
|
||||
"소모자재(박리재 등)는 주자재비의 %",
|
||||
"합판 6회 값은 원문 「-」(빈칸)"
|
||||
"합판 1회는 수량 칸(1.03㎡)이라 %가 없음"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"그룹": "인력",
|
||||
"원문": "자체",
|
||||
"판": "2026-09-19",
|
||||
"비고": "건설노임에 없는 직종 — 이름·단위만 · 값은 관리자가 채움 · 다른 직종에 대응시키지 않음",
|
||||
"줄": [
|
||||
{ "열쇠": "중급기술자", "이름": "중급기술자", "규격": "", "단위": "원/일", "값": null, "출처": "자체", "비고": "건설품셈 공통 2-9-12 · 2-11-8 · 2-11-9 · 2-12-4 작업편성인원 · 5-1-7 인장 · 건설품셈 유지관리 1-1-2" },
|
||||
{ "열쇠": "절단공", "이름": "절단공", "규격": "", "단위": "원/일", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-2-5" },
|
||||
{ "열쇠": "특수비계공", "이름": "특수비계공", "규격": "", "단위": "원/일", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-6 설치 및 해체(해체)" },
|
||||
{ "열쇠": "초급기술자", "이름": "초급기술자", "규격": "", "단위": "원/일", "값": null, "출처": "자체", "비고": "건설품셈 유지관리 2-4-3" }
|
||||
]
|
||||
}
|
||||
@@ -4,10 +4,10 @@
|
||||
"판": "2026-09-19",
|
||||
"비고": "공시에 없는 재료 — 이름·규격·단위만 · 값은 관리자가 물가지·견적으로 채움",
|
||||
"줄": [
|
||||
{ "열쇠": "레미콘", "이름": "레디믹스트콘크리트", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "건설품셈 공통 7-3-1 주⑥ 채움콘크리트 · 산림품셈 12-9-1 · 12-11-1 · 12-11-2-1 · 12-12 · 12-13 · 12-15 · 12-16 · 12-17-2 · 12-17-3 · 13-4-4 주① · 13-4-5 · 13-5-1 주⑤ · 13-5-2 · 규격(강도·골재·슬럼프)별 값이 다르면 관리자가 줄을 나눔" },
|
||||
{ "열쇠": "시멘트", "이름": "시멘트", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "산림품셈 12-1-3 주⑤⑥ · 12-17-1-2 주③" },
|
||||
{"열쇠": "레미콘", "이름": "레디믹스트콘크리트", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 12-9-1 · 12-11-1 · 12-11-2-1 · 12-12 · 12-13 · 12-15 · 12-16 · 12-17-2 · 12-17-3 · 13-4-4 주① · 13-4-5 · 13-5-1 주⑤ · 13-5-2 · 규격(강도·골재·슬럼프)별 값이 다르면 관리자가 줄을 나눔 · 건설품셈 공통 7-3-1 주⑥ 채움콘크리트"},
|
||||
{"열쇠": "시멘트", "이름": "시멘트", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "산림품셈 12-1-3 주⑤⑥ · 12-17-1-2 주③ · 건설품셈 공통 6-3-1 주⑤"},
|
||||
{ "열쇠": "모래(중량)", "이름": "모래", "규격": "건조상태", "단위": "kg", "값": null, "출처": "자체", "비고": "산림품셈 12-1-3 주⑤" },
|
||||
{ "열쇠": "모래", "이름": "모래", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 12-11-3 · 12-17-1-2 주③" },
|
||||
{ "열쇠": "모래", "이름": "모래", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 12-11-3 · 12-17-1-2 주③ · 건설품셈 공통 6-3-1 주⑤" },
|
||||
{ "열쇠": "자갈(중량)", "이름": "자갈 또는 부순돌", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "산림품셈 12-1-3 주⑤" },
|
||||
{ "열쇠": "자갈", "이름": "자갈", "규격": "", "단위": "㎥", "값": null, "출처": "자체", "비고": "산림품셈 12-17-1-2 주③" },
|
||||
{ "열쇠": "이형철근", "이름": "이형철근", "규격": "", "단위": "ton", "값": null, "출처": "자체", "비고": "산림품셈 12-15 · 12-16" },
|
||||
@@ -17,14 +17,14 @@
|
||||
{ "열쇠": "강봉 D32㎜", "이름": "강봉", "규격": "D32㎜, L=1000㎜", "단위": "EA", "값": null, "출처": "자체", "비고": "산림품셈 12-30-1" },
|
||||
{ "열쇠": "사다리", "이름": "사다리", "규격": "∅19㎜ 아연도금 및 스테인레스", "단위": "ton", "값": null, "출처": "자체", "비고": "산림품셈 12-16" },
|
||||
{ "열쇠": "고철", "이름": "고철", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "산림품셈 9-8-1 주4 · 12-34-3" },
|
||||
{ "열쇠": "폼타이", "이름": "폼타이(Form Tie)", "규격": "D형 1/2인치", "단위": "본", "값": null, "출처": "자체", "비고": "산림품셈 12-4 주⑦" },
|
||||
{ "열쇠": "폼타이", "이름": "폼타이(Form Tie)", "규격": "D형 1/2인치", "단위": "본", "값": null, "출처": "자체", "비고": "산림품셈 12-4 주⑦ · 건설품셈 공통 6-3-1 주④" },
|
||||
{ "열쇠": "문양 스티로폴", "이름": "문양 스티로폴(자재비 포함)", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "산림품셈 12-5" },
|
||||
{ "열쇠": "커터 블레이드", "이름": "커터 블레이드", "규격": "320~400㎜", "단위": "개", "값": null, "출처": "자체", "비고": "산림품셈 12-7-1 주③" },
|
||||
{ "열쇠": "물", "이름": "물", "규격": "", "단위": "ℓ", "값": null, "출처": "자체", "비고": "산림품셈 12-7-1 주④" },
|
||||
{ "열쇠": "철재 거푸집", "이름": "철재 거푸집(콘크리트 포장)", "규격": "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 재료량 · 건설품셈 공통 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" },
|
||||
@@ -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" },
|
||||
@@ -85,6 +85,64 @@
|
||||
{ "열쇠": "차선도색 프라이머", "이름": "프라이머", "규격": "융착식 도료 차선도색용", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-8-9 융착식 도료 수동식 재료" },
|
||||
{ "열쇠": "낙석방지망 철망", "이름": "철망", "규격": "낙석방지망용", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-9-4 낙석방지망 재료(참고자료)" },
|
||||
{ "열쇠": "결속선", "이름": "결속선", "규격": "", "단위": "m", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-9-4 낙석방지망 재료(참고자료)" },
|
||||
{ "열쇠": "에폭시", "이름": "에폭시", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-9-4 낙석방지망 재료(참고자료) · 포켓식만" }
|
||||
{ "열쇠": "에폭시", "이름": "에폭시", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 토목 1-9-4 낙석방지망 재료(참고자료) · 포켓식만" },
|
||||
{"열쇠": "에폭시 신구콘크리트 접착제", "이름": "Epoxy 신구-콘크리트 접착제", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-1-5"},
|
||||
{"열쇠": "에폭시 콘크리트고무 접착제", "이름": "Epoxy-콘크리트 고무 접착제", "규격": "", "단위": "kg", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-1-5"},
|
||||
{"열쇠": "폼타이 9.5㎜", "이름": "폼타이(Form Tie)", "규격": "9.5㎜", "단위": "본", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-1 주④"},
|
||||
{"열쇠": "폼타이 7.9㎜", "이름": "폼타이(Form Tie)", "규격": "7.9㎜", "단위": "본", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-1 주④"},
|
||||
{"열쇠": "강재거푸집", "이름": "강재거푸집", "규격": "두께 3.2㎜", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-2"},
|
||||
{"열쇠": "문양거푸집 판넬", "이름": "문양거푸집(판넬)", "규격": "", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-4"},
|
||||
{"열쇠": "합성수지 원형맨홀거푸집 ø740", "이름": "합성수지(P.E) 원형 맨홀 거푸집", "규격": "ø740", "단위": "조", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-5 주④"},
|
||||
{"열쇠": "합성수지 원형맨홀거푸집 ø900", "이름": "합성수지(P.E) 원형 맨홀 거푸집", "규격": "ø900", "단위": "조", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-3-5 주④"},
|
||||
{"열쇠": "합성수지 원형맨홀거푸집 ø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 주④"},
|
||||
{"열쇠": "조립식 가설건축물 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 재료량"},
|
||||
{"열쇠": "토목섬유 매트", "이름": "매트(합성수지 토목섬유)", "규격": "", "단위": "㎡", "값": 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 시트", "규격": "2∼2.5㎜", "단위": "㎡", "값": null, "출처": "자체", "비고": "건설품셈 공통 5-4-1 재료량"},
|
||||
{ "열쇠": "아세틸렌가스(ℓ)", "이름": "아세틸렌가스", "규격": "", "단위": "ℓ", "값": null, "출처": "자체", "비고": "건설품셈 공통 6-2-5 · 원문 ℓ 단위(나라장터 20204095 는 kg)" }
|
||||
]
|
||||
}
|
||||
|
||||
@@ -316,3 +316,45 @@ def test_로직_검사가_틀린_열쇠를_잡음(whole):
|
||||
|
||||
def test_돌고_도는_참조():
|
||||
assert mf.find_loops({"가": {"나"}, "나": {"가"}}) == [["가", "나", "가"]]
|
||||
|
||||
|
||||
def test_찾기_값칸_있는_줄만():
|
||||
table = {
|
||||
"열쇠": "시험",
|
||||
"조건": {"구분": "고르기", "높이": "고르기"},
|
||||
"줄": [
|
||||
{"구분": "비계공", "수량": 3},
|
||||
{"높이": "4m이하", "시공량(m)": 100},
|
||||
{"높이": "7m이하", "시공량(m)": 70},
|
||||
],
|
||||
}
|
||||
assert mf.find(table, {"구분": "비계공"}, "수량")["수량"] == 3
|
||||
assert mf.find(table, {"높이": "7m이하"}, "시공량(m)")["시공량(m)"] == 70
|
||||
with pytest.raises(mf.FormulaError):
|
||||
mf.find(table, {"높이": "7m이하"})
|
||||
assert mf.parse("찾기(소요량:건설품셈:시험, 높이='7m이하').'시공량(m)'")[2] == "시공량(m)"
|
||||
assert (
|
||||
mf.parse("찾기(소요량:건설품셈:시험, '규준틀 높이'=높이).수량")[1][2][0][0] == "규준틀 높이"
|
||||
)
|
||||
assert (
|
||||
mf.parse("찾기(소요량:건설품셈:5-1-1 P.P마대 쌓기, 구분=구분).수량")[1][1]
|
||||
== "소요량:건설품셈:5-1-1 P.P마대 쌓기"
|
||||
)
|
||||
|
||||
|
||||
def test_범위규칙_이상이하():
|
||||
table = {
|
||||
"열쇠": "시험",
|
||||
"조건": {"길이": "범위"},
|
||||
"범위규칙": "이상·이하 · 겹친 누적 구간",
|
||||
"줄": [
|
||||
{"길이": [0, 10], "값": 1},
|
||||
{"길이": [0, 20], "값": 2},
|
||||
{"길이": [30, 40], "값": 3},
|
||||
],
|
||||
}
|
||||
assert mf.find(table, {"길이": Decimal(10)})["값"] == 1
|
||||
assert mf.find(table, {"길이": Decimal(15)})["값"] == 2
|
||||
assert mf.find(table, {"길이": Decimal(30)})["값"] == 3
|
||||
with pytest.raises(mf.FormulaError):
|
||||
mf.find(table, {"길이": Decimal(25)})
|
||||
|
||||
Reference in New Issue
Block a user