knowledge(마스터): 재료 열 한 벌 정리 — 시중물가 → 자재품목 · 값 다섯 열 · 유가·환율도 같은 열

- 재료_시중물가.json → 재료_자재품목.json(테이블ID MT · 키 그대로) · 모든 줄이 같은 열 한 벌(키 · 원문번호 · 구분 · 상세구분 · 이름 · 규격 · 단위 · 물가자료 · 유통물가 · 물가정보 · 거래가격 · 관급 · 출처 · 비고 · 면수)
- 값 묶음(시중·조달)을 풀어 다섯 값을 열로 · 관급 = 조달 값(4,552 줄 · 기간은 비고 「조달 26.7」) · 원문 가격정보만 남은 72 줄은 값 열에 안 넣고 비고 「가격정보 ○○」 · 구분·상세구분은 원문에 분류가 없어 비움
- 재료_오피넷유가 · 환율_한국은행환율도 열 한 벌(기준일 → 규격 · 유가 구분 = 전국평균/시도별 · 상세구분 = 지역) · 상품코드·지역코드 삭제
- 엔진 단가(연결된 줄의 낮은 값 · 출처 = 「<키>.<열>」) · check_master 열 검사 · M01 고르기(procure 걷어냄) · 빌더 · _틀.md · 화면 계약 · 시험 같이 고침

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
This commit is contained in:
2026-09-20 15:55:40 +09:00
co-authored by Claude Opus 5
parent 02b9c8be92
commit 9de61eb251
19 changed files with 48348 additions and 48388 deletions
+7 -11
View File
@@ -18,8 +18,8 @@ KEY = re.compile(r"[A-Z]{2}\d{6}")
# (그룹, 원문) → 테이블ID · 인력·기계는 원문 구분 없이 한 테이블
TABLES = {
("인력", None): "LB",
("재료", "시중물가"): "MT",
("재료", "나라장터자재"): "MN",
("재료", "자재품목"): "MT",
("재료", "나라장터자재"): "MN", # 자재품목과 잇지 않음 — 로직 호표가 키로 바로 가리킴
("재료", "오피넷유가"): "MO",
("재료", "품셈재료"): "MP",
("기계", None): "EQ",
@@ -54,7 +54,10 @@ def load_book(path: Path = BOOK) -> dict:
def save_book(book: dict, path: Path = BOOK) -> None:
"""키 한 줄씩 — 머리 「다음」 뒤에 키 차례대로."""
lines = ["{", ' "다음": ' + json.dumps(book["다음"], ensure_ascii=False) + ",", ' "키": {']
lines = ["{", ' "다음": ' + json.dumps(book["다음"], ensure_ascii=False) + ","]
if book.get("폐기"):
lines.append(' "폐기": ' + json.dumps(book["폐기"], ensure_ascii=False) + ",")
lines.append(' "키": {')
items = sorted(book["키"].items())
for i, (key, v) in enumerate(items):
comma = "," if i < len(items) - 1 else ""
@@ -187,7 +190,7 @@ def _old_ref(book: dict, text: str) -> str:
def _convert(book: dict, row: dict, names: dict) -> dict:
"""줄 속 옛 참조 — 준용 · 후보 글(키 옆 이름) · 품셈재료 연결 · 시중물가 조달 나라장터 연결."""
"""줄 속 옛 참조 — 준용 · 후보 글(키 옆 이름) · 품셈재료 연결."""
for col in ("준용",):
value = row.get(col)
if isinstance(value, str) and ":" in value:
@@ -202,13 +205,6 @@ def _convert(book: dict, row: dict, names: dict) -> dict:
link = row.get("연결")
if isinstance(link, str) and not KEY.fullmatch(link):
row["연결"] = lookup(book).get(("MT", link), link)
value = row.get("값")
supply = value.get("조달") if isinstance(value, dict) else None
if isinstance(supply, dict) and str(supply.get("출처") or "").startswith("나라장터:"):
code = supply["출처"].split(":", 1)[1]
if not KEY.fullmatch(code): # 묶음은 새로 만듦 — 옛 줄과 나눠 쓰지 않게
source = "나라장터:" + lookup(book).get(("MN", code), code)
row["값"] = {**value, "조달": {**supply, "출처": source}}
return row