889 lines
47 KiB
Markdown
889 lines
47 KiB
Markdown
# 축 C 명세 — 두 축과 그것을 잇는 표
|
||
|
||
작성 2026-09-13 · **브레인(데스크탑 메인)** · 코드 창 둘이 따를 계약
|
||
|
||
> **왜 이 문서가 있나** — 랩탑 메인(1장 축)과 랩탑 서브(3장 구조물도)가 **서로 안 만나면서도
|
||
> 나중에 맞물리게** 하려면 계약이 먼저 있어야 함. `PLAN.md` 는 「무엇을 할 것인가」이고
|
||
> 이 문서는 「그것이 어떤 모양이어야 하는가」임.
|
||
|
||
---
|
||
|
||
## 00. 브레인 인수인계
|
||
|
||
**브레인 지침과 작업 기억은 이 문서가 아니라 `.claude/` 에 있음** (2026-09-13 사용자 확정).
|
||
|
||
| 파일 | 무엇 |
|
||
| --- | --- |
|
||
| `.claude/BRAIN.md` | 브레인일 때 추가로 지킬 것 — 컨텍스트 규율·판정 방식·창 조율 |
|
||
| `.claude/BRAIN_MEM.md` | 지금 상태 — 창 배정·다음 차례·확인해 둔 것·아픈 자리 |
|
||
|
||
⚠ 둘 다 **git 밖**(시놀로지·정션으로 공유)이라 **이력이 없음.**
|
||
**계약·판정처럼 잃으면 안 되는 것은 이 명세와 `PLAN.md` 에 둘 것.**
|
||
|
||
새 브레인이 읽는 차례 — `.claude/BRAIN.md` → `.claude/BRAIN_MEM.md` → **이 명세** → `PLAN.md` 0장·판정 절.
|
||
|
||
---
|
||
|
||
## 0. 한 줄 요약
|
||
|
||
**공종 축**(수량이 붙는 자리)과 **자원 축**(돈이 붙는 자리)을 따로 두고,
|
||
**일위대가가 둘을 잇는 표**로 선다.
|
||
|
||
```
|
||
공종 축 FP-09-03-01 돌쌓기(찰) ← B08 이 수량을 붙임
|
||
│
|
||
└── 일위대가 = 잇는 표 ← 라이브러리가 저장하는 것
|
||
├─ 자원 M-야면석 0.88 ton/㎡
|
||
├─ 자원 L-조경공 0.21 인
|
||
└─ 자원 L-보통인부 0.15 인
|
||
← B09 가 돈을 붙임
|
||
```
|
||
|
||
---
|
||
|
||
## 1. ⚠ 실측 — 지금 무엇이 서 있나 (2026-09-13 브레인 확인)
|
||
|
||
**「자원 축 뒤 패스를 만든다」는 틀린 말임. 이미 있고 이미 돌았음.**
|
||
|
||
| 무엇 | 자리 | 상태 |
|
||
| --- | --- | --- |
|
||
| 공종 축 마스터 | `resources/data_work_item_master/work_item_master_2026-01-01.json` | ✅ 섬 (477공종·456표) |
|
||
| 뒤 패스 코드 | `B09_Estimation/B09_Estimation_ResourceAxis*.py` (6파일) | ✅ 섬 — **매번 메모리에서 새로 돎** |
|
||
| `data_cost_resource_axis/*.json` | 418줄·못맞춤 497 | ⛔ **옛 산출물. 정본 아님** |
|
||
|
||
### ⚠⚠ 2026-09-13 정정 — 앞서 적은 418/497 은 **죽은 파일**이었음
|
||
|
||
**브레인이 틀렸음.** `write_resource_axis` 는 **정의만 있고 부르는 곳이 한 군데도 없음**(확인 완료).
|
||
그 JSON 둘은 옛 마스터로 한 번 돌려 남긴 자취이고, **B09 는 실행할 때마다 메모리에서 새로 맞춤.**
|
||
|
||
**살아 있는 실측** (랩탑 메인 조사, 지금 코드로 돌린 값)
|
||
|
||
```
|
||
맞춘 줄 575 노임 532 · 기계 43 · 자재 0 ⚠ 자재 축이 통째로 안 섬
|
||
못 맞춤 508
|
||
건너뛴 표 참조 63 · 미판정 73 · 계수 19
|
||
```
|
||
|
||
**⇒ 못 맞춘 508 은 한 덩어리가 아니라 둘임.**
|
||
|
||
| 갈래 | 수 | 무엇이 필요한가 |
|
||
| --- | ---: | --- |
|
||
| 카탈로그에 없는 이름 | 271 | **STmate 목록 894개로 풀릴 후보** (11장) |
|
||
| 뭉친 줄 이름 못 풂 등 | 약 230 | **표 읽기 문제** — 목록이 와도 안 풀림 |
|
||
|
||
일감을 **둘로 갈라 잡을 것.** 「목록이 오면 다 풀린다」는 틀림.
|
||
|
||
⭐ **제일 큰 구멍은 자재 0** — 자재 축이 아예 안 서고 있음. 여기부터 볼 것.
|
||
|
||
**산출물 파일의 자리** — 정본은 **메모리 실행**임. `write_resource_axis` 는 **시험·조사용 덤프**로만
|
||
두고 **정본으로 읽지 말 것.** 옛 JSON 둘은 지우지 말고 그대로 두되 **근거로 쓰지 말 것.**
|
||
|
||
---
|
||
|
||
## 2. 공종 축
|
||
|
||
### 코드 모양 — 이미 도는 규약을 그대로 씀
|
||
|
||
```
|
||
FP-<절>-<절>-<절> 예) FP-04-02-02 (벌목, 5m 미만)
|
||
```
|
||
|
||
- 정본은 **품셈 절 번호**. 표의 행은 그 절의 **조건별 변형**(`variant` 칸)임
|
||
- **이름은 표시용, 잇기는 코드로.** 이름으로 맞추는 코드가 남아 있으면 그것이 곧 결함임
|
||
|
||
### ⭐ 어느 품셈 판인가 — 2026-09-14 확인 (조문 근거 있음)
|
||
|
||
**`FP-` 는 산림사업 표준품셈 한 판임.** 건설공사 표준품셈은 **공종 축이 아니라 기계 층에만** 들어옴.
|
||
|
||
```
|
||
공종 축 477/477 FP- · 원천 pum_forest_2026.json (산림청고시 2025-82호, 2026-01-01)
|
||
기계 층 pum_const_2026.json · mach_base_2026.json (건설품셈 제8장 — 취득가·손료계수·연료·운전원)
|
||
빌려 온 몇 곳 「교차 참조」 딱지를 붙임 (예: 뿌리뽑기 밑수 3-9-2)
|
||
```
|
||
|
||
**근거 — 같은 고시 총칙 7**: 「본 품셈에 명시되지 않은 품은 타 부문(토목, 건축, 전기, 기계 등)의
|
||
표준품셈에 명시된 부분의 품을 적용하고, **타 부문과 유사한 공종의 품은 본 품셈을 우선하여 적용**한다.」
|
||
|
||
⇒ 지금 얼개가 이 조문 그대로임. **건설품셈 절번호로 선 공종 줄은 0 건**(소스에 「8-2-8」 참조 0건).
|
||
⚠ 자료를 찾을 때 건설품셈만 보면 「값이 없다」고 잘못 결론 내기 쉬움 — 덤프 운반이 그랬음
|
||
(건설 8-2-8 에는 단위중량·적재용량 표가 없으나 **산림 10-12 [주]에 토사 1.9 · 암 2.4 ton/㎥ · 덤프 15 ton 이 있었음**).
|
||
**막히면 산림품셈 쪽을 먼저 볼 것.**
|
||
- 부모·잎이 있음. ⚠ **「부모에 수량 금지」는 반쪽만 맞았음** — 2026-09-13 정정.
|
||
**부모가 두 모양이고 규칙이 다름**(랩탑 메인 실측).
|
||
|
||
| 모양 | 보기 | 규칙 |
|
||
| --- | --- | --- |
|
||
| **갈래 고르기형** | `FP-10-12`(덤프·사토·표토 운반) · `FP-09-15`(표토제거) · `FP-05-24` · `FP-09-13` | **부모에 붙이지 말 것.** 잎 하나를 골라야 함. **못 고르면 오류로 세울 것** — 조용히 부모에 붙이면 금액 0 이 됨 |
|
||
| **단계 합산형** | `FP-09-04`(파쇄+집토) · `FP-09-05`(절취10%+깍기90%+집토) · `FP-12-38`(유로폼) | **내역 한 줄이 곧 부모임.** 부모에 수량을 붙이되 일위대가는 **잎들의 합**으로 조립 — 부모가 곧 조합 일위대가 |
|
||
|
||
⚠ **가름은 자동 판정하지 말 것.** 마스터에 `parent_mode` 칸을 두고
|
||
기본 `choose_one`, **합산형만 사람이 명시**. 표 모양으로 짐작하면 조용히 틀림.
|
||
⇒ 지금 `FP-09-04`·`FP-10-12`·`FP-09-15` 는 일위대가 제목이 아예 없어 **금액 0** 임(실측).
|
||
|
||
### ⭐ 코드 체계 — 브레인 확정 (2026-09-13, 사용자 지시)
|
||
|
||
**새로 만들지 않았음. 이미 도는 규약에 한 칸을 더한 것임.**
|
||
|
||
#### ① 층 글자 — 이미 코드에 살아 있음. 바꾸지 말 것
|
||
|
||
```
|
||
S-<기계코드> 중기 취득가(천원)
|
||
X-<기계코드> 시간당 중기사용료 · X-<코드>#조합 = 기계 조합
|
||
B-<공종코드>[#<갈래>] 일위대가 예) B-FP-12-01-01#철근구조물
|
||
D-<공종코드> 단가산출 B- 를 D- 로 갈아 끼움
|
||
W-<…> 일식·견적
|
||
```
|
||
|
||
#### ② 공종 축 코드 — 층 글자 **뒤**에 오는 자리
|
||
|
||
```
|
||
FP-<절>-<절>-… 품셈 절번호 (정본, 두 자리 zfill) 예) FP-04-02-02
|
||
AX-<갈래>-<8자리 16진> 우리가 더한 공종
|
||
|
||
갈래 ST 구조물 일위대가 — 라이브러리가 낳는 것
|
||
갈래 WK 품셈에 없는 공종 — 첫 사례 지장목제거
|
||
```
|
||
|
||
예) `B-AX-ST-3f9a2b17` = 어느 구조물 양식이 낳은 일위대가 한 벌
|
||
|
||
#### ③ 자원 축 코드
|
||
|
||
```
|
||
<숫자> 카탈로그 코드 (정본) 예) 1037 보통인부
|
||
AR-<종류>-<8자리 16진> 카탈로그에 없는 자원
|
||
|
||
종류 M 자재 · L 노임 · X 중기 ← PriceKind 글자 그대로. 새 낱말 안 만듦
|
||
```
|
||
|
||
지금 못 맞춘 497줄(`보통휘발유(주연료)` 등)이 여기로 들어감.
|
||
⚠ **단가는 없어도 됨** — 이름·코드만 서면 축은 이어짐.
|
||
|
||
#### ④ 지킬 것 다섯
|
||
|
||
1. **관급은 코드가 아님** — 자재 줄의 **칸**임
|
||
(`material_supply` = `owner_supplied`·`contractor_supplied`·`unknown`, 관급 줄엔 `install_by` 가 더 붙음).
|
||
⇒ 관급용 접두는 **만들지 않음**
|
||
2. **번호는 난수 8자리 소문자 16진.** 발급자를 두지 않음 —
|
||
3단 라이브러리(프로그램·회사·개인)와 창끼리 공유에서도 안 부딪힘.
|
||
만들 때 자기 범위 안 중복만 볼 것
|
||
3. **코드는 동등 비교만.** 사전순 정렬·계층 해석 **금지** —
|
||
`AX`·`AR` 에는 부모·잎이 없음(`FP` 만 있음). 표시 차례는 공종 계층에서 옴
|
||
4. **층 글자는 맨 앞에만** — `B-AX-ST-3f9a2b17` ⭕ · `AX-B-ST-…` ❌
|
||
5. **`#갈래` 는 기존 규약 그대로.** 새 구분자를 만들지 말 것
|
||
|
||
#### ⑤ 왜 이 모양인가
|
||
|
||
- `FP` 는 `CODE_PREFIX = "FP"` 로 이미 박혀 있고 `B-FP-12-01-01#철근구조물` 이 실제로 돎.
|
||
**거기에 `AX` 한 칸만 나란히 세우면 층 글자 로직을 한 줄도 안 고쳐도 됨**
|
||
- 난수를 쓰는 까닭 — 회사·개인 라이브러리가 서로 모르는 채 항목을 만들고 **공유까지 함**.
|
||
일련번호를 쓰면 공유하는 순간 부딪힘
|
||
- 읽기는 **이름 칸**이 맡음. 코드는 식별자일 뿐임
|
||
|
||
---
|
||
|
||
## 3. 자원 축
|
||
|
||
### 한 줄의 모양 — 실물 그대로 (고치지 말 것)
|
||
|
||
```json
|
||
{
|
||
"work_item_code": "FP-04-02-02",
|
||
"resource_kind": "labor",
|
||
"resource_code": "1037",
|
||
"resource_name": "벌목부",
|
||
"resource_spec": "",
|
||
"amount": "2.14",
|
||
"amount_unit": "",
|
||
"variant": "5m 미만",
|
||
"pum_form": "requirement",
|
||
"pum_table_id": "F0087",
|
||
"raw_row_index": 1
|
||
}
|
||
```
|
||
|
||
### 지켜야 할 것 다섯 — 이미 코드 머리에 적혀 있음
|
||
|
||
1. **`pum_form` 을 먼저 볼 것.** `productivity` = **1 ÷ 값** · `requirement` = **값 ÷ 밑수**.
|
||
⚠ **뒤집으면 20배 틀림**
|
||
2. `coefficient`·`reference` 는 **공종이 아님** — 일위대가 항목으로 세우지 말 것.
|
||
`undetermined` 는 **값을 쓰지 말 것**
|
||
3. **규격(`resource_spec`)이 없으면 매칭 성공이 아님.** 「굴착기」와 「굴착기 0.7㎥」는 단가가 다름
|
||
4. 못 맞춘 것은 **빈칸이 아니라 `unmatched` 목록**으로
|
||
5. **자재는 할증 전 값.** 할증은 자재총괄 한 곳뿐
|
||
|
||
### 자원 종류와 단가 층은 **다른 것**
|
||
|
||
헷갈리면 값이 두 배가 되거나 사라짐.
|
||
|
||
| 축 | 값 | 무엇인가 |
|
||
| --- | --- | --- |
|
||
| **자원 종류** (`resource_kind`) | `labor` · `material` · `machine` | 품셈 줄이 무엇을 부르나 |
|
||
| **단가 층** (`PriceKind`) | `M·L·S·X·B·D·W` | 단가가 어느 겹에 사나 |
|
||
|
||
### ⚠⚠ 층 차례 — 2026-09-13 정정. 화살표 방향이 모호했음
|
||
|
||
**조립(참조) 차례는 아래가 맞음.** 앞서 적은 `… → B → D` 는 **거꾸로 읽힐 수 있었음.**
|
||
|
||
```
|
||
L 노임 · M 자재 (카탈로그 — 상세 없이 값이 바로 있음)
|
||
↓
|
||
S 중기취득가(천원) → X 시간당 중기사용료
|
||
↓
|
||
D 단가산출 (Q 식으로 시간당 단가 ÷ Q)
|
||
↓
|
||
B 일위대가 (D 와 카탈로그를 물어 조립)
|
||
```
|
||
|
||
⇒ **D 가 먼저 서고 B 가 D 를 참조함.** 우리 코드는 지금 **D 가 B 를 참조해 뒤집혀 있음**(랩탑 서브 실측).
|
||
⚠ 차례가 뒤집히면 **위상순서·재귀·이중계상 판정이 다 영향받음** — 값 정밀도 고치기와 **따로 뗄 것.**
|
||
|
||
### D 는 **Q 를 쓰는 자리에만** 섬 (2026-09-13 실측)
|
||
|
||
```
|
||
D 가 서는 자리 Q 식으로 시간당 단가를 나누는 기계 공종
|
||
(굴착기 · 도자 · 직접 작업량/다짐 · 암 잎)
|
||
D 가 없는 자리 사람 품만 있는 공종 · 자원축 표 시간(Q 아님) → B 가 X·카탈로그를 바로 물음
|
||
```
|
||
|
||
- `D-<공종>[#갈래]` · **D→X 수량 `1/Q × 몫`** · **B→D 수량 1**
|
||
- STmate 한 `D` 에 **`Q` 가 여럿일 수 있음**(기계조합 호표)
|
||
- ⚠ **「단산 N」 번호는 실제 `D` 가 든 줄에만.** 단가산출이 없는 줄에 번호를 붙이면 **없는 근거를 가리킴**
|
||
- ⚠ **내역이 부르는 코드 축은 `B` 하나로 둠.** STmate 는 순수 기계 공종에서 내역이 `D` 를 바로 부르나
|
||
(봉화 「토사절취 … 산근 19호표」), 금액은 같고(`B→D` 수량 1) **축이 하나여야 인계·골든셋·이중계상이 단순함.**
|
||
⇒ **골든셋 대조에서 STmate 의 `D` 줄과 우리 `B` 줄을 짝으로 알아보게** 해 둘 것
|
||
|
||
---
|
||
|
||
## 4. 일위대가 — 잇는 표
|
||
|
||
- **한 줄** = 공종 코드 하나 + 그에 딸린 자원 줄 여럿
|
||
- 금액은 **어느 층이든 재료·노무·경비 3분할**이고 `합계 = 재료 + 노무 + 경비`
|
||
- **재귀** — 구조물 일위대가(`AX-ST-*`)가 다른 공종의 하위 일위대가로 들어감.
|
||
⚠ 순환 참조 막이 필요 · 깊이 한도는 **사용자 답 대기**
|
||
|
||
---
|
||
|
||
## 5. 별칭표
|
||
|
||
**한 파일에만 둘 것.** 지금 `B08_Quantity_Engine_Handoff_Mapping.py` 등 여러 곳에 흩어져 있음.
|
||
|
||
```
|
||
우리 이름 → 코드 ← 남의 이름
|
||
리핑암 → FP-… ← 파쇄암 (실재 · 코드에 주석으로 있음)
|
||
노면다짐 → FP-… ← 노면고르기 (답 대기)
|
||
```
|
||
|
||
- 방향은 **양쪽 다** — 우리 이름으로도, 실무·품셈 이름으로도 코드를 찾을 수 있어야 함
|
||
- **한 이름이 두 코드에 걸리면 오류로 세울 것.** 조용히 첫째를 고르면 안 됨
|
||
|
||
### ⚠⚠ 2026-09-13 정정 — 별칭에 **범위** 칸이 있어야 함
|
||
|
||
**전역 양방향 사전은 틀림.** 별칭은 **표 범위에서만 참**임.
|
||
|
||
`리핑암 = 파쇄암` 은 **산림품셈 10-11 f 표 안에서만** 성립함 — 우리 「리핑암」은 지반유형
|
||
(캘 수 있는가)이고 품셈 「파쇄암」은 운반할 때의 상태(부서졌는가)라 **발파암도 캐고 나면
|
||
파쇄암**임. 그 표가 토사·파쇄암·발파암을 따로 두었고 10-12 [주]③ 의 토량환산계수가
|
||
**파쇄암 1/1.35 = 암절취(리핑)** 이라 그 표 안에서만 이어짐 (근거는 `B09_Estimation_UnitPrice.py:464~477` 주석).
|
||
|
||
```
|
||
별칭 한 줄 = { from , to , scope }
|
||
scope = 이 별칭이 참인 코드 범위 예) "FP-10-11"
|
||
⛔ scope 없는 별칭은 오류로 세울 것
|
||
```
|
||
|
||
### ⚠ 별칭과 **대체**는 다른 것 — 섞지 말 것 (2026-09-13)
|
||
|
||
| | 무엇 | 어떻게 |
|
||
| --- | --- | --- |
|
||
| **별칭** | **같은 것을 다르게 부름** — 단가가 같음 | 별칭표에 `scope` 와 함께 |
|
||
| **대체** | **대응하는 것이 아예 없어 다른 것으로 갈음** — 단가가 다를 수 있음 | ⛔ 별칭표에 넣지 말 것. **설계가 고르게** 드러낼 것 |
|
||
|
||
가르는 법 — **카탈로그에 원래 이름이 있나** 보면 됨.
|
||
보기) 노임 카탈로그에 `화약취급공` 은 있고 `화약공` 은 없음 ⇒ **표기 차이(별칭 후보)**.
|
||
`소운반인부` 는 **카탈로그에 아예 없음** ⇒ 보통인부로 붙이는 것은 **대체**이지 별칭이 아님.
|
||
**대체는 도메인 판단이라 사용자 확인 자리임.**
|
||
|
||
### ⭐ 후보 넷 판정 (2026-09-13 브레인, 사용자 위임)
|
||
|
||
랩탑 메인이 「범위 별칭 후보」로 올린 넷을 갈랐음. **별칭은 하나뿐임.**
|
||
|
||
| 후보 | 판정 | 까닭 |
|
||
| --- | --- | --- |
|
||
| 화약공 → **화약취급공** | ✅ **별칭** · scope `FP-09-05` 계열 | 「화약취급공」이 건설업 노임 **표준 직종명**이고 품셈이 표 안에서 줄여 적은 것. 같은 사람이라 단가가 갈릴 이유 없음 |
|
||
| 소운반인부 → 보통인부 | ⛔ **별칭 아님 — 「표 읽기」로 옮김** | 품셈 원본에 **0건**이고 어느 사전에도 없음. 표준품셈에서 **소운반은 직종이 아니라 작업 성격**이고 품은 보통인부로 계상함. `FP-12-10`·`FP-12-15` 에서 나온 것으로 보아 **표의 한 칸을 자원 이름으로 읽었을** 가능성이 큼 |
|
||
| 소형브레이커 → (공압식) | ⛔ **별칭 아님 — 「규격 미정 · 후보 2」** | 공압식·전기식은 **다른 장비**이고 단가가 다름. 품셈이 형식을 안 정했다는 뜻 |
|
||
| 공기압축기(3.5㎥/min) → (이동식) | ⛔ **별칭 아님 — 「규격 미정 · 후보 N」** | 품셈은 **용량**으로, 카탈로그는 **형식**으로 부름 — 축이 다름. ⚠ 이동식 목록에 3.5㎥/min 이 있으면 **규격으로 바로 걸림**(별칭 불필요) — 그것부터 볼 것 |
|
||
|
||
⇒ **별칭 1 · 표 읽기 1 · 규격 고르기 2.**
|
||
⚠ 「이름이 안 맞는다」를 전부 별칭으로 풀려 하면 **근거 없이 단가가 붙음.**
|
||
먼저 **표를 잘못 읽은 것인지**, 다음 **규격이 안 정해진 것인지**, 마지막이 별칭임.
|
||
|
||
흩어진 세 벌(`Handoff_Mapping` 의 파쇄암·암절취 · B09 의 파쇄암만 ·
|
||
B08 인계본 `ground_class_aliases` — **B09 가 안 읽음**)을 한 벌로 모으되
|
||
**범위를 붙여 옮길 것.** 범위 없이 합치면 발파암이 리핑암으로 조용히 섞임.
|
||
|
||
---
|
||
|
||
## 6. 이중계상 경계 — 축으로 판정
|
||
|
||
지금은 **주석 경고뿐**임. 코드가 잡게 세울 것.
|
||
|
||
| 규칙 | 판정 자리 |
|
||
| --- | --- |
|
||
| 구조물 터파기·되메우기는 **토공집계로만** | 공종 축 — 같은 물량이 두 공종 코드에 붙으면 오류 |
|
||
| 콘크리트 배합 성분(시멘트·모래·자갈)은 **일위대가만 쪼갬** | 자원 축 — 자재총괄에 배합 성분이 뜨면 오류 |
|
||
| 자재 할증은 **자재총괄 한 곳** | `material_amounts_are_before_surcharge=true` 정책 이미 있음 |
|
||
|
||
원문 규칙은 `docs/raw/plans/2026-09-13b_plan_구컨셉_전문_재편전.md` 8-7절.
|
||
**세우기 전에 반드시 대조할 것.**
|
||
|
||
---
|
||
|
||
## 7. 반올림 — 자리마다 다름 (STmate 실증, 17·18번)
|
||
|
||
⚠ **한 가지로 통일하면 틀림.** 자리마다 다른 것이 실측 결과임.
|
||
|
||
| 자리 | 규칙 | 근거 |
|
||
| --- | --- | --- |
|
||
| **호표 안 성분 소계** | **절사** | 중기사용료 398건 100% · 일위대가 345건 94.2% |
|
||
| **집계표 행 금액** | `ROUND` | 자원 셋(재료비·노무비·경비) **279/279** |
|
||
| **중기시간금액집계표** | **성분마다 반올림한 뒤 합** | **131/144**. ⚠ 합계를 한 번에 반올림하면 107/144 로 떨어짐 |
|
||
| **내역에 실릴 때** | 정수 절사 | 착공내역서 178건 100% |
|
||
| **단가산출 성분단가** | 소수 1자리 절사 | 211건 중 137건 설명 |
|
||
| 내부 계산 | 은행가(최근접-짝수) | STmate 내부. ⚠ 뽑은 엑셀은 사사오입이라 20개 경계 중 10개가 갈림 |
|
||
|
||
### ⭐⭐ 2026-09-14 — 위 실측이 **고시 조문과 그대로 맞았음**
|
||
|
||
**산림청고시 제2025-82호 「산림사업 표준품셈」 1-2-2 「2. 금액의 단위표준」**:
|
||
|
||
| 종목 | 단위 | 지위 | 비고 | 우리 실측과 |
|
||
| --- | --- | --- | --- | --- |
|
||
| 설계서의 **총액** | 원 | **1,000** | 미만버림 | ⚠ **우리는 안 버리고 있었음** — 실무 6건은 여섯 다 `000`, 우리는 `373·695·578·654·341·639`. 기본을 켜는 것으로 판정(2026-09-14) |
|
||
| 설계서의 소계 | 원 | 1 | 미만버림 | ✅ |
|
||
| 설계서의 **금액란** | 원 | 1 | 미만버림 | ✅ 「내역에 실릴 때 정수 절사」와 같음 |
|
||
| **일위대가표의 계금** | 원 | 1 | 미만버림 | ✅ 「호표 안 성분 소계 절사」와 같음 |
|
||
| **일위대가표의 금액란** | 원 | **0.1** | 미만버림 | ✅ 「단가산출 성분단가 소수 1자리 절사」와 같음 |
|
||
|
||
⇒ **STmate 를 재서 얻은 규칙이 법 조문이었음.** 경쟁사를 베낀 것이 아니라 둘 다 같은 고시를 따른 것임.
|
||
|
||
⚠ **총액 줄만 우리가 안 따르고 있었음** (2026-09-14 데스크탑 서브 실측). 기본값이 꺼져 있어(`cut_basis=""`)
|
||
실무 6건의 총공사비 끝 세 자리가 우리 엔진에서만 남음. **기본을 켜되 화면에 근거를 보일 것** —
|
||
2026-09-08 「조용히 깎지 않음」 합의는 근거가 없을 때 정한 것이고, 지금은 고시가 근거임.
|
||
곁에 버그 하나 — 절사 자동보정이 둘째 걸음부터 ÷1.1 을 안 해 경계를 지나쳐 **진동**함
|
||
(울진 신설 `654→999→900→910→909…`). 다섯 건은 첫 걸음에 앉아 안 드러났음.
|
||
|
||
⚠ 「설계서의 소계 1원 미만버림」과 우리 「집계표 행 금액 `ROUND`(279/279)」는 **다른 자리**로 봄 —
|
||
집계표는 설계서 소계가 아님. 같은 자리로 읽을 근거가 나오면 다시 잴 것.
|
||
|
||
**같은 고시 1-2-2 「1. 수량의 단위표준」 [주]**:
|
||
|
||
```
|
||
① 설계서 수량의 단위와 소수자리 표시는 본 표에 따르며, 반올림하여 적용
|
||
② 품목이 제시한 소숫자리가 본 표와 다르면 항목 쪽을 우선
|
||
③ 본 표에 없는 품은 유사품의 규격·단위수량을 참고, C.G.S 단위 원칙
|
||
```
|
||
|
||
⇒ 아래 「규정이 없는 자리 = 소수 2자리」는 **이 표에도 없는 자리에만** 적용할 것.
|
||
표에 실린 품목(관류 길이 m 소수 2 · 수로연장 m 소수 1 · 옹벽 ㎡ 소수 1 …)은 **표가 규정임.**
|
||
|
||
### ⭐ 규정이 없는 자리 — 소수점 2자리가 기본값 (2026-09-13 사용자 확정)
|
||
|
||
**단수처리에 법적 근거가 없음이 확인됐음** — 기재부 **예정가격작성기준 전 조문에
|
||
원단위 절사·관급 올림 조문이 없고**, 국고금관리법 §47 과 **발주청 지침 영역**임(안티그래비티 조사).
|
||
|
||
```
|
||
규정이 있는 자리 그 규정을 따름 (품셈·발주청 지침·STmate 실증)
|
||
규정이 없는 자리 소수점 2자리 · 반올림 ← 기본값. 사용자가 칸으로 바꿈
|
||
```
|
||
|
||
⇒ STmate 관행(절사·은행가)을 따라도 되는 근거가 생겼음. **발주청 지침이 오면 그것으로 덮음.**
|
||
⚠ **붙박이로 박지 말 것** — 사용자가 바꿀 칸으로 둘 것.
|
||
|
||
**식을 접지 말 것 둘**
|
||
|
||
- **노임 시간당 환산** — 식 문자열을 **좌→우 순차 평가**.
|
||
계수로 미리 곱하면 `267,360 × 0.20833… = 55,699.99…` → **55,699** 로 1원 틀림.
|
||
좌→우는 모든 단계가 정수라 **55,700**.
|
||
|
||
⚠⚠ **2026-09-13 정정 — 「18/18 원 단위」는 틀렸음**(랩탑 서브 실측).
|
||
```
|
||
다섯 건 원 미만 절사
|
||
2025 울진소광 0.1 원 미만 절사 (57,077.2 · 49,479.1 · 35,608.3)
|
||
```
|
||
⇒ **자릿수가 프로젝트마다 다름.** 실무 설정값임.
|
||
**프로젝트 설정 칸으로 둘 것 · 기본 0**(원 단위). 붙박이로 박지 말 것
|
||
- **단가산출 Q 식** — `Q = 3600 × q × K × f × E / Cm`.
|
||
⚠ **Q 를 소수 2자리로 먼저 확정한 뒤 나눌 것**(`55,700/15.708 = 3,545.96` ≠ `55,700/15.71 = 3,545.5`)
|
||
|
||
**중기 시간당 사용료 조립** — 손료(경비) · 운전원(노무) · 주연료(재료) · 잡품(재료).
|
||
⚠ **잡품은 수량 × 단가가 아니라 연료비 × 비율의 가산 행**임.
|
||
|
||
---
|
||
|
||
## 8. 검산 계약 — 무엇이 「끝났다」인가
|
||
|
||
**STmate 골든셋 재현이 초록이면 끝.**
|
||
|
||
### ⚠⚠ 2026-09-14 보강 — 초록이 늘 증거인 것은 아님
|
||
|
||
**판정 기준을 받으면, 그 기준이 이 변경을 실제로 잴 수 있는지부터 볼 것.**
|
||
못 재면 그 자리에서 말하고 **잴 수 있는 것을 새로 만들 것.** 브레인이 준 기준도 마찬가지임.
|
||
|
||
드러난 자리 — 인계 수량 자리 맞춤(1-2-2 [주]① 반올림) 때 브레인이 「골든셋 전수 초록」을
|
||
판정 기준으로 줬으나, **골든 금액 시험은 STmate 원본 수량을 `bill_line` 에 바로 넣어
|
||
새 길을 안 거침.** 초록이어도 증거가 아니었음. 랩탑 메인이 이를 알아채고
|
||
**원본 내역 수량 321줄을 자리 규칙에 통과시키는 대조**를 따로 만들어 4줄 빨강을 뽑아냄
|
||
(영월·울진 철근·철근운반 `Ton` 0.264·0.008 을 기본 2자리가 자름 → 철근 kg 정수 = ton 소수 3자리
|
||
환산 + 단위 대소문자 흡수로 321/321). 그 대조를 `test_b09_quantity_digits_golden.py` 로 남김.
|
||
|
||
**재지 못한 것을 잰 척하지 않을 것** — 같은 보고에 「원본 수량 대부분이 정수라 자리 규칙
|
||
전체를 입증하진 못함」이라고 한계를 그대로 적었음. 그것이 옳은 모양임.
|
||
|
||
- 기준점 — 실무 6건 · 내역 1,515행을 **원 단위로 재현한 실증본**
|
||
(`…/STmate 분석/20_분석/16_골든셋_회귀_결과.md`)
|
||
- 시험 자리 — `resources/tester/` (git 추적 대상)
|
||
- **시험 코드는 코드 창이 짜고 판정은 브레인이 함**
|
||
|
||
**⭐ 어느 창에서든 돎** (2026-09-13 확인) — 골든셋 스크립트는 **로컬 원본
|
||
`C:\경영정보(주)` 를 안 씀.** 저장소 안 `resources/knowledge/original/실무문서/` 의 STC·XLSX 만 봄.
|
||
절대경로가 박혀 있던 것을 **24개 스크립트 전부 저장소 뿌리 자동탐색(`_repo_root()`)으로 고쳤고**
|
||
고친 뒤 6건 초록 유지를 확인했음. ⇒ **랩탑에서 그대로 돌릴 수 있음.**
|
||
|
||
| 쓸 것 | 무엇을 하나 |
|
||
| --- | --- |
|
||
| `40_스크립트/golden_regression.py` | **이것 하나면 됨** — 프로젝트 짝짓기부터 직접비·간접비 대조까지 |
|
||
| `40_스크립트/golden_bonghwa_full.py` | 봉화 한 건을 총공사비까지 훑음 |
|
||
| `40_스크립트/revision_direct_cost.py` | 변경설계 |
|
||
|
||
⚠ 로컬 원본이 필요한 스크립트 25개는 **설치폴더(PE·폼·JB) 분석용**이라 검산과 무관함.
|
||
|
||
⚠ 골든셋은 **계산 엔진**을 재는 것이지 **기준자료**를 재는 것이 아님.
|
||
기초단가 원천(자재 57,580 · 노임 460 · 중기 833 · 표준시장단가 4,921건)은 전부 암호화라
|
||
영영 못 가져옴 — 그 자리는 **사용자 수동입력 + 빨간 테두리**로 둠.
|
||
|
||
---
|
||
|
||
## 9. 아직 안 정한 것
|
||
|
||
- 일위대가 **재귀 깊이 한도** — 사용자 답 대기
|
||
- **옆도랑파기 갈래 수**(우리 둘 ↔ 실무 셋) · **노면고르기 ↔ 노면다짐** — 사용자 답 대기
|
||
- **`undetermined` 75표** 판정 — 사람이 봐야 함. 값을 쓰면 뒤집힌 채 들어감
|
||
- **못 맞춘 497줄 잇기** — ⭐ **재료가 생겼음**(2026-09-13). 아래 §11 참고. 남은 것은
|
||
「품셈 이름 ↔ STmate 자재명」 **맞추기**이지 목록 구하기가 아님
|
||
|
||
---
|
||
|
||
## 11. ⭐ 이름·코드 목록 — 확보됨 (2026-09-13)
|
||
|
||
STC 의 `COSTN.DBF` 가 **암호화가 아니라** 코드·명칭·규격·단위가 평문으로 읽힘.
|
||
실무 7건을 합쳐 **서로 다른 코드 894개**.
|
||
|
||
```
|
||
resources/knowledge/original/경쟁사 프로그램/STmate 분석/30_원자료/stmate_code_name_list.csv
|
||
열 : code , name , size , unit ← size 가 곧 우리 resource_spec
|
||
|
||
D 단가산출 273 · M 재료 228 · B 일위대가 158 · X 중기 96
|
||
S 경비 92 · L 노임 37 · W 일식·견적 10
|
||
```
|
||
|
||
곁들여 **노임 직종 사전 106종**이 평문으로 있음 (`ST_U_Convert.CPM` · 28번 §3.1).
|
||
|
||
### ⚠ 그대로 우리 코드로 쓰지 말 것
|
||
|
||
STmate 코드는 `B00001`·`M00042` 꼴로 **층 글자 + 다섯 자리**이고 대시가 없음.
|
||
우리 규약(`B-<공종코드>`)과 **모양이 비슷해 헷갈리기 딱 좋음.**
|
||
|
||
- 우리 자원 코드는 **`AR-<M|L|X>-<8자리 16진>`** 그대로 감
|
||
- **STmate 코드는 별칭표(5장)에 한 줄로 실을 것** — 양방향 조회용·교차 확인용
|
||
- 까닭 — 894개는 **그 7개 프로젝트가 실제로 쓴 것만**임. 배포 전체 카탈로그
|
||
(`JDCODE_M.BSC` 자재 57,580건 등)는 여전히 암호화라 못 읽음.
|
||
남의 내부 번호를 정본으로 삼으면 나중에 빈 자리를 못 메움
|
||
|
||
### ⚠⚠ 규격은 선택이 아니라 **조인 키**임 — 수치 근거 (29번)
|
||
|
||
암호화 기준자료도 **스키마는 평문**이라 뼈대를 잴 수 있었음. 잰 결과:
|
||
|
||
```
|
||
자재 사전 JDCODE_M.BSC 코드 57,580건 ↔ 명칭 1,761종
|
||
같은 이름이 규격만 달리해 평균 33건씩 갈림
|
||
규격 칸 110자 · 단위 사전 59종(자재)·130종(통합) · 분류 4~5단
|
||
```
|
||
|
||
⇒ **이름만으로는 원리적으로 못 맞춤.** 「이름으로 맞추고 규격으로 확인」이 아니라
|
||
**(이름 + 규격) 한 쌍이 키**임. 못 맞춘 497줄의 뿌리가 이 수치로 설명됨.
|
||
|
||
### 쓰는 법
|
||
|
||
1. `size` 칸을 **반드시 같이 볼 것** — 3장 ③ 「규격이 없으면 매칭 성공이 아님」이 여기서 걸림
|
||
2. 출력 XLSX 목록표 시트 6종에서 **317개가 따로 읽힘** — 교차 확인용
|
||
3. 임도에서 실제 쓰는 자재·기계라면 못 맞춘 497줄 중 **상당수가 894개 안에 있을 것**으로 봄.
|
||
맞춰 보고 **남는 것만** 새로 `AR-` 코드를 낼 것
|
||
|
||
---
|
||
|
||
## 12. 납품 규격 — 조달청 공사원가호환규정 (근거, 범위 밖)
|
||
|
||
`System\Valid_Xml.vsl` 이 **조달청 공사원가통합관리시스템 공개 규격 V1.0.5** 전문이었음
|
||
(1,429줄). **STmate 고유가 아니라 국가 표준 납품 규격**이라 우리가 그대로 따르면 됨.
|
||
사본 — `…/STmate 분석/30_원자료/조달청_공사원가호환규정.xsd` · 해설 `20_분석/30_조달청_호환규정_XSD.md`
|
||
|
||
### ⭐ 우리 계약 둘을 국가 규격이 뒷받침함
|
||
|
||
| 우리가 정한 것 | 규격이 요구하는 것 |
|
||
| --- | --- |
|
||
| **산출식을 데이터로 저장**(3장 구조물도) | 제경비항목에 **`적용산식`·`적용산식설명`을 실어 보낼 것** |
|
||
| 제외 구역을 따로 셈 | `직접공사비정보` 에 **`제요율적용제외공종_금액`** 이 박혀 있음 |
|
||
|
||
⇒ 「식을 칸에 담는다」는 우리 취향이 아니라 **납품 요구사항**임. 랩탑 서브에게 이 근거를 줄 것.
|
||
|
||
### ⚠ 손료가 네 갈래인데 우리는 하나뿐
|
||
|
||
```
|
||
규격 E0-주간 · E1-야간 · E2-주야간2교대 · E3-주야간3교대
|
||
우리 E0 만 (17번 §4 손료율 25개 장비)
|
||
```
|
||
|
||
⇒ **야간·교대 손료는 품셈에서 가져와야 함.** 6장 일감으로 세웠음.
|
||
|
||
(기계경비 산출 구간 `H0-일반 · H1-터널 · H2-장대터널 · H3~H5 준설선` 은
|
||
우리가 UI 에서 캔 `RX1NM~RX4NM` 과 **하나도 안 틀리고 같음** — 검증 통과로 봄.)
|
||
|
||
⚠ **XSD 납품 기능 자체는 지금 판의 범위 밖임.** 여기는 **근거**로만 둠.
|
||
|
||
---
|
||
|
||
## 13. ⭐ 식 칸 계약 — 구조물도(3장)와 라이브러리 양식형(4장) 공용
|
||
|
||
**한 계약임.** 구조물도 한 줄이 들고 가는 모양이 곧 라이브러리 양식형 항목의 모양임.
|
||
따로 만들면 라이브러리가 구조물도를 못 낳음.
|
||
|
||
### 한 줄이 들고 갈 칸
|
||
|
||
```json
|
||
{
|
||
"seq": 3,
|
||
"name": "고임돌",
|
||
"spec": "",
|
||
"formula": "AREA * LOOKUP(뒷길이표, L3, '고임돌')",
|
||
"formula_text": "돌쌓기면적 × 고임돌 원단위",
|
||
"refs": { "AREA": 1 },
|
||
"vars": { "L3": 45 },
|
||
"amount": "0.18",
|
||
"unit": "㎥",
|
||
"rounding": { "mode": "floor", "digits": 2 },
|
||
"source": "library"
|
||
}
|
||
```
|
||
|
||
| 칸 | 무엇 |
|
||
| --- | --- |
|
||
| `formula` | **기계가 푸는 식.** 여기가 정본 |
|
||
| `formula_text` | **사람이 읽는 산출 기초.** 조달청 규격의 `적용산식설명` 자리 |
|
||
| `refs` | **앞 줄 결과**를 이름으로 받음 (`AREA` → 1번 줄) |
|
||
| `vars` | 제원 칸 (집계표·라이브러리에서 옴) |
|
||
| `rounding` | **줄마다 다름** — 아래 |
|
||
| `source` | `auto` · `user` · `library` — 줄마다 출처 표시 |
|
||
| `when` | ⭐ **줄이 서느냐** — 거짓이면 그 줄은 **아예 안 남**(0 이 아님) |
|
||
| `destination` | ⭐ **갈 곳** — `earthwork`·`material`·`unit_price`·`reference`·`haul_deduction` |
|
||
|
||
### ⭐ 칸 셋 보강 — 2026-09-13 판정 (랩탑 서브 제안, 셋 다 채택)
|
||
|
||
**Ⓐ `when` — 「0」과 「없음」은 다름**
|
||
|
||
지금 전개도 버림·채집석·고임돌을 **줄 자체를 안 세우는** 방식임(실무 표도 찰쌓기 11줄 ↔ 메쌓기 8줄로 갈림).
|
||
|
||
```
|
||
when 이 거짓 → 그 줄은 산출물에 나가지 않음. 0 으로도 나가지 않음
|
||
```
|
||
|
||
- ⛔ **안 선 줄을 `refs` 로 가리키면 오류로 세울 것.** 조용히 0 으로 치면 뒷줄이 통째로 틀어짐
|
||
- 화면에는 **「안 섬」과 까닭**을 보일 것 — 빈칸으로 두면 빠뜨린 것과 구별이 안 됨
|
||
|
||
**Ⓑ `destination` — 이중계상 경계를 줄 단위로 적는 칸**
|
||
|
||
6장의 규칙이 지금까지 **주석 경고**였는데, 이 칸이 그것을 **데이터로** 만듦.
|
||
|
||
| 값 | 어디로 | 6장 규칙 |
|
||
| --- | --- | --- |
|
||
| `earthwork` | 토공집계 | 구조물 터파기·되메우기는 **여기만** |
|
||
| `material` | 자재총괄 | ⚠ 배합 성분은 오면 안 됨 |
|
||
| `unit_price` | 일위대가 | 콘크리트 배합은 **여기만** 쪼갬 |
|
||
| `reference` | 보여주기만 | 어디에도 안 실림 |
|
||
| `haul_deduction` | 운반 공제 | |
|
||
|
||
⛔⛔ **`destination` 이 빠진 줄은 오류로 세울 것. 기본값을 주지 말 것.**
|
||
까닭 — **이미 그 결함이 실재함.** 자재총괄에서 유로폼·면목·이형철근·떼가
|
||
**축 이름 누락으로 기본값에 빨려 통째로 빠져 있었음**(랩탑 메인 조사).
|
||
기본값은 빠진 것을 **조용하게** 만듦.
|
||
|
||
**Ⓒ 이름은 고정, 종류는 `spec` 으로**
|
||
|
||
돌 줄 이름이 돌 종류(야면석·호박돌·깬잡석…)를 따라 바뀌는 자리 —
|
||
**`name` 은 「돌」로 고정하고 `spec` 에 종류를 담음.** `name_formula` 는 **쓰지 않음.**
|
||
|
||
- 까닭 — 11장에서 **(이름 + 규격)이 조인 키**라고 못 박았음. 이름이 식으로 바뀌면
|
||
**조인 키가 흔들리고 별칭표(5장)도 못 걸림**
|
||
- 종류를 **안 고른 경우**는 `spec` 이 빔 ⇒ 3장 ③ 대로 **매칭 성공이 아님** ⇒
|
||
「**규격 미정 — 후보 N**」 으로 드러낼 것(성공으로 세지 말 것)
|
||
|
||
### 식 언어 — 확정 (2026-09-13 보강, 소광리 53탭 전수 실측 반영)
|
||
|
||
```
|
||
연산 + - * / ^ ( )
|
||
비교 = <> < <= > >= ← IF 조건에 씀
|
||
함수 SQRT · MIN · MAX · SUM · IF(조건, 참, 거짓)
|
||
LOOKUP(표이름, 키, 열이름) 근사 일치 (기본)
|
||
LOOKUP_EXACT(표이름, 키, 열이름) 정확 일치
|
||
참조 refs 의 이름(앞 줄) · vars 의 이름(제원)
|
||
```
|
||
|
||
**실측 근거** — ROUND 105 · INT×100/100 36 · ROUNDDOWN 25 · ROUNDUP 9 ·
|
||
IF 36(비교식 11) · VLOOKUP 13(**전부 근사**) · SUM 47.
|
||
⇒ `SUM` 과 **비교 연산**이 빠져 있었음. 넣음.
|
||
|
||
**`LOOKUP` 은 근사 일치가 기본** — 실무 13건이 전부 근사이고 뒷길이표가
|
||
35/45/55/60 **구간 표**라 그것이 맞음. ⚠ **표는 키 오름차순으로 저장할 것** —
|
||
근사 일치는 정렬을 전제로 함. 정확 일치가 필요하면 `LOOKUP_EXACT` 를 쓸 것.
|
||
|
||
⚠ **LOOKUP 은 반드시 있어야 함** — 실무 표가 뒷길이별 원단위표를 `VLOOKUP` 으로 참조함
|
||
(35/45/55/60 → 채움콘크리트·고임돌·돌중량). 표는 양식과 **한 벌로** 저장할 것.
|
||
|
||
### 지킬 것 넷
|
||
|
||
1. **상수 폴딩 금지 · 적힌 차례대로 풀 것.** 중간값을 미리 접으면 1원이 틀어짐
|
||
(STmate 실증 — `267,360 × 0.20833… = 55,699` ✗ / 좌→우 = `55,700` ✅. 18건 중 14건만 맞았음)
|
||
2. **앞 줄만 참조.** `refs` 는 자기보다 작은 `seq` 만 가리킴 ⇒ **순환이 원리적으로 불가**
|
||
3. **반올림은 줄마다 칸으로.** 한 가지로 통일하면 실무 값과 원 단위에서 갈림
|
||
```
|
||
mode : floor · trunc · round · ceil_away · ceil · none · round_half_even
|
||
실무 한 표 안에 INT(x*100)/100 · ROUND(,2) · ROUNDUP(,2) · 없음이 섞여 있었음
|
||
```
|
||
#### ⚠ 엑셀 함수 ↔ 모드 대응표 — 2026-09-13 보강 (브레인 검산에서 틈 둘 발견)
|
||
|
||
**모드 이름만 보고 옮기면 음수에서 조용히 갈림.** 실무 식을 옮길 때 이 표를 볼 것.
|
||
|
||
| 실무 엑셀 | 뜻 | 우리 모드 | 보기 (-2.5) |
|
||
| --- | --- | --- | --- |
|
||
| `INT` | 아래로 (음의 무한쪽) | `floor` | -3 |
|
||
| `ROUNDDOWN` | **0 쪽으로 버림** | **`trunc`** ⭐신설 | **-2** |
|
||
| `ROUNDUP` | **0 에서 먼 쪽 올림** | **`ceil_away`** ⭐신설 | **-3** |
|
||
| `ROUND` | 사사오입(0 에서 먼 쪽) | `round` | -3 |
|
||
| (없음) | 위로 (양의 무한쪽) | `ceil` | -2 |
|
||
| (없음) | 은행가 | `round_half_even` | -2 |
|
||
|
||
⚠ **`ROUNDDOWN` 을 `floor` 로, `ROUNDUP` 을 `ceil` 로 옮기면 안 됨** —
|
||
양수에서는 같고 **음수에서만 갈리므로 시험을 빠져나감.**
|
||
실무 실측에 `ROUNDDOWN` 25건 · `ROUNDUP` 9건이 있고, 사용자가 식을 고치면 음수가 나올 수 있음
|
||
(잔토정리 = 터파기 − 되메우기 같은 뺄셈 줄).
|
||
|
||
⭐ **`round` = 사사오입(HALF_UP)** 으로 못 박음 — 구조물도는 **실무 엑셀을 본뜨는 표**이고
|
||
엑셀 `ROUND` 가 사사오입임. ⚠ **B09 내부 계산의 은행가 반올림과 헷갈리지 말 것** —
|
||
자리가 다름(7장). 은행가가 필요하면 `round_half_even` 을 따로 쓸 것
|
||
4. **식을 버리지 말 것.** 값만 저장하면 납품 규격(`적용산식`·`적용산식설명`)을 못 맞추고,
|
||
라이브러리 양식형도 못 만듦 (12장)
|
||
|
||
### 양식형 ↔ 고정형
|
||
|
||
| | 양식형 | 고정형 |
|
||
| --- | --- | --- |
|
||
| `formula` | **있음** — 제원을 바꾸면 `amount` 가 다시 남 | **없음**(또는 빈칸) |
|
||
| `amount` | 식이 낳은 값 | **박힌 값** (STmate 내역서에서 뽑음) |
|
||
| `vars` | 제원 칸 | 안 씀 |
|
||
|
||
**칸은 같고 `formula` 유무로만 갈림.** 표를 두 벌 만들지 말 것.
|
||
|
||
---
|
||
|
||
## 14. `#갈래` 는 무엇인가 — 2026-09-13 판정
|
||
|
||
랩탑 메인 지적이 맞음. 일위대가 제목 446 중 **202 가 `B-<코드>#<한글이름>`** 이고,
|
||
지금 B09 는 그 한글을 **정규화해 맞추고** 있음(`normalize_variant_key`).
|
||
2장 「이름으로 맞추면 결함」과 부딪혀 보임.
|
||
|
||
**가름** — 둘은 **다른 자리**임.
|
||
|
||
| | 무엇 | 이름으로 맞춰도 되나 |
|
||
| --- | --- | --- |
|
||
| 공종 축 ↔ 자원 축 | **서로 다른 표를 잇는 것** | ⛔ 안 됨. 코드로만 |
|
||
| `#갈래` | **한 공종 안의 조건 딱지**(토질·암종·규격) | ⚠ 지금은 이름으로 맞추고 있어 약함 |
|
||
|
||
### ⚠⚠ 2026-09-13 정정 — 위 판정이 틀렸음
|
||
|
||
**`variant_key` 를 정본으로 못 씀.** 브레인이 「456표에 다 있다」만 보고 「쓸 수 있다」로 넘겼으나,
|
||
그 값은 **「표 첫 열 값 24개까지」**(`Build_WorkItemMaster.variant_axis`)임.
|
||
|
||
```
|
||
단가표 갈래 제목 294개 중 그 목록에 있는 것 86개 (약 1/3)
|
||
나머지 208 — 머리행에 갈래가 있는 표(벌목 「5m이상~8m미만」)
|
||
두 단 머리(「굴착기(무한궤도)0.2·밀」)
|
||
구간 이름 어긋남(표 「0.3~0.7m이하」 ↔ 목록 「0.3m미만」)
|
||
첫 열이 자원 이름인 표
|
||
```
|
||
|
||
⇒ 지금 정본으로 읽으면 **3분의 2가 폴백으로 떨어짐.**
|
||
|
||
**고쳐 세운 판정 둘**
|
||
|
||
1. **지금은 B09 단가표 제목을 정본으로 둘 것**(모양별 읽기가 이미 만든 것).
|
||
`find_variant_code` 의 **느슨한 맞춤**(수의 짝·구간 고르기)이 쓰일 때 **로그로 남길 것** —
|
||
**조용히 다른 갈래에 붙는 자리가 바로 거기임**
|
||
2. **마스터 생성기가 표 모양(첫 열 / 머리행 / 두 단)대로 `variant_key` 를 다시 뽑게** 할 것 —
|
||
**1장 마스터 일감**. 그것이 서면 그때 정본을 옮김
|
||
|
||
### (지난 판정) 마스터의 `variant_key` 를 정본으로 삼을 것 — ⛔ 위 정정으로 뒤집힘
|
||
|
||
- 마스터 **456표 전부에 `variant_key` 가 이미 있음**(브레인 확인). 그런데 **B09 가 안 읽고**
|
||
변형 문자열에서 매번 다시 만들어 씀
|
||
- B09 가 **`variant_key` 를 읽게** 고칠 것. 문자열 재파생은 **폴백으로만** 남김
|
||
- 폴백이 실제로 쓰이면 **로그로 남길 것** — 조용히 다른 갈래에 붙는 것을 잡으려는 것임
|
||
|
||
---
|
||
|
||
## 15. 판정 — 층이 갈리는 자리
|
||
|
||
### ✅ 콘크리트 축 — 닫음 (2026-09-13, 기술정보DB 근거)
|
||
|
||
**충돌이 아니었음. 층이 둘이라 둘 다 맞음.**
|
||
|
||
```
|
||
공종 콘크리트 타설 (레미콘/기계비빔/인력비빔) FP-12-01 · ㎥ · 품 → unit_price
|
||
자재 레미콘 (25-18-120 등) mat_remicon · 원/㎥ → material
|
||
```
|
||
|
||
| 근거 | 어디 |
|
||
| --- | --- |
|
||
| 「콘크리트 타설(레미콘/기계비빔/인력비빔) · 12-1 · ㎥」 = **공종** | `04_수량분석정보/구조물_수량.md:61` |
|
||
| `mat_remicon` 레미콘 = **자재**, `B3-1 타설` 에 붙음 | `05_원가정보/원가_입력변수_사전.md:77` |
|
||
| 「단가산출서·일위대가: **수량 × 자재단가 = 재료비(GC)**」 | `05_원가정보/자재단가_적용.md:85` |
|
||
| 레미콘은 **사급 조달가 채택** 품목 | `자재단가_적용.md:33` |
|
||
| **레미콘 타설 할증 무근 2 % · 철근 1 %** — 자재 할증 자리 | `04_수량분석정보/수량산출_일반.md:65` |
|
||
|
||
**규칙**
|
||
|
||
1. **타설은 공종** → `unit_price`. **레미콘은 자재** → `material`.
|
||
**같은 물량의 두 얼굴**이지 두 번 세는 것이 아님
|
||
2. ⛔ **배합 성분(시멘트·모래·자갈)을 쪼개는 것은 일위대가만.**
|
||
자재총괄에 배합 성분이 뜨면 **그때가 이중계상**임(6장)
|
||
3. **할증은 자재총괄 한 곳** — 레미콘 무근 2 % · 철근 1 %.
|
||
일위대가 재료비는 **할증 전 값**을 씀
|
||
4. ⇒ 두 벌을 **하나로 합치지 말 것.** 전개식이 `material` 로 보내는 줄과
|
||
관측 원단위가 `unit_price` 로 보내는 줄이 **같은 층인지**만 확인할 것 —
|
||
같은 층에 같은 이름이 둘이면 그것만 하나로
|
||
|
||
### (지난 기록) 콘크리트가 어느 축으로 가나 (랩탑 메인 ⓔ)
|
||
|
||
- **전개식**은 `material` 로 보내고, **관측 원단위 JSON** 은 `unit_price` 로 되어 있어 **두 벌**임
|
||
- 브레인이 근거를 찾지 못함 — 지목된 「확정 3차 ⑥」은 백업 원문에서 **막자갈 식** 건이라 이 건이 아님
|
||
- 한편 코드 주석은 「콘크리트는 `unit_price` 로 감 — **B09 가 배합을 분해**」,
|
||
「배합 성분은 산출물에 나타나면 안 됨」이라 **`unit_price` 쪽으로 기울어 보임**
|
||
- ⛔ **임의로 고르지 않음.** 틀리면 **시멘트·모래·자갈이 두 번 세어지거나 통째로 빠짐**
|
||
- ⇒ **사용자 확인 대기.** 그때까지 양쪽을 **그대로 두고 기록만** 할 것
|
||
|
||
---
|
||
|
||
## 16. ⭐ 일위대가 레시피 사전 350개 — 확보 (2026-09-13)
|
||
|
||
표준일위대가 배포본은 암호화라 못 읽지만 **실무에서 실제 쓴 조합은 출력 엑셀에 평문**으로 남음.
|
||
|
||
```
|
||
resources/knowledge/original/경쟁사 프로그램/STmate 분석/30_원자료/일위대가_레시피.json
|
||
350개 = 일위대가 132 · 단가산출 136 · 중기 82 · 구성행 1,729 (조합당 평균 4.9)
|
||
한 항목 = { 종류 · 명칭 · 규격 · 단위 · Q식 · 품셈근거 · 구성[{명칭·규격·단위·수량}] }
|
||
누락 감사 — 호표 526개 전수, **설명되지 않는 누락 0건**
|
||
```
|
||
|
||
### 우리 설계에 바로 걸리는 것 셋
|
||
|
||
1. **150/350 이 다른 호표를 참조**(2단 이상) — 명세 4장 「하위 일위대가 재귀」가 **실데이터로 확인됨**.
|
||
예) `기슭막이 H=2.0m` → `깬잡석찰쌓기` → `석공 0.08인 + 보통인부 0.04인 + 굴삭기 0.3시간`.
|
||
⇒ **위상순서 계산이 반드시 필요함.** 취향이 아니라 자료가 그럼
|
||
2. ⭐ **규격이 바뀌면 구성 목록은 같고 수량만 비례함**
|
||
(기슭막이 H=2.0 ↔ 2.5 → 2.09/2.61 · 0.31/0.39).
|
||
⇒ **「한 조합 + 규격별 수량표」로 접힘.** 4장 라이브러리 양식형 자료구조가 이 모양이어야 함 —
|
||
규격마다 항목을 새로 만들면 350개가 수천 개로 불어남
|
||
3. **품셈 근거문구를 가진 것은 82개뿐**(브레인 실측 — 그중 「건설표준품셈」을 대는 것 69).
|
||
⇒ **나머지 268개는 근거가 없음.** 현행값으로 **임의 확정 금지**(지침 「미결 임의 확정 금지」).
|
||
그 268개가 곧 **수동 확인 대기 목록**임
|
||
|
||
### ⚠⚠ 읽을 때 함정 둘 — 브레인 실측, 원문 문서에 없음
|
||
|
||
**① `종류`에 따라 `구성.수량`의 뜻이 다름**
|
||
|
||
```
|
||
일위대가 · 중기 수량 = 진짜 수량 (0.4 · 9.95 · 0.2085 · 5.0)
|
||
단가산출 수량 = ⚠ 금액 ("274,978" = 형틀목공 노임)
|
||
```
|
||
|
||
구성행 1,729 중 **511(29%)이 1,000 을 넘음** — 대부분 단가산출 줄임.
|
||
⛔ **일률적으로 수량으로 읽으면 29% 가 금액인 채 들어감.** `종류`로 먼저 가를 것.
|
||
|
||
**② 중기 손료 줄은 단위가 「천원」인데 값은 율임**
|
||
|
||
```
|
||
{ "명칭": "굴삭기(0.2m3)", "규격": "무한궤도", "단위": "천원", "수량": 0.2085 }
|
||
↑ 취득가가 아니라 시간당 손료율
|
||
```
|
||
|
||
⇒ **손료 = 취득가(천원) × 0.2085** 임(7장 중기 조립과 같은 자리).
|
||
단위 칸만 보고 금액으로 읽으면 **취득가 자리에 율이 들어감.**
|
||
|
||
### ⚠ 조합은 가져오되 값은 가져오지 말 것
|
||
|
||
**수량은 그 시점 품셈값임.** 「**조합 = STmate 에서, 값 = 현행 표준품셈에서**」 (사용자 확정 방향).
|
||
레시피는 **뼈대를 베끼는 자료**이지 값을 베끼는 자료가 아님.
|
||
|
||
### 세 자료가 한 벌임
|
||
|
||
| 자료 | 무엇 | 명세 |
|
||
| --- | --- | --- |
|
||
| `stmate_code_name_list.csv` | 자원 **코드·명칭·규격** 894개 | 11장 |
|
||
| `일위대가_레시피.json` | **조합** 350개 | 16장 |
|
||
| `조달청_공사원가호환규정.xsd` | **납품 규격** | 12장 |
|
||
|
||
---
|
||
|
||
## 17. ⚠⚠ 공종 코드는 **품셈 판에 묶임** — 2026-09-13 판정
|
||
|
||
**축 C 의 뿌리에 걸리는 것이라 여기 박음.**
|
||
|
||
`FP-*` 는 품셈 **절 번호**를 그대로 싣는 코드임. 그런데 **절 번호는 판이 바뀌면 바뀜** —
|
||
과거 임도품셈의 절 번호가 현행 **산림사업 표준품셈**(산림청고시 2025-82호, 2026-01-01 시행)에서
|
||
크게 달라졌음이 확인됐음(코덱스 32번).
|
||
|
||
지금 마스터는 `effective_date = 2026-01-01` · `dataset = pum_forest` 한 판임.
|
||
|
||
### 규칙 넷
|
||
|
||
1. **`FP-*` 는 그 판 안에서만 유일함.** 판을 넘어 같은 코드가 같은 공종이라고 **보장되지 않음**
|
||
2. ⛔ **번호만 보고 판을 잇지 말 것.** 판이 바뀌면 **절 대응표**(과거판 ↔ 현행판)로 이어야 함.
|
||
대응표를 만드는 것이 **새 일감**임
|
||
3. **라이브러리 항목은 자기가 본 판을 적을 것** — `AX-ST-*` 는 난수라 판에 안 묶이지만
|
||
**그 안의 공종 참조(`FP-*`)는 판에 묶임**. 항목마다 `pum_edition` 칸을 둘 것.
|
||
안 적으면 품셈이 갱신되는 날 **어느 항목이 흔들리는지 모름**
|
||
4. 판이 바뀐 뒤 **대응이 안 잡힌 참조는 「확인 대기」로 세우고 값을 쓰지 말 것.**
|
||
조용히 이웃 절에 붙으면 품이 통째로 달라짐
|
||
|
||
### ⚠ 「숫자가 다르다」 = 「품이 바뀌었다」가 아님
|
||
|
||
코덱스가 레시피 350개를 현행 품셈과 전수 대조했는데 **확정은 2개뿐**임
|
||
(`단끊기(절취없음)` ↔ 5-16-1 · `제근(밀림)` ↔ 9-21).
|
||
나머지를 **「변경」으로 찍지 않은 판정이 옳음** — 같은 숫자가 없다는 것만으로는
|
||
**규격·토질·장비·일작업량 조건이 달라진 것인지 품이 개정된 것인지 못 가름.**
|
||
|
||
```
|
||
현행 원문까지 확인 2
|
||
절은 찾음·수동대조 11 ← 손댈 순서는 여기부터
|
||
후보 절만 찾음 161
|
||
근거문구만 있음 69
|
||
근거 미기재 107
|
||
```
|
||
|
||
**우리도 같은 태도로 갈 것** — 대조가 안 닫힌 것은 **값을 바꾸지 말고 「확인 대기」로 세울 것.**
|
||
|
||
---
|
||
|
||
## 10. 고칠 때
|
||
|
||
이 문서는 **브레인이 관리함.** 코드 창이 계약을 바꿔야 하면 **고치지 말고 브레인에게 알릴 것** —
|
||
두 창이 각자 고치면 계약이 두 벌이 됨.
|