knowledge(요구): 분석 654-B — STmate 단가산출 DB 구성 · 분리 방식

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-07 09:02:27 +09:00
co-authored by Claude Opus 5.5
parent 2ccd151728
commit a8eaaca2db
@@ -0,0 +1,87 @@
# 분석 654-B — STmate 단가산출 DB 구성 · 분리 방식 (요구 654 · 읽기만)
표기 — 〔확인〕 = 파일 헤더 · 바이트 · 화면 캡션 · 바이너리 문자열로 직접 봄 · 〔추정〕 = 근거에서 끌어낸 판단. 약칭 — 〔S〕 `resources/knowledge/original/경쟁사 프로그램/STmate 분석/` · 〔R〕 〔S〕`REA 분석/` · 〔원〕 `resources/knowledge/original/원가계산/STmate/` · 〔설치〕 `C:\경영정보(주)\`(랩탑 정적 사본). 표본 = 〔설치〕 실습(맛보기) + 실무 STC 일곱. 스크립트 = `tmp/brain_654/STM/`(dbfhead.py · costn_dump.py · stc_scan.py).
## 0. 결론
1. 「기본 DB 와 사용자 DB 를 나눠 산근을 자유롭게 고친다」는 짐작은 반만 맞음 — STmate 기본 자료에는 산근 로직이 아예 없음 · 기본 자료가 주는 것 = 자원 단가 · 표준일위대가 구성 줄 · 코드 사전 · 제비율 · 중기공식 틀 54 개뿐 〔확인 · 추정 강〕.
2. 산근(D)은 프로젝트 안에서만 생기고 삶 — 정본 = `COSTN.DBF` D 행 + `COSTN.SMT` 메모의 자유 글 식 · 여덟 표본 모두 메모 가진 행 = D 뿐 〔확인〕.
3. 자유 편집이 쉬운 진짜 까닭 = 두 분리 — 「값(자원 단가 표)」과 「식(산근 글)」 · 「복사한 뒤 내 것」(원천으로 되돌아가는 연결 없음).
4. 회사 공용 층 따로 없음 — ① PC 공용 `System\EQSYNC.DBF`(중기공식) · `USR_SYNC.DBF`(사용자문자) ② 아무 프로젝트나 「복사원(단가참조) 폴더」로 골라 코드 병합 ③ 사용자 재료비 기초자료 STBSC 〔확인〕.
## 1. 층별 파일
| 층 | 자리 | 담는 것 | 쓰기 | 갱신 |
| --- | --- | --- | --- | --- |
| 판매사 기준자료 · 단가 | `System\ST_BSC\노임기계\*.STBSC` · `자재단가\시설공통자재\*.STBSC` · `실적단가\**\*.STBSC` · `*.CSTA` | 암호 ZIP 다섯 칸(`COST.ST` 항목 · `XDET.ST` 구성 줄 · `MEM.ST` · `CH_NAME.ST` · `info.ST`) · 노임기계 2,447 줄 · 표준시장단가 `COSTA.CSTA` 4,961 행 | 읽기만 | 반기 새 파일 |
| 판매사 표준일위대가 | `ST_BSC\일위대가\2026\…{토목·건축·기계설비·전기·통신}.STBSC` | B 머리 + 구성 줄(토목 10,182) · 산근 글 없음 | 읽기만 | 반기 |
| 코드 사전 | `ST_BSC\JDCODE_{L,M,S,X,Z}.BSC` · `GRPCOD_{E,Z}.BSC` | 호환규정코드(17 자) · 명칭 · 규격 · 단위 · 시설코드 · 표준명칭 · 단가 칸 없음 · L 460 · M 57,580 · S 851 · X 833 · Z 33,927 | 읽기만 | 판매사 |
| 제비율 | `ST_BSC\*.JB_1/JB_M/JB_R/JB_RA` | 제비율 행렬 | 읽기만 | 시행일마다 |
| PC 공용 사용자 층 | `System\EQSYNC.DBF/.SMT`(54 행) · `System\USR_SYNC.DBF` | 표준중기공식 틀 · 사용자문자 | 추가 · 삭제 · 수정 | 사용자 |
| 사용자 기준자료 | `ST_BSC\자재단가\사용자등록\*.STBSC` | 사용자 작성 재료비 기초자료 | 새 파일 | 사용자 |
| 프로젝트 | `STmate 자료\설계자료\<프로젝트>\` · 통째 `.STC`(ZIP) | 2 장 표 전부 + `Start8x.Ini`(코드 카운터 · 단가 출처 이름) · `PRJLST.SMT` · 복사된 `RATE_*.DBF` | 전부 | 프로젝트 주인 |
기준자료를 프로젝트에 넣을 때 `BSC_COSTN.DBF` · `BSC_BDQTY.DBF`(프로젝트와 같은 꼴) 임시 표로 풀어 비교 〔확인: 문자열 · 추정: 차례〕.
## 2. 프로젝트 안 단가산출 표
| 표 | 열쇠 · 중요 칸 | 역할 |
| --- | --- | --- |
| `COSTN.DBF`(101 칸 · 평문) | `CODE`(글자 하나 + 다섯 자리) · NAME/SIZE/UNIT · 차수 1~4 `TAMTn = LAMTn + MAMTn + SAMTn` · 출처 6 × 차수 4 `AMT_<출처><차수>` · `PG_n`(채택 출처) · `IFORM`(메모 포인터) · `JDCODE` · BQCODE · EQCODE · CONTCODE · WQCODE · ADJ_M/L/S · S_ADJ · SBMOK · JOJAK | 모든 코드 머리 · 단가 · D · B 단가 = 계산 결과 담아 둠 |
| `COSTN.SMT`(SIxMemo · 64 B 블록) | `IFORM` 10 B = `<HII>`(tag · 길이 · 블록 번호) | D 행에만 산근 글 |
| `BDQTY.DBF`(37 칸 · 암호) | BDCODE(부모) · CODE(자식) · QTY1~4 · DEVD1~4 · BIMOK/SBMOK · RATE · PRPT · PRIN/PROUT · EQCODE(율 기준 식) · X_QTY/X_HAL · KWNGP | B · X 구성 줄 정본 · D 는 글을 셈해 펼친 결과 |
| `BOQ11(·12).DBF` | `BDCODE1~4` → COSTN · `QTY1~4` | 내역 |
| `QCODE` · `COSTA` | 수량코드 · 실적/표준시장 단가 | 표본에선 빔 |
| `RATE*.DBF` · `PRJLST` · `Start8x.Ini` | 제비율 사본 · 설정 · `{B,D,L,M,S,W,X…}CDNM` 카운터 | 설정 |
코드 종류 〔확인〕 — 노무 L · 자재 M · 경비 S · 중기 X · 일위대가 B · 산근 D · 일식/견적 W(T% · TON · m3) · S 에 L% · T% 율 코드 · 그림 I · 수량 Q · BDQTY 율 행 PR(수량/100) · RR(수량) · 특수 행 C · E · T.
D 가 부르는 방식 〔확인 — 편집기 도움말 10 절〕 — `&L00084&` = 그 코드 단가 전부 · `&X00006L&` = 그 비목만 · `&D…&` = 산근 안 산근 · `&W…&` = T% · 율 줄 `&PA01L:S& * 10'%'` · 변수 `K=1.0` · `Q=식=` · 글 `'…'` · 소계 `(=)` · 금액번지 `:=A01` · 저장 글엔 단가 · 결과 숫자 없음(`'노무비' &X00006L& / Q =`).
## 3. 사용자가 산근을 더하고 고치는 길
| 하려는 일 | 화면 · 조작 | 바뀌는 자리 |
| --- | --- | --- |
| 빈 산근 새로 만들기 | 단가목록표(`wM_JabPum`) → 단가산출근거 수정(`wM_Edit_San`) | `DCDNM`+1 → COSTN 새 D 행 |
| 표준에서 가져오기 | 자료파일 업데이트(`wM_Mrg_BSC`) 「신규등록 · 업데이트 · 내역복사」 | B · L · M · S · X + BDQTY 줄만 · D 글 없음 〔추정 강〕 · 산근 틀 = 중기공식(Ctrl+Space → EQSYNC) · 줄 넣기 틀 5 · 사용자문자 |
| 다른 프로젝트에서 | 코드병합(`ST_Merge_Code`: 선택코드만 / +하위기초단가 / 모든코드) · 데이타 병합(`ST_U_Merge`: 복사처적용 · 복사원적용 · 신규등록 · 시작번호) | `MRG_COSTN/BDQTY` 거쳐 새 번호로 · 글 속 `&코드&` 도 새 번호 〔추정〕 |
| 엑셀에서 | 엑셀자료 불러오기 · 기본자료 ↔ 엑셀 | 단가 · 내역 숫자 중심 · 산근 글 되살리기 근거 없음 |
| 줄 · 상수 · 식 고치기 | Enter · F7/Alt+F12/F12 코드 넣기 · F5 계표시 · F6 손료 · Alt+1~9 번지 | 편집기 글만 · F9 `Calq_San` 성공해야 저장 → `IFORM` 글 · `JOJAK` · BDQTY 줄 다시 적음 |
| 자원 코드 바꾸기 | 글 속 `&코드&` · 코드 일괄변경(`ST_U_ChgCode`) | D 글 · B 줄 참조 함께 |
| 노 · 재 · 경 갈래 | 코드 꼬리 · 율 줄 `:S` · Ctrl+Alt+L/M/S/T · 결과금액 조정 | 글 · BIMOK/SBMOK · ADJ_M/L/S · SBMOK · S_ADJ |
| 되돌리기 | 실행 취소 · 「산근 원내역 재생」 | 원내역 자리 미확인 |
사용자가 기본 자료를 고치는 일 없음 — STBSC · 코드 사전 = 암호 · 읽기 전용 · 사용자 공용 = EQSYNC · USR_SYNC 뿐 · 사용자 재료비 기초자료 = 새 파일 〔확인〕.
## 4. 기준자료 ↔ 프로젝트 연결
- 번호는 프로젝트 안에서만 — `Start8x.Ini` 카운터 = 최대 번호(기번3: B 1208 · D 2263 · M 954 · L 34 · S 170 · X 105) · 상한 99,999 · 같은 공사 두 판에서 다시 매김 〔확인〕.
- 되돌아가는 연결 칸 사실상 없음 — `JDCODE` = L · S · X 에 주로(현동 L 19/20 · S 22/24 · X 22/25) · M 2/69 · B · D 0 · `CONTCODE` · `WQCODE` 여덟 모두 0 · D · B 의 BQCODE · EQCODE = 자유 메모 〔확인〕.
- 자료파일 업데이트 매칭 다섯 단계 — 호환규정코드 → 시설코드 → 명칭 · 규격 · 단위 → 호환+명+규+단 → 명칭 · 단위(「설정안함」) · 명칭 · 단가 · 조달코드마다 「업데이트 안함(복사처적용)」/「업데이트(복사원적용)」 · 중기 · 견적단가 업데이트 · 「연결안된 기본자료 전체 복사처 신규등록」 · 「하위 연결」 〔확인〕.
- 업데이트가 건드리는 것 = 머리 칸 · 단가 칸 · 중기 구성 줄 · 산근 글은 안 바뀜 〔추정 강〕.
## 5. 자원 단가 표와 산근 글의 분리
- 값은 자원 행에만 — 출처 여섯(`JMOK1~6`) × 차수 1~4 · `PG_n` 으로 고른 값 → `TAMTn` 〔확인〕.
- 산근 글 = 코드 자리표시 + 품 → 단가가 바뀌는 길(자료파일 업데이트 · 기준단가 비율 수정 · 단가 일괄변경 · 차수 전환) 무엇이든 글 그대로 · 금액만 다시 · F9 또는 「해당분 복합단가 전체 재계산」.
- 꼬리 L · M · S 참조 → 중기 단가 노 · 재 · 경 세 성분이 따로 흐름(중기 참조 1,504 건).
- 글 셈 결과가 BDQTY 줄(코드 × 품)로 펼쳐져 D 도 B 와 같은 꼴로 일위대가 · 수량집계 · 자원 역집계에 들어감.
- 대가 = 다시 셈 손으로(F9 성공해야 저장 · 잊으면 옛 금액).
## 6. 층 그림 · 원칙 · 득실
```
[판매사 · 읽기만] STBSC(L·M·X 단가 / 표준일위대가 B 구성) · JDCODE 사전 · JB 제비율 ── 반기 새 파일
│ 자료파일 업데이트(매칭 다섯 단계 → 신규등록 / 단가 · 명칭 · 조달코드 갱신) ※ 산근 글 없음
[PC 공용 · 사용자] EQSYNC 중기공식 · USR_SYNC 사용자문자 · 사용자 재료비 STBSC ── 편집기가 끌어다 씀
│ 코드병합 · 데이타병합(아무 프로젝트를 복사원으로 · 새 번호 · 원천 연결 없음)
[프로젝트 · 전부 내 것] COSTN(자원 단가 · D/B 결과) + SMT(D 글 = 정본) + BDQTY(구성 · 펼친 줄) + RATE 사본 + 설정
```
원칙 — ① 기본 층에 산근 로직 없음(「덮어쓰기 대 원본」 다툼 없음) ② 가져올 때 통째 복사 · 원천과 끊음 ③ 식 = 글 · 값 = 코드 참조(단가 바뀌면 자동 · 사용자는 품만) ④ 글을 BDQTY 줄로 펼쳐 아래 계산은 한 엔진 ⑤ 재사용 = 틀 조각(중기공식 · 사용자문자) + 다른 프로젝트 복사.
득실 — 표준 판 바뀌어도 산근 식 안 따라감 · 판 차이 안 보임 · 선택지 구조 없음(갈래마다 통째 사본) · 번호가 프로젝트마다 달라 열쇠 못 됨(안정 열쇠 = 자원 JDCODE 뿐) · 같은 공종도 글 꼴 제각각(648-B 뼈대 닮음 0.02~1.0) · 문법 검사 약함 · 다시 셈 손으로.
우리와 맞대면 〔추정〕 — STmate 에 M01(구조화 품셈 로직) 해당 층 없음 · 우리 B09 사본 = STmate 「프로젝트 D 글」 자리지만 덮개 · 숫자만 받음 · STmate 「복사원 프로젝트」 · EQSYNC · USR_SYNC = M02 회사 · 개인 층 자리 · 자유도를 높이려면 DB 층을 더 쪼갤 일이 아니라 사용자 층(M02 · B09)이 식 줄을 받아 정본으로 갖게 하고 · 자원 단가는 코드 참조 · M01 출처 꼬리표는 판 차이 표시용으로.
근거 — 〔S〕`20_분석/02` · `10` · `20 §2.4` · `22 §3.6~3.7` · `23` · `29` · `30_원자료/ui_form_catalog.txt` · `print_form_map.txt` · `system_inventory.csv` · 〔R〕`06` · `07` · `09` · `30_…/ST_EdSan/*` · 〔원〕`STC_필드사전_핵심.md` · `STC_컨테이너_구조.md` · `SIxMemo_구조.md` · 앞 분석 648-B · 649-G1 · 650-H1 · `tools/stmate-test/smt_parser.py`.