knowledge(경쟁사): SMT 판정 정정 · 지식DB 트랙 셋 통합 · 암호화 성격

최종 확인에서 내 오류 하나와 큰 구멍 하나가 나옴.

정정
- *.SMT 를 암호화라 적은 것은 틀렸음. 앞 4KB 만 보고 필터를 세게 걸어
  놓쳤고 본문은 0x200 부터임. COSTN.SMT 276개·PRJLST.SMT 153개 문자열이
  평문으로 읽힘. 암호화는 BDQTY·SYSINFO 둘뿐이라는 판정은 그대로 유효

구멍 — 지식DB 에 STmate 트랙이 셋이고 서로 몰랐음
- technical_info/01_임도/05_원가정보 (계산 로직 10문서, 2026-08)
- original/원가계산/STmate (STC 포맷 8문서, 2026-08-15)
- original/경쟁사 프로그램/STmate 분석 (이번 것)
- 단수처리 규칙·INITIAL 시트·SMT 문법·BDQTY 난독화는 이미 있던 것을
  다시 한 셈. 다만 실행모듈 정적분석·폼 복원·골든셋 회귀·변경설계 모드·
  단가산출 Q식은 이번에만 나온 것

PRJLST.SMT — 가장 중요한 발견
- 프로젝트별 원가계산 설정이 INI 평문으로 들어 있음. 차수별 섹션
- 요율이 좌표가 아니라 값으로 저장됨 (R_KANNO=10.8, R_IYUN=15 등)
  → 프로젝트 읽기·검산에 요율 좌표(T1)가 필요 없음. 우선순위 격하
- 수공형식 세부경비 8개 항목 확정 (R_S_SUDO/BOKRI/SOMO/TONGSIN/SEGUM/
  PEGI/DOSEO/JIGUP). KAN_ORD_2 의 331~338 과 일치
- 직접입력 금액 C_KUNBO·C_YUNBO·C_IYUN_M 이 변경설계 「당초액 유지」와
  끝전조정 보정액의 저장 자리

암호화의 성격
- 암호화 41개는 전부 파일명에 출처 기관·반기가 박힌 유료 구독 데이터.
  평문 43개는 법정 공개 자료인 제비율 요율표. 후보 슬롯 이름이 국내
  물가지 이름 그대로임. 프로그램 로직이 아니라 사온 데이터를 지키는 것
- Aislo 는 노임·유가·환율·시설공통자재를 이미 직접 확보. 실질 격차는
  물가지 자재단가 구독 하나

