knowledge(마스터): 원문번호에서 번호 뒤 제목 뺌 — 절 번호만
- 소요량 · 계수 · 로직 · 기계 4,418 줄의 원문번호를 절 번호만으로(부문·제목 뗌) — 건설품셈 부문은 구분 칸에 있음 - 한 절에 표가 여럿이어도 번호는 같게 둠 — 식별은 키 - 대장 _키대장.json 의 원문번호는 옛 열쇠 그대로(빌더가 키를 다시 찾는 열쇠) · master_keys.stamp 가 줄에만 절 번호를 씀 - check_master — 부문 앞붙임 검사를 「절 번호만」 검사로 · 원문번호 겹침은 인력·재료만 · 대장 대조는 옛 열쇠·절 번호 둘 다 받음 - master_formula — 겹친 원문번호를 「ID:원문번호」 로 부르면 멈춤 - compare_estx · 시험의 「ID:원문번호」 참조를 키로 갈아 끼움 · M01 새 로직 초안 번호에서 부문 뺌 - test_자재품목_열_한_벌 의 낡은 기대값을 지금 데이터에 맞춤(관급 열이 조달청 값으로 바뀜) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
This commit is contained in:
@@ -247,8 +247,8 @@ def check_form(name: str, data: dict) -> list[str]:
|
||||
out.append(f"{where} · 키 모양이 「{tid}」 + 6자리 아님")
|
||||
if merged and row.get(merged) not in data.get(merged, {}):
|
||||
out.append(f"{where} · {merged} 「{row.get(merged)}」 이 머리에 없음")
|
||||
if division and not number.startswith(division + " "):
|
||||
out.append(f"{where} · 원문번호 앞에 부문 「{division}」 없음")
|
||||
if number and mk.section_no(number) != number:
|
||||
out.append(f"{where} · 원문번호는 절 번호만 — 「{mk.section_no(number)}」")
|
||||
if want and (row.get("구분"), row.get("상세구분")) != want:
|
||||
out.append(
|
||||
f"{where} · 구분·상세구분 「{row.get('구분')} · {row.get('상세구분')}」"
|
||||
@@ -493,25 +493,29 @@ def check_logics(files: dict[str, dict], whole: mf.Master, book: dict | None = N
|
||||
|
||||
|
||||
def duplicate_keys(files: dict[str, dict], book: dict | None = None) -> list[str]:
|
||||
"""키 겹침(전체) · 원문번호 겹침(테이블 안 — `ID:원문번호` 찾기가 먼저 것만 봄) · 대장 대조."""
|
||||
"""키 겹침(전체) · 원문번호 겹침(인력·재료 — 번호가 곧 그 줄의 이름) · 대장 대조.
|
||||
표·로직·기계의 원문번호는 절 번호·분류번호라 한 절에 여럿이 겹쳐도 됨
|
||||
(겹친 번호를 「ID:원문번호」 로 부르면 `master_formula` 가 잡음)."""
|
||||
book = mk.load_book() if book is None else book
|
||||
first, numbers, out = {}, {}, []
|
||||
for name, data in files.items():
|
||||
rows = data.get("표") if data.get("그룹") in mf.TABLE_GROUPS else data.get("줄")
|
||||
one_each = data.get("그룹") in ("인력", "재료")
|
||||
for row in rows or []:
|
||||
key, number = str(row.get("키")), str(row.get("원문번호"))
|
||||
if key in first:
|
||||
out.append(f"{name} · 키 겹침 「{key}」 — {first[key]} 에도 있음")
|
||||
first.setdefault(key, name)
|
||||
if number and (key[:2], number) in numbers:
|
||||
out.append(
|
||||
f"{name} · {key} · 원문번호 겹침 「{number}」 — {numbers[key[:2], number]}"
|
||||
)
|
||||
numbers.setdefault((key[:2], number), key)
|
||||
if one_each and number:
|
||||
if (key[:2], number) in numbers:
|
||||
out.append(
|
||||
f"{name} · {key} · 원문번호 겹침 「{number}」 — {numbers[key[:2], number]}"
|
||||
)
|
||||
numbers.setdefault((key[:2], number), key)
|
||||
had = book["키"].get(key)
|
||||
if had is None:
|
||||
out.append(f"{name} · {key} · 대장에 없는 키")
|
||||
elif had["원문번호"] != number:
|
||||
elif number not in (had["원문번호"], mk.section_no(had["원문번호"])):
|
||||
out.append(f"{name} · {key} · 대장 원문번호 「{had['원문번호']}」 와 다름")
|
||||
elif int(key[2:]) >= book["다음"].get(key[:2], 0):
|
||||
out.append(f"{name} · {key} · 대장 다음 번호보다 큼")
|
||||
|
||||
Reference in New Issue
Block a user