diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/00_분석_요약과_읽는법.md b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/00_분석_요약과_읽는법.md index 1a849b18..692565bf 100644 --- a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/00_분석_요약과_읽는법.md +++ b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/00_분석_요약과_읽는법.md @@ -33,6 +33,7 @@ | 24 모듈구조 전수 | **46개 모듈 export** — `DP_Common` 73함수, 플러그인 규약, 동글, 8차 해소 | (저장소 파일) | | 25 설정키 전수와 식템플릿 | **설정 사슬 닫기** — `PRJLST.SMT` 키 241종, 간접비 식 26개 | (저장소 파일) | | 26 편집기와 사이클식 | **`Cm` 54꼴·품셈 인자·식 편집기·낙찰율** — 계약/실행/기성 단계 발견 | (저장소 파일) | +| 27 계약·실행·기성 단계 | **설계 뒤 네 단계** — 낙찰율 3갈래, 기성은 계약제잡비율, 실행 차액보정 | (저장소 파일) | > **정본은 저장소 파일이다** — `resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/`. > 위 Orca 링크는 보기용이며, 문서를 지식DB 자리로 옮기면서 주소가 한 번 바뀌었다. @@ -111,6 +112,11 @@ | **낙찰율 `NAGCD`** | **몰랐음** | ⚠ **단가 그리드에 낙찰율 열.** 계약·실행·기성 단계 미분석 | 26번 §4·§8 | | 계층 표기 | `T*`/`E*` | **`+=` ~ `+=====` 가 레벨** | 26번 §5 | | `PM_*` ↔ `SET_REP` | 없음 | **64/74 대응** | 26번 §6 | +| 분석 범위 | 설계 단계만 | **계약·실행·기성·준공 네 단계 구조 확보** | 27번 | +| 낙찰율 적용 | 열만 확인 | **노·재·경 세 갈래 + 적용제외 공정 선택** | 27번 §2 | +| 기성 간접비 | 몰랐음 | **금회직접공사비 × 계약제잡비율** — 설계와 다름 | 27번 §3.1 | +| 부가세 축 | 단계 무관 | ⚠ **단계마다 선택지가 다름** | 27번 §3.3 | +| 실행예산 | 서식명만 | **중기 실행단가 + 차액 보정 순서** | 27번 §4 | 분석일: 2026-09-13 대상: `C:\경영정보(주)` diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/27_계약_실행_기성_단계.md b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/27_계약_실행_기성_단계.md new file mode 100644 index 00000000..f0d07fa8 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/27_계약_실행_기성_단계.md @@ -0,0 +1,162 @@ +# 계약·실행예산·기성·준공 — 설계 뒤의 네 단계 + +점검일: 2026-09-13 +계기: 26번 §8에서 **「우리가 판 8단계는 설계까지」**임이 드러났다. 그 뒤를 판다. +재현 스크립트: `40_스크립트/stage_form_parse.py` + +## 1. 프로그램은 설계에서 끝나지 않는다 + +```text +설계 ──▶ 계약 ──▶ 실행예산 ──▶ 기성(여러 회) ──▶ 준공 +``` + +19번 §4의 계산 사슬 8단계는 **첫 칸(설계)**만 덮는다. 나머지 넷은 **밑수도 요율도 다르다.** + +## 2. 계약 — `wM_Mk_Cont` (당초설계 → 계약내역 변환등록) + +### 2.1 낙찰율을 **비목마다 따로** 먹인다 + +```text +단가 적용율 【 노 】 ___ % 【 재 】 ___ % 【 경 】 ___ % +``` + +⇒ **하나의 낙찰율이 아니라 노무·재료·경비 세 갈래**다. 26번 §4의 `NAGCD`(낙찰율 열)가 이것을 담는다. + +### 2.2 적용 옵션 + +| 옵션 | 뜻 | +|---|---| +| `기초단가(재,노,경,일식)에 단가적용율 적용하기` | 기초단가까지 내려가 적용 | +| `적용율 적용된 일위대가/산출근거 생성하기` | 호표도 새로 만듦 | +| `계약내역내 동일코드의 계약단가 개별생성` | 같은 코드라도 계약본은 따로 | +| `노무비율 적용` | 노무비 비율 별도 | +| `비과세자재대(원가계산)에 단가적용율 적용하기` | 비과세 자재도 대상 | +| **`단가적용율이 0% 이면 계약단가(W코드)를 "0"化 (공내역 생성)`** | **0% → 공내역** | + +### 2.3 ⭐ 적용 제외 공정을 고른다 + +```text +그리드 rGrd_Boq : 공종번호 | 명칭 | 규격 | 금액 | 레벨 | **적용제외** | RecNo +레벨필터 : 소계 이상 … 광역대계 이상 (9단계) +``` + +화면 안내가 **「적용율을 제외할(ex 관급자재대..) 공정을 선택」**이라 적는다. + +⇒ **관급자재대처럼 낙찰율을 먹이면 안 되는 공정을 행 단위로 제외**한다. 16번 §4.2의 `C*` 제외금액 구역과 **다른 개념**이다 — 그쪽은 직접비 합산 제외, 이쪽은 낙찰율 적용 제외다. + +보조 기능으로 `예상적용율 찾기`·`적용금액 미리계산`이 있다 — **목표 계약금액을 넣으면 역산해 적용율을 찾아 준다.** + +## 3. 기성 — `wM_KanJub_K` (기성 제잡비 계산서) + +### 3.1 ⭐ 간접비가 **단일 계약제잡비율**로 바뀐다 + +```text +[ 금 회 간 접 비 적 용 ] 금회직접공사비 × 계약제잡비율 +``` + +설계 단계는 항목마다 고유 밑수에 고유 요율을 곱했다(06번 §3). **기성은 그렇지 않다.** + +⇒ 11번 §10이 「계약 제잡비율 적용 시 간접노무비부터 부가세 직전까지를 `직접비 변경분 × 계약 제잡비율`로 조정」이라 한 것이 **기성 단계의 기본 방식**이다. + +### 3.2 4단 누적 구조 + +```text +rGrd_Jab : 공종 | 명칭 | 규격 | 도급액 | 전회금액 | 전율 | 금회금액 | 금율 + | 누계금액 | 누율 | 구분 | 종류 | **계약잡비율** | D_Typ +``` + +`전회 → 금회 → 누계`와 **각각의 비율(전율·금율·누율)**을 함께 들고 간다. 보고서 서식도 같다. + +| 서식 | 열 | +|---|---| +| `기성내역서`(0633) | 계약 \| 전회 \| 금회 \| 누계 | +| `기성내역서(사정)`(0634) | + **사정** | +| `기성내역서(기성율)`(0635) | + 비율 | +| `기성부분총괄내역서`(0632) | + 금액 \| 비율 | +| `기성검사조서(을/병)`(0636·0637) | 계약금액 \| **기성고(%)** \| 전회 \| 금회 \| 누계 \| 기성금액 | +| `기성부분수량조서`(0638) | 기성수량 \| 전회누계 \| 금회 \| 누계 \| **기성(%)** \| **잔량** | + +### 3.3 부가세 선택지가 설계와 다르다 + +```text +기성 : (0) 직접입력 · (1) 공급가액의 10% · (2) 재료비의 10% · (3) **재료비+산출경비의 10%** +설계 : 공급가액의 10% · 재료비의 10% · 없음 · 산림조합 형식 · 산림조합-면세품 +``` + +⇒ **같은 이름의 축이라도 단계마다 선택지가 다르다.** 재구현은 단계를 축의 일부로 삼아야 한다. + +절사 축은 같다 — `공급가액 절사`·`총공사비 절사` 각각 9택, `이윤금액 직접입력`까지. + +### 3.4 저장 자리 + +`BOQ11`에 **`QTY1_B` · `QTY1_N` · `QTY1_O` · `QTY1_H`** 네 칸이 있다(02번). 설계 단계 표본에서는 **전부 0**이다. + +⇒ **기성 수량 칸**으로 보인다(전회/금회/기타). 기성 STC 표본이 없어 각 글자의 뜻은 **B등급**이다. + +## 4. 실행예산 — `wM_Boq_ExecX` (중기 실행단가) + +```text +시간/단위당 중기실행단가 계산 및 입력 + 1단위당 중기사용료 : ____ 원/단위 1단위 = ____ 시간 + 최초단가 노무비 / 재료비 / 경비 → 실행단가 + 절사 기준 : 1원 · 10원 · 100원 · 1,000원 · 10,000원 · 100,000원 미만절사 + 차액 보정 순서 : 기본보정 / 노무비 / 재료비 / 경비 + 최초수량 → 실행수량 +``` + +⇒ **실행예산은 설계단가를 그대로 쓰지 않고 「실행단가」를 따로 만든다.** + +⭐ **`차액 보정 순서`** — 성분별로 절사하면 합계와 어긋나는데, **그 차액을 어느 비목에 몰아줄지 고른다.** 16번 §4.4의 끝전조정과 같은 성격이되 **단가 수준**에서 일어난다. + +보고서는 `실행예산서Ⅰ/Ⅱ`(0673·0674)이고 열은 `공종 | 설계(계획) | 실행예산 | 작업명 | 구분`이다. + +## 5. 준공 + +`준공조서(을/병)`(0646·0647), 열은 **`계약금액 | 준공금액`** 둘뿐이다. 별도 계산 없이 최종 누계를 옮기는 것으로 보인다. + +## 6. 보조 — `wM_GetAMT` (잡비 금액 불러오기) + +```text +RDbGrid_Prj : 공사번호 | 공사명 | 직접공사비 | 총공사비 | 공사종류 | PCODE +RDbGrid_Boq : 공종 | 명칭 | 규격 | 수량 | 단위 | 계금액 | 비고 +관/사급내역 보기 · 관련항목 보기 · 공종 추려보기 +``` + +⇒ **다른 프로젝트의 금액을 밑수로 끌어온다.** 11번 §12의 「사용자는 다른 내역 금액을 더블클릭으로 밑수에 불러올 수 있다」가 이 화면이다. + +## 7. 단계별 모듈 분포 + +| 문자열 | 가진 모듈 | +|---|---:| +| `누계` | 16 | +| `금회` | 15 | +| `전회` | 14 | +| `기성` | 12 | +| `낙찰` | 4 (`ST_EdSan`·`ST_PList`·`ST_Prt`·`ST_Sys`) | +| `실행예산` | 4 (`STmate`·`ST_Boq`·`ST_Prt`·`ST_U_Convert`) | +| **`계약제잡비`** | **1 (`ST_KanJub`)** | + +⇒ 기성 표기는 널리 퍼져 있지만 **계약제잡비율 계산은 `ST_KanJub` 한 곳**이다. + +## 8. 이번 점검이 바꾸는 것 + +| 항목 | 이전 | 지금 | +|---|---|---| +| 분석 범위 | 설계 단계만 | ✅ **계약·실행·기성·준공 네 단계 구조** | +| 낙찰율 | 열이 있다는 것만 | ✅ **노·재·경 세 갈래 + 적용제외 공정 선택** | +| 기성 간접비 | 몰랐음 | ✅ **금회직접공사비 × 계약제잡비율** (설계와 다름) | +| 기성 누적 | 몰랐음 | ✅ **전회·금회·누계 + 각 비율**, 사정·잔량 | +| 부가세 축 | 단계 무관으로 봄 | ⚠ **단계마다 선택지가 다름** | +| 실행예산 | 서식 이름만 | ✅ **중기 실행단가 + 차액 보정 순서** | +| `QTY1_B/N/O/H` | 「특수 수량」 | ◐ **기성 수량 칸으로 추정** (B등급, 표본 없음) | + +## 9. 남은 것 + +| 무엇 | 왜 막혔나 | +|---|---| +| 기성 회차별 실제 값 | **기성 STC·XLSX 표본 0건.** 한 건만 있으면 §3 전체가 실증됨 | +| 계약내역 표본 | 같음 — 낙찰율 적용 결과를 원 단위로 못 맞춰 봄 | +| `QTY1_B/N/O/H` 글자 뜻 | 기성 표본 필요 | +| 실행예산 표본 | 같음 | + +⇒ **설계 단계는 원 단위까지 재현했지만(16번), 뒤 네 단계는 「구조는 알고 값은 못 맞춤」 상태다.** 표본이 생기면 같은 골든셋 방법으로 바로 검증할 수 있다. diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/40_스크립트/stage_form_parse.py b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/40_스크립트/stage_form_parse.py new file mode 100644 index 00000000..ffaa3047 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/40_스크립트/stage_form_parse.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +"""큰 편집 폼 깊이 파싱 + PM_* 인쇄폼 ↔ SET_REP 서식 대응.""" +import sys, io, re, pathlib, struct, importlib.util, collections +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace") +spec=importlib.util.spec_from_file_location("pd", r"D:\aislo-wt\sub\resources\knowledge\original\경쟁사 프로그램\STmate 분석\40_스크립트\parse_dfm.py") +pd=importlib.util.module_from_spec(spec); spec.loader.exec_module(pd) +F=pathlib.Path(r"C:\Users\umsan\AppData\Local\Temp\claude\D--aislo-wt-sub\df75230a-b05b-4088-ad34-bb0c9da0a312\scratchpad\forms") + +def walk(n, out, d=0): + if isinstance(n,dict): + pr=n.get("properties") or {} + out.append((d, n.get("class",""), n.get("name",""), pr)) + for c in n.get("children",[]) or []: walk(c,out,d+1) + return out + +for f in ("wBoq","wM_Edit_San"): + p=F/(f+".dfm") + if not p.exists(): print("없음 %s"%f); continue + try: + r=pd.Reader(p.read_bytes()); r.take(4); root=r.component(root=True) + except Exception as e: print("%s 파싱 실패 %s"%(f,e)); continue + ns=walk(root,[]) + print("\n" + "="*96) + print("### %s 컴포넌트 %d개" % (f, len(ns))) + # 그리드 열 제목 + for d,cls,nm,pr in ns: + cols=pr.get("Columns") + if isinstance(cols,list) and cols: + tt=[ (c.get("Title.Caption") or "").replace("\r"," / ").strip() for c in cols ] + fl=[ (c.get("FieldName") or "") for c in cols ] + print("\n ▣ 그리드 %s 열 %d개" % (nm, len(cols))) + for t,fn in zip(tt,fl): + if t or fn: print(" %-26s ← %s" % (t[:26], fn)) + # 액션·버튼 캡션 + caps=[str(pr.get("Caption")) for d,cls,nm,pr in ns + if isinstance(pr.get("Caption"),str) and any(ord(c)>127 for c in pr["Caption"])] + uniq=[] + for c in caps: + c=c.strip() + if c and c not in uniq: uniq.append(c) + print("\n 기능 캡션 %d개" % len(uniq)) + for i in range(0,min(len(uniq),60),3): + print(" " + " ".join("%-28s"%x[:28] for x in uniq[i:i+3])) diff --git a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/README.md b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/README.md index e596dc37..f99a521e 100644 --- a/resources/knowledge/original/경쟁사 프로그램/STmate 분석/README.md +++ b/resources/knowledge/original/경쟁사 프로그램/STmate 분석/README.md @@ -65,6 +65,7 @@ | 24 | **모듈구조 전수** — 46개 export, 계산 공용 라이브러리 73함수, 동글 | | 25 | **설정키 전수와 식템플릿** — 저장키 241종, 간접비 식 26개, 설정 사슬 닫힘 | | 26 | **편집기와 사이클식** — `Cm` 54꼴, 품셈 인자, 식 편집기, 낙찰율 | +| 27 | **계약·실행·기성 단계** — 설계 뒤 네 단계의 계산 구조 | ## 확정된 굵직한 것