chore(plan): 받기 앞 공용 문서 두 벌을 dev 와 같은 내용으로 등록
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016VBGFXB9AbJBwXP19z75Qq
This commit is contained in:
@@ -0,0 +1,412 @@
|
||||
# 축 C 1장 첫 일감 — 공종을 이름으로 잇는 자리 전수 조사
|
||||
|
||||
작성 2026-09-13 · **랩탑 메인** · 읽기 전용 조사(코드 무변경) · 계약 문서는 `2026-09-13_축C_명세.md`(브레인 관리)
|
||||
|
||||
> **무엇을 훑었나** — B05·B06·B07·B08·B09 의 `.py`·`.ts` 전부(openwebcad 제외) + `resources/data_*` 매핑·원단위·갈래표.
|
||||
> **물음 셋** — ① 공종을 **문자열로 잇는 자리** ② 흩어진 **별칭** ③ 품셈에 **코드가 없는 공종**.
|
||||
> **읽는 법** — 줄 번호는 조사 시점(`main_laptop_1`, dev 병합 직후) 기준. ✔ 표시는 랩탑 메인이 소스·실행으로 직접 대조한 것.
|
||||
|
||||
**파일 줄임말** — 앞머리 `B08_Quantity_` · `B09_Estimation_` · `B07_DesignDetail_` 는 뗌.
|
||||
|
||||
| 줄임 | 파일 | 줄임 | 파일 |
|
||||
| --- | --- | --- | --- |
|
||||
| `MAP` | `resources/data_work_item_mapping/work_item_mapping_2026-01-01.json` | `MST` | `resources/data_work_item_master/work_item_master_2026-01-01.json` |
|
||||
| `Mapping` | `Engine_Handoff_Mapping.py` | `Rows` | `Engine_Handoff_Rows.py` |
|
||||
| `Prep` | `Engine_Preparation.py` | `Trench`·`Spoil` | `Engine_Handoff_Trench.py`·`_Spoil.py` |
|
||||
| `ESum` | `Engine_EarthworkSummary.py` | `UQ`·`REV` | `Engine_UnitQuantity.py`·`_UnitQuantity_Revetment.py` |
|
||||
| `MAT`·`RM` | `Engine_MaterialSummary.py`·`Router_Material.py` | `HSUM`·`HIN` | `Engine_HaulSummary.py`·`Engine_HaulInputs.py` |
|
||||
| `UP`·`BoQ` | B09 `UnitPrice.py`·`BillOfQuantities.py` | `BoQR` | B09 `BillOfQuantities_Rows.py` |
|
||||
| `RAX` | B09 `ResourceAxis.py` | `STJ` | `B05_Profile/B05_Profile_Structure_Types.json`(레지스트리) |
|
||||
|
||||
---
|
||||
|
||||
## 0. 한눈에
|
||||
|
||||
| 물음 | 결과 |
|
||||
| --- | --- |
|
||||
| ① 이름으로 잇는 자리 | **공종 찾기 12 · 성분 이름 24 · 갈래 이름 22 · 사유·상태 문구 5 · 자원 이름 11** (자리 단위, 4장 표) |
|
||||
| ② 같은 것의 다른 이름 | **지반 갈래 어휘 8벌** · 공종 이름 별칭 **19묶음** · 별칭 사전 **11곳** · 정규화 규칙 사본 **4계열** |
|
||||
| ③ 코드 없는 공종 | **품셈 밖 공종 11** · **구조물 일위대가 후보 17** · 코드는 있는데 줄에 안 붙는 것 **9** |
|
||||
| 생산 쪽 코드 흐름 | **B05·B06·B07 에서 코드가 한 번도 안 흐름**(`FP-` 0건). 코드는 **B08 매핑표에서 처음 붙음** |
|
||||
|
||||
**가장 무거운 것 셋**
|
||||
|
||||
1. **부모 코드에 수량이 붙어 금액이 안 서는 공종이 실재함** ✔ — 흙깎기(리핑암) `FP-09-04` · 덤프·사토·표토 운반 `FP-10-12` ·
|
||||
표토제거 `FP-09-15` 는 일위대가 제목이 **아예 없음**(2장 1-2)
|
||||
2. **자원 축 파일 418/497 은 옛것·안 쓰는 것** ✔ — 지금 코드로 돌리면 **575줄 · 못 맞춤 508**(2장 1-1)
|
||||
3. **이름이 한 글자만 어긋나도 값이 조용히 0·누락되는 자리 9곳** — 그중 **자재총괄에서 유로폼·면목·철근·떼가 빠지는 자리** ✔(7장)
|
||||
|
||||
---
|
||||
|
||||
## 1. ⚠ 명세와 어긋나는 실측 — 브레인 판정 필요
|
||||
|
||||
> 명세는 **고치지 않았음.** 판정 거리만 적음.
|
||||
|
||||
### 1-1. 자원 축 「418줄 · 못 맞춘 497줄」은 낡은 파일임 ✔ (명세 §1·§2③·§9·§11)
|
||||
|
||||
- `write_resource_axis()`(`RAX:665`)를 **부르는 곳이 없음** — 파일은 옛날에 한 번 쓰이고 멈춤
|
||||
- 파일의 `source_master_file.sha256` = `3752af1e…` ≠ 지금 마스터 `34628999…` (마스터가 09-09 에 다시 생성됨)
|
||||
- B09 는 파일을 안 읽고 **일위대가를 만들 때마다 메모리에서 새로 돌림**(`UP:594` → `build_resource_axis`)
|
||||
- **지금 코드 · 지금 마스터로 돌린 값** (2026-09-13, 쓰기 없이 메모리 실행)
|
||||
|
||||
```
|
||||
자원 줄 575 (노임 532 · 기계 43 · 자재 0) 공종 139 개에 붙음
|
||||
못 맞춤 508 (공종 166 개)
|
||||
건너뛴 표 참조 63 · 미판정 73 · 계수 19 ← 명세의 64·75·19 와 다름
|
||||
```
|
||||
|
||||
| 못 맞춘 사유 | 줄 | STmate 목록(§11)으로 풀리나 |
|
||||
| --- | --- | --- |
|
||||
| 카탈로그에 없는 이름 | **271** | ✅ 풀릴 후보 |
|
||||
| 뭉친 자원 줄의 이름을 못 풂 | **167** | ❌ **표 읽기 문제** — 목록이 와도 안 풀림 |
|
||||
| 자원은 알았으나 값을 못 읽음 | 20 | ❌ 표 읽기 |
|
||||
| 숫자 칸 수가 자원 열과 안 맞음(여러 모양) | 25 | ❌ 표 읽기 |
|
||||
| 규격이 없어 같은 이름 중 못 고름 | 7 | △ `size` 칸이 있으면 |
|
||||
| 작업조 표 · 같은 갈래 두 번 · 한 칸 밀림 등 | 18 | ❌ 표 읽기 |
|
||||
|
||||
⚠ **자재 줄이 0** — 관급 자재 카탈로그 6,999건을 싣고 도는데 품셈 자재 이름이 하나도 안 맞음.
|
||||
|
||||
### 1-2. 「부모 코드에 수량을 붙이지 말 것」(명세 §2) — 현행이 어기는 자리 ✔
|
||||
|
||||
부모에는 **두 모양**이 있어 규칙 한 줄로 못 닫음.
|
||||
|
||||
| 공종(우리 이름) | 붙은 코드 | 잎 | 모양 | 일위대가 제목 실측 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 흙깎기(리핑암) | `FP-09-04` 암절취 | 01 암파쇄 · 02 집토 | **단계 합산형** | **없음** |
|
||||
| 흙깎기(발파암) | `FP-09-05` 발파암 | 01 절취(발파 10%) · 02 깍기(90%) · 03 집토 | **단계 합산형** | `-01` 하나뿐 |
|
||||
| 유로폼(옹벽 묶음 조각) | `FP-12-38` | 01 사용횟수 · 02 사용수량 · 03 설치·해체 | **단계 합산형** | `-03#간단/보통/복잡` 만 |
|
||||
| 덤프 운반 · 사토 운반 · 표토 운반 · 뿌리 운반 | `FP-10-12` | 01 토사 · 02 암절취 · 03 발파암 | 갈래 고르기형 | **없음** (`find_variant_code("FP-10-12","토사")` → `None`) |
|
||||
| 표토제거 | `FP-09-15` | 01 답구간 · 02 답외구간 | 갈래 고르기형 | **없음** |
|
||||
| 초류종자살포 | `FP-05-24` | 01 기계/일반 · 02 기계/마사토 | 갈래 고르기형 | 잎 둘 있음, 부모는 없음 |
|
||||
| 구조물터파기(용수 미입력 때) | `FP-09-13` | 18구분 | 갈래 고르기형 | 잎만 있음 |
|
||||
|
||||
- **갈래 고르기형** — 잎 하나를 고르면 됨. `Prep:441-447` 은 `FP-10-12` + `variant_value "토사"` 를 보내는데
|
||||
B09 는 `#갈래` 제목만 찾음(`UP:499-503`) → 잎 `FP-10-12-01` 로 못 내려감 → 「후보」에 머묾(`BoQR:214-233`)
|
||||
- **단계 합산형** — **내역 한 줄이 곧 부모**이고 단가는 잎의 합. 잎에 수량을 붙이면 오히려 틀림
|
||||
⇒ **판정 물음**: 합산형 부모를 「부모에 수량 허용 + 일위대가가 잎을 합침」으로 둘지, `AX-ST` 묶음으로 세울지
|
||||
|
||||
### 1-3. 별칭은 **표 안에서만** 참임 (명세 §5 「양방향 · 한 이름이 두 코드에 걸리면 오류」) ✔
|
||||
|
||||
- `UP:464-477` 원문 주석 — 「리핑암 = 파쇄암」은 **일반적으로 거짓**. 발파암도 캐고 나면 파쇄암 상태임.
|
||||
**산림품셈 10-11 f 표 안에서만** 성립(10-12 [주]③ 암절취 1.35 = 10-11 f 파쇄암 1/1.35)
|
||||
- ⇒ 전역 양방향 사전으로 두면 「파쇄암 → 리핑암」이 발파암 운반에도 걸릴 수 있음.
|
||||
**별칭표 줄에 「어느 코드 범위에서」 칸이 필요함** (예: `리핑암 ↔ 파쇄암 @ FP-10-11`)
|
||||
- 지금 별칭이 **세 벌이고 서로 다름**
|
||||
- `MAP` `ground_aliases` — 리핑암 → [파쇄암, **암절취**]
|
||||
- `UP:478-480` `VARIANT_ALIASES` — 리핑암 → 파쇄암 (**암절취 없음**)
|
||||
- B08 인계본 `ground_class_aliases`(`Handoff.py:170`) — **B09 가 안 읽음**(시험만 읽음)
|
||||
|
||||
### 1-4. `#갈래` 규약 자체가 「이름으로 잇기」임 (명세 §2 ④-5 ↔ §2 「이름으로 맞추면 결함」) ✔
|
||||
|
||||
- 일위대가 제목 **446개 중 202개**가 `B-<코드>#<한글 갈래 이름>` 꼴(`#파쇄암` · `#철근구조물` · `#굴착기(무한궤도) 0.2 · 소`)
|
||||
- B08 이 보낸 원본값을 **공백 제거 + 물결표 통일** 뒤 글자 동등으로 맞춤(`UP:458-503`), 안 맞으면 수의 짝 · 「이하」 구간으로 내려감(`UP:506-537`)
|
||||
- 마스터 표마다 **`variant_key` 칸이 이미 있음(456표)** — B09 는 안 읽고 원문에서 다시 뽑음
|
||||
- ⇒ **판정 물음**: `#갈래` 를 표시 이름 그대로 둘지, 갈래 번호(표 행 차례·`variant_key`)로 옮길지
|
||||
|
||||
### 1-5. 콘크리트가 어느 축인지 두 벌 (명세 §6)
|
||||
|
||||
- 전개식 `UQ:387-393` — 콘크리트·채움·버림콘크리트 → `material`(사용자 확정 3차 ⑥)
|
||||
- 관측 원단위 `resources/data_structure_unit/structure_unit_observed_2026-01-01.json` — 같은 이름 → `unit_price`
|
||||
- 배합 성분 막이 `verify_no_mix_components`(`UQ:1363-1374`)는 **알리기만** 하고 막지 않음
|
||||
|
||||
---
|
||||
|
||||
## 2. 공종이 태어나 흘러가는 길
|
||||
|
||||
```
|
||||
B05 레지스트리(STJ) type_id · 한글 옵션값(흄관·찰쌓기·기초유…) 코드 없음
|
||||
B06 횡단 설계 soil/ripping_rock/blasting_rock · 영문 면적 키 코드 없음
|
||||
B07 횡단도 표 깍기·측구·쌓기·편책·노면다짐… (자기 이름) 코드 없음 · B08 이 안 읽음
|
||||
│
|
||||
▼
|
||||
B08 토공집계(ESum) 「흙깎기」+「토사/연암…」 · 「성토면다짐」… ← 공종이 **이름으로 태어남**
|
||||
B08 구조물 전개(UQ) 성분 이름 「터파기」「기초잡석」「콘크리트」…
|
||||
│
|
||||
▼ Mapping.for_earthwork(이름, 갈래이름) · for_structure(type_id) · kind_codes[한글]
|
||||
MAP 이름 → FP 코드 ← **코드가 처음 붙는 곳**
|
||||
│
|
||||
▼ 인계 줄 = work_item_code + name + variant_value(한글) + ground_class(한글)
|
||||
B09 내역(BoQ) 코드로 찾음 + `B-코드#한글갈래` 로 단가 제목 맞춤 + 이름 부분문자열 검사
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. ① 이름으로 잇는 자리
|
||||
|
||||
표 끝 칸 — **곁에 코드**: 그 자리에서 코드가 이미 있는데 이름을 쓰나. **어긋나면**: 이름이 틀렸을 때 일어나는 일.
|
||||
|
||||
### 3-1. 공종 찾기 — 이름 → 코드 (12)
|
||||
|
||||
| 자리 | 문자열 | 무엇과 무엇을 잇나 | 곁에 코드 | 어긋나면 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| ✔ `Mapping:224-235` `for_earthwork` | (구분, 갈래) 한글 짝 | 집계 줄 → `MAP.earthwork[]` | ❌ | 코드 None → unmatched |
|
||||
| ✔ `ESum:29, 108-221` | 흙깎기·측구터파기·보정량계·성토·성토면다짐·초류종자살포·지장목제거·층따기 | 공종 **이름이 태어나는 곳** | ❌ | — |
|
||||
| ✔ `ESum:96` | 비율 없으면 갈래 이름 「암」 한 줄 | `MAP` 에 「암」 없음 | ❌ | 조용히 unmatched |
|
||||
| ✔ `Trench:42-45, 176, 246, 292` | 구조물터파기·기초잡석·되메우기 | **성분 이름 = 구분 이름**으로 `for_earthwork` | ❌ | 코드 None |
|
||||
| ✔ `Rows:111-118` | `GROUND_SPLIT_GROUPS` · `SLOPE_GROUPS` · `SUBTOTAL_GROUPS` · `HAUL_SUMMARY_GROUPS` | 구분 이름으로 줄 성격 판정 | ❌ | 합계 줄이 내역에 섬 |
|
||||
| ✔ `Rows:88` | `AREA_TIMES_DEPTH_GROUPS {"층따기"}` | 면적×길이 환산 대상 | `FP-09-18` 있음 | 환산 안 됨 |
|
||||
| ✔ `Rows:351-358` + `MAP:198-202` | 메쌓기·찰쌓기 | `bond` 옵션값 → `FP-13-06-01/02` | ❌ | 공종 미정 |
|
||||
| `Engine_Pipe.py:122, 141-143` + `MAP:376-380` | 파형강관·흄관·VR관 | `pipe_kind` 옵션값 → `FP-12-11-0x` | ❌ | 막힘 사유 |
|
||||
| `MAP:226-228` ↔ `Preparation_Ancillary.py:56-60` | 가설창고(컨테이너) | 매핑은 이름 키 · 파이썬은 코드 직접 | 두 벌 | 밑수 대조 누락 |
|
||||
| `MAP:235-267` `pending_user` | 지장목제거 · 흙깎기/측구터파기 암 | 이름 키로 후보 목록 | — | — |
|
||||
| `B09 MachineProductivity_Reference.py:130-133, 159` | 「…와 동일」 원문 → 마스터 **이름** → 코드 | 원문 참조 따라가기 | 원문에 코드 없음 | 이름 겹치면 실패(`:162`) |
|
||||
| `B09 FactorChoices.py:200, 211, 223` | 흙깎기(기계)·노체포설·층따기 | 표시 이름 박힘(코드 키) | ✅ | 표시만 |
|
||||
|
||||
### 3-2. 성분 이름 — 원단위 성분 → 축·공종·자재 (24)
|
||||
|
||||
| 자리 | 문자열 | 무엇과 무엇을 잇나 | 곁에 코드 | 어긋나면 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| ✔ `UQ:377-416` `DESTINATION` | 성분 23개 | 성분 이름 → 축(토공·자재·일위대가·참조) | ❌ `Component` 에 코드 칸 없음 | KeyError 또는 기본값 |
|
||||
| ✔ `REV:361, 481, 511, 584` | `DESTINATION.get(name, "quantity")` | 유로폼·면목·이형철근 D13·떼 → **없는 축** | ❌ | **자재총괄에서 빠짐**(7장) |
|
||||
| `UQ:1004` | `DESTINATION.get(stone_name, "material")` | 돌 종류 → 축 | ❌ | 기본값이 `REV` 와 반대 |
|
||||
| ✔ `UQ:1488` | `== "버림콘크리트"` | 버림 줄 → 기초잡석 줄 산출 | `FP-12-25` | **기초잡석 줄 사라짐** |
|
||||
| `UQ:1601` · `HIN:43-44, 104, 106` | 채집석 · 잔토처리 | → 사토 공제 · 유토곡선 입력 | ❌ | **0 으로 감** |
|
||||
| ✔ `Trench:165, 218-233` | 터파기·되메우기·잔토처리·기초잡석 | `destination=="earthwork"` + 이름 | 매핑엔 있음 | 줄 안 섬 |
|
||||
| `REV:455-457` | 원문 「바닥파기」를 「터파기」로 개명 | 토공 축에 닿으려고 이름을 맞춤 | ❌ | 주석에만 있는 의존 |
|
||||
| ✔ `Rows:320-330` + `MAP:160, 174, 195` + `UQ:751, 934` | 돌쌓기·큰돌쌓기 | `billing_component` 이름 → ㎡ 수량 | 코드 있음 | **㎡ 수량 잃음** |
|
||||
| ✔ `Rows:476, 529` | 콘크리트·버림콘크리트·레미콘 | 타설 대상 성분 | ❌ | 타설 줄 누락 |
|
||||
| ✔ `Mapping:128, 369-379` + `MAP:349` | 이형철근·원형철근·철근(앞머리) | 성분 이름 → 철근/무근구조물 | ❌ | **무근으로 조용히** |
|
||||
| ✔ `MAP:279-322` + `Mapping:305-319` | 콘크리트·버림콘크리트·합판거푸집·유로폼·이형철근 D13/D16·기초잡석 | 묶음 조각 ← 성분 이름 | 조각은 코드 | 조각 물량 0(`MAP:327` 자인) |
|
||||
| `UQ:1372` · `:421-423` | 시멘트·모래·자갈… 정확 이름 | 배합 성분 막이 | ❌ | 표기 변형이면 통과 |
|
||||
| ✔ `MAT:115, 137, 234-237` | 이형철근 D13/D16→이형철근 · 콘크리트류→레미콘 | 성분 → 할증표 이름 | ❌ | 「할증률 미확보」 |
|
||||
| ✔ `MAT:325` | `rate_for(lookup)` 조건 없이 부름 | 레미콘 무근/철근 · 철근 복잡 | — | **늘 기본 율**(7장) |
|
||||
| `MAT:271-273` | 키 `(name, unit)` | 규격(채움콘크리트 180/210 · 관경) 버림 | ❌ | 다른 규격이 합쳐짐 |
|
||||
| `MAT:316` · `MatGrid.ts:335-357` | 자재 이름 키 | 관급/사급 선택 저장 | ❌ | 이름 바뀌면 선택 고아 |
|
||||
| ✔ `RM:265` | `.endswith("규준틀")` | 준비공 줄 → 규준틀 자재 | `FP-11-02/03` 곁에 있음 | **규준틀 자재 전부 빠짐** |
|
||||
| `Prep:459-463, 468, 485, 509` ↔ `B08_Quantity_UI_Page.ts:131-141` | 각재 50×50 · 판재 T12 · 못 · 비탈 규준틀 | 재료 이름·손율·준용 주석 | `FP-11-02` | 사용자 값 무시 |
|
||||
| `Engine_Formwork.py:30, 97` | 합판거푸집·유로폼·문양거푸집·거푸집 | 성분 → 전용 횟수 | 매핑엔 있음 | 횟수 없음 |
|
||||
| `Engine_ObservedUnit.py:53-64, 117-131` | 반중력식·A-TYPE·「800」 · 단위 m/㎡ | 옵션값 ↔ 관측표 규격 · 단위 → 배율 | ❌ | 800.0≠"800" · **모르는 단위 ×1** |
|
||||
| `UQ:1230, 1239` | 「A-TYPE+집수정」 | 날개벽 옵션 → 이중계상 경고 | ❌ | 경고 사라짐 |
|
||||
| B09 `MaterialCatalog.py:80-95` | 이름·규격 정확 일치 | B08 자재 → 관급 품목 코드 | ❌ 인계 자재에 코드 없음 | 못 찾음 |
|
||||
| B09 `Guards.py:230, 255-259, 272, 283, 293-297` | 물빼기파이프·물구멍·고임돌·채움콘크리트 · 「큰돌쌓기」 in source | 자재 이름 · 공종 이름 부분문자열 | 공종 쪽은 `FP-13-06` | 가드 빗나감 |
|
||||
| B07 `Engine_Standard_Sheet.py:79-86, 102-120` · `Router_Standard.py:114` | `sheet_key` = json(type_id·높이·옵션) · 성분 이름 | 표준도 장 ↔ 편집 저장 | ❌ | 편집 고아 |
|
||||
|
||||
### 3-3. 갈래 이름 — 지반·관종·구조물 종류 (22)
|
||||
|
||||
| 자리 | 문자열 | 무엇과 무엇을 잇나 | 곁에 코드 | 어긋나면 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| ✔ `Rows:49-61` + `Mapping:122` | 연암… + ripping/blasting → 리핑암·발파암 | 사용자 갈래 → 매핑 갈래 이름 | ❌ | 「시공법 미지정」 |
|
||||
| ✔ `Rows:55` · `Handoff.py:178` | `== "토사"` | 토사 판정 | ❌ | 안내 목록 틀림 |
|
||||
| ✔ `Rows:260-261` | `variant_value = "리핑암"` | 운반 갈래 → B09 `#파쇄암` | 부모 코드만 | 별칭 없으면 단가 없음 |
|
||||
| ✔ `Spoil:57, 168-169` | ea/rr/br → 토사·리핑암·발파암 · **`variant_axis None`** | 사토 운반 갈래 | ❌ | 운반 줄과 모양이 다름 |
|
||||
| ✔ `Prep:441-447` | `FP-10-12` + 「토사」 | 표토 운반 갈래 | 부모만 | **금액 안 섬**(1-2) |
|
||||
| ✔ `Trench:58-60, 68-79` | soil/ripping_rock/blasting_rock · 육상/용수 · 0~1m | 세 축 **자리 셈**으로 잎 코드 조립 | 부모 | 품셈 차례 바뀌면 조용히 틀림 |
|
||||
| `Trench:106-111` · `UQ:820-821` · B06 `UI_Cross_Excavation.ts:30-35` · B07 `Engine_Cad_StandardFigure.py:193-195` | 기초유·기초버림 | 옵션값 → 기초 깊이 | ❌ | 비탈분만 셈 |
|
||||
| ✔ `UP:483-537` `find_variant_code` | 정규화 갈래 이름 · 수의 짝 · 「이하」 | 원본값 → `B-코드#갈래` | 부모까지만 | 후보에 머묾 |
|
||||
| `B09 MachineProductivity_Dozer.py:343-355, 410-418` | `"암" in label` · `.get("토사")` | f 표 파쇄암/발파암 ↔ E 표 암석 | ❌ | 계수 빠짐 |
|
||||
| ✔ `BoQ:507-510` | `"깎기" in name or "절취" in name` | 줄 이름 → 총 절토량(운반 ≤ 절토 검산) | ✅ 코드 곁에 있음 | 검산 틀림 |
|
||||
| ✔ `BoQR:31-36` | `row.name == item.name` | 운반 줄 이름(`"dozer 운반"`) → 첫 줄 단가 | ✅ | **토사·리핑암 줄 이름이 같아 엉뚱한 단가** |
|
||||
| B09 `QuantityDigits.py:30-63, 76-85` | 공사연장·떼·돌쌓기·옹벽·콘크리트·철근 부분문자열 | 줄 이름 → 소수 자리 | ✅ | 자리수 틀림 |
|
||||
| `HSUM:41-43, 192-198` | 토사·리핑암·발파암 차례 목록 | 운반 줄 갈래·정렬 | ❌ | 끝으로 밀림 |
|
||||
| `Engine_EarthworkTable.py:59, 181` | `factors.get(kind) or factors["soil"]` | 저장 암 종류 → 환산계수 C | ❌ | **토사 계수로 조용히** |
|
||||
| B06 `UI_Cross_Design.ts:80-84` · `Router_Design.py:189` | 「암」이면 모두 ripping_rock · 기본값 ripping_rock | 지반유형 저장 | ❌ | `FP-09-03-02` ↔ `FP-09-04` 갈림 |
|
||||
| `B08_Quantity_UI_Page.ts:408-431` · `Router_Earthwork.py:141-142` | 「암」·「토사」 · 암 갈래 이름 키 | 입력 칸 · `rock_ratios_pct` 키 | ❌ | 세트 바꾸면 고아 |
|
||||
| ✔ `Mapping:243-257` · `MAP.structure[]` | `type_id` | 구조물 → 공종(영문 id 가 공종 대리) | ❌ | unmatched |
|
||||
| `REV:29-32, 63-85, 160, 263` | 돌쌓기(찰)·돌붙임(메)·「돌」·`spillway == "없음"` | 옵션값 → 계수·차감 | ❌ | 「없음」 외 글자면 **차감됨** |
|
||||
| `UQ:97, 134, 221, 479, 519, 695` | 야면석·호박돌 · 성토/절토 · 찰/메 · 「40~60」 | 옵션값 → 표 키 | ❌ | 기본값 · 물결표 불일치 |
|
||||
| B06 `Engine_Structures_Wall.py:33-39` ↔ `common_util_structure_walls.ts:56-62` | type_id → 돌쌓기(찰)/(메) · TS `includes("찰")` | 벽 높이 한계 | ❌ | 큰돌쌓기가 bond 무관하게 「메」 |
|
||||
| B05 `STJ` `pipe_kind`·`bond`·`foundation`·`inlet_type`·`wing_wall_type` | 한글 옵션값 | B08 로 가서 코드·갈래가 됨 | ❌ | 위 각 줄 |
|
||||
| B05 `Structures_Schema.py:120-122` · `Engine_Sections.py:198-207` · `Structures_Migration.py:53, 64-78` | 측점 이름표 `"{관종} D{관경}"` · 한글 이름 집합 | 측점 식별 | ❌ | 이관 누락 |
|
||||
|
||||
### 3-4. 공종 밖 문자열 — 사유·상태 문구가 판정 키 (5)
|
||||
|
||||
| 자리 | 문자열 | 무엇을 가르나 |
|
||||
| --- | --- | --- |
|
||||
| ✔ `Rows:295-304` `blocked_of` | 「입력되지 않았습니다」·「자료에 없습니다」·「산출식이 아직 없습니다」 | 사람 말 문구 조각 → 막힘 갈래 |
|
||||
| `Prep:629-630` · `Engine_Preparation_Status.py:3-13` | `status == "값 있음"` | 한글 표시 문구가 상태값 |
|
||||
| B09 `UI_Page.ts:318-319` | `note === L("…Adopted")`(채택) | 서버 문구 → CSS (곁에 `key` 있음) |
|
||||
| B05 `STJ:490` · `RM:73-76` · `common_util_structure_lengths.py:73` | `design_owner == "횡단 설계"` | 한글 문구가 건너뛰기 깃발 |
|
||||
| B07 `Engine_Cad_Table.py:24-58` → manifest `quantity_table(s)` | 깍기·편책·노면다짐… | **읽는 곳 없음**(막다른 길) |
|
||||
|
||||
### 3-5. 자원 이름 — B09 자원 축 (11)
|
||||
|
||||
품셈 칸에는 코드가 없어 **이름 잇기가 불가피한 자리**가 대부분임. 「곁에 코드」가 ✅ 인 줄만 고칠 거리.
|
||||
|
||||
| 자리 | 무엇 | 곁에 코드 |
|
||||
| --- | --- | --- |
|
||||
| `RAX:124-143, 321-350` | 품셈 칸 → 공백 지운 이름 색인 → 카탈로그 코드(규격은 동률 깨기) | 불가피 |
|
||||
| `B09 MachineProductivity.py:158-185` | 기계 별칭 → 이름 포함 → 궤도 낱말 → 용량 | 불가피 |
|
||||
| `B09 ResourceAxis_Transposed.py:278-302` | 뭉친 칸 `startswith` | 불가피 |
|
||||
| `B09 MachineProductivity_Reference.py:233-255` | 「대형브레이커(㎥/hr)」 부분문자열 | 불가피 |
|
||||
| `B09 MachineProductivity_Dozer.py:205-211` | `"습지 불도저"`·`f"불도저({궤도})"` 조립 후 `==` | △ 코드표로 대체 가능 |
|
||||
| `B09 ResourceAxis_ChooseOne.py:148-151` | 같은 이름 다른 규격 감지 | △ 코드 앞머리 |
|
||||
| `UP:157, 290-293` | 브레이커·리퍼·집게 낱말 → 부착장비 | ✅ 코드 앞머리가 `:205` 에 이미 있음 |
|
||||
| `UP:647-661` | 카탈로그 기계 이름 ⊂ 줄 이름 | 불가피 |
|
||||
| `B09 MachineOperating.py:46, 157-169` | 덤프트럭·트럭·트레일러 → 운전 직종 | ✅ 기계 코드 앞머리 |
|
||||
| `B09 Lists_Sources.py:159-164` | 건설기계운전사… 이름 → A10 표 | ✅ 노임 1048/1049/1050 |
|
||||
| `RAX` `ResourceCatalog.aliases` | **읽어 오고 안 씀** | — |
|
||||
|
||||
---
|
||||
|
||||
## 4. ② 흩어진 별칭
|
||||
|
||||
### 4-1. 지반 갈래 어휘 — **8벌**
|
||||
|
||||
| # | 어휘 | 쓰는 자리 |
|
||||
| --- | --- | --- |
|
||||
| 1 | `soil` · `ripping_rock` · `blasting_rock` | B06 `Section_Schema.py:44` · `config_system_design.py:335-339` · `Trench:58` |
|
||||
| 2 | 토사 · 리핑암 · 발파암 | `MAP.earthwork` · `ESum` · `HSUM:41` · `Spoil:57` · `B08_Quantity_UI_ConversionFactors.ts:39-43` |
|
||||
| 3 | `ea` · `rr` · `br` (`_m3`) · EA/RR/BR | `HSUM:41` · `Spoil:57` · `Router_Earthwork.py:189` · `common_util_mass_haul_balance.ts:414-423` · locale |
|
||||
| 4 | 암절취 · 발파암 (품셈 절 이름) | `MST` 9-12·10-12·9-13 잎 · **`UQ:1399-1403`·`HIN:130` 은 ripping_rock → 「암절취」** (1·2벌과 충돌) |
|
||||
| 5 | 파쇄암 (품셈 10-11 f 표) | `UP:478-480` · `MAP.ground_aliases` · `Dozer` |
|
||||
| 6 | 풍화암 · 연암 · 보통암 · 경암 · 「암」 | `config_system_design.py:389-392` · `common_util_project_settings.py:57-61` · `ESum:96` |
|
||||
| 7 | `ripping` · `blasting` (시공법) | `Mapping:122` |
|
||||
| 8 | 암석 (품셈 E 표) | `Dozer:343-355` |
|
||||
|
||||
**기본값도 갈림** — B06 `Router_Design.py:189` ripping_rock · `B06 Engine_SpoilFill.py:195` soil · B07 `Router_Support.py:352` soil · `Engine_EarthworkTable.py:42` ripping_rock.
|
||||
|
||||
### 4-2. 공종 이름 별칭 — 19묶음
|
||||
|
||||
| 같은 것 | 이름들 (자리) |
|
||||
| --- | --- |
|
||||
| 흙깎기 | 흙깎기(`ESum`) · **깍기**(B07 `Engine_Cad_Table.py:32`, 오기) · 절토(locale) · 토사깍기(`MST` 9-3) |
|
||||
| 측구터파기 | 측구터파기 · 측구(B07) · 측구(옆도랑) · 옆도랑 · `ditch_side` — **갈래 수 답 대기** |
|
||||
| 성토 | 성토 · 쌓기(B07) · 노체포설(`MST` 9-16-1) · `embankment`·`fill_area_m2` |
|
||||
| 노면다짐 | 노면다짐(B07) · 노면고르기(실무) · 노체다짐(9-16-2) — **B08 줄 없음 · 답 대기** |
|
||||
| 초류종자살포 | 초류종자살포(성토면/절토면) · 성토파종/절토살포(B07) · 법면보호공(종자파종) · 「초류종자 살포」 · 씨앗뿜어붙이기(`MST` 5-24) · `seed_spray_*`·`slope_protection` |
|
||||
| 지장목제거 | 지장목제거 · `tree_removal` · `obstacle_removal` · 뿌리뽑기+잡관목제거(실무 두 줄) |
|
||||
| 층따기 | 층따기 · `benching` · `bench_cut` |
|
||||
| 면고르기 | 면고르기 · `grading_*` · `face_dressing` |
|
||||
| 제근 | 제근 · `grubbing` · 제근·뿌리다듬기 |
|
||||
| 운반 | 무대(종방향유용토)/도자운반/덤프운반(`ESum:238`) · `free_haul`/`dozer`/`dump_truck` · 종무대/**도쟈**/덤프(locale 오기) · 불도저 운반/덤프 운반(`MST`) · **「dozer 운반」**(인계 줄 이름 `Rows:237`) |
|
||||
| 사토장 | 사토장 · 유용토운반작업장(구 사토장) · `spoil_bank`/`spoil_fill` · 사토 |
|
||||
| 레미콘 | 콘크리트 · 레미콘 · 레디믹스트 · `ready_mixed` |
|
||||
| 집수정 | 집수정(`MAP:185`) · 유입부 집수정(`UQ:1223`) · 배수관 유입부 집수정(`Wording.py:29`) |
|
||||
| 가설창고 | 가설창고(컨테이너)(`MAP`·`Ancillary`) · 가설창고(개소)(locale) |
|
||||
| 기슭막이·대피로 | 기성막이(옛) ↔ 기슭막이 · 대피로 ↔ 대피소 — py·ts 두 벌(`Structures_Migration.py:44` · `B05_Profile_UI_Page.ts:96`) |
|
||||
| 배수관 | 배수관 · 배관 · 배수시설 · `"{관종} D{관경}"` · 관종 흄관/VR관/파형강관 ↔ config 이중벽관/삼중벽관/파형강관(`Section_Common.ts:69` 는 config 이름만 앎) |
|
||||
| 돌쌓기 | 돌쌓기(찰/메) · 돌(찰/메) · 돌붙임(찰/메) · 찰/메쌓기 — `includes` 로만 붙음 |
|
||||
| 규준틀 재료 | 각재 50×50 ↔ 각재 · 판재 T12 ↔ 판재 (할증표 이름과 안 맞음) |
|
||||
| 철근 | 철근 현장가공 및 **조립**(`MAP`) ↔ **조림**(`MST` FP-12-03, 원문 오기) · 이형철근 D13/D16 ↔ 이형철근 |
|
||||
|
||||
### 4-3. 별칭 사전·이름표 자리 — 11곳
|
||||
|
||||
| # | 자리 | 무엇 | 비고 |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `MAP.ground_aliases` | 리핑암 → 파쇄암·암절취 | 공식 |
|
||||
| 2 | `UP:478-480` `VARIANT_ALIASES` | 리핑암 → 파쇄암 | 1과 다름 |
|
||||
| 3 | `Handoff.py:170` `ground_class_aliases` | 1을 인계본에 실음 | **B09 안 읽음** |
|
||||
| 4 | `B09 MachineProductivity.py:53-59` | 유압식백호우·백호·굴삭기 → 굴착기 | BACK-HOE·B/H 없음 |
|
||||
| 5 | `B09 ResourceAxis_UnitBasis.py:50, 111` | (FP-13-02-04, 인부) → 보통인부 | 코드 범위 있음 ⭕ |
|
||||
| 6 | `B09 MachineProductivity_Reference.py:36, 92-93` | 용수 → 육상 | 이름 고쳐 쓰기 |
|
||||
| 7 | `MAT:234-237` | 이형철근 D13/D16 · 콘크리트류 → 할증표 이름 | D 규격 둘뿐 |
|
||||
| 8 | 운반 이름표 — `ESum:238` · `SummaryGrid.ts:85-89` · locale · B07 `Engine_Cad_MassHaul.py:100-104` | 4벌 | |
|
||||
| 9 | 지반 이름표 — `HSUM:41-43` · `Router_Earthwork.py:189` · `ConversionFactors.ts:39-43` · `UQ:1399-1403` · `HIN:130` | 5벌, **값이 서로 다름** | |
|
||||
| 10 | 구조물 이름표 — `STJ name` · `Wording.py:22-38` · `B05 Page_Helpers.ts:239-245` · `B07 Engine_Cad_Plan.py:74-78` · `Box_Panel.ts` · `Ford_Panel.ts` · locale | 6벌 이상 | |
|
||||
| 11 | 관급·타설 이름표 — `MAT:70-83` ↔ `MatGrid.ts:216-226` · `UI_Page.ts:223-227` ↔ locale `:727-729` · `masonry_class` JSON ↔ `MAP` bond_codes | py·ts 두 벌씩 | |
|
||||
|
||||
### 4-4. 정규화 규칙 사본 — 4계열
|
||||
|
||||
| 계열 | 사본 | 어긋남 |
|
||||
| --- | --- | --- |
|
||||
| 물결표·붙임표 | `RAX:152`(단일 정본이라 선언) · `B09 FactorChoices.py:43` · `B09 MachineProductivity_Reference.py:56` · `ThreeAxis.py:52` · `MachineOperating.py:138` | `FactorChoices` 는 `~` 빠짐 · `Reference` 는 `∼`·`‐` 빠짐 · 붙임표를 범위로 보는 곳과 뺄셈으로 보는 곳이 갈림 |
|
||||
| 공백 제거 | 약 15곳 | `split()`(모든 공백) ↔ `replace(" ", "")`(ASCII 공백만) 두 방식 |
|
||||
| 단위 표기 | `Engine_BasisUnit.py:27-37` · `BoQR:452-470` · `ResourceAxis_UnitBasis.py:44` · `MachineProductivity.py:191` · `ResourceAxis_Sources.py:160, 179` | 5벌. `MAT`·`ObservedUnit` 은 BasisUnit 안 씀. kg/㎏ 둘 다 쓰임 |
|
||||
| 계수 기호 k·f·E·Cm | `Reference.py:39-47` = `FactorChoices.py:46-54` · `MachineProductivity.py:45-48` | 3벌 |
|
||||
|
||||
### 4-5. 매핑표 밖에 박힌 공종 코드 — 두 번째 코드 장부
|
||||
|
||||
| 자리 | 코드 |
|
||||
| --- | --- |
|
||||
| `Prep:174, 189, 199, 291, 314, 317, 368, 388, 441, 443, 533, 553` | FP-09-15 · 09-21 · 08-11 · 14-02 · 09-20-02 · 10-12 · 11-02 · 11-03 |
|
||||
| `Preparation_Ancillary.py:59` | FP-11-01 (`MAP` 과 두 벌) |
|
||||
| `resources/data_masonry/masonry_class_2026-01-01.json:46-53` | FP-13-06-01/02 (`MAP` 과 두 벌) |
|
||||
| B09 `Transport.py:41-60` · `BasisSheet.py:146` | FP-10-04 (+ 지어낸 갈래 `#트레일러20ton`) · 146 은 상수 대신 글자 |
|
||||
| B09 `KnownGaps.py` · `FactorChoices.py:198-234` · `Compaction.py:48-71` · `WorkItemUnit.py:147-164` | 원문 [주] 를 코드 키로 옮겨 적은 곁표 |
|
||||
|
||||
---
|
||||
|
||||
## 5. ③ 품셈에 코드가 없는 공종
|
||||
|
||||
갈래 칸은 **후보 제안**임(명세 §2 ② `AX-ST`·`AX-WK` 기준). 확정은 브레인·사용자.
|
||||
|
||||
### 5-1. 품셈 밖 공종 — `AX-WK` 후보 (11)
|
||||
|
||||
| 공종 | 지금 식별 | 자리 |
|
||||
| --- | --- | --- |
|
||||
| 지장목제거 — 뿌리뽑기 · 잡관목제거 | 이름 · 코드 None · `pending_user`(FP-04-01/02/03 후보) | `ESum:181-215` · `Prep:121-142` · `MAP:239-246` |
|
||||
| 도수로·산비탈수로 (`chute`) | type_id · `pending_user` | `STJ:608` · `MAP:256` |
|
||||
| 절토사면 배수로 (`slope_drain`) | type_id · `pending_user` | `STJ:640` · `MAP:262` |
|
||||
| 노출형 횡단수로 (`cross_drain_exposed`) | type_id · 매핑 없음 | `STJ:451` |
|
||||
| 콘크리트 포장 (`pavement_concrete`) | type_id · 매핑 없음 | `STJ:2347` |
|
||||
| 편책 | B07 표 칸만 · 「별도 일위대가 필요」 | B07 `Engine_Cad_Table.py:48` · `Cross_Quantity.py:28` |
|
||||
| 노면다짐 | B07 표 칸만 · B08 줄 없음 · 답 대기 | B07 `Engine_Cad_Table.py:57` |
|
||||
| 국가지점번호판 · 임도 안내판 · 차단기 · 수방대책 자재 | `key` + 이름 · `code None` | `Preparation_Ancillary.py:24-73` |
|
||||
|
||||
### 5-2. 구조물 — `AX-ST` 후보 (17)
|
||||
|
||||
| 구조물 | 지금 식별 | 자리 |
|
||||
| --- | --- | --- |
|
||||
| 옹벽 | `composite` 묶음(조각은 FP) | `MAP:273-328` |
|
||||
| BOX암거 · 세월교 · 소형사방댐 · 소단 | type_id · 매핑 없음 | `STJ:205, 339, 1803, 1481` |
|
||||
| 기슭막이 · 골막이 · 흙막이 · 개거 · 바닥막이 | type_id · **원단위는 서는데 코드 없음** · 사유 문구 낡음(「원단위 없음」) | `UQ:1149-1168` · `Prep:586-597` |
|
||||
| 관보호공 날개벽 | type_id · 매핑 없음 | `UQ:1146, 1224` |
|
||||
| 대피소 · 작업장 · 회차로 · 가드레일 | type_id · 「quantity」 보기만 있음 | `STJ:2042, 2071, 2098, 2140` |
|
||||
| 사토장 · 토취장 | type_id · 매핑 없음 | `STJ:2198, 2258` |
|
||||
|
||||
### 5-3. 코드는 있는데 줄에 안 붙거나 금액이 안 서는 것 (9)
|
||||
|
||||
| 공종 | 까닭 | 자리 |
|
||||
| --- | --- | --- |
|
||||
| 흙깎기·측구터파기 암(풍화암·연암·보통암·경암) | 시공법(리핑/발파) 미지정이면 코드 None | `Rows:49-61` · `MAP:248-254` |
|
||||
| 흙깎기(리핑암) · 덤프 운반 · 표토제거 | 부모 코드 → 일위대가 제목 없음 | 1-2 |
|
||||
| 뿌리 운반 | `FP-10-12` 부모 + **갈래 없음** | `Prep:376-389` |
|
||||
| 표토 운반·적치 | 대기 상태일 때 코드 None, 값 서면 FP-10-12 — **코드가 상태에 따라 바뀜** | `Prep:406-441` |
|
||||
| 뿌리 적재 | `FP-09-20-02` 인데 단위 ㎡ ↔ 원문 10주당 | `Prep:357-369` |
|
||||
| 구조물터파기 | 용수 미입력이면 부모 `FP-09-13` | `Trench:246-264` |
|
||||
| 물넘이포장 | `FP-12-06` 밑수가 「일당」(작업조형) · `thickness_cm` 옵션이 레지스트리에 없음 | `MAP:188-191` · `UQ:1141` |
|
||||
| 노체다짐 `FP-09-16-02` | 줄로 안 셈 — 답 대기(PLAN 5장) | `MAP:65` |
|
||||
| 돌붙임(골막이·바닥막이 안) | `FP-13-05-01/02` 가 마스터에 있으나 **매핑 없음** · 성분 이름으로만 감 | `REV:287-288, 552` |
|
||||
|
||||
### 5-4. 공종이 아닌 것 — 설계상 코드 없음 (참고)
|
||||
|
||||
- **내역에 안 서는 줄**: 무대(`MAP:147-151` null) · 보정량계 · 잔토처리(`Trench:307-317`) · 입적·석적(`UQ:942-981` reference) · 사방 시설 「해당 없음」 줄(`Prep:574-585`)
|
||||
- **자원·자재 축**: 채집석(haul_deduction) · 모르터(unit_price, 코드 없음) · 고임돌·막자갈·깬돌·물구멍관 · 자재총괄 전 줄
|
||||
- **B09 금액 줄**: 법정경비 14종·안전관리비·관급자재대·폐기물처리비 — 영문 `key`(`B09 Statutory.py:59-105` · `Engine_Cost.py:314-521`)
|
||||
- **B09 지어낸 코드**: `M-FUEL-경유`(`UP:72`) · `X-<코드>#조합`(`UP:354-376`) — 명세 §2 ①에 `#조합` 은 있음, `M-FUEL-*` 은 없음
|
||||
|
||||
---
|
||||
|
||||
## 6. B07 — 조사 결과 요약
|
||||
|
||||
- **횡단도 아래 표**(`Engine_Cad_Table.py:24-58`)는 **B07 만의 이름**(깍기·측구·쌓기·편책·노면다짐·사토장)이고 코드 없음
|
||||
- 층따기·면고르기·지장목제거·성토파종은 측점별 **사면 길이**를 읽음 — B08 집계(측점 사이 면적·반영률)와 **다른 값**
|
||||
- 표토제거·편책·제근·노면다짐 칸은 `source["quantities"]` 를 읽는데 **그 키가 없어 늘 빈칸**(`Router_Support.py:288, 298-299`)
|
||||
- **표준도**(3장 이관 대상)는 B08 `build_unit_table` 을 그대로 부름 — **계산 중복 없음**. 제목은 레지스트리 `name`, 줄 이름은 B08 성분 이름
|
||||
- **CAD 편집값**은 확정 때 manifest 에 저장되나 **읽는 곳 없음**(`Router.py:430-449` · `Router_Support.py:645-649`)
|
||||
|
||||
---
|
||||
|
||||
## 7. 곁에서 드러난 것 — 이름 때문에 값이 조용히 빠지는 자리
|
||||
|
||||
조사 범위(이름 잇기)에서 드러난 **결함 후보**. 고치지 않았음.
|
||||
|
||||
| # | 자리 | 무엇이 빠지나 | 확인 |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 | `REV:361, 481, 511, 584` | 개거·흙막이의 유로폼·면목·이형철근 D13·떼가 `DESTINATION` 에 없어 축 「quantity」 → **자재총괄에서 빠짐**, 건너뛴 수는 화면에 안 뜸 | ✔ 소스 |
|
||||
| 2 | `RM:265` | 준비공 줄 이름이 「…규준틀」로 안 끝나면 **규준틀 자재 전부 빠짐** | ✔ 소스 |
|
||||
| 3 | `UQ:1488` | 「버림콘크리트」 이름이 다르면 **기초잡석 줄 사라짐** | ✔ 소스 |
|
||||
| 4 | `MAT:325` | 할증 조건을 안 넘김 → 레미콘 늘 무근 율 · 철근 복잡 율 안 붙음 | ✔ 소스 |
|
||||
| 5 | `BoQR:31-36` | 운반 단가를 **줄 이름**으로 찾음 — 토사·리핑암 줄 이름이 같아(「dozer 운반」) 첫 줄 단가로 무대 검산 | ✔ 소스 |
|
||||
| 6 | `Prep:441-447` → `UP:499-503` | 표토·덤프·사토 운반 **금액 없음**(`FP-10-12` 제목 0) | ✔ 실행 |
|
||||
| 7 | `Engine_EarthworkTable.py:59, 181` | 모르는 암 종류면 **토사 환산계수**로 조용히 | 도우미 조사 |
|
||||
| 8 | `REV:263` | `spillway` 가 「없음」 외 글자면 관 단면을 **차감** | 도우미 조사 |
|
||||
| 9 | `Engine_ObservedUnit.py:117-131` | 관측표 단위가 m·㎡ 가 아니면 **×1 개소**로 | 도우미 조사 |
|
||||
|
||||
**범위 밖이나 무거운 것 하나** ✔ 소스
|
||||
B07 도면 확정(`Router.py:455-495` → `Router_Support.py:666-692`)이 B06 `compute_cross_design` 을
|
||||
**지반유형·단면유형·측구위치·곡선확폭만 넣고 다시 돌려** `cross_sections` 설계에 **덮어씀**.
|
||||
암반 경계(`rock_boundary_offset_m`)·표준값·사토 성토·소단·측구 형식·포장·절토 경사가 빠짐 →
|
||||
**B08 이 읽는 토사/암 나눔·측구 나눔·사토 공제가 확정 순간 바뀔 수 있음**. 수치 재현은 안 함.
|
||||
|
||||
---
|
||||
|
||||
## 8. 1장 다음 일감에 넘기는 것
|
||||
|
||||
| 1장 일감 | 이 조사에서 넘길 것 |
|
||||
| --- | --- |
|
||||
| 별칭표를 한 파일로 | 4-3 의 11곳 · 4-1 의 8벌 · **「코드 범위」 칸**(1-3) |
|
||||
| B08 ↔ B09 문자열 → 코드 | 3-1 의 12자리 · 3-3 의 `BoQ:507-510`·`BoQR:31-36`·`QuantityDigits` · **부모 코드 판정**(1-2) |
|
||||
| 못 맞춘 줄 줄이기 | 기준 수치는 **508**(1-1) · 271 만 목록으로 풀림 · 167 은 표 읽기 |
|
||||
| 이중계상 경계를 축으로 | 1-5 콘크리트 두 벌 · `UQ:1363-1374` 알리기뿐 · 3-2 성분 이름 막이 |
|
||||
| `undetermined` 판정 | 지금 코드 기준 **73표**(명세 75) |
|
||||
@@ -301,6 +301,19 @@ STmate 코드는 `B00001`·`M00042` 꼴로 **층 글자 + 다섯 자리**이고
|
||||
(`JDCODE_M.BSC` 자재 57,580건 등)는 여전히 암호화라 못 읽음.
|
||||
남의 내부 번호를 정본으로 삼으면 나중에 빈 자리를 못 메움
|
||||
|
||||
### ⚠⚠ 규격은 선택이 아니라 **조인 키**임 — 수치 근거 (29번)
|
||||
|
||||
암호화 기준자료도 **스키마는 평문**이라 뼈대를 잴 수 있었음. 잰 결과:
|
||||
|
||||
```
|
||||
자재 사전 JDCODE_M.BSC 코드 57,580건 ↔ 명칭 1,761종
|
||||
같은 이름이 규격만 달리해 평균 33건씩 갈림
|
||||
규격 칸 110자 · 단위 사전 59종(자재)·130종(통합) · 분류 4~5단
|
||||
```
|
||||
|
||||
⇒ **이름만으로는 원리적으로 못 맞춤.** 「이름으로 맞추고 규격으로 확인」이 아니라
|
||||
**(이름 + 규격) 한 쌍이 키**임. 못 맞춘 497줄의 뿌리가 이 수치로 설명됨.
|
||||
|
||||
### 쓰는 법
|
||||
|
||||
1. `size` 칸을 **반드시 같이 볼 것** — 3장 ③ 「규격이 없으면 매칭 성공이 아님」이 여기서 걸림
|
||||
@@ -310,6 +323,105 @@ STmate 코드는 `B00001`·`M00042` 꼴로 **층 글자 + 다섯 자리**이고
|
||||
|
||||
---
|
||||
|
||||
## 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` — 줄마다 출처 표시 |
|
||||
|
||||
### 식 언어 — 최소로 정함
|
||||
|
||||
```
|
||||
연산 + - * / ^ ( )
|
||||
함수 SQRT · MIN · MAX · IF · LOOKUP(표이름, 키, 열이름)
|
||||
참조 refs 의 이름(앞 줄) · vars 의 이름(제원)
|
||||
```
|
||||
|
||||
⚠ **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(버림) · round(반올림) · ceil(올림) · none
|
||||
실무 한 표 안에 INT(x*100)/100 · ROUND(,2) · ROUNDUP(,2) · 없음이 섞여 있었음
|
||||
```
|
||||
4. **식을 버리지 말 것.** 값만 저장하면 납품 규격(`적용산식`·`적용산식설명`)을 못 맞추고,
|
||||
라이브러리 양식형도 못 만듦 (12장)
|
||||
|
||||
### 양식형 ↔ 고정형
|
||||
|
||||
| | 양식형 | 고정형 |
|
||||
| --- | --- | --- |
|
||||
| `formula` | **있음** — 제원을 바꾸면 `amount` 가 다시 남 | **없음**(또는 빈칸) |
|
||||
| `amount` | 식이 낳은 값 | **박힌 값** (STmate 내역서에서 뽑음) |
|
||||
| `vars` | 제원 칸 | 안 씀 |
|
||||
|
||||
**칸은 같고 `formula` 유무로만 갈림.** 표를 두 벌 만들지 말 것.
|
||||
|
||||
---
|
||||
|
||||
## 10. 고칠 때
|
||||
|
||||
이 문서는 **브레인이 관리함.** 코드 창이 계약을 바꿔야 하면 **고치지 말고 브레인에게 알릴 것** —
|
||||
|
||||
Reference in New Issue
Block a user