diff --git a/resources/knowledge/03_미결_및_확인사항.md b/resources/knowledge/03_미결_및_확인사항.md index 469798e9..8e5f9a1c 100644 --- a/resources/knowledge/03_미결_및_확인사항.md +++ b/resources/knowledge/03_미결_및_확인사항.md @@ -11,6 +11,9 @@ | 15 | [공통] 사방댐 부위별 강도 실무값 (구 No.6 통합) | 잔여 = 부위별(본체/방수로 부배합/물받이) 강도 수치 관측 — **콘크리트 사방댐 실시설계 내역서** 필요 (기존 실무문서는 혼합쌓기라 데이터 없음). 부위 구분 4단위는 해소됨([콘크리트_재료 §1-1](technical_info/01_임도/02_상세설계/구조물/콘크리트_재료.md)). 선정=개발 단계 | 내역서 사용자 제공 대기 | [02_사방댐/05_원가정보/01_원가_특이사항](technical_info/02_사방댐/05_원가정보/01_원가_특이사항.md) §3 | 자료 대기 (2026-08-13) | | 18 | [공통] 사급 잡자재 단가 원천 결정 (유료지 구독 여부) | No.17 파생(2026-08-14). 관급(쇼핑몰 API)·특수자재(가격정보 API)·노임·중기·품셈은 전부 무료 경로 확보 완료 — 남은 공백 = **사급 잡자재 공사당 15종 내외**(PVC·유로폼·치즐·뇌관·번호판·지역골재 등, 실측 = [원가_기초데이터_원천 §5](technical_info/01_임도/05_원가정보/원가_기초데이터_원천.md)). 실무 대비표 실사용 유료지 = 물가정보·물가자료 중심 (연 약 30만원/종, API는 한국물가정보 KPI-DPS만 확인) | 선택지: ① 유료지 1종 구독 ② 실무 관측값 라이브러리(과거 참조)+업체 견적 입력 UI ③ 혼합. **사업 판단 — 개발 단계 사용자 결정** | [원가_기초데이터_원천](technical_info/01_임도/05_원가정보/원가_기초데이터_원천.md) §4~5, [자재단가 _meta](original/원가계산/자재단가/_meta.md) | 미결 — 사용자 결정 대기 (2026-08-14) | | 17 | [공통] ★원가 기초 데이터의 현행 원천 확보 가능성 | 견적 엔진 전제조건. 대상 표: **일위대가목록표/일위대가표ㆍ단가산출근거목록표/단가산출근거ㆍ환율및기초자료ㆍ중기목록표/중기사용료ㆍ재료비·노무비·경비 목록표ㆍ자재단가대비표ㆍ재료비·노무비·경비·중기 집계표**. STC/실행내역 xlsx는 최종 결과물이라 값만 있고 **단가를 어디서 가져왔는지(원천) 미표기** — Aislo가 현재 기준 데이터를 직접 입수할 경로가 있는지부터 확인 필요. 원천 후보(추정): 노임 = 대한건설협회 시중노임(연 2회 공표ㆍ공개), 자재 = 조달청 나라장터 가격 or 물가정보지(한국물가정보ㆍ물가자료ㆍ거래가격 — 유료 구독), 중기 = 표준품셈 기계손료 산식(확보) + 기계가격ㆍ연료단가, 일위대가/단가산출근거 = 원천 아닌 파생물(품셈 × 단가 조립) | ① 실무 xlsx 각 표의 비고ㆍ출처 표기("물가정보 20xx.x월호" 류) 역추적으로 실무 원천 식별 ② 원천별 현행 데이터 입수 경로(공개 API/유료 구독/수동 다운로드)ㆍ갱신 주기 조사 ③ 결과에 따라 01_수집지침 W8 신설 검토. **조사 예정 — 착수 전 사용자 협의**. +노무 관측 편입(구 No.10, 2026-08-13): 실무 내역 실측 결과 노임 = **시중노임 직종ㆍ단가 무할증 그대로**(울진 보통인부 165,545원) — 원천 추정(대한건설협회) 실물 뒷받침. 산림품셈 26계열 노무 할증 적용 흔적 없음, 상세 = [품셈_적용기준 §2 실무 관측](technical_info/01_임도/04_수량분석정보/품셈_적용기준.md). +ESTX 배포본 관측 편입(2026-08-14): 원천 추정이 상용 프로그램 실물로 확인 — 노임 건협(반기)·자재 간행물 5종+나라장터(월간)·중기 환율(서울외국환중개)+유류(한국석유공사, 상반기엔 조달청)·품셈 KICT(연간)·표준시장단가 KICT/항만협회(반기). 정리 = [원가_기초데이터_원천](technical_info/01_임도/05_원가정보/원가_기초데이터_원천.md) | [원가_기초데이터_원천](technical_info/01_임도/05_원가정보/원가_기초데이터_원천.md), [원가계산_체계](technical_info/01_임도/05_원가정보/원가계산_체계.md), [품셈_적용기준](technical_info/01_임도/04_수량분석정보/품셈_적용기준.md), [STC포맷분석](original/실무문서/_STC포맷분석.md), [숨김탭분석](original/실무문서/_숨김탭분석.md) | 미결 — 원천 확인됨, 입수 경로 조사 대기 (2026-08-14 갱신) | +| 19 | [공통] ★STmate 실기 환경 확보 (STC 입출력 검증 전제) | STC = 발주처 제출 최종물, Aislo import/export 필수 요구사항(사용자 확정 2026-08-15). 포맷 명세는 [original/원가계산/STmate/](original/원가계산/STmate/) 정리 완료. **잔여 = STmate 실행 환경** — 생성·변형 STC를 열기→조회→수정→재계산→저장→재개방까지 검증해야 빈 테이블(BDQTY·SYSINFO) export 허용 여부·신규생성 규칙 확정 가능. 환경 없으면 [STC_왕복검증](original/원가계산/STmate/STC_왕복검증.md) R1~R9 실행 불가 | 선택지: ① STmate 보유·구매 ② 체험판 ③ 설계사무소 협조. **개발 단계 사용자 결정** | [STmate 포맷 명세](original/원가계산/STmate/_meta.md), [STC_난독화_상태](original/원가계산/STmate/STC_난독화_상태.md) | 미결 — 사용자 결정 대기 (2026-08-15) | +| 20 | [공통] 조달수수료 현행 요율·대상 조건 원문 | 관급자재대에 별도 계상되는 조달수수료 = 실무 관측 0.54%(과거·기번3·봉화·영월 일치)만 확보, **현행 요율표·적용 조건 원문 미확보**. 로직(밑수=순자재대, 원단위 절사, 관급자재대 천원 올림)은 [단수처리_규칙](technical_info/01_임도/05_원가정보/단수처리_규칙.md)·[제비율](technical_info/01_임도/05_원가정보/제비율.md) 반영 완료 | 조달청 위탁구매(중앙조달) 수수료 요율표 수집 — 구매방식·금액별 요율·대상 여부 | [제비율 §3](technical_info/01_임도/05_원가정보/제비율.md), [원가계산_체계](technical_info/01_임도/05_원가정보/원가계산_체계.md) | 미결 — 원문 수집 필요 (2026-08-15) | +| 21 | [공통] STC 포맷 역공학·변형실험·신규생성 라이선스 확인 | Aislo가 STC를 읽고(import) 생성·재출력(export)하려면 STmate 전용 포맷을 해석·재현해야 함. 포맷 역공학·변형 파일 실험·신규 STC 배포의 법적 허용 범위 확인 필요 (No.19 실기 테스트 착수 전 선행) | STmate 라이선스·이용약관 확인, 필요 시 공급사 협의 | [STC_왕복검증 §1](original/원가계산/STmate/STC_왕복검증.md) | 미결 — 사용자 확인 대기 (2026-08-15) | ### §1-보조 — No.17 원가 기초데이터 원천 참고표 (내역 프로그램 판매처 게시판, 2026-08-13 등록) diff --git a/resources/knowledge/original/실무문서/_STC포맷분석.md b/resources/knowledge/original/실무문서/_STC포맷분석.md index 8bace6be..1e74d78b 100644 --- a/resources/knowledge/original/실무문서/_STC포맷분석.md +++ b/resources/knowledge/original/실무문서/_STC포맷분석.md @@ -95,27 +95,40 @@ status: draft ### 3-6. 기타 테이블 -| 테이블 | 상태 | 스키마 요지 | +> **2026-08-15 정정 (BDQTY·SYSINFO 상태)**: 종전 "빈 것" 기재는 오류다. 표준 DBF 파서(dbfread 등)가 **비표준 삭제플래그 바이트 `E`로 시작하는 레코드를 유효 레코드로 읽지 않아** 빈 것처럼 보였을 뿐, 헤더상 레코드가 실재한다. 상세 = [STmate 포맷 명세](../원가계산/STmate/STC_난독화_상태.md). 아래 표의 "상태" 열을 헤더 실측 기준으로 정정. + +| 테이블 | 상태 (헤더 실측) | 스키마 요지 | |---|---|---| -| BOQ (83필드) | 빈 것 | BOQ11과 동일 구조 — 작업본/발행본 이중화로 추정 ⚠ | -| BDQTY (37필드) | 빈 것 | BDCODEㆍQTY1~4ㆍ할증(X_HAL1~3)ㆍ비목(BIMOK) — 수량ㆍ할증 연결 테이블 | -| COSTA (53필드) | 빈 것 | COSTN의 대안 단가 (RATE_L/M/Sㆍ차수별 단가ㆍ_R 반영단가) | -| QCODE (15필드) | 빈 것 | 수량코드 (QTY0~9 슬롯) | -| KONGJONG | 1~7건 | 공종 구분 (영월ㆍ계류보전은 7건 — 공구/공종 분할 시 사용) | -| GRASS | 빈 것 | BDCODE 1필드 — 용도 미상 ⚠ | -| SET_REP (75~92건) | 설정 | **출력 보고서 양식 정의** — INDX(0101 재료비목록표…)ㆍ컬럼명 FLD_N1~11ㆍ폭 FLD_W1~11 | -| SYSINFO | 빈 것 | PART/NUM/LOG/CHR/DATE — 이력 | +| BOQ (83/94필드) | **레코드 0 (진짜 빈 테이블)** | BOQ11과 동일 구조 — 작업본/발행본 이중화로 추정 ⚠. 다공구 STC엔 BOQ12도 존재(소광 신설) | +| BDQTY (37/38필드) | **레코드 존재·난독화** (기번3 667ㆍ봉화 845ㆍ영월 883 등, 전 레코드 플래그 `E`+고엔트로피 본문) | BDCODEㆍQTY1~4ㆍ할증(X_HAL1~3)ㆍ비목(BIMOK) — 수량ㆍ할증 연결 테이블. 해독 규칙 미확정 → [STC_난독화_상태](../원가계산/STmate/STC_난독화_상태.md) | +| COSTA (53필드) | 레코드 0 (진짜 빈 테이블) | COSTN의 대안 단가 (RATE_L/M/Sㆍ차수별 단가ㆍ_R 반영단가) | +| QCODE (15필드) | 레코드 0 (진짜 빈 테이블) | 수량코드 (QTY0~9 슬롯) | +| KONGJONG | 1~7건 (정상 판독) | 공종 구분 (영월ㆍ계류보전은 7건 — 공구/공종 분할 시 사용) | +| GRASS | 레코드 0 (진짜 빈 테이블) | BDCODE 1필드 — 용도 미상 ⚠ | +| SET_REP (75~92건) | 설정 (정상 판독) | **출력 보고서 양식 정의** — INDX(0101 재료비목록표…)ㆍ컬럼명 FLD_N1~11ㆍ폭 FLD_W1~11 | +| SYSINFO | **레코드 8ㆍ난독화** (전 파일 8건, 플래그 `E`+고엔트로피, 파일 간 키스트림 100% 동일) | PART/NUM/LOG/CHR/DATE — 이력. 해독 규칙 미확정 → [STC_난독화_상태](../원가계산/STmate/STC_난독화_상태.md) | -## 4. 4개 STC 교차 대조 +> [해석] "표준 파서가 못 읽음" ≠ "빈 테이블". 4종(BOQ·COSTA·QCODE·GRASS)은 헤더 레코드수 0 = **진짜 빈 테이블**이고, BDQTY·SYSINFO는 **레코드 실재 + 난독화**다. 이 둘의 구분이 STC export 설계에 중요 — 진짜 빈 테이블은 빈 상태로 재현 가능하나, 난독화 2종은 STmate 내부 사용 여부가 미확정이라 빈 export 허용 여부를 실기 검증해야 한다. -| 항목 | 울진대흥 | 봉화 | 영월 | 계류보전 | -|---|---|---|---|---| -| BOQ11 | 261건/83필드 | 141건/83필드 | 225건/83필드 | **148건/94필드** | -| COSTN | 186건/101필드 | 248건/101필드 | 224건/**99필드** | 115건/101필드 | -| KONGJONG | 1 | 1 | 7 | 7 | -| RATE 계열 | 동일 (내장 기준표) | 동일 | 동일 | 동일 | +## 4. STC 교차 대조 (2026-08-15 — 보유 7개 전수로 확장) -- 스키마가 파일마다 다름 (STmate 버전 차이) → **변환기는 필드명 기반 동적 매핑** 필요, 위치 기반 금지. +> 종전 4개 → 보유 7개 전수 자동 비교로 갱신. 자동화 스크립트 = [STmate/_scripts/stc_cross_compare.py](../원가계산/STmate/_scripts/stc_cross_compare.py), 결과 정리 = [STC_교차비교](../원가계산/STmate/STC_교차비교.md). + +| 항목 | 울진대흥(기번3) | 봉화 | 영월 | 계류보전(변경) | 소광 당초 | 소광 신설(다공구) | 소광 변경1차 | +|---|---|---|---|---|---|---|---| +| BOQ11 | 261/83 | 141/83 | 225/83 | 148/94 | 90/83 | 90/94 | 115/94 | +| BOQ12 | — | — | — | — | — | **89/94** | — | +| COSTN | 186/101 | 248/101 | 224/**99** | 115/101 | 168/101 | 209/101 | 211/101 | +| BDQTY (난독화) | 667/37 | 845/37 | 883/37 | 395/38 | 540/38 | 813/38 | 747/38 | +| SYSINFO (난독화) | 8/5 | 8/5 | 8/5 | 8/5 | 8/5 | 8/5 | 8/5 | +| KONGJONG | 1 | 1 | 7 | 7 | 1 | 1 | 1 | +| PRJLST 필드 | 48 | 48 | 47 | 55 | 48 | 55(2건) | 55 | +| RATE 계열 | 동일 (내장 기준표 — 7파일 전부 스키마·건수 동일) | + +- **난독화 전수 재현**: BDQTY·SYSINFO는 **7개 파일 전부** 플래그 `E`+고엔트로피(본문 비ASCII 0.63~0.71). SYSINFO 키스트림은 파일 간 100% 동일 — 개별 파일 우연 아닌 STmate 포맷 고유 특성 확정. +- **스키마 가변**: BOQ11 83↔94(임도↔사방 확장)ㆍCOSTN 99/101ㆍPRJLST 47/48/55ㆍBDQTY 37/38. 같은 83필드라도 레코드길이 1214↔1222 차이(필드길이 배분 상이) → **위치 기반 파싱 절대 금지, 필드명 기반 동적 매핑 필수**. +- **신규 발견**: ① `BOQ12.DBF` — 소광 신설(다공구) STC에만 존재, 2공구 분할 시 BOQ11/BOQ12 병렬. ② 소광은 STC 3종(당초 신설·다공구 신설·변경 1차) 보유 = **당초↔변경 차분분석 소스**. ③ PRJLST 다공구본은 레코드 2건(공구별). +- DBF 버전 바이트: 0x03(대부분)ㆍ0x06(BDQTY·SYSINFO·COSTA)ㆍ0xE5(COSTN·PRJLST·QCODE — Visual FoxPro 계열). 난독화 2종은 0x06+`E`플래그 조합. ## 5. Aislo → STC 변환 관점 (설계 메모) @@ -124,7 +137,9 @@ status: draft 1. 최소 유효 세트: PRJLST(1건) + BOQ11(내역 트리) + COSTN(사용 단가) + COSTN.SMT(일위대가 전개) + RATE 계열(내장 기준표 복사) + SET_REP(양식) + Ini 2종. 2. BOQ11 생성 규칙: SORTCODE 256 간격 부여, 제목 T5→T4→T3→T2 + E2 소계 + ENDCODE 블록 포인터. 금액 = 단가(TAMT)×수량(QTY) 정합 필수 (프로그램 검증 가능성). 3. SIxMemo 포맷은 추가 리버싱 필요 (레코드 경계ㆍ인덱스 규칙) — 현재는 헤더ㆍ텍스트 구조만 확인. -4. 미해명 항목(⚠): BOQ vs BOQ11 이중화 규칙, GRASS 용도, RATE 행 라벨, SMT 인덱스 바이너리(10바이트) 구조, ENDCODE 정확한 산식. +4. 미해명 항목(⚠): BOQ vs BOQ11 이중화 규칙, BOQ12 분할 규칙(다공구), GRASS 용도, RATE 행 라벨, SMT 인덱스 바이너리(10바이트) 구조, ENDCODE 정확한 산식, **BDQTY·SYSINFO 난독화 해독**, PRJLST 차수 슬롯(~1..4) 저장 규칙. → 전량 [STmate 포맷 명세](../원가계산/STmate/) 폴더에서 개별 추적. + +> **2026-08-15 방침 반영**: STC는 발주처 제출 최종 산출물 → Aislo import/export가 필수 요구사항(사용자 확정). 이 문서(§1~4)는 실무 관측 요약이고, **호환 포맷 명세·검증 근거는 [original/원가계산/STmate/](../원가계산/STmate/)로 이관·확장**한다. 이 문서는 실무 관측 진입점으로 유지. ## 검증 결과 @@ -133,3 +148,4 @@ status: draft | V2 | PRJLST 원가 3값 = xlsx 공사원가계산서 D5ㆍD9(직노)ㆍD12와 대조 — 재료비ㆍ경비 일치, LCOST1=직접노무비 일치 (스크립트 재조회) | | V4 | BOQ11 트리: 1.1 준비공 소계(E2) 3,376,748 = 하위 3항목 합산 (361,494+1,119,272+1,895,982) — **일치** | | V5 | 미확정 사항은 ⚠ㆍ[해석] 마커 표기 (TAMT2 의미, BOQ 이중화, RATE 라벨, GRASS) | +| V6 (2026-08-15) | 7개 STC 전수 엔트리·스키마·레코드 상태 자동 비교 — BDQTY·SYSINFO 난독화 전수 재현, SYSINFO 키스트림 파일 간 100% 동일 확인 ([STC_교차비교](../원가계산/STmate/STC_교차비교.md)) | diff --git a/resources/knowledge/original/실무문서/_숨김탭분석.md b/resources/knowledge/original/실무문서/_숨김탭분석.md index 15c1cea7..a0062a5a 100644 --- a/resources/knowledge/original/실무문서/_숨김탭분석.md +++ b/resources/knowledge/original/실무문서/_숨김탭분석.md @@ -53,15 +53,31 @@ status: draft | 유형 | 탭 | 판정 | |---|---|---| -| STmate 메타 | `〓 INITIAL 〓` (veryHidden) — 봉화ㆍ영월ㆍ울진공통ㆍ영덕ㆍ소광 내역 | 프로그램 내부, 무가치 | +| ~~STmate 메타~~ | `〓 INITIAL 〓` (veryHidden) — 봉화ㆍ영월ㆍ울진공통ㆍ영덕ㆍ소광 내역 | **재분류 (2026-08-15)** — 아래 별도 항 참조. "무가치" 철회 | | 오솔길 계산탭 | 사거리입력/출력/변환ㆍ노선측량 보정(veryHidden) | 오솔길 내부 중간계산, 무가치 | | estx 내역 중간 | 거창 BUDGE/daega/junggi/noyim/unitpric/구역화물(hidden) | 견적 중간과정 — xlsx 최종본에 반영됨, 별도 가치 없음 | | 매크로 웜ㆍ복구 | `XL4Poppy`ㆍ`Recovered_Sheet*`ㆍ`xxxxxxxx`ㆍ`VXXXXXXX`(veryHidden) — 영덕 | XL4Poppy 감염 잔재, 무가치 (열람 시 매크로 차단) | | 문서 구성탭 | 울진2공구 겉표지ㆍ목차ㆍ설계설명서 등 17탭(hidden), 소광 개요 목차ㆍ간지 | 설계서 편집 흔적 — 설계설명서 등 내용은 이미 분석 | | 오탐(vis=1) | 울진1 거리이정표, 공통 공정표, 영덕 사방댐 시트 등 | 실제 visible — 필터 오탐, 이미 분석 대상 | +## E. INITIAL 시트 재분류 (2026-08-15 — STC 입출력 요구사항 반영) + +> D의 "STmate 메타·무가치" 판정을 철회한다. STC가 발주처 제출 최종물이고 Aislo import/export가 필수 요구사항(사용자 확정)이 되면서, xlsx↔STmate 왕복(재등록) 메타데이터의 성격이 바뀌었다. + +`〓 INITIAL 〓` (veryHidden) = xlsx에 STmate가 심어둔 **재등록 교환 메타** — STmate 코드ㆍ행 위치ㆍ수량ㆍ분류 등. 가치를 목적별로 구분: + +| 용도 | 가치 | +|---|---| +| xlsx → STmate 재등록(왕복 변환) | **핵심 참조** — export 후 STmate가 되읽는 경로 | +| STC ↔ xlsx 항목 매핑 (행↔코드) | **유력한 보조 근거** | +| STC 바이너리 생성 규칙 | 간접 근거 (xlsx 메타 ≠ STC 내부 구조 직접 명세) | +| 계산 공식의 법적·기술 근거 | 아님 (여전히 무관) | + +> [해석] "계산 로직 근거로는 낮은 가치, STmate 교환·매핑 분석에는 유가치". 단 INITIAL은 **xlsx의 재등록 메타**이지 **STC DBF 구조의 직접 명세가 아니다** — STC 생성 규칙은 STC 파일 자체 분석([STmate 포맷 명세](../원가계산/STmate/))이 1차 근거. 구조 분석 착수 시 [XLSX_INITIAL_구조](../원가계산/STmate/XLSX_INITIAL_구조.md)에 정리. + ## 결론 (사용자 질문 답) - **활용 가능**: 소광 07-구조도 숨김 31탭 = **임도 구조물 원단위 전집** (해당 공사지 미사용분 포함). 종합비교 04ㆍ미결 No.9 반영 후보. ★최대 성과. - **주의**: 오솔길 배수관규격표는 3공사지 동일값 → 템플릿 예시 의심, 장수 서술 재검토. -- **무시**: INITIALㆍXL4PoppyㆍRecoveredㆍ문서편집 흔적. +- **재분류**: INITIAL = STC/xlsx 입출력 매핑 참조 (구 "무가치" 철회 — §E). +- **무시**: XL4PoppyㆍRecoveredㆍ문서편집 흔적. diff --git a/resources/knowledge/original/원가계산/STmate/SIxMemo_구조.md b/resources/knowledge/original/원가계산/STmate/SIxMemo_구조.md new file mode 100644 index 00000000..0dc0dd9c --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/SIxMemo_구조.md @@ -0,0 +1,66 @@ +--- +title: SIxMemo 구조 — COSTN.SMT·PRJLST.SMT·QCODE.SMT +type: 포맷명세 +분석일: 2026-08-15 +status: draft +--- + +관련: [_meta](_meta.md) · [STC_필드사전_핵심](STC_필드사전_핵심.md) + +> SMT = STmate 커스텀 메모 파일. DBF의 M(memo) 필드 본문 저장. **표준 FPT 아님** — 표준 dbfread 파서 실패 → raw 처리 필요. + +## 1. 헤더 + +``` +[0x00] uint32 첫 레코드 길이(?) 예 COSTN.SMT=650(0x028A) +[0x04] uint32 블록 크기 = 0x40(64) +[0x08] "SIxMemo\0" 시그니처 +[0x10] 0x00 패딩 → 첫 메모 블록까지 +``` + +- 파일: COSTN.SMT(단가 산출메모, ~41KB) · PRJLST.SMT(프로젝트 메모) · QCODE.SMT(수량 메모, 대부분 미사용). +- DBF의 M필드(COSTN.IFORM·PRJLST.PRJ_MEMO)가 이 파일의 메모 인덱스를 가리킴. ⚠ **인덱스 = 10바이트 바이너리** — 표준 FPT(4바이트 블록번호)와 다름, 규칙 미확정. + +## 2. 본문 = 일위대가·단가 산출 전개 (실측) + +COSTN.SMT 메모 = 호표별 산출 텍스트. 예 (크로울러드릴 발파 일위대가): + +``` +'1. 재료비' + '폭약' 0.31'Kg' * &M00034M& = + '뇌 관(3.5m)' 0.04'개' * &M00018M& = + '잡재료비(바라선,전색재료등)(재료비의 5%)' &M00580M& * 5'%' = +'2. 노무비' + '화약취급공 :' &L00010L& * 0.004'인' = + '보통인부 :' &L00017L& * 0.006'인' = +'3.크로울러드릴(탑승유압식)(110kw)' + 'Q = 0.014 Hr/㎥' + '노 무 비 :'&X00055L& * 0.014 :=A01 + '재 료 비 :'&X00055M& * 0.014 :=A02 + '경 비 :'&X00055S& * 0.014 :=A03 +``` + +### 텍스트 문법 (관측) + +| 요소 | 의미 | +|---|---| +| `&M00034M&` | 자원 코드 마커 — 접미 M(재료)·L(노무)·S(경비). 단가 삽입 위치 | +| `0.31'Kg'` | **품(원단위)** + 단위 | +| `5'%'` | **할증률** (잡재료비 = 재료비의 5%) | +| `:=A01` | 중간결과 라벨 (A01·A02… 참조) | +| `(=)` `(==)` | 소계·합계 구분선 | +| `'Q = 0.014 Hr/㎥'` | 기계 시간당 작업량 (품셈 Q식) | + +> [해석] **품(원단위)과 할증(%)이 이 텍스트에 기록됨** — Aislo의 pum[공종][자원]·surcharge_mat 소스 (미결 No.10 연계). 단, 이는 STC 저장 시점의 값 = 과거 데이터. 현행 품은 산림·건설품셈. 회수 대상 = 전개 **구조**(자원마커·품·할증·중간라벨 문법). + +## 3. import/export 관점 + +- **import**: 메모 텍스트는 UTF/cp949 판독 가능 → 일위대가 전개 파싱 가능. 인덱스(10바이트) 규칙만 확정하면 DBF행↔메모 연결 완성. +- **export**: 신규 STC 생성 시 이 텍스트를 STmate 문법으로 재생성 + 인덱스 구성 필요 → **리버싱 잔여 최대 항목**. 레코드 경계·인덱스 바이너리 규칙 미확정. +- 우선순위: import(원문 보존) → 재출력(원본 메모 유지) → 신규생성(문법 재현). 신규생성이 가장 어려움. + +## 4. 미해명 (⚠) + +- 10바이트 메모 인덱스 구조 (블록번호·길이·플래그 배분) +- 레코드 경계 규칙 (0x40 정렬?) +- QCODE.SMT 용도 (대부분 빈 것) diff --git a/resources/knowledge/original/원가계산/STmate/STC_교차비교.md b/resources/knowledge/original/원가계산/STmate/STC_교차비교.md new file mode 100644 index 00000000..0b975593 --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/STC_교차비교.md @@ -0,0 +1,64 @@ +--- +title: STC 교차비교 — 보유 7개 전수 자동 분석 +type: 포맷명세 +분석일: 2026-08-15 +status: draft +소스: _scripts/stc_cross_compare.py +--- + +관련: [_meta](_meta.md) · [STC_컨테이너_구조](STC_컨테이너_구조.md) · [STC_난독화_상태](STC_난독화_상태.md) + +> 재현: `python _scripts/stc_cross_compare.py` (리포지토리 임의 위치). 결과를 아래로 정리. 원본 개정·추가 시 재실행. + +## 1. 레코드·필드 매트릭스 + +| 테이블 | 기번3 | 봉화 | 영월 | 계류보전변경 | 소광당초 | 소광다공구 | 소광변경1차 | +|---|---|---|---|---|---|---|---| +| PRJLST | 1건/48 | 1/48 | 1/47 | 1/55 | 1/48 | **2**/55 | 1/55 | +| BOQ11 | 261/83 | 141/83 | 225/83 | 148/94 | 90/83 | 90/94 | 115/94 | +| BOQ12 | — | — | — | — | — | **89/94** | — | +| COSTN | 186/101 | 248/101 | 224/**99** | 115/101 | 168/101 | 209/101 | 211/101 | +| KONGJONG | 1/3 | 1/3 | 7/3 | 7/3 | 1/3 | 1/3 | 1/3 | +| BDQTY(난독화) | 667/37 | 845/37 | 883/37 | 395/38 | 540/38 | 813/38 | 747/38 | +| SYSINFO(난독화) | 8/5 | 8/5 | 8/5 | 8/5 | 8/5 | 8/5 | 8/5 | +| BOQ(빈) | 0/83 | 0/83 | 0/83 | 0/94 | 0/83 | 0/94 | 0/94 | +| COSTA(빈) | 0/53 | 0/53 | 0/53 | 0/53 | 0/53 | 0/53 | 0/53 | +| QCODE(빈) | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | 0/15 | +| GRASS(빈) | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | +| RATE | 41/10 | 동일 전파일 | | | | | | +| RATE_M | 25/10 | 동일 | | | | | | +| RATE_R | 50/35 | 동일 | | | | | | +| RATE_RA | 50/20 | 동일 | | | | | | +| SET_REP | 75~92/28 | 파일별 건수차, 스키마 동일 | | | | | | + +## 2. 스키마 변형 요약 + +| 테이블 | 변형 | 그룹 | +|---|---|---| +| BOQ11 | 83필드 (임도: 기번3·봉화·영월·소광당초) / 94필드 (사방·다공구: 계류보전·소광다공구·소광변경1차) | rlen도 1214↔1222 등 상이 | +| COSTN | 101필드 (6파일) / 99필드 (영월 1파일) | | +| PRJLST | 48(기번3·봉화·소광당초) / 47(영월) / 55(사방·다공구 3파일) | | +| BDQTY | 37(기번3·봉화·영월) / 38(2025년 4파일) | 연도·버전차 | +| KONGJONG | 건수 1(단일공종)~7(다공종), 스키마 동일 | | +| RATE계열·SYSINFO·GRASS·QCODE·COSTA | **전 파일 스키마 동일** | 내장 기준표·시스템 테이블 | + +> [구현] 83↔94 = 임도↔사방 확장(사방 전용 필드). 같은 83필드에서도 rlen이 다름 → **위치 파싱 금지, 필드명 매핑**. import는 필드명 화이트리스트로 알려진 필드 해석 + 미지원 필드 원문 보존. + +## 3. 신규 발견 + +1. **BOQ12.DBF** — 소광 신설(다공구) STC에만 존재(21엔트리). 2공구를 BOQ11/BOQ12로 병렬 저장. 다공구 사업은 BOQ1n 확장 → export 시 공구 수만큼 BOQ 테이블 생성 규칙 필요. +2. **소광 STC 3종** = 당초 신설 / 다공구 신설 / 변경 1차. **당초↔변경 차분분석 소스** (한 항목만 바뀐 전후 비교로 필드 의미 확정 — tmp 보고서가 요구한 비교 세트). +3. **PRJLST 다공구본 = 2 레코드** (공구별 1행). 단일공구는 1건. + +## 4. 난독화 재현 + +- BDQTY·SYSINFO는 **7파일 전부** 플래그 0x45(`E`) + 고엔트로피 → 난독화가 포맷 고유 특성임을 전수 확정. +- SYSINFO 키스트림 파일 간 100% 동일. 상세 = [STC_난독화_상태 §2](STC_난독화_상태.md). + +## 5. 후속 (미해명 — 이 폴더에서 추적) + +- BOQ vs BOQ11 이중화 규칙 (BOQ 항상 빈 이유), BOQ12 분할 트리거 +- ENDCODE 산식 (제목 블록 종료 포인터), SORTCODE 부여 규칙 +- PRJLST 차수 슬롯 ~1..4 저장 규칙 → [STC_필드사전_보조](STC_필드사전_보조.md) +- SIxMemo 인덱스 → [SIxMemo_구조](SIxMemo_구조.md) +- BDQTY·SYSINFO 복호 → [STC_난독화_상태](STC_난독화_상태.md) diff --git a/resources/knowledge/original/원가계산/STmate/STC_난독화_상태.md b/resources/knowledge/original/원가계산/STmate/STC_난독화_상태.md new file mode 100644 index 00000000..b491a596 --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/STC_난독화_상태.md @@ -0,0 +1,68 @@ +--- +title: STC 난독화 상태 — BDQTY·SYSINFO +type: 포맷명세 +분석일: 2026-08-15 +status: draft +목적: "빈 테이블 오판" 정정 + 난독화 증거 수준을 단계별로 구분 (과장·과소 방지) +--- + +관련: [_meta](_meta.md) · [STC_컨테이너_구조](STC_컨테이너_구조.md) · [STC_필드사전_보조](STC_필드사전_보조.md) · [STC_교차비교](STC_교차비교.md) + +> **핵심 원칙**: "표준 DBF 파서가 못 읽음" ≠ "빈 테이블" ≠ "불필요한 테이블" ≠ "암호화 확정". 각 명제의 증거 수준을 분리 기재한다. 외부 파서가 못 읽는다는 사실은 STmate 내부에서 안 쓴다는 뜻이 아니다. + +## 1. 관측 사실 (7개 STC 전수) + +| 테이블 | 레코드 수(파일별) | 삭제플래그 | 본문 비ASCII 비율 | 정상 판독 여부 | +|---|---|---|---|---| +| BDQTY | 395~883 (기번3=667) | **전 레코드 `E`(0x45)** | 0.63~0.66 | ✕ (표준 파서 누락) | +| SYSINFO | 전 파일 **8건 고정** | 전 레코드 `E` | 0.70~0.71 | ✕ | + +- 정상 DBF 레코드 플래그 = 0x20(활성) / 0x2A(삭제). BDQTY·SYSINFO는 **0x45(`E`)** — 표준 파서가 이를 미인식하여 "레코드 없음"으로 처리 → 종전 "빈 것" 오판의 원인. +- 헤더의 레코드 수 필드는 정상. 즉 **레코드는 실재**한다. +- 대조: 같은 STC의 COSTN·PRJLST 등은 플래그 0x20 + 비ASCII 0.005~0.08 (정상 텍스트). 난독화는 **BDQTY·SYSINFO 2종에 한정**. + +## 2. XOR 부분 검증 (가설·재현) + +> 방법: 레코드들의 같은 열(오프셋)에서 **최빈 바이트**를 구하면, 평문에 공백(0x20)이 많은 열은 최빈 바이트 = "공백의 암호문"으로 추정된다. 이 추정 키스트림으로 역변환 시 공백 영역이 일괄 복원되는지 확인. + +| 검증 | 결과 | +|---|---| +| 기번3 BDQTY 공백영역 복원 | 667 레코드 전체에서 위치 고정 공백 복원 재현 | +| **SYSINFO 키스트림 파일 간 동일성** | 7개 파일 전부 **100% 동일** (100/100 바이트) | +| BDQTY 키스트림 파일 간 동일성 | 83~100% (공백 많은 열 100%, 값 열은 레코드 내용차로 최빈값 흔들림) | + +- SYSINFO 키스트림이 **7파일 100% 동일** → 개별 파일 우연이 아닌 **STmate 포맷 고유의 고정 변환**. 강한 증거. +- 단, "최빈=공백 암호문" 가정 하의 유도이므로 **순수 XOR인지·키 유도 방법은 미확정**. 전 필드가 올바른 평문(BDCODE·QTY 등 알려진 필드값)으로 복원되고 다수 파일에서 재현돼야 알고리즘 확정. + +## 3. 증거 수준 상태표 (과장·과소 방지) + +| 명제 | 상태 | +|---|---| +| 레코드 존재 (헤더 기준) | ✅ 확인 | +| 표준 DBF 파서에서 누락 | ✅ 확인 (플래그 0x45) | +| 비표준 변환 또는 난독화 적용 | ✅ 강한 증거 (고엔트로피 + 플래그) | +| 고정 키스트림 방식 | ✅ 부분 검증 (SYSINFO 7파일 100% 재현) | +| 순수 XOR·키 유도법 | ⚠ 미확정 | +| STmate 내부 사용 여부 | ⚠ 미확정 | +| 빈 테이블로 export 가능 여부 | ⚠ 미확정 — **실기 검증 필수** | +| 유효 생성(복호·재난독화) 규칙 | ⚠ 미확정 | + +## 4. export 관점 — 빈 테이블 대체 가능성은 실험으로만 + +> [해석] "제출본조차 이 두 테이블이 난독화 상태로 유통된다"는 관측은 있으나, 이는 **STmate가 쓰지 않는다는 증거가 아니다**. 오히려 안 쓰는 데이터를 굳이 난독화할 이유가 없다는 점에서 내부 사용 가설을 약하게 지지한다. 가능한 역할(전부 미확정): 전용 인코딩 수량정보, 파일 무결성·버전 확인, 수량산출 연결, 재등록 내부 상태, 열기 시 필수 검사 레코드, 재계산 시 참조 데이터. + +**실기 검증 설계** (STmate 환경 확보 후 — [03_미결](../../../03_미결_및_확인사항.md) 선행): + +1. 원본 그대로 열기 (기준) +2. BDQTY만 비운 파일 열기 +3. SYSINFO만 비운 파일 열기 +4. 둘 다 비운 파일 열기 +5. 각 변형본을 열고 → 내역 조회 → 수정 → 재계산 → 저장 → 재개방 +6. 재저장 STC 구조를 원본과 비교 (STmate가 두 테이블을 재생성하는지) + +- 통과 기준: 단순 "열림"이 아니라 **열기·조회·수정·재계산·저장·재개방 전 과정** 정상. +- 결과 → [STC_왕복검증](STC_왕복검증.md) 기록. + +## 5. BDQTY 로직 회수 관점 (후순위) + +BDQTY 복호의 가치 = 과거 수량값 회수가 아니라 **구조 규명**: BDCODE(일위대가 호표 연결)·QTY1~4(차수별 수량)·X_HAL1~3(할증)·BIMOK(비목)·X_QTY1~3(할증 전 수량)의 전개·연결 방식. 필드 목록 = [STC_필드사전_보조 §BDQTY](STC_필드사전_보조.md). Aislo 자체 수량 파이프라인(F1~F3)이 있으므로 **STC 입출력 구현 착수 전 선행 과제**로 두되, 계산 로직 신규 확보로서의 우선순위는 낮음. diff --git a/resources/knowledge/original/원가계산/STmate/STC_왕복검증.md b/resources/knowledge/original/원가계산/STmate/STC_왕복검증.md new file mode 100644 index 00000000..2d044694 --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/STC_왕복검증.md @@ -0,0 +1,43 @@ +--- +title: STC 왕복검증 — STmate 실기 테스트 결과 (기록처) +type: 포맷명세 +분석일: 2026-08-15 +status: draft +목적: 생성·변형 STC를 실제 STmate에서 열고 사용할 수 있는지 판정한 결과를 기록 +--- + +관련: [_meta](_meta.md) · [STC_난독화_상태 §4](STC_난독화_상태.md) · [STC_컨테이너_구조](STC_컨테이너_구조.md) + +> **현재 미착수** — STmate 실기 환경 미확보([03_미결](../../../03_미결_및_확인사항.md) 선행). 이 문서는 환경 확보 후 채운다. 미확정을 확정처럼 기록하지 않기 위해 **자리만** 둔다. + +## 1. 전제 (미결 — 선행 조건) + +- STmate 실기 환경 확보 (보유 / 체험판 / 설계사무소 협조) +- STC 포맷 역공학·변형실험·신규생성 라이선스 확인 +- 둘 다 [03_미결_및_확인사항](../../../03_미결_및_확인사항.md) 등록 — 사용자 결정 대기 + +## 2. 검증 매트릭스 (설계 — 실행 전) + +> 통과 기준 = 단순 "열림"이 아니라 **열기 → 조회 → 수정 → 재계산 → 저장 → 재개방** 전 과정 정상. + +| # | 대상 파일 | 검증 항목 | 결과 | +|---|---|---|---| +| R1 | 원본 그대로 | 열기(기준선) | (대기) | +| R2 | 무변경 read→write 왕복 | 재저장본 = 원본 구조 동일 | (대기) | +| R3 | 알려진 필드 1개 변경 (수량 등) | 변경 반영·재계산 정합 | (대기) | +| R4 | BDQTY만 제거 | 열기·조회·수정·재계산·저장·재개방 | (대기) | +| R5 | SYSINFO만 제거 | 〃 | (대기) | +| R6 | BDQTY+SYSINFO 제거 | 〃 (빈 export 가능 여부 판정) | (대기) | +| R7 | 기존 STC 기반 재출력 (Aislo 수정분 반영) | STmate 정상 사용 | (대기) | +| R8 | Aislo 데이터만으로 신규 STC 생성 | STmate 정상 사용 | (대기) | +| R9 | xlsx 재등록 (INITIAL 경로) | STmate 되읽기 | (대기) | + +## 3. import/export 난이도 분리 (설계 지침) + +| 트랙 | 접근 | 난이도 | +|---|---|---| +| import | 알려진 필드 해석 + 미지원 필드·전용 바이너리 **원문 보존** | 낮음 (빠른 구현) | +| export ① 기존 STC 수정·재출력 | 원본을 템플릿 삼아 알려진 필드만 갱신, 나머지 보존 | 중 (현실적 중간단계) | +| export ② 신규 STC 생성 | 복사할 원본 없음 → 포맷 생성 규칙 대부분 필요 (BDQTY·SIxMemo·ENDCODE·차수) | 높음 | + +> [구현] 초기 목표 = import(무손실) + export①(템플릿 재출력). 발주처가 신규 프로젝트 STC 제출을 요구하면 export②까지. R4~R6 실기 결과가 "빈 테이블 허용" 여부를 결정하고, 그에 따라 export② 난이도가 갈린다. diff --git a/resources/knowledge/original/원가계산/STmate/STC_컨테이너_구조.md b/resources/knowledge/original/원가계산/STmate/STC_컨테이너_구조.md new file mode 100644 index 00000000..a08dfffa --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/STC_컨테이너_구조.md @@ -0,0 +1,78 @@ +--- +title: STC 컨테이너 구조 — 엔트리·버전·스키마 판별 +type: 포맷명세 +분석일: 2026-08-15 +status: draft +--- + +관련: [_meta](_meta.md) · [STC_필드사전_핵심](STC_필드사전_핵심.md) · [STC_필드사전_보조](STC_필드사전_보조.md) · [STC_난독화_상태](STC_난독화_상태.md) · [STC_교차비교](STC_교차비교.md) + +## 1. 컨테이너 = ZIP + +- 매직 `PK\x03\x04`. 표준 zip. 무압축~deflate 혼재. +- 확장자만 `.STC`. `zipfile`로 그대로 해제. +- 파일명 케이스 혼재: `Start8x.Ini`(대부분) vs `Start8x.ini`(계류보전) — **대소문자 무시 매칭 필요**. + +## 2. 엔트리 구성 (표준 20 + 다공구 시 21) + +| 종류 | 엔트리 | 판독 | 역할 | +|---|---|---|---| +| DBF | PRJLST | 정상 | 프로젝트 마스터·총액 (핵심) | +| DBF | BOQ11 | 정상 | 설계내역서 본체 트리 (핵심) | +| DBF | BOQ12 | 정상 | **다공구 2공구 내역** — 소광 신설본에만 존재 | +| DBF | COSTN | 정상 | 단가 마스터 (핵심) | +| DBF | KONGJONG | 정상 | 공종 구분 (1~7건) | +| DBF | RATE / RATE_M / RATE_R / RATE_RA | 정상 | 제비율 내장 기준표 (전 파일 스키마·건수 동일) | +| DBF | SET_REP | 정상 | 출력 보고서 양식 정의 | +| DBF | BOQ | **빈(레코드 0)** | BOQ11 미러 구조 — 작업본/발행본 이중화 추정 ⚠ | +| DBF | COSTA | 빈(레코드 0) | COSTN 대안 단가 구조 | +| DBF | QCODE | 빈(레코드 0) | 수량코드 슬롯 | +| DBF | GRASS | 빈(레코드 0) | BDCODE 1필드 — 용도 미상 ⚠ | +| DBF | **BDQTY** | **난독화**(레코드 실재) | 수량·할증 세부 전개 → [난독화 상태](STC_난독화_상태.md) | +| DBF | **SYSINFO** | **난독화**(레코드 8) | 시스템 이력 → 〃 | +| SMT | COSTN.SMT / PRJLST.SMT / QCODE.SMT | 커스텀 | SIxMemo 메모 본문 → [SIxMemo_구조](SIxMemo_구조.md) | +| Ini | Start8x.Ini | 텍스트 | 프로그램 설정·코드 카운터·단가출처 정의 | +| MEM | STini.MEM | 텍스트 | Start8x.Ini와 **내용 동일** (백업/미러) | + +> [해석] "빈 테이블 4종"과 "난독화 2종"은 다르다. BOQ·COSTA·QCODE·GRASS는 헤더 레코드수 0 = 진짜 빈 테이블. BDQTY·SYSINFO는 레코드 실재하나 표준 파서가 비표준 플래그로 건너뜀. export 시 전자는 빈 상태 재현 가능, 후자는 실기 검증 필요. + +## 3. DBF 버전 바이트 (헤더 첫 바이트) + +| 바이트 | 테이블 | 성격 | +|---|---|---| +| 0x03 | BOQ·BOQ11·BOQ12·KONGJONG·RATE계열·SET_REP·GRASS | dBase III | +| 0x06 | BDQTY·SYSINFO·COSTA | 비표준 — **난독화 2종이 이 바이트**(COSTA는 빈) | +| 0xE5 | COSTN·PRJLST·QCODE | Visual FoxPro 계열 (memo 필드 M 보유) | + +- 인코딩: cp949 (한글). 필드명은 ASCII. + +## 4. 스키마 버전 판별 — 위치 파싱 금지 + +같은 테이블도 필드 수·레코드 길이가 사업·버전별로 다르다. + +| 테이블 | 필드 수 변형 | 비고 | +|---|---|---| +| BOQ11 | 83(임도) / 94(사방·다공구) | rlen 1214↔1222(83필드 내에서도 상이) | +| COSTN | 99 / 101 | 영월만 99 | +| PRJLST | 47 / 48 / 55 | 55=사방·다공구 | +| BDQTY | 37 / 38 | 버전차 | +| KONGJONG | 1~7건 | 공구·공종 분할 수 | + +> [구현] **필드명 기반 동적 매핑 필수, 위치(오프셋) 기반 절대 금지.** 파서는 DBF 헤더 필드 디스크립터를 읽어 이름→오프셋 맵을 만들고, 알려진 필드만 해석, **미지원 필드는 원문 바이트 보존**(무손실 import). 상세 비교 = [STC_교차비교](STC_교차비교.md). + +## 5. Start8x.Ini 주요 키 + +``` +[START] +JMOK1~6 = 조달가격/물가정보/물가자료/적산정보/견적단가/적용 단가 # 단가출처 6종 +JMK10~50 = 조달/물정/물자/적산/견적 # 약칭 +BCDNM=1208 DCDNM=2263 LCDNM=34 MCDNM=954 SCDNM=170 XCDNM=105 # 코드 카운터(다음 발번) +JUKNM=6 # 채택 출처 기본(6=적용단가) +CUTNM=0 # 단수처리 옵션 추정 ⚠ — 단수처리_규칙 작성 시 대조 대상 +[PRINT] +BMK_STR1~4 = 재료비/노무비/경비/합계 # 비목 표시명 +``` + +- JMOK1~6 = COSTN의 AMT_11~AMT_61 6슬롯과 대응 → [적용단가 채택 규칙](../../../technical_info/01_임도/05_원가정보/자재단가_적용.md). +- 코드 카운터(BCDNM 등) = export 시 신규 코드 발번 기준. B(일위대가)=1208번까지 사용 의미. +- `CUTNM=0` = 단수처리(cut) 관련 옵션일 가능성 — 값 의미 미확정, 여러 파일 CUTNM값 대조 필요. diff --git a/resources/knowledge/original/원가계산/STmate/STC_필드사전_보조.md b/resources/knowledge/original/원가계산/STmate/STC_필드사전_보조.md new file mode 100644 index 00000000..9444e911 --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/STC_필드사전_보조.md @@ -0,0 +1,89 @@ +--- +title: STC 필드사전 (보조) — BDQTY·RATE계열·SET_REP·KONGJONG·차수 슬롯·빈 테이블 +type: 포맷명세 +분석일: 2026-08-15 +status: draft +소스: 기번3 STC 실측 (BDQTY는 헤더 필드만 — 본문 난독화) +--- + +관련: [_meta](_meta.md) · [STC_필드사전_핵심](STC_필드사전_핵심.md) · [STC_난독화_상태](STC_난독화_상태.md) · [STC_교차비교](STC_교차비교.md) + +## 1. BDQTY — 수량·할증 세부 전개 (37필드 / 38, 난독화) + +> 헤더 필드는 판독되나 **레코드 본문 난독화** → 값 미판독([난독화 상태](STC_난독화_상태.md)). 필드명 기준 구조만 정리. + +| 필드 | 추정 의미 | +|---|---| +| BDCODE(C6) | 일위대가 호표 연결키 (BOQ11.BDCODE·COSTN 대응) | +| CODE(C6) | 자원 코드 (M/L/S/E) | +| NAME1(C50) / SIZE1(C60) / UNIT1(C10) | 명칭·규격·단위 | +| QTY1~QTY4 (N20) | 차수별 수량 | +| BIMOK(C1) | 비목 (재/노/경 배분) | +| DEVD1~4(L1) | 차수별 편집·전개 플래그 ⚠ | +| X_CODE(C6) | 확장·연결 코드 ⚠ | +| EXIST1(N1) | 존재 플래그 | +| RATE(N20) / PRPT(N2) / TPRPT(N2) | 비율·소수자릿수 | +| PRIN(N1) / PROUT(N1) | 반입·반출 플래그 | +| KWNGP(N1) | 관급 플래그 | +| EQCODE(C11) | 중기 코드 | +| X_QTY1~X_QTY3 (N6) | **할증 전 수량** 추정 ⚠ | +| X_HAL1~X_HAL3 (N6) | **할증률** 슬롯 | +| X_RATE / S_RATE (L1) | 할증·비율 적용 여부 | +| SBMOK(C1) | 세부 비목 | +| NAME2 / SIZE2 | 보조 명칭·규격 | + +> [해석] QTY(수량)·X_HAL(할증)·BIMOK(비목)·BDCODE(일위대가 연결) 구조 = STmate의 수량 전개·할증 연결 로직 소스. 복호 시 회수 대상은 값이 아니라 이 **연결·전개 규칙**. Aislo F1~F3 파이프라인 보유로 후순위. + +## 2. RATE 계열 — 제비율 내장 기준표 (전 파일 스키마·건수 동일) + +> STmate 프로그램 내장 기준표. 값 자체는 STC 저장 시점(2024·2025)의 조달청 제비율 — **과거 데이터**. 현행 요율은 [제비율](../../../technical_info/01_임도/05_원가정보/제비율.md). + +| 테이블 | 크기 | 내용 (실측 관측) | +|---|---|---| +| RATE (41×10) | 간접노무비(규모×기간 행렬)·기타경비·보험료·안전관리비 계수 행 + 타 업종 행렬 | +| RATE_M (25×10) | 이윤·일반관리비 관련 (행0: 15.0/14.5/15.5/15.0) | +| RATE_R (50×35) | 요율 세부 (고용보험 등급별 등) | +| RATE_RA (50×20) | 요율 확장 | + +- ⚠ 행 라벨이 DBF에 없음 → 열·행 의미는 STmate 화면 대조로 완전 확정. export 시 이 내장표를 복사 삽입. + +## 3. SET_REP — 출력 보고서 양식 정의 (28필드, 75~92건) + +| 필드 | 의미 | +|---|---| +| INDX(C5) | 보고서 코드 (0101 재료비목록표 등) | +| NAME(C24) / HEADTITLE(C40) | 보고서명·표제 | +| FLDCNT(N2) | 컬럼 수 | +| FLD_N1~FLD_N11 (C25) | 컬럼명 | +| FLD_W1~FLD_W11 (N2) | 컬럼 폭 | +| EN_HEAD(L1) / PG_ADD(C15) | 머리행·페이지 옵션 | + +- export 시 STmate 출력 양식 재현용. 산출물 표(A1~A16, [원가_출력변수_사전](../../../technical_info/01_임도/05_원가정보/원가_출력변수_사전.md))와 대응. + +## 4. KONGJONG — 공종 구분 (3필드, 1~7건) + +| 필드 | 의미 | +|---|---| +| CODE(C8) / NAME(C30) / SIZE(C30) | 공종 코드·명칭·규격 | + +- 단일공종 1건, 다공종(영월·계류보전) 7건. 공구·공종 분할 트리 상위 그룹. + +## 5. 차수 슬롯 (당초·변경설계 저장 규칙) + +- PRJLST·BOQ11·COSTN·BDQTY 모두 접미 **1/2/3/4** = 차수 슬롯 (1=당초, 2~4=변경 1~3차). +- EXIST1~4 = 차수별 존재 플래그. 변경설계 STC(계류보전·소광변경1차)에서 2차 슬롯 사용 여부 = **차분분석 대상** ⚠. +- 소광 3종(당초·다공구·변경1차)으로 당초↔변경 저장 방식 실증 가능. +- ACOST1~4(PRJLST) = 관급자재대 차수 슬롯 추정. + +> [구현] export가 변경설계를 지원하려면 차수 슬롯 규칙 확정 필수. 실무 변경설계 제출 빈번 → 미지원 시 반쪽 호환. 우선 당초(1차)만 read/write 왕복 검증 후 차수 확장. + +## 6. 빈 테이블 4종 (레코드 0 — 진짜 빈) + +| 테이블 | 필드 | 추정 역할 | +|---|---|---| +| BOQ | 83/94 | BOQ11 미러 (작업본/발행본 이중화?) ⚠ | +| COSTA | 53 | COSTN 대안 단가 (RATE_L/M/S·차수단가) | +| QCODE | 15 | 수량코드 (QTY0~9 슬롯) | +| GRASS | 1 (BDCODE) | 용도 미상 ⚠ | + +- 7파일 전부 레코드 0. export 시 빈 헤더로 재현 가능성 높으나 실기 확인. diff --git a/resources/knowledge/original/원가계산/STmate/STC_필드사전_핵심.md b/resources/knowledge/original/원가계산/STmate/STC_필드사전_핵심.md new file mode 100644 index 00000000..c9d54236 --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/STC_필드사전_핵심.md @@ -0,0 +1,114 @@ +--- +title: STC 필드사전 (핵심) — PRJLST·BOQ11·COSTN +type: 포맷명세 +분석일: 2026-08-15 +status: draft +소스: 기번3 STC 실측 (필드명·타입·길이). 값 예시는 기번3 관측(과거 데이터 — 참조). +--- + +관련: [_meta](_meta.md) · [STC_필드사전_보조](STC_필드사전_보조.md) · [STC_컨테이너_구조](STC_컨테이너_구조.md) + +> 표기: `필드명(타입+길이)`. 타입 C=문자 N=숫자 L=논리 M=메모. import 핵심 3테이블. 미기재 필드는 [보조](STC_필드사전_보조.md) 또는 미해명(⚠). **접미 1/2/3/4 = 차수(당초·1차변경·2차·3차) 슬롯** — 이 파일들은 1차만 사용. + +## 1. PRJLST — 프로젝트 마스터 (48필드, 1건 / 다공구 2건) + +| 필드 | 의미 (기번3 실측) | +|---|---| +| PNUM(C30) / PNAME(C100) | 표시명 "남부청(3.50km)" / 공사명 "2024년 간선임도사업(기번3)" | +| PCODE(N3) / CCODE(N3) | 발주처·지역 코드 추정 ⚠ | +| PCLASS(N2) / SCLASS(N1) | 공사 분류 ⚠ | +| MCOST1 / LCOST1 / SCOST1 (N14) | 재료비 194,234,417 / 노무비 346,800,554 / 경비 169,324,165 — **xlsx 공사원가계산서 일치** | +| TCOST1(N14) | 재+노+산출경비 710,359,136 | +| COSTW1(N14) | 총공사비 1,201,879,000 | +| ACOST1(N14) | 관급자재대 추정 ⚠ | +| ~2,3,4 접미 | 차수 슬롯 (변경설계) — 기번3은 1차만 | +| CHAMT(L1) / CHGNM / CHNNM | 변경 관련 플래그 ⚠ | +| FINL_LV(N2) | 내역 트리 최종 레벨 (=4) | +| OVR_6LV(L1) | 6레벨 초과 여부 | +| PRJ_MEMO(M10) | PRJLST.SMT 참조 (SIxMemo) | +| K_ORD / KXXNM / QXXNM / FXXNM | 코드·수량·양식 표시 옵션 ⚠ | +| ACTTYP(N1) / ACTOPT(N1) | 사업유형·옵션 ⚠ | + +> [해석] 사방·다공구본은 55필드(7필드 확장). 확장 필드 의미는 사방 STC(계류보전)·다공구본(소광) 대조로 확정 필요 ⚠. + +## 2. BOQ11 — 설계내역서 본체 (83필드 / 사방·다공구 94, 261건) ★핵심 + +내역서 **트리 + 항목 행**을 한 테이블에 직렬화. + +### 2-1. 식별·수량·금액 (차수 1) + +| 필드 | 의미 | +|---|---| +| ITNUM(C18) | 항번 "1.1" | +| NAME1(C50) / SIZE1(C60) / UNIT1(C10) | 명칭·규격·단위 | +| QTY1(N18) | 수량 | +| TAMT1 / LAMT1 / MAMT1 / SAMT1 (N15) | **단가** (합계·노무·재료·경비 분해) | +| T_AMT1 / L_AMT1 / M_AMT1 / S_AMT1 (N14) | **금액** (=단가×수량, 분해 동일) | +| EXIST1(N1) | 차수1 존재 플래그 | +| BDCODE1(C6) | **행 유형 / 일위대가 참조 키** (§2-3) | +| ~2,3,4 접미 (QTY2·TAMT2·… BDCODE2 등) | 차수 2·3·4 슬롯 | + +### 2-2. 트리·정렬·기타 + +| 필드 | 의미 | +|---|---| +| SORTCODE(N13) | 정렬키 (256 간격 — 중간삽입 여유) | +| ENDCODE(N13) | 제목 블록 종료 위치 포인터 ⚠ 산식 미확정 | +| BQCODE(C16) | 단가 적용월 등 ⚠ | +| RL / RM / RS (N7) | 노무·재료·경비 비율 추정 ⚠ | +| RATE(N12) / PRPT(N2) / PRIN(N1) / PROUT(N1) | 비율·소수자릿수·반입출 플래그 ⚠ | +| KWNGP(N1) | **관급자재 플래그** | +| EQCODE(C11) | 중기·장비 코드 | +| UC(L1) | 단가 확정 여부 ⚠ | +| CODEA(C15) / AAMT1~4 / A_AMT1~4 | 관급 관련 금액 슬롯 추정 ⚠ | +| NAME2 / SIZE2 / UNIT2 | 보조 명칭·규격·단위 | +| QTY1_B / QTY1_N / QTY1_O / QTY1_H (N18) | 수량 세분(기본·순·구·할증?) ⚠ | +| ITM_TYP(N3) / RCU / FRM_NH / BL_AMT | 항목유형·플래그 ⚠ | + +### 2-3. BDCODE 행 유형 코드 (실측) + +| 값 | 의미 | +|---|---| +| `T5` | 총괄 제목 | +| `T4` | 공구 제목 | +| `T3` | 공사 제목 | +| `T2` | 공종 제목 | +| `B#####` | 일위대가 참조 항목 (COSTN·일위대가 연결키) | +| `E2` | 소계(계) 행 | + +- 실측 트리: `총괄(T5) → 1공구 L=1.20km(T4) → 1.토공사(T3) → 1.1 준비공(T2) → 규준틀설치(B00194)… → 계(E2)`. +- 검증(V4): 1.1 준비공 소계(E2) 3,376,748 = 하위 3항목 합산 일치. + +## 3. COSTN — 단가 마스터 (101필드 / 영월 99, 186건) ★핵심 + +### 3-1. 식별·단가 + +| 필드 | 의미 | +|---|---| +| CODE(C6) | M/L/S/E 코드 (재료·노무·경비·중기) | +| NAME(C50) / SIZE(C60) / UNIT(C10) | 품명·규격·단위 | +| BQCODE(C16) | 단가 적용월 "2024.01" | +| EQCODE(C11) | 중기 코드 | +| TAMT1 / LAMT1 / MAMT1 / SAMT1 (N15) | 적용 단가 (합·노·재·경) | +| TAMT2~4 등 | 차수·보조 단가 (TAMT2 의미 ⚠) | +| NAGCD(N8) | 노임·품 코드 추정 ⚠ | +| IFORM(M10) | 산출 메모 (COSTN.SMT SIxMemo) | + +### 3-2. 출처별 단가 슬롯 (적용단가 채택 구조) ★ + +6출처 × 4차수 = AMT_slots. 슬롯 번호 `AMT_<출처><차수>`: + +| 필드군 | 의미 | +|---|---| +| AMT_11~AMT_61 (N14) | 차수1의 **6출처 단가** (1=조달 2=물정 3=물자 4=적산 5=견적 6=적용) | +| PG_11~PG_51 (C12) | 각 출처의 **물가지 페이지·식별정보** (출처6=적용은 페이지 없음) | +| AMT_12~62, PG_12~52 | 차수2 슬롯 / AMT_13~, AMT_14~ | 차수3·4 | +| PG_J(C12) | 채택 출처 관련 ⚠ | +| **PG_1 / PG_2 / PG_3 / PG_4 (N1)** | 차수별 **채택 출처 인덱스** (예: 5=견적단가 채택) | +| **AMT_1 / AMT_2 / AMT_3 / AMT_4 (N1)** | 차수별 채택 관련 플래그 ⚠ | +| K_S(L1) / GUN(C1) / GUN2(C1) | 관급·구분 플래그 ⚠ | +| JDCODE(C17) / WQCODE(C15) / CONTCODE(C6) | 조달·수량·연결 코드 ⚠ | +| ADJ_M / ADJ_L / ADJ_S (N12) / S_ADJ(L1) | 단가 보정값·보정 여부 ⚠ | +| EDT_DATE(C16) | 편집일 | + +> [구현] **적용단가 채택 로직**: 6슬롯(AMT_11~61)에 출처별 단가, PG_1이 채택 출처 인덱스. 그러나 **저장 구조 해석일 뿐 선택 알고리즘(자동 최저가? 우선순위? 수동선택?)은 미확정** — 규칙 후보 도출은 COSTN 통계 + 자재단가대비표 대조 + 전후 비교로 검증. 상세 = [자재단가_적용](../../../technical_info/01_임도/05_원가정보/자재단가_적용.md) 채택 규칙 절. 출처 정의 = Start8x.Ini JMOK1~6. diff --git a/resources/knowledge/original/원가계산/STmate/XLSX_INITIAL_구조.md b/resources/knowledge/original/원가계산/STmate/XLSX_INITIAL_구조.md new file mode 100644 index 00000000..1def5b5b --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/XLSX_INITIAL_구조.md @@ -0,0 +1,36 @@ +--- +title: XLSX INITIAL 시트 구조 — STmate 재등록 교환 메타 +type: 포맷명세 +분석일: 2026-08-15 +status: draft +--- + +관련: [_meta](_meta.md) · [숨김탭분석 §E](../../실무문서/_숨김탭분석.md) + +> `〓 INITIAL 〓` = STmate가 xlsx 산출 시 심는 **veryHidden 재등록 메타 시트**. 문서 속성 "STmate w24.04로 작성". VBA로만 해제되는 상태(veryHidden). xlsx를 STmate로 되읽어 재등록할 때 사용. + +## 1. 가치 (목적별 — 2026-08-15 재분류) + +> `_숨김탭분석.md`의 "무가치·무시" 판정 철회. STC import/export 필수 요구사항 반영. + +| 용도 | 가치 | +|---|---| +| xlsx → STmate 재등록 (왕복 변환) | **핵심 참조** | +| STC ↔ xlsx 항목 매핑 (내역 행 ↔ STmate 코드) | **유력한 보조 근거** | +| STC 바이너리 생성 규칙 | 간접 근거 (xlsx 메타 ≠ STC DBF 직접 명세) | +| 계산 공식의 법적·기술 근거 | 아님 | + +> [해석] INITIAL은 **xlsx의 재등록 메타**이지 **STC 내부 구조 명세가 아니다**. STC 생성 규칙의 1차 근거는 STC 파일 자체([STC_필드사전_핵심](STC_필드사전_핵심.md) 등). INITIAL은 "xlsx 셀 ↔ STmate 코드" 매핑을 보여주므로, Aislo가 xlsx로 내보낸 뒤 STmate 재등록을 노릴 때의 경로 참조로 유효. + +## 2. 관측 (기번3 등 — 요약) + +- 숨겨진 INITIAL 시트에 STmate 코드·행 위치·수량·분류·재등록용 메타데이터 포함(숨김탭분석 관측). +- xlsx는 단순 보고서가 아니라 **STmate 재등록 고려 교환 포맷** 성격. + +## 3. 후속 (미착수 ⚠) + +- INITIAL 셀 레이아웃 전수 추출 (행↔코드 매핑 규칙, 어떤 메타가 재등록에 필수인지) +- STC BOQ11.ITNUM/BDCODE ↔ INITIAL 매핑 ↔ xlsx 셀 3자 대응 검증 +- STmate 재등록 실기 테스트 (xlsx 수정 후 되읽기) → [STC_왕복검증](STC_왕복검증.md) + +> 착수 시점: STC import 명세 안정화 후. 현재는 재분류·용도 정의까지만. diff --git a/resources/knowledge/original/원가계산/STmate/_meta.md b/resources/knowledge/original/원가계산/STmate/_meta.md new file mode 100644 index 00000000..4069cb18 --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/_meta.md @@ -0,0 +1,50 @@ +--- +title: STmate STC 포맷 명세 — 문서 지도·대상 파일 +type: 포맷명세 +분석일: 2026-08-15 +status: draft +목적: STC(STmate 프로젝트 파일) import/export 구현을 위한 컨테이너·DBF 명세·검증 근거 축적 +--- + +> **왜 이 폴더인가**: STC는 설계자가 발주처에 제출하는 **최종 산출물**이며, Aislo도 STC **불러오기(import)·내보내기(export)가 필수 요구사항**이다(사용자 확정 2026-08-15). 따라서 STC 포맷 해석은 연구성 작업이 아니라 **납품 호환성 확보를 위한 구현 선행 명세**다. +> 계산 로직(밑수·절사·채택 규칙)은 `technical_info/01_임도/05_원가정보/`가 담당하고, 이 폴더는 **포맷 구조·필드 사전·검증 근거**만 담는다. 두 트랙은 분리한다. +> 실무 관측 진입점 = [original/실무문서/_STC포맷분석.md](../../실무문서/_STC포맷분석.md) (이 폴더로 명세 이관, 그 문서는 요약·링크로 유지). + +## 문서 지도 + +| 문서 | 내용 | +|---|---| +| [STC_컨테이너_구조](STC_컨테이너_구조.md) | zip 엔트리 구성, 필수/가변 엔트리, DBF 버전 바이트, 스키마 버전 판별 | +| [STC_필드사전_핵심](STC_필드사전_핵심.md) | PRJLSTㆍBOQ11ㆍCOSTN — import 구현의 핵심 3테이블 | +| [STC_필드사전_보조](STC_필드사전_보조.md) | BDQTYㆍRATE계열ㆍSET_REPㆍKONGJONGㆍ빈 테이블ㆍ차수 슬롯 | +| [STC_난독화_상태](STC_난독화_상태.md) | BDQTYㆍSYSINFO — 난독화 7단계 상태표, XOR 부분 검증 | +| [STC_교차비교](STC_교차비교.md) | 보유 7개 STC 전수 자동 비교 결과 (엔트리·스키마·레코드·난독화 재현) | +| [SIxMemo_구조](SIxMemo_구조.md) | COSTN.SMTㆍPRJLST.SMTㆍQCODE.SMT 커스텀 메모 포맷 | +| [XLSX_INITIAL_구조](XLSX_INITIAL_구조.md) | xlsx veryHidden INITIAL 시트 — STmate 재등록·행↔코드 매핑 | +| [STC_왕복검증](STC_왕복검증.md) | STmate 실기 테스트 결과 기록처 (실기 환경 확보 후 작성) | +| [_scripts/stc_cross_compare.py](_scripts/stc_cross_compare.py) | 교차비교 자동화 스크립트 (재현용) | + +## 대상 파일 (보유 STC 7건) + +> 자동 수집. sha256[:16] = 무결성 스냅샷. 원본 개정·재수집 시 갱신. + +| 라벨 | 사업 | 크기 | sha256[:16] | 특징 | +|---|---|---|---|---| +| 기번3 | 2024 간선임도 울진대흥 (공통) | 48,956B | 4e405a2043b6b8c1 | 기준 샘플, 1공구, xlsx 병존 | +| 봉화 | 2024 산불진화임도 기번41 현동 | 52,477B | 2eaa38ec2e185b2b | 1공종 | +| 영월 | 2024 임도시설2차 기번6 | 58,421B | 6c52808f61b291a2 | 7공종(본선·지선), COSTN 99필드 | +| 계류보전(변경) | 2025 계류보전 기번1 영덕 (변경) | 38,613B | cdc9b052ff3c1cb1 | **사방** 94필드, 변경설계 | +| 소광 당초 | 2025 산불진화임도 울진소광 | 39,964B | 85bc63eaab9e3670 | 당초 신설 | +| 소광 신설(다공구) | 〃 기번8 산29외 | 51,541B | 46e8c3a660935c9e | **BOQ12 존재**(2공구), PRJLST 2건 | +| 소광 변경1차 | 〃 변경 1차분 | 49,680B | 50a8cd2285e9bdaa | 변경설계 | + +- **차분분석 소스**: 소광 3종(당초·다공구·변경1차) = 당초↔변경 대비. 계류보전 = 사방 스키마 대조. +- 원본 경로는 각 `original/실무문서/<사업>/…/*.STC`. + +## 작업 트랙·미결 연계 + +- import/export **기능 구현**은 개발 영역 → `docs/raw/PLAN.md` 협의 (이 폴더 아님). +- **선행 미결**(→ [03_미결_및_확인사항](../../../03_미결_및_확인사항.md)): + - STmate 실기 환경 확보 (열기·수정·재계산·저장·재개방 검증 전제) + - STC 포맷 역공학·변형실험·신규생성 라이선스 확인 +- **권장 구현 순서**: ① 포맷 명세 정정·확장(이 폴더) → ② 필수/가변 엔트리 분류 → ③ 무변경 read/write 왕복 → ④ 최소 변형 실험 → ⑤ BDQTY·SYSINFO 제거·보존·변형 실기 → ⑥ SIxMemo·ENDCODE 해석 → ⑦ 기존 STC 기반 재출력 → ⑧ 신규 STC 생성 → ⑨ STmate 실기 전체 검증. diff --git a/resources/knowledge/original/원가계산/STmate/_scripts/extract_rounding.py b/resources/knowledge/original/원가계산/STmate/_scripts/extract_rounding.py new file mode 100644 index 00000000..5d4cbab4 --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/_scripts/extract_rounding.py @@ -0,0 +1,98 @@ +# 내역 xlsx에서 단수처리(ROUND 계열) 수식을 항목명과 함께 추출 +# 목적: 단계별 절사·반올림 규칙을 6개 공사지 교차로 확인 (값 아닌 로직) +import zipfile +import re +import sys +import os + +sys.stdout.reconfigure(encoding="utf-8") + +FILES = { + "기번3": "2024년 간선임도(기번3-울진.대흥)(공통)/1. 설계원본/01 내역자료/2024년 간선임도사업(기번3).xlsx", + "봉화": "04.산불 봉화/01. 내역서/2024년 산불진화임도 실시설계(기번41_현동)_ L=3.46km.xlsx", + "영월": "05. 동부청 영월/내역서/2024년 임도시설사업2차(산불진화_기번6)-영월.xlsx", + "계류보전": "20250527 2025년 계류보전사업(기번1-영덕.병곡.영리.산214-1)(변경)/01.내역자료/2025년 계류보전사업(기번1 영덕.병곡.영.산214)(변경).xlsx", + "소광": "25년 산불진화임도(기번8)(울진소광)/2025년 산불진화임도 신설사업(기번8 울진.금강송.소광.산29외).xlsx", +} +ROOT = os.path.normpath( + os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "..", "..") +) +BASE = os.path.join(ROOT, "original", "실무문서") + +RE_SI = re.compile(r"(.*?)", re.S) +RE_T = re.compile(r"]*>(.*?)", re.S) +RE_SHEET = re.compile(r']*r:id="(rId\d+)"') +RE_REL = re.compile(r'Id="(rId\d+)"[^>]*Target="([^"]+)"') +RE_CELL = re.compile( + r']*)>(?:]*>(.*?))?(?:(.*?))?', re.S +) +RE_ROUND = re.compile(r"ROUND(DOWN|UP)?|TRUNC|\bINT\(", re.I) + + +def shared_strings(z): + try: + ss = z.read("xl/sharedStrings.xml").decode("utf-8") + except KeyError: + return [] + out = [] + for si in RE_SI.findall(ss): + out.append("".join(RE_T.findall(si))) + return out + + +def sheet_map(z): + wb = z.read("xl/workbook.xml").decode("utf-8") + rels = dict(RE_REL.findall(z.read("xl/_rels/workbook.xml.rels").decode("utf-8"))) + out = [] + for name, rid in RE_SHEET.findall(wb): + tgt = rels.get(rid) + if tgt: + out.append((name, "xl/" + tgt.lstrip("/").replace("worksheets/", "worksheets/") if not tgt.startswith("xl/") else tgt)) + return out + + +def main(): + target_sheets = re.compile(r"원가계산|설계내역|총괄|내역서|집계|관급") + for label, rel in FILES.items(): + p = os.path.join(BASE, rel) + if not os.path.exists(p): + print(f"## {label}: 파일 없음 {rel}\n") + continue + z = zipfile.ZipFile(p) + ss = shared_strings(z) + print(f"## {label}") + for name, path in sheet_map(z): + if not target_sheets.search(name): + continue + try: + x = z.read(path).decode("utf-8") + except KeyError: + continue + # 행 텍스트(항목명) 맵: 각 행의 문자열 셀 모으기 + rows = {} + hits = [] + for col, row, attr, f, v in RE_CELL.findall(x): + row = int(row) + is_str = 't="s"' in attr + if is_str and v.isdigit(): + txt = ss[int(v)] if int(v) < len(ss) else "" + if txt: + rows.setdefault(row, []).append(txt) + if f and RE_ROUND.search(f): + hits.append((row, col, f, v)) + if hits: + print(f" ### [{name}] ROUND수식 {len(hits)}건") + seen_pat = {} + for row, col, f, v in hits: + label_txt = " ".join(rows.get(row, []))[:40] + # 패턴 정규화 (셀참조 → REF) + pat = re.sub(r"[A-Z]+\d+", "REF", f) + seen_pat.setdefault(pat, []).append((row, col, label_txt, v)) + for pat, items in sorted(seen_pat.items(), key=lambda kv: -len(kv[1])): + r0, c0, lt0, v0 = items[0] + print(f" - {pat} ×{len(items)} 예:{c0}{r0} '{lt0}' v={v0}") + print() + + +if __name__ == "__main__": + main() diff --git a/resources/knowledge/original/원가계산/STmate/_scripts/stc_cross_compare.py b/resources/knowledge/original/원가계산/STmate/_scripts/stc_cross_compare.py new file mode 100644 index 00000000..d2637865 --- /dev/null +++ b/resources/knowledge/original/원가계산/STmate/_scripts/stc_cross_compare.py @@ -0,0 +1,114 @@ +# STC 교차비교: 보유 STC 전체의 엔트리·DBF 스키마·레코드 상태·난독화 재현 여부 수집 +# 사용: python stc_cross_compare.py (리포지토리 루트에서 실행) +# 출력: stdout (문서 작성용 원자료) +import zipfile +import struct +import hashlib +import glob +import os +import sys +from collections import Counter + +ROOT = os.path.join(os.path.dirname(__file__), "..", "..", "..", "..") +KNOW = os.path.normpath(os.path.join(ROOT, "knowledge")) +# 이 스크립트는 resources/knowledge/original/원가계산/STmate/_scripts/ 에 위치 +# → knowledge 루트 = ../../../.. +KNOW = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "..", "..")) + +sys.stdout.reconfigure(encoding="utf-8") + + +def dbf_header(data: bytes): + """DBF 헤더 파싱: (버전바이트, 레코드수, 헤더길이, 레코드길이, 필드목록)""" + ver = data[0] + nrec = struct.unpack(" 필드시그니처 + for p in paths: + label = os.path.relpath(p, os.path.join(KNOW, "original", "실무문서")) + with open(p, "rb") as f: + raw = f.read() + sha = hashlib.sha256(raw).hexdigest()[:16] + z = zipfile.ZipFile(p) + names = z.namelist() + print(f"## {label}") + print(f"- size={len(raw):,}B sha256[:16]={sha}") + print(f"- 엔트리 {len(names)}개: {sorted(names)}") + for name in sorted(names): + if not name.upper().endswith(".DBF"): + continue + d = z.read(name) + ver, nrec, hlen, rlen, fields = dbf_header(d) + flags = rec_flags(d, nrec, hlen, rlen) + ent = entropy_sample(d, nrec, hlen, rlen) + flag_s = ", ".join( + f"{repr(k)}x{v}" for k, v in sorted(flags.items(), key=lambda x: -x[1]) + ) + sig = tuple(fields) + all_schemas[(label, name)] = sig + print( + f" - {name}: ver=0x{ver:02X} rec={nrec} rlen={rlen} " + f"fields={len(fields)} flags[{flag_s}] nonascii={ent}" + ) + # Ini 존재 여부 + ini = [n for n in names if n.lower().endswith((".ini", ".mem", ".smt"))] + print(f" - 비DBF: {ini}") + print() + + # 스키마 시그니처 그룹핑 (동일 DBF명 기준) + print("# DBF별 스키마 변형 요약") + by_dbf = {} + for (label, name), sig in all_schemas.items(): + by_dbf.setdefault(name, {}).setdefault(sig, []).append(label) + for name in sorted(by_dbf): + variants = by_dbf[name] + print(f"## {name}: 변형 {len(variants)}종") + for i, (sig, labels) in enumerate(variants.items(), 1): + print(f" - 변형{i} ({len(sig)}필드): {len(labels)}개 파일") + for lb in labels: + print(f" · {lb}") + + +if __name__ == "__main__": + main() diff --git a/resources/knowledge/technical_info/01_임도/05_원가정보/단수처리_규칙.md b/resources/knowledge/technical_info/01_임도/05_원가정보/단수처리_규칙.md new file mode 100644 index 00000000..55248925 --- /dev/null +++ b/resources/knowledge/technical_info/01_임도/05_원가정보/단수처리_규칙.md @@ -0,0 +1,85 @@ +--- +title: 단수처리 규칙 (절사·반올림·올림 — 단계별 위치) +category: 05_원가정보 +sources: + - doc: 실무 내역서 xlsx 수식층 관측 (5개 공사지 교차 — 로직 추출용, 값은 과거 관측) + version: 관측일 2026-08-15 + loc: original/실무문서/ (기번3·봉화·영월·계류보전·소광 xlsx), 추출 스크립트 = original/원가계산/STmate/_scripts/extract_rounding.py + - doc: 국고금관리법 제47조 (끝수 계산) — 보험료 등 끝수 근거 (간접 참조) + version: 현행 + loc: original/법률/국민건강보험법/ §107 경유 인용 +status: draft +last_updated: 2026-08-15 +--- + +관련 문서: [원가계산_체계](원가계산_체계.md) · [제비율](제비율.md) · [원가_출력변수_사전 §F](원가_출력변수_사전.md) · [자재단가_적용](자재단가_적용.md) + +> **★ 이 문서의 성격**: 실무 내역서(과거 데이터)에서 추출한 것은 **당시 금액·요율이 아니라 단수처리 로직**(어느 단계에서 어느 함수로, 어느 자릿수까지 처리하는가)이다. 로직은 설계연도와 무관하게 재사용 가능한 계산 규칙이므로 기술DB화 대상. **값(0.54 %·14.5 % 등)은 특정 공사지 관측**일 뿐 확정 기본값이 아니다([00_운영지침 ★근본원칙](../../../00_운영지침.md)). +> 관측 소스: 실무 xlsx는 STmate가 생성한 것으로 계산식이 셀 수식에 그대로 노출됨. **5개 공사지(기번3·봉화·영월 임도 + 계류보전 사방 + 소광) 교차** — 아래 규칙은 5건 전부 일치분만 규칙화, 단발 관측은 ⚠. + +## 1. 단수처리 함수 — 위치별 3종 (★핵심) + +STmate 내역서는 **계산 위치마다 다른 단수 함수**를 쓴다. 이 구분이 로직의 핵심. + +| 위치 | 함수 | 자릿수 | 의미 | 관측 (5공사지) | +|---|---|---|---|---| +| **설계내역서 행 금액** (수량×단가) | `ROUNDDOWN(·, 0)` | 원단위 | **절사** | 일치 (기번3 279건ㆍ봉화 216건ㆍ영월 등) | +| **제경비 각 항목** (밑수×율) | `ROUNDDOWN(·, 0)` | 원단위 | **절사**, 행별 | 일치 (간접노무비·산재·건보·안전관리비·일반관리비·이윤·부가세 등 전 항목) | +| **조달수수료** (관급×율) | `ROUNDDOWN(·, 0)` | 원단위 | **절사** | 일치 (기번3·봉화·영월) | +| **자원 집계표** (재료·노무·경비·중기 수량×단가) | `ROUND(·, 0)` | 원단위 | **반올림** | 일치 (재료비·노무비·경비·중기 집계표 전부) | +| **관급자재대 총액** | `ROUNDUP(·, -3)` | 천원 | **올림** | 일치 (기번3 69,850,000ㆍ봉화 143,555,000ㆍ영월 74,905,000) | + +> [구현] **같은 "수량×단가"라도 내역서 본체는 절사(ROUNDDOWN), 집계표는 반올림(ROUND)** — 위치로 함수가 갈린다. 견적 엔진은 단수 함수를 항목이 아니라 **출력 위치(표 종류)에 바인딩**해야 한다. 집계표는 원가에 직접 안 들어가는 검산·표시용이라 반올림, 원가 산입 값은 절사(발주처 유리)로 추정 — 근거 원문 대조 필요(⚠). + +## 2. 처리 시점·전달 값 + +- **행별 처리** (합계 후 아님): 제경비 각 항목이 개별 `ROUNDDOWN(밑수×율/100, 0)`로 절사된 뒤 상위 합계로 전달. 각 행이 이미 정수. +- **밑수는 앞 단계의 절사된 값**을 사용 (표시값 = 내부값, 별도 정밀도 미보유). 예: 간접노무비(절사 정수) → 노무비 합 → 산재보험료 밑수. +- 순서 의존: [원가계산_체계 §2](원가계산_체계.md) 밑수 체인과 동일. 각 단계 절사가 상위로 누적. + +## 3. 실측 산식 (기번3 — 로직 예시, 값은 과거 관측) + +> 셀 수식 원형. `밑수`·`율`은 참조 셀. 값은 2024년 기번3 관측 — 참조용. + +| 항목 | 실측 수식 (셀참조 정규화) | 로직 | +|---|---|---| +| 간접노무비 | `ROUNDDOWN(직접노무비 × 14.5/100, 0)` | 밑수×율 절사 | +| 산재보험료 | `ROUNDDOWN((직노+간노) × 3.56/100, 0)` | 노무비 밑수 절사 | +| 노인장기요양 | `ROUNDDOWN(건강보험료 × 12.95/100, 0)` | 건보료 밑수 절사 | +| 산업안전보건관리비 | `ROUNDDOWN(((재료비+직노)+(관급-?)/1.1)×율/100 + 5,349,000, 0)` | **기초액 먼저 더하고 절사** (2024 계상기준 기초액) | +| 일반관리비 | `ROUNDDOWN(순공사원가 × 6/100, 0)` | 절사 | +| 이윤 | `ROUNDDOWN((다.소계 − 재료비) × 15/100, 0) − 조정` | 절사 후 관급부가세 끝수 조정 | +| 부가가치세 | `ROUNDDOWN(공급가액 × 10/100, 0) + 면세조정` | 절사 + 면세품목 공제 | +| 조달수수료 | `ROUNDDOWN(관급자재대 × 0.54/100, 0)` | 절사 | +| 관급자재대 총액 | `ROUNDUP(자재대 + 조달수수료, −3)` | **천원 올림** | + +- **관급자재대 천원 올림 규명**: 기번3 = 자재대 69,474,220 + 조달수수료 375,160 = 69,849,380 → `ROUNDUP(−3)` = **69,850,000**. 앞서 관측된 "표시값 vs 합 +620원 차이"는 이 천원 올림이 원인 — **규명 완료** (미발견 항목 아님). + +## 4. 끝수 보정 흔적 (⚠ 단발·복잡 — 규칙화 보류) + +- 봉화·영월 이윤 행에 곁가지 수식: `ROUND((REF − ROUNDDOWN(REF, −REF))/1.1, 0)`, `ABS(REF − ROUNDDOWN(REF, −REF)) × IF(...)` — 관급자재대 부가세분 끝수를 이윤에서 역보정하는 흔적. 공사지별로 있고 없음. **로직 복잡·비일관 → 규칙화 보류**, 변경설계·관급 큰 사업에서 재관측 필요. +- 영월 조달수수료는 공종별 다건(`설계내역서` 10건) — 공구·자재군별 분리 계상 사례. + +## 5. 현행 근거 대조 (미확보 — 확인 필요) + +| 규칙 | 실무 관측 | 현행 근거 상태 | +|---|---|---| +| 원가 산입 값 원단위 절사 | ROUNDDOWN 일관 | ⚠ **원문 미확보** — 조달청 예정가격 작성기준·국가계약법 시행규칙의 원 단위 처리 규정 확인 필요 | +| 관급자재대 천원 올림 | ROUNDUP(−3) 일관 | ⚠ 미확보 — 관급 정산 단위 규정 확인 필요 | +| 집계표 반올림 | ROUND | 검산·표시용 추정 — 근거 불요 가능 | +| 보험료 끝수 | — | 국고금관리법 §47(끝수 계산 안 함) = 건보법 §107 경유. 원가계산 절사와 별개 체계 | + +> [구현] 단수 함수·자릿수·시점은 5공사지 실무 일관 관측이나 **현행 법령·기준 원문 대조는 미완**. 프로그램 기본값 확정 전 조달청 예정가격 작성기준 등 원문 확인(사용자 협의). 실무 일관성은 강한 실증이나 §00_운영지침상 현행 근거 우선. + +## 근거 + +| 항목 | 출처 | 위치 | +|---|---|---| +| 단수 함수 위치별 3종 | 실무 xlsx 수식 5공사지 교차 | extract_rounding.py 재현 | +| 관급자재대 천원올림 규명 | 기번3 xlsx 설계내역서·총괄 | ROUNDUP(−3) 실측 | +| 보험료 끝수 배경 | 국고금관리법 §47 | 국민건강보험법 §107 | + +## 실무 검증 참조 + +- [종합비교 01 — 원가·제비율](../../../original/실무문서/_종합비교/01_원가_제비율.md) (실무 요율 관측 — 값은 과거 참조) +- STC 포맷: 관급 계상·단가출처 = [STC_필드사전_핵심 §3](../../../original/원가계산/STmate/STC_필드사전_핵심.md) diff --git a/resources/knowledge/technical_info/01_임도/05_원가정보/원가_입력변수_사전.md b/resources/knowledge/technical_info/01_임도/05_원가정보/원가_입력변수_사전.md index ceb5c3b7..68cb53ba 100644 --- a/resources/knowledge/technical_info/01_임도/05_원가정보/원가_입력변수_사전.md +++ b/resources/knowledge/technical_info/01_임도/05_원가정보/원가_입력변수_사전.md @@ -146,6 +146,7 @@ last_updated: 2026-08-15 | rate_overhead | 일반관리비율 `[표]` (규모별) | 재+노+경 | 토목 8.0~6.5~4.5 % | D7 | | rate_profit | 이윤율 `[표]` (규모별) | 노+경+일반관리비 | 15~9 % | D8 | | rate_vat | 부가가치세율 | 총원가 | 10 % | D9 | +| rate_procurement_fee `[표]` (구매방식·금액별 추정) | 조달수수료율 | 관급 순자재대(government_material_base) | 실무 관측 0.54 % (과거) / **현행 원문 미확보 ⚠** | D9-1 | ## G8. 할증·보정 계수 — 품셈 개정 연동 (준정적) diff --git a/resources/knowledge/technical_info/01_임도/05_원가정보/원가_출력변수_사전.md b/resources/knowledge/technical_info/01_임도/05_원가정보/원가_출력변수_사전.md index 0597de61..2049e5e6 100644 --- a/resources/knowledge/technical_info/01_임도/05_원가정보/원가_출력변수_사전.md +++ b/resources/knowledge/technical_info/01_임도/05_원가정보/원가_출력변수_사전.md @@ -233,7 +233,8 @@ last_updated: 2026-08-15 | D7 | 일반관리비 | (재+노+경) × 율 | 필수 | | | D8 | 이윤 | (노무비+경비+일반관리비) × 율 | 필수 | | | D9 | 부가가치세 | 총원가 × 10% | 필수 | | -| D10 | 관급자재대 | 별도 표기 (총원가 밖) | 필수 | | +| D9-1 | 조달수수료 (procurement_fee) | 관급 순자재대(government_material_base) × 조달수수료율, **원단위 절사** | 높음 (관급 있을 때) | | +| D10 | 관급자재대 (government_material_total) | = ROUNDUP(순자재대 + 조달수수료, **천원**) 별도 표기 (총원가 밖) | 필수 | | | D11 | 품 할증 (작업시기·경사·이동거리·집단화 등 26계열) | 품 × 계수 | 조건부 — 실무 미적용 관측, [품셈_적용기준 §2](../04_수량분석정보/품셈_적용기준.md) | | | D12 | 자재 할증 — **모래는 용도별** (품셈 1-3-1): 콘크리트·포장용 잔골재 10/12 % · **노상·노반재료 6 %** · **관류·구조물기초 부설 4 %** (임도 주용도 = 후 2자). 그 밖 자갈(굵은골재) 3/5 %·노반 부순돌·자갈 4 %·흄관 3 %·떼 10 % 등 → 전표 [수량산출_일반 §3](../04_수량분석정보/수량산출_일반.md) | 수량 × 계수 | 높음 | | | D13 | 공구손료·잡자재 (주재료비 2~5%) | 비율행 | 높음 | | @@ -275,7 +276,7 @@ last_updated: 2026-08-15 | F2-2 단가산출 | 단위수량당 비용 = Σ pum[공종][자원] × 자원단가 → NC(노무)+GC(재료)+JC(기계·경비), TC = NC+GC+JC. 품 할증 = pum × surcharge_labor (적용 여부 D11) | G6 × (G3·G4·F2-1) + G8 | A4 단가산출근거 | [원가_기초데이터_원천 §2~3](원가_기초데이터_원천.md) 검증 산식 | | F2-3 일위대가 | 단가산출·자재·노임·기계경비 조합 + 비율행(공구손료 = 노무비 × rate_tool 등). TU = NU+GU+JU | F2-2 + G8 | A3 일위대가표 | 〃 (LinkIndex 조립 계층) | | F3-1 공종별 내역 | 공종 금액 = 수량(F1) × 일위대가 단가(F2-3), 공종 트리 집계 (실무 대분류 옵션) | F1 × F2 | A2 내역서 · B 전체 | [원가계산_체계](원가계산_체계.md) | -| F3-2 관급 분리 | 관급 플래그 자재 → 내역 단가 0, 관급자재대 별도 합산 (안전관리비 대상액 포함 여부 옵션) | G4 관급 플래그 | A16 | [자재단가_적용 §2](자재단가_적용.md) | +| F3-2 관급 분리 | 관급 플래그 자재 → 내역 단가 0, 순자재대(base) 합산 → 조달수수료(fee = base×율, 원절사) → 관급자재대(total = ROUNDUP(base+fee, 천원)). 안전관리비 대상액 포함 여부 옵션 | G4 관급 플래그 + G7 조달수수료율 | A16 · D9-1·D10 | [자재단가_적용 §2](자재단가_적용.md) · [단수처리_규칙](단수처리_규칙.md) | | F4 원가계산 체인 | 직노 → 간노(×rate_indirect_labor) → 노무비 → 산재·고용(×rate_sanjae·rate_goyong) / 직노 → 건보(×rate_health)·연금(×rate_pension) → 요양(건보료×rate_care) / (재료비+직노) × rate_safety(+기초액) → 경비 합계 → 일반관리비(×rate_overhead) → 이윤(×rate_profit) → 총원가 → 부가세(×rate_vat) — **순서 의존** | F3 집계 + G7 | A1 원가계산서 · D1~D10 | [원가계산_체계 §2](원가계산_체계.md) 밑수 정의표 (견적 엔진 핵심) | | F5 목록·집계 역산 | 내역 전체에서 자원 사용분 역집계: 직종별 인수 합 → A6, 자재별 수량 합 → A7·A13, 중기 시간 합 → A5, 원천별 단가 병기 → A9, 기초값 스탬프 → A10, 비목 합계 → A11 | F1~F4 결과 | A6~A11 · A13 · A15 | [노임단가_적용 §4](노임단가_적용.md)·[자재단가_적용 §6](자재단가_적용.md) 연결 다이어그램 | diff --git a/resources/knowledge/technical_info/01_임도/05_원가정보/원가계산_체계.md b/resources/knowledge/technical_info/01_임도/05_원가정보/원가계산_체계.md index 8d209378..dadf17fa 100644 --- a/resources/knowledge/technical_info/01_임도/05_원가정보/원가계산_체계.md +++ b/resources/knowledge/technical_info/01_임도/05_원가정보/원가계산_체계.md @@ -23,6 +23,10 @@ last_updated: 2026-08-14 │ ├ 일반관리비 = (재료비+노무비+경비) × 율 │ └ 이윤 = (노무비+경비+일반관리비) × 율 ※ 재료비 제외 └ 부가가치세 = 총원가 × 10 % + +※ 관급자재대 (별도 표기 — 총원가 밖) + = ROUNDUP( Σ관급자재 순자재대(government_material_base) + 조달수수료(procurement_fee), 천원 ) + 조달수수료 = ROUNDDOWN( government_material_base × 조달수수료율, 원 ) ``` ## 2. 비목별 산정 방법 (밑수 정의 — 핵심) @@ -45,12 +49,16 @@ last_updated: 2026-08-14 | 일반관리비 | **(재+노+경)** × 율 | 조달청 제비율 (규모별) | | 이윤 | **(노무비+경비+일반관리비)** × 율 | 조달청 제비율 | | 부가가치세 | **총원가** × 10 % | 부가가치세법 §30 | +| 조달수수료 | **관급자재 순자재대(government_material_base)** × 율 | 조달청 위탁구매 수수료 요율 — ⚠ 현행 원문 미확보. 실무 관측 0.54 % (과거) | +| 관급자재대(별도표기) | **순자재대 + 조달수수료**를 천원 올림 | 총원가 밖 별도 계상 | + +> [구현] **조달수수료·관급자재대 순환 정의 방지**: 밑수를 3변수로 분리 — `government_material_base`(수수료 계산 전 순수 관급 자재대) → `procurement_fee`(= base × 율) → `government_material_total`(= ROUNDUP(base + fee, 천원)). "밑수 = 관급자재대"로 뭉뚱그리면 total이 fee를 이미 포함하는지 모호. 단수처리 = [단수처리_규칙 §1](단수처리_규칙.md) (수수료 원단위 절사·관급자재대 천원 올림). > **2026-08-14 정정 (요율 출처 2건)** > - 국민연금: 종전 "국민연금법 §88③" 표기 → **현행 §88③은 "기준소득월액의 1천분의 65"(6.5 %)**(2025.4.2 개정, 2026.1.1 시행). 2026년 실제 적용 **4.75 %**의 근거는 본칙이 아니라 **부칙(법률 제20903호, 2025.4.2) 제4조① 제1호 "2026년은 1만분의 475"** 특례. 2032년까지 단계 인상 → [제비율 §2 연도별 스케줄](제비율.md). > - 노인장기요양: 종전 "시행령 §4" 표기 → **시행령 §4는 "장기요양보험료율은 100만분의 9,448"**(소득 대비 요율)로, "건강보험료 × 율" 구조의 근거가 아님. **밑수를 건강보험료액으로 삼는 근거는 법 §9①** — 건보법에 따라 산정한 보험료액에 "건강보험료율 대비 장기요양보험료율의 비율(소수점 다섯째자리 반올림)"을 곱한다고 규정. 시행령 §4는 그 비율 계산의 분자값 출처. -> [구현] 견적 엔진 핵심 = 밑수 정의. 순서 의존: 직노 → 간노 → 노무비 → 산재ㆍ고용 / 직노 → 건보 → 요양 / 재료비+직노+도급자설치 관급금액 → 안전관리비 → 경비 합계 → 일반관리비 → 이윤 → 총원가 → 부가세. 요율은 **연도별 파라미터 테이블**로 분리 (매년 개정) → [제비율](제비율.md). +> [구현] 견적 엔진 핵심 = 밑수 정의. 순서 의존: 직노 → 간노 → 노무비 → 산재ㆍ고용 / 직노 → 건보 → 요양 / 재료비+직노+도급자설치 관급금액 → 안전관리비 → 경비 합계 → 일반관리비 → 이윤 → 총원가 → 부가세. 요율은 **연도별 파라미터 테이블**로 분리 (매년 개정) → [제비율](제비율.md). 각 단계 **단수처리(행별 원단위 절사 등)** = [단수처리_규칙](단수처리_규칙.md) (실무 5공사지 관측 로직). ## 3. 적용 조건 diff --git a/resources/knowledge/technical_info/01_임도/05_원가정보/자재단가_적용.md b/resources/knowledge/technical_info/01_임도/05_원가정보/자재단가_적용.md index b044c5bd..958d2c1d 100644 --- a/resources/knowledge/technical_info/01_임도/05_원가정보/자재단가_적용.md +++ b/resources/knowledge/technical_info/01_임도/05_원가정보/자재단가_적용.md @@ -12,7 +12,9 @@ status: verified last_updated: 2026-08-15 --- -관련 문서: [원가_기초데이터_원천](원가_기초데이터_원천.md) · [원가계산_체계](원가계산_체계.md) · [수량산출_일반](../04_수량분석정보/수량산출_일반.md) · [미결 No.18](../../../03_미결_및_확인사항.md) +관련 문서: [원가_기초데이터_원천](원가_기초데이터_원천.md) · [원가계산_체계](원가계산_체계.md) · [단수처리_규칙](단수처리_규칙.md) · [수량산출_일반](../04_수량분석정보/수량산출_일반.md) · [미결 No.18](../../../03_미결_및_확인사항.md) · [STC 필드사전(COSTN 6슬롯)](../../../original/원가계산/STmate/STC_필드사전_핵심.md) + +> ⚠ §3-1 "적용단가 채택 규칙"은 **미확정 후보**(STC 저장구조 관측 기반, 선택 알고리즘 미검증). 문서 status: verified는 §1~6 원문 검증분 기준이며 §3-1은 검증 대상 밖(별도 검증 전 로직 근거로 확정 사용 금지). ## 1. 단가 채택의 법적 순서 @@ -41,6 +43,28 @@ last_updated: 2026-08-15 > [구현] 자재 데이터셋 스키마 요건: 품명·규격·단위 + 가격 슬롯(원천별 단가+출처 표기) + 대표단가 + 관급/사급 플래그 + 물품식별번호 + **기준일 스탬프**. 산출물 = 재료비목록표 + 자재단가대비표. +### 3-1. 적용단가 채택 규칙 — 후보 (⚠ 미확정, 알고리즘 아직 확인 안 됨) + +> STC의 COSTN 테이블은 **출처 6슬롯(AMT_11~AMT_61) + 채택 인덱스(PG_1)** 저장 구조를 갖는다([STC_필드사전_핵심 §3-2](../../../original/원가계산/STmate/STC_필드사전_핵심.md)). 이는 **저장 구조 해석**일 뿐 **선택 알고리즘(자동 최저가·출처 우선순위·수동 선택 중 무엇인지)은 미확정**. 아래는 규칙 후보와 그 근거일 뿐, 확정 규칙이 아니다. + +**관측 (기번3 COSTN 186건, PG_1 = 채택 출처 인덱스)**: + +| 자원 접두 | PG_1 분포 | 해석 후보 | +|---|---|---| +| M (자재) | 0×17 · 1×15 · 2×2 · 3×5 · 5×7 | **자재만 출처 선택 존재** (1=물가정보 2=물가자료 3=적산 5=견적 계열, 0=미지정/관급/기본?) | +| L (노무) | 0×12 | 단일 출처(건협) → 선택 불요 | +| S (경비)·X (중기) | 전부 0 | 품셈 산식·단일 → 선택 불요 | +| B·D (일위대가·산근) | 전부 0 | 파생물 (조립 결과) | + +> [해석] **채택 인덱스는 자재(M)에만 유의미**, 노무·중기·일위대가는 단일 원천이라 선택 없음(0). 이는 "출처 선택은 복수 시세가 존재하는 자재에 국한된다"는 방향을 지지. 단 다음은 **모두 미확정** — 통계만으로 단정 금지: +> - PG_1=0의 정확한 의미 (관급? 적용단가 기본? 미지정?) +> - 자동 채택인지 **사용자 수동 선택**인지 (STmate 조작 결과일 수 있음) +> - 자재 종류별 출처 우선순위 존재 여부 +> - 값 없는 슬롯 건너뛰기만 규칙인지, 최저가·최신값·특정기관 우선인지 +> - 적용단가 슬롯이 타 슬롯 복사인지 독립 입력인지 +> +> **검증 방법** (규칙 후보 → 확정): ① COSTN 6슬롯 값 vs PG_1 채택값 대조(최저가 여부 검산) ② 자재단가대비표의 채택 표기와 교차 ③ INITIAL 메타·전후 비교 파일로 인과 확인 ④ STmate 실기(단가 수동 변경 → PG_1 변화 관측). 법적 순서(§1 국가계약법 §7)는 "거래실례→견적" 우선이나, 실무 프로그램의 실제 채택 동작은 이 검증 전까지 미확정. + ## 4. 수량 쪽에서 붙는 계수 (단가와 혼동 금지) - **재료 할증**: 수량에 곱함 — **용도별 구분 필수** (잔골재 10/12 %ㆍ굵은골재 3/5 %ㆍ노반 모래 6 %ㆍ관류·기초 부설 모래 4 % 등, 2026-08-15 정정: 구 "모래 10%" 표기는 콘크리트용 잔골재 한정) — [수량산출_일반](../04_수량분석정보/수량산출_일반.md) 할증표. diff --git a/resources/knowledge/technical_info/01_임도/05_원가정보/제비율.md b/resources/knowledge/technical_info/01_임도/05_원가정보/제비율.md index 43ab2f46..597989f7 100644 --- a/resources/knowledge/technical_info/01_임도/05_원가정보/제비율.md +++ b/resources/knowledge/technical_info/01_임도/05_원가정보/제비율.md @@ -53,6 +53,7 @@ last_updated: 2026-08-14 | 하도급대금지급보증수수료 | 직접공사비 | 규모별 **0.068~0.084 %** | — | 적용제외: 전문공사. **2026-08-14 추가** | | 건설기계대여대금 지급보증액 | — | 토목(토건) **0.4 %** | — | **2026-08-14 추가** | | 공사이행보증수수료 | 직접공사비 구간 산식 × 공기 | 70억 미만 [직공비×0.0108 %]×공기(년) 등 5구간 | — | 지방계약법 §51① 대상(추정 300억 이상 등) — **임도 통상 비대상**. **2026-08-14 추가** | +| 조달수수료 | 관급자재 순자재대(government_material_base) | 실무 관측 **0.54 %** (과거 — 기번3·봉화·영월 일치) / **현행 원문 미확보 ⚠** | — | 조달청 위탁구매(중앙조달) 수수료. **총원가 밖 관급자재대에 별도 계상** — 원가 제비율 체인 아님. 산식·단수 = [단수처리_규칙 §3](단수처리_규칙.md). **2026-08-15 추가** | ## 2. 항목별 현행 근거 상세 @@ -97,6 +98,7 @@ last_updated: 2026-08-14 | ~~고용보험 등급 요율~~ | 조달청 등급표 1.01~1.57 % 확보 (xlsx 재추출, 원문 md 보완) | 해소 (2026-08-14) | | ~~국민연금 4.5 % 오기~~ | 4.75 %로 정정 — 국민연금법 부칙(2025.4.2) §4 + 조달청 표 이중 확인. **교훈: 법률 본문만 보지 말고 부칙 특례ㆍ조달청 표 교차 대조** | 해소 (2026-08-14) | | 환경보전비 임도 공사종류 분류 | 도로(0.9 %) vs 그 밖의 토목(0.8 %) — 값 선정형, 개발 단계 사용자 협의 | 이관 | +| 조달수수료율·대상 조건 | 조달청 위탁구매 수수료 요율표 (구매 방식·금액별). 실무 0.54 % 관측만 있고 현행 요율표·적용 조건(중앙조달 대상 여부) 미확보 | **수집 필요** (2026-08-15) | | ~~임도 사업 산재 업종 분류~~ | 건설업 확정 (조달청 표+별표5+실무 실증) | 해소 (2026-08-12) | | ~~안전관리비 공사종류(임도=토목)~~ | 계상기준 별표5 확인 완료 — 토목 공작물 설치ㆍ토지 조성ㆍ개량 | 해소 (2026-08-12) | diff --git a/resources/knowledge/technical_info/_index.md b/resources/knowledge/technical_info/_index.md index d3718075..1fa0e56d 100644 --- a/resources/knowledge/technical_info/_index.md +++ b/resources/knowledge/technical_info/_index.md @@ -112,6 +112,7 @@ | 01_임도/05_원가정보/기계경비_산정.md | 기계경비 구성(손료+운전경비+수송비), 유가·환율 연결점, 암석작업 손료 보정, 시공능력 Q식 | 건설품셈 공통 8장, ECOS·오피넷 | draft | | 01_임도/05_원가정보/원가_출력변수_사전.md | 임도 내역서 **출력변수 사전**(문서 17·공종 79·기초단가·원가 14) + §F 계산 로직(입력 G → 출력 A/B/D 5단계 파이프라인) — 채택 칸 = 사용자 결정용 | 별표2·산림품셈·미결 No.17·실무 관측 집약 | draft | | 01_임도/05_원가정보/원가_입력변수_사전.md | 외부 수집 입력변수 사전 G1~G8(환율 5·유가 2·노임·자재·중기 5필드·품·제비율 11·계수) — data_cost_input_value 파일 설계 기초, 변수별 총람 연결 | 원가 문서 5건 집약 | draft | +| 01_임도/05_원가정보/단수처리_규칙.md | 단수처리 위치별 3함수(내역서·제경비 ROUNDDOWN 원절사 / 집계표 ROUND 반올림 / 관급자재대 ROUNDUP 천원올림), 행별 시점, 조달수수료 산식 — 실무 5공사지 xlsx 수식 교차 추출 (값은 과거 관측, 현행 근거 대조 미완) | 실무 xlsx 수식층 관측 (2026-08-15) | draft | ## 02_사방댐 — 사방댐 설계자동화 기술문서 @@ -158,3 +159,4 @@ |---|---|---| | KS_필요목록.md | 작성 중 KS 원문이 필요해진 규격 목록 (사용자 확보 대기) | 필요 시 생성 | | [03_미결_및_확인사항.md](../03_미결_및_확인사항.md) | 원문 근거 부족·용어 불명 항목 목록. 임도·사방 공용 — 항목에 [임도]/[사방] 구분 | 운영 중 | +| [original/원가계산/STmate/](../original/원가계산/STmate/) | STC(STmate 프로젝트 파일) import/export 포맷 명세 — 컨테이너·필드사전·난독화·교차비교·SIxMemo·INITIAL·왕복검증 9문서. 계산 로직(05_원가정보)과 분리된 **포맷 트랙**. STC=발주처 제출 최종물, 입출력 필수(사용자 확정 2026-08-15) | draft |