Merge remote-tracking branches 'origin/sub_laptop_2' and 'origin/sub_laptop_3' into main_laptop_1

This commit is contained in:
2026-09-21 06:01:23 +09:00
2 changed files with 154 additions and 1 deletions
+17 -1
View File
@@ -56,6 +56,22 @@ const label = (it: Brief): string => {
return [`${it. ?? ""} ${it. ?? ""}`.trim(), ...prices].join(" · ");
};
const oldNames = (one: LogicOne, line: HoLine): string[] => {
const brief = one.prices[line. as string] as { 이름?: string; 원문번호?: string } | null;
const names = [brief?., brief?., (line. ?? "").split(/[\s(·]/)[0]];
return [...new Set(names.filter((n): n is string => !!n))];
};
/** 이름을 차례로 찾아 후보가 나오는 첫 결과 — 다 비면 마지막 결과 */
async function firstFound(names: string[]): Promise<Awaited<ReturnType<typeof searchPrice>>> {
let last = await searchPrice(names[0] ?? "");
for (const name of names.slice(1)) {
if (last.items.length) break;
last = await searchPrice(name);
}
return last;
}
function pickRow(one: LogicOne, line: HoLine, i: number, swaps: Swaps, onChange: () => void) {
const cond =
typeof line. === "object" ? (line. as unknown as Record<string, unknown>) : null;
@@ -119,7 +135,7 @@ function pickRow(one: LogicOne, line: HoLine, i: number, swaps: Swaps, onChange:
region: "울진",
})
: line. === "재료"
? searchPrice(one.prices[line. as string]?. ?? (line. ?? "").split(/[\s(·]/)[0]) // 옛 줄(고르기 조건 없음) — 품셈재료 이름 · 없으면 이름 첫 낱말
? firstFound(oldNames(one, line)) // 옛 줄(고르기 조건 없음) — 품셈재료 이름 → 원문번호 → 이름 첫 낱말 순으로 찾아 나온 첫 것
: searchElements(line., line. ?? "");
void found
.then((r) => {
@@ -0,0 +1,137 @@
# 로직 테스트 컨테이너 검증 — 대상 로직 10개 × 방식 A·B·C
ORCA 로 열기 → 기본 입력으로 계산 → 금액 대조. 입력 = 고르기 칸은 첫 값 · 수 칸은 범위 최솟값+1(없으면 5) · 자재지역 「울진」 · 아래 표 밖 값은 비고. 「같음」 = 세 방식 금액이 서로 같고 서버 계산(`/calc`)과도 같음.
| 로직 | 공종 | A | B | C | 판정 | 비고 |
|---|---|---|---|---|---|---|
| GF000181 | 12-16 맨홀 | 멈춤 | 미측정 | 멈춤 | 자료 | 레미콘 규격 고른 뒤 「사다리」 단가 비어 있어 멈춤 · 방식 A·C 같은 까닭 |
| GF000177 | 날개벽 | 11,386,140.96 | 11,386,140.96 | 11,386,140.96 | 같음 | 레미콘 규격을 「쓰이는 재료·기계」에서 골라야 계산됨 |
| GF000173 | VR관(소켓식) 부설 | 멈춤 | 멈춤 | 멈춤 | 자료 | 「MP000023 VR관(소켓식)」 단가 비어 있음 |
| GF000174 | 흄관 부설 | 멈춤 | 멈춤 | 멈춤 | 자료 | 「MP000025 흄관」 단가 비어 있음 |
| GF000160 | 합판거푸집 | 122,364.53 | 122,364.53 | 122,364.53 | 같음 | |
| GF000182 | 펌프카 타설 | 13,455.71 | 13,455.71 | 13,455.71 | 같음 | B 가 하위 로직 줄(공구손료)을 빠뜨리던 것 고침 |
| GF000069 | 우드그래플 집재 | 24,198.18 | 24,198.18 | 24,198.18 | 같음 | 최대집재거리 50 · 집재재적 50 (5 는 표에 줄 없음) |
| GF000219 | 돌쌓기 메쌓기 | 85,378.10 | 85,378.10 | 85,378.10 | 같음 | 돌 「깬잡석」 (첫 값 「견치돌」 은 표에 줄 없음) |
| GF000119 | 노체포설 | 4,522.96 | 4,522.96 | 4,522.96 | 같음 | |
| GF000137 | 중기운반 트레일러 | 92,050.60 | 92,050.60 | 92,050.60 | 같음 | |
## 요약
- 30칸 가운데 21칸 계산됨 · 서로 같음(로직 7개). 열림은 30칸 모두 됨.
- 멈춘 3개 로직(맨홀 · VR관 · 흄관)은 화면 탓이 아님 — 자료의 단가가 비어 있음.
## 고친 것 (테스트 컨테이너 안)
- B: 호표 줄보다 많이 풀린 하위 로직 줄이 안 보이던 것 · 합계 줄 추가.
- 옛 재료 줄(맨홀 레미콘): 이름 찾기가 0건이라 규격을 못 고르던 것 — 품셈재료 이름 → 원문번호 → 이름 첫 낱말 순으로 찾음.
- 멈춤 까닭 쉬운 말: 규격 여럿 · 단가 비어 있음.
- B: 고르기 칸을 첫 값으로 시작(C 와 같게).
## 자료·서버 몫 (고치지 않음)
- 맨홀 「MP000012 사다리」 · VR관 「MP000023」 · 흄관 「MP000025」 단가 비어 있음.
- 옛 재료 줄은 규격 여럿이면 기본으로 계산되지 않음 — 기본 규격이 있으면 열자마자 셈됨.
## 입력 이름 설명 대기 목록
데이터에 입력 설명 칸이 생기면 채울 자리 — 로직 키 · 입력 이름 · 단위 · 종류(고르기 / 수).
| 로직 키 | 공종 | 입력 이름 | 단위 | 종류 |
|---|---|---|---|---|
| GF000181 | 맨홀 | 구체콘크리트량 | ㎥ | 수 |
| GF000181 | 맨홀 | 버림콘크리트량 | ㎥ | 수 |
| GF000181 | 맨홀 | 원형거푸집_기초및슬라브면적 | ㎡ | 수 |
| GF000181 | 맨홀 | 원형거푸집_벽체면적 | ㎡ | 수 |
| GF000181 | 맨홀 | 거푸집면적 | ㎡ | 수 |
| GF000181 | 맨홀 | 철근량 | ton | 수 |
| GF000181 | 맨홀 | 사다리량 | ton | 수 |
| GF000181 | 맨홀 | 지역 | | 고르기 |
| GF000181 | 맨홀 | 합판 | | 고르기 |
| GF000181 | 맨홀 | 각재 | | 고르기 |
| GF000181 | 맨홀 | 철선 | | 고르기 |
| GF000181 | 맨홀 | 못 | | 고르기 |
| GF000181 | 맨홀 | 박리제 | | 고르기 |
| GF000181 | 맨홀 | 높이할증 | % | 수 |
| GF000181 | 맨홀 | 소형할증 | % | 수 |
| GF000181 | 맨홀 | 폼타이 | | 고르기 |
| GF000181 | 맨홀 | 소형가산 | % | 수 |
| GF000181 | 맨홀 | 결속선 | | 고르기 |
| GF000181 | 맨홀 | 자재지역 | | 수 |
| GF000177 | 날개벽 | 콘크리트량 | ㎥ | 수 |
| GF000177 | 날개벽 | 거푸집면적 | ㎡ | 수 |
| GF000177 | 날개벽 | 기초잡석량 | ㎥ | 수 |
| GF000177 | 날개벽 | 철근량 | ton | 수 |
| GF000177 | 날개벽 | 성토부 | | 고르기 |
| GF000177 | 날개벽 | 합판 | | 고르기 |
| GF000177 | 날개벽 | 각재 | | 고르기 |
| GF000177 | 날개벽 | 철선 | | 고르기 |
| GF000177 | 날개벽 | 못 | | 고르기 |
| GF000177 | 날개벽 | 박리제 | | 고르기 |
| GF000177 | 날개벽 | 높이할증 | % | 수 |
| GF000177 | 날개벽 | 소형할증 | % | 수 |
| GF000177 | 날개벽 | 폼타이 | | 고르기 |
| GF000177 | 날개벽 | 소형가산 | % | 수 |
| GF000177 | 날개벽 | 결속선 | | 고르기 |
| GF000177 | 날개벽 | 브레이커 | | 고르기 |
| GF000177 | 날개벽 | 지역 | | 고르기 |
| GF000177 | 날개벽 | 보정작업 | | 고르기 |
| GF000177 | 날개벽 | 자재지역 | | 수 |
| GF000173 | VR관(소켓식) 부설 | 관경 | ㎜ | 고르기 |
| GF000173 | VR관(소켓식) 부설 | 기초콘크리트량 | ㎥/m | 수 |
| GF000173 | VR관(소켓식) 부설 | 거푸집면적 | ㎡/m | 수 |
| GF000173 | VR관(소켓식) 부설 | 지역 | | 고르기 |
| GF000173 | VR관(소켓식) 부설 | 합판 | | 고르기 |
| GF000173 | VR관(소켓식) 부설 | 각재 | | 고르기 |
| GF000173 | VR관(소켓식) 부설 | 철선 | | 고르기 |
| GF000173 | VR관(소켓식) 부설 | 못 | | 고르기 |
| GF000173 | VR관(소켓식) 부설 | 박리제 | | 고르기 |
| GF000173 | VR관(소켓식) 부설 | 높이할증 | % | 수 |
| GF000173 | VR관(소켓식) 부설 | 소형할증 | % | 수 |
| GF000173 | VR관(소켓식) 부설 | 폼타이 | | 고르기 |
| GF000173 | VR관(소켓식) 부설 | 자재지역 | | 수 |
| GF000174 | 흄관 부설 | 관경 | ㎜ | 고르기 |
| GF000174 | 흄관 부설 | 기초콘크리트량 | ㎥/m | 수 |
| GF000174 | 흄관 부설 | 거푸집면적 | ㎡/m | 수 |
| GF000174 | 흄관 부설 | 지역 | | 고르기 |
| GF000174 | 흄관 부설 | 합판 | | 고르기 |
| GF000174 | 흄관 부설 | 각재 | | 고르기 |
| GF000174 | 흄관 부설 | 철선 | | 고르기 |
| GF000174 | 흄관 부설 | 못 | | 고르기 |
| GF000174 | 흄관 부설 | 박리제 | | 고르기 |
| GF000174 | 흄관 부설 | 높이할증 | % | 수 |
| GF000174 | 흄관 부설 | 소형할증 | % | 수 |
| GF000174 | 흄관 부설 | 폼타이 | | 고르기 |
| GF000174 | 흄관 부설 | 자재지역 | | 수 |
| GF000160 | 합판거푸집 | 횟수 | | 고르기 |
| GF000160 | 합판거푸집 | 합판 | | 고르기 |
| GF000160 | 합판거푸집 | 각재 | | 고르기 |
| GF000160 | 합판거푸집 | 철선 | | 고르기 |
| GF000160 | 합판거푸집 | 못 | | 고르기 |
| GF000160 | 합판거푸집 | 박리제 | | 고르기 |
| GF000160 | 합판거푸집 | 높이할증 | % | 수 |
| GF000160 | 합판거푸집 | 소형할증 | % | 수 |
| GF000160 | 합판거푸집 | 폼타이 | | 고르기 |
| GF000182 | 펌프카 타설(편성 · 일일 시공량) | 작업조 | | 고르기 |
| GF000182 | 펌프카 타설(편성 · 일일 시공량) | 슬럼프 | | 고르기 |
| GF000182 | 펌프카 타설(편성 · 일일 시공량) | 시설유형 | | 고르기 |
| GF000182 | 펌프카 타설(편성 · 일일 시공량) | 현장조건 | | 고르기 |
| GF000182 | 펌프카 타설(편성 · 일일 시공량) | 재세팅 | | 고르기 |
| GF000182 | 펌프카 타설(편성 · 일일 시공량) | 진동기 | | 고르기 |
| GF000182 | 펌프카 타설(편성 · 일일 시공량) | 타설방법 | | 고르기 |
| GF000182 | 펌프카 타설(편성 · 일일 시공량) | 펌프차 | | 고르기 |
| GF000182 | 펌프카 타설(편성 · 일일 시공량) | 지역 | | 고르기 |
| GF000069 | 동력상하차기(우드그래플) 집재 | 최대집재거리 | m | 수 |
| GF000069 | 동력상하차기(우드그래플) 집재 | 집재재적 | ㎥/ha | 수 |
| GF000069 | 동력상하차기(우드그래플) 집재 | 원목길이 | m | 고르기 |
| GF000069 | 동력상하차기(우드그래플) 집재 | 잔존목 | | 고르기 |
| GF000069 | 동력상하차기(우드그래플) 집재 | 지역 | | 고르기 |
| GF000219 | 돌쌓기 메쌓기(인력) | 뒷길이 | ㎝ | 고르기 |
| GF000219 | 돌쌓기 메쌓기(인력) | 돌 | | 고르기 |
| GF000219 | 돌쌓기 메쌓기(인력) | 쌓기 | | 고르기 |
| GF000219 | 돌쌓기 메쌓기(인력) | 높이 | m | 수 |
| GF000219 | 돌쌓기 메쌓기(인력) | 초과증가율 | % | 수 |
| GF000119 | 노체포설(굴착기 0.7㎥ 무한궤도) | 지역 | | 고르기 |
| GF000119 | 노체포설(굴착기 0.7㎥ 무한궤도) | 보정작업 | | 고르기 |
| GF000137 | 중기운반 트레일러(20ton) | t2 | 분 | 수 |
| GF000137 | 중기운반 트레일러(20ton) | 지역 | | 고르기 |
| GF000137 | 중기운반 트레일러(20ton) | 운반수단 | | 고르기 |