diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/00_분석_요약과_읽는법.md b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/00_분석_요약과_읽는법.md index e095c61d..69d51a99 100644 --- a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/00_분석_요약과_읽는법.md +++ b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/00_분석_요약과_읽는법.md @@ -26,6 +26,7 @@ | 17 단가조립 검증 | **일위대가·중기 시간당 사용료 구조와 손료율 실측** | (저장소 파일) | | 18 누락 계산로직 점검 | **사슬에 빠진 칸 찾기** — 노임 환산식·단가산출 Q식·설정 스냅샷·집계표 반올림 | (저장소 파일) | | 19 진행률 장부 | **어디까지 봤고 무엇이 남았나** — 원천별 실측 진행률, 차단점 현황 | (저장소 파일) | +| 20 설정파일과 보고서 카탈로그 | **`Start8x.Ini`·`SET_REP`** — 간접비 코드 사전 301~370, 서식 75종 | (저장소 파일) | > **정본은 저장소 파일이다** — `resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/`. > 위 Orca 링크는 보기용이며, 문서를 지식DB 자리로 옮기면서 주소가 한 번 바뀌었다. @@ -70,6 +71,9 @@ | 계산 설정 스냅샷 | 「화면 없이 재현 불가」 | **출력 XLSX `〓 INITIAL 〓` 에 있음** | 18번 §2.3 | | 집계표 행 금액 | 서술만 | **A** — 사사오입 100%. 호표 성분 소계(절사)와 다른 자리 | 18번 §2.4 | | 변경설계 간접비 모드 | 「모드가 여럿」까지만 | **A 실증** — 건강·장기요양·연금은 **당초액 유지**, 나머지는 재계산 | 19번 §6, 08번 §2 | +| 간접비 항목 순서·코드 | 화면 텍스트 복원 | **A** — `KAN_ORD_1/2` 코드 목록, 301~370 사전 | 20번 §2.1·§2.2 | +| 후보 슬롯 이름 | 「설정에 있을 것」 | **설치본마다 다름을 실물 확인** (유통 물가 ↔ 견적단가) | 20번 §2.3 | +| 보고서 서식 | 30종 관찰 | **카탈로그 75종** — 수공양식·표준시장 서식 존재 | 20번 §3 | 분석일: 2026-09-13 대상: `C:\경영정보(주)` diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/20_설정파일과_보고서_카탈로그.md b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/20_설정파일과_보고서_카탈로그.md new file mode 100644 index 00000000..6e9cbe50 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/20_설정파일과_보고서_카탈로그.md @@ -0,0 +1,152 @@ +# 설정파일과 보고서 카탈로그 — 마지막으로 남아 있던 자리 + +점검일: 2026-09-13 +계기: 「추가로 더 있는지」 확인. **`System` 폴더만 보고 `STmate 자료`·`STmate 압축자료` 폴더를 통째로 안 봤다.** +재현 스크립트: `40_스크립트/ini_and_report_catalog.py` + +## 1. 안 보고 있던 자리 + +`C:\경영정보(주)` 아래에는 폴더가 넷이다. + +| 폴더 | 내용 | 그동안 | +|---|---|---| +| `System` | 설치 파일 186개 | ✅ 전수 | +| `STmate 자료\설계자료\실습(맛보기)` | 맛보기 프로젝트를 **푼 것** 23개 | ⚠ **STC와 같다고 넘겼음** | +| `STmate 압축자료` | `실습(맛보기).STC` | ✅ | +| `(TMP)` | 비어 있음 | — | + +DBF는 STC와 같지만 **STC에 없는 파일 셋이 있었다** — `Start8x.Ini` · `STini.MEM` · `QCODE.SMT`. + +## 2. `Start8x.Ini` — 설치본 전역 설정 + +### 2.1 ⭐ 간접비 계산 순서가 코드 목록으로 저장돼 있다 + +```ini +KAN_ORD_1=;301;302;303;310;304;305;306;312;313;321;307;308;309;311;361;362;363;364;365;366;367;368;369;370; +KAN_ORD_2=;351;301;302;303;310;304;305;306;312;313;331;332;333;334;335;336;337;338;307;308;309;311;361;…;370; +KAN_TYP=0 +``` + +**두 목록의 차이가 12번 §7의 「기타경비: 일반=묶음 1개 / 수공=세부 8개」와 정확히 맞는다.** + +- `KAN_ORD_1` (24개) — `313` 다음에 **`321` 하나** +- `KAN_ORD_2` (32개) — 같은 자리에 **`331`~`338` 여덟 개**, 그리고 맨 앞에 `351` 추가 + +⇒ **`KAN_ORD_1` = 일반형식(`T`) 순서, `KAN_ORD_2` = 수공형식(`S`) 순서**이고 `KAN_TYP`가 고른다. + +### 2.2 코드 → 항목 사전 (봉화 2024 출력과 대조해 확정) + +`KAN_ORD_1` 순서대로 놓고, 값이 0인 항목은 출력에서 빠진다는 규칙으로 봉화 `공사원가계산서`와 맞추면 하나도 어긋나지 않는다. + +| 순서 | 코드 | 항목 | 봉화에 출력됨 | +|---:|---|---|:--:| +| 1 | `301` | 간접노무비 | ✅ | +| 2 | `302` | 산재보험료 | ✅ | +| 3 | `303` | 고용보험료 | ✅ | +| 4 | `310` | 건강보험료 | ✅ | +| 5 | `304` | 노인장기요양보험료 | ✅ | +| 6 | `305` | 연금보험료 | ✅ | +| 7 | `306` | 퇴직공제부금비 | ✗ (0) | +| 8 | `312` | 산업안전보건관리비 | ✅ | +| 9 | `313` | 안전·품질관리비 (별도내역) | ✗ (0) | +| 10 | `321` | **기타경비** (일반형식 묶음) | ✅ | +| 11 | `307` | 공사이행보증수수료 | ✗ (0) | +| 12 | `308` | 하도급대금지급보증수수료 | ✗ (0) | +| 13 | `309` | 환경보전비 | ✅ | +| 14 | `311` | 건설기계대여금 지급보증 | ✅ | +| 15~24 | `361`~`370` | 후단 공통 (일반관리비·이윤·부가세·도급·관급 계열) | — | +| — | `331`~`338` | **수공형식 세부 경비 8개** | 표본 없음 | +| — | `351` | 수공형식 선두 항목 | 표본 없음 | + +출력 순서가 **정확히 이 순서**다. 등급 **A**. + +⇒ **재구현은 항목을 이름이 아니라 코드로 다루고, 순서를 목록 데이터로 둘 것.** 형식을 바꾸면 목록을 갈아 끼우면 된다. `if 항목명 == "기타경비"` 같은 분기를 심으면 수공형식에서 깨진다. + +### 2.3 ⚠ 후보 슬롯 이름이 설치본마다 다르다 + +| | 슬롯1 | 슬롯2 | 슬롯3 | 슬롯4 | **슬롯5** | 슬롯6 | +|---|---|---|---|---|---|---| +| 설치 기본 (`Start8x.Ini`) | 가격 정보 | 물가 자료 | 물가 정보 | 거래 가격 | **유통 물가** | 적용 단가 | +| 실무 프로젝트 (`INITIAL`) | 조달가격 | 물가자료 | 물가정보 | 거래가격 | **견적단가** | 적용 단가 | + +**다섯 번째가 통째로 다르다.** 07번의 「슬롯 번호에 가격지 이름을 코드로 고정하지 말라」가 이보다 분명할 수 없다. 축약도 다르다(`가.정/물.자/물.정/거.래/유.통` ↔ `조달/물자/물정/거래/견적`). + +`JEMNM=123456`이 표시 순서다. + +### 2.4 코드 종류 사전 + +```ini +COD_FMT_1=노무 COD_FMT_2=자재 COD_FMT_3=경비 COD_FMT_4=대가 +COD_FMT_5=중기 COD_FMT_6=산근 COD_FMT_7=기타 COD_FMT_8=실적 +``` + +설계변경증감대비표 비고 칸의 `산근 4호표` · `대가 1호표` · `M00760`이 이 사전을 쓴다. **`대가`=일위대가(`B`), `산근`=단가산출근거(`D`)**다. + +`BCDNM=10 · DCDNM=14 · LCDNM=9 · MCDNM=13 · PCDNM=11 · SCDNM=15 · XCDNM=14`는 코드 종류별 기본값이며 의미는 아직 미확정(B등급). + +### 2.5 `[EQUIPMENT]` — 노임 환산식과 환율의 설치 기본값 + +```ini +RXXNM=1/8 * 16/12 * 25/20 ← 18번 §2.1의 그 식 +RXTNM=1/8*16/12*25/20 +CONLD=L00007L00008L00009 ← 적용 직종 (설치 기본) +EXLNM1~4 / EXHNM1~4 = 1088 · 1289 · 1134.5 · 1134.5 ← 달러 구간별 환율 +EXEUR1/2=1000 EXYEN1/2=1000 +``` + +프로젝트의 `COND_`는 `L00008L00009L00010`으로 **설치 기본과 다르다** — 프로젝트마다 적용 직종을 바꿀 수 있다. + +### 2.6 그 밖 + +| 키 | 값 | 뜻 | +|---|---|---| +| `DISP_EX` | `제외금액` | 16번 §4.2의 `C*` 구역 이름이 여기서 온다 | +| `DISP_TOT` | `총 계` | | +| `UPDNCAP` | `상단:당초 , 하단:변경` | 변경설계 표시 | +| `BMKNM` | `TLMS` | 비목 코드 순서 (총계·노무·재료·경비) | +| `[NAG_HAL]` | `ST_MHAL` · `EQ_LHAL` · `EQ_MHAL` · `EQ_SHAL` = 0 | **할증률 설정 자리** — 표본은 전부 0 | +| `LMGNM=5.0` · `MKRNM=4.0` · `TMGNM=0.0` | | 미확정 (B) | + +## 3. `SET_REP.DBF` — 보고서 서식 75종 카탈로그 + +우리 표본의 XLSX에는 **30종**이 나왔는데, 카탈로그에는 **75종**이 있다. 45종은 표본에 안 나온 것뿐이다. + +| 갈래 | 서식 | +|---|---| +| 기성 | 기성부분총괄내역서 · 기성내역서 · 기성내역서(사정) · 기성내역서(기성율) · 기성검사조서(을/병) · 기성부분수량조서 | +| 견적·계약 | 견적내역서 · 견적단가대비표 · 계약,실행내역서 | +| 준공 | 준공조서(을/병) | +| 변경 | 변경내역서 · 변경내역서(변경율) · 변경총괄내역서(구.시도/시도/구도) | +| 계획 | 장비투입계획 · 인력투입계획 · 자재사용계획 | +| 실행예산 | 실행예산서Ⅰ · Ⅱ | +| 양식 변형 | 종양식 · 도공양식 · 굴착 · 구.시도/시도/구도 · **수공양식** | +| 기타 | 간이공사비 산출명세서 · 총괄집계표 · 표준시장/시장시공 목록표·집계표 | + +각 행은 `INDX`(서식번호) · `NAME` · `HEADTITLE` · 열 이름 11개와 폭을 가진다. **보고서 서식이 코드가 아니라 데이터**라는 00번의 관찰이 여기서 확인된다. + +⚠ **`일위대가표(수공양식)`(`0303`)과 `표준시장/시장시공` 계열이 카탈로그에 있다** — 수공·실적 형식이 실제로 지원되며 서식도 따로 있다. 우리 표본에 그 형식 프로젝트가 없을 뿐이다. + +새 **계산** 규칙은 없다. 같은 값을 다른 묶음·다른 열로 내는 출력 변형이다. + +## 4. `COSTN.SMT` · `QCODE.SMT` · `STini.MEM` + +| 파일 | 크기 | 상태 | +|---|---:|---| +| `COSTN.SMT` | 10,177 B | 머리 `SIxMemo`, **본문에 읽히는 문자열 없음 — 암호화/압축** | +| `PRJLST.SMT` | 2,291 B | 같음 | +| `QCODE.SMT` | 2,291 B | 같음 | +| `STini.MEM` | 512 B | Delphi `TMemoryStream` 덤프로 보임, 미해독 | + +07번이 기대한 `&M00034M&` 같은 참조 토큰은 **평문으로 읽히지 않는다.** 다만 같은 정보가 출력 XLSX의 `일위대가표`·`단가산출근거`에 평문으로 있으므로(17번·18번) **의존 그래프 복원에 지장은 없다.** + +## 5. 이번 점검이 바꾸는 것 + +| 항목 | 이전 | 지금 | +|---|---|---| +| 간접비 항목 순서 | 화면 텍스트로 복원 | ✅ **코드 목록으로 확정**, 형식별 두 벌 | +| 간접비 항목 코드 | 없었음 | ✅ **301~370 사전**, 봉화 출력과 무결 대조 | +| 후보 슬롯 이름 | 「설정에 있을 것」 | ✅ **설치본마다 다름을 실물로 확인** | +| 코드 종류 사전 | 추정 | ✅ `COD_FMT_1~8` | +| 보고서 서식 | 30종 봄 | ✅ **카탈로그 75종** 전체 | +| `*.SMT` 메모 | 「토큰이 있을 것」 | ⛔ **암호화 — 다만 출력에 같은 정보 있음** | +| 할증률 설정 자리 | 없었음 | ◐ `[NAG_HAL]` 발견, 표본은 전부 0 | diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/40_스크립트/ini_and_report_catalog.py b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/40_스크립트/ini_and_report_catalog.py new file mode 100644 index 00000000..61b33b99 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/40_스크립트/ini_and_report_catalog.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +"""Start8x.Ini 설정과 SET_REP 보고서 카탈로그를 뽑는다. 원본은 읽기만.""" +import sys, io, struct, pathlib, re +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace") +D = pathlib.Path(r"C:\경영정보(주)\STmate 자료\설계자료\실습(맛보기)") + +print("### Start8x.Ini — 절별 키") +txt = (D/"Start8x.Ini").read_bytes().decode("cp949","replace") +sec="(머리)" +for line in txt.splitlines(): + line=line.strip() + if not line: continue + if line.startswith("["): sec=line; print("\n"+sec); continue + print(" %s" % line[:110]) + +print("\n\n### 간접비 순서 코드") +for k in ("KAN_ORD_1","KAN_ORD_2"): + m=re.search(k+r"=(.*)", txt) + if m: + codes=[c for c in m.group(1).split(";") if c.strip()] + print(" %s %d개: %s" % (k, len(codes), ", ".join(codes))) +a=set(re.search(r"KAN_ORD_1=(.*)",txt).group(1).split(";")) +b=set(re.search(r"KAN_ORD_2=(.*)",txt).group(1).split(";")) +print(" 1에만: %s" % sorted(x for x in a-b if x.strip())) +print(" 2에만: %s" % sorted(x for x in b-a if x.strip())) + +print("\n\n### SET_REP.DBF — 보고서 서식 카탈로그") +b2=(D/"SET_REP.DBF").read_bytes(); nrec,hlen,rlen=struct.unpack_from("