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:
@@ -45,6 +45,15 @@ def id_of(ref: str) -> str:
|
||||
return ref[:2] if ref[:2] in GROUP_OF else ""
|
||||
|
||||
|
||||
SECTION = re.compile(r"^(?:(?:공통|토목|건축|기계설비|유지관리)\s+)?(\d+(?:-\d+)*[가-힣]?)(?:\s|$)")
|
||||
|
||||
|
||||
def section_no(number: str) -> str:
|
||||
"""줄에 적는 원문번호 — 절 번호만(부문·제목 뗌) · 절 번호 모양이 아니면 그대로."""
|
||||
m = SECTION.match(str(number))
|
||||
return m.group(1) if m else str(number)
|
||||
|
||||
|
||||
def load_book(path: Path = BOOK) -> dict:
|
||||
if path.is_file():
|
||||
return json.loads(path.read_text(encoding="utf-8"))
|
||||
@@ -97,14 +106,15 @@ def finish(book: dict) -> dict:
|
||||
def stamp(
|
||||
book: dict, tid: str, rows: list[dict], file: str, extra: dict | None = None
|
||||
) -> list[dict]:
|
||||
"""빌더가 만든 줄(「열쇠」 = 원문번호) → 「키」 · 「원문번호」 · extra 칸을 앞에 둔 줄."""
|
||||
"""빌더가 만든 줄(「열쇠」) → 「키」 · 「원문번호」(절 번호만) · extra 칸을 앞에 둔 줄.
|
||||
대장은 옛 열쇠(부문·제목까지)를 그대로 지님 — 키를 다시 찾는 열쇠라서."""
|
||||
out = []
|
||||
for row in rows:
|
||||
row = dict(row)
|
||||
number = str(row.pop("열쇠", row.get("원문번호")))
|
||||
row.pop("원문번호", None)
|
||||
key = row.pop("키", None) or issue(book, tid, number, file)
|
||||
out.append({"키": key, "원문번호": number, **(extra or {}), **row})
|
||||
out.append({"키": key, "원문번호": section_no(number), **(extra or {}), **row})
|
||||
return out
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user