fix(793-3b): 우리 기초로 바꾸기 — 옵션 = 블록 풀이 후보 바인딩 · 단위 성격 다르면 환산 계수 입력 필요 · 가져온 식 시트 M01 바뀜 표지 걷음

- to-base 몸 환산? · 환산 없이 단위 성격 다름 = 후 None · 필요 ["환산"](막지 않음 · 화면 붉은 칸)
- 화면 bind = 블록 풀이 그 기초 후보 바인딩(엑셀 값 · 기본) + 블록 검산 입력 필요 · 줄 검산(빈 입력값)은 옵션을 못 읽었음
- 가져온 식 SK = M01 짝 없음 — 시트 M01바뀜 · 짝잃음 안 띄움(저장 M01판이 바탕 줄과 달라 늘 떴음)
- 시험 test_793_3b 8

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-05 18:26:07 +09:00
co-authored by Claude Opus 5.5
parent ca72718e26
commit 5a6cccd997
9 changed files with 110 additions and 32 deletions
@@ -144,3 +144,47 @@ def test_부품상자만_700줄_공용_안_고침():
assert "#" not in "".join(re.findall(r"color:\s*[^;]+", text)), name
for name in ("Labor_Rows", "Labor_SangeunModal", "Sangeun_Detail", "Sangeun_Sheet"):
assert "Hopyo_Imported" not in _src(name), name # 공용 쪽은 새 모달을 모름
def test_가져온_식_시트_M01바뀜_없음(client):
"""가져온 식 SK 는 M01 짝이 없음 — 저장 M01판이 있어도 시트 「M01 바뀜」 · 짝잃음 안 띄움."""
from M02_MasterTemplete import M02_Sangeun_Calc as calc
client.app.include_router(sangeun_router.router)
assert _post(client).status_code == 200
name = _open(client).json()["이름"]
folder = layers.personal_dir(7, 42)
with store.at(folder):
doc = store.read("sangeun", name)["문서"]
spots = list(calc.calc_doc(doc)["시트"]["자리"])
ans = calc.calc_doc({**doc, "M01판": {k: "다름" for k in [*spots, "x"]}})
sheet = ans["시트"]
assert sheet["자리"] and not any(x["M01바뀜"] for x in sheet["자리"].values())
assert sheet["짝잃음"] == []
def test_우리_기초로_바꾸기_환산_입력_필요(tmp_path):
"""북부청 단산10 야면석소운반(㎡) → GC001140(원/자재 단위) — 환산 없으면 후 None ·
필요 「환산」 · 블록 풀이 바인딩 옵션 + 계수 1 = 엑셀 94,227(품 같음)."""
from M02_MasterTemplete import M02_Hopyo_Store as hs
from M02_MasterTemplete import M02_Sangeun_Imported as imp
path = golden.FILES["북부청임도"]
if not path.exists():
pytest.skip("실무 엑셀 없음")
hs._dir(tmp_path).mkdir(parents=True)
(hs._dir(tmp_path) / f"{KEY}.json").write_text(f'{{"키": "{KEY}", "판": {hs.BOOK}}}', "utf-8")
fh.keep(tmp_path, KEY, path.name, path.read_bytes())
out = fh.emit(tmp_path, KEY, 10)
doc = {"키": "SK-000000", "이름": "야면석소운반", "단위": "㎡", "바탕": None, "입력값": {}}
doc[imp.KEY] = {"로직": out["로직"], "단가기준": "엑셀", "원본": out["원본"]}
given = {"운반거리": 6, "경사각도": 35, "운반회수": 42, "운반무게": 575, "회당운반량": 25}
given |= {"재료종별": "암석", "재료형상": "해당 없음", "재료갈래": "토사류", "운반로": "양호"}
given |= {"실작업시간": 0}
bare = imp.to_base(doc, "GC001140", given)
assert bare["후"] is None and bare["필요"] == ["환산"] and round(bare["전"]["계"]) == 94227
got = imp.to_base(doc, "GC001140", given, {"계수": 1})
assert (
"필요" not in got and round(got["후"]["계"]) == 94227 and got["문서"]["환산"] == {"계수": 1}
)
assert got["문서"]["바탕"] == {"로직": "GC001140"} and got["문서"][imp.KEY]["바꿈"]["전"]