Merge remote-tracking branch 'origin/sub_laptop_3' into main_laptop_1

# Conflicts:
#	M01_MasterData/M01_MasterData_Router.py
This commit is contained in:
2026-11-01 16:05:01 +09:00
17 changed files with 582 additions and 54 deletions
+4 -4
View File
@@ -32,9 +32,9 @@ from M01_MasterData import M01_MasterData_Store_Cache as m01_cache
from M02_MasterTemplete import M02_Hopyo_Match as hopyo_match
from M02_MasterTemplete.M02_Hopyo_Words import conds, mtypes, specnums
mb, mu = m01.cm.mf.mb, m01.cm.mf.mp.mm.mu # 묶음(712-1) · 단위(712-2) 한 벌
FP_VERSION = 1 # 지문 꼴이 바뀌면 올림 — 옛 캐시 버림
ROOT = Path(__file__).resolve().parents[1]
_PER = re.compile(r"원\s*/\s*(\d[\d,]*\.?\d*|\.\d+)?")
_SUB = re.compile(r"^\s*로직\(\s*(\w+)\s*(?:,(.*))?\)\s*$")
EQ_CODE = re.compile(r"^\d{4}-\d{4}$")
_PCT = re.compile(r"\*\s*([\d.]+)\s*/\s*100")
@@ -84,7 +84,7 @@ def whole() -> Any:
def is_mach_logic(row: dict[str, Any]) -> bool:
return "시간당" in str(row.get("이름") or "")
return mb.is_machine(row) # 기계경비 판별 한 곳(712-1 · 결과단위 원/시간)
def eq_of(code: Any) -> tuple[set[str], set[float]]:
@@ -95,8 +95,8 @@ def eq_of(code: Any) -> tuple[set[str], set[float]]:
def times_of(row: dict[str, Any]) -> float:
per = _PER.findall(str(row.get("결과단위") or ""))
return float(per[0].replace(",", "")) if per and per[0] else 1.0
per = mu.per(row.get("결과단위")) # 결과단위 배 읽기 한 벌(712-2)
return float(per[0][0]) if per else 1.0
def _args(text: str | None) -> dict[str, str]:
+6 -2
View File
@@ -31,6 +31,9 @@ from M02_MasterTemplete import M02_Labor_Inputs as labor_inputs
from M02_MasterTemplete import M02_Logic_Settle as settle
from M02_MasterTemplete import M02_Template_Layers as layers
mf = m01.cm.mf
import master_sheet_line as msl # noqa: E402 — 계산서 줄 덧칸(714-1) · scripts 길은 `m01` 이 둠
SHAPE = 3 # 줄 꼴이 바뀌면 올림 — 옛 저장본을 안 씀
KIND = "m02_logic_standard"
REGION = "지역" # 지역 = 자동값 한 벌(정함 8)
@@ -331,7 +334,7 @@ def sheet(key: str, change: dict) -> dict:
raise m01.StoreError(404, str(e)) from e
given, ax = _given(whole, logic, change)
filled = m01.cm.mf.fill_empty(logic, given)
got = m01.mtx.lines(files, key, filled)
got = msl.annotate(whole, key, filled, m01.mtx.lines(files, key, filled)) # 줄 덧칸(714-1)
done = settle.settle(whole, key, filled)
if "결과" not in done: # 돈 로직 — 줄마다 버림(B09 산근 규칙)
settle.apply(got.get("groups") or [], m01.cm.mf.run(whole, key, filled), done)
@@ -341,7 +344,7 @@ def sheet(key: str, change: dict) -> dict:
"비목": g["비목"],
"소계": g.get("소계"),
"끝수": g.get("끝수") or "",
"줄": [{k: line.get(k) for k in ("이름", "글", "금액")} for line in g["줄"]],
"줄": [{k: line.get(k) for k in ("이름", "글", "금액", *msl.KEYS)} for line in g["줄"]],
}
for g in got.get("groups") or []
]
@@ -356,5 +359,6 @@ def sheet(key: str, change: dict) -> dict:
"입력": given,
"묶음": groups,
"계": got.get("계"),
"기준단위": got.get("기준단위"),
}
)