knowledge(마스터): 되풀이 기호 바로잡기 · 미공표 산정 버림 · 자재품목 유류·원문번호 정리
되풀이 기호(〃 · ″ · " · 上同) - 값·칸이름이 통째로 되풀이 기호인 자리 167 곳을 윗줄 값으로 — 단위 · 장비구분 · 장비명 · 항목 · 비고 · 재질 - 소요량 13-6-3 · 13-6-5 · 13-6-9 의 직종 칸 「〃」·「"」 는 윗줄 직종(플랜트제관공)으로 합치고 로직 식 8 곳도 함께 - 인력 LB000399(이름 「〃」)는 직종이 아니라 되풀이 기호 — 줄을 떼고 대장에 폐기 - 인치 기호(1/2〃 · ø12〃)와 설명 글 속 기호는 그대로 건설노임 미공표 산정 - 회차마다 증가율을 곱할 때 원 미만 버림 — 다산소프트와 같은 방식 · 값은 원 단위 정수 - 비고 「4-라 산정: 2025.9 210,772원 × 증가율(원 미만 버림)」 - 미공표직종_추적.md 5절 「단계마다 버림(채택)」 열을 채택으로 바꾸고 산정값(처리 없음)은 견주기용으로 남김 자재품목 - 유류 5줄(휘발유 · 경유 · 선박용경유 · 중유 · 등유) 뗌 — 값이 비고 글뿐 · 대장에 폐기 · 빌더도 뺌 - 품셈재료 중유(MP000359)는 미연결 — 중유는 받지 않기로 함 · 전력 2줄은 그대로 둠 - 원문번호(다산소프트 품번 M000…) 열 삭제 — 대조는 _키대장.json 에만 - 로직·품셈재료의 품번 참조 330 곳을 키로 · master_formula 는 「ID:키」 도 받음 - check_master · master_keys.stamp · M01 저장은 NO_NUMBER 테이블을 알아봄 · _틀.md · _화면_계약.md 도 맞춤 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
This commit is contained in:
@@ -115,9 +115,9 @@ LABOR_COLS = (
|
||||
LABOR_STATUS = ("공표", "산정", "미공표", "미확보")
|
||||
# 원문별 열 한 벌 — 모든 줄이 이 칸을 이 차례로 가짐(없으면 null)
|
||||
COLS = {
|
||||
# 자재품목 — 원문번호(남의 품번)는 줄에 두지 않음 · 대조는 `_키대장.json` 에만
|
||||
"자재품목": (
|
||||
"키",
|
||||
"원문번호",
|
||||
"구분",
|
||||
"상세구분",
|
||||
"이름",
|
||||
@@ -241,10 +241,12 @@ def check_form(name: str, data: dict) -> list[str]:
|
||||
else None
|
||||
)
|
||||
for row in rows:
|
||||
key, number = str(row.get("키")), str(row.get("원문번호"))
|
||||
key, number = str(row.get("키")), str(row.get("원문번호") or "")
|
||||
where = f"{name} · {key} {row.get('이름') or number}"
|
||||
if not mk.KEY.fullmatch(key) or key[:2] != tid:
|
||||
out.append(f"{where} · 키 모양이 「{tid}」 + 6자리 아님")
|
||||
if number and tid in mk.NO_NUMBER:
|
||||
out.append(f"{where} · 원문번호는 줄에 두지 않음 — 대장에만")
|
||||
if merged and row.get(merged) not in data.get(merged, {}):
|
||||
out.append(f"{where} · {merged} 「{row.get(merged)}」 이 머리에 없음")
|
||||
if number and mk.section_no(number) != number:
|
||||
@@ -502,7 +504,7 @@ def duplicate_keys(files: dict[str, dict], book: dict | None = None) -> list[str
|
||||
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("원문번호"))
|
||||
key, number = str(row.get("키")), str(row.get("원문번호") or "")
|
||||
if key in first:
|
||||
out.append(f"{name} · 키 겹침 「{key}」 — {first[key]} 에도 있음")
|
||||
first.setdefault(key, name)
|
||||
@@ -515,7 +517,12 @@ def duplicate_keys(files: dict[str, dict], book: dict | None = None) -> list[str
|
||||
had = book["키"].get(key)
|
||||
if had is None:
|
||||
out.append(f"{name} · {key} · 대장에 없는 키")
|
||||
elif number not in (had["원문번호"], mk.section_no(had["원문번호"])):
|
||||
continue
|
||||
# 줄에 번호를 두지 않는 테이블(`mk.NO_NUMBER`)은 대조를 건너뜀
|
||||
if key[:2] not in mk.NO_NUMBER and 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