문서 21 신규, SMT 덤프 스크립트 추가.

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:04:32 +09:00
co-authored by Claude Opus 5
parent 9abd6a453d
commit 3640f737a9
5 changed files with 186 additions and 5 deletions
@@ -27,6 +27,7 @@
| 18 누락 계산로직 점검 | **사슬에 빠진 칸 찾기** — 노임 환산식·단가산출 Q식·설정 스냅샷·집계표 반올림 | (저장소 파일) | | 18 누락 계산로직 점검 | **사슬에 빠진 칸 찾기** — 노임 환산식·단가산출 Q식·설정 스냅샷·집계표 반올림 | (저장소 파일) |
| 19 진행률 장부 | **어디까지 봤고 무엇이 남았나** — 원천별 실측 진행률, 차단점 현황 | (저장소 파일) | | 19 진행률 장부 | **어디까지 봤고 무엇이 남았나** — 원천별 실측 진행률, 차단점 현황 | (저장소 파일) |
| 20 설정파일과 보고서 카탈로그 | **`Start8x.Ini`·`SET_REP`** — 간접비 코드 사전 301~370, 서식 75종 | (저장소 파일) | | 20 설정파일과 보고서 카탈로그 | **`Start8x.Ini`·`SET_REP`** — 간접비 코드 사전 301~370, 서식 75종 | (저장소 파일) |
| 21 정정과 트랙 통합 | **`SMT` 판정 정정 · 지식DB 트랙 셋 통합 · `PRJLST.SMT` 설정 원장 · 암호화의 성격** | (저장소 파일) |
> **정본은 저장소 파일이다** — `resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/`. > **정본은 저장소 파일이다** — `resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/`.
> 위 Orca 링크는 보기용이며, 문서를 지식DB 자리로 옮기면서 주소가 한 번 바뀌었다. > 위 Orca 링크는 보기용이며, 문서를 지식DB 자리로 옮기면서 주소가 한 번 바뀌었다.
@@ -74,6 +75,11 @@
| 간접비 항목 순서·코드 | 화면 텍스트 복원 | **A**`KAN_ORD_1/2` 코드 목록, 301~370 사전 | 20번 §2.1·§2.2 | | 간접비 항목 순서·코드 | 화면 텍스트 복원 | **A**`KAN_ORD_1/2` 코드 목록, 301~370 사전 | 20번 §2.1·§2.2 |
| 후보 슬롯 이름 | 「설정에 있을 것」 | **설치본마다 다름을 실물 확인** (유통 물가 ↔ 견적단가) | 20번 §2.3 | | 후보 슬롯 이름 | 「설정에 있을 것」 | **설치본마다 다름을 실물 확인** (유통 물가 ↔ 견적단가) | 20번 §2.3 |
| 보고서 서식 | 30종 관찰 | **카탈로그 75종** — 수공양식·표준시장 서식 존재 | 20번 §3 | | 보고서 서식 | 30종 관찰 | **카탈로그 75종** — 수공양식·표준시장 서식 존재 | 20번 §3 |
| `*.SMT` | ⛔ 암호화라고 적었음 | **정정 — 평문.** `COSTN.SMT` 단가 전개, `PRJLST.SMT` 설정 원장 | 21번 §1 |
| 프로젝트 요율 | 기준표 좌표로 찾아야 한다고 봄 | **`PRJLST.SMT`에 값으로 저장** — 좌표는 읽기에 불필요 | 21번 §3 |
| 수공형식 세부경비 8개 | 표본 없어 미상 | **항목 확정**`R_S_SUDO`·`BOKRI`·`SOMO`·`TONGSIN`·`SEGUM`·`PEGI`·`DOSEO`·`JIGUP` | 21번 §3.2 |
| 암호화의 성격 | 「기초단가가 막혔다」 | **사온 물가지 데이터 보호** — 뚫을 일이 아니라 살 일 | 21번 §4 |
| 지식DB STmate 트랙 | 하나로 알고 있었음 | **셋이 서로 몰랐음** — ①계산로직 ②STC포맷 ③프로그램분석 | 21번 §2 |
분석일: 2026-09-13 분석일: 2026-09-13
대상: `C:\경영정보(주)` 대상: `C:\경영정보(주)`
@@ -130,14 +130,18 @@ EXEUR1/2=1000 EXYEN1/2=1000
## 4. `COSTN.SMT` · `QCODE.SMT` · `STini.MEM` ## 4. `COSTN.SMT` · `QCODE.SMT` · `STini.MEM`
> ⛔ **이 절의 첫 판정은 틀렸다. 21번 §1에서 정정했다.** 아래는 바로잡은 내용이다.
| 파일 | 크기 | 상태 | | 파일 | 크기 | 상태 |
|---|---:|---| |---|---:|---|
| `COSTN.SMT` | 10,177 B | 머리 `SIxMemo`, **본문에 읽히는 문자열 없음 — 암호화/압축** | | `COSTN.SMT` | 10,177 B | **평문 — 본문 문자열 276개.** 단가산출 전개 텍스트 |
| `PRJLST.SMT` | 2,291 B | 같음 | | `PRJLST.SMT` | 2,759 B | **평문 — 153개.** 프로젝트별 원가계산 설정 원장 |
| `QCODE.SMT` | 2,291 B | 같음 | | `QCODE.SMT` | 512 B | 머리만, 내용 없음 |
| `STini.MEM` | 512 B | Delphi `TMemoryStream` 덤프로 보임, 미해독 | | `STini.MEM` | 512 B | 미해독 |
07번이 기대한 `&M00034M&` 같은 참조 토큰 **평문으로 읽히지 않는다.** 다만 같은 정보가 출력 XLSX의 `일위대가표`·`단가산출근거`에 평문으로 있으므로(17번·18번) **의존 그래프 복원에 지장은 없다.** 처음 훑을 때 **파일 앞 4KB만** 보고 필터를 세게 걸어 놓쳤다. **본문은 `0x200`부터** 시작한다. 07번이 기대한 `&M00034M&` 참조 토큰 **평문으로 그대로 있다.**
암호화된 것은 `BDQTY.DBF`·`SYSINFO.DBF` 둘뿐이라는 판정은 그대로 맞다. 상세는 **21번 §1·§3**과 기존 `original/원가계산/STmate/SIxMemo_구조.md`.
## 5. 이번 점검이 바꾸는 것 ## 5. 이번 점검이 바꾸는 것
@@ -0,0 +1,156 @@
# 정정과 트랙 통합 — 마지막 확인에서 드러난 것
작성일: 2026-09-13
계기: 「분석이 대부분 끝났나」 최종 확인. **끝나지 않았다.** 오히려 이 확인에서 **내 오류 하나와 큰 구멍 하나**가 나왔다.
## 1. ⛔ 정정 — `*.SMT` 는 암호화가 아니다. 읽힌다.
20번 §4에 「`COSTN.SMT`·`QCODE.SMT`·`PRJLST.SMT` 본문에 읽히는 문자열 없음 — 암호화/압축」이라 적었다. **틀렸다.**
앞선 훑기가 **파일 앞 4KB만** 본 데다 필터가 셌다. 본문은 **`0x200`부터** 시작한다.
| 파일 | 크기 | 읽히는 문자열 |
|---|---:|---:|
| `COSTN.SMT` | 10,177 B | **276개** |
| `PRJLST.SMT` | 2,759 B | **153개** |
| `QCODE.SMT` | 512 B | 1개 (비어 있음) |
암호화된 것은 **`BDQTY.DBF``SYSINFO.DBF` 둘뿐**이라는 앞선 판정은 그대로 맞다.
## 2. 큰 구멍 — 지식DB에 STmate 트랙이 **셋**이고 서로 몰랐다
| 트랙 | 자리 | 담당 | 만든 때 |
|---|---|---|---|
| ① **계산 로직** | `technical_info/01_임도/05_원가정보/` (문서 10개) | 밑수·단수처리·제비율·기계경비·노임·자재 적용 | 2026-08 |
| ② **STC 포맷** | `original/원가계산/STmate/` (문서 8개) | 컨테이너·필드사전·난독화·SIxMemo·INITIAL | 2026-08-15 |
| ③ **프로그램 분석** | `original/경쟁사 프로그램/STmate 분석/` (이 폴더) | 실행모듈·폼·계산사슬·골든셋 | 2026-09-12~13 |
②의 `_meta.md`**「계산 로직은 `technical_info/01_임도/05_원가정보/`가 담당, 이 폴더는 포맷만」** 이라고 트랙 분리를 명시해 놓았다. ③을 만들 때 이것을 못 보고 시작했다.
### 그 결과 겹치거나 어긋난 것
| 내가 「새로 찾았다」한 것 | 이미 있던 곳 | 판정 |
|---|---|---|
| 내역 행 절사 · 집계표 사사오입 · 관급 천원 올림 | ①`단수처리_규칙.md`**5공사지 교차로 이미 확정**. 봉화 216건까지 같은 숫자 | **중복** |
| `〓 INITIAL 〓` 시트 | ②`XLSX_INITIAL_구조.md` — 존재·성격 이미 규명. 「셀 전수 추출」만 미착수 | **부분 중복** (전수 추출은 18번이 처음) |
| `COSTN.SMT` 토큰 | ②`SIxMemo_구조.md`**헤더·문법 이미 해독**(`&M00034M&`, `:=A01`, `Q=…`) | **중복이자 내 오판** |
| `BDQTY`·`SYSINFO` 암호화 | ②`STC_난독화_상태.md`**XOR 키스트림 부분 검증까지** 완료 | **중복** |
**정직하게 말해 ③의 상당 부분이 ①②를 다시 한 것이다.** 다만 ③에서만 나온 것도 분명하다 — 실행모듈 정적분석(은행가 반올림), 폼 복원(밑수 공식·설정 83축·간접비 코드), 골든셋 회귀(원 단위 재현), 변경설계 모드, 단가산출 Q식 전수.
## 3. ⭐ `PRJLST.SMT` — 요율이 **값으로** 저장돼 있다
가장 중요한 발견. 프로젝트마다 원가계산 설정이 **INI 형식 평문**으로 들어 있다.
```ini
[KANJUB] JAB_TYPE=0 CAL_ACTL=0 VIS_TOTL=0
[1_KANJUB] ← 차수 1
[2_KANJUB] ← 차수 2
```
### 3.1 요율 `R_*` — 전부 값으로
```ini
1_R_KANNO=10.8 간접노무비 1_R_SANBO=3.8 산재보험료
1_R_KOBO=0.67 고용보험료 1_R_KUNBO=1.4 건강보험료
1_R_YUNBO=2.41 연금보험료 1_R_ANJUN=2.48 산업안전보건관리비
1_R_T_KITA=6.1 기타경비 1_R_HADOSU=0.018 하도급보증수수료
1_R_ILBAN=4.7 일반관리비 1_R_IYUN=15 이윤
1_R_KONGSA=0.7 공사보험료 1_R_TBUGUM=0 퇴직공제부금
```
### 3.2 ⭐ 수공형식 세부 경비 8개가 여기 있다
```ini
1_R_S_SUDO 수도광열비 1_R_S_BOKRI 복리후생비
1_R_S_SOMO 소모품·사무용품비 1_R_S_TONGSIN 여비·교통비·통신비
1_R_S_SEGUM 세금·공과금 1_R_S_PEGI 폐기물처리
1_R_S_DOSEO 도서·시공도작성비 1_R_S_JIGUP 지급수수료
```
**`KAN_ORD_2``331`~`338` 여덟 개와 정확히 맞는다**(20번 §2.1). 수공형식 표본이 없어도 **항목 구성은 확정**됐다.
### 3.3 직접입력 금액 `C_*` — 변경설계 「당초액 유지」의 실제 자리
```ini
1_C_KUNBO=649160 건강보험료 직접입력 금액
1_C_YUNBO=1117483 연금보험료 직접입력 금액
1_C_ANJUN=1994098 안전관리비
1_C_IYUN_M=37182 이윤 보정액 ← 16번 §4.4 끝전조정의 저장 자리
1_C_KONGSA_J=119300000
```
**19번 §6에서 「건강·장기요양·연금은 당초액 유지」라 실증한 것의 저장 자리가 이것이다.** 요율이 아니라 **금액을 직접 써 넣는다.**
### 3.4 선택 인덱스 `I_*` — 폼의 83축과 직결
```ini
1_I_KONG_TYPE=0 공사종류 1_I_KONG_KIKAN=2 공사기간
1_I_ANJUN_TYPE=0 안전비 공종 1_I_KUN_TYPE=6 건물종류
1_I_JEOLSA=5 공급가액 절사 1_I_TBUGUM=3 퇴직공제 구분
1_I_BUGA=0 부가세 방식 1_I_KOBO_TYPE=0 고용보험 등급
1_I_MTYP · 1_I_LTYP · 1_I_MXA · 1_I_MXK ← 실적형식 전용 (12번 §10.1-2)
```
12번이 폼에서 뽑은 축 이름(`cmBx_Kong_Type`·`cmBx_AnJun_Type`·`cmBx_JeolSa`…)과 **일대일로 맞는다.**
### 3.5 ⇒ 요율 좌표(T1)는 재구현 필수가 아니다
**프로젝트를 읽을 때는 `PRJLST.SMT`의 `R_*` 값을 그대로 쓰면 된다.** 기준표 좌표는 「새 프로젝트를 만들며 기준표에서 고르는」 경로에만 필요하다.
| 쓰임 | 좌표 필요? |
|---|---|
| STmate 프로젝트 **읽기·검산** | ❌ — `PRJLST.SMT`에 값이 있음 |
| Aislo에서 **새로 요율을 고르기** | ⭕ — 다만 Aislo는 **현행 법령**에서 고르면 됨 |
| STmate와 **같은 기준표 선택 재현** | ⭕ — 하지만 목표가 아님 |
⇒ 13번 T1의 우선순위를 **1위에서 내린다.** 19번 §7의 「규모·기간 의존 요율 좌표」도 같은 이유로 격하한다.
## 4. 암호화의 성격 — 프로그램이 아니라 **사온 데이터**를 지킨다
| | 암호화 41개 | 평문 43개 |
|---|---|---|
| 무엇 | `*.BSC` · `*.CSTA` · `*.STBSC` 단가 자료 | `JB_*` 제비율 요율표 |
| 성격 | **유료 구독 데이터** | **법정 공개 자료** |
암호화된 파일은 **전부 파일명에 출처 기관과 반기가 박혀 있다.**
```
2025(상,국교,해수부,조달청)_표준시장.CSTA 국토부·해수부·조달청 표준시장단가
2026(상_노임,기계경비).STBSC 대한건설협회 노임 + 건설기계 경비
2026(상_표준일위대가_토목).STBSC 표준품셈 일위대가
2026-상-시설공통자재.STBSC 나라장터 시설공통자재
JDCODE_M.BSC 19 MB 자재 코드·단가 57,580건
```
**결정적 근거는 후보 슬롯 이름이 국내 물가지 이름 그대로**라는 점이다.
| 슬롯 | 이름 | 실체 |
|---|---|---|
| 1 | 조달가격 / 가격 정보 | 조달청 가격정보 |
| 2 | **물가자료** | 한국물가협회 |
| 3 | **물가정보** | 한국물가정보 |
| 4 | 거래가격 | 거래가격지 |
| 5 | 유통 물가 / 견적단가 | 유통물가 또는 업체 견적 |
즉 STmate는 **물가지 네댓 곳에서 사온 단가를 자기 포맷으로 담아 반기마다 배포**하며, 암호화는 **그 데이터의 저작권 보호**다. 프로그램 로직을 숨기려는 것이 아니다 — 계산 모듈(`*.CPM`)은 암호화돼 있지 않고 프로젝트 파일도 대부분 평문이다.
### Aislo 에 뜻하는 것 — 뚫을 일이 아니라 살 일
| 무엇 | STmate | Aislo 현재 |
|---|---|---|
| 계산 규칙 | 암호화 안 됨 | ✅ 다 읽었음 |
| 법정 요율(제비율) | 평문 | ✅ 현행법에서 직접 |
| 품셈 `q·K·f·E·Cm` | 출력에 평문 | ✅ `건설공사_표준품셈` 보유 |
| 노임 | 암호화 배포 | ✅ `노임단가_건설업_대한건설협회` |
| 유가·환율 | 암호화 배포 | ✅ `유가_오피넷` · `환율_한국은행ECOS` |
| 시설공통자재 | 암호화 배포 | ✅ `자재단가/나라장터_시설공통자재` |
| **물가지 자재단가** | 암호화 배포 | ⛔ **구독 필요 — 유일한 실질 격차** |
| 표준시장단가 | 암호화 배포 | ◐ 조달청 공표 자료로 대체 가능 |
## 5. 이 문서 이후 해야 할 것
1. **①②③ 트랙을 잇는 색인** — 세 폴더 머리에 서로를 가리키는 줄을 넣어 다시 갈라지지 않게 할 것
2. ③의 계산 규칙을 ①`technical_info/05_원가정보/`**승격** — ①이 Aislo 구현의 정본이므로
3. ②의 미해명(`SMT` 10바이트 인덱스, 레코드 경계)과 ③의 성과를 합칠 것
4. `COSTN.SMT` 전개 텍스트 **전수 파싱** — ②가 문법을 해독해 뒀으므로 바로 가능
@@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
"""SIxMemo(*.SMT) 본문 덤프 — 0x200 부터가 본문. 원본은 읽기만."""
import sys, io, re, pathlib
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
D = pathlib.Path(r"C:\경영정보(주)\STmate 자료\설계자료\실습(맛보기)")
for f in ("PRJLST.SMT","COSTN.SMT","QCODE.SMT"):
b=(D/f).read_bytes()
out=[]
for m in re.finditer(rb"[\x20-\x7e\xa1-\xfe]{3,}", b[0x200:]):
try: out.append((0x200+m.start(), m.group().decode("cp949")))
except Exception: pass
print("\n" + "="*92)
print("### %s %d B 본문 문자열 %d" % (f, len(b), len(out)))
for off,s in out: print(" 0x%05X %s" % (off, s[:86]))
@@ -46,6 +46,7 @@
| 18 | **누락 계산로직 점검** — 노임 환산식·단가산출 Q식·설정 스냅샷 | | 18 | **누락 계산로직 점검** — 노임 환산식·단가산출 Q식·설정 스냅샷 |
| 19 | **진행률 장부** — 어디까지 봤고 무엇이 남았나 | | 19 | **진행률 장부** — 어디까지 봤고 무엇이 남았나 |
| 20 | **설정파일과 보고서 카탈로그** — 간접비 코드 사전, 서식 75종 | | 20 | **설정파일과 보고서 카탈로그** — 간접비 코드 사전, 서식 75종 |
| 21 | **정정과 트랙 통합**`SMT` 정정, 지식DB 세 트랙, 암호화의 성격 |
## 확정된 굵직한 것 ## 확정된 굵직한 것