Files
Aislo/resources/tester/test_782_1_carry_127.py
eomsangdonandClaude Opus 5.5 a8ed3390e9 feat(782-2): 건설 공통 1장 나머지 기초 — 계수 표 33 · 환경관리비 · 공사용수 로직 · 성격 칸 · check_master 목차 대조
- 계수_건설품셈_01장_적용기준.json 덧(CC000495~527): 규칙 · 계수만 절(1-2-2 · 1-2-3 · 1-2-4 · 1-2-5 · 1-2-6 · 1-2-8 · 1-3-2 · 1-4-1 · 1-4-2 · 1-5-1~10)마다 「규칙 글」 표(원문 글 그대로) + 수 표(단위 · 소수 표준 · 금액 단위 · 체적 변화율 L · C · 체적환산계수 f · 파쇄된 돌 10∼40% · 잡재료 2∼5% · 작업반장 · 공구손료 3% · 시공단위 품 소수자리 · 품 산정 식 · 예시 · 건설폐기물 발생량 · 공사용수) · 1-2-9 소규모 적용시공량 · 다수 규격 예시 = 계수로만
- 표 칸 「성격」 — 기존 1-3 · 1-4 표 33 + 1-2-9 둘(같은 성격 묶음 · 1-2-9 ↔ 1-4-6 작업시간 제한 한 성격) · 기존 표의 다른 글자 그대로
- 로직_건설품셈_01장_적용기준.json 덧: GC001192 건설폐기물 발생량(1-5-4 · 면적 × TON/㎡ × 폐콘크리트 증가율) · GC001193 공사용수(1-5-6 · 작업량 × 단위용수 × 잡용수율) · 원문 「-」 칸 = 줄 없음(멈춤)
- 1-2-9 소규모 · 1-4 품의 할증 로직 = 만들지 않음(PLAN 783-1)
- 빌더 덧 build_로직_건설품셈_01장_적용기준.py 나머지(+ _적용기준_나머지_표 · _적용기준_나머지_로직) · 키 = master_keys.issue(adopt 는 로직을 받지 않음)
- check_master 「목차」(check_master_toc.py) — 공통 1장 원문 절 목록 ↔ 마스터 전수 · 통째 빠진 절 · 로직 없는 품·표·식 절 · 1-2-9 · 1-4-2 = 783-1 로 미룸 표지
- 지킴 시험 test_782_2_common_ch1.py · test_782_1_carry_127.py 로직 줄 목록 = 앞 셋만 봄(같은 파일에 1-5 로직이 붙어 낡음)
- check_master 전후 같음(+ 목차 0) · 기존 로직 1513 셈 값 전후 같음 · 계산전부 1515

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 20:42:38 +09:00

101 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""782-1 건설 공통 1-2-7 운반 기초 — 계수 표 여덟 · 로직 셋 · 실무 소운반 재현 넷 · check_master."""
import sys
from decimal import Decimal
from pathlib import Path
import pytest
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "master_data/scripts"))
import check_master as cm # noqa: E402
import master_formula as mf # noqa: E402
COEF = "계수_건설품셈_01장_적용기준.json"
LOGIC = "로직_건설품셈_01장_적용기준.json"
JIGE = "GC001140"
BASE = {
"재료종별": "암석",
"재료형상": "화강암",
"회당운반량": 0,
"실작업시간": 0,
"경사각도": 0,
"재료갈래": "석재류",
"운반로": "불량",
"운반회수": 0,
}
@pytest.fixture(scope="module")
def whole():
return cm.master()
def qty(whole, ref, **given) -> Decimal:
line = mf.run(whole, ref, {**BASE, **given} if ref == JIGE else given)["줄"][0]
return line["수량"].quantize(Decimal("0.000001"))
@pytest.mark.parametrize(
"given, want",
[
# 북부청 임도 단산10 야면석소운반 — 엑셀이 1일 운반횟수 42 를 값으로 넣음
({"운반무게": 575, "운반거리": 6, "경사각도": 35, "운반회수": 42}, "0.547619"),
# 동부청 영월 D01466 야면석소운반 — L 20 · V 2,000 · t 2
({"운반무게": 575, "운반거리": 20}, "0.163556"),
# 동부청 영월 D00450 콘크리트소운반 — 단위중량 표 콘크리트 2,300㎏
(
{"운반무게": 0, "재료종별": "콘크리트", "재료형상": "해당 없음", "운반거리": 20},
"0.654222",
),
# 북부청 사방 단산17 떼소운반 — 33㎏ · 운반회수 100
({"운반무게": 33, "운반거리": 20, "운반회수": 100}, "0.013200"),
],
)
def test_재현(whole, given, want):
assert qty(whole, JIGE, **given) == Decimal(want)
def test_북부청_금액(whole):
got = mf.run(whole, JIGE, {**BASE, "운반무게": 575, "운반거리": 6, "운반회수": 42})
line = got["줄"][0]
assert line["이름"] == "보통인부"
if line["단가"] == 172068: # 2026 상반기 건설노임 — 엑셀 94,227.7
assert round(line["금액"], 1) == Decimal("94227.7")
def test_경사_환산_식(whole):
# α 35° = 8 → 환산 48m · V 2,000 · t 2 · T 450 → N 92.21 → 575/25/N
got = mf.run(whole, JIGE, {**BASE, "운반무게": 575, "운반거리": 6, "경사각도": 35})
assert got["중간"]["환산계수"] == 8
assert got["중간"]["작업시간"] == 450
assert got["줄"][0]["수량"].quantize(Decimal("0.000001")) == Decimal("0.249422")
def test_기계설비_벽돌(whole):
given = {
"운반무게": 100,
"재료종별": "암석",
"재료형상": "화강암",
"회당운반량": 0,
"실작업시간": 0,
"운반거리": Decimal("0.1"),
"경사각도": 0,
"도로상태": "보통",
}
# 4인 ÷ 450분 × (60 × 2 × 0.1 / 1.5 + 2)
assert qty(whole, "GC001141", **given) == Decimal("0.088889")
assert qty(whole, "GC001142", 운반="인력", 층수=3) == Decimal("0.74")
assert qty(whole, "GC001142", 운반="리프트", 층수=5) == Decimal("0.31")
def test_check_master():
files, whole = cm.load([COEF, LOGIC]), cm.master()
found = [x for name, data in files.items() for x in cm.check_form(name, data)]
found += cm.check_body(files) + cm.check_logics(files, whole)
assert found == []
keys = {t["키"] for t in files[COEF]["표"] if t["원문번호"] == "1-2-7"}
assert keys == {f"CC000{n}" for n in range(341, 349)}
assert [r["키"] for r in files[LOGIC]["줄"]][:3] == ["GC001140", "GC001141", "GC001142"]