"""M01 `/text` 계산서 줄 덧칸(PLAN 714-1) — `store.text` 답에 줄마다 쓰는 입력 · 묶음 · 기준단위 · 환산 근거(`master_sheet_line.annotate` — M02 `/logic-lib/sheet` 와 한 벌) · 서버 단독(③) · 저장 안 함. `M01_MasterData_Store.py` 는 700 줄 근처라 여기서 감쌈.""" from __future__ import annotations from M01_MasterData import M01_MasterData_Store as store mf = store.cm.mf import master_sheet_line as msl # noqa: E402 — `store` 가 scripts 를 길에 둔 뒤 def text(key: str, inputs: dict, row: dict | None = None, file: str | None = None) -> dict: got = store.text(key, inputs, row, file) if not isinstance(got, dict) or not got.get("ok"): return got given = {k: store._dec(v) for k, v in inputs.items()} try: if row is None: files, whole = store.loaded() else: # 저장 전 시험 — `store.text` 와 같은 메모리 사본 files = store.cm.load(folder=store.FOLDER) key = store._swap(files, str(row.get("키") or key), row, file) whole = mf.Master(files) return msl.annotate(files, key, mf.fill_empty(whole.logic(key), given), got) except (mf.FormulaError, ArithmeticError, KeyError, TypeError, ValueError): return got