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:
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user