auto: 2026-09-12 15:50 (ESD_LAPTOP)
This commit is contained in:
@@ -0,0 +1,428 @@
|
||||
# B09 원가계산 화면 — 데이터 원천 조사표
|
||||
|
||||
**날짜** 2026-09-12 · **창** 데스크탑 보조(`sub_desktop_1`) · **근거** PLAN.md 8-36 ⑥ 앞작업
|
||||
(데스크탑 메인 창 요청, 병렬 조사)
|
||||
|
||||
**무엇을 적었나** — B09 화면에 **실제로 뜨는 열마다** 넷을 적음.
|
||||
① 열 이름(화면에 보이는 그대로) ② 원천(`파일:줄`) ③ 식(사람이 읽는 한 줄) ④ 등급 후보.
|
||||
|
||||
**등급 여섯** — `입력`(사용자가 넣음) · `측량`(앞 단계가 낳음) · `기준`(법·품셈·단가판, 고정) ·
|
||||
`계산`(중간값) · `최종`(내역서·원가로 나가는 값) · `막힘`(근거가 없어 못 세움).
|
||||
|
||||
⚠ **여섯에 안 맞는 열은 억지로 끼우지 않고 그대로 적었음.** 6장에 모아 둠 — 이 조사의 값어치는
|
||||
거기에 있음.
|
||||
|
||||
---
|
||||
|
||||
## 0. 탭 구성 — 열 개 중 아홉이 살아 있음
|
||||
|
||||
`B09_Estimation_UI_Page.ts:610` `TAB_KEYS` · 이름은 `ui_template/ui_template_locale_b2.ts:776`
|
||||
|
||||
| 탭 키 | 화면 이름 | 그리는 자리 | 살아 있나 |
|
||||
| --- | --- | --- | --- |
|
||||
| `cost_sheet` | 공사원가계산서 | `B09_Estimation_UI_Page.ts:250` | ○ |
|
||||
| `boq` | 설계내역서 | `B09_Estimation_UI_Page.ts:911` | ○ |
|
||||
| `unit_price` | 일위대가 | `B09_Estimation_UI_Page.ts:307`·`366` | ○ |
|
||||
| `price_basis` | 단가산출근거 | `B09_Estimation_UI_Page.ts:1053` | ○ |
|
||||
| `machine` | 중기 | `B09_Estimation_UI_BaseData.ts:156`·`292` | ○ |
|
||||
| `duration` | 공사기간 | — | **✕ 막힘(버튼이 눌리지 않음)** |
|
||||
| `supply` | 관급·사급 | `B09_Estimation_UI_Page.ts:1113` | ○ |
|
||||
| `base_data` | 기초자료 | `B09_Estimation_UI_BaseData.ts:132`·`712`·`945` | ○ |
|
||||
| `design_doc` | 설계서 구성 | `B09_Estimation_UI_BaseData.ts:222` | ○ |
|
||||
| `basis_sheet` | 산출기초 | `B09_Estimation_UI_BaseData.ts:389` | ○ |
|
||||
|
||||
---
|
||||
|
||||
## 1. 공사원가계산서 (`cost_sheet`)
|
||||
|
||||
**표 뼈대** `B09_Estimation_UI_Page.ts:250` · 열 정의 `:257` · 줄을 낳는 곳
|
||||
`B09_Estimation_Engine_Cost.py:252 calculate_cost`
|
||||
|
||||
### 1-1. 열 다섯
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 비목 | `B09_Estimation_Engine_Cost.py:115 CostLine.name` · 법정경비 이름은 `B09_Estimation_Statutory.py:58 STATUTORY_ITEMS` | 비목 이름표(고정) | `기준` |
|
||||
| 금액 | `B09_Estimation_Engine_Cost.py:124 CostLine.amount_krw` (`:175 _emitter` 가 채움) | `밑수 × 요율% + 정액` 을 원 단위 버림(`:44 floor_won`) | `계산` / 마지막 줄은 `최종` |
|
||||
| 요율 | `B09_Estimation_Engine_Cost.py:122 rate_percent` ← `B09_Estimation_Rates.py:92 load_rate_dataset` 의 `rates_2026.json` | 금액·공사기간 구간으로 고름(`B09_Estimation_Rates.py:180 select_bracket`) | `기준` |
|
||||
| 산출근거 | `B09_Estimation_Engine_Cost.py:128 formula_text` | `"{밑수:,} × {요율}%"` (+ 정액이 있으면 `+ 정액`) | `계산` — **이미 있는 것** |
|
||||
| 비고 | `B09_Estimation_Engine_Cost.py:125 note` | 채택·미채택 표시 등 자유문 | 여섯 밖 → 6장 ㉮ |
|
||||
|
||||
### 1-2. 줄(비목)마다의 밑수·등급
|
||||
|
||||
`emit(key=...)` 순서대로. 밑수 이름은 `B09_Estimation_Statutory.py:52 base_label` 이 들고 있음.
|
||||
|
||||
| 화면 줄 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 재료비 | `Engine_Cost.py:314` | 직접재료비(사용자 입력) | `입력` |
|
||||
| 간접노무비 | `Engine_Cost.py:332` | 직접노무비 × `rate_indirect`% | `계산` |
|
||||
| 노무비 | `Engine_Cost.py:340` | 직접노무비 + 간접노무비 | `계산` |
|
||||
| 산재보험료 | `Statutory.py:60` | 노무비(직접+간접) × `rate_sanjae`% | `계산` |
|
||||
| 고용보험료 | `Statutory.py:63` | 노무비(직접+간접) × `rate_goyong`% | `계산` |
|
||||
| 국민건강보험료 | `Statutory.py:64` | 직접노무비 × `rate_health`% | `계산` |
|
||||
| 노인장기요양보험료 | `Statutory.py:65` | **국민건강보험료** × `rate_care`% (앞 줄이 밑수) | `계산` |
|
||||
| 국민연금보험료 | `Statutory.py:66` | 직접노무비 × `rate_pension`% | `계산` |
|
||||
| 산업안전보건관리비 | `Statutory.py:67` · 셈은 `Statutory.py:154 safety_management_cost` | **A·B 중 작은 값** (A=요율식, B=대상액×1.2, `Statutory.py:42 _SAFETY_B_MULTIPLIER`) | `계산` — **식이 「×%」가 아님, 6장 ㉯** |
|
||||
| 기타경비 | `Statutory.py:71` | (재료비+노무비) × `rate_other_expense`% | `계산` |
|
||||
| 환경보전비 | `Statutory.py:72` | 직접공사비 × `rate_environment`% | `계산` |
|
||||
| 퇴직공제부금비 | `Statutory.py:73` | 직접노무비 × `rate_retirement_mutual_aid`% | `계산` |
|
||||
| 임금채권보장기금 부담금 | `Statutory.py:76` | 노무비(직접+간접) × 율 | `계산` |
|
||||
| 석면피해구제 분담금 | `Statutory.py:82` | 노무비(직접+간접) × 율 | `계산` |
|
||||
| 건설기계대여대금 지급보증수수료 | `Statutory.py:88` | 직접공사비 × 율 | `계산` |
|
||||
| 하도급대금 지급보증수수료 | `Statutory.py:94` | 직접공사비 × 율 | `계산` |
|
||||
| 공사이행보증수수료 | `Statutory.py:100` | **직접공사비 × 공사기간(년)** × 율 — 기간이 식에 듦 | `계산` (기간은 `입력`) |
|
||||
| 경비 | `Engine_Cost.py:358` | 직접경비 + 법정경비 합 | `계산` |
|
||||
| 순공사원가 | `Engine_Cost.py:367` | 재료비+노무비+경비 | `계산` |
|
||||
| 일반관리비 | `Engine_Cost.py:381` | 순공사원가 × `rate_overhead`% | `계산` |
|
||||
| 이윤(조정 전) | `Engine_Cost.py:462` | (노무비+경비+일반관리비) × `rate_profit`% | `계산` |
|
||||
| 이윤 조정 | `Engine_Cost.py:470` | 사용자가 넣은 조정액 | `입력` |
|
||||
| 이윤 | `Engine_Cost.py:479` | 조정 전 + 조정액 | `계산` |
|
||||
| 총원가 | `Engine_Cost.py:392` | 순공사원가 + 일반관리비 + 이윤 | `최종` |
|
||||
| 부가가치세 | `Engine_Cost.py:399` | 총원가 × 10% (`Statutory.py:41 _VAT_DIVISOR` 와 짝) | `계산` |
|
||||
| 도급금액 | `Engine_Cost.py:407` | 총원가 + 부가세, **천원 단위 올림**(`Engine_Cost.py:49 ceil_thousand`) | `최종` |
|
||||
| 관급자재 대금 | `Engine_Cost.py:496 _owner_supplied_line` | 사용자 입력(총원가 **밖**) | `입력` |
|
||||
| 폐기물 처리비 | `Engine_Cost.py:514 _waste_line` | 사용자 입력 | `입력` |
|
||||
| 총계 | `Engine_Cost.py:419` | 도급금액 + 관급 + 폐기물 | `최종` |
|
||||
|
||||
### 1-3. 요율 판 (좌측 패널 「요율 판」 상자)
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 적용일 | `B09_Estimation_UI_Page.ts:592` ← `rate_version.effective_date` | `rates_2026.json` 의 기준일 | `기준` |
|
||||
| 지문 | 같은 자리 `rate_version.sha256` 앞 8자 | 파일 해시 | 여섯 밖 → 6장 ㉰ |
|
||||
|
||||
---
|
||||
|
||||
## 2. 설계내역서 (`boq`)
|
||||
|
||||
**표 뼈대** `B09_Estimation_UI_Page.ts:944` (머리글이 `innerHTML` 문자열로 박혀 있음) ·
|
||||
줄을 낳는 곳 `B09_Estimation_BillOfQuantities_Rows.py`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| No. | `BillOfQuantities_Rows.py:139 item_no` | 마스터 목차 번호 | `기준` |
|
||||
| 공종 | `:148 name` ← B08 `HandoffWorkItem.name` (없으면 마스터 이름) | 그대로 | `기준` |
|
||||
| 규격 | `:149 spec` (갈래가 붙으면 `:211` 에서 `spec + variant_value`) | 그대로 / 갈래 이어붙임 | `기준` |
|
||||
| 단위 | `:150 unit` | 그대로 | `기준` |
|
||||
| 수량 | `:151 quantity` ← **B08 이 넘긴 값** · 표시는 `UI_Page.ts:793 formatQuantity` | 그대로(반영률은 **B08 이 이미 곱함**, `:157` 주석) | `측량` |
|
||||
| 단가 | `:290~ unit_price_krw` ← `unit_prices.book` 의 일위대가 합계 | 일위대가 본표 합계 | `계산` |
|
||||
| 금액 | 같은 곳 `amount_krw` | 수량 × 단가 | `최종` |
|
||||
| 비고 | `:155`·`:172`·`:180`·`:236`·`:245`·`:267` 등 여러 자리에서 이어 붙임 | 반영률·갈래 근거·막힘 사유를 `/` 로 이음 | 여섯 밖 → 6장 ㉮ |
|
||||
|
||||
**표 밖에 붙는 줄들** (모두 `UI_Page.ts:974~1050`)
|
||||
|
||||
| 화면에 뜨는 것 | 원천 | 등급 후보 |
|
||||
| --- | --- | --- |
|
||||
| 내역서 합계 | `bill.summary.body_total_krw` | `최종` |
|
||||
| 「금액을 못 세운 줄」 세 갈래 | `BillOfQuantities_Rows.py:190`·`:241`·`:259`·`:280` 의 `result.missing` | `막힘` |
|
||||
| ├ 사용자가 넣으면 풀림 | `blocked_kind == "input_missing"` | `막힘`(원인 `입력`) |
|
||||
| ├ 우리가 만들어야 함 | `blocked_kind` 그 밖 | `막힘` |
|
||||
| └ 여기서 안 세는 줄 | `blocked_kind == "not_our_row"` | 여섯 밖 → 6장 ㉱ |
|
||||
| 검산용 줄(제외) | `:110 _excluded_row` — 수량만 보이고 **단가를 안 붙임** | 여섯 밖 → 6장 ㉱ |
|
||||
| 자재 줄 | `:385 _material_row` | `측량` |
|
||||
|
||||
---
|
||||
|
||||
## 3. 일위대가 (`unit_price`)
|
||||
|
||||
### 3-1. 목록표 — `UI_Page.ts:307` · 열 정의 `:321`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 명칭 | `B09_Estimation_UnitPrice_View.py:149 list_unit_prices` | 단가판 제목 | `기준` |
|
||||
| 단위 | 같은 곳 | 단가판 단위 | `기준` |
|
||||
| 재료비·노무비·경비 | 같은 곳 ← `PriceBook.resolve` | 성분별 합 | `계산` |
|
||||
| 합계 | 같은 곳 | 재료비+노무비+경비 | `계산` |
|
||||
|
||||
### 3-2. 본표 — `UI_Page.ts:366` · 열 정의 `:412` · 서버 `UnitPrice_View.py:171 detail_of`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 명칭 | `UnitPrice_View.py:171~` (제잡비는 `:196`, 공구손료는 `:236`) | 성분 이름 | `기준` |
|
||||
| 규격 | 같은 곳 | 성분 규격 / `"노무비의 N%"` 꼴 | `기준` |
|
||||
| 원천 | `UnitPrice_View.py:257 source_label` ← `B09_Estimation_UnitPrice.py:1026 SOURCE_LABEL` | 자재·노임·기계경비·일위대가·단가산출·일식견적 중 하나 + 순번 | `기준` — **이미 있는 것** |
|
||||
| 단위 | `UnitPrice_View.py:259 부근` | 그대로 | `기준` |
|
||||
| 수량 | `:259 quantity` | 품셈 소요량 | `기준` |
|
||||
| 재료비·노무비·경비 | `:264~266` | 단위값 × 수량, 성분별로 자름 | `계산` |
|
||||
| 합계 | `:267` 주석 | **자른 성분 셋의 합** (전정밀 합과 끝자리가 다름 — 정상) | `계산` |
|
||||
|
||||
**표 밖에 붙는 줄** — 「일부만 선 단가」 알림(`UI_Page.ts:387 unattached_note`)은 `막힘`,
|
||||
「반올림 차」(`UI_Page.ts:398 precise_total`)는 여섯 밖 → 6장 ㉲.
|
||||
|
||||
---
|
||||
|
||||
## 4. 단가산출근거 (`price_basis`)
|
||||
|
||||
**목록** `UI_Page.ts:1069` · **본문** `UI_Page.ts:1097` · 서버 `B09_Estimation_PriceBasis.py:74 build_price_basis`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 번호 | `PriceBasis.py:31 PriceBasisEntry.number` | 차례 매김 | `기준` |
|
||||
| 공종 | 같은 곳 `name`+`spec` | 이어 붙임 | `기준` |
|
||||
| 단위 | 같은 곳 `unit` | 그대로 | `기준` |
|
||||
| 단가 | 같은 곳 `unit_price_krw` | 한 층 아래 일위대가의 합계 | `계산` |
|
||||
| (본문) 참조 | `UI_Page.ts:1105 ref_code` | 한 층 아래 코드를 가리킴 | 여섯 밖 → 6장 ㉳ |
|
||||
|
||||
⚠ **이 탭은 내역서(`bill`)를 먼저 불러야 뜸** (`UI_Page.ts:1054`). 안 불러오면 안내문만 뜸.
|
||||
|
||||
---
|
||||
|
||||
## 5. 나머지 여섯 탭
|
||||
|
||||
### 5-1. 중기 (`machine`)
|
||||
|
||||
**중기목록표** `B09_Estimation_UI_BaseData.ts:164` · 서버 `B09_Estimation_Lists.py:105 machine_list`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 코드번호·명칭·규격·단위 | `Lists.py:105` ← 기계 카탈로그 | 그대로 | `기준` |
|
||||
| 합계 | `Lists.py:105 total_krw` | 노무비+재료비+경비 | `계산` |
|
||||
| 노무비 | 같은 곳 | 조종원 노임 ÷ 8 × 16/12 × 25/20 (`B09_Estimation_MachineCost.py:74 OPERATOR_ALLOWANCE_FACTOR`) | `계산` |
|
||||
| 재료비 | 같은 곳 | 주연료 + 잡재료(주연료의 %) | `계산` |
|
||||
| 경비 | 같은 곳 | 시간당 손료 | `계산` |
|
||||
| 비고 | 같은 곳 | 자유문 | 여섯 밖 → 6장 ㉮ |
|
||||
|
||||
**각종 중기경비계산서** `UI_BaseData.ts:292 machineExpenseSheet` · 서버
|
||||
`B09_Estimation_MachineExpenseSheet.py:81 machine_expense_sheets`
|
||||
|
||||
| 줄 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| ① 취득가격(천원) | `MachineExpenseSheet.py:81~` | 카탈로그 값 | `기준` |
|
||||
| ① 내용시간 / 연간표준가동시간 | 같은 곳 | 품셈 값 | `기준` |
|
||||
| ① 상각비·정비비·관리비 계수(10⁻⁷) | 같은 곳 | 셋을 더해 손료계수 | `기준` |
|
||||
| ① 시간당 손료 | 같은 곳 | 취득가격 × 손료계수 | `계산` |
|
||||
| ② 주연료 × 유가 | 같은 곳 · 유가는 `B09_Estimation_Lists_Sources.py:137 base_reference_data` | 주연료(L/hr) × 경유 단가 | `계산`(유가는 `기준`, 지역 선택은 `입력`) |
|
||||
| ② 잡재료(주연료의 %) | 같은 곳 | 주연료비 × % | `계산` |
|
||||
| ② 조종원 일당 → 시간당 | `MachineCost.py:49`·`:74` | 일당 ÷ 8 × 1.667 | `계산` |
|
||||
| ③ 재료비/노무비/경비·합계 | 같은 곳 | ①+② 를 성분으로 가름 | `계산` |
|
||||
| ⚠ 못 채운 자리(`gaps`) | `MachineExpenseSheet.py:81~` | — | `막힘` |
|
||||
|
||||
### 5-2. 관급·사급 (`supply`)
|
||||
|
||||
`UI_Page.ts:1146` · 서버 `B09_Estimation_MaterialSheet.py:117 build_material_sheet`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 자재·규격·단위 | `MaterialSheet.py:47 MaterialSheetRow` | 그대로 | `기준` |
|
||||
| 수량 | 같은 곳 `total_amount` | B08 수량 × 할증 | `측량` |
|
||||
| 단가 | 같은 곳 `unit_price_krw` | 단가판 값 | `기준` |
|
||||
| 금액 | 같은 곳 `amount_krw` | 수량 × 단가 | `최종` |
|
||||
| 비고 | 같은 곳 `note` | 자유문 | 여섯 밖 → 6장 ㉮ |
|
||||
|
||||
세 무리(사급 / 관급 / 안 갈린 것)는 `UI_Page.ts:1136` 에서 가름. **관급은 총원가 밖**,
|
||||
**안 갈린 것은 어느 합계에도 안 듦** → 여섯 밖 → 6장 ㉱.
|
||||
|
||||
### 5-3. 기초자료 (`base_data`)
|
||||
|
||||
**목록표 셋** `UI_BaseData.ts:132` · 열 `:111 catalogTable` · 서버 `B09_Estimation_Lists.py:50 catalog_list`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 코드번호·명칭·규격·단위 | `Lists.py:50` | 단가판 그대로 | `기준` |
|
||||
| 단가 | 같은 곳 | 단가판 그대로 | `기준` |
|
||||
| 비고 | 같은 곳 | 자유문 | 여섯 밖 → 6장 ㉮ |
|
||||
|
||||
⚠ **재료비목록표가 거의 비어 있음** (`UI_BaseData.ts:143` 경고문) — 사급 자재 카탈로그가 안 섬 → `막힘`.
|
||||
|
||||
**자재단가대비표** `UI_BaseData.ts:533 comparisonTable` · 서버
|
||||
`B09_Estimation_Lists_Sources.py:79 material_price_comparison`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 코드번호·명칭·규격·단위 | `Lists_Sources.py:79` | 그대로 | `기준` |
|
||||
| (원천마다) 단가 | 같은 곳 `slots[].price_krw` | 물가지·견적 등 원천별 값 | `기준` |
|
||||
| (원천마다) 페이지 | 같은 곳 `slots[].source_note` | 쪽수·출처 문구 | `기준` — **이미 있는 것** |
|
||||
| 적용 | 같은 곳 `adopted_price_krw`·`adopted_slot` | 다섯 중 채택한 하나 | `계산` |
|
||||
| 비고 | 같은 곳 `note` | 자유문 | 여섯 밖 → 6장 ㉮ |
|
||||
|
||||
**환율및기초자료** `UI_BaseData.ts:607 baseReferenceSections` · 서버 `Lists_Sources.py:137`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| ① 환율 | `Lists_Sources.py:137` | 안내문뿐(값 없음) | `막힘` |
|
||||
| ② 코드번호·직종 | 같은 곳 | 노임판 그대로 | `기준` |
|
||||
| ② 일당 | 같은 곳 `day_wage_krw` | 공표 노임 | `기준` |
|
||||
| ② 시간당 | 같은 곳 `hourly_krw` | 일당 ÷ 8 (**자르지 않고 소수 그대로**, `UI_BaseData.ts:634` 주석) | `계산` |
|
||||
| ② 산식 | 같은 곳 `formula` | 사람이 읽는 한 줄 | `계산` — **이미 있는 것** |
|
||||
| ③ 경유 단가·적용 범위·기준일·자료 | 같은 곳 `fuel` | 공시가(전국 또는 시도) | `기준`(범위 선택은 `입력`) |
|
||||
|
||||
**산출 조건** `UI_BaseData.ts:945 drawFactorChoices` · 서버 `B09_Estimation_FactorChoices.py:111 scan_range_factors`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 계수 이름·품셈 범위 | `FactorChoices.py:62 RangeFactor` | 품셈이 준 범위 | `기준` |
|
||||
| 고른 값(상·중·하) | `FactorChoices.py:57 CHOICE_KEYS`·`:58 DEFAULT_CHOICE` | 사용자 선택(기본 `mid`) | `입력` |
|
||||
| 근거 문구 | `FactorChoices.py:162 BASIS_NOTES` | 고정 문구 | `기준` |
|
||||
|
||||
### 5-4. 설계서 구성 (`design_doc`)
|
||||
|
||||
`UI_BaseData.ts:222` · 서버 `B09_Estimation_DesignDocIndex.py:164 design_doc_index`
|
||||
|
||||
| 열 이름 | 원천 | 식 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| 차례·이름 | `DesignDocIndex.py:38 DESIGN_DOC_ITEMS` | 법이 정한 목차 | `기준` |
|
||||
| 상태 | `DesignDocIndex.py:25~27` (있음/반쪽/없음) | 우리가 내는 것과 맞대 봄 | 여섯 밖 → 6장 ㉴ |
|
||||
| 누가 만드나 | `DesignDocIndex.py:29~30` | 프로그램 / 설계자·발주청 | 여섯 밖 → 6장 ㉴ |
|
||||
| 어디서 나오나 | 같은 곳 `where` | 화면·파일 이름 | 여섯 밖 → 6장 ㉴ |
|
||||
| 비고 | 같은 곳 `note` | 자유문 | 여섯 밖 → 6장 ㉮ |
|
||||
|
||||
⚠ **이 표는 프로젝트 값이 아님** — 「우리가 무엇을 내는가」의 표(`UI_Page.ts:1219` 주석).
|
||||
|
||||
### 5-5. 산출기초 (`basis_sheet`)
|
||||
|
||||
`UI_BaseData.ts:389` · 서버 `B09_Estimation_BasisSheet.py:148 basis_sheet`
|
||||
|
||||
| 절 | 열 이름 | 원천 | 등급 후보 |
|
||||
| --- | --- | --- | --- |
|
||||
| ① 어느 판으로 계산했나 | 자료·파일·기준일·지문 | `BasisSheet.py:44 dataset_versions` | `기준` (지문은 6장 ㉰) |
|
||||
| ② 무엇을 골랐나 | 항목·고른 값 | `BasisSheet.py:77 chosen_conditions` | `입력` |
|
||||
| ③ 공종마다 무엇을 근거로 | 코드·공종·단위·근거 | `BasisSheet.py:106 work_item_basis` | `기준` — **이미 있는 것** |
|
||||
| ④ 못 채운 자리 | 갈래·코드·사유 | `BasisSheet.py:134 open_gaps` | `막힘` |
|
||||
|
||||
⚠ **여기서 값을 다시 계산하지 않음 — 모으기만 함** (`UI_BaseData.ts:359` 주석). 즉 **③ 이 이미
|
||||
사전의 절반**임.
|
||||
|
||||
### 5-6. 공사기간 (`duration`) — 통째로 막힘
|
||||
|
||||
`TAB_KEYS` 에서 `enabled=false` (`UI_Page.ts:616`). 버튼이 눌리지 않고 「준비 중」만 뜸.
|
||||
그런데 **공사이행보증수수료 식에 공사기간(년)이 이미 들어감**(`Statutory.py:100`) —
|
||||
값은 좌측 패널 「공사 조건 · 공사기간」 입력칸에서 옴. → `막힘` 이되 원인은 `입력`.
|
||||
|
||||
---
|
||||
|
||||
## 6. 여섯에 안 맞는 것 — **이 조사의 알맹이**
|
||||
|
||||
억지로 안 끼우고 그대로 적음. ㉮~㉴ 일곱 갈래.
|
||||
|
||||
### ㉮ 「비고」 — 등급을 못 붙이는 열 (거의 모든 표에 있음)
|
||||
|
||||
내역서·중기·자재대·기초자료·설계서 구성이 모두 「비고」를 가짐. 안에 들어 있는 것이 섞여 있음 —
|
||||
**갈래 판정 근거**(`BillOfQuantities_Rows.py:155`), **반영률 안내**(`:157`·`:165`),
|
||||
**주의 문구**(`:180` `ⓘ`), **막힘 사유**(`:186`). 같은 칸에 **원천이 다른 글**이 들어감.
|
||||
|
||||
→ **제안** — 비고는 등급을 붙일 열이 아니라 **다른 열의 근거를 담는 그릇**임. 등급 여섯에 넣지 말고
|
||||
호버 카드의 「곁말」 자리로 빼는 것이 맞아 보임. 지금처럼 `/` 로 이어 붙이면 **호버에서 갈라 보일
|
||||
수 없음** — 서버가 조각 배열로 보내야 함.
|
||||
|
||||
### ㉯ 「A·B 중 작은 값」 — `계산` 이 못 담는 식
|
||||
|
||||
산업안전보건관리비(`Statutory.py:154`)는 두 길로 셈해 **작은 쪽**을 씀. `formula_text` 도 이 줄만
|
||||
`× %` 꼴을 안 씀(`Engine_Cost.py:133` 이 이 키를 따로 뺌).
|
||||
|
||||
→ **제안** — `계산` 안에 「**고름**」 성격이 숨어 있음. 이런 줄은 호버에 **두 후보값과 왜 그것을
|
||||
골랐나**를 함께 보여야 함. 등급을 늘릴 것인지, `계산` 의 하위 성질로 둘 것인지 결정 필요.
|
||||
같은 성격이 하나 더 있음 — 자재단가대비표의 「적용」(원천 다섯 중 하나 채택, `Lists_Sources.py:79`).
|
||||
|
||||
### ㉰ 「지문(sha256)」 — 값이 아니라 **재현성 표식**
|
||||
|
||||
요율 판 지문(`UI_Page.ts:594`)과 산출기초 ①(`BasisSheet.py:44`)에 나옴. 사용자가 넣은 것도,
|
||||
계산한 것도, 법이 정한 것도 아님.
|
||||
|
||||
→ **제안** — 등급을 붙이지 말고 **모든 칸의 호버 카드에 공통으로 따라붙는 꼬리표**로 두는 편이
|
||||
나아 보임(「이 값은 어느 판·어느 지문으로 섰나」).
|
||||
|
||||
### ㉱ 「여기서 안 세는 줄」 — `막힘` 과 뜻이 정반대
|
||||
|
||||
셋이 같은 성격임 — 내역서의 `not_our_row`(`UI_Page.ts:1015`), 검산용 제외 줄
|
||||
(`BillOfQuantities_Rows.py:110`), 자재대의 「안 갈린 것」(`UI_Page.ts:1139`).
|
||||
**못 세운 것이 아니라 세면 안 되는 것**임. `막힘` 에 넣으면 사용자가 채우려 들고 **그것이 곧
|
||||
이중계상**임(화면 주석이 이미 그렇게 경고함, `UI_Page.ts:1010`).
|
||||
|
||||
→ **제안** — 일곱째 등급 「**제외**」가 필요해 보임. 아니면 `막힘` 을 「못 세움 / 안 셈」 둘로 가름.
|
||||
⚠ **이것이 이번 조사에서 가장 확실한 어긋남**임 — B08 토적표에도 같은 성격의 줄이 있을 것임.
|
||||
|
||||
### ㉲ 「반올림 차」 — 값이 아니라 **표시의 성질**
|
||||
|
||||
일위대가 본표의 `precise_total ≠ total`(`UI_Page.ts:398`), 내역서의 자릿수 안내
|
||||
(`UI_Page.ts:981`), 노임 시간당을 안 자르는 규칙(`UI_BaseData.ts:634`).
|
||||
|
||||
→ **제안** — 등급이 아니라 **칸마다의 「자른 자리」 표기**로 다루는 것이 맞아 보임
|
||||
(호버에 「표시 N자리 · 계산 전정밀」).
|
||||
|
||||
### ㉳ 「참조(ref_code)」 — 값이 아니라 **한 층 아래로 가는 길**
|
||||
|
||||
단가산출근거의 참조(`UI_Page.ts:1105`), 일위대가 본표의 파고들기(`UnitPrice.py:1037 DRILLABLE_KINDS`).
|
||||
|
||||
→ **제안** — 이것이 PLAN 8-36 ⑤ 의 「원천은 글로만 적음」과 같은 자리임. **B09 안에서는 이미
|
||||
눌러서 내려갈 수 있음** — 화면 밖(B05·B06)으로 나갈 때만 글로만 적으면 됨.
|
||||
|
||||
### ㉴ 설계서 구성표 — **프로젝트 값이 아닌 표**
|
||||
|
||||
「상태 / 누가 만드나 / 어디서 나오나」 세 열은 프로젝트 숫자가 아니라 **우리 개발 상태**임.
|
||||
|
||||
→ **제안** — 이 탭은 사전·호버 대상에서 **아예 빼는 것**이 맞아 보임. 등급을 억지로 붙이면
|
||||
사전이 「프로그램 진척표」까지 떠안게 됨.
|
||||
|
||||
---
|
||||
|
||||
## 7. 있는 것 / 없는 것
|
||||
|
||||
**이미 있어 그대로 쓸 것 (넷)**
|
||||
|
||||
| 무엇 | 어디 | 덮는 범위 |
|
||||
| --- | --- | --- |
|
||||
| `formula_text` | `Engine_Cost.py:128` | 원가계산서 줄 전부 — **식** |
|
||||
| `source_label`·`source_index` | `UnitPrice_View.py:256` ← `UnitPrice.py:1026` | 일위대가 본표 줄 — **원천** |
|
||||
| `base_label` | `Statutory.py:52` | 법정경비 14 줄 — **밑수 이름** |
|
||||
| 산출기초 ③ `work_item_basis` | `BasisSheet.py:106` | 공종마다의 근거 문구 |
|
||||
| (덤) 자재단가대비표 `source_note` | `Lists_Sources.py:79` | 자재 단가의 쪽수·출처 |
|
||||
|
||||
**없어서 새로 만들어야 할 것**
|
||||
|
||||
| 무엇 | 어느 표가 비었나 |
|
||||
| --- | --- |
|
||||
| **식** | 내역서(수량·단가·금액) · 중기목록표 · 자재대 · 기초자료 목록표 셋 |
|
||||
| **원천(`파일:줄`)** | 전부 없음 — 지금은 어느 표도 「어느 코드가 이 값을 냈나」를 안 들고 있음 |
|
||||
| **등급** | 전부 없음 |
|
||||
| **밑수 이름** | 법정경비 밖 — 일반관리비·이윤·부가세는 `formula_text` 안에 숫자로만 들어감 |
|
||||
| **칸 단위 곁말** | 비고를 `/` 로 이어 붙이는 자리 전부(㉮) — 조각 배열로 바꿔야 함 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 다음에 할 것
|
||||
|
||||
1. **㉱(제외 등급)를 먼저 결정** — 등급 여섯의 밑동이 바뀌는 자리라 나머지보다 앞섬.
|
||||
B08 토적표 쪽에도 같은 성격 줄이 있는지 맞대 볼 것.
|
||||
2. ㉮(비고 그릇)는 **서버가 조각 배열로 보내도록** 바꾸는 일이 딸림 — 사전 뼈대와 같이 설계할 것.
|
||||
3. ㉴(설계서 구성표)는 사전 대상에서 빼는 것으로 정리하면 표 하나가 통째로 줄어듦.
|
||||
4. 사전 파일은 `B09_*` 700줄 넘은 파일들에 넣지 말고 **새 파일**로 뺄 것
|
||||
(PLAN.md 8-36 끝 ⚠ 그대로).
|
||||
|
||||
---
|
||||
|
||||
## 9. 줄 사유 → 닿는 열 지도 (㉮ 배선용, 2026-09-12 추가)
|
||||
|
||||
데스크탑 메인 창 당부 ② — **줄 사유는 그 사유가 닿는 열에만 붙일 것**(B08 에서 「절토 보정량」
|
||||
카드에 「측구 가름값이…」 가 떠서 읽는 사람을 속인 사고). `resolveExtra` 에서 열 키로 거르려면
|
||||
**어느 조각이 어느 열 것인지**를 먼저 못 박아야 함. 내역서 `note` 가 지금 `/` 로 이어 붙이는
|
||||
조각 전부를 그 임자 열에 갈라 놓음.
|
||||
|
||||
| 조각 | 만드는 자리 | 닿는 열 | 지금 꼴 |
|
||||
| --- | --- | --- | --- |
|
||||
| 갈래 판정 근거(`spec_class_basis`) | `BillOfQuantities_Rows.py:154` | **규격** | `/` 로 이음 |
|
||||
| 주의 문구 `ⓘ`(막힘 아님 — 기본값으로 섰다는 알림) | `:180` | **규격** | `/` 로 이음 |
|
||||
| 관경이 표 밖(`pipe_diameter_note`) | `:228` | **규격** | `/` 로 이음 |
|
||||
| 반영률 적용 후 수량(단일 율) | `:157` | **수량** | 덮어씀 |
|
||||
| 반영률이 갈래마다 다름 | `:165` | **수량** | 덮어씀 |
|
||||
| 묶음 조각이 덜 참 · 묶음 N조각 합계 | `:86`·`:106` | **수량** | 덮어씀 |
|
||||
| 수량이 미확정 산식 위에 섬(`pending_formula_note`) | `:335` | **수량** | `/` 로 이음 |
|
||||
| 막힘 사유(`blocked_kind` 있음) | `:186` | **단가** | 덮어씀 |
|
||||
| 일위대가가 한 층 아래에 있음(후보 N건) | `:224` | **단가** | 덮어씀 |
|
||||
| 성분이 빠져 못 세움 | `:236` | **단가** | 덮어씀 |
|
||||
| 일위대가가 아직 없음 | `:239` | **단가** | 덮어씀 |
|
||||
| 밑수(기준 수량) 못 찾음 — 곱하지 않음 | `:257` | **단가** | 덮어씀 |
|
||||
| 단가가 일부만 섬(붙은 몫 N%) | `:278` | **단가** | 덮어씀 |
|
||||
| 기준 단위가 표에 없음 — 같다고 보고 곱함 | `:297` | **단가** | `/` 로 이음 |
|
||||
| 원문엔 있는데 단가에 못 실린 몫(`known_gap_note`) | `:341` | **단가** | `/` 로 이음 |
|
||||
| 단산 참조번호(`entry.label`, 「단산 46」) | `BillOfQuantities.py:517` | **단가** | `/` 로 **앞에** 붙임 |
|
||||
| 단위 불일치 — 곱하면 틀리므로 비워 둠 | `:314` | **금액** | 덮어씀 |
|
||||
| 검산용 줄 — 금액을 안 매김 | `:170` | **줄 전체**(`excluded`) | 덮어씀 |
|
||||
| 관급·사급이 안 갈림 | `:398` | **줄 전체**(`excluded`) | 덮어씀 |
|
||||
| 관급/사급 자재 단가 미확보 | `:411`·`:418` | **단가** | 덮어씀 |
|
||||
|
||||
⚠ **덮어쓰는 자리가 더 많음** — 지금은 앞 조각을 지우고 새로 적는 곳이 대부분이라, 한 줄에
|
||||
사유가 둘이면 **하나가 조용히 사라짐**. 조각 배열로 바꿀 때 이 자리들도 함께 `append` 로
|
||||
고쳐야 함(단순히 `/` 를 배열로 바꾸는 것만으로는 안 됨).
|
||||
|
||||
⚠ **화면 `비고` 칸은 그대로 둘 것** — 조각 배열은 호버 카드용으로 따로 실음. 지금 비고를
|
||||
없애면 토글을 끈 사용자가 사유를 못 봄.
|
||||
Reference in New Issue
Block a user