Merge remote-tracking branch 'origin/sub_laptop_1' into sub_laptop_4
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
본문 md(확정) 표를 읽어 기계 한 줄로 합침. 값은 md 에서만 · 계산·추정 없음.
|
||||
실행: python resources/master_data/scripts/build_기계_건설품셈.py [--dry]
|
||||
옛 모양(열쇠)으로 쓰고 `master_keys.adopt` 가 기계.json(키 · 세부분류 건설품셈)으로 받음.
|
||||
옛 모양(열쇠)으로 쓰고 `master_keys.adopt` 가 기계.json(키 · 원문 건설품셈)으로 받음.
|
||||
"""
|
||||
|
||||
import json
|
||||
@@ -504,7 +504,7 @@ def compose(rows):
|
||||
org = dict(v.get("원문83") or {})
|
||||
org.update({f"{v['sec84']} {a}": b for a, b in (v.get("원문84") or {}).items()})
|
||||
if org:
|
||||
row["원문"] = org
|
||||
row["값원문"] = org
|
||||
out.append(row)
|
||||
return out
|
||||
|
||||
@@ -512,7 +512,7 @@ def compose(rows):
|
||||
def dumps_row(r):
|
||||
j = lambda o: json.dumps(o, ensure_ascii=False)
|
||||
head = f'{{ "열쇠": {j(r["열쇠"])}, "이름": {j(r["이름"])}, "규격": {j(r["규격"])},'
|
||||
tail = [k for k in ("비고", "원문") if k in r]
|
||||
tail = [k for k in ("비고", "값원문") if k in r]
|
||||
body = [f' "단위": {j(r["단위"])},', f' "값": {j(r["값"])},']
|
||||
body.append(f' "출처": {j(r["출처"])}' + ("," if tail else " }"))
|
||||
for n, k in enumerate(tail):
|
||||
|
||||
@@ -94,8 +94,8 @@ ROW_KEYS = {
|
||||
),
|
||||
"품셈재료": ("키", "원문번호", "이름", "규격", "단위", "요구절", "연결", "고르기"),
|
||||
}
|
||||
# 한 테이블 파일 — 줄의 갈래 칸 · 머리의 갈래 묶음
|
||||
MERGED = {"인력": "구분", "기계": "세부분류"}
|
||||
# 한 테이블 파일 — 줄의 갈래 칸 · 머리의 갈래 묶음 (칸 이름은 `master_keys.MERGED` 한 곳에서)
|
||||
MERGED = {group: slot for group, (_, slot, _) in mk.MERGED.items()}
|
||||
# 인력 줄 — 모든 줄이 같은 열 한 벌 · 상태 값
|
||||
LABOR_COLS = (
|
||||
"키",
|
||||
@@ -222,25 +222,23 @@ def check_form(name: str, data: dict) -> list[str]:
|
||||
f"{name} · 파일 이름이 「그룹_원문[_NN장_장 제목].json」 · 「인력.json」 · 「기계.json」 아님"
|
||||
]
|
||||
out = _head(name, data, m)
|
||||
# 한 테이블 파일(기계)은 머리 「원문」 이 갈래 묶음 — 원문 이름은 묶음 안에
|
||||
book = data.get("원문") if isinstance(data.get("원문"), str) else None
|
||||
try:
|
||||
tid = mk.table_id(data.get("그룹"), data.get("원문"))
|
||||
tid = mk.table_id(data.get("그룹"), book)
|
||||
except KeyError:
|
||||
return out + [f"{name} · 테이블ID 없는 그룹·원문"]
|
||||
merged = MERGED.get(data.get("그룹"))
|
||||
table = data.get("그룹") in mf.TABLE_GROUPS
|
||||
kind = "표" if table else "로직" if data.get("그룹") == "로직" else "요소"
|
||||
if data.get("원문") == "품셈재료":
|
||||
if book == "품셈재료":
|
||||
kind = "품셈재료"
|
||||
rows = data.get("표" if table else "줄")
|
||||
if not isinstance(rows, list):
|
||||
return out + [f"{name} · 머리 「{'표' if table else '줄'}」 목록 없음"]
|
||||
division = data.get("부문") if kind != "요소" else None
|
||||
# 장 파일 줄의 갈래 — 구분 = 원문 + 부문 · 상세구분 = 「NN장 장 제목」(파일 이름 그대로)
|
||||
want = (
|
||||
(" ".join(x for x in (data.get("원문"), division) if x), _detail(name))
|
||||
if m.group(4)
|
||||
else None
|
||||
)
|
||||
want = (" ".join(x for x in (book, division) if x), _detail(name)) if m.group(4) else None
|
||||
for row in rows:
|
||||
key, number = str(row.get("키")), str(row.get("원문번호") or "")
|
||||
where = f"{name} · {key} {row.get('이름') or number}"
|
||||
@@ -257,7 +255,7 @@ def check_form(name: str, data: dict) -> list[str]:
|
||||
f"{where} · 구분·상세구분 「{row.get('구분')} · {row.get('상세구분')}」"
|
||||
f" 이 파일 머리·이름 「{want[0]} · {want[1]}」 과 다름"
|
||||
)
|
||||
cols = COLS.get(data.get("원문"))
|
||||
cols = COLS.get(book)
|
||||
for need in cols or ROW_KEYS[kind]:
|
||||
if need not in row:
|
||||
out.append(f"{where} · 칸 「{need}」 없음")
|
||||
|
||||
@@ -269,7 +269,7 @@ def machine(estx: Estx, files: dict, master: mf.Master):
|
||||
for r in estx.table("MachTitleDat"):
|
||||
if r.get("Unite") == "hr" and r.get("TC"):
|
||||
est.setdefault(mach_key(r.get("Name"), r.get("Size")), r)
|
||||
ours = [m for m in files["기계.json"]["줄"] if m["세부분류"] == "건설품셈"]
|
||||
ours = [m for m in files["기계.json"]["줄"] if m["원문"] == "건설품셈"]
|
||||
pairs = [(m, est[k]) for m in ours if (k := mach_key(m["이름"], m["규격"])) in est]
|
||||
print(f"## 기계 — 우리 {len(ours)} · ESTX 시간당 {len(est)} · 기종·규격 짝 {len(pairs)}")
|
||||
out = []
|
||||
|
||||
@@ -134,7 +134,7 @@ LABOR = {
|
||||
}
|
||||
MERGED = {
|
||||
"인력": ("인력.json", "구분", LABOR),
|
||||
"기계": ("기계.json", "세부분류", {"건설품셈": "건설품셈", "산림품셈": "산림품셈"}),
|
||||
"기계": ("기계.json", "원문", {"건설품셈": "건설품셈", "산림품셈": "산림품셈"}),
|
||||
}
|
||||
DIVISIONS = ("공통", "토목", "건축", "기계설비", "유지관리")
|
||||
# 장 파일 줄의 열 차례 — 앞 넷은 한 줄에 · 「그룹」(소요량 파일 안의 계수 표 표시)은 맨 뒤
|
||||
|
||||
Reference in New Issue
Block a user