[1845] 실내집중형 PCS 수동 회로분할 동일 방위/구배 강제 — INDFCS + 수동 분할에서 다방위/다구배 직렬회로 구성 차단

This commit is contained in:
ysCha 2026-05-06 17:43:29 +09:00
parent cee4f9e4e9
commit 4ebe4cb455
2 changed files with 16 additions and 3 deletions

View File

@ -49,6 +49,15 @@
- **태그**: `[INDFCS-SAME-ROOF 2026-05-06]`
- **회귀 체크**: ① INDFCS 동일 방위/구배 누적 ② INDFCS 1차 동향 후 2차 남향 추가 차단 ③ 북면 혼합 차단(기존) ④ OUTDMULTI 다방위 차단(기존) ⑤ 자동분할 영향 없음.
### 1.8 [1845] 보정 — 검증 단위를 PCS → 회로번호로 좁힘 (커밋 `[TBD-CODE]`)
- **작성일**: 2026-05-06
- **배경**: 1.7 수정 직후 회귀에서 **자동분할 후 수동분할 이어가는 시나리오** 차단 발견. 자동으로 회로 1=남(south-5.5) 4장이 부여된 같은 PCS 에, 수동으로 회로 2=서(west-5.5) 4장을 묶으려 하면 alert 차단됨. 회로 1 과 회로 2 는 서로 다른 직렬회로이므로 통과돼야 정상.
- **원인**: 1.7 의 (b) 누적 패턴이 같은 PCS 의 **모든** 기존 모듈을 합집합 대상으로 잡아, 다른 회로번호까지 검증에 포함됨. HANASYS 보고 본문 "**同一の直列回路として**構成できてしまう" 에 비춰 보면 검증 단위는 PCS 가 아니라 **회로번호** 가 맞음.
- **수정**: `originHaveThisPcsModules``getCircuitNumber()` 결과 (이번 부여하려는 회로번호 문자열) 와 일치하는 모듈로 필터링한 `sameCircuitExisting` 으로 교체. 이번 선택 모듈 + 같은 회로번호 기존 모듈만 합집합 검증.
- **진단 경로**: `debugCapture.log('INDFCS-VALIDATION', ...)` 임시 삽입 → `NEXT_PUBLIC_ENABLE_LOGGING=true` 로 재현 → `debug/debug.log` 에서 `uniqueKeys``existingSameCircuitCount` 확인 후 정식화 시 제거.
- **태그**: `[INDFCS-SAME-ROOF 2026-05-06]` (1.7 과 동일 태그, 주석에 "보정 2026-05-06" 명시)
- **회귀 체크 추가**: ⑥ 자동(회로 1 = 남) → 수동(회로 2 = 서) 통과 ⑦ 수동에서 같은 회로번호로 다른 방위 묶기는 여전히 차단.
---
## 2. 모듈 배치 / 설치 영역

View File

@ -161,11 +161,15 @@ export default function PassivityCircuitAllocation(props) {
}
// [INDFCS-SAME-ROOF 2026-05-06] PCS
// PCS .
// " (= )" / .
// = + PCS· .
// (HANASYS : INDFCS + / )
// = + PCS ( )
// ( 2026-05-06: 1 PCS
// "" )
const newCircuitNumberStr = getCircuitNumber()
const sameCircuitExisting = originHaveThisPcsModules.filter((obj) => obj.circuitNumber === newCircuitNumberStr)
const indfcsCombinedSurfaceTypes = new Set(
targetModuleInfos.concat(originHaveThisPcsModules).map((obj) => {
targetModuleInfos.concat(sameCircuitExisting).map((obj) => {
const surface = canvas.getObjects().find((s) => s.id === obj.surfaceId)
return surface ? `${surface.direction}-${surface.roofMaterial.pitch}` : ''
}),