knowledge(경쟁사): Start8x.Ini·SET_REP 점검 — 간접비 코드 사전과 서식 75종
System 폴더만 보고 STmate 자료 폴더를 STC 와 같다고 넘겼던 것이 구멍이었음. 그 폴더에 STC 에 없는 Start8x.Ini·STini.MEM·QCODE.SMT 가 있었음. Start8x.Ini 에서 나온 것 - 간접비 계산 순서가 KAN_ORD_1/KAN_ORD_2 코드 목록으로 저장돼 있음. 두 목록의 차이가 321(기타경비 묶음 1개) 대 331~338(세부 경비 8개) 이라 12번의 「일반형식 대 수공형식」 구분과 정확히 맞음. KAN_TYP 가 고름 - 코드 사전 301~370 을 봉화 출력 순서와 대조해 확정. 값이 0 인 항목은 출력에서 빠진다는 규칙으로 하나도 어긋나지 않음. 등급 A - ⚠ 후보 슬롯 이름이 설치본마다 다름. 설치 기본은 다섯째가 「유통 물가」인데 실무 프로젝트는 「견적단가」임. 슬롯 번호에 기관명을 박으면 안 되는 근거 - COD_FMT_1~8 코드 종류 사전 (대가=일위대가 B, 산근=단가산출 D) - [EQUIPMENT] 에 노임 환산식·환율·적용 직종의 설치 기본값 - [NAG_HAL] 할증률 설정 자리 발견 (표본은 전부 0) - DISP_EX=제외금액 — C* 구역 이름의 출처 SET_REP.DBF 는 보고서 서식 75종 카탈로그. 표본 XLSX 에 나온 30종 말고 기성·견적·계약·준공·계획·실행예산 등 45종이 더 있음. 새 계산은 아니고 출력 변형. 수공양식·표준시장 서식이 카탈로그에 있어 그 형식이 실제로 지원됨을 확인 COSTN.SMT·QCODE.SMT·PRJLST.SMT 는 본문에 읽히는 문자열이 없어 암호화로 판정. 다만 같은 정보가 출력 XLSX 에 평문으로 있어 의존 그래프 복원에는 지장 없음 문서 20 신규, 스크립트 추가. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Prk9BCHG1EMAywk9k8wegA
This commit is contained in:
@@ -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:\경영정보(주)`
|
||||
|
||||
@@ -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 |
|
||||
@@ -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("<IHH",b2,4)
|
||||
f=[];o=32
|
||||
while b2[o]!=0x0D: f.append((b2[o:o+11].rstrip(b"\0").decode("cp949","replace"),b2[o+16]));o+=32
|
||||
n=0
|
||||
for i in range(nrec):
|
||||
r=b2[hlen+i*rlen:hlen+(i+1)*rlen]; v=[];c=1
|
||||
for nm,ln in f: v.append(r[c:c+ln].decode("cp949","replace").strip()); c+=ln
|
||||
if v[1]: n+=1; print(" %-5s %-24s %s" % (v[0], v[1][:24], v[2][:30]))
|
||||
print(" → 서식 %d종" % n)
|
||||
@@ -45,6 +45,7 @@
|
||||
| 17 | **단가조립 검증** — 일위대가·중기 시간당 사용료 구조, 손료율 실측 |
|
||||
| 18 | **누락 계산로직 점검** — 노임 환산식·단가산출 Q식·설정 스냅샷 |
|
||||
| 19 | **진행률 장부** — 어디까지 봤고 무엇이 남았나 |
|
||||
| 20 | **설정파일과 보고서 카탈로그** — 간접비 코드 사전, 서식 75종 |
|
||||
|
||||
## 확정된 굵직한 것
|
||||
|
||||
|
||||
Reference in New Issue
Block a user