fix(784-1): 「우리 품」 잘못 보임 뿌리 고침 — 못 맞춤 빈칸 · 가드 칸 자동값 0 · 수 칸 짝 · 자재 단위 배 1 · 절 하나 덧 없음 · 엑셀 값 표지
- A 옵션 찾기 못 맞춤(수준 9 · 거리 ≥ 1) = 우리 품 · 입력 안 냄 · 「못맞춤」 표지 · 꼬리표 「→ –(우리 셈 조건 못 찾음)」 - B 자동값 「만약(X > 0, X, 기본)」 칸 = 나눗수 퍼뜨림에서 뺌(0 = 원문 기본) · 옵션 후보엔 옛 1 도 둠 - C 하나씩 조합 — 후보 ≤ 4 수 칸도 둘씩 짝 - D 엑셀이 값으로 넣은 「0 = 식」 칸 출처 「엑셀 값 · 식 아님」 · 꼬리표 「원문 식이면 품 · 금액(조건)」 - E 결과단위 「자재」 = 배 1 · 공/㎥ ≡ 공㎥ - F 품 비교 우리 품 × 대상 몫 - G 절 하나 블록 = 덧 로직은 후보만(이중 계상 막음) - H 1위 옵션 수준 ≤ 2 면 그 입력을 대상 입력값으로 - I 규격 「L=…cm」 를 거리 칸에 안 넣음 · 수 고르기는 제 단위 붙은 수만 · 엑셀 수 「1 ㎡」 를 m 로 안 읽음 - 우리지문 · 맞춤 캐시 판 올림(FP 2 · CALC 3) - 새 지킴 시험 test_635_hopyo_ours_qty - 낡은 시험 둘(test_628 표지 수 18 · test_621 S1 울진소광 해시)은 HEAD 에서도 실패 — 782-3 마스터 합침 뒤 값 · 손대지 않음 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -73,9 +73,11 @@ def _target(code: str, line: dict, ctx: Ctx, found: dict | None, use: bool, **ex
|
||||
one = ctx.names.get(code) or {"이름": "", "단위": ""}
|
||||
vals, unread = hm.spec_inputs(line, hm._logic_specs(code))
|
||||
src = {k: "규격" for k in vals}
|
||||
use = use or (found or {}).get("수준", 9) <= 2 # 맞춘 옵션 입력 = 품 비교와 같은 입력
|
||||
typed = ((found or {}).get("식아님") or {}).get("칸") or {} # 엑셀이 값으로 넣은 「0 = 식」 칸
|
||||
for k, v in ((found or {}).get("입력") or {}).items() if use else ():
|
||||
if str(vals.get(k)) != str(v):
|
||||
vals[k], src[k] = v, "블록"
|
||||
vals[k], src[k] = v, "엑셀 값 · 식 아님" if k in typed else "블록"
|
||||
conv = hm.factor(line.get("단위"), one["단위"], line.get("규격"))
|
||||
share = extra.pop("몫", None)
|
||||
times = conv["배"] * share if conv["배"] is not None and share else conv["배"]
|
||||
@@ -109,11 +111,17 @@ def _pair(pair: dict, line: dict, ctx: Ctx) -> dict:
|
||||
}
|
||||
|
||||
|
||||
def _qty(entry: dict, found: dict | None) -> dict:
|
||||
def _qty(entry: dict, found: dict | None, share: float | None = None) -> dict:
|
||||
"""품 비교 — 엑셀 · 우리 · 같음(직종 · 장비 갈래마다 R 허용) · 같은 갈래 여러 줄은 합쳐 견줌
|
||||
(화면 품 비교 열쇠 = 갈래 가나다 차례 + 로 묶음)."""
|
||||
(화면 품 비교 열쇠 = 갈래 가나다 차례 + 로 묶음) · 몫 = 대상 몫(섞인 줄 10% = 우리 × 0.1)."""
|
||||
ex = entry.get("품") or {"인력": {}, "장비": [], "자재": []}
|
||||
us = (found or {}).get("우리품") or option.ours_qty(None)
|
||||
if share:
|
||||
k = lambda q: round(q * share, 6) # noqa: E731
|
||||
us = {"인력": {t: k(q) for t, q in us["인력"].items()}} | {
|
||||
"장비": [{**x, "시간": k(x["시간"])} for x in us["장비"]],
|
||||
"자재": [{**x, "수량": k(x["수량"])} for x in us["자재"]],
|
||||
}
|
||||
same = {}
|
||||
for t, a in ex["인력"].items():
|
||||
b = us["인력"].get(t)
|
||||
@@ -159,6 +167,7 @@ def _numeric(line: dict, ctx: Ctx, entry: dict) -> dict:
|
||||
found = (entry.get("옵션") or {}).get(top)
|
||||
use = state in ("맞음", "다른 점")
|
||||
combo = _picked(entry)
|
||||
share = None
|
||||
if combo:
|
||||
targets = [
|
||||
_target(
|
||||
@@ -176,11 +185,13 @@ def _numeric(line: dict, ctx: Ctx, entry: dict) -> dict:
|
||||
for c in entry.get("조합") or []:
|
||||
if not c["체크"]:
|
||||
tags.append(f"기계 몫 {c['로직']} — 시간 = 엑셀 값(우리 셈 아님)")
|
||||
if any("블록" in t["출처"].values() for t in targets):
|
||||
if any({"블록", "엑셀 값 · 식 아님"} & set(t["출처"].values()) for t in targets):
|
||||
tags.append("옵션 — 블록에서")
|
||||
tags += [f"근거 {b} {n}" for b, n in (entry.get("지문") or {}).get("출처") or []]
|
||||
out = {"상태": state, "체크": _check(entry, line, ctx), "대상": targets}
|
||||
out.update(후보=entry.get("후보") or [], 글=judged["글"], 꼬리표=tags, 품=_qty(entry, found))
|
||||
out.update(
|
||||
후보=entry.get("후보") or [], 글=judged["글"], 꼬리표=tags, 품=_qty(entry, found, share)
|
||||
)
|
||||
if found and found.get("갈리는칸"):
|
||||
out["갈리는칸"] = found["갈리는칸"]
|
||||
return out
|
||||
|
||||
Reference in New Issue
Block a user