feat(m01): 단위 후보 같은 성격인 빈 줄만 검색어로 (PLAN 8-3)

- 혼화제(GC000684) g ↔ kg — 검색어 「무수축혼화제」 · 단가 0 → 5 · 금액 변화 0(수량 0)
- 성격이 다른 11줄 · 값 빈 자리표 14줄은 그대로
- 도구: 빈 줄은 후보 단위가 같은 성격일 때만 바꿈 · 1,354 자동값 금액 변화 0 · check_master 로직 0 · 단위 16 → 15

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
This commit is contained in:
2026-09-24 21:13:57 +09:00
co-authored by Claude Sonnet 5
parent 3f581ca41b
commit d611aac675
2 changed files with 9 additions and 4 deletions
@@ -173,9 +173,14 @@ def convert(master: mf.Master, row: dict, item: dict) -> tuple[dict | None, list
words = [w for k in ("이름", "규격") for w in str(elem.get(k) or "").split()]
targets = {want for _, want in cases}
if targets == {None}:
# 지금 같은 단위 후보 0 인 빈 줄 — 검색어는 다른 단위 품목을 잡아 값이 생기거나(금액 바뀜)
# 후보 0 검사에 걸림 · 조건 그대로 두고 목록으로 알림
return None, cases
# 지금 같은 단위 후보 0 인 빈 줄 — 후보 단위가 줄 단위와 같은 성격(g ↔ kg 등)일 때만
# 검색어로(값이 생김 · 금액 바뀜 · 줄마다 보고) · 성격이 다르면 빈칸 그대로
probe = {**base, "검색어": _root(item.get("이름"))}
got = mp.search(master, probe, mau.values(master, row), unit)
if not got or not mp.same_kind(master.get(got[0])["단위"], unit):
return None, cases
name = _core(master.get(got[0]))[0]
return {**base, "검색어": name}, cases
if len(targets) == 1:
want = master.get(next(iter(targets)))
name, *spec = _core(want)