chore(plan): 10-9 셋째 요구(B08 자재) 원문 · 조사 I · J · 분석_정함(160장)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LLCk2y5xE8YGVgjbTntWsY
This commit is contained in:
2026-10-09 22:41:53 +09:00
co-authored by Claude Fable 5.1
parent 774560d480
commit fd8f9a77fb
4 changed files with 311 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
# 10-9 셋째 요구 분석 · 정함 (B08 자재)
근거 — `사용자요구_1009_3.md` · 조사 I(엑셀 `4.2 수량산출(2공구).xlsx` 세 시트 수식 · 숨은 행열 · 흐름) · 조사 J(B08 지금 코드) — 파일:줄 · 칸 대응은 조사 문서에.
사용자 지시 — 「구현을 해줘야 하는데 참고 문서의 셀에 있는 수식을 제대로 봐봐 · 숨겨진 행열 조심」 = 엑셀 흐름을 기준으로 구현 · 화면 검증은 사용자.
## 장 · 창
| 장 | 내용 | 창 |
|---|---|---|
| 160-1 · 2 | B08 탭 재편(구조물 집계표 메인 탭 · 「자재」 탭 = 총괄 · 콘크리트소요 · 자재수량) · 미지정 칸 표기 | sub8 |
| 160-3 · 4 · 5 | 자재수량 → 총괄 · 콘크리트소요 흐름을 엑셀대로(맞춤 없는 자재 줄 · 참조 줄 재료 · 주연료 제외 · 콘크리트 · 모르터 열 · 채집석 공제 → 토적 사토) | sub5 |
## 정함 (브레인 · 사용자가 바꿀 수 있음)
- 160-1 — 메인 탭 차례 = 구조물 집계표 · 자재 · 토공 · 수리 · 「자재」 탭 안 = 총괄자재수량집계표 · 콘크리트소요자재집계표 · 자재수량집계표(차례 그대로) · 좌측 카드 둘로(배관 1본 길이 → 집계표 카드 · 할증 → 자재 카드).
- 160-2 — 측점 옆 「미지정」 열 = 그 측점의 빈 조합 칸 이름(시설 이름 · 칸) 목록(서버 응답 `unlinked` 그대로 · 화면만) · 같은 종류 열이 이미 있으면 그 칸에도 「미지정」 글 · 「· 미연결」 측점 표기는 그대로.
- 160-3 — 엑셀 흐름 = 자재수량집계표 계 → 총괄(곧장) 또는 → 콘크리트소요 → 총괄(시멘트 ÷ 40 대 · 모래 · 자갈) · 2공구 이름과 안 맞는 자재 = 버리지 않고 총괄 끝에 그 이름 · 규격 · 단위 그대로 줄(알림에 이름 목록) · 이름 맞춤은 규격 · 단위까지 · 기계 주연료 · 할증(ℓ) 은 자재 표에서 뺌(원가 쪽 몫) · 참조 줄(일위대가화 · 사전조합) 안 재료도 단위수량에 셈(엑셀 자재수량집계표 = 일위대가 재료 전부 · 146-3 앞 절반 닫음).
- 160-4 — 콘크리트(기계 비빔) · 모르터 1:3 열은 사본 없어도 늘 보임 + 손 단위수량 칸(2공구 고정 열 중 이 둘만 · 저장 = 프로젝트 자재 손값) · 콘크리트소요는 이 두 열 계에서만 받음(엑셀 I66 · R66 꼴 · 레미콘은 안 거침) · 배합 · 할증 · 단위중량 상수는 지금 품셈 근거 그대로(엑셀 손값과 다른 것은 알림만 · 124 사용자 확정).
- 160-5 — 채집석 공제 = 엑셀 꼴(돌 채집 둘 · 고임돌 · 막자갈 넷 합 = 「채집석 공제」 ㎥ → 토적집계표 사토에서 뺌 · 끝수 총괄 합계 자리) · 146-1 닫음.
- 숨긴 행 · 열 = 인쇄용 정리 · 합계에 다 들어감 → 앱은 숨김 개념 없이 전부 셈(엑셀 숨긴 칸 값은 이번 파일에서 모두 0).
- 남는 사용자 몫(146-3 뒤 절반) — 레미콘 · 돌 · 자갈 같은 주재료가 일위대가에서 재료 줄이 아니라 타설 · 채집 작업 줄 수량으로 들어 있을 때 작업 줄 → 자재 맞춤 표(단위 ㎥ 타설 → 레미콘 ㎥ 등) · 엑셀 자체 흠 넷(토사개거 미연결 · 레일형 개거 단위 칸 · Φ1500 글자 · 국가지점번호판 단위수량 없음)은 앱에 안 옮김.
## 파일 겹침
| 파일 | 창 |
|---|---|
| `B08_Quantity_UI_Page.ts` · `UI_Options.ts` · `UI_Summary.ts` · `Summary_Data.ts` · `locale_b4.ts` | sub8 |
| `B08_Quantity_Material_Calc.py` ↔ `.ts`(짝 · 거울) · `Router_Material.py` · 토적 계산 파일 | sub5 |
| `Router_Summary.py`(642줄) | 안 고침(160-2 화면만) |
@@ -0,0 +1,13 @@
# 사용자 요구 (2026-10-09 밤 셋째 · 원문 그대로)
계획서 = `PLAN.md` 160장부터 · 분석 = 같은 폴더 `분석_정함.md` · 조사 = 같은 폴더 `조사_*.md`.
```
B08 수량 산출
- 구조물 집계표를 메인 탭으로 이동해주고 구조물 탭은 자재로 명칭변경, 자재탭 내부에는 총괄자재수량집계표, 콘크리트소요자재집계표, 자재수량집계표가 있으면 됨.
- 구조물 집계표에서 미연결된 항목이 뭔지 알아야 될것같음. 셀에 미지정 항목이 뭔지 표기
- 자재수량집계표의 내용 중에 총괄자재수량집계표로 넘어가지않은 항목들이 있는것같은데 확인해봐.
- 콘크리트소요자재집계표에는 자재수량집계표의 내용에서 가져다가 적용해야할것같음. 확인
- 총괄자재수량집계표와 콘크리트소요자재집계표, 자재수량잡계표의 을 다시 자세히 보고 구현을 해줘야하는데 참고 문서의 셀에 있는 수식을 제대로 봐봐 그리고 숨겨진 행열이 있으니 조심해야해.
- 참고자료 : root\resources\knowledge\original\실무문서\2024년 간선임도(기번3-울진.대흥)(2공구)\수량산출\4.2 수량산출(2공구).xlsx
```
@@ -0,0 +1,189 @@
# 조사 I — B08 자재 엑셀 세 표 수식 · 숨긴 행열 · 흐름 (10-9 · 읽기 전용 조사 에이전트)
대상 = `resources/knowledge/original/실무문서/2024년 간선임도(기번3-울진.대흥)(2공구)/수량산출/4.2 수량산출(2공구).xlsx` · openpyxl 수식본(`data_only=False`)과 값본(`data_only=True`) 대조 · 「추정」 = 확인 못 한 판단.
## 0. 결론 다섯 줄
1. 흐름은 한 방향 — 구조물집계표 16행 계 → 자재수량집계표(구조물마다 단위수량 × C) → ① 레미콘 · 철근 · 파형강관 · 와이어메쉬 · 깬돌 · 혼합골재 · 떼는 총괄로 곧장 ② 콘크리트(기계 비빔) I66 · 모르터 R66 만 콘크리트소요로 → 시멘트 · 모래 · 자갈이 총괄로.
2. 콘크리트소요는 손입력이 아님 — C6 = 자재수량집계표!I66 · C9 = 자재수량집계표!R66 · 나머지 셋 줄(Φ25 · 무근 · 1:2)은 빈칸 · 레미콘은 콘크리트소요를 거치지 않음.
3. 총괄로 안 가는 자재 계 열 = 25-24-15 · D22 · D25 · 호안블럭 · 수로관 · 스틸그레이팅(줄 자체 없음) + 돌(채집) 둘 · 고임돌 · 막자갈(채집 넷 → 「채집석 공제」 Y68 → 토적집계표 사토에서 뺌) · 파형강관 Φ1000 · Φ1200 은 계 열(P66 · Q66) 대신 C62 · C64(관매설 구조물 수량)를 읽음.
4. 숨긴 행 · 열은 인쇄 정리일 뿐 — SUM · SUMIF 가 숨긴 칸도 다 셈 · 이번 파일은 숨긴 칸 값이 모두 0 이라 결과 영향 없음 · 개요(그룹) · 너비 0 열 없음.
5. 엑셀 자체 흠 넷 — 토사개거 C46 미연결(구조물집계표 AC16 = 10개소 → 레미콘 0.8㎥ 빠짐) · D42 단위 칸이 수량(AD16) 참조 · A64 「Φ1500」 글(실제 Φ1200) · 국가지점번호판 C50 = 2 인데 단위수량 없음.
## 1. 시트 · 숨김 · 범위
- 시트 29 = 보임 12 · 숨김 17. 세 표는 모두 보임(14 총괄 · 15 콘크리트소요 · 16 자재수량).
- 숨긴 시트 중 세 표와 엮인 것 = `혼합석부설 면적산출서`(자재 C32 로 들어옴) · `사방공종 집계표`(자재 AD66 을 받음).
- 세 표 수식에 외부 파일 참조 0 · 통합문서 이름 정의는 옛 외부 파일 · `#REF!` 다수(세 표와 무관).
- 세 표 모두 메모 · 데이터 유효성 · 조건부 서식 0 · outline(그룹) 0 · 너비 0 열 0.
| 표 | 쓰인 범위 | 인쇄 영역 · 틀 고정 | 머리 | 숨긴 행 | 숨긴 열 |
|---|---|---|---|---|---|
| 총괄자재수량집계표 | A1:H28 | A1:H28 · 없음 | 1단(3행) 구분(A:B) · 규격 · 단위 · 수량 · 할증 · 합계 · 비고 | 6 · 9 · 10 · 17 · 25 | 없음 |
| 콘크리트소요자재집계표 | A1:I11 | 없음 · 없음 | 2단(3~4행) 구분(A:B) · 수량 · 시멘트(m3당 · 수량 kg) · 모래(m3당 · 수량 m3) · 자갈(m3당 · 수량 m3) | 없음 | 없음 |
| 자재수량집계표 | A1:AD68(AE:AJ 는 서식만) | A1:AD68 · H6 | 3단(3 무리 · 4 규격 · 5 단위) · A 구분 · B 규격 · C 수량 · D 단위 · E 「단위수량/수 량」 · F~AD 자재 25열 | 2(높이 6 띄움) · 14~31 · 38~49 · 52~55 | F · G · J · L · M · N · S · T · U · V |
- 병합 — 자재수량: 구조물마다 A · B · C · D 를 두 줄(단위수량 · 수량) 병합 · 66:67 계 열마다 병합 · 머리 F3:H3 레미콘 · J3:N3 철근 · O3:Q3 파형강관 · W3:X3 돌(구입) · Y3:Z3 돌(채집) · R68:X68 「채집석 공제」 · Y68:AB68. 총괄: A4:A7 골재 · A8:B11 레미콘 · A12:A16 철근 · B13:B16 HD400 · A19:B24 파형강관 · A26:B27 깬돌 · H5:H7 · H26:H27.
- 숨김 규칙(추정) — 자재 숨긴 줄 = 이번 공사 C = 0 인 구조물(토사개거는 C 빈칸) · 숨긴 열 = 계 0 인 열. 다만 K · AC · AD(계 0)는 보이고 총괄 7(혼합석 0) · 12~16(철근 0)도 보임 → 손으로 숨김.
## 2. 자재수량집계표 — 열 · 계 · 가는 곳
수식 꼴 = 수량 줄 `=$C{r}*{열}{r}`(단위수량 줄 r) · 계 `F66 = SUMIF($E6:$E65,"수 량",F6:F65)`(「수 량」 공백 둘 · 숨긴 줄 포함) · `Y68 = SUM(Y66:AB67)`. 단위수량이 있는 칸은 수량 식이 빠짐 없이 있음(파이썬 전수 확인) · 단위수량 빈 칸 쪽 식 누락(예 7행 M · N · O~Q · T)은 영향 없음.
| 열 | 자재 · 규격 · 단위 | 숨김 | 계(66) | 가는 곳 |
|---|---|---|---|---|
| F | 레미콘 25-24-15 ㎥ | 숨김 | 0 | 없음(총괄 9행 「25-24-80」 E9 빈칸) |
| G | 레미콘 25-21-80 ㎥ | 숨김 | 0 | 총괄 E10(숨긴 줄) |
| H | 레미콘 25-18-80 ㎥ | | 31 | 총괄 E11 |
| I | 콘크리트 기계 ㎥ | | 27.73 | 콘크리트소요 C6(Φ40mm) |
| J | 이형철근 D13 kg | 숨김 | 0 | 총괄 E13 = J66/1000 |
| K | D16 kg | | 0 | 총괄 E15 = K66/1000 |
| L | D19 kg | 숨김 | 0 | 총괄 E16 = L66/1000 |
| M · N | D22 · D25 kg | 숨김 | 0 | 없음(총괄 「D16~D25 소계」 E14 = E15+E16 뿐) |
| O | 파형강관 Φ800 m | | 84 | 총괄 E19 |
| P | Φ1000 m | | 16 | 안 읽힘 — 총괄 E20 = 자재!C62(관매설 C) |
| Q | Φ1200 m | | 22 | 안 읽힘 — 총괄 E21 = 자재!C64 |
| R | 모르터 1:3 ㎥ | | 1.162 | 콘크리트소요 C9 |
| S | 호안블럭 ㎡ | 숨김 | 0 | 없음 |
| T | 와이어메쉬 ㎡ | 숨김 | 0 | 총괄 E17(숨긴 줄) |
| U | 수로관 400C 본 | 숨김 | 0 | 없음 |
| V | 스틸그레이팅 EA | 숨김 | 0 | 없음 |
| W | 돌(구입) L3:35 ton | | 14.2 | 총괄 E26 |
| X | 돌(구입) L3:45 ton | | 38.4 | 총괄 E27 |
| Y · Z | 돌(채집) L3:35 · L3:45 ㎥ | | 32.85 · 104.4 | Y68 → 토적집계표 H32 |
| AA | 고임돌 채집 ㎥ | | 52.47 | Y68 → 토적집계표 H32 |
| AB | 막자갈 채집 ㎥ | | 84.94 | Y68 → 토적집계표 H32(총괄 6행 막자갈 E6 빈칸) |
| AC | 혼합골재 ㎥ | | 0 | 총괄 E7 혼합석 |
| AD | 떼 ㎡ | | 0 | 총괄 E25(숨긴 줄) · 사방공종 집계표 C7 |
### 구조물 줄 · C 원천 · 단위수량(손입력 상수)
| 줄 | 구조물 · 규격 | C 원천(구조물집계표) | 숨김 | C 값 | 0 아닌 단위수량 |
|---|---|---|---|---|---|
| 6 | 기슭막이 찰쌓기 H=1.5 m | C16 | | 0 | H .31 · I .31 · R .014 · X 1.44 · AA .24 · AB .56 |
| 8 | 찰쌓기 H=2.0 m | D16 | | 20 | H .31 · I .42 · R .019 · X 1.92 · AA .31 · AB .75 |
| 10 | 메쌓기 H=1.5 m | E16 | | 20 | H .31 · Z .54 · AA .24 · AB .56 |
| 12 | 메쌓기 H=2.0 m | F16 | | 60 | H .31 · Z .72 · AA .31 · AB .75 |
| 14 · 16 | 반중력식옹벽 H=2.0 · 1.6 | I16 · J16 | 숨김 | 0 | 없음 |
| 18 · 20 | 떼공 구조물 · 노견 ㎡ | K16 · L16 | 숨김 | 0 | AD 1 · AD 1 |
| 22 · 24 | 포장난간 A형 · C형 | O16 · P16 | 숨김 | 0 | A형 G .04 · K 1.56 |
| 26 · 28 | L형측구 A형 · C형 | M16 · N16 | 숨김 | 0 | A형 G .167 · K 1.56 |
| 30 | 콘크리트포장 T=20cm ㎡ | S17(= A + 확폭) | 숨김 | 0 | G .2 · T 1 |
| 32 | 혼합석부설 T=7cm ㎡ | `혼합석부설 면적산출서`!D22 | | 0 | AC .1 |
| 34 | 돌붙임 찰붙임 ㎡ | G16 | | 20 | I .16 · R .009 · W .71 · AA .12 |
| 36 | 돌붙임 메붙임 ㎡ | H16 | | 90 | Y .27 · AA .12 |
| 38 | 물넘이 포장 H=1.0 | Z16 | 숨김 | 0 | G 2.19 · K 2.496 · T 7.5 |
| 40 | 수로관 개거 400C | AB16 | 숨김 | 0 | H .06 · U .5 · V 1 |
| 42 | 레일형 개거 | AD16(D42 도 AD16 — 흠) | 숨김 | 0 | 없음 |
| 44 | 방지턱 개거 | AA16 | 숨김 | 0 | 없음 |
| 46 | 토사개거 B=0.15 개소 | **빈칸**(AC16 = 10 미연결) | 숨김 | 없음 | G .08 |
| 48 | 안전난간 | AE16 | 숨김 | 0 | G .02 · K 1.404 |
| 50 | 국가지점번호판 | AF16 | | 2 | 없음 |
| 52 | 임도준공표지석 | AG16 | 숨김 | 0 | H .014 |
| 54 | 취수정 | AH16 | 숨김 | 0 | H 3.264 · K 164.74 |
| 56 | 관공 Φ800 관매설 m | AK16 | | 84 | O 1 |
| 58 | 돌집수정 ㄷ형 개소(관보호공) | AM16 | | 2 | I 4.03 · R .157 · Y 1.71 · Z 13.8 · AA 2.54 · AB 3.75 |
| 60 | 돌집수정 ㄴ형 개소 | AN16 | | 3 | I 2.69 · R .096 · Y 1.71 · Z 7.6 · AA 1.53 · AB 2.08 |
| 62 | 관공 Φ1000 관매설 m | AO16 | | 16 | P 1 |
| 64 | 관공 「Φ1500」(실제 Φ1200) | AQ16 | | 22 | Q 1 |
- A · B · D 는 구조물집계표 1~4행 머리를 그대로 읽음(B30 · B32 · B46 · B48 · B50 · B52 · A56 · A62 · A64 · D56~D64 는 손글).
- 구조물집계표에서 자재로 안 오는 열 = 콘크리트깨기(AI · AJ) · 커플링(AL · AP · AR → 총괄로 곧장) · 혼합석부설 V~Y(면적산출서 시트를 대신 씀).
- 구조물집계표 숨긴 열 I~AB · AD · AE · AH~AJ = 위 숨긴 줄들의 원천(모두 0).
## 3. 콘크리트소요자재집계표
식 = `E = D×$C` · `G = F×$C` · `I = H×$C` · 계 11행 = `SUM(5:10)`(끝수 없음).
| 줄 | 구분 · 규격 | C(㎥) 원천 | 시멘트 kg/㎥ | 모래 ㎥/㎥ | 자갈 ㎥/㎥ |
|---|---|---|---|---|---|
| 5 | 콘크리트 Φ25mm | 빈칸 | 346 | 0.51 | 0.59 |
| 6 | 콘크리트 Φ40mm | 자재수량집계표!I66 = 27.73 | 323 | 0.48 | 0.65 |
| 7 | 콘크리트 Φ40mm(무근) | 빈칸 | 312 | 0.46 | 0.70 |
| 8 | 모르터 1:2 | 빈칸 | 680 | 0.98 | — |
| 9 | 모르터 1:3 | 자재수량집계표!R66 = 1.162 | 510 | 1.10 | — |
| 11 | 계 | | 9,549.41 kg | 14.5886 ㎥ | 18.0245 ㎥ |
- 배합 근거 — 모르터 1:3 510 · 1.10 = 건설품셈 건축 9-1-1(지식DB `technical_info/01_임도/04_수량분석정보/건설품셈_활용.md:69`) · 콘크리트 줄 값은 엑셀 손입력(출처 미확인).
## 4. 총괄자재수량집계표
| 줄 | 구분 · 규격 · 단위 | E(수량) 원천 | 할증 F | G(합계) 식 | 숨김 |
|---|---|---|---|---|---|
| 4 | 골재 모래 ㎥ | 콘크리트소요!G11 | 0.06 | ROUNDUP(E×(1+F),0) | |
| 5 | 자갈 ㎥ | 콘크리트소요!I11 | 0.04 | ROUNDUP 0 · H5 = SUM(G5:G7) | |
| 6 | 막자갈 ㎥ | 빈칸 | 0.04 | ROUNDUP 0 | 숨김 |
| 7 | 혼합석 ㎥ | 자재!AC66 | 0.02 | ROUNDUP 0 | |
| 8 | 레미콘 계 | — | — | SUM(G9:G11) | |
| 9 | 25-24-80 ㎥ | 빈칸 | 0.01 | ROUND(…,2) | 숨김 |
| 10 | 25-21-80 ㎥ | 자재!G66 | 0.02 | ROUNDUP(…,0) | 숨김 |
| 11 | 25-18-80 ㎥ | 자재!H66 | 0.02 | ROUND(…,2) | |
| 12 | 이형철근 계 ton | — | — | G13+G14 | |
| 13 | HD400 D13 ton | 자재!J66/1000 | 0.03 | ROUND(…,3) | |
| 14 | D16~D25 소계 | SUM(E15:E16) | — | SUM(G15:G16) | |
| 15 · 16 | D16 · D19 ton | 자재!K66/1000 · L66/1000 | 0.03 | ROUND(…,3) | |
| 17 | 와이어메쉬 #6 100×100 ㎡ | 자재!T66 | 빈칸 | ROUND(…,3) | 숨김 |
| 18 | 시멘트 40kg/대 · 대 | 콘크리트소요!E11/40 | 0.02 | ROUND(…,0) | |
| 19 | 파형강관 Φ800 2.7mm m | 자재!O66 | 빈칸 | ROUNDUP 0 | |
| 20 | Φ1000 2.7mm m | 자재!C62 | 빈칸 | ROUNDUP 0 | |
| 21 | Φ1200 3.2mm m | 자재!C64 | 빈칸 | ROUNDUP 0 | |
| 22~24 | 커플링밴드 Φ800 · 1000 · 1200 개 | 구조물집계표!AL16 · AP16 · AR16 | 빈칸 | ROUNDUP 0 | |
| 25 | 떼 m2 | 자재!AD66 | 0.10 | ROUNDUP 0 | 숨김 |
| 26 · 27 | 깬돌 L3=35 · 45cm TON | 자재!W66 · X66 | 빈칸 | ROUNDUP 0 · H26 = SUM(G26:G27) | |
- 할증은 소수(0.06 = 6%) · 빈칸 = 0.
- 계 줄(8 · 12 · 14)은 끝수 낸 G 를 더함 · 숨긴 9 · 10 도 더함.
- 표시 서식만 소수 자리(E4 0.0 · E13 0.000 등) — 셀 값은 끝수 없음 · 끝수는 G열에서만.
- 머리 번호 어긋남(「4.와이어메쉬」 · 「4.시멘트」 둘 · 「7.떼」가 「6.깬돌」 앞) — 글만의 흠.
## 5. 흐름 지도 · 안 넘어가는 항목
```
구조물집계표 X16(계) ─┬→ 자재수량 C{r} ─(×단위수량)→ 자재수량 계 66 ─┬→ 총괄 E (H·G·J·K·L·O·T·W·X·AC·AD)
혼합석부설 면적산출서 D22 ─┘ ├→ 콘크리트소요 C6(I66) · C9(R66) → 계 11 → 총괄 E4 모래 · E5 자갈 · E18 시멘트(/40)
구조물집계표 AL16·AP16·AR16 ───────────────────────→ 총괄 E22~24 ├→ Y68 = 채집 넷 합 → 토적집계표 H32 = −Y68(사토 공제)
자재수량 C62 · C64(관매설 C) ──────────────────────→ 총괄 E20 · E21 └→ AD66 → 사방공종 집계표 C7
```
| 안 넘어감 | 까닭 |
|---|---|
| F 25-24-15 | 총괄에 「25-24-80」 줄만 · E9 빈칸(이름 어긋남 · 손 비움) |
| M · N D22 · D25 | 총괄 소계가 D16 · D19 만 묶음(줄 없음) |
| S 호안블럭 · U 수로관 · V 스틸그레이팅 | 총괄에 줄 없음 |
| Y · Z 돌(채집) · AA 고임돌 · AB 막자갈 | 현장 채집재 → 구입 자재 아님 → 토적 사토 공제로 감(총괄 막자갈 줄은 구입분 자리 · 빈칸) |
| P · Q 계 | 총괄이 관매설 C62 · C64 를 읽음(지금 값은 같음 · 관 단위수량이 다른 줄에 생기면 어긋남) |
| 토사개거 0.8㎥(25-21-80) | C46 미연결로 자재 계에 아예 안 생김 |
## 6. 값 검산(파이썬 · data_only 값)
- 자재 계 25열 — SUMIF 재셈 = 셀 값 전부 일치 · 숨긴 줄 몫 0.
- H66 = 6.2 + 6.2 + 18.6 = 31 → 총괄 G11 = ROUND(31 × 1.02, 2) = 31.62 · G8 = 31.62 ✓
- I66 = 8.4 + 3.2 + 8.06 + 8.07 = 27.73 · R66 = 0.38 + 0.18 + 0.314 + 0.288 = 1.162 → 시멘트 = 323 × 27.73 + 510 × 1.162 = 9,549.41 kg → E18 238.735대 → G18 = ROUND(× 1.02, 0) = 244 ✓
- 모래 = 0.48 × 27.73 + 1.10 × 1.162 = 14.5886 → G4 = ROUNDUP(× 1.06) = 16 ✓ · 자갈 = 0.65 × 27.73 = 18.0245 → G5 = 19 ✓
- Y68 = 32.85 + 104.4 + 52.47 + 84.94 = 274.66 → 토적 사토 F32 = 994.47 − 274.66 = 719.81 ✓
## 7. 구현할 때 지킬 규칙
1. 자재수량 C = 구조물집계표 열 계 · 수량 = C × 단위수량 · 계 = 「수량」 줄만 더함(단위수량 줄 제외).
2. 콘크리트소요 C 는 자재수량 계에서 끌어옴 — Φ40 ← 콘크리트(기계 비빔) · 1:3 ← 모르터 1:3 · 레미콘은 넣지 않음.
3. 총괄 시멘트 · 모래 · 자갈은 콘크리트소요 계에서만 · 시멘트 = kg ÷ 40(대) · 철근 = kg ÷ 1000(ton).
4. 파형강관은 자재수량 관경 열 계를 씀(엑셀의 C62 · C64 참조는 따르지 않음 — 같은 값 · 더 바른 원천) · 커플링은 구조물집계표 계 그대로.
5. 채집 넷(돌 채집 둘 · 고임돌 · 막자갈)은 총괄로 보내지 않고 「채집석 공제」 합으로 토적 사토에서 뺌.
6. 숨긴 행 · 열은 셈에서 빼지 않음 — 화면에선 0 줄 · 0 열 접기 정도만(선택) · 숨김을 「없는 항목」으로 읽지 않음.
7. 끝수는 총괄 합계에서만 — 중간(자재 계 · 콘크리트소요 계 · 총괄 수량)은 끝수 없이 넘김 · 계 줄은 끝수 낸 합계를 더함.
8. 총괄 끝수 꼴 = 골재 · 파형강관 · 커플링 · 떼 · 깬돌 ROUNDUP 0 · 레미콘 25-24 · 25-18 ROUND 2(25-21 만 ROUNDUP 0 — 엑셀 불일치) · 철근 · 와이어메쉬 ROUND 3 · 시멘트 ROUND 0.
9. 할증 기본(엑셀) = 모래 6 · 자갈 4 · 막자갈 4 · 혼합석 2 · 레미콘 25-24 1 · 그 밖 레미콘 2 · 철근 3 · 시멘트 2 · 떼 10 · 와이어메쉬 · 관 · 커플링 · 깬돌 0(%) — 값 확정은 사용자 협의.
10. 엑셀 흠(토사개거 C 미연결 · D42 · Φ1500 글 · 번호판 단위수량 없음)은 따라 하지 않음.
## 부록 — 현 앱과 다른 점(참고)
현 짝 = `B08_Quantity/B08_Quantity_Material_Calc.py` · `.ts`.
| 항목 | 엑셀 | 현 앱 |
|---|---|---|
| 일위대가 사본 자재 열 | 없음(고정 25열) | 이름 · 규격이 고정 이름과 글 맞춤 안 되면 `unmatched` → 총괄 · 콘크리트소요로 안 감 — 「안 넘어간 항목」의 가장 그럴듯한 원인(추정) |
| 채집석 공제 → 토적 사토 | 있음(H32 = −Y68) | 없음(코드에 「채집석」 0) |
| 콘크리트 배합 모래 · 자갈 | Φ25 .51 · .59 / Φ40 .48 · .65 / 무근 312 · .46 · .70 | Φ25 .487 · .562 / Φ40 .456 · .612 / 무근 빈칸(품셈 kg → ㎥ 환산) |
| 할증 모래 · 자갈 · 시멘트 · 혼합석 | 6 · 4 · 2 · 2 | 12 · 5 · 3(좌측 패널 · PLAN 124) · 4 |
| 25-21-80 끝수 | ROUNDUP 0 | ROUND 2 |
| 총괄 줄 D22 · D25 · 호안블럭 · 수로관 · 스틸그레이팅 | 없음 | 있음(엑셀보다 넓음) |
@@ -0,0 +1,80 @@
# 조사 J — B08 수량산출 현재 코드 (J1~J4 · 10-9 밤 · 읽기 전용 조사 에이전트)
파일 = `B08_Quantity/B08_Quantity_` 생략 · 「추정」 = 코드 · 실자료로 못 굳힌 판단 · 엑셀 수식 · 숨은 행열 = 짝 조사(J5) 몫.
실자료(읽기만 · 서버 함수 직접 부름 · 쓰기 없음):
- 226fc805(검증_랩탑메인) — 사본 폴더 0 · 미연결 시설 12(관 10 · 세월교 2) · 집계표 열 0 · 자재 셋 전부 빈칸 · 판정 불가.
- 2a505e36(검증_sub6 · 사본 6 · 읽기만) — 집계표 열 7 · 자재수량 열 3 · 총괄 2줄 · 콘크리트소요 0줄 · 미연결 10(세월교 1곳은 반쪽 연결).
## J1. 구조물 집계표 → 메인 탭 · 「구조물」 탭 → 「자재」
- 현재 — 메인 탭 셋 `UI_Page.ts:30-34`(구조물 · 토공 · 수리집수면적표 · 처음 = 구조물 `:106 · 128`) · 구조물 아래 보조 탭 넷 `:39-44`(구조물 집계표 · 총괄 · 콘크리트소요 · 자재수량 · 처음 = 집계표 `:83`) · 보조 탭 그리기 `:56-84` · 탭 몸통 `:87-94` · 머리 글 `:5-7`.
- 로케일 — 「구조물」 `ui_template_locale_b4.ts:22` · 「구조물 집계표」 `locale_b2.ts:613`(집계표 카드 caption `UI_Summary.ts:178` 도 씀) · 보조 탭 셋 `b4:23-28` · 안 쓰는 옛 키 `B08_Quantity_Tab_Material`(「자재총괄」 · `b2:615`).
- 좌측 패널 — 메인 탭과 같은 카드 셋(PLAN 122) `UI_Options.ts:235-237` · 「구조물」 카드 = 배관 1본 길이(집계표 커플링) + 할증 셋(총괄) 한 카드.
- 고칠 자리
- `UI_Page.ts` — TABS = 구조물 집계표(`summary`) · 자재(`material`) · 토공 · 수리 · SHEETS = 총괄 · 콘크리트소요 · 자재수량 셋 · `renderTab` 에 `summary` → `renderStructureSummary` 바로 · 보조 탭 함수 이름 · 처음 보조 탭 = 총괄 · 머리 글.
- 로케일 — b4 `:22` 값 「자재」/「Materials」(키 그대로) 또는 새 키 · 메인 탭 이름 = `B08_Quantity_Tab_StructureSummary` 재사용 · b2(1,049줄) 안 고침.
- `UI_Options.ts:235` — 카드 둘로(구조물 집계표 = 1본 · 자재 = 할증 셋) · 머리 글 `:3-8`.
- 재사용 — 보조 탭 줄 그대로 · 집계표 `onLinked` 새 몸통 갈이(`UI_Summary.ts:254-258`) 는 메인 몸통에서도 그대로 돎.
- 시험 — `test_122_b08_options.py:142-143`(카드 id 셋) · `test_121_b08_material_sheets.py:226-227`(`renderMaterialSheet(body, projectId, picked)` 글) · `test_61_2_b08_structure_sheets.py:15-16` · 새 시험 하나(탭 차례 · 보조 탭 셋 · 로케일).
- 위험 — 좌측 [저장] 뒤 `select(current)` 가 보조 탭을 처음(총괄)으로 되돌림(지금도 같음) · `data-b08-tab` 값 바뀜(다른 코드 · 시험 참조 없음 확인).
- 크기 — 작음.
- ⬜ 물음 — 메인 탭 차례 · 좌측 카드: (가) 구조물 집계표 · 자재 · 토공 · 수리 + 카드도 넷(1본 → 집계표 · 할증 → 자재) (나) 카드는 지금 한 장 유지 — 추천 (가)(122 「메인 탭과 같은 컨테이너」).
## J2. 집계표 칸에 미지정 항목 표기
- 현재
- 서버 — 사본 없는 칸은 안 셈 · 열도 안 세움 · 시설만 모음 `Summary_Sheet.py:49-51` → `unlinked`(시설마다 칸 전부 + `linked`) `Summary_Sheet.py:90-135` · 응답 `Router_Summary.py:594-622`(알림 「조합 사본 없는 시설 n곳」 `:596-598`).
- 화면 — 측점 칸만 「No.x · 미연결」 `UI_Summary.ts:149-154` · 값 칸 빈칸 · 누르면 모달 「조합 연결」 칸 목록(칸 이름 = `slot.group ?? 본체` `UI_Link.ts:100`).
- 실자료 — 226fc805 = 열 0개 → 표 = 측점 열 하나 + 「미연결」 12줄(어느 칸인지 안 보임) · 2a505e36 세월교 173.09 = 세월교 · 유입 연결 · 유출 미연결 → 「날개벽 유출」 칸이 조용히 빠지고 측점만 「미연결」.
- 고칠 자리(추천 갈래)
- `UI_Summary.ts:155-173` — 측점 다음 고정 열 「미지정」 하나 · 칸 = 그 측점 미연결 시설 이름 + `linked=false` 칸 이름(예 「배관: 본체 · 관 · 관 보호공(유입) · 관 보호공(유출)」) · `frozen: 2` · 측점 칸 「· 미연결」 은 빼거나 그대로.
- `Summary_Data.ts:79-84` 곁 — 칸 글 만드는 도우미 하나(`unlinkedAt` 재사용) · 로케일 b4 `:61` 곁 키 하나.
- 재사용 — 응답 `unlinked[].slots`(이미 옴 · 서버 안 고침) · 칸 이름 규칙 `UI_Link.ts:100` · 표 칸은 글도 그대로 그림(`ui_template_data_table.ts:84-93`).
- 시험 — `test_61_1_b08_summary_table.py`(node 로 `Summary_Data.ts` 돌림 · 도우미 판정) · `test_143_1_b08_linked_snapshots.py:190` · `test_154_2_b08_direct_link.py:161`(글 검사).
- 위험 — 「본체」 칸은 늘 미연결로 나옴(관 칸만 이어도 셈은 됨 · 본체 ↔ 관 둘 중 하나면 됨) → 「둘 다 넣어야 하나」 오해 · BOX 는 「본체」 칸 이름이 둘(시설 본체 + 그룹 `gboxbody` 「본체」 · 2a505e36 258.12) · 칸 폭(`widthOf` 최대 100 → 줄바꿈).
- 크기 — (가) 작음 · (나) 중간.
- ⬜ 물음 — (가) 「미지정」 열 하나에 미연결 조합 칸 이름(화면만) (나) 서버가 버린 집계 칸(열 머리 · 측점)을 기록 → 그 열 칸에 「미지정」 글 · 열이 없으면 세움(B09 내역 `structure_items` 가 열을 그대로 줄로 씀 `B09_Estimation_Bill_Items.py:87-112` — 빈 줄 늘어남) — 추천 (가).
## J3. 자재수량 → 총괄로 안 넘어가는 항목
- 현재 사슬 — 사본 자재 `Router_Material.py:42-87`(일위대가 자재 = MT 코드 키 · 로직 재료 = `이름|단위` 키 · 파형강관 뺌) → 열마다 단위수량 `:90-115` → 자재수량 열 = 관경 + 사본 자재 · 2공구 고정 23열은 손 값 있을 때만 `Material_Calc.py:196-210 · 249-250` → 끌어옴 = 고정 키 그대로 · 사본 자재는 이름 · 규격 글 맞춤 `matched` `:217-225 · 285-302` → 총괄 = 고정 21줄 + 관경 `:96-118 · 322-369` · 알림 = 개수만 `Router_Material.py:128-131`(화면 `UI_Material.ts:274-286`).
- 실자료 2a505e36 — 자재수량 열 = 파형강관 Φ1000 12 m · 「주연료 할증」 0.121 ℓ · 토목용부직포 28.71 ㎡ → 총괄 = 파형강관 12 · 커플링 1 뿐 · 부직포 · 주연료 할증 = 맞춤 없음(알림 「사본 자재 2종」 · 이름 안 보임).
- 안 넘어가는 까닭
1. 2공구 이름 밖 자재 → 총괄 줄 자체 없음(맞춤 실패 = 버림) — 확인.
2. 기계 연료(「주연료 할증 ℓ」)가 로직 재료로 담김 — 로직 호표 종류 「재료」 전부(`M02_Labor_Doc.py:544-575`) · 실무 자재 표에 없는 값 — 확인.
3. 로직 재료 키 = `이름|단위` · 규격 · 품목 코드 버림(`Router_Material.py:70-75`) → 규격 든 고정 열(레미콘 25-21-80 등) 맞춤 실패 쉬움 — 추정.
4. 참조 줄(승격 · 사전조합) 안 재료 안 셈(`:45-46` ponytail · PLAN 146-3) — 2a505e36 「기슭막이 ㄷ2ㄷ」 = 참조 줄 둘 → 자재 0 — 확인.
5. 주재료가 재료가 아닌 로직 줄 수량 — 레디믹스트콘크리트 타설 GC000198 호표 = 인력 · 로직뿐(레미콘 재료 없음) · 돌 · 자갈 = 「막돌 채집 ㎥」 · 「자갈채집 ㎥」 줄 수량 → 자재수량에 안 옴 — 확인(그 두 로직) · 일반화는 추정.
6. 고정 열 중 총괄 줄 없는 것(콘크리트 기계 · 모르터 1:3 = 콘크리트소요 경유 · 돌(채집) · 고임돌 · 막자갈 = 채집 · 막자갈 끌어올 곳 「」) — 의도(엑셀 꼴 · J5 확인).
7. `matched` 는 단위 안 봄(kg ↔ ton) · 규격 빈 고정 열(호안블럭 · 와이어메쉬 · 스틸그레이팅 · 혼합골재 · 떼)은 이름만 들면 붙음(오맞춤) — 위험.
8. 자재수량 줄 = 횡단배수 집계 열만 · B05 구조물 조합 열 자재는 아예 없음(`조사_B08자재집계표.md` 4절 2).
- 고칠 자리(추천 갈래) — `Material_Calc.py:322-369` · `.ts` 짝(`computeMaterialSheets` 총괄 부분) = 맞춤 없는 자재를 총괄 끝에 그 이름 · 규격 · 단위 · 수량으로 줄 덧붙임 · `Router_Material.py:128-131` 알림에 이름 나열 · (물음 2 뒤) `:70-75` 로직 재료에서 연료 뺌.
- 재사용 — `quantity.materials`(이름 · 규격 · 단위 이미 있음) · `unmatched` 목록 · 총괄 줄 꼴(`finish` · `panel`).
- 시험 — `test_121_b08_material_sheets.py`(거울 `:189`) · `test_143_4_b08_snapshot_materials.py`(맞춤 없음 · 거울 `:72`) · `test_131_b08_material_fix.py` · 새 판정(맞춤 없는 자재 → 총괄 줄).
- 위험 — 덧붙인 줄의 할증 · 끝수 기본값 없음(임의 금지 → 빈칸 · 0) · B09 운반 항목은 총괄 줄 키로만 읽음(`B09_Estimation_Bill_Items.py:116-118` · 새 키는 안 걸림) · 파이썬 · TS 짝 둘 다.
- 크기 — 작음~중간(맞춤 표 · 참조 줄 · 로직 줄 수량 = 큼 · 146-3).
- ⬜ 물음 — (1) 맞춤 없는 자재: (가) 총괄 끝에 그대로 줄 + 알림 이름 (나) 맞춤 표(146-3)까지 기다림 — 추천 (가). (2) 기계 연료 「주연료 할증」: (가) 자재 표에서 뺌 (나) 둠 — 추천 (가)(일위대가 · 원가 쪽에서 이미 셈 · 추정).
## J4. 콘크리트소요 ← 자재수량
- 현재 — 이미 자재수량 계에서 끌어옴(`Material_Calc.py:304-320` · 줄 `:70-82`): Φ40 ← 「콘크리트 기계」 열 계 · 모르터 1:3 ← 「모르터 1:3」 열 계 · Φ25 · Φ40 무근 · 모르터 1:2 = 끌어올 곳 없음(늘 빈 줄 · 숨김) · TS 짝 `.ts:117-123 · 310-327`.
- 빈 까닭
1. 그 두 열이 자재수량에 안 생김 — 고정 열은 손 값 있을 때만 보임(`:196-210 · 249-250` · `.ts:211-226`) · 화면엔 열 추가 길 없음(편집 = 보이는 `m:` 열만 `UI_Material.ts:149`) → 손으로 넣을 수 없음(닭 · 달걀) — 확인.
2. 사본 일위대가에 「콘크리트 기계」 · 「모르터 1:3」 이름 자재 없음 — 타설 · 비비기는 로직 줄 수량(J3 까닭 5) — 확인(GC000198) · 일반화 추정.
3. 실자료 — 226fc805 · 2a505e36 둘 다 콘크리트소요 0줄.
- 고칠 자리(추천 갈래) — `Material_Calc.py:196-210` · `.ts:211-226` = 콘크리트소요가 끌어오는 고정 열(콘크리트 기계 · 모르터 1:3 · 엑셀이 더 잇는 열 있으면 그것까지 — J5)은 늘 보임 → 자재수량에서 손 단위수량 → 콘크리트소요로 흐름 · `CONCRETE_ROWS` 끌어올 곳 = J5 수식대로 고침.
- 재사용 — `pulled` · `CONCRETE_ROWS` 꼴 그대로 · 손 값 저장 길(`overrides.units`) 그대로.
- 시험 — `test_121_b08_material_sheets.py:92-146`(엑셀 66행 · 배합 · 거울) · `test_143_4`(「고정 열은 손 값 있을 때만」 판정 고침) · `test_143_3_b08_material_cards.py`(빈 줄 숨김).
- 위험 — 143-4 「2공구 고정 열은 사본 없으면 안 보임」 일부 되돌림 · 빈 열 늘어 표 넓어짐(값 없는 열 숨김은 지금 없음).
- 크기 — (가) 작음 · (나) 큼.
- ⬜ 물음 — (가) 콘크리트소요 원천 열만 늘 보이게 → 손 단위수량(바로) (나) 사본 로직 줄 수량(타설 · 비비기 ㎥)을 자재수량 열로 올림(로직 맞춤 표 · 146-3) — 추천 (가) · (나)는 146-3 과 함께.
## 고칠 파일 목록
| 파일 | 지금 줄 | 고친 뒤(추정) | 요구 | 700 위험 |
|---|---|---|---|---|
| `B08_Quantity/B08_Quantity_UI_Page.ts` | 143 | ~145 | J1 | 없음 |
| `B08_Quantity/B08_Quantity_UI_Options.ts` | 256 | ~262 | J1 | 없음 |
| `ui_template/ui_template_locale_b4.ts` | 83 | ~88 | J1 · J2 | 없음(b2 1,049줄 = 안 고침) |
| `B08_Quantity/B08_Quantity_UI_Summary.ts` | 274 | ~290 | J2 | 없음 |
| `B08_Quantity/B08_Quantity_Summary_Data.ts` | 194 | ~205 | J2 | 없음 |
| `B08_Quantity/B08_Quantity_Material_Calc.py` | 369 | ~390 | J3 · J4 | 없음 |
| `B08_Quantity/B08_Quantity_Material_Calc.ts` | 386 | ~405 | J3 · J4 | 없음 |
| `B08_Quantity/B08_Quantity_Router_Material.py` | 156 | ~162 | J3 | 없음 |
| `B08_Quantity/B08_Quantity_Router_Summary.py` | 642 | J2 (나) 때만 +20 | J2(나) | 있음(662 · 나 고르면 `Summary_Sheet.py` 135줄 쪽에 둠) |
| 시험 — `test_122` · `test_121` · `test_61_1` · `test_61_2` · `test_143_1` · `test_143_4` · `test_131` + 새 시험 | — | — | — | — |