feat(master_data): 관급 짝짓기 규칙 넓힘 · 단위 시험 · 호출 오류 키 가림

- 아스콘 규격 괄호 조합 이름 떼기 · 시군 묶음 지역 짝짓기 · 지난번 못 채운 줄 재시도
- 관급 열 채움 3,045 · null 1,507 (보류 394 · 못 채움 1,113)
- test_masterdata_procure.py 7건 · 설계 문서에 제조사 선택지 · 로직 일괄 시험 전후 (1,024/327 동일)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
This commit is contained in:
2026-09-20 17:18:32 +09:00
co-authored by Claude Sonnet 5
parent 3c7a665d68
commit b3e939849a
4 changed files with 230 additions and 88 deletions
@@ -5,7 +5,7 @@
- **관급 단가는 조달청 종합쇼핑몰 API 3종에서 「분류명 부분 글자」로 받을 수 있음** — 레미콘·아스콘은 「조합공통품목」 줄이 지역별 관급 단가(다산소프트 관급 열과 같은 것). 인증키 = 기존 공공데이터포털 일반 인증키 하나(활용신청 끝남).
- 지난번 「시설공통자재 6,999줄」(`PriceInfoService`)에는 관급 자재가 없음 — 잘못 고른 API.
- **레미콘 2,095줄 중 2,028줄이 다산소프트 값과 똑같음**(97%). 아스콘은 짝은 서고 값은 기준일이 달라 다름. 철근·파형강관·흄관은 제조사별 값이 갈려 **채우지 않고 보류**.
- 정본 `재료_자재품목.json` 관급 열을 다산소프트 값 → 조달청 값으로 바꿈: 관급 열이 있던 4,552줄 중 **채움 2,981 · null 1,571**(다산 값 남기지 않음).
- 정본 `재료_자재품목.json` 관급 열을 다산소프트 값 → 조달청 값으로 바꿈: 관급 열이 있던 4,552줄 중 **채움 3,045 · null 1,507**(다산 값 남기지 않음).
- 다시 돌리기 — `./venv/Scripts/python.exe resources/master_data/scripts/update_관급단가.py update`
## 조달청 API (공공데이터포털 15129471 `at/ShoppingMallPrdctInfoService`)
@@ -41,21 +41,44 @@
| 갈래 | 전체 | 짝 서고 채움 | 값 같음 | 값 다름 | 보류(제조사별 값 갈림) | 못 채움 |
|---|---|---|---|---|---|---|
| 레미콘 | 2,095 | 2,078 | **2,028** | 50 | 0 | 17 |
| 아스콘 | 1,430 | 902 | 0 | 902 | 150 | 378 |
| 아스콘 | 1,430 | 966 | 0 | 966 | 162 | 302 |
| 철근 | 81 | 0 | 0 | 0 | 81 | 0 |
| H형강 | 57 | 1 | 0 | 1 | 26 | 30 |
| 파형강관 | 214 | 0 | 0 | 0 | 98 | 116 |
| 흄관 | 27 | 0 | 0 | 0 | 27 | 0 |
| 그 밖(벤치플륨 · 조경석 · 주철관 등) | 648 | 0 | 0 | 0 | 0 | 648 |
| **합계** | **4,552** | **2,981** | 2,028 | 953 | 382 | 1,189 |
| **합계** | **4,552** | **3,045** | 2,028 | 1,017 | 394 | 1,113 |
(정본 null 1,571 = 보류 382 + 못 채움 1,189 — 「못 채움」 = 짝 자체가 안 선 줄 · 「보류」 = 짝은 서나 값이 갈려 채우지 않은 줄.)
(정본 null 1,507 = 보류 394 + 못 채움 1,113 — 「못 채움」 = 짝 자체가 안 선 줄 · 「보류」 = 짝은 서나 값이 갈려 채우지 않은 줄.)
- **레미콘 값 다름 50** — 광주·전남 25-30-180(다산 117,800 · 조달청 118,710) · 충남 25-33-150(130,800 · 131,000) 등 소수 규격 + 제주 세 조합(다산 119,130 · 조달청 125,940~126,000). 지역·규격은 같음 → **기준일 차이(다산 2026-07 · 조달청 계약 2026-06-01~)나 다산 원문 값 차이** — 이 조사로는 어느 쪽인지 못 가림.
- **아스콘 값 다름 902 전부** — 조달청 계약 시작이 **2026-08-01**(다산 「조달 26.7」보다 새 기준). 지역·배합·등급은 같음 → 기준일 차이. 비율 1.003~1.033.
- **아스콘 값 다름 966 전부** — 조달청 계약 시작이 **2026-08-01**(다산 「조달 26.7」보다 새 기준). 지역·배합·등급은 같음 → 기준일 차이. 비율 1.003~1.033.
- **철근** — 다산 값(SD400 D10 827,640 · D13~ 819,500)은 조달청 제조사별 값(5~8가지) 중 최저와 8/81만 같음 → 다산이 어느 제조사·조건을 골랐는지 원문에 없음 → 보류.
- **H형강** — 다산 1,228,830 = 동국제강(SS275) 값, 현대제철은 1,301,590 → 다산은 최저 제조사 값. 그러나 규칙으로 못박지 않음(보류 26). 못 채움 30 = 다산 규격 중 조달청 H빔에 없는 치수.
- **못 채움 까닭** — 지역 못 찾음(레미콘 16 · 아스콘 270: 조달청 지역 묶음이 다산과 다름) · 규격 없음(아스콘 108 · 레미콘 1) · 후보 없음(H형강 30 · 파형강관 116 — 「-거양」 제조사 줄·D 규격이 조달청 목록에 없음) · 짝짓기 아직 없음(648).
- **못 채움 까닭** — 지역 못 찾음(레미콘 16 · 아스콘 240: 조달청 지역 묶음이 다산과 다름) · 규격 없음(아스콘 62 · 레미콘 1) · 후보 없음(H형강 30 · 파형강관 116 — 「-거양」 제조사 줄·D 규격이 조달청 목록에 없음) · 짝짓기 아직 없음(648).
## 짝짓기 규칙 넓힘 (2차)
- 아스콘 규격 「조합공통품목(조합이름), …」 — 괄호 조합 이름을 떼고 짝짓기(못 채움 −46).
- 지역 묶음 — 다산 줄이 여러 시군 묶음(「강원도(동해,삼척,영월,…)」)이고 묶음 안 시군마다 조달청 시군 줄이 **모두** 있을 때만, 그 줄들 값이 하나면 채움(갈리면 보류 · 「제외」 묶음 · 시군 이름 붙은 글 · 조달청에 없는 시군은 그대로 못 채움). 30줄 채움 · 옛값 대비 0.999~1.071.
- 못 넓힌 것 — 아스콘 240(「경남(진주사천남해…」 시군 구분 없는 글 · 「서울,경기(…구 제외)」) · R3-H 순환 규격 62 · 레미콘 16(여수시 읍면 묶음).
## 제조사별 값 — 고르는 선택지 (관리자가 정함 · 지금은 보류 394)
| 선택지 | 뜻 | 확인된 것 |
|---|---|---|
| 최저가 | 제조사·조합 값 중 가장 낮은 값 | H형강 26줄에서 다산 값과 같았음 · 철근은 8/81 · 파형강관 15/98 |
| 최신 계약 | 계약 시작일이 가장 늦은 줄 | 아직 대조 안 함 |
| 특정 제조사 고정 | 예: 동국제강 | 다산이 어느 곳을 골랐는지 원문에 없음 |
| 평균 | 제조사 값 평균 | 관급 단가 성격(조합 공통)과 안 맞음 |
- 어느 쪽이든 `update_관급단가.py``pick()` 한 곳만 고침.
## 로직 일괄 시험 계산 (전후)
- 방법 — 로직 줄마다 입력 조합(최대 40)으로 `master_formula.run` 을 돌려 하나라도 통과하면 통과 · 아니면 멈춤.
- 관급 열 교체 전(다산소프트 값) **통과 1,024 · 멈춤 327** → 후(조달청 값) **통과 1,024 · 멈춤 327** — 변화 없음(멈춤 까닭 = 값 없음 285 · 맞는 줄 없음 25 · 지역 값 없음 16 · 칸 없음 1).
- check_master — 틀 0 · 본문 1(기존) · 로직 0.
## 갱신 절차
@@ -68,4 +91,4 @@
- 보류 갈래(철근·파형강관·흄관·H형강·아스콘 일부)는 **제조사 고르는 기준**(최저가 · 특정 조합 등)을 관리자가 정해야 채움.
- 못 찾은 지역·648줄 갈래는 조달청 다른 서비스(가격정보 `getPriceInfoListMrktCnstrctPc` 등) 조사 필요.
- `resources/tester` 시험 없음 — 짝짓기 단위 시험은 다음 손.
- 짝짓기 시험 = `resources/tester/test_masterdata_procure.py`(견본 응답 7건).