knowledge(경쟁사): 조달청 공사원가호환규정 XSD 발견 — 국가 표준 납품 규격 전문

최종 빈칸 점검에서 확장자 기준으로 한 번도 안 연 파일을 훑다가 나옴.
28번의 「XML 스키마는 실행 중 조립이라 못 얻음」은 틀렸음 — 정정함.

System/Valid_Xml.vsl = 조달청 공사원가호환규정 V1.0.5 XSD 전문 (1,429줄)
- 조달청 공사원가통합관리시스템(npccs.g2b.go.kr) 발표하는 공개 규격.
  STmate 고유가 아니라 국가 표준이라 Aislo 가 그대로 따르면 됨
- complexType 32 · simpleType 21 · 열거형 40곳
- 같은 폴더에 「호환규정코드(2026_09_01)」 안내문도 있음

문서 뼈대가 우리가 판 STmate 구조와 한 겹씩 대응
- 일위대가/상세 · 중기단가산출 · 기계경비/상세 · 자재 · 노무 · 경비항목 ·
  실적단가 · 제경비항목 · 내역서→공종→세부공종

 규격이 우리 계약을 뒷받침함
- 제경비항목에 적용산식·적용산식설명 칸이 있음 = 「식을 데이터로 저장하라」가
  납품 규격의 요구사항이기도 함
- 직접공사비정보에 제요율적용제외공종_금액 이 박혀 있음 = C* 제외금액 구역과
  낙찰율 적용제외가 국가 표준에도 있는 개념

 기계경비 산출 규격이 우리가 캔 것과 정확히 일치
- 시간당노임산출 H0-일반구간·H1-터널구간·H2-장대터널·H3-펌프준설선·
  H4-그래브준설선·H5-버킷준설선·H_-사용자정의
  = 22번의 wM_Set_Sys cmBx_Sel_RX 와 하나도 안 틀림.
  Start8x.Ini 의 RXXNM·RX1NM~RX4NM 이 이 자리임
- 환율형식(USD/EUR/100엔)도 EXNM_·EXEUR·EXYEN 과 맞음
- ⚠ 시간당손료산출이 E0-주간·E1-야간·E2-2교대·E3-3교대 네 갈래.
  17번에서 뽑은 손료율 25개는 E0 하나뿐임

열거형 — 주공사 9종(국가유산수리 포함)·공사현장지역코드 290·인도조건 40·
시설물유형 27·지역구분 3(산간도서 포함)·내진등급·에너지효율·녹색건축 등

XSD 사본과 구조 덤프를 30_원자료에 넣음. 최신판은 npccs.g2b.go.kr 에서
직접 받을 것.

문서 30 신규, 스크립트 2개 추가.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Prk9BCHG1EMAywk9k8wegA
This commit is contained in:
2026-09-13 14:48:14 +09:00
co-authored by Claude Opus 5
parent 8505f4b7be
commit a4a2ecac48
7 changed files with 269 additions and 2 deletions
@@ -36,6 +36,7 @@
| 27 계약·실행·기성 단계 | **설계 뒤 네 단계** — 낙찰율 3갈래, 기성은 계약제잡비율, 실행 차액보정 | (저장소 파일) | | 27 계약·실행·기성 단계 | **설계 뒤 네 단계** — 낙찰율 3갈래, 기성은 계약제잡비율, 실행 차액보정 | (저장소 파일) |
| 28 변환·수량산출·식언어 | **식 변수의 대상/저장 비목** · 수량산출서 셀별명 · 조달청 변환 · 직종 106종 | (저장소 파일) | | 28 변환·수량산출·식언어 | **식 변수의 대상/저장 비목** · 수량산출서 셀별명 · 조달청 변환 · 직종 106종 | (저장소 파일) |
| 29 암호화자료의 뼈대 | **값 없이 구조만** — 스키마 평문, 카탈로그 규모, 분류 4~5단, 단위 59~130종 | (저장소 파일) | | 29 암호화자료의 뼈대 | **값 없이 구조만** — 스키마 평문, 카탈로그 규모, 분류 4~5단, 단위 59~130종 | (저장소 파일) |
| 30 조달청 호환규정 XSD | ⭐ **국가 표준 납품 규격 전문** — 문서 뼈대·제경비 적용산식·기계경비 산출 | (저장소 파일) |
> **정본은 저장소 파일이다** — `resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/`. > **정본은 저장소 파일이다** — `resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/`.
> 위 Orca 링크는 보기용이며, 문서를 지식DB 자리로 옮기면서 주소가 한 번 바뀌었다. > 위 Orca 링크는 보기용이며, 문서를 지식DB 자리로 옮기면서 주소가 한 번 바뀌었다.
@@ -131,6 +132,11 @@
| 카탈로그 규모 | 건수만 | **명칭 1,761종 : 자재 57,580건** — 규격이 난관 | 29번 §3 | | 카탈로그 규모 | 건수만 | **명칭 1,761종 : 자재 57,580건** — 규격이 난관 | 29번 §3 |
| 단위 사전 | 몰랐음 | **59종(자재)·130종(통합)** | 29번 §3 | | 단위 사전 | 몰랐음 | **59종(자재)·130종(통합)** | 29번 §3 |
| 표준시장단가 | 건수만 | **노무만 요율 조정** (`RATE_M`·`RATE_S` 빈칸) | 29번 §3.2 | | 표준시장단가 | 건수만 | **노무만 요율 조정** (`RATE_M`·`RATE_S` 빈칸) | 29번 §3.2 |
| XML 스키마 | ⛔ 「못 얻음」이라 적었음 | **정정 — `Valid_Xml.vsl` 에 XSD 전문** | 30번 |
| 납품 규격 | STmate 고유로 봄 | **조달청 공개 국가 표준** V1.0.5 — 그대로 따름 | 30번 §1 |
| 식을 데이터로 저장 | 우리 계약 | **규격이 `적용산식`·`적용산식설명`을 요구** | 30번 §3 |
| 노임 환산 갈래 | 화면 문자열 | **`H0`~`H5` 규격 코드** (일반·터널·장대터널·준설선 3종) | 30번 §4 |
| 손료 산출 | 한 갈래로 봄 | ⚠ **주간/야간/2교대/3교대 네 갈래** — 뽑은 25개는 `E0` 뿐 | 30번 §4 |
분석일: 2026-09-13 분석일: 2026-09-13
대상: `C:\경영정보(주)` 대상: `C:\경영정보(주)`
@@ -85,7 +85,7 @@ ST_Conv_Mode1/2/3 · ST_Conv_Data · ST_Copy_Data
**납품 호환 경로가 프로그램 안에 있다.** `호환규정코드``wM_Mrg_BSC`의 매칭 키 1순위였던 것(20번 §2)과 이어진다. **납품 호환 경로가 프로그램 안에 있다.** `호환규정코드``wM_Mrg_BSC`의 매칭 키 1순위였던 것(20번 §2)과 이어진다.
XML **스키마는 문자열로 안 남는다** — 실행 중에 조립한다. 태그 이름을 정적으로는 못 얻는다. > ⛔ **이 판정은 틀렸다. 30번에서 정정했다.** 스키마는 `System\Valid_Xml.vsl` 에 **XSD 파일로 있다**(1,429줄, 조달청 공사원가호환규정 V1.0.5).
### 3.1 노임 직종 사전 106종 ### 3.1 노임 직종 사전 106종
@@ -163,7 +163,7 @@ EQSYNC.DBF 54행 × 3열 (2.9 KB)
| 무엇 | 상태 | | 무엇 | 상태 |
|---|---| |---|---|
| XML 스키마 태그 | 실행 중 조립 — 정적으로 못 얻음 | | ~~XML 스키마 태그~~ | ✅ **해결**`Valid_Xml.vsl` XSD 전문 (30번) |
| `EQSYNC` 내용 | 암호화 | | `EQSYNC` 내용 | 암호화 |
| 수량산출서 파일 형식 | 표본 0건 (`QCODE` 전부 빈 표) | | 수량산출서 파일 형식 | 표본 0건 (`QCODE` 전부 빈 표) |
| 조달청 변환 결과물 | 표본 0건 | | 조달청 변환 결과물 | 표본 0건 |
@@ -0,0 +1,149 @@
# 조달청 공사원가호환규정 XSD — 국가 표준 납품 규격
발견일: 2026-09-13
계기: 최종 빈칸 점검에서 **확장자 기준으로 한 번도 안 연 파일 종류**를 훑다가 나옴.
**28번 §3의 「XML 스키마는 실행 중 조립이라 정적으로 못 얻음」은 틀렸다.** 스키마가 **파일로 있다.**
원본: `C:\경영정보(주)\System\Valid_Xml.vsl` (57.4 KB · 1,429줄)
재현 스크립트: `40_스크립트/xsd_parse.py` · 사본 `30_원자료/조달청_공사원가호환규정.xsd`
## 1. 무엇인가
```xml
<xsd:documentation>
이 문서는 공사원가호환규정 V1.0.4 XML스키마이다. 최종수정일 2022-10-06
… 1.0.5 건축공사의 사업내용 정보 추가 (2022-11-28)
</xsd:documentation>
```
**조달청 공사원가통합관리시스템(`npccs.g2b.go.kr`)이 발표하는 공개 규격**이다. STmate 고유 포맷이 아니라 **국가 표준**이므로 Aislo가 그대로 따라 쓰면 된다.
같은 폴더에 `호환규정코드(2026_09_01)` 안내문도 있다.
```text
호환규정코드 2026년 9월 1일 조달청 발표분 반영
조달청 공사원가통합관리시스템 https://npccs.g2b.go.kr 발표
```
**STmate는 이 규격을 따라 `Conv_Jodal_ST8`·`Conv_ST8_XML`(28번 §3)로 변환한다.** 규정 코드는 반기마다 갱신된다.
버전 이력이 그대로 남아 있다 — `1.0.0``1.0.5`. 내역공종코드 길이가 **16 → 20자**로 늘어난 것(2017-04-19)도 적혀 있다.
## 2. 문서 뼈대
```text
공사원가호환규정
├ 스키마버전 1.0.0 ~ 1.0.5
├ 작성정보 작성업체명 · 프로그램명 · 프로그램버전 · 파일제작일
│ · 파일검증여부 · 건축공사사업내용작성여부
├ 공사정보 공사관리번호 · 주공사 · 공사명 · 비고
│ · 기계경비산출 · 건축공사사업내용
└ 공사내역서
├ 공사제경비 → 제경비항목
└ 단일공사내역서
├ 단일공사정보 (공사구분 · 공사설명 · 전역변수)
├ 내역서 → 공종 → 세부공종
├ 일위대가 → 일위대가상세
├ 중기단가산출
├ 기계경비 → 기계경비상세
├ 자재 → 조사처별단가
├ 노무
├ 경비항목 → 조사처별단가_경비
├ 실적단가
└ 제경비
```
**우리가 판 STmate 구조와 한 겹씩 대응한다.**
| 호환규정 | STmate |
|---|---|
| 일위대가 / 일위대가상세 | `B` 코드 호표 (17번) |
| 중기단가산출 | `D` 코드 (18번 §2.2) |
| 기계경비 / 기계경비상세 | 중기사용료 호표 (17번 §3) |
| 자재 · 노무 · 경비항목 | `M` · `L` · `S` 코드 |
| 실적단가 | 표준시장단가 `CSTA` (29번 §1.3) |
| 제경비항목 | 간접비 (25번 §2) |
| 내역서 → 공종 → 세부공종 | `BOQ11` 계층 (16번 §4.1) |
## 3. ⭐ 제경비 항목이 **적용산식을 문자열로** 싣는다
```text
제경비항목정보 : 세부공종코드 · 집계항목여부 · 비목명
· 적용산식 · 적용요율 · 추가금액 · 산출금액 · 적용산식설명
```
**국가 규격 자체가 「밑수 산식을 글로 적어 함께 보내라」고 정한다.** 25번 §2의 간접비 식 템플릿 26개와 같은 요구다. 우리가 「식을 데이터로 저장하라」고 세운 계약이 **납품 규격과 맞아떨어진다.**
`직접공사비정보`도 따로 있다.
```text
직접공사비_재료비 · 직접공사비_노무비 · 직접공사비_경비
· 미확정설계공종_금액 · 제요율적용제외공종_금액 · 관급자재공종_금액
```
**「제요율적용제외공종」이 규격에 못 박혀 있다** — 16번 §4.2의 `C*` 제외금액 구역, 27번 §2.3의 낙찰율 적용제외와 같은 개념이 **국가 표준에도 있다.**
## 4. ⭐ 기계경비 산출 규격 — 우리가 캔 것과 정확히 맞는다
```text
기계경비산출형식 : 환율 · 시간당손료산출 · 시간당노임산출
환율형식 미국_1USD · 유럽연합_1EUR · 일본_100엔
시간당손료산출 E0-주간 · E1-야간 · E2-주야간2교대 · E3-주야간3교대
시간당노임산출 H0-일반구간 · H1-터널구간 · H2-장대터널
· H3-펌프준설선 · H4-그래브준설선 · H5-버킷준설선 · H_-사용자정의
```
**22번 §3.4에서 `wM_Set_Sys`의 `cmBx_Sel_RX`가 「계수 ; 터널구간 / 계수-1 ; 장대터널 / 계수-2 ; 펌프준설선 / 계수-3 ; GRAB준설선 / 계수-4 ; 버켓준설선」이라 한 것과 하나도 안 틀리고 같다.**
`Start8x.Ini``RXXNM`·`RX1NM`~`RX4NM`(20번 §2.5)이 **규격의 `H0`~`H5` 자리**다. 18번 §2.1의 노임 환산식 `1/8*16/12*25/20``H0-일반구간`에 해당한다.
`환율형식``EXNM_`·`EXEUR`·`EXYEN`(18번 §2.3)과 그대로 맞는다.
**`시간당손료산출`이 주간/야간/2교대/3교대 네 갈래**다 — 우리가 17번 §4에서 뽑은 손료율 25개는 **`E0-주간` 한 갈래**일 뿐이다.
## 5. 열거형 — 코드 목록이 규격에 박혀 있다
| 열거 | 개수 | 값 |
|---|---:|---|
| **주공사** | 9 | 토목 · 건축 · 설비 · 전기 · 통신 · 조경 · 소방 · 문화재수리 · **국가유산수리** |
| **공사현장지역코드** | **290** | 행정구역 코드 (`11110` 서울 종로 …) |
| 인도조건구분 | 40 | 일반 · 납품장소도 · 상차도 · 하차도 · 현장설치도 · 생산공장도 … |
| 시설물유형 | 27 | 일반청사 · 대형청사 · 초중고 · 대학교 · 도서관 · 체육시설 … |
| 지역구분 | 3 | 비혼잡(일반) · 혼잡(특수) · **산간도서(특수)** |
| 구조형식 | 4 | 철골조 · 철골철근콘크리트조 · 철근콘크리트조 · 기타 |
| 내진등급 | 3 | 특등급 · 1등급 · 2등급 |
| 에너지효율등급 | 5 | `1+++` ~ 7등급 · 해당 없음 |
| 녹색건축인증 | 5 | 최우수 · 우수 · 우량 · 일반 · 해당 없음 |
| 철거공사 포함여부 · BF인증 · 신재생에너지 · 지반형태 · 흙막이 | 각 2 | |
**`주공사``문화재수리공사``국가유산수리공사`가 둘 다 있다** — 10번 §4에서 2020-05-27에 국가유산 열이 붙은 것과 이어진다(명칭 개정 과도기).
**`지역구분``산간도서지역(특수)`** 은 임도에 바로 걸린다.
## 6. 건축공사 사업내용 36요소
```text
연면적 · 대지면적 · 건축면적 · 조경면적 · 지하층연면적 · 용적률 · 건폐율
기준층층고 · 최고높이 · 최대지하층수 · 최대지상층수 · 공사일수 · 공사현장 …
```
건축 전용이라 임도와 직접 관계는 없으나, **규격이 공사 종류별로 사업내용을 따로 요구**한다는 점은 알아 둘 것.
## 7. 이 발견이 바꾸는 것
| 항목 | 이전 | 지금 |
|---|---|---|
| XML 스키마 | ⛔ 「실행 중 조립이라 못 얻음」 | ✅ **파일로 있음** — XSD 1,429줄 전문 |
| 납품 규격 | STmate 고유로 봄 | ✅ **조달청 공개 국가 표준** — 그대로 따라 쓰면 됨 |
| 식을 데이터로 | 우리 계약 | ✅ **규격이 `적용산식`·`적용산식설명`을 요구** |
| 제외공종 | STmate 구현으로 봄 | ✅ **규격에 `제요율적용제외공종_금액`** |
| 노임 환산 갈래 | 화면 문자열로만 | ✅ **`H0`~`H5` 규격 코드** |
| 손료 산출 | 한 갈래로 봄 | ⚠ **주간/야간/2교대/3교대 네 갈래** — 우리가 뽑은 25개는 `E0` 뿐 |
| 공사 종류 | 임도 중심 | ✅ **9종 + 지역코드 290** |
## 8. 남은 것
1. `30_원자료/조달청_공사원가호환규정.xsd` 로 사본을 떠 뒀다. **최신판은 `npccs.g2b.go.kr` 에서 직접 받을 것** — 이 사본은 V1.0.5(2022-11-28)이다.
2. 세부공종 28요소·일위대가상세 21요소의 **필드별 뜻**은 아직 안 풀었다.
3. 손료 `E1`~`E3`(야간·교대) 계수는 STmate 자료에 없다 — 품셈에서 가져와야 한다.
@@ -0,0 +1,56 @@
### 조달청 공사원가호환규정 XSD
complexType 32개 · simpleType 21개
■ complexType (구조 정의)
공사원가호환규정형식 요소 4 스키마버전, 작성정보, 공사정보, 공사내역서
공사정보형식 요소 6 공사관리번호, 주공사, 공사명, 비고, 기계경비산출, 건축공사사업내용
건축공사사업내용형식 요소 36 연면적, 대지면적, 건축면적, 조경면적, 지하층연면적, 용적률, 건폐율, 기준층층고, 최고높이, 최대지하층수, 최대지상층수, 공사일수, 공사현장
작성정보형식 요소 6 작성업체명, 프로그램명, 프로그램버전, 파일제작일, 파일검증여부, 건축공사사업내용작성여부
실적단가형식 요소 11 항목구분, 공종구분, 실적공사비코드, 품명, 규격, 단위, 재료비단가, 노무비단가, 경비단가, 비고, 기타
노임산출근거형식 요소 4 산출수량, 노임별공량, 노임할증, 공량품셈근거
일위대가상세형식 요소 21 자원구분, 자원코드, 계산제외, 품명, 규격, 단위, 수량, 재료비단가, 노무비단가, 경비단가, 재료비, 노무비, 경비, 관급, 손료코드군, 손
일위대가형식 요소 12 일위대가코드, 번호, 품명, 규격, 단위, 재료비, 노무비, 경비, 비목구분, 비고, 기타, 일위대가상세
중기단가산출형식 요소 12 중기단가산출코드, 번호, 품명, 규격, 단위, 재료비, 노무비, 경비, 비목구분, 비고, 중기단가산출식, 기타
기계경비형식 요소 13 기계경비코드, 번호, 품명, 규격, 단위, 작업시간, 작업장소, 재료비, 노무비, 경비, 비고, 기타, 기계경비상세
자재형식 요소 9 자재코드, 품명, 규격, 단위, 재료비단가, 인도조건구분, 비고, 기타, 조사처별단가
노무형식 요소 7 노무코드, 품명, 규격, 단위, 노무비단가, 비고, 기타
경비항목형식 요소 16 경비항목코드, 경비구분, 품명, 규격, 단위, 통화구분, 재료비단가, 노무비단가, 경비단가, 외화경비단가, 상각비계수, 정비비계수, 관리비계수,
조사처별단가형식 요소 5 상호, 전화번호, 재료비단가, 인도조건구분, 비고
조사처별단가형식_경비 요소 7 상호, 전화번호, 재료비단가, 노무비단가, 경비단가, 인도조건구분, 비고
공사내역서형식 요소 2 공사제경비, 단일공사내역서
단일공사내역서형식 요소 10 단일공사정보, 내역서, 일위대가, 중기단가산출, 기계경비, 자재, 노무, 경비항목, 실적단가, 제경비
공종형식 요소 11 내역서번호, 공종구분, 계산제외, 공종번호, 공종명, 재료비, 노무비, 경비, 비고, 기타, 세부공종
세부공종형식 요소 28 세부공종코드, 자원구분, 계산제외, 세부공종번호, 세부공종명, 규격, 단위, 수량, 재료비단가, 노무비단가, 경비단가, 재료비, 노무비, 경비,
단일공사정보형식 요소 3 공사구분, 공사설명, 전역변수
전역변수형식 요소 2 변수명, 실수값
개별노임산출형식 요소 2 노무코드, 공량
직접공사비정보 요소 6 직접공사비_재료비, 직접공사비_노무비, 직접공사비_경비, 미확정설계공종_금액, 제요율적용제외공종_금액, 관급자재공종_금액
제경비항목정보 요소 8 세부공종코드, 집계항목여부, 비목명, 적용산식, 적용요율, 추가금액, 산출금액, 적용산식설명
공사제경비형식 요소 1 제경비항목
기계경비상세 요소 22 자원구분, 자원코드, 계산제외, 품명, 규격, 단위, 수량, 재료비단가, 노무비단가, 경비단가, 재료비, 노무비, 경비, 손료코드군, 손료계산비
사용자정의_시간당노임산출정보 요소 2 사용자정의코드, 노임산출
노임산출형식 요소 3 산출식, 계산값, 적용구분
기계경비산출형식 요소 3 환율, 시간당손료산출, 시간당노임산출
환율형식 요소 3 미국_1USD, 유럽연합_1EUR, 일본_100엔
시간당손료산출형식 요소 4 E0-주간, E1-야간, E2-주야간2교대, E3-주야간3교대
시간당노임산출형식 요소 7 H0-일반구간, H1-터널구간, H2-장대터널, H3-펌프준설선, H4-그래브준설선, H5-버킷준설선, H_-사용자정의
■ 열거형 (코드 목록)
인도조건구분형식 40개: 일반, 납품장소도, 납품장소상차도, 납품장소하차도, 납품장소입고도, 현장설치도, 생산공장도(상차제외), 최기역레일도, 운반구상차도, 분공장도(상차제외), 수요기관 부
열거형 1개
■ 인라인 열거 40곳 (앞 14)
스키마버전 6개: 1.0.5, 1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0.0
주공사 9개: 토목공사, 건축공사, 설비공사, 전기공사, 통신공사, 조경공사, 소방공사, 문화재수리공사, 국가유산수리공사
공사현장지역코드 290개: 11110, 11140, 11170, 11200, 11215, 11230, 11260, 11290, 11305, 11320, 11350, 113
시설물유형 27개: 일반청사, 대형청사, 일반형초중고, 복합형초중고, 강의형대학교, 복합형대학교, 일반형수련시설, 복합형수련시설, 도서관, 야외형체육시설, 복합형체
철거공사포함여부 2개: 철거공사 포함, 철거공사 미포함
지역구분 3개: 비혼잡지역(일반), 혼잡지역(특수), 산간도서지역(특수)
지반공사.지반형태 2개: 일반지반, 특수지반
지반공사.흙막이공사 2개: 흙막이공사가 없는 경우, 흙막이공사가 있는 경우
구조형식 4개: 철골조, 철골철근콘크리트조, 철근콘크리트조, 기타
내진등급 3개: 내진설계특등급, 내진설계1등급, 내진설계2등급
건축물인증.신재생에너지 2개: 대상시설 해당 있음, 대상시설 해당 없음
건축물인증.에너지효율등급 5개: 1+++ 등급, 1등급 ~ 1++등급, 2등급 ~ 4등급, 5등급 ~ 7등급, 해당 없음
건축물인증.녹색건축인증 5개: 최우수, 우수, 우량, 일반, 해당 없음
건축물인증.BF인증 2개: 해당 있음, 해당 없음
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
"""최종 빈칸 점검 — 아직 한 번도 안 연 파일 종류가 있나."""
import sys, io, pathlib, struct, collections, re
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
R=pathlib.Path(r"C:\경영정보(주)")
COVERED_EXT = {".CPM",".EXE",".BPL",".DLL",".BSC",".CSTA",".STBSC",".DBF",".SMT",".STC",
".JB_1",".JB_M",".JB_R",".JB_RA",".INI",".MEM",".XLSX"}
kinds=collections.Counter(); other=collections.defaultdict(list)
for p in R.rglob("*"):
if not p.is_file(): continue
e=p.suffix.upper()
kinds[e]+=1
if e not in COVERED_EXT: other[e].append(p)
print("### `C:\경영정보(주)` 전체 파일 종류")
for e,c in kinds.most_common(): print(" %-10s %3d %s" % (e or "(없음)", c, "✅ 다룸" if e in COVERED_EXT else "·"))
print("\n### 아직 안 다룬 종류의 실제 파일")
for e,ps in sorted(other.items()):
for p in ps[:4]:
try: head=p.open("rb").read(16)
except Exception: head=b""
print(" %-12s %-30s %7.1f KB 머리=%r" % (e or "(없음)", p.name[:30], p.stat().st_size/1024, head[:10]))
@@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
"""조달청 공사원가호환규정 XSD 구조 추출."""
import sys, io, re, pathlib, collections
import xml.etree.ElementTree as ET
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
p=next(pathlib.Path(r"C:\경영정보(주)").rglob("Valid_Xml.vsl"))
t=p.read_text(encoding="utf-8")
NS={"xsd":"http://www.w3.org/2001/XMLSchema"}
root=ET.fromstring(t)
ct=root.findall("xsd:complexType",NS); st=root.findall("xsd:simpleType",NS)
print("### 조달청 공사원가호환규정 XSD")
print(" complexType %d개 · simpleType %d" % (len(ct), len(st)))
print("\n■ complexType (구조 정의)")
for c in ct:
nm=c.get("name")
els=[e.get("name") or e.get("ref") for e in c.iter("{http://www.w3.org/2001/XMLSchema}element")]
ats=[a.get("name") for a in c.iter("{http://www.w3.org/2001/XMLSchema}attribute")]
print(" %-22s 요소 %2d %s" % (nm, len(els), ", ".join(x for x in els if x)[:80]))
if ats: print(" 속성: %s" % ", ".join(x for x in ats if x)[:80])
print("\n■ 열거형 (코드 목록)")
n=0
for s in st:
nm=s.get("name")
en=[e.get("value") for e in s.iter("{http://www.w3.org/2001/XMLSchema}enumeration")]
if not en: continue
n+=1
print(" %-22s %2d개: %s" % (nm, len(en), ", ".join(en)[:92]))
print(" 열거형 %d" % n)
# 인라인 열거
inline=re.findall(r'name="([^"]+)"[^>]*>\s*<xsd:simpleType>\s*<xsd:restriction[^>]*>((?:\s*<xsd:enumeration value="[^"]*"/>)+)', t)
print("\n■ 인라인 열거 %d곳 (앞 14)" % len(inline))
for nm,blk in inline[:14]:
vals=re.findall(r'value="([^"]*)"', blk)
print(" %-22s %2d개: %s" % (nm, len(vals), ", ".join(vals)[:80]))
@@ -68,6 +68,7 @@
| 27 | **계약·실행·기성 단계** — 설계 뒤 네 단계의 계산 구조 | | 27 | **계약·실행·기성 단계** — 설계 뒤 네 단계의 계산 구조 |
| 28 | **변환·수량산출·식언어** — 식 변수 대상/저장, 조달청 변환, 직종 106종 | | 28 | **변환·수량산출·식언어** — 식 변수 대상/저장, 조달청 변환, 직종 106종 |
| 29 | **암호화자료의 뼈대** — 값 없이 구조만, 카탈로그 규모와 분류 깊이 | | 29 | **암호화자료의 뼈대** — 값 없이 구조만, 카탈로그 규모와 분류 깊이 |
| 30 | ⭐ **조달청 호환규정 XSD** — 국가 표준 납품 규격 전문 |
## 확정된 굵직한 것 ## 확정된 굵직한 것