feat(b09): 갈래 느슨한 맞춤·수량 자리 못 맞춤을 로그로 — 조용히 다른 갈래에 붙는 자리 드러냄
- find_variant_code 가 글자 대신 수의 짝·구간으로 고른 자리를 한 번씩 로그(명세 14장 정정, 판정 (나)) - 수량 소수자리는 이름 그대로 두고 종목 이름을 못 맞춘 줄만 로그 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016VBGFXB9AbJBwXP19z75Qq
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from decimal import ROUND_HALF_UP, Decimal
|
||||
|
||||
#: (이름에 들어 있는 말, 그 단위) → 소수자리. **원문 표 순서 그대로** 옮겼다.
|
||||
@@ -68,13 +69,22 @@ _DIGITS: tuple[tuple[tuple[str, ...], tuple[str, ...], int], ...] = (
|
||||
#: 사면적·거푸집 면적까지 1자리로 자르면 틀린다. 확실한 ㎥ 만 잡는다.
|
||||
_UNIT_ONLY = {"㎥": 2, "m3": 2}
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
#: 못 맞춘 줄을 이미 알린 (이름, 단위) — 내역을 그릴 때마다 같은 로그가 쌓이지 않게.
|
||||
_UNMATCHED_LOGGED: set[tuple[str, str]] = set()
|
||||
|
||||
|
||||
def _tight(text: str) -> str:
|
||||
return "".join(str(text or "").split())
|
||||
|
||||
|
||||
def digits_for(name: str, unit: str, spec: str = "") -> int | None:
|
||||
"""그 줄의 수량 소수자리. **표에 없으면 `None`** — 지어내지 않는다."""
|
||||
"""그 줄의 수량 소수자리. **표에 없으면 `None`** — 지어내지 않는다.
|
||||
|
||||
⚠ 이름으로 종목을 찾는다 — 품셈 1-2-2 표 자체가 종목 이름 표라 코드로 옮길 대응표가 없음
|
||||
(금액이 아닌 표시 자리). **이름을 못 맞춘 줄은 로그**로 남긴다 — 마스터 갈래 키(1장)가
|
||||
서면 함께 정리함(2026-09-13 브레인 판정: 이름은 그대로 두고 못 맞춘 것만 드러냄).
|
||||
"""
|
||||
haystack = _tight(name) + _tight(spec)
|
||||
unit_tight = _tight(unit)
|
||||
for words, units, digits in _DIGITS:
|
||||
@@ -82,6 +92,16 @@ def digits_for(name: str, unit: str, spec: str = "") -> int | None:
|
||||
continue
|
||||
if any(word in haystack for word in words):
|
||||
return digits
|
||||
key = (_tight(name), unit_tight)
|
||||
if key not in _UNMATCHED_LOGGED:
|
||||
_UNMATCHED_LOGGED.add(key)
|
||||
fallback = _UNIT_ONLY.get(unit_tight)
|
||||
logger.info(
|
||||
"B09 수량 자리 — 종목 이름을 못 맞춤: 「%s」 %s → %s",
|
||||
name,
|
||||
unit,
|
||||
"단위만으로 %s자리" % fallback if fallback is not None else "표시 자리 없음",
|
||||
)
|
||||
return _UNIT_ONLY.get(unit_tight)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user