feat(master_data): 관급 제조사별 최저가 채움 · 조달청 2차 받기 · 짝짓기 갈래 · 새 줄 380
- 제조사별로 값이 갈리면 같은 규격 최저가 + 비고에 제조사 (보류 394 채움) - 조달청 분류 23개 더 받음 (원본 gz 보관) · 시멘트 · 조경석 · 주철관 · 이음관 · 골재 · 측구수로관 · 볼라드 · 맨홀 · 용접철망 · 돌망태 · 매트 짝짓기 - 조달청에만 있는 금속돌망태 372 · 토목용부직포 8 을 자재품목에 새 줄로 들임 (키대장 갱신) - 다산 값 대조 기준 ±5% · 짝짓기 시험 11건 · 설계 문서 갱신 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PAdA5ThqmtVSsbzjusk1cJ
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -4,14 +4,45 @@
|
||||
|
||||
| 파일 | 오퍼레이션 | 분류명 | 줄 수 |
|
||||
|---|---|---|---|
|
||||
| MASCntrct_레미콘.json.gz | getMASCntrctPrdctInfoList | 레미콘 | 26,384 (totalCount 26,384) |
|
||||
| ThptyUcntrct_레미콘.json.gz | getThptyUcntrctPrdctInfoList | 레미콘 | 128 (totalCount 128) |
|
||||
| MASCntrct_아스팔트콘크리트.json.gz | getMASCntrctPrdctInfoList | 아스팔트콘크리트 | 17,949 (totalCount 17,949) |
|
||||
| Ucntrct_아스팔트콘크리트.json.gz | getUcntrctPrdctInfoList | 아스팔트콘크리트 | 17 (totalCount 17) |
|
||||
| ThptyUcntrct_아스팔트콘크리트.json.gz | getThptyUcntrctPrdctInfoList | 아스팔트콘크리트 | 13 (totalCount 13) |
|
||||
| MASCntrct_봉강.json.gz | getMASCntrctPrdctInfoList | 봉강 | 1,039 (totalCount 1,039) |
|
||||
| MASCntrct_H빔.json.gz | getMASCntrctPrdctInfoList | H빔 | 181 (totalCount 181) |
|
||||
| MASCntrct_파형강관.json.gz | getMASCntrctPrdctInfoList | 파형강관 | 6,970 (totalCount 6,970) |
|
||||
| ThptyUcntrct_파형강관.json.gz | getThptyUcntrctPrdctInfoList | 파형강관 | 1,573 (totalCount 1,573) |
|
||||
| MASCntrct_콘크리트관.json.gz | getMASCntrctPrdctInfoList | 콘크리트관 | 504 (totalCount 504) |
|
||||
| Ucntrct_콘크리트관.json.gz | getUcntrctPrdctInfoList | 콘크리트관 | 10 (totalCount 10) |
|
||||
| MASCntrct_레미콘.json.gz | getMASCntrctPrdctInfoList | 레미콘 | 26,384 |
|
||||
| ThptyUcntrct_레미콘.json.gz | getThptyUcntrctPrdctInfoList | 레미콘 | 128 |
|
||||
| MASCntrct_아스팔트콘크리트.json.gz | getMASCntrctPrdctInfoList | 아스팔트콘크리트 | 17,949 |
|
||||
| Ucntrct_아스팔트콘크리트.json.gz | getUcntrctPrdctInfoList | 아스팔트콘크리트 | 17 |
|
||||
| ThptyUcntrct_아스팔트콘크리트.json.gz | getThptyUcntrctPrdctInfoList | 아스팔트콘크리트 | 13 |
|
||||
| MASCntrct_봉강.json.gz | getMASCntrctPrdctInfoList | 봉강 | 1,039 |
|
||||
| MASCntrct_H빔.json.gz | getMASCntrctPrdctInfoList | H빔 | 181 |
|
||||
| MASCntrct_파형강관.json.gz | getMASCntrctPrdctInfoList | 파형강관 | 6,970 |
|
||||
| ThptyUcntrct_파형강관.json.gz | getThptyUcntrctPrdctInfoList | 파형강관 | 1,573 |
|
||||
| MASCntrct_콘크리트관.json.gz | getMASCntrctPrdctInfoList | 콘크리트관 | 504 |
|
||||
| Ucntrct_콘크리트관.json.gz | getUcntrctPrdctInfoList | 콘크리트관 | 10 |
|
||||
| MASCntrct_시멘트.json.gz | getMASCntrctPrdctInfoList | 시멘트 | 8 |
|
||||
| MASCntrct_골재.json.gz | getMASCntrctPrdctInfoList | 골재 | 136 |
|
||||
| MASCntrct_조경석.json.gz | getMASCntrctPrdctInfoList | 조경석 | 836 |
|
||||
| Ucntrct_주철관.json.gz | getUcntrctPrdctInfoList | 주철관 | 167 |
|
||||
| MASCntrct_파형강관이음관.json.gz | getMASCntrctPrdctInfoList | 파형강관이음관 | 2,373 |
|
||||
| ThptyUcntrct_파형강관이음관.json.gz | getThptyUcntrctPrdctInfoList | 파형강관이음관 | 409 |
|
||||
| MASCntrct_배수로.json.gz | getMASCntrctPrdctInfoList | 배수로 | 4,651 |
|
||||
| ThptyUcntrct_배수로.json.gz | getThptyUcntrctPrdctInfoList | 배수로 | 6 |
|
||||
| MASCntrct_블록.json.gz | getMASCntrctPrdctInfoList | 블록 | 23,540 |
|
||||
| Ucntrct_블록.json.gz | getUcntrctPrdctInfoList | 블록 | 2 |
|
||||
| ThptyUcntrct_블록.json.gz | getThptyUcntrctPrdctInfoList | 블록 | 731 |
|
||||
| MASCntrct_돌망태.json.gz | getMASCntrctPrdctInfoList | 돌망태 | 844 |
|
||||
| ThptyUcntrct_돌망태.json.gz | getThptyUcntrctPrdctInfoList | 돌망태 | 18 |
|
||||
| MASCntrct_합성목재.json.gz | getMASCntrctPrdctInfoList | 합성목재 | 198 |
|
||||
| MASCntrct_볼라드.json.gz | getMASCntrctPrdctInfoList | 볼라드 | 4,681 |
|
||||
| MASCntrct_교량받침.json.gz | getMASCntrctPrdctInfoList | 교량받침 | 4,081 |
|
||||
| ThptyUcntrct_교량받침.json.gz | getThptyUcntrctPrdctInfoList | 교량받침 | 5,211 |
|
||||
| MASCntrct_용접철망.json.gz | getMASCntrctPrdctInfoList | 용접철망 | 700 |
|
||||
| ThptyUcntrct_섬유.json.gz | getThptyUcntrctPrdctInfoList | 섬유 | 4 |
|
||||
| MASCntrct_폴리에틸렌.json.gz | getMASCntrctPrdctInfoList | 폴리에틸렌 | 9,982 |
|
||||
| ThptyUcntrct_폴리에틸렌.json.gz | getThptyUcntrctPrdctInfoList | 폴리에틸렌 | 1,835 |
|
||||
| MASCntrct_맨홀.json.gz | getMASCntrctPrdctInfoList | 맨홀 | 11,495 |
|
||||
| MASCntrct_매트.json.gz | getMASCntrctPrdctInfoList | 매트 | 4,087 |
|
||||
| ThptyUcntrct_매트.json.gz | getThptyUcntrctPrdctInfoList | 매트 | 98 |
|
||||
| MASCntrct_낙석.json.gz | getMASCntrctPrdctInfoList | 낙석 | 2,057 |
|
||||
| ThptyUcntrct_그레이팅.json.gz | getThptyUcntrctPrdctInfoList | 그레이팅 | 114 |
|
||||
| MASCntrct_벽돌.json.gz | getMASCntrctPrdctInfoList | 벽돌 | 370 |
|
||||
| ThptyUcntrct_시트.json.gz | getThptyUcntrctPrdctInfoList | 시트 | 39 |
|
||||
| MASCntrct_비료.json.gz | getMASCntrctPrdctInfoList | 비료 | 101 |
|
||||
| MASCntrct_압륜.json.gz | getMASCntrctPrdctInfoList | 압륜 | 142 |
|
||||
| ThptyUcntrct_부직포.json.gz | getThptyUcntrctPrdctInfoList | 부직포 | 8 (totalCount 8) |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"다음": {"LB": 409, "EQ": 655, "RT": 20, "MN": 7000, "MT": 23981, "MO": 37, "MP": 364, "FX": 6, "CF": 159, "QF": 477, "GF": 249, "CC": 336, "GC": 1104, "QC": 2060},
|
||||
"다음": {"LB": 409, "EQ": 655, "RT": 20, "MN": 7000, "MT": 24361, "MO": 37, "MP": 364, "FX": 6, "CF": 159, "QF": 477, "GF": 249, "CC": 336, "GC": 1104, "QC": 2060},
|
||||
"폐기": {"MN": "재료_나라장터자재 — old 로 옮김 · 로직은 자재품목·품셈재료로 갈아 끼움"},
|
||||
"키": {
|
||||
"CC000001": {"원문번호": "공통 1-3-1 콘크리트 및 포장용 재료", "파일": "계수_건설품셈_01장_적용기준.json"},
|
||||
@@ -27292,6 +27292,386 @@
|
||||
"MT023978": {"원문번호": "M0005250036", "파일": "재료_자재품목.json"},
|
||||
"MT023979": {"원문번호": "M0005250037", "파일": "재료_자재품목.json"},
|
||||
"MT023980": {"원문번호": "M0005250038", "파일": "재료_자재품목.json"},
|
||||
"MT023981": {"원문번호": "조달청 토목용부직포 50×2×t1.8~6mm", "파일": "재료_자재품목.json"},
|
||||
"MT023982": {"원문번호": "조달청 토목용부직포 50×2×t4~9mm", "파일": "재료_자재품목.json"},
|
||||
"MT023983": {"원문번호": "조달청 토목용부직포 50×2×t6~12mm", "파일": "재료_자재품목.json"},
|
||||
"MT023984": {"원문번호": "조달청 토목용부직포 50×2×t1~5mm", "파일": "재료_자재품목.json"},
|
||||
"MT023985": {"원문번호": "조달청 토목용부직포 50×2×t2~7mm", "파일": "재료_자재품목.json"},
|
||||
"MT023986": {"원문번호": "조달청 토목용부직포 50×2×t3~8mm", "파일": "재료_자재품목.json"},
|
||||
"MT023987": {"원문번호": "조달청 토목용부직포 50×2×t5~10mm", "파일": "재료_자재품목.json"},
|
||||
"MT023988": {"원문번호": "조달청 토목용부직포 50×2×t5~11mm", "파일": "재료_자재품목.json"},
|
||||
"MT023989": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선4종Φ3.2mm, 사각전면보강형", "파일": "재료_자재품목.json"},
|
||||
"MT023990": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선4종Φ4mm, 사각전면보강형", "파일": "재료_자재품목.json"},
|
||||
"MT023991": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선4종Φ4mm, 사각전면보강형", "파일": "재료_자재품목.json"},
|
||||
"MT023992": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각전면보강형", "파일": "재료_자재품목.json"},
|
||||
"MT023993": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선4종Φ3.2mm, 사각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT023994": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT023995": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT023996": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT023997": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선4종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT023998": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT023999": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm, 육각보강매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024000": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024001": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선Φ3.2mm, 사각개비온-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024002": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선Φ3.2mm, 사각개비온-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024003": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선Φ3.2mm, 사각개비온-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024004": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각개비온-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024005": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각-상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024006": {"원문번호": "조달청 금속돌망태 L2000×W1000×H1000mm, 아연도금철선5종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024007": {"원문번호": "조달청 금속돌망태 L1000×W1000×H1000mm, 아연도금철선5종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024008": {"원문번호": "조달청 금속돌망태 L1500×W1000×H1000mm, 아연도금철선5종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024009": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ3.2mm, 사각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024010": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm, 중첩육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024011": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선4종3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024012": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선4종Φ3.2mm, 사각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024013": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선4종Φ4mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024014": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선4종Φ4mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024015": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선4종Φ4mm, 사각전면보강형", "파일": "재료_자재품목.json"},
|
||||
"MT024016": {"원문번호": "조달청 금속돌망태 1000×1000×500mm, 아연도금철선4종Φ3.2mm, 사각보강매트리스", "파일": "재료_자재품목.json"},
|
||||
"MT024017": {"원문번호": "조달청 금속돌망태 1000×1000×300mm, 아연도금철선4종Φ3.2mm, 사각보강매트리스", "파일": "재료_자재품목.json"},
|
||||
"MT024018": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각전면보강형", "파일": "재료_자재품목.json"},
|
||||
"MT024019": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각전면보강형", "파일": "재료_자재품목.json"},
|
||||
"MT024020": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선4종Φ4mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024021": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선4종Φ4mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024022": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024023": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024024": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024025": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선5종Φ2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024026": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선Φ3.2mm, 사각개비온-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024027": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각개비온-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024028": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각개비온-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024029": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각-상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024030": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각-상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024031": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온상자형, 아연도금철선, Φ2.7-3.4mm", "파일": "재료_자재품목.json"},
|
||||
"MT024032": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각개비온상자형, 아연도금철선, Φ2.7-3.4mm", "파일": "재료_자재품목.json"},
|
||||
"MT024033": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각개비온상자형, 아연도금철선, Φ2.7-3.4mm", "파일": "재료_자재품목.json"},
|
||||
"MT024034": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ3.2mm, 사각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024035": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선5종2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024036": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선4종3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024037": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선5종2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024038": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선4종3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024039": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선4종3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024040": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024041": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선5종2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024042": {"원문번호": "조달청 금속돌망태 (부품)450×950mm, 아연도금철선3종4.5mm, 타원형-뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024043": {"원문번호": "조달청 금속돌망태 450×950mm, 아연도금철선3종4.0mm, 타원형-몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024044": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온상자형-아연도금철선, Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024045": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각개비온상자형-아연도금철선, Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024046": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각개비온상자형-아연도금철선, Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024047": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024048": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm, 육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024049": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm, 육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024050": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각-상자형, 아연도금철선Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024051": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선5종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024052": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024053": {"원문번호": "조달청 금속돌망태 450×450mm, 아연도금철선3종Φ4.0mm, 원형몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024054": {"원문번호": "조달청 금속돌망태 450×450mm, 아연도금철선3종Φ4.0mm, 원형뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024055": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024056": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각-상자형, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024057": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선Φ2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024058": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각상자형, 아연도금철선5종Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024059": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각상자형, 아연도금철선5종Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024060": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각상자형, 아연도금철선5종Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024061": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm외, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024062": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm외, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024063": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024064": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024065": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 육각개비온상자형-아연도금철선, Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024066": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm, 육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024067": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각-상자형, 아연도금철선Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024068": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각-상자형, 아연도금철선Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024069": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024070": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 슈퍼개비온, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024071": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 슈퍼개비온, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024072": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 슈퍼개비온, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024073": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선Φ2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024074": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 사각-상자형, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024075": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각-상자형, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024076": {"원문번호": "조달청 금속돌망태 1000×2000×1000mm, 아연도금철선5종Φ2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024077": {"원문번호": "조달청 금속돌망태 1000×1500×1000mm, 아연도금철선5종Φ2.7mm, 육각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024078": {"원문번호": "조달청 금속돌망태 1000×1500×1000mm, 아연도금철선4종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024079": {"원문번호": "조달청 금속돌망태 1000×2000×1000mm, 아연도금철선4종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024080": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024081": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024082": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024083": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각상자형, 아연도금철선4종Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024084": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각상자형, 아연도금철선4종Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024085": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm사각상자형, 아연도금철선4종Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024086": {"원문번호": "조달청 금속돌망태 육각개비온, 1500×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024087": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm외, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024088": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024089": {"원문번호": "조달청 금속돌망태 육각개비온, 2000×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024090": {"원문번호": "조달청 금속돌망태 육각개비온, 1000×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024091": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm, 육각보강매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024092": {"원문번호": "조달청 금속돌망태 1000×1000×400mm, 아연도금철선5종Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024093": {"원문번호": "조달청 금속돌망태 1000×1000×500mm, 아연도금철선5종/4종Φ2.7/3.2mm, 전면부사각테두리보강복합개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024094": {"원문번호": "조달청 금속돌망태 1500×1000×400mm, 아연도금철선5종/4종Φ2.7/3.2mm, 칸막이상단테두리보강복합매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024095": {"원문번호": "조달청 금속돌망태 사각-상자형, 아연도금철선4종Φ3.2mm, 1000×500×2000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024096": {"원문번호": "조달청 금속돌망태 사각-상자형, 아연도금철선4종Φ3.2mm, 1000×1000×1500mm", "파일": "재료_자재품목.json"},
|
||||
"MT024097": {"원문번호": "조달청 금속돌망태 사각-상자형, 아연도금철선4종Φ3.2mm, 1000×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024098": {"원문번호": "조달청 금속돌망태 사각-상자형, 아연도금철선4종Φ3.2mm, 1000×1000×2000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024099": {"원문번호": "조달청 금속돌망태 육각-상자형, 아연도금철선5종Φ2.7mm, 1000×1000×2000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024100": {"원문번호": "조달청 금속돌망태 육각-상자형, 아연도금철선5종Φ2.7mm, 1000×1000×1500mm", "파일": "재료_자재품목.json"},
|
||||
"MT024101": {"원문번호": "조달청 금속돌망태 이불형-뚜껑, 아연도금철선3종Φ4.0, 500×1200mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024102": {"원문번호": "조달청 금속돌망태 원형-뚜껑, 아연도금철선3종Φ4.0, 450×450mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024103": {"원문번호": "조달청 금속돌망태 이불형-뚜껑, 아연도금철선3종Φ4.0, 400×1200mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024104": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024105": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024106": {"원문번호": "조달청 금속돌망태 육각-상자형, 아연도금철선Φ2.7mm, 2000×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024107": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각개비온, 상자형, 아연도금철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024108": {"원문번호": "조달청 금속돌망태 사각-상자형, 1500mm×1000mm×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024109": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선Φ3.2mm, 사각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024110": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 중첩형, 육각-상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024111": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 중첩형, 육각-상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024112": {"원문번호": "조달청 금속돌망태 H500mm, 알루미늄합금아연도금철선Φ2.7mm, 매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024113": {"원문번호": "조달청 금속돌망태 H300mm, 아연도철선4종Φ3.2mm, 사각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024114": {"원문번호": "조달청 금속돌망태 1000×1500×1000mm, 아연도금철선5종Φ2.7mm, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024115": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종Φ2.7mm, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024116": {"원문번호": "조달청 금속돌망태 1000×1000×500mm, 아연도금철선5종2.7mm, 육각보강매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024117": {"원문번호": "조달청 금속돌망태 이불형-몸통, 아연도금철선3종Φ4.0, 400×1200mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024118": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선5종/4종Φ2.7/3.2mm, 전면부사각테두리보강복합개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024119": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종/4종Φ2.7/3.2mm, 전면부사각테두리보강복합개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024120": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선5종/4종Φ2.7/3.2mm, 전면부사각테두리보강복합개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024121": {"원문번호": "조달청 금속돌망태 1000×1000×460mm, 아연도금철선4종Φ3.2mm, 사각전면테두리보강식생개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024122": {"원문번호": "조달청 금속돌망태 육각-상자형, 아연도금철선5종Φ2.7mm, 1000×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024123": {"원문번호": "조달청 금속돌망태 이불형-몸통, 아연도금철선3종Φ4.0, 500×1200mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024124": {"원문번호": "조달청 금속돌망태 원형-몸통, 아연도금철선3종Φ4.0, 450×450mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024125": {"원문번호": "조달청 금속돌망태 육각-상자형, 아연도금철선Φ2.7mm, 1000×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024126": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선Φ2.2mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024127": {"원문번호": "조달청 금속돌망태 육각-상자형, 아연도금철선Φ2.7mm, 1500×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024128": {"원문번호": "조달청 금속돌망태 사각-상자형, 1000mm×1000mm×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024129": {"원문번호": "조달청 금속돌망태 사각-상자형, 2000mm×1000mm×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024130": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선Φ3.2mm, 사각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024131": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각개비온, 상자형, 아연도금철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024132": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온, 상자형, 아연도철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024133": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선Φ2.7mm, 육각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024134": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선Φ2.7mm, 육각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024135": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선Φ2.7mm, 육각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024136": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선Φ3.2mm, 사각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024137": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선Φ3.2mm, 사각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024138": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 중첩형, 육각-상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024139": {"원문번호": "조달청 금속돌망태 H300mm, 알루미늄합금아연도금철선Φ2.7mm, 매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024140": {"원문번호": "조달청 금속돌망태 1000×2000×1000mm, 아연도금철선5종Φ2.7mm, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024141": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm, 중첩육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024142": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각개비온 아연도금5종 Φ2.7 MM", "파일": "재료_자재품목.json"},
|
||||
"MT024143": {"원문번호": "조달청 금속돌망태 1000×2000×1000mm, 육각개비온-상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024144": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각개비온, 상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024145": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각개비온, 상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024146": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각-상자형, 아연도금철선Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024147": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm, 중첩육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024148": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 사각개비온상자형-아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024149": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각개비온상자형-아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024150": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종Φ2.7, 오각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024151": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선5종Φ2.7, 오각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024152": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm, 중첩육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024153": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm, 중첩육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024154": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각개비온 아연도금5종 Φ2.7 MM", "파일": "재료_자재품목.json"},
|
||||
"MT024155": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온 아연도금5종 Φ2.7 MM", "파일": "재료_자재품목.json"},
|
||||
"MT024156": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온-상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024157": {"원문번호": "조달청 금속돌망태 1000×1500×1000mm, 육각개비온-상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024158": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온, 상자형, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024159": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 사각-상자형, 아연도금철선Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024160": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각-상자형, 아연도금철선Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024161": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm 사각개비온상자형-아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024162": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 사각개비온상자형-아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024163": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.2mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024164": {"원문번호": "조달청 금속돌망태 H480mm, 아연도금철선5종Φ2.7mm, 오각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024165": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024166": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024167": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024168": {"원문번호": "조달청 금속돌망태 450×450mm, 아연도금철선3종Φ4.0mm, 원형-몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024169": {"원문번호": "조달청 금속돌망태 450×450mm, 아연도금철선3종Φ4.0mm, 원형-뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024170": {"원문번호": "조달청 금속돌망태 1000×1000×2000mm, 아연도금철선5종2.7mm, 육각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024171": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각개비온, 상자형, 아연도금철선, Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024172": {"원문번호": "조달청 금속돌망태 1000×1000×1500mm, 아연도금철선4종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024173": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm, 중첩육각식생매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024174": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm, 중첩육각매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024175": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각개비온상자형-아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024176": {"원문번호": "조달청 금속돌망태 #80-450×950mm, 타원형몸통-아연도금철선, Φ4.0mm", "파일": "재료_자재품목.json"},
|
||||
"MT024177": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 육각개비온상자형, 아연도금철선, Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024178": {"원문번호": "조달청 금속돌망태 원형450×450mm, 망눈150mm, 몸통, 아연도금철선3종Φ4.0", "파일": "재료_자재품목.json"},
|
||||
"MT024179": {"원문번호": "조달청 금속돌망태 1000×1000×400mm, 아연도금철선5종Φ2.7mm, 육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024180": {"원문번호": "조달청 금속돌망태 1000×1000×500mm, 아연도금철선5종Φ2.7mm, 육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024181": {"원문번호": "조달청 금속돌망태 1000×1000×500mm, 아연도금철선5종Φ몸체2.7/테두리3.4/체결선2.2mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024182": {"원문번호": "조달청 금속돌망태 1000×2000×500mm, 아연도금철선4종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024183": {"원문번호": "조달청 금속돌망태 DSS-11, 2000×1000×1000mm, 육각개비온, 상자형, 아연도금철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024184": {"원문번호": "조달청 금속돌망태 DSS-10, 1500×1000×1000mm, 육각개비온, 상자형, 아연도금철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024185": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.2mm, 복합매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024186": {"원문번호": "조달청 금속돌망태 1000×1000×1500mm, 아연도금철선5종2.7mm, 육각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024187": {"원문번호": "조달청 금속돌망태 사각-상자형, 아연도금철선Φ3.2, 1000×1000×2000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024188": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종2.7mm, 육각-상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024189": {"원문번호": "조달청 금속돌망태 1000×1000×1500mm, 사각-상자형, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024190": {"원문번호": "조달청 금속돌망태 1000×1200×500mm, 아연도금철선4종Φ3.2mm, 라운드사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024191": {"원문번호": "조달청 금속돌망태 1000×1200×1000mm, 아연도금철선4종Φ3.2mm, 라운드사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024192": {"원문번호": "조달청 금속돌망태 1000×1000×500mm, 아연도금철선4종Φ3.2mm, 식생라운드사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024193": {"원문번호": "조달청 금속돌망태 1000×1500×500mm, 아연도금철선4종Φ3.2mm, 라운드사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024194": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각개비온, 상자형, 아연도금철선, Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024195": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 육각개비온, 상자형, 아연도금철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024196": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, Φ3.2mm, 사각개비온형, 아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024197": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, Φ2.7mm, 육각개비온형, 아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024198": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, Φ2.7mm, 육각개비온형, 아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024199": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, Φ2.7mm, 육각개비온형, 아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024200": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온, 상자형-아연도금철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024201": {"원문번호": "조달청 금속돌망태 #80-450×950mm, 타원형금속돌망태, 뚜껑-아연도금철선, Φ4.0", "파일": "재료_자재품목.json"},
|
||||
"MT024202": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각개비온, 상자형-아연도금철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024203": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각개비온, 상자형-아연도금철선, Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024204": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선4종Φ3.2mm, 사각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024205": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, Φ3.2, 사각개비온형-아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024206": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, Φ3.2, 사각개비온형-아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024207": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, Φ3.2, 사각개비온형-아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024208": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선4종Φ3.2mm, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024209": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm, 중첩육각매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024210": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온, 아연도금철선5종", "파일": "재료_자재품목.json"},
|
||||
"MT024211": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.2mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024212": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm, 중첩육각식생매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024213": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm, 중첩육각식생매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024214": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm, 중첩육각매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024215": {"원문번호": "조달청 금속돌망태 #80-450×950mm, 타원형뚜껑-아연도금철선, Φ4.0mm", "파일": "재료_자재품목.json"},
|
||||
"MT024216": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각개비온, 상자형, 아연도금철선, 2.7-3.4mm", "파일": "재료_자재품목.json"},
|
||||
"MT024217": {"원문번호": "조달청 금속돌망태 원형450×450mm, 망눈150mm, 뚜껑, 아연도금철선3종Φ4.0", "파일": "재료_자재품목.json"},
|
||||
"MT024218": {"원문번호": "조달청 금속돌망태 1000×1000×300mm, 아연도금철선5종Φ2.7mm, 육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024219": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.2mm외, 복합매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024220": {"원문번호": "조달청 금속돌망태 DSS-09, 1000×1000×1000mm, 육각개비온, 상자형, 아연도금철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024221": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온, 상자형, 아연도금철선, Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024222": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, Φ3.2mm, 사각개비온형, 아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024223": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, Φ3.2mm, 사각개비온형-아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024224": {"원문번호": "조달청 금속돌망태 #80-450×950mm, 타원형금속돌망태, 몸통-아연도금철선, Φ4.0", "파일": "재료_자재품목.json"},
|
||||
"MT024225": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 사각개비온, 상자형-아연도금철선, Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024226": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각개비온, 상자형-아연도금철선, Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024227": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 사각개비온, 상자형-아연도금철선, Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024228": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 사각개비온, 상자형, 아연도금철선, Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024229": {"원문번호": "조달청 금속돌망태 오각-상자형, 아연도금철선5종Φ2.7mm, 2000×1000×500mm", "파일": "재료_자재품목.json"},
|
||||
"MT024230": {"원문번호": "조달청 금속돌망태 H300mm, 알루미늄합금도금철선Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024231": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각-상자형, 아연도금5종철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024232": {"원문번호": "조달청 금속돌망태 1000×1000×300mm, 스테인리스/아연도금철선5종Φ4mm, 스톤매트리스/일반형", "파일": "재료_자재품목.json"},
|
||||
"MT024233": {"원문번호": "조달청 금속돌망태 1000×2000×500mm, 아연도금철선4종Φ3.2mm, 사각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024234": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각-상자형, ", "파일": "재료_자재품목.json"},
|
||||
"MT024235": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각-상자형, ", "파일": "재료_자재품목.json"},
|
||||
"MT024236": {"원문번호": "조달청 금속돌망태 H300mm, 스테인리스/아연도금철선5종Φ4mm, , 스톤매트리스/일반형", "파일": "재료_자재품목.json"},
|
||||
"MT024237": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선4종Φ4.0mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024238": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, Φ3.2, 사각개비온형-아연도금철선", "파일": "재료_자재품목.json"},
|
||||
"MT024239": {"원문번호": "조달청 금속돌망태 1000×1000×2000mm, 아연도금철선4종Φ3.2mm, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024240": {"원문번호": "조달청 금속돌망태 1000×1000×1500mm, 아연도금철선4종Φ3.2mm, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024241": {"원문번호": "조달청 금속돌망태 오각-상자형, 아연도금철선5종Φ2.7mm, 2000×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024242": {"원문번호": "조달청 금속돌망태 H280mm, 아연도금철선5종Φ2.7mm, 오각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024243": {"원문번호": "조달청 금속돌망태 오각-상자형, 아연도금철선5종Φ2.7mm, 1500×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024244": {"원문번호": "조달청 금속돌망태 오각-상자형, 아연도금철선5종Φ2.7mm, 1000×1000×1000mm", "파일": "재료_자재품목.json"},
|
||||
"MT024245": {"원문번호": "조달청 금속돌망태 H500mm, 알루미늄합금도금철선Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024246": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선4종Φ4.0mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024247": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선4종Φ4.0mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024248": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각-상자형, 아연도금5종철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024249": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선4종Φ4mm, 사각전면보강형", "파일": "재료_자재품목.json"},
|
||||
"MT024250": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm, 중첩육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024251": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ4mm, 스톤매트리스", "파일": "재료_자재품목.json"},
|
||||
"MT024252": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024253": {"원문번호": "조달청 금속돌망태 1200×1000×500mm, 아연도금철선3종Φ4mm, 사각형뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024254": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024255": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024256": {"원문번호": "조달청 금속돌망태 1200×1000×600mm, 아연도금철선3종Φ4mm, 사각형몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024257": {"원문번호": "조달청 금속돌망태 1200×1000×500mm, 아연도금철선3종Φ4mm, 사각형몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024258": {"원문번호": "조달청 금속돌망태 1200×1000×400mm, 아연도금철선3종Φ4mm, 사각형뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024259": {"원문번호": "조달청 금속돌망태 H500mm, 알루미늄합금아연도금철선Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024260": {"원문번호": "조달청 금속돌망태 1000×2000×1000mm, 아연도금철선4종Φ3.2mm, 사각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024261": {"원문번호": "조달청 금속돌망태 1000×2000×500mm, 아연도금철선5종Φ2.7mm, 육각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024262": {"원문번호": "조달청 금속돌망태 1000×1500×1000mm, 아연도금철선5종Φ2.7mm, 육각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024263": {"원문번호": "조달청 금속돌망태 150×450×950mm, 타원형-뚜껑, 아연도금철선3종Φ4.0", "파일": "재료_자재품목.json"},
|
||||
"MT024264": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각-상자형, 아연도금5종철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024265": {"원문번호": "조달청 금속돌망태 1000×1500×1000mm, 아연도금철선4종Φ3.2mm, 사각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024266": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선4종Φ3.2mm, 사각매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024267": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선4종Φ3.2mm, 사각매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024268": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선4종Φ4.0mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024269": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선4종Φ4.0mm, 사각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024270": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선4종Φ4.0mm, 사각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024271": {"원문번호": "조달청 금속돌망태 1500 ×1000×1000mm, 아연도금철선4종Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024272": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각개비온, 상자형, 아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024273": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온, 상자형, 아연도금철선, Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024274": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, , 사각개비온, 상자형, 아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024275": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 사각개비온, 상자형, 아연도금철선Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024276": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각개비온, 상자형, 아연도금철선Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024277": {"원문번호": "조달청 금속돌망태 #80-450×950mm, 타원형몸통, 아연도금철선, Φ4.0mm", "파일": "재료_자재품목.json"},
|
||||
"MT024278": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각개비온, 상자형, 아연도금철선Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024279": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024280": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024281": {"원문번호": "조달청 금속돌망태 1000×1000×1500mm, 아연도금철선4종Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024282": {"원문번호": "조달청 금속돌망태 1000×1000×2000mm, 아연도금철선4종Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024283": {"원문번호": "조달청 금속돌망태 Φ450mm, 아연도금철선3종4.0mm, 원형-몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024284": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ4mm, 스톤매트리스/일반형", "파일": "재료_자재품목.json"},
|
||||
"MT024285": {"원문번호": "조달청 금속돌망태 1000×1500×1000mm, 아연도금철선5종/4종Φ2.7/3.2mm, 전면부사각테두리보강복합개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024286": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선4종Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024287": {"원문번호": "조달청 금속돌망태 1200×1000×600mm, 아연도금철선3종Φ4mm, 사각형뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024288": {"원문번호": "조달청 금속돌망태 1200×1000×400mm, 아연도금철선3종Φ4mm, 사각형몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024289": {"원문번호": "조달청 금속돌망태 950×950×450mm, 아연도금철선3종Φ4mm, 타원형뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024290": {"원문번호": "조달청 금속돌망태 950×1000×450mm, 아연도금철선3종Φ4mm, 타원형몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024291": {"원문번호": "조달청 금속돌망태 450×1000×450mm, 아연도금철선3종Φ4mm, 원형뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024292": {"원문번호": "조달청 금속돌망태 450×1000×450mm, 아연도금철선3종Φ4mm, 원형몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024293": {"원문번호": "조달청 금속돌망태 H300mm, 알루미늄합금아연도금철선Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024294": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각개비온, 상자형, 아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024295": {"원문번호": "조달청 금속돌망태 1000×2000×1000mm, 아연도금철선5종Φ2.7mm, 육각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024296": {"원문번호": "조달청 금속돌망태 #80-450×950mm, 타원형뚜껑, 아연도금철선, Φ4.0mm", "파일": "재료_자재품목.json"},
|
||||
"MT024297": {"원문번호": "조달청 금속돌망태 450×450×450mm, 아연도금철선3종Φ4mm, 원형몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024298": {"원문번호": "조달청 금속돌망태 450×450×450mm, 아연도금철선3종Φ4mm, 원형뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024299": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm, 육각매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024300": {"원문번호": "조달청 금속돌망태 1000×2000×500mm, 아연도금철선5종Φ3.2mm, 사각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024301": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm, 육각매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024302": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각개비온, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024303": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 사각개비온, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024304": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각개비온, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024305": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024306": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각개비온, 아연도금철선Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024307": {"원문번호": "조달청 금속돌망태 L1500×W1000×H1000mm, 사각개비온-상자형, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024308": {"원문번호": "조달청 금속돌망태 L1000×W1000×H1000mm, 사각개비온-상자형, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024309": {"원문번호": "조달청 금속돌망태 450×950mm, 망눈150mm, 타원형, 몸통, 아연도금철선3종Φ4.0, KSF4601", "파일": "재료_자재품목.json"},
|
||||
"MT024310": {"원문번호": "조달청 금속돌망태 450×950mm, 망눈150mm, 타원형, 뚜껑, 아연도금철선3종Φ4.0, KSF4601", "파일": "재료_자재품목.json"},
|
||||
"MT024311": {"원문번호": "조달청 금속돌망태 L2000×W1000×H1000mm, 사각개비온-상자형, 아연도금철선Φ3.2", "파일": "재료_자재품목.json"},
|
||||
"MT024312": {"원문번호": "조달청 금속돌망태 L1000×W1000×H1000mm, 육각개비온-상자형, 아연도금철선Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024313": {"원문번호": "조달청 금속돌망태 L1500×W1000×H1000mm, 육각개비온-상자형, 아연도금철선Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024314": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 사각개비온, 상자형, 아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024315": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm 사각개비온, 상자형 -아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024316": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 육각개비온, 상자형, 아연도금철선, Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024317": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 사각개비온, 상자형, 아연도금철선, Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024318": {"원문번호": "조달청 금속돌망태 150×450×950mm, 타원형-몸통, 아연도금철선3종Φ4.0", "파일": "재료_자재품목.json"},
|
||||
"MT024319": {"원문번호": "조달청 금속돌망태 450×950mm, 아연도금철선3종Φ4.0mm, 타원형-몸통", "파일": "재료_자재품목.json"},
|
||||
"MT024320": {"원문번호": "조달청 금속돌망태 450×950mm, 아연도금철선3종Φ4.0mm, 타원형-뚜껑", "파일": "재료_자재품목.json"},
|
||||
"MT024321": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선Φ3.2mm, 사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024322": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종/4종Φ2.7/3.2mm, 칸막이상단테두리보강복합매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024323": {"원문번호": "조달청 금속돌망태 1000×2000×1000mm, 아연도금철선5종/4종Φ2.7/3.2mm, 전면부사각테두리보강복합개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024324": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 아연도금철선5종Φ2.7mm, 육각개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024325": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm, 육각매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024326": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각개비온, 상자형, 아연도금철선, Φ2.7mm", "파일": "재료_자재품목.json"},
|
||||
"MT024327": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm, 중첩형육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024328": {"원문번호": "조달청 금속돌망태 H300mm, 아연도금철선5종Φ2.7mm, 중첩형육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024329": {"원문번호": "조달청 금속돌망태 H400mm, 아연도금철선5종Φ2.7mm, 중첩형육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024330": {"원문번호": "조달청 금속돌망태 1000×1000×2000mm, 아연도금철선Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024331": {"원문번호": "조달청 금속돌망태 1000×1000×1500mm, 아연도금철선Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024332": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온-상자형, 아연도금철선Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024333": {"원문번호": "조달청 금속돌망태 아연도금철선3종Φ4.0, 원형-뚜껑, 450×450mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024334": {"원문번호": "조달청 금속돌망태 아연도금철선3종Φ4.0, 원형-몸통, 450×450mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024335": {"원문번호": "조달청 금속돌망태 아연도금철선3종Φ4.0, 타원형-뚜껑, 450×950mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024336": {"원문번호": "조달청 금속돌망태 1000×1000×300mm, 아연도금철선5종Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024337": {"원문번호": "조달청 금속돌망태 1000×1000×500mm, 아연도금철선5종Φ2.7mm, 육각매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024338": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 아연도금철선4종Φ3.2mm, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024339": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각개비온, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024340": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 육각개비온, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024341": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 사각개비온, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024342": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 육각개비온, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024343": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 사각개비온, 아연도금철선Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024344": {"원문번호": "조달청 금속돌망태 2000×1000×1000mm, 사각개비온, 아연도금철선Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024345": {"원문번호": "조달청 금속돌망태 1000×1000×1000mm, 사각개비온, 아연도금철선Φ3.2mm", "파일": "재료_자재품목.json"},
|
||||
"MT024346": {"원문번호": "조달청 금속돌망태 450×450mm, 망눈150mm, 원형, 뚜껑, 아연도금철선3종Φ4.0, KSF4601", "파일": "재료_자재품목.json"},
|
||||
"MT024347": {"원문번호": "조달청 금속돌망태 450×450mm, 망눈150mm, 원형, 몸통, 아연도금철선3종Φ4.0, KSF4601", "파일": "재료_자재품목.json"},
|
||||
"MT024348": {"원문번호": "조달청 금속돌망태 L2000×W1000×H1000mm, 육각개비온-상자형, 아연도금철선Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024349": {"원문번호": "조달청 금속돌망태 아연도금철선3종Φ4.0, 타원형몸통, 450×950mm, 망눈150mm", "파일": "재료_자재품목.json"},
|
||||
"MT024350": {"원문번호": "조달청 금속돌망태 1000×500×2000mm, 아연도금철선Φ3.2mm, 사각개비온상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024351": {"원문번호": "조달청 금속돌망태 1000×1000×2000mm, 육각개비온-상자형, 아연도금철선Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024352": {"원문번호": "조달청 금속돌망태 1000×1000×1500mm, 육각개비온-상자형, 아연도금철선Φ2.7", "파일": "재료_자재품목.json"},
|
||||
"MT024353": {"원문번호": "조달청 금속돌망태 1000×1000×400mm, 아연도금철선5종Φ2.2mm, 복합매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024354": {"원문번호": "조달청 금속돌망태 2000×1000×500mm, 아연도금철선4종Φ3.2mm, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024355": {"원문번호": "조달청 금속돌망태 1500×1000×1000mm, 아연도금철선4종Φ3.2mm, 상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024356": {"원문번호": "조달청 금속돌망태 H500mm, 아연도금철선5종Φ2.7mm, 중첩형육각식생매트리스형", "파일": "재료_자재품목.json"},
|
||||
"MT024357": {"원문번호": "조달청 금속돌망태 1000×1000×400mm, 아연도금철선5종Φ4mm, 스톤매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"MT024358": {"원문번호": "조달청 금속돌망태 1000×1000×500mm, 아연도금철선4종Φ3.2mm, 식생사각상자형", "파일": "재료_자재품목.json"},
|
||||
"MT024359": {"원문번호": "조달청 금속돌망태 1000×1000×300mm, 스테인리스/아연도금철선5종Φ4mm, 스톤매트리스", "파일": "재료_자재품목.json"},
|
||||
"MT024360": {"원문번호": "조달청 금속돌망태 1000×1000×300mm, 아연도금철선5종Φ4mm, 스톤매트리스개비온", "파일": "재료_자재품목.json"},
|
||||
"QC000001": {"원문번호": "공통 2-1-1 현장사무소 등의 규모(토목)", "파일": "소요량_건설품셈_02장_가설공사.json"},
|
||||
"QC000002": {"원문번호": "공통 2-1-2 현장사무소 등의 규모(건축 및 기계설비)", "파일": "소요량_건설품셈_02장_가설공사.json"},
|
||||
"QC000003": {"원문번호": "공통 2-1-2 시멘트 창고, 동력소 및 변전소 필요면적", "파일": "소요량_건설품셈_02장_가설공사.json"},
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
|
||||
- **관급 단가는 조달청 종합쇼핑몰 API 3종에서 「분류명 부분 글자」로 받을 수 있음** — 레미콘·아스콘은 「조합공통품목」 줄이 지역별 관급 단가(다산소프트 관급 열과 같은 것). 인증키 = 기존 공공데이터포털 일반 인증키 하나(활용신청 끝남).
|
||||
- 지난번 「시설공통자재 6,999줄」(`PriceInfoService`)에는 관급 자재가 없음 — 잘못 고른 API.
|
||||
- **레미콘 2,095줄 중 2,028줄이 다산소프트 값과 똑같음**(97%). 아스콘은 짝은 서고 값은 기준일이 달라 다름. 철근·파형강관·흄관은 제조사별 값이 갈려 **채우지 않고 보류**.
|
||||
- 정본 `재료_자재품목.json` 관급 열을 다산소프트 값 → 조달청 값으로 바꿈: 관급 열이 있던 4,552줄 중 **채움 3,045 · null 1,507**(다산 값 남기지 않음).
|
||||
- **값 비교 기준 = 다산소프트 값 ±5% 안이면 「맞음」**(받는 시점이 달라 생기는 차이).
|
||||
- **제조사별로 값이 갈리면 같은 규격의 가장 낮은 값**을 관급 열에 넣고 비고에 그 제조사(「관급: 조달청 다수공급자계약 <제조사> 최저 <날짜> · …」) — 줄·열은 안 늘림. 보류 394 → 0.
|
||||
- 정본 `재료_자재품목.json` 관급 열: 옛 4,552줄 중 **채움 3,752 · null 800**(맞음 3,232 · 5% 넘게 다름 520 · 못 채움 800) + **조달청에서 새로 들인 줄 380**(모두 채움) = 4,932줄 중 **채움 4,132 · null 800**. 다산 값은 남기지 않음.
|
||||
- 다시 돌리기 — `./venv/Scripts/python.exe resources/master_data/scripts/update_관급단가.py update`
|
||||
|
||||
## 조달청 API (공공데이터포털 15129471 `at/ShoppingMallPrdctInfoService`)
|
||||
@@ -15,11 +16,12 @@
|
||||
| `getMASCntrctPrdctInfoList` | 다수공급자계약(MAS) — 제조사·조합별 | 레미콘 · 아스팔트콘크리트 · 봉강 · H빔 · 파형강관 · 콘크리트관 | 26,384 · 17,949 · 1,039 · 181 · 6,970 · 504 |
|
||||
| `getUcntrctPrdctInfoList` | 일반단가계약 | 아스팔트콘크리트 · 콘크리트관 | 17 · 10 |
|
||||
| `getThptyUcntrctPrdctInfoList` | 3자단가계약 | 레미콘 · 아스팔트콘크리트 · 파형강관 | 128 · 13 · 1,573 |
|
||||
| 2차 (세 오퍼레이션 섞임) | — | 시멘트 · 골재 · 조경석 · 주철관 · 파형강관이음관 · 배수로 · 블록 · 돌망태 · 합성목재 · 볼라드 · 교량받침 · 용접철망 · 섬유 · 폴리에틸렌 · 맨홀 · 매트 · 낙석 · 그레이팅 · 벽돌 · 시트 · 비료 · 압륜 · 부직포 | 파일 43개(원본 3MB) — 목록·줄 수는 `_meta.md` |
|
||||
|
||||
- 조건 = `inqryDiv=2` + `prdctClsfcNoNm=<글자>` — **부분 글자 조회**(분류 통째가 아님). 「철근」은 암거블록·배수로가 섞여 옴 → 「봉강」(철근콘크리트용봉강) · H형강은 「H빔」 · 「형강」은 파형강관이 걸림.
|
||||
- 응답 칸(쓰는 것) — `prdctSpecNm`(품명·규격) · `cntrctPrceAmt`(단가·VAT 포함) · `prdctSplyRgnNm`(공급지역) · `prdctDlvryCndtnNm`(인도조건) · `prdctMakrNm`(「조합공통품목」 = 조합 공통 관급단가) · `cntrctCorpNm`(계약 조합·업체) · `cntrctBgnDate`·`cntrctEndDate`(계약 기간) · `prdctUnit`.
|
||||
- 갱신 주기 — 계약 기간 단위(레미콘 조합공통 2026-06-01~, 아스콘 2026-08-01~ 등) · 일별 조회 · 쪽당 999 · 인증키 일일 호출 한도 안.
|
||||
- 없는 것(이번 조사에서 못 찾음) — 시멘트 지역별 관급 · 골재 · 조경석 · 벤치플륨 · 주철관 · 측구수로관 등 648줄(다산소프트 관급 열에는 있음) → 「짝짓기 아직 없음」으로 null.
|
||||
- 이번에 찾음(2차) — 시멘트 · 골재 · 조경석 · 주철관 · 이음관 · 측구수로관 · 볼라드 · 맨홀 · 용접철망 · 돌망태 · 매트. 조달청에 같은 품명이 없어 못 이음 — 벤치플륨 · 무게수로관 · HI-VP(다산 이름 그대로는 분류 없음).
|
||||
- 원본 보관 — `resources/knowledge/original/원가계산/자재단가/관급/<받은 날>/*.json.gz` + `_meta.md`(받은 칸만 남김 — 첨부·이미지 뺌).
|
||||
|
||||
## 짝짓기 방법
|
||||
@@ -33,29 +35,31 @@
|
||||
| 파형강관 | `파형강관(관급)` · 「D300×1.6T (1RS)」 | MAS·3자 파형강관 | 지름 + 두께 + RS |
|
||||
| 흄관 | `흄 관(B형)(관급)` · 「Φ250mm」 | MAS·일반 콘크리트관 「보통관」 | 지름 |
|
||||
|
||||
- 2차 갈래(`update_관급단가_기타.py`) — 자재품목 규격의 숫자 조각(치수·종별)과 글자 조각(제품·산지)이 조달청 품명·규격에 모두 있을 때만 짝 · 이름 끝 「-지역」은 지역 · 지역이 아니면 제조사 · 주철관은 이름의 종별(2종·3종)도 맞아야.
|
||||
- 지역 — 지명 낱말로 쪼개 약칭을 풀고(경기 → 경기도) 「시·군·구」·「전지역(구 나열)」·조합 이름을 뺀 뒤, 같은 묶음 → 겹침 0.5 이상 하나뿐일 때만 짝(동점은 못 채움). 이름에 조합이 붙은 줄(제주…레미콘(협))은 그 조합 줄만.
|
||||
- 후보가 여럿이면 — 값이 하나(같은 값 여럿 포함)일 때만 채움. **제조사별로 값이 갈리면 null(보류)** — 고르는 기준 미정(다산 값은 H형강 26줄에서 최저값과 같았음 · 철근 8/81 · 파형강관 15/98).
|
||||
- 후보가 여럿이면 — 값이 하나면 그 값 · **제조사별로 값이 갈리면 가장 낮은 값 + 비고에 그 제조사**(확정 · `pick()` 한 곳).
|
||||
|
||||
## 다산소프트 값과 맞대기 (사본에서 관급 열을 지우고 다시 채움 — 2026-09-20)
|
||||
## 다산소프트 값과 맞대기 (±5% 안 = 맞음 — 사본에서 관급 열을 지우고 다시 채움 · 2026-09-20)
|
||||
|
||||
| 갈래 | 전체 | 짝 서고 채움 | 값 같음 | 값 다름 | 보류(제조사별 값 갈림) | 못 채움 |
|
||||
| 갈래 | 전체 | 짝 서고 채움 | 맞음(±5%) | 5% 넘게 다름 | 보류 | 못 채움 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 레미콘 | 2,095 | 2,078 | **2,028** | 50 | 0 | 17 |
|
||||
| 아스콘 | 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** | **3,045** | 2,028 | 1,017 | 394 | 1,113 |
|
||||
| 레미콘 | 2,095 | 2,078 | **2,033** | 45 | 0 | 17 |
|
||||
| 아스콘 | 1,430 | 1,128 | 855 | 273 | 0 | 302 |
|
||||
| 철근 | 81 | 81 | **81** | 0 | 0 | 0 |
|
||||
| H형강 | 57 | 27 | 26 | 1 | 0 | 30 |
|
||||
| 파형강관 | 214 | 98 | 32 | 66 | 0 | 116 |
|
||||
| 흄관 | 27 | 27 | 10 | 17 | 0 | 0 |
|
||||
| 조경석 | 48 | 48 | **48** | 0 | 0 | 0 |
|
||||
| 파형강관이음관 | 108 | 102 | 87 | 15 | 0 | 6 |
|
||||
| 주철관 · 부속 | 116 | 116 | 34 | 82 | 0 | 0 |
|
||||
| 측구수로관 | 23 | 17 | 8 | 9 | 0 | 6 |
|
||||
| 시멘트 · 골재 · 볼라드 · 맨홀 · 용접철망 · 돌망태 · 매트 | 56 | 30 | 18 | 12 | 0 | 26 |
|
||||
| 그 밖(벤치플륨 · 블록 · 폴리에틸렌 · 교량받침 · 합성목재 · 무게수로관 등) | 297 | 0 | 0 | 0 | 0 | 296 |
|
||||
| **합계** | **4,552** | **3,752** | **3,232** | **520** | **0** | **800** |
|
||||
|
||||
(정본 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~)나 다산 원문 값 차이** — 이 조사로는 어느 쪽인지 못 가림.
|
||||
- **아스콘 값 다름 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 · 아스콘 240: 조달청 지역 묶음이 다산과 다름) · 규격 없음(아스콘 62 · 레미콘 1) · 후보 없음(H형강 30 · 파형강관 116 — 「-거양」 제조사 줄·D 규격이 조달청 목록에 없음) · 짝짓기 아직 없음(648).
|
||||
- 「5% 넘게 다름」 = 제조사별 최저값이 다산이 고른 제조사·조건 값보다 낮은 경우가 대부분(주철관 0.60~1.00 · 이음관 0.45~1.00 · 흄관·파형강관) + 아스콘 기준일 차이(조달청 계약 2026-08-01~ · 다산 「조달 26.7」).
|
||||
- 레미콘 다름 45 — 광주·전남 25-30-180(다산 117,800 · 조달청 118,710) · 제주 세 조합(다산 119,130 · 조달청 125,940~126,000) — 지역·규격 같음 → 기준일 차이 또는 다산 원문 값.
|
||||
- 못 채움 800 — 아스콘 302(지역 240 · 규격 62) · 그 밖 297(짝 규칙 없음 · 조달청에 같은 품명 없음) · 파형강관 116(「-거양」 규격이 조달청 목록에 없음) · H형강 30 · 돌망태·매트 20 · 레미콘 17 · 이음관 6 · 측구수로관 6 · 골재 6.
|
||||
|
||||
## 짝짓기 규칙 넓힘 (2차)
|
||||
|
||||
@@ -63,32 +67,36 @@
|
||||
- 지역 묶음 — 다산 줄이 여러 시군 묶음(「강원도(동해,삼척,영월,…)」)이고 묶음 안 시군마다 조달청 시군 줄이 **모두** 있을 때만, 그 줄들 값이 하나면 채움(갈리면 보류 · 「제외」 묶음 · 시군 이름 붙은 글 · 조달청에 없는 시군은 그대로 못 채움). 30줄 채움 · 옛값 대비 0.999~1.071.
|
||||
- 못 넓힌 것 — 아스콘 240(「경남(진주사천남해…」 시군 구분 없는 글 · 「서울,경기(…구 제외)」) · R3-H 순환 규격 62 · 레미콘 16(여수시 읍면 묶음).
|
||||
|
||||
## 제조사별 값 — 고르는 선택지 (관리자가 정함 · 지금은 보류 394)
|
||||
## 제조사별 값 — 확정(사용자)
|
||||
|
||||
| 선택지 | 뜻 | 확인된 것 |
|
||||
|---|---|---|
|
||||
| 최저가 | 제조사·조합 값 중 가장 낮은 값 | H형강 26줄에서 다산 값과 같았음 · 철근은 8/81 · 파형강관 15/98 |
|
||||
| 최신 계약 | 계약 시작일이 가장 늦은 줄 | 아직 대조 안 함 |
|
||||
| 특정 제조사 고정 | 예: 동국제강 | 다산이 어느 곳을 골랐는지 원문에 없음 |
|
||||
| 평균 | 제조사 값 평균 | 관급 단가 성격(조합 공통)과 안 맞음 |
|
||||
- 같은 규격이 제조사·조합별로 값이 갈리면 **가장 낮은 값**을 관급 열에 · 비고에 그 제조사(「… 다수공급자계약 동국제강 최저 2026-09-20 · …」) — 제조사별로 줄·열을 늘리지 않음. 채운 줄 523(철근 81 · 파형강관 98 · 흄관 27 · H형강 26 · 아스콘 162 · 이음관 16 · 주철관 등).
|
||||
- 고쳐 쓴 곳 = `update_관급단가.py` 의 `decide()` 한 곳(`pick()` 은 이미 최저를 돌려줌).
|
||||
|
||||
- 어느 쪽이든 `update_관급단가.py` 의 `pick()` 한 곳만 고침.
|
||||
## 조달청에만 있는 품목 — 자재품목에 새 줄
|
||||
|
||||
- 자재품목에 같은 품목·규격 줄이 있으면 관급 열만 채우고(위 짝짓기) · **없으면 새 줄**: 키 = `_키대장` 다음 번호(MT023981~) · 물가지 네 열 null · 관급만 · 출처 「자재품목 조달청 <계약방식>」(검사 도구 출처 모양에 맞춤) · 비고 = 관급 비고 · 원문번호 = 「조달청 <품명> <규격>」(다시 돌려도 같은 줄을 갱신).
|
||||
- 이름·규격·단위 = 조달청 표기 그대로(「품명, 제조사, 모델, 규격…」 에서 제조사·모델을 뺌) · 같은 품명·규격은 최저가.
|
||||
- 이번에 들인 것 **380줄** — 금속돌망태 372(사각·육각 상자형·매트리스형 · 규격별) · 토목용부직포 8(두께별). 파형강관·흄관은 자재품목에 이미 다 있어 새 줄 없음(Φ800·1000·1200 포함).
|
||||
- 품셈재료 못 이은 343 가운데 조달청에서 찾은 것 = 파형강관 · 흄관 · 부직포 · 돌망태 · 시멘트벽돌(자재품목에 이미 있음)뿐 — 연결(품셈재료 → 자재품목)은 화면에서 사람이 이음(이번에 안 건드림). 조달청 분류에서 못 찾음 = 유공관 · 폼타이 · 각재·합판 · 철선 · 못 · 종자 · VR관(소켓식) · 거푸집(1줄) · 낙석방지망(펜스만) · 벤토나이트·지오콤포지트·HDPE시트 등.
|
||||
- 받아 두고 아직 안 쓴 분류(다음 후보) — 블록 · 교량받침 · 폴리에틸렌 · 합성목재 · 그레이팅 · 낙석 · 시트 · 비료 · 매트: 다산 규격과 조달청 규격이 달라 짝이 안 섬(원본만 보관). 받지 않은 분류 — 가드레일 · 표지판 · 목재덱 · 종자(0줄).
|
||||
|
||||
## 로직 일괄 시험 계산 (전후)
|
||||
|
||||
- 방법 — 로직 줄마다 입력 조합(최대 40)으로 `master_formula.run` 을 돌려 하나라도 통과하면 통과 · 아니면 멈춤.
|
||||
- 관급 열 교체 전(다산소프트 값) **통과 1,024 · 멈춤 327** → 후(조달청 값) **통과 1,024 · 멈춤 327** — 변화 없음(멈춤 까닭 = 값 없음 285 · 맞는 줄 없음 25 · 지역 값 없음 16 · 칸 없음 1).
|
||||
- 관급 열 교체 전(다산소프트 값) **통과 1,024 · 멈춤 327** → 후(조달청 값 · 최저 채움 · 새 줄 380 포함) **통과 1,024 · 멈춤 327** — 변화 없음(멈춤 까닭 = 값 없음 285 · 맞는 줄 없음 25 · 지역 값 없음 16 · 칸 없음 1 — 관급이 멈춤 까닭이 아님).
|
||||
- check_master — 틀 0 · 본문 1(기존) · 로직 0.
|
||||
|
||||
## 갱신 절차
|
||||
|
||||
1. `update` — 받기(`fetch_all`) → 원본 보관(gz · `_meta.md`).
|
||||
2. 짝짓기(`refill`) → 정본 관급 열·비고만 바꿈(`apply` · 다른 열·서식 그대로 · 줄 수 안 변함).
|
||||
3. 바뀐 줄 목록 = `tmp/관급_바뀐줄.json`(옛값 · 새값 · 비고) — 검토 뒤 커밋.
|
||||
4. 비고 형식 — 「관급: 조달청 <계약방식> <받은 날> · 계약 <시작>~ · <지역> · <인도조건> · <부가세>」 · 못 채운 줄 = 「관급: 조달청 값 못 채움 — <까닭> (<받은 날>)」.
|
||||
1. `update` — 받기(`fetch_all` · 같은 날 받은 파일은 건너뜀 · 호출 5회 재시도) → 원본 보관(gz · `_meta.md`).
|
||||
2. 짝짓기(`refill`) → 정본 관급 열·비고만 바꿈(`apply` · 다른 열·서식·줄바꿈 그대로).
|
||||
3. 조달청에만 있는 품목 새 줄(`add_rows`) — 키대장 갱신 · 다시 돌려도 중복 없음.
|
||||
4. 바뀐 줄 목록 = `tmp/관급_바뀐줄.json`(옛값 · 새값 · 비고) — 검토 뒤 커밋.
|
||||
5. 비고 형식 — 「관급: 조달청 <계약방식>[ <제조사> 최저] <받은 날> · 계약 <시작>~ · <지역> · <인도조건> · <부가세>」 · 못 채운 줄 = 「관급: 조달청 값 못 채움 — <까닭> (<받은 날>)」.
|
||||
|
||||
## 남은 일
|
||||
|
||||
- 보류 갈래(철근·파형강관·흄관·H형강·아스콘 일부)는 **제조사 고르는 기준**(최저가 · 특정 조합 등)을 관리자가 정해야 채움.
|
||||
- 못 찾은 지역·648줄 갈래는 조달청 다른 서비스(가격정보 `getPriceInfoListMrktCnstrctPc` 등) 조사 필요.
|
||||
- 짝짓기 시험 = `resources/tester/test_masterdata_procure.py`(견본 응답 7건).
|
||||
- 못 채움 800 — 아스콘 지역 240 · 규격 62 · 그 밖 297 · 파형강관 116 · H형강 30 · 그 밖 소수(위 표).
|
||||
- 받아 둔 분류(블록 · 교량받침 · 폴리에틸렌 · 합성목재 · 그레이팅 · 낙석 · 시트 · 비료 · 매트)는 다산 규격과 조달청 규격 표기가 달라 짝 규칙을 더 만들어야 채움 — 또는 새 줄로 들임.
|
||||
- 품셈재료 → 자재품목 연결(343 줄 미연결)은 화면에서 사람이 이음.
|
||||
- 짝짓기 시험 = `resources/tester/test_masterdata_procure.py`(견본 응답 11건).
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
./venv/Scripts/python.exe resources/master_data/scripts/update_관급단가.py update
|
||||
|
||||
fetch 받기 → 원본 보관 (resources/knowledge/original/원가계산/자재단가/관급/<날짜>/ · gz + _meta.md)
|
||||
test [날짜] 관급 열을 지우고 다시 채워 옛 값(다산소프트)과 맞댐 — 정본 안 덮음 · tmp/관급_대조.json
|
||||
test [날짜] 관급 열을 지우고 다시 채워 옛 값(다산소프트)과 맞댐(±5% 안 = 맞음) — 정본 안 덮음 · tmp/관급_대조.json
|
||||
apply [날짜] 정본 관급 열(관급 · 비고)만 받은 값으로 바꿈 · tmp/관급_바뀐줄.json
|
||||
"""
|
||||
|
||||
@@ -12,6 +12,7 @@ import gzip
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
import time
|
||||
import urllib.parse
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
@@ -21,6 +22,8 @@ PIPE = ROOT / "resources/knowledge/original/_pipeline"
|
||||
RAW = ROOT / "resources/knowledge/original/원가계산/자재단가/관급"
|
||||
sys.path.insert(0, str(PIPE))
|
||||
import collect_cost_sources as cc # noqa: E402 (키 읽기 · fetch)
|
||||
import master_keys as mk # noqa: E402 (새 줄 키)
|
||||
import update_관급단가_기타 as misc # noqa: E402 (「그 밖」 갈래 짝짓기)
|
||||
|
||||
BASE = "https://apis.data.go.kr/1230000/at/ShoppingMallPrdctInfoService/"
|
||||
MAS, UNIT, THPTY = (
|
||||
@@ -41,6 +44,38 @@ JOBS = [ # 분류명은 부분 글자 조회 — 「철근」은 암거블록
|
||||
(THPTY, "파형강관"),
|
||||
(MAS, "콘크리트관"),
|
||||
(UNIT, "콘크리트관"),
|
||||
# 2차 — 다산소프트 「그 밖」 관급 · 품셈재료 중 조달청에 있는 것
|
||||
(MAS, "시멘트"),
|
||||
(MAS, "골재"),
|
||||
(MAS, "조경석"),
|
||||
(UNIT, "주철관"),
|
||||
(MAS, "파형강관이음관"),
|
||||
(THPTY, "파형강관이음관"),
|
||||
(MAS, "배수로"),
|
||||
(THPTY, "배수로"),
|
||||
(MAS, "블록"),
|
||||
(UNIT, "블록"),
|
||||
(THPTY, "블록"),
|
||||
(MAS, "돌망태"),
|
||||
(THPTY, "돌망태"),
|
||||
(MAS, "합성목재"),
|
||||
(MAS, "볼라드"),
|
||||
(MAS, "교량받침"),
|
||||
(THPTY, "교량받침"),
|
||||
(MAS, "용접철망"),
|
||||
(THPTY, "섬유"),
|
||||
(MAS, "폴리에틸렌"),
|
||||
(THPTY, "폴리에틸렌"),
|
||||
(MAS, "맨홀"),
|
||||
(MAS, "매트"),
|
||||
(THPTY, "매트"),
|
||||
(MAS, "낙석"),
|
||||
(THPTY, "그레이팅"),
|
||||
(MAS, "벽돌"),
|
||||
(THPTY, "시트"),
|
||||
(MAS, "비료"),
|
||||
(MAS, "압륜"),
|
||||
(THPTY, "부직포"),
|
||||
]
|
||||
# 보관하는 칸 — 나머지(첨부·원산지·이미지·긴 설명)는 버림(원본이 수백 MB)
|
||||
KEEP = (
|
||||
@@ -53,10 +88,13 @@ KEEP = (
|
||||
def call(op: str, key: str, **kw) -> dict:
|
||||
q = "&".join(f"{k}={urllib.parse.quote(str(v))}" for k, v in kw.items())
|
||||
url = f"{BASE}{op}?serviceKey={key}&type=json&{q}"
|
||||
try:
|
||||
return json.loads(cc.fetch(url, timeout=90).decode("utf-8", "replace"))["response"]
|
||||
except Exception as e: # 오류 글에 받은 주소(키 포함)가 실려도 키는 가림
|
||||
raise RuntimeError(f"{op} 호출 실패: {str(e).replace(key, '***')}") from None
|
||||
for tries in range(5): # 큰 분류는 시간 초과가 잦음 — 다섯 번까지
|
||||
try:
|
||||
return json.loads(cc.fetch(url, timeout=90).decode("utf-8", "replace"))["response"]
|
||||
except Exception as e: # 오류 글에 받은 주소(키 포함)가 실려도 키는 가림
|
||||
if tries == 4:
|
||||
raise RuntimeError(f"{op} 호출 실패: {str(e).replace(key, '***')}") from None
|
||||
time.sleep(5)
|
||||
|
||||
|
||||
def fetch_all() -> Path:
|
||||
@@ -72,6 +110,11 @@ def fetch_all() -> Path:
|
||||
"|---|---|---|---|",
|
||||
]
|
||||
for op, name in JOBS:
|
||||
f = f"{op.removeprefix('get').removesuffix('PrdctInfoList')}_{name}.json.gz"
|
||||
if (out / f).exists(): # 같은 날 이미 받은 것은 건너뜀(이어받기)
|
||||
n = len(json.loads(gzip.decompress((out / f).read_bytes())))
|
||||
lines.append(f"| {f} | {op} | {name} | {n:,} |")
|
||||
continue
|
||||
rows, page, total = [], 1, 1
|
||||
while len(rows) < total:
|
||||
r = call(op, key, inqryDiv=2, prdctClsfcNoNm=name, numOfRows=999, pageNo=page)
|
||||
@@ -84,7 +127,6 @@ def fetch_all() -> Path:
|
||||
break
|
||||
rows += [{k: it.get(k) for k in KEEP} for it in items]
|
||||
page += 1
|
||||
f = f"{op.removeprefix('get').removesuffix('PrdctInfoList')}_{name}.json.gz"
|
||||
(out / f).write_bytes(gzip.compress(json.dumps(rows, ensure_ascii=False).encode("utf-8")))
|
||||
lines.append(f"| {f} | {op} | {name} | {len(rows):,} (totalCount {total:,}) |")
|
||||
print(f, len(rows), total, flush=True)
|
||||
@@ -216,6 +258,7 @@ class Matcher:
|
||||
"""자재품목 줄 → 조달청 줄. 짝이 서면 (줄, 방식), 못 서면 (None, 까닭)."""
|
||||
|
||||
def __init__(self, raw: dict):
|
||||
self.raw = raw
|
||||
self.rmc = {}
|
||||
for r in raw.get("MASCntrct_레미콘", []):
|
||||
if r["prdctMakrNm"] == "조합공통품목":
|
||||
@@ -335,7 +378,7 @@ class Matcher:
|
||||
if dia and _dia(r["prdctSpecNm"]) == dia and "보통관" in r["prdctSpecNm"]
|
||||
]
|
||||
return pick(c)
|
||||
return None, "이 갈래는 아직 짝짓기 없음"
|
||||
return misc.find(row, self.raw, places, pick, PROVINCE)
|
||||
|
||||
|
||||
FAMILY = (
|
||||
@@ -349,13 +392,30 @@ FAMILY = (
|
||||
|
||||
|
||||
def family(name: str) -> str:
|
||||
return next((k for k, pat in FAMILY if re.match(pat, name)), "그 밖")
|
||||
return next((k for k, pat in FAMILY if re.match(pat, name)), misc.label(name) or "그 밖")
|
||||
|
||||
|
||||
def info(r: dict) -> dict:
|
||||
return {
|
||||
"방식": r["cntrctMthdNm"],
|
||||
"품명": r["prdctSpecNm"],
|
||||
"지역": r["prdctSplyRgnNm"],
|
||||
"계약시작": r["cntrctBgnDate"],
|
||||
"부가세": r["vatAplDivNm"],
|
||||
"인도": r["prdctDlvryCndtnNm"],
|
||||
"단위": r["prdctUnit"],
|
||||
"제조사": r["cntrctCorpNm"] if r["prdctMakrNm"] == "조합공통품목" else r["prdctMakrNm"],
|
||||
}
|
||||
|
||||
|
||||
def refill(rows: list[dict], raw: dict) -> list[dict]:
|
||||
"""조달 값(관급 열)이 있는 줄마다 조달청 값으로 다시 채운 결과."""
|
||||
m, out = Matcher(raw), []
|
||||
for x in rows:
|
||||
if str(x.get("원문번호")).startswith(
|
||||
"조달청 "
|
||||
): # 조달청에서 새로 들인 줄은 아래 `add_rows` 몫
|
||||
continue
|
||||
if x["관급"] is None and not (x["비고"] or "").startswith(
|
||||
"관급:"
|
||||
): # 지난번에 못 채운 줄도 다시 시도
|
||||
@@ -371,17 +431,7 @@ def refill(rows: list[dict], raw: dict) -> list[dict]:
|
||||
"갈래": family(x["이름"]),
|
||||
"새값": int(r["cntrctPrceAmt"]) if r else None,
|
||||
"까닭": why,
|
||||
"조달청": None
|
||||
if not r
|
||||
else {
|
||||
"방식": r["cntrctMthdNm"],
|
||||
"품명": r["prdctSpecNm"],
|
||||
"지역": r["prdctSplyRgnNm"],
|
||||
"계약시작": r["cntrctBgnDate"],
|
||||
"부가세": r["vatAplDivNm"],
|
||||
"인도": r["prdctDlvryCndtnNm"],
|
||||
"단위": r["prdctUnit"],
|
||||
},
|
||||
"조달청": info(r) if r else None,
|
||||
}
|
||||
)
|
||||
return out
|
||||
@@ -397,7 +447,8 @@ def test(day: str | None = None) -> list[dict]:
|
||||
tab: dict = {}
|
||||
for r in res:
|
||||
t = tab.setdefault(
|
||||
r["갈래"], {"전체": 0, "짝": 0, "같음": 0, "다름": 0, "못채움": 0, "까닭": {}}
|
||||
r["갈래"],
|
||||
{"전체": 0, "짝": 0, "맞음": 0, "다름": 0, "최저채움": 0, "못채움": 0, "까닭": {}},
|
||||
)
|
||||
t["전체"] += 1
|
||||
if r["새값"] is None:
|
||||
@@ -405,7 +456,11 @@ def test(day: str | None = None) -> list[dict]:
|
||||
t["까닭"][r["까닭"]] = t["까닭"].get(r["까닭"], 0) + 1
|
||||
else:
|
||||
t["짝"] += 1
|
||||
t["같음" if r["새값"] == r["옛값"] else "다름"] += 1
|
||||
ok = (
|
||||
r["옛값"] and abs(r["새값"] / r["옛값"] - 1) <= 0.05
|
||||
) # 받는 시점 차이는 ±5% 안이면 맞음
|
||||
t["맞음" if ok else "다름"] += 1
|
||||
t["최저채움"] += "최저" in r["까닭"]
|
||||
for k, v in tab.items():
|
||||
print(
|
||||
k,
|
||||
@@ -423,21 +478,75 @@ METHOD = {
|
||||
|
||||
|
||||
def decide(x: dict, r: dict, day: str) -> tuple[int | None, str]:
|
||||
"""(새 관급 값, 새 비고) — 값은 짝이 서고 후보 값이 하나일 때만(제조사별로 값이 갈리면 null · 고르는 기준 미정)."""
|
||||
"""(새 관급 값, 새 비고) — 제조사별로 값이 갈리면 같은 규격의 가장 낮은 값 · 비고에 그 제조사."""
|
||||
if r["새값"] is None:
|
||||
return None, f"관급: 조달청 값 못 채움 — {r['까닭']} ({day})"
|
||||
if "최저" in r["까닭"]:
|
||||
return None, f"관급: 조달청 값 못 채움 — 제조사별로 값이 갈림 · 고르는 기준 미정 ({day})"
|
||||
c = r["조달청"]
|
||||
who = f" {c['제조사']} 최저" if "최저" in r["까닭"] else ""
|
||||
return r["새값"], (
|
||||
f"관급: 조달청 {METHOD.get(c['방식'], c['방식'])} {day} · 계약 {c['계약시작']}~ · {c['지역']} · {c['인도']} · {c['부가세']}"
|
||||
f"관급: 조달청 {METHOD.get(c['방식'], c['방식'])}{who} {day} · 계약 {c['계약시작']}~ · {c['지역']} · {c['인도']} · {c['부가세']}"
|
||||
)
|
||||
|
||||
|
||||
def add_rows(lines: list[str], data: dict, raw: dict, day: str, changed: list) -> list[str]:
|
||||
"""조달청에만 있는 품목 — 자재품목에 새 줄(관급만 · 물가지 네 열 null · 같은 품명·규격은 최저가). 이미 든 줄은 값·비고만 갈음."""
|
||||
have = {x["원문번호"]: x for x in data["줄"] if str(x["원문번호"]).startswith("조달청 ")}
|
||||
book, new = mk.load_book(), []
|
||||
for num, (name, spec, rows) in misc.groups(raw).items():
|
||||
r, how = pick(rows)
|
||||
val, note = decide(
|
||||
None, {"새값": int(r["cntrctPrceAmt"]), "까닭": how, "조달청": info(r)}, day
|
||||
)
|
||||
if num in have:
|
||||
for i, line in enumerate(lines):
|
||||
if f'"키": "{have[num]["키"]}"' in line:
|
||||
line = re.sub(
|
||||
r'"관급": (?:null|-?[\d.]+)', lambda _: f'"관급": {val}', line, count=1
|
||||
)
|
||||
lines[i] = re.sub(
|
||||
r'"비고": (?:null|"(?:[^"\\]|\\.)*")',
|
||||
lambda _: f'"비고": {json.dumps(note, ensure_ascii=False)}',
|
||||
line,
|
||||
count=1,
|
||||
)
|
||||
break
|
||||
continue
|
||||
key = mk.issue(book, "MT", num, "재료_자재품목.json")
|
||||
row = {
|
||||
"키": key, "원문번호": num, "구분": None, "상세구분": None, "이름": name, "규격": spec,
|
||||
"단위": r["prdctUnit"], "물가자료": None, "유통물가": None, "물가정보": None,
|
||||
"거래가격": None, "관급": val, "출처": f"자재품목 조달청 {r['cntrctMthdNm']}", "비고": note, "면수": None,
|
||||
} # fmt: skip
|
||||
new.append(
|
||||
" { "
|
||||
+ ", ".join(f'"{k}": {json.dumps(v, ensure_ascii=False)}' for k, v in row.items())
|
||||
+ " }"
|
||||
)
|
||||
changed.append(
|
||||
{
|
||||
"키": key,
|
||||
"이름": name,
|
||||
"규격": spec,
|
||||
"갈래": "새 줄",
|
||||
"옛값": None,
|
||||
"새값": val,
|
||||
"비고": note,
|
||||
}
|
||||
)
|
||||
if new:
|
||||
end = max(i for i, line in enumerate(lines) if line.strip() == "]")
|
||||
lines[end - 1] += ","
|
||||
lines[end:end] = [ln + "," for ln in new[:-1]] + new[-1:]
|
||||
mk.save_book(mk.finish(book))
|
||||
return lines
|
||||
|
||||
|
||||
def apply(day: str | None = None) -> None:
|
||||
"""정본 관급 열 · 비고만 바꿈 — 다산소프트 값은 하나도 안 남김(못 채운 줄 = null)."""
|
||||
day = day or latest()
|
||||
text = MASTER.read_bytes().decode("utf-8")
|
||||
crlf = "\r\n" in text # 작업 폴더 줄바꿈(CRLF)을 그대로 지킴
|
||||
text = text.replace("\r\n", "\n")
|
||||
data = json.loads(text)
|
||||
found = {r["키"]: r for r in refill(data["줄"], load(day))}
|
||||
changed, edits = [], {}
|
||||
@@ -475,7 +584,9 @@ def apply(day: str | None = None) -> None:
|
||||
assert n1 == n2 == 1, f"{m.group(1)} 줄 서식이 달라 멈춤"
|
||||
lines[i] = line
|
||||
assert not edits, f"정본에서 못 찾은 줄 {len(edits)}"
|
||||
MASTER.write_bytes("\n".join(lines).encode("utf-8"))
|
||||
lines = add_rows(lines, data, load(day), day, changed)
|
||||
out = "\n".join(lines)
|
||||
MASTER.write_bytes((out.replace("\n", "\r\n") if crlf else out).encode("utf-8"))
|
||||
TMP.mkdir(exist_ok=True)
|
||||
(TMP / "관급_바뀐줄.json").write_text(
|
||||
json.dumps(changed, ensure_ascii=False, indent=1), encoding="utf-8"
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
"""관급 단가 — 「그 밖」 갈래 짝짓기(주철관 · 조경석 · 골재 · 시멘트 · 이음관 …) — `update_관급단가.py` 가 부름.
|
||||
|
||||
짝 = 자재품목 규격의 숫자 조각(치수·종별)이 조달청 품명·규격에 모두 있고, 글자 조각(제품·산지)도 모두 있을 때.
|
||||
이름 쪽 글자는 점수만(같은 값이면 더 많이 맞는 줄 먼저). 지역이 이름에 있으면 그 지역 줄만. 여럿이면 가장 낮은 값(호출한 쪽 `pick`).
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
# (갈래, 이름 패턴, 받은 파일들) — 앞에서부터 처음 맞는 갈래
|
||||
FAMILIES = (
|
||||
("주철관", r"^(KP|타이튼)\s*주철직관", ["Ucntrct_주철관"]),
|
||||
("주철관부속", r"^(이탈방지압륜|고무링,타이튼)", ["MASCntrct_압륜"]),
|
||||
(
|
||||
"파형강관이음관",
|
||||
r"^파형강관(이음관|\s*커플링)",
|
||||
["MASCntrct_파형강관이음관", "ThptyUcntrct_파형강관이음관"],
|
||||
),
|
||||
("조경석", r"^조경석", ["MASCntrct_조경석"]),
|
||||
("골재", r"^도로용혼합골재", ["MASCntrct_골재"]),
|
||||
("시멘트", r"^시멘트", ["MASCntrct_시멘트"]),
|
||||
("수로관", r"^측구수로관", ["MASCntrct_배수로", "ThptyUcntrct_배수로"]),
|
||||
(
|
||||
"블록",
|
||||
r"^(소형고압블록|생태옹벽블록|생태어소블록)",
|
||||
["MASCntrct_블록", "Ucntrct_블록", "ThptyUcntrct_블록"],
|
||||
),
|
||||
("교량받침", r"^교량받침", ["MASCntrct_교량받침", "ThptyUcntrct_교량받침"]),
|
||||
("합성목재", r"^합성목재", ["MASCntrct_합성목재"]),
|
||||
("돌망태", r"(돌망태|개비온)", ["MASCntrct_돌망태", "ThptyUcntrct_돌망태"]),
|
||||
("볼라드", r"^볼라드", ["MASCntrct_볼라드"]),
|
||||
("매트", r"^(보행매트|고무매트)", ["MASCntrct_매트", "ThptyUcntrct_매트"]),
|
||||
("용접철망", r"^와이어메쉬", ["MASCntrct_용접철망"]),
|
||||
("맨홀", r"^주철맨홀", ["MASCntrct_맨홀"]),
|
||||
("보강섬유", r"^콘크리트보강섬유", ["ThptyUcntrct_섬유"]),
|
||||
(
|
||||
"폴리에틸렌관",
|
||||
r"^(PE직관|PE이중벽|VR관)",
|
||||
["MASCntrct_폴리에틸렌", "ThptyUcntrct_폴리에틸렌"],
|
||||
),
|
||||
)
|
||||
SKIP_WORDS = {"관급", "포장품", "", "각종"}
|
||||
|
||||
|
||||
def label(name: str) -> str | None:
|
||||
return next((k for k, pat, _ in FAMILIES if re.search(pat, name)), None)
|
||||
|
||||
|
||||
def norm(t: str) -> str:
|
||||
t = (t or "").lower().replace("㎜", "mm").replace("㎥", "m3").replace("㎏", "kg")
|
||||
t = re.sub(r"[φ∅øᴓф]", "d", t)
|
||||
t = re.sub(r"(?<=\d)mm", "", t)
|
||||
t = re.sub(r"(?<=[\d.])[×*x](?=[\d.d])", "x", t)
|
||||
return re.sub(r"\s+", "", t).replace("入", "")
|
||||
|
||||
|
||||
def pieces(text: str) -> list[str]:
|
||||
return [
|
||||
p for p in (norm(x) for x in re.split(r"[,()/\-·\s]+", text or "")) if p not in SKIP_WORDS
|
||||
]
|
||||
|
||||
|
||||
def has(s: str, p: str) -> bool:
|
||||
return re.search(rf"(?<![\d.]){re.escape(p)}(?![\d.])", s) is not None
|
||||
|
||||
|
||||
def tail_of(name: str) -> str | None:
|
||||
"""이름 끝의 「-지역」 또는 「-제조사」 · 「(충남지역」 · 「시멘트, 제주」."""
|
||||
m = re.search(r"[\)\s]-([가-힣,·]+)$", name) or re.search(r"\(([가-힣]+)지역", name)
|
||||
if m:
|
||||
return m.group(1)
|
||||
return "제주" if ", 제주" in name else None
|
||||
|
||||
|
||||
def find(row: dict, raw: dict, places, pick, PROVINCE=frozenset()):
|
||||
"""(줄, 방식) 또는 (None, 까닭) — `places` · `pick` 은 본 스크립트 것을 받음."""
|
||||
n, spec = row["이름"], row["규격"]
|
||||
fam = next(((k, f) for k, pat, f in FAMILIES if re.search(pat, n)), None)
|
||||
if not fam:
|
||||
return None, "이 갈래는 아직 짝짓기 없음"
|
||||
rows = [r for f in fam[1] for r in raw.get(f, [])]
|
||||
if not rows:
|
||||
return None, "받은 원본 없음"
|
||||
tail = tail_of(n)
|
||||
reg = tail if tail and places(tail) & PROVINCE else None # 지역 이름이 아니면 제조사
|
||||
maker = norm(tail) if tail and not reg else None
|
||||
need = pieces(spec)
|
||||
if fam[0] == "주철관": # 이름의 종별(2종 · 3종)도 맞아야
|
||||
need += [p for p in pieces(n) if re.search(r"\d", p)]
|
||||
if not pieces(spec):
|
||||
return None, "규격 없음"
|
||||
hits, seen_reg = [], False
|
||||
for r in rows:
|
||||
s = norm(r["prdctSpecNm"])
|
||||
if not all(has(s, p) if re.search(r"\d", p) else p in s for p in need):
|
||||
continue
|
||||
if maker and maker not in norm(
|
||||
r["prdctSpecNm"] + r["cntrctCorpNm"] + str(r["prdctMakrNm"])
|
||||
):
|
||||
continue
|
||||
if reg:
|
||||
want, have = places(reg), places(r["prdctSplyRgnNm"])
|
||||
if "제주" in reg:
|
||||
ok = "제주" in r["prdctSplyRgnNm"].replace("제주제외", "")
|
||||
elif want:
|
||||
ok = (
|
||||
want <= have
|
||||
or r["prdctSplyRgnNm"].startswith("전지역")
|
||||
and "제주" not in r["prdctSplyRgnNm"]
|
||||
)
|
||||
else:
|
||||
ok = True
|
||||
if not ok:
|
||||
seen_reg = True
|
||||
continue
|
||||
hits.append(r)
|
||||
if not hits:
|
||||
return None, "지역 못 찾음" if seen_reg else "규격 없음(원문 규격이 조달청에 없음)"
|
||||
words = [p for p in pieces(n.replace(tail or "\0", "")) if not re.search(r"\d", p)]
|
||||
score = lambda r: sum(w in norm(r["prdctSpecNm"]) for w in words) # noqa: E731
|
||||
top = max(map(score, hits))
|
||||
r, how = pick([r for r in hits if score(r) == top])
|
||||
return r, how
|
||||
|
||||
|
||||
# 조달청에만 있는 품목 — 자재품목에 새 줄로 들임 (갈래, 받은 파일들, 분류명)
|
||||
NEW = (
|
||||
("부직포", ["ThptyUcntrct_부직포"], None),
|
||||
("돌망태", ["MASCntrct_돌망태", "ThptyUcntrct_돌망태"], {"금속돌망태"}),
|
||||
)
|
||||
|
||||
|
||||
def groups(raw: dict) -> dict:
|
||||
"""{원문번호: (품명, 규격, 줄들)} — 「품명, 제조사, 모델, 규격…」 에서 제조사·모델을 뺀 같은 품명·규격끼리."""
|
||||
out: dict = {}
|
||||
for _, files, klass in NEW:
|
||||
g: dict = {}
|
||||
for f in files:
|
||||
for r in raw.get(f, []):
|
||||
p = [x.strip() for x in r["prdctSpecNm"].split(",")]
|
||||
if len(p) >= 4 and (klass is None or r["prdctClsfcNoNm"] in klass):
|
||||
g.setdefault((p[0], ", ".join(p[3:])), []).append(r)
|
||||
out.update({f"조달청 {n} {s}": (n, s, rows) for (n, s), rows in g.items()})
|
||||
return out
|
||||
+1249
-869
File diff suppressed because it is too large
Load Diff
@@ -41,6 +41,28 @@ RAW = {
|
||||
raw_row("아스팔트콘크리트 조합공통품목, WC-2, 가열, 3등급", "경기도 수원시", 70000),
|
||||
raw_row("순환 아스팔트콘크리트 조합공통품목, WC-2, 가열, 3등급", "경기도 수원시", 60000),
|
||||
],
|
||||
"MASCntrct_시멘트": [
|
||||
raw_row("시멘트, 갑, 포틀랜드시멘트(1종), 포장40kg", "전지역(제주제외)", 5820, maker="갑"),
|
||||
raw_row("시멘트, 갑, 포틀랜드시멘트(1종), 포장40kg", "제주", 6470, maker="갑"),
|
||||
],
|
||||
"MASCntrct_조경석": [
|
||||
raw_row(
|
||||
"조경석, 을산업, B-1, 300×400×500mm, R5이상~15미만, 보령성주석",
|
||||
"충남",
|
||||
29980,
|
||||
maker="을산업",
|
||||
),
|
||||
raw_row(
|
||||
"조경석, 병산업, C-1, 300×400×500mm, R5이상~15미만, 함양석",
|
||||
"충남",
|
||||
20000,
|
||||
maker="병산업",
|
||||
),
|
||||
],
|
||||
"Ucntrct_주철관": [
|
||||
raw_row("수도용덕타일주철관, Φ80mm×6m, 2종, KP메커니컬/시멘트라이닝", "전지역", 148240),
|
||||
raw_row("하수도용덕타일주철관, Φ80mm×6m, 3종, KP메커니컬/시멘트라이닝", "전지역", 118940),
|
||||
],
|
||||
"MASCntrct_봉강": [
|
||||
raw_row("SD400, D10", "전지역(제주제외)", 827640, maker="가철강", cond="생산공장 상차도"),
|
||||
raw_row("SD400, D10", "전지역(제주제외)", 830000, maker="나철강", cond="생산공장 상차도"),
|
||||
@@ -77,9 +99,9 @@ def test_아스콘_순환_구분():
|
||||
assert val == 60000
|
||||
|
||||
|
||||
def test_제조사별_값_갈리면_보류():
|
||||
def test_제조사별_값_갈리면_최저_제조사_비고():
|
||||
_, (val, note) = fill(item("g", "이형철근(SD400)-관급", "HD=10mm 생산공장 상차도"))
|
||||
assert val is None and "갈림" in note
|
||||
assert val == 827640 and "가철강 최저" in note
|
||||
|
||||
|
||||
def test_짝_없는_갈래는_안_채움():
|
||||
@@ -98,3 +120,43 @@ def test_호출_오류에_키_안_찍힘(monkeypatch):
|
||||
assert "SECRETKEY123" not in str(e) and "***" in str(e)
|
||||
else:
|
||||
raise AssertionError("예외가 나야 함")
|
||||
|
||||
|
||||
def test_시멘트_제주는_제주_줄만():
|
||||
_, (val, _) = fill(item("i", "시멘트 (관급)", "40kg入(포장품)"))
|
||||
assert val == 5820
|
||||
_, (val, _) = fill(item("j", "시멘트, 제주 (관급)", "40kg入(포장품)"))
|
||||
assert val == 6470
|
||||
|
||||
|
||||
def test_조경석_산지가_규격에_있으면_그_줄만():
|
||||
spec = "300×400×500,R5이상~15미만,보령성주석(을산업)"
|
||||
_, (val, _) = fill(item("k", "조경석(관급)", spec))
|
||||
assert val == 29980 # 더 싼 병산업 줄이 아니라 산지·업체가 맞는 줄
|
||||
|
||||
|
||||
def test_주철관_종별이_맞는_줄만():
|
||||
_, (val, _) = fill(item("l", "KP 주철직관(2종)시멘트라이닝/관급", "D80mm×6m"))
|
||||
assert val == 148240 # 3종(118,940)은 안 씀
|
||||
|
||||
|
||||
def test_조달청에만_있는_품목은_같은_규격_최저가로_새_줄():
|
||||
import update_관급단가_기타 as misc
|
||||
|
||||
def r(price, maker):
|
||||
x = raw_row(
|
||||
f"금속돌망태, {maker}, M-1, 1000×1000×1000mm, 사각상자형", "전지역", price, maker=maker
|
||||
)
|
||||
x["prdctClsfcNoNm"] = "금속돌망태"
|
||||
return x
|
||||
|
||||
raw = {"MASCntrct_돌망태": [r(46800, "가"), r(44000, "나")]}
|
||||
g = misc.groups(raw)
|
||||
assert list(g) == ["조달청 금속돌망태 1000×1000×1000mm, 사각상자형"]
|
||||
name, spec, rows = g["조달청 금속돌망태 1000×1000×1000mm, 사각상자형"]
|
||||
val, note = up.decide(
|
||||
None,
|
||||
{"새값": 44000, "까닭": up.pick(rows)[1], "조달청": up.info(up.pick(rows)[0])},
|
||||
"2026-09-20",
|
||||
)
|
||||
assert val == 44000 and "나 최저" in note
|
||||
|
||||
Reference in New Issue
Block a user