Merge branch 'sub_laptop_3' of C:/Aislo_wt/sub_laptop_3 into main_laptop_1

This commit is contained in:
2026-11-12 18:55:11 +09:00
11 changed files with 351 additions and 14 deletions
+16
View File
@@ -64,3 +64,19 @@ def fill(copy: dict) -> dict:
if not keys:
return copy
return {**copy, **skc.grow(dc.values_of(copy), skc.snap([], keys))}
def fill_imported(sk: dict, doc: Any) -> dict:
"""가져온 식 SK(823-1) — 문서 셈(단가기준 · 바꿔 끼운 줄)이 읽은 줄 가운데
SK 로직 사본에 없는 것 + 내 기계 = 지금 값으로 로직 사본에 더함 ·
사본 없음 · 빈틈 없음 = 그대로."""
from M02_MasterTemplete import M02_Doc_Import as dim
if not skc.has(sk) or not isinstance(doc, dict):
return sk
seen = _Seen(dim._index(sk, None, doc))
dim.run(doc, sk, index=seen) # 셈 틀림 = 읽은 데까지(run 이 받음)
keys = sorted({*seen.keys, *mym.keys_in(doc)} - _have(sk[skc.KEY]))
if not keys:
return sk
return {**sk, skc.KEY: skc.grow(sk[skc.KEY], skc.snap([], keys))}
+15 -8
View File
@@ -51,12 +51,18 @@ def basis_of(sk: dict) -> str:
return "우리" if (sk.get(imp.KEY) or {}).get("단가기준") == "우리" else "엑셀"
def _index(sk: dict, master: Any = None) -> Any:
"""셈 색인 — 우리 = 로직 사본 위(822-1 · 이음 값이 M01 따라 안 바뀜 · [단가 갱신] 으로만) ·
엑셀 = 받은 색인 · 없으면 지금 M01."""
def swapped(doc: Any) -> int:
"""바꿔 끼운 가져온 줄 수(823-1 · 연결 `바꿈` = 원래 · 엑셀 값 뗌 = 우리 값)."""
vars_ = (doc or {}).get("변수") or [] if isinstance(doc, dict) else []
return sum(1 for v in vars_ if isinstance(v.get("연결"), dict) and v["연결"].get("바꿈"))
def _index(sk: dict, master: Any = None, doc: Any = None) -> Any:
"""셈 색인 — 우리 · 바꾼 줄 있음(823-1) = 로직 사본 위(822-1 · 이음 값이 M01 따라 안 바뀜 ·
[단가 갱신] 으로만) · 엑셀 = 받은 색인 · 없으면 지금 M01."""
from M02_MasterTemplete import M02_Sangeun_Copy as skc
if basis_of(sk) == "우리":
if basis_of(sk) == "우리" or swapped(doc):
return skc.over(sk, imp._whole())
return master or imp._whole()
@@ -524,7 +530,7 @@ def record(doc: dict, sk: dict) -> dict[str, Any]:
import master_doc_record as mr # `M02_Doc_Copy` 가 scripts 를 길에 둔 뒤
basis = basis_of(sk)
links = Links(_index(sk), basis)
links = Links(_index(sk, None, doc), basis)
mine = view(doc, basis)
rec = mr.Rec(links)
try:
@@ -536,10 +542,11 @@ def record(doc: dict, sk: dict) -> dict[str, Any]:
return rec.out()
def run(doc: dict, sk: dict, master: Any = None) -> dict:
"""가져온 식 문서 셈(SK 단가기준) — 계산기 = M01 과 같은 `master_doc_calc`."""
def run(doc: dict, sk: dict, master: Any = None, index: Any = None) -> dict:
"""가져온 식 문서 셈(SK 단가기준) — 계산기 = M01 과 같은 `master_doc_calc` ·
`index` = 셈 색인 갈음(빈틈 적기 · 823-1)."""
basis = basis_of(sk)
links = Links(_index(sk, master), basis)
links = Links(index or _index(sk, master, doc), basis)
mine = view(doc, basis)
try:
links.learn(mine)
+4
View File
@@ -49,6 +49,8 @@ def _strip(v: Any) -> Any:
return {k: _strip(x) for k, x in v.items() if k not in _STAMPED}
if isinstance(v, list):
return [_strip(x) for x in v]
if isinstance(v, float) and v.is_integer(): # 파일 24554.0 = 화면 왕복 24554(823-1)
return int(v)
return v
@@ -188,6 +190,8 @@ def settle(out: dict, whole: Any, job: Any, raw: Any) -> dict:
raw = raw if isinstance(raw, dict) else {}
mine = SAVING.get()
if mine is not None and mine.get("키") == out.get("키"): # 수식 길 저장 — 서버가 지은 사본
if dim.is_imported(out): # 가져온 식 — 셈이 읽은 줄(바꿔 끼운 줄 등)을 로직 사본에(823-1)
out = gap.fill_imported(out, mine["사본"].get("문서"))
return {**out, KEY: norm(mine["사본"])}
file = stored(out.get("키")) or {}
have = file.get(KEY) if dc.has(file) else (raw.get(KEY) if dc.has(raw) else None)