Merge remote-tracking branches 'origin/sub_laptop_1', 'origin/sub_laptop_2' and 'origin/sub_laptop_4' into main_desktop_1
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
# 단위 환산 원문 · `_단위_환산_필요.md` ㉮ 18줄
|
||||
|
||||
본문에서 본 값만 적음. 「없음」 = 건설·산림 표준품셈 본문 전체에서 찾지 못함. 값 확정·엔진 적용은 이 문서 밖.
|
||||
|
||||
원문 자리 약칭: 건 = 건설공사 표준품셈 · 산 = 산림사업 표준품셈.
|
||||
|
||||
## 값이 있는 것
|
||||
|
||||
| 키 | 재료 | 필요한 환산 | 원문 자리 | 값 | 계수 키 |
|
||||
|---|---|---|---|---|---|
|
||||
| MP000003 | 모래 | ㎥ ↔ kg | 건 공통 1-2-4 · 3. 재료의 단위 중량 표 (건설 본문 `1-02_설계_및_수량.md`) | 건조 1,500∼1,700 · 습기 1,700∼1,800 · 포화 1,800∼2,000 ㎏/㎥ (범위값 · 자연상태) | 없음 (표가 계수 요소로 안 올라 있음) |
|
||||
| MP000135 | 철근 | m ↔ ton | 같은 표 | 강·주강·단철 7,850 ㎏/㎥ 만 있음 · 철근 ㎏/m 표(호칭별 단위중량) 없음 | 없음 (산 9-8-1·9-8-2 에 「고철 단위중량 7850 kg/㎥」 요소만 있음: CF000104 · CF000105) |
|
||||
| MP000185 | 실링재 | m ↔ kg | 산 12-27-3 실런트(20×25mm) | 자재 실런트 0.70 · 비고 「0.02×0.025×1400kg/㎥」 (단면 20×25㎜ · 밀도 1,400 ㎏/㎥) — 원문 단위 칸은 ㎥ 로 찍혀 식의 kg 과 어긋남 | QF000401 (소요량 · 비고 글로만) |
|
||||
| MP000069 | 우드칩 | ㎥ ↔ ㎡ | 산 6-8 목재칩 포설 | ㎡당 우드칩 0.11 ㎥ (분쇄목 T10cm 기준) · 소운반 0.11 Ton 이 같은 ㎡당 표에 병기 — 환산비는 안 적혀 있음 | QF000177 (소요량) |
|
||||
| MP000193 | 혼화제 | g ↔ kg | 건 9-2 콘크리트면 마무리 · 전면 마감 재료량 | 혼화제 22.7 g · 시멘트 14.3 ㎏ (같은 표 · 환산 문구 없음, g↔kg 비는 SI 정의) | QC001356 (소요량) |
|
||||
|
||||
## 없음
|
||||
|
||||
| 키 | 재료 | 필요한 환산 | 찾은 자리 | 값 |
|
||||
|---|---|---|---|---|
|
||||
| MP000011 | 강봉 | 개 ↔ m | 산 12-30 다웰바 설치 (강봉 EA 별도계상) | 없음 |
|
||||
| MP000014 · 085 · 086 | 폼타이 | 본 ↔ 조 | 건 6-3 거푸집 [주] ② 「폼타이 사용시 소요수량은 6-3-1 합판거푸집 자재 기준」 | 없음 (1조=몇 본 문구 없음) |
|
||||
| MP000022 | 잡석 | ㎥ ↔ EA | 건 1-2-3 용어 「잡석 = 지름 10∼30㎝」 | 없음 (개당 부피·무게 없음) · 단위중량 표에도 잡석 줄 없음 (사석 2,000 · 호박돌 1,800∼2,000 ㎏/㎥ 는 다른 종별) |
|
||||
| MP000103 | CANOPY(출입구채양) | 매 ↔ 개 | 건 2-2 손율 표 · 「CANOPY(출입구채양) 600×1,200㎜ 매」 | 원문 단위는 매 뿐 · 개 환산 없음 (QC000012) |
|
||||
| MP000107 | 중도리(PURIN) | 개 ↔ m | 건 2-2 손율 표 · 「중도리(PURIN) 두께:2.0이상」 | 길이 없음 (QC000012) |
|
||||
| MP000109 | T-BAR | m ↔ kg | 건 2-2 손율 표 · 「T-BAR m 1.53」 | m 당 무게 없음 (QC000012) |
|
||||
| MP000126 | 사다리(플라잉넷) | m ↔ 개 | 건 2-8-2 낙하물 방지망 재료량 | 사다리 「폭 30㎝×길이 3m 기준」 ㎡당 0.111 m · 개 환산 없음 (QC000073 · QC000074) |
|
||||
| MP000219 · 300 | 규사 | ㎥ ↔ kg | 건 1-8 교통시설공 (열경화성 아크릴수지+규사 도포) | 단위중량 없음 · 단위중량 표에도 규사 줄 없음 |
|
||||
| MP000252 | 기름 | ℓ ↔ 본 | 본문 전체 | 병 용량 없음 |
|
||||
| MP000292 | 함석 | 대 ↔ 매 | 건 2-1 가설물의 한도 · 「함석 #28.90㎝×180㎝ 매」 | 1매 규격만 있음 · 「대」 단위 없음 (QC000004 · QC000005) |
|
||||
|
||||
## 그 밖에 본 값
|
||||
|
||||
- 자갈 ㎥ ↔ kg (`_단위_환산_필요.md` ㉰ MP000005): 같은 1-2-4 · 3. 표 — 자갈 건조 1,600∼1,800 · 습기 1,700∼1,800 · 포화 1,800∼1,900 ㎏/㎥.
|
||||
- 시멘트: 같은 표 3,150(비중) · 1,500(자연상태) ㎏/㎥ · 산 10-1 시멘트운반 「40kg 포대 기준」.
|
||||
- 덤프 적재 단위중량: 산 10-12 [주] ② 토사 1.9 ton/㎥ · 암절취·발파암 2.4 ton/㎥ (QF000338 · 모래 값 아님).
|
||||
- 표에 없는 품종: 1-2-4 · 3. [주] ② 「단위중량 시험에 의해 결정함을 원칙」.
|
||||
@@ -479,7 +479,12 @@ def run(master: Master, ref: str, given: dict, depth: int = 0) -> dict:
|
||||
)
|
||||
else:
|
||||
# 고르기 조건 묶음은 그대로 넘김 — `element` 가 대표 줄·첫 줄로 풂
|
||||
ref = item["요소"] if isinstance(item["요소"], dict) else fill(item["요소"], env)
|
||||
# 조건 값의 `{입력}`(관경 등)도 채움 — 규격이 입력 따라 바뀌는 관 줄
|
||||
ref = (
|
||||
{k: fill(v, env) if isinstance(v, str) else v for k, v in item["요소"].items()}
|
||||
if isinstance(item["요소"], dict)
|
||||
else fill(item["요소"], env)
|
||||
)
|
||||
try:
|
||||
price, source = element(master, ref, env, item.get("단위"))
|
||||
except FormulaError:
|
||||
@@ -704,6 +709,7 @@ from master_material import ( # noqa: E402, F401
|
||||
candidates,
|
||||
check_pick,
|
||||
check_unit,
|
||||
static,
|
||||
cond_text,
|
||||
element,
|
||||
pick,
|
||||
|
||||
@@ -106,6 +106,11 @@ def _candidates(master: mf.Master, ref: str, row: dict, env: dict) -> list[str]:
|
||||
|
||||
|
||||
# ── 재료 고르기 ────────────────────────────────────────────────────────
|
||||
def static(cond: dict) -> dict:
|
||||
"""검사용 조건 — 값에 `{입력}` 이 든 칸은 뺌(계산 때 채워짐)."""
|
||||
return {k: v for k, v in cond.items() if not (isinstance(v, str) and "{" in v)}
|
||||
|
||||
|
||||
def cond_text(cond: dict) -> str:
|
||||
"""고르기 조건 한 글자 열쇠 — 「구분|상세구분|규격|대표」 · 화면 단가 미리보기가 줄을 찾는 이름."""
|
||||
return "|".join(str(cond.get(k) or "") for k in PICK_KEYS)
|
||||
@@ -147,6 +152,7 @@ def pick(master: mf.Master, cond: dict, env: dict, unit: str | None = None) -> s
|
||||
def check_unit(master: mf.Master, where: str, cond: dict, unit: str | None) -> list[str]:
|
||||
"""단위 경고 — 호표 줄·품셈재료 줄 단위와 맞는 후보가 없거나 대표 줄 단위가 다름.
|
||||
틀린 데이터가 아니라 좁혀야 할 조건이라 `check_pick` 과 따로 봄(`check_master 단위`)."""
|
||||
cond = static(cond)
|
||||
rows = master.index.get(MARKET, {})
|
||||
rep = str(cond.get("대표") or "")
|
||||
if not unit or set(cond) - set(PICK_KEYS) or not cond.get("구분"):
|
||||
@@ -163,9 +169,11 @@ def check_unit(master: mf.Master, where: str, cond: dict, unit: str | None) -> l
|
||||
|
||||
|
||||
def check_pick(master: mf.Master, where: str, cond: dict, unit: str | None = None) -> list[str]:
|
||||
"""고르기 조건 검사 — 칸 이름 · 구분·상세구분이 자재품목에 있는지 · 대표 줄 · 후보 0."""
|
||||
"""고르기 조건 검사 — 칸 이름 · 구분·상세구분이 자재품목에 있는지 · 대표 줄 · 후보 0.
|
||||
값에 `{입력}` 이 든 칸(관경 등)은 계산 때 채워지므로 검사에서 뺌."""
|
||||
if set(cond) - set(PICK_KEYS) or not cond.get("구분"):
|
||||
return [f"{where} · 재료 고르기 조건 모양 「{cond}」 — {' · '.join(PICK_KEYS)}"]
|
||||
cond = static(cond)
|
||||
out, rows = [], master.index.get(MARKET, {})
|
||||
for slot in ("구분", "상세구분"):
|
||||
if cond.get(slot) and not any(r.get(slot) == cond[slot] for r in rows.values()):
|
||||
|
||||
@@ -1989,7 +1989,11 @@
|
||||
},
|
||||
{
|
||||
"종류": "재료",
|
||||
"요소": "MP:흄관 ∅{관경}㎜",
|
||||
"요소": {
|
||||
"구분": "관·이음관",
|
||||
"상세구분": "흄관",
|
||||
"규격": "{관경}"
|
||||
},
|
||||
"이름": "흄관",
|
||||
"단위": "m",
|
||||
"수량": "찾기(QF000371, 구분='흄관', 관경=관경).적용",
|
||||
@@ -2133,7 +2137,11 @@
|
||||
"호표": [
|
||||
{
|
||||
"종류": "재료",
|
||||
"요소": "MP:파형강관 ∅{관경}㎜",
|
||||
"요소": {
|
||||
"구분": "관·이음관",
|
||||
"상세구분": "파형강관",
|
||||
"규격": "{관경}"
|
||||
},
|
||||
"이름": "파형강관",
|
||||
"단위": "m",
|
||||
"수량": "찾기(QF000373, 구분='파형강관', 관경=관경).적용",
|
||||
|
||||
@@ -952,3 +952,12 @@ def test_단위_경고는_로직_검사와_따로():
|
||||
assert cm.check_logics(files, whole) == []
|
||||
warned = cm.check_units(files, whole)
|
||||
assert warned and all("단위" in x for x in warned)
|
||||
|
||||
|
||||
def test_고르기_조건의_입력_자리_채움(whole):
|
||||
"""관경 같은 입력이 규격에 든 고르기 조건 — 계산 때 채워지고, 검사에서는 그 칸을 뺌."""
|
||||
cond = {"구분": "관·이음관", "상세구분": "파형강관", "규격": "{관경}"}
|
||||
assert mm.static(cond) == {"구분": "관·이음관", "상세구분": "파형강관"}
|
||||
assert mf.check_pick(whole, "시험", cond) == []
|
||||
채움 = {k: mf.fill(v, {"관경": Decimal(800)}) for k, v in cond.items()}
|
||||
assert mm.candidates(whole, 채움, None, "m")
|
||||
|
||||
Reference in New Issue
Block a user