feat(master_data): 재료 고르기 후보를 줄 단위와 같은 자재품목으로만 거름
- 엔진 — candidates·pick·element 에 unit · 호표 줄 단위를 그대로 넘김(우드칩 ㎥ 에 원목후로링 ㎡ 가 섞이던 자리) - 후보 API — /materials 에 unit · 단가 미리보기도 줄 단위로 거름 - check_master 「단위」 검사 새로 — 조건 안 줄이 모두 다른 단위거나 대표 줄 단위가 다른 자리 37건(로직 검사와 따로 — 조건을 좁히라는 알림) - 품셈재료 고르기 칸이 채워진 호표 줄 24개를 고르기 조건 묶음으로 바꿈 - 일괄 시험 계산 통과 1,270 → 1,272 · 시험 둘 더함 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
This commit is contained in:
@@ -913,8 +913,14 @@ def test_로직_일괄_시험계산():
|
||||
"""로직 전부를 시험 입력으로 돌림 — 멈춤은 데이터 결손(관리자 값·규격 미지정)만."""
|
||||
files = cm.load()
|
||||
passed, stuck = cm.calc_all(files, mf.Master(files))
|
||||
assert passed >= 1270
|
||||
남은_까닭 = ("관리자가 채울 값", "규격 선택 필요", "지역 값 없음", "맞는 줄")
|
||||
assert passed >= 1272
|
||||
남은_까닭 = (
|
||||
"관리자가 채울 값",
|
||||
"규격 선택 필요",
|
||||
"지역 값 없음",
|
||||
"맞는 줄",
|
||||
"고르기 후보 없음",
|
||||
)
|
||||
assert [x for x in stuck if not any(c in x for c in 남은_까닭)] == []
|
||||
|
||||
|
||||
@@ -926,3 +932,23 @@ def test_시험입력이_기본값을_이김():
|
||||
assert cm.시험입력(row) == {"지역": "전국평균", "깊이": 9}
|
||||
row["시험입력"] = {"지역": "포항"}
|
||||
assert cm.시험입력(row)["지역"] == "포항"
|
||||
|
||||
|
||||
def test_고르기_후보는_줄_단위와_같은_것만(whole):
|
||||
"""호표 줄 단위와 다른 자재품목 줄은 후보에서 뺌 — 우드칩(㎥)에 원목후로링(㎡)이 섞이지 않음."""
|
||||
cond = {"구분": "목재"}
|
||||
전부 = mm.candidates(whole, cond)
|
||||
한단위 = mm.candidates(whole, cond, None, "㎥")
|
||||
assert 0 < len(한단위) < len(전부)
|
||||
assert {mm.plain_unit(whole.get(k)["단위"]) for k in 한단위} == {mm.plain_unit("㎥")}
|
||||
쓸줄 = mm.pick(whole, cond, {}, "㎥")
|
||||
assert mm.plain_unit(whole.get(쓸줄)["단위"]) == mm.plain_unit("㎥")
|
||||
|
||||
|
||||
def test_단위_경고는_로직_검사와_따로():
|
||||
"""단위 경고는 조건을 좁히라는 알림 — 로직 검사(틀린 데이터)에 섞지 않음."""
|
||||
files = cm.load()
|
||||
whole = mf.Master(files)
|
||||
assert cm.check_logics(files, whole) == []
|
||||
warned = cm.check_units(files, whole)
|
||||
assert warned and all("단위" in x for x in warned)
|
||||
|
||||
Reference in New Issue
Block a user