- `기계.json` — 갈래 칸 「세부분류」 → 「원문」(머리 묶음·줄 654) · 줄의 원문 글 칸은 「값원문」 으로(34 줄) · 줄의 `구분`·`상세구분` 과 이름이 겹치지 않게 함
- `check_master` MERGED 는 `master_keys.MERGED` 에서 받음 — 칸 이름을 한 곳에서만 적음 · 머리 「원문」 이 묶음인 파일도 틀 검사가 돎
- `master_keys.MERGED` · `build_기계_건설품셈.py` · `compare_estx.py` — 새 칸 이름
- `M01 서버` — 갈래 칸을 MERGED 에서 찾음(박은 이름 없앰) · 머리 원문이 묶음이면 `book` 은 빈 값
- `_틀.md` — 기계 원문·구분·값원문 · 자재품목 구분 채움과 묶음 문서 · 소요량·계수 「용도」 칸 · 인력 줄 갈래 칸 바로잡음
- `ref/_묶음_기계.md` 새로 — 구분 11 · 상세구분 174 (654 줄)
- `_갱신절차.md` 기계 절 칸 이름
- 검사 — `check_master` 틀 0 · 로직 0 · 시험 83 통과(test_m01_api 25 · test_masterdata_check 58)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- `재료_품셈재료.json` 363 줄에 「고르기」 칸 — 자재품목 구분·상세구분[·규격] · 212 줄 채움(규격 조건 19) · 짝 없는 줄은 null + 비고에 까닭
- `scripts/build_품셈재료_고르기.py` — 자재품목을 가른 바로 그 품명 글자 규칙 재사용 · 손으로 바로잡은 25 줄은 OVERRIDE · 연결이 이미 있는 줄은 옛 방식 그대로
- `scripts/build_로직_재료_고르기.py` — 호표 요소 `MP…` 를 고르기 조건으로 바꿈(로직 32 파일 287 줄) · 고르기 빈 줄과 `{이름}` 낀 원문번호 줄은 그대로
- 일괄 시험 계산 전후 — 통과 1119 → 1203 · 새로 멈춤 0 · 앞뒤 다 통과한 1119 줄 금액 변동 0
- `check_master` — 품셈재료 「고르기」 칸 검사(조건 모양 · 없는 구분·상세구분 · 조건 밖 대표 · 후보 0)
- `GET /api/m01/materials` — 후보마다 값 열 다섯(`값들`) · `값` 은 시험 계산이 쓸 낮은 값 · 값 있는 줄을 맨 앞에
- `GET /api/m01/logic` 의 `prices` — 고르기 조건 줄도 실음 · 열쇠는 조건 글 `mf.cond_text` · 후보 수 포함
- `_틀.md` 5장에 고르기 칸 · 일괄 변환 스크립트
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
기계.json — 상세구분을 구동방식·규격 뺀 굵은 기종으로(654줄 중 302줄 값 바뀜, 세부분류 칸은 그대로 둠 — 200개 이름이 170개 기종으로 묶임)
소요량_*.json · 계수_*.json 83개 표 3029개 항목에 용도 칸 신설(공종·대상·로직키) — scripts/build_용도.py
- 공종: 원문번호로 해당 원문 md 의 절 제목을 찾아 채움(3029개 전부 찾음 · 산림품셈 1-1-3 형식은 마침표 포함 확인)
- 대상: 값칸·줄 값을 인력.json·기계.json·재료_품셈재료.json 이름과 맞대 인력/기계/재료 판정, 이름에 「할증」「환산」 있으면 추가, 조건이 있거나 아무 것도 안 맞으면 작업량 조건
- 로직키: 로직_*.json(54개, 읽기만) 의 식·수량·호표 문자열에서 표 키를 거꾸로 찾아 채움(3029개 중 1852개에 참조 있음)
스크립트는 재실행해도 같은 결과(기존 용도 줄을 지우고 다시 씀)
check_master.py 틀 0 · 로직 0 유지 확인 · 본문 1건(CC000074, 8-4-8 결손 1)은 이 작업 전부터 있던 것(용도 뺀 상태로 스태시해 재확인)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0146J72jAMHpcmW4n2Y8WakE
M01_MasterData_UI_Test_B.ts 새 파일 — export function render(host, logicKey)
하나로 접속. fetchLogic·runCalc·elements·table 기존 Store·API 그대로 재사용
(새 엔진·새 계산 없음).
호표 줄을 누르면 옆 카드에 이 수량이 어디서 왔나 표시: 식 속 찾기(표,조건).칸
호출을 뽑아 그 소요량·계수 표를 /elements+/table 로 다시 읽어 걸린 줄 강조 ·
중간 식 이름에 「할증」 들어간 것은 적용된 할증으로 따로 보임 · 쉬운 말
풀이(찾기·만약 호출을 문장으로, 나머지는 원문 식) · 계산 답의 middle 값으로
할증률 등 중간 계산값 표시. 입력 바꾸면 자동 재계산(디바운스 300ms)해 호표·
카드 같이 갱신.
검증: npm run typecheck 통과(0). ORCA 로 임시 붙여 확인하려 했으나 로그인
화면에 막혀(시험 계정 없음) 실제 화면 확인은 못 함 — 임의 판정: typecheck만으로
마감(임시 연결은 확인 뒤 되돌려 커밋 안 함).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WaS48Nvs26o3aFUpcfJxVv
- scripts/build_자재품목_분류.py: 품명 규칙(위에서 첫 일치) · 조달청 줄은 조달청 품명 표 · 다시 돌리면 같은 결과
- 재료_자재품목.json: 구분 · 상세구분 두 칸만 바뀜 (값 · 이름 · 키 그대로) · 못 가린 줄은 미분류
- ref/_묶음_자재품목.md: 구분별 상세구분 · 줄 수
- 시험: test_자재품목_분류.py 추가 · test_masterdata_check 의 「구분 비어 있음」 확인을 「채워져 있음」으로
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V1MKKZKpUHTPKb513FneU8
설계 값 → 표 찾기 → 수량 → × 단가 → 할증·덧줄 → 비목 합계 → 계 일곱 칸.
상자를 누르면 값·출처 · 로직이 부르는 로직은 상자 안에서 펼침 · 설계 값을 바꾸면
바로 다시 셈(로직 화면과 같은 `fetchLogic`·`runCalc` — 읽기·시험 계산만).
뼈대는 순수 모듈로 떼어 Node 헬퍼 + pytest 로 검증.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
- 왼쪽 패널에 「일위대가 로직 테스트」 컨테이너 추가 — 공종 10 개 고르기 + 방식 탭 A·B·C (B·C 는 준비 중)
- 방식 A: 공종 → 조건 질문(한 번에 하나) → 재료·기계 고르기 → 결과 호표 · 식 안 보임 · 저장 없음
- 대상 10 개는 복잡도로 재어 고름(scripts/로직_복잡도_재기.py) · 시험 test_m01_test_container.py
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
- `_틀.md` 7장에 재료 고르기 문법 — 호표 `요소` 를 조건 묶음으로 · 규격 낱말 조건 · 대표 줄 지정
- 엔진 `candidates`·`pick`·`check_pick` — 조건 안 후보 목록(화면·테스트 컨테이너 공용) · 시험 계산은 대표 줄, 없으면 값 있는 첫 줄(자재지역 우선)
- 로직 검사에 고르기 조건 검사 — 칸 이름 · 자재품목에 없는 구분·상세구분 · 조건 밖 대표 · 후보 0
- M01 서버 `GET /api/m01/materials` — 구분·상세구분·규격·자재지역으로 좁힌 후보와 기본 줄
- 옛 방식 재료 줄(`MP…`·`MT…` 키)은 그대로 돎
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
건설품셈 공통 8-3 원문 절 이름([00]토공기계 ~ [90]해상장비 10갈래)을 구분으로, 산림품셈 654줄 중 35줄은 임업기계로 구분
상세구분 = 이름 칸 그대로(기종 단위 그룹 — 규격 변형은 한 상세구분 안에 남김)
기존 세부분류(건설품셈/산림품셈) 칸은 그대로 둠 — check_master.py MERGED 대응이 그 칸 이름을 그대로 참조해 이름을 바꾸면 틀 검사가 깨짐
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0146J72jAMHpcmW4n2Y8WakE
- 다산에 같은 품명(그레이팅 · 맨홀뚜껑 · 보행매트 · 합성목재 · 용접철망 · 갈매기표지판 · 고무링 · 혼합골재 등): 같은 치수 후보의 최저가를 관급 열에 채움 · 안 맞으면 비움
- 다산에 없는 품명(관 · 안전시설 · 종자·비료·식생 · 골재·경계석 · 매트 · 목재): 새 줄 6,239 · 자재품목 24,353 → 30,592
- update_관급단가_합침.py 신설 · apply 가 부름 · 다시 돌려도 같은 결과
- 설계 문서에 합친 결과 · 시험 추가
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
- 인력.json — 절단공·사진제판공·사진식자공·측량사·측량기사·시공측량기사·측량조수·시공측량조수·특수운전공 상태 「추정」 · 값은 준용 직종 노임 · 출처는 근거 문서 · 비고 한마디
- 구분 「미확보」 등록부·빌더 짝짓기 없앰 · check_master BOOKS 에 공간정보법
- 근거 md 에 「사용자 지정 추정」 절
- 로직 일괄 시험 계산 통과 1,109 → 1,119 · 멈춤 245 → 235
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
재료_유가전력.json 전력 18줄 가운데 두 줄만 남김: ① 주택용 저압 전력량요금
120.0원/kWh(처음 200kWh까지, 옛 키 MO000058 그대로) ② 일반용(갑)Ⅰ 저압 전력량요금
한 줄(여름 132.4·봄가을 91.9·겨울 119.0 세 계절 단순평균 114.4원/kWh, 새 키
MO000073) — 비고에 계절 평균 값을 남김. 기본요금·최저요금·산업용(갑)Ⅰ·임시전력(갑)
16줄은 마스터에서 뺌(md 원문에는 그대로) — _키대장.json 「폐기」로 옮김(build 스크립트가
다시 돌아도 같은 결과, 번호 재사용 없음).
로직_건설품셈_13장_플랜트설비공사.json의 「전력 계약종별」 입력 고르기 8곳 모두
["주택용 저압", "일반용(갑)Ⅰ 저압", "산업용(갑)Ⅰ 저압"] → 두 가지로 맞춤(산업용 뺌).
품셈재료 「전력」(MP000358) 연결은 {"이름": "전력량요금", "계약종별": "입력"} 구조라
바뀐 줄에도 그대로 이어짐 — master_material.py 코드 변경 불요(구분·상세구분·이름
앞머리로 찾는 방식이라 데이터만 바뀌면 됨).
검증: check_master 틀·로직 0건(전체) · test_masterdata_check·test_m01_api 72건 전부
통과(test_전력은_계약종별로_고름이 MO000058.값=120 그대로 확인). 계산 결과 전후 동일.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WaS48Nvs26o3aFUpcfJxVv
- 품셈재료 「전력」 연결 = {이름: 전력량요금, 계약종별: 입력} — 유가전력 전력 줄을 가리킴
- 전력 쓰는 로직 8 줄에 입력 「전력 계약종별」(주택용 저압 · 일반용(갑)Ⅰ 저압 · 산업용(갑)Ⅰ 저압) — 품셈·계약예규에 계약종별 규정 없어 기본값 두지 않음
- 임시전력(갑)은 주택용 저압 요금 그대로(요금표 6.가) — 따로 고르기에 두지 않음
- master_material: 자재품목 아닌 줄은 「값」 한 칸으로 읽고 계약종별 후보를 고름 · check_master 연결 모양·끊김 검사도 맞춤
- 자재품목 MT000006 · MT000007 삭제 → _키대장.json 「폐기」 · 빌더 DROP 에 더해 다시 만들어도 같음
- _틀.md 재료 절 · 시험 둘 고침(전력 계약종별 · 연결 낮은 값은 시멘트로)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- 자재품목 = 내 열 정리(유류 5줄 삭제 · 원문번호 칸 없음) 기준 · 저쪽 관급 값 1,012 줄 · 비고 1,507 줄 채택
- 조달청에만 있는 380 줄 더함 — 원문번호 칸 없이 · 키 MT023981~MT024360 은 _키대장.json 에 등록
- update_관급단가.py 는 procured() 로 대장에서 「조달청 …」 키를 가려 짝지음 — 줄의 원문번호 칸을 보지 않음
- _키대장.json 「다음」 MT 24361 · MO 73 · 「폐기」 는 양쪽 합집합
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
- 값 = 마지막 공표 조사월 값 × 조사월별 전체 평균 증가율을 이어 곱하되 곱할 때마다 원 미만 버림(건설노임 4-라 방식 준용 · 제조 원문에 규정 없음)
- 상태 「미공표」 → 「산정」 · 비고 「산정: <조사월> <값>원 × 평균 증가율(원 미만 버림) — 건설노임 4-라 방식 준용 · 제조 원문에 규정 없음」
- 빌더 build_인력_노임.py 에 estimate_make 추가 — 다시 돌려도 같은 값 · 추적 md 5절 버림 열과 기계 대조
- 구분 머리 제조업 「원천」 에 옛 회차 11 개 「3. 직종별 조사노임.md」 와 미공표직종_추적.md 를 역할 「산정근거」 로 더함
- kbiz_track_unpublished.py 에 「단계마다 버림(채택)」 열 추가 · cak_track_unpublished.py 도 같은 말로 맞춤(건설 md 는 그대로 다시 나옴)
- 시험 — 인력 상태 집합에서 「미공표」 빠짐 · 제조 산정 값 한 줄 대조
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgUhN55Z3BCYhUJTjwTNfj
전력: 한전 사이버지점 전기공급약관 별표1(월간 전기요금표, 2025-01-01 시행 (C)판)을
resources/knowledge/original/원가계산/전기요금_한국전력/20250101/ 에 원문·완전 md화로
보관. 건설품셈 1-5-2호·산림품셈 1-7-2호·계약예규 예정가격작성기준 §19·§34를 대조 —
전력비를 어느 계약종별로 계상하라는 조문은 없음(전부 「실비 계상」만 규정) — 지어내지
않고 마스터 비고에 그대로 기록.
실내등유: 오피넷 OpenAPI 제품코드 C004를 collect_cost_sources.py 시도별 수집 루프에
추가(전국평균은 avgAllPrice 응답에 이미 포함되어 있어 코드 변경 불요). 오늘 자로 실제
수집해 유가_전국평균_2026-09-20.json · 유가_시도별_2026-09-20.json 저장.
마스터: 재료_오피넷유가.json → 재료_유가전력.json(테이블ID MO 그대로, 키 이어받기·
_키대장 다음 번호 37부터 신규 36줄). 기존 휘발유·경유 36줄은 로직 계산 결과가 갈리지
않도록 옛 판(2026-08-14/09-09) 값을 그대로 지니고, 구분 칸만 전국평균/시도별→유류로
바꿈. 실내등유 18줄(전국평균+17개 시도)과 전력 18줄(주택용·일반용(갑)Ⅰ·산업용(갑)Ⅰ
저압·임시전력(갑) 저압 위주 주요 계약종별)을 새로 추가. 파일 머리에 「구분」 등록부
(유류/전력 각각 원문·기관·판·지식DB 경로)를 둬 M01 /subs 가 두 갈래를 갈래대로 보게 함.
재료_유가전력.json을 만드는 build_재료_유가전력.py 신설(다음부터 이 스크립트로 갱신).
파일 이름·원문 규칙에 맞춰 master_keys.py·check_master.py의 "오피넷유가" 키를
"유가전력"으로, M01_MasterData_UI_Side.ts의 재료 탭 이름도 같이 고침 — 로직의
MO:{연료}:{지역} 참조는 원문번호로만 찾아 영향 없음(로직 파일은 손대지 않음).
검증: check_master 틀 0건(전체) · 로직 0건(전체) · test_masterdata_check·test_m01_api·
test_b09_fuel_region 73건 전부 통과(계산 결과 전후 동일 확인).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WaS48Nvs26o3aFUpcfJxVv
안티그래비티 인터넷 대응 31 직종을 지식DB 원문 md 로 하나씩 대조 — 원문 확인 11 · 부분 확인 9 · 원문에 없음 11
측량기사·측량사는 대응표 기존 확인과 상충 확인 — 기존 대응표를 따름(안티그래비티 주장 기각)
사진제판공·사진식자공은 지식DB에 이름 자체 없음 — 전자조판원·편집교정사 쪽이 작업범위상 더 가까움
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0146J72jAMHpcmW4n2Y8WakE
- 아스콘 지역 포함(시군 붙은 글 끊기) · R3-H/A1-H 규격 번호 떼기 · 파형강관 ×t·1RS·PE 피복 · 교량받침·합성목재·혼합골재 제조사 괄호 짝
- 못 채운 495줄 비고에 까닭(조달청 종합쇼핑몰에 없음 · 짝 못 지음) · 경질폴리염화비닐관 받기
- 다산 4,552줄 기준 채움 4,057 · 맞음 3,442 · 다름 615 · 못 채움 495 · 로직 일괄 시험 멈춤 327 그대로
- 시험 13건 · 설계 문서 대조표 갱신
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