화면설계서: 이전기본계획조회 (기본 계획 찾기)
1. 기본 정보
| 항목 |
내용 |
| 버전 |
0.2 |
| 프로세스명 |
UI설계 |
| 화면명 |
이전기본계획조회 (기본 계획 찾기) |
| 화면 유형 |
[v] 조회 [ ] 입력 [ ] 수정 [ ] 삭제 [ ] 출력 |
| 메뉴 경로 |
하수도기본계획 등록·수정 > 사업개요 > [이전기본계획조회] Dialog |
2. 화면 목적
하수도기본계획 등록·수정 화면에서 이전(기수립) 기본계획 수치와 관련 보고서를 조회·다운로드한다. 시도·구군·연도·처리시설을 선택한 뒤 총설·처리구역별 현황을 표시하고, 분류 트리에서 기본계획 파일을 내려받는다. 부모 사업개요 폼에는 수치를 반영하지 않는다(레거시 bscPlnPopup.jsp와 동일).
3. 화면 구성
3-1. 전체 레이아웃
부모: 하수도기본계획 등록/수정 폼 → 사업개요 섹션의 [이전기본계획조회] 버튼으로 Dialog 오픈.
3-2. 화면 데이터 흐름
4. 영역 A — 검색 필터
구성: 시도 · 구군 · 연도 · 처리시설 (+ 조회).
- 시도·구군:
adstdstr 콤보 (기존 스펙 유지)
- 연도·처리시설: 각각
useLvNowDmgMtncGnsvy를 별도 호출. level에 따라 반환 계층이 달라진다.
4-1. 필드 정의
| 표시명 |
입력 유형 |
필수 |
기본값 |
API 파라미터 매핑 |
비고 |
| 시도 |
Select |
Y |
부모 sewerBscPlan.sido |
ctpvNm(표시명), 코드는 adstDstrCd |
useFindSidoCombo |
| 구군 |
Select |
Y |
부모 sewerBscPlan.gugun |
sggNm(표시명), 코드는 adstDstrCd |
useFindGugunCombo(sidoCd) |
| 연도 |
Select |
Y |
없음 |
gnsvyYr / 조회 시 targetYear |
useLvNowDmgMtncGnsvy({ level: "2", ctpvNm, sggNm }) |
| 처리시설 |
Select |
Y |
없음 |
swtrmtFcltCd ← 옵션 value, 라벨 swtrmtFcltNm |
useLvNowDmgMtncGnsvy({ level: "3", ctpvNm, sggNm, gnsvyYr }) |
처리시설은 bns-if useFacilityList를 사용하지 않는다.
4-2. 버튼
| 버튼명 |
동작 |
| 조회 |
필수값 검증 후 getNowDmgMtncGnsvy 호출 → 영역 C·D 갱신 |
| 닫기 |
Dialog 종료 (부모 미반영) |
4-3. lvNowDmgMtncGnsvy level 캐스케이드
| 트리거 |
Request level |
Request 파라미터 |
UI에 쓰는 응답 |
옵션 추출 |
| 시도 선택 |
"1" |
ctpvNm |
(하위 초기화용) |
연도·처리시설 Select 리셋. 구군은 findGugunCombo |
| 구군 선택 |
"2" |
ctpvNm, sggNm |
연도 Select |
트리에서 level === 3 노드의 gnsvyYr |
| 연도 선택 |
"3" |
ctpvNm, sggNm, gnsvyYr |
처리시설 Select |
선택 연도(level === 3) 노드의 children[] → swtrmtFcltCd / swtrmtFcltNm |
상위 변경 시 하위 선택값·옵션을 RESET한다 (시도→구군·연도·시설 / 구군→연도·시설 / 연도→시설).
5. 영역 B — 기본계획파일
5-1. 트리 (B-1)
| 표시명 |
Field |
비고 |
| 분류명 |
clsfSystmNm |
ClsfSystmResponseDto |
| 노드키 |
clsfSystmSn |
선택 시 파일 목록 조회 |
| 상위키 |
upClsfSystmSn |
클라이언트에서 트리 조립 |
| 정렬 |
sortSeq |
|
| 경로 |
path |
|
- 조회 파라미터:
clsfSystmNm = 선택 구군명(레거시와 동일). upClsfSystmSn은 하위 전개 시 TBD.
- 시도·구군 미선택 시: 「시도와 구군을 선택하세요.」 안내.
5-2. 파일 목록 (B-2)
| 표시명 |
Field |
비고 |
| 파일명 |
TBD |
getFile Response DTO가 unknown — 백엔드 스키마 확정 후 매핑 |
| (기타) |
TBD |
레거시: 트리 선택 후 목록 표시, 클릭 시 fileprcs → fileDownload |
5-3. 버튼·상호작용
| 동작 |
설명 |
| 트리 노드 클릭 |
getFile({ clsfSystmSn, … }) → B-2 목록 |
| 파일 클릭 |
getFilePrcs(fileSn) → fileDownload({ filePath, fileName }) |
| 빈 목록 |
「트리에서 항목을 선택하세요.」 / 「파일이 없습니다.」 |
6. 영역 C — 총설
6-1. 테이블 구조
| 행(구분) |
열 매핑 (당초14 / 기준 / 변경14) |
| 계획목표년도 |
planYrDt1planYrDt4 / planYr / planYrDc1planYrDc4 (+ 년 접미사) |
- 헤더: 당초(1
4단계) · 기준 · 변경(14단계)
- 데이터 소스:
getNowDmgMtncGnsvy 응답 배열의 첫 번째 요소
- 읽기 전용
7. 영역 D — 처리구역별 현황
7-1. 행 정의 (표시명 → Field 접두사)
각 행은 Dt1Dt4 / (접미사 없음=기준) / Dc1Dc4 셀로 표시한다. 숫자는 천단위 콤마, 없으면 -.
| 표시명 |
Field 접두사 |
비고 |
| 하수처리인구(인) |
swtrmtPpltnCnt |
|
| 자연적하수처리인구수(인) |
natrSwtrmtPpltnCnt |
|
| 사회적하수처리인구수(인) |
scilSwtrmtPpltnCnt |
|
| 하수처리구역면적 |
swtrmtZoneArea |
|
| 물사용량원단위 |
wtrUsqtyOrgnUnit |
|
| 오수전환율(%) |
drtwSwtcRt |
|
| 변동부하율(%) |
flctnLodRt |
|
| 오수원단위 |
drtwOrgnUnit |
|
| 계획하수량합계(㎥/일) |
planSwageQntSum |
|
| 생활오수(㎥/일) |
lvngDrtwSum |
|
| 지하수(㎥/일) |
ugwtSum |
|
| 공장폐수(㎥/일) |
fctryWwtSum |
|
| 관광오수(㎥/일) |
toursmDrtwSum |
|
| 군부대(㎥/일) |
mtbsSum |
|
| 연계처리수(㎥/일) |
linkPrcsCntSum |
|
| 기타오수(㎥/일) |
etcDrtwSum |
|
| 지하수사용량(㎥/일) |
ugwtUseSum |
|
| 시설용량(㎥/일) |
fcltCpctSum |
|
| 배제방식 |
exclsMethExpln |
문자열; 단계별 *Dt*/*Dc* 존재 시 동일 규칙 |
헤더 3행째 연도: 영역 C와 동일하게 planYrDt* / planYr / planYrDc* 표시.
8. API/DTO 명세
8-1. 공통
| 항목 |
값 |
| DC Base |
/dc-service/api/v1 (ENDPOINT.DC_SERVICE) |
| AS adstdstr |
/as-service/api/v1/adstdstr |
| 클라이언트 모듈 |
@/entities/dc (dcService), @/entities/adstdstr |
영역 A 처리시설은 bns-if를 사용하지 않음.
8-2. 시도·구군 콤보 (non-DC)
| 기능 |
Method |
URL |
Request DTO |
Response DTO |
API |
| 시도목록 |
GET |
/as-service/api/v1/adstdstr/sido |
— |
CmCdAdstDstrComboResponseDto[] |
cmCdAdstDstrService.findSidoCombo / useFindSidoCombo |
| 구군목록 |
GET |
/as-service/api/v1/adstdstr/gugun |
Query: sido (시도코드) |
CmCdAdstDstrComboResponseDto[] |
cmCdAdstDstrService.findGugunCombo / useFindGugunCombo |
8-3. 연도·처리시설 계층 조회 — DC
| 기능 |
Method |
URL |
Request DTO |
Response DTO |
API |
| 계층형 계획목록 |
GET |
/dc-service/api/v1/lvNowDmgMtncGnsvy |
LvNowDmgMtncGnsvySearchDto |
LvNowDmgMtncGnsvyResponseDto[] |
dcService.getLvNowDmgMtncGnsvy / useLvNowDmgMtncGnsvy |
연도 Select·처리시설 Select는 각각 useLvNowDmgMtncGnsvy를 호출한다 (level만 다르게).
Request (LvNowDmgMtncGnsvySearchDto)
| 필드 |
시도(level=1) |
구군→연도(level=2) |
연도→시설(level=3) |
level |
"1" |
"2" |
"3" |
ctpvNm |
필수 |
필수 |
필수 |
sggNm |
— |
필수 |
필수 |
gnsvyYr |
— |
— |
필수 |
Response 노드 필드 (LvNowDmgMtncGnsvyResponseDto, 부분 optional)
| 필드 |
등장 level |
설명 |
level |
1~3 |
계층 깊이 |
ctpvNm |
1 |
시도명 |
sggNm |
2 |
구군명 |
gnsvyYr |
3 |
연도 → 연도 Select value |
swtrmtFcltCd |
시설(리프) |
처리시설 코드 |
swtrmtFcltNm |
시설(리프) |
처리시설명 |
children |
1~3 |
하위 노드 배열 |
TBD: 현재 useLvNowDmgMtncGnsvy enabled가 level && ctpvNm && sggNm && gnsvyYr로 고정되어 level=1/2 호출이 막힘. level별 필수 파라미터만 검사하도록 수정 필요.
예: level=1 → ctpvNm / level=2 → ctpvNm && sggNm / level=3 → ctpvNm && sggNm && gnsvyYr
8-4. 기본계획 수치 조회 — DC
| 기능 |
Method |
URL |
Request DTO |
Response DTO |
API |
| 현재·단계별 수치 |
GET |
/dc-service/api/v1/nowDmgMtncGnsvy |
NowDmgMtncGnsvySearchDto |
NowDmgMtncGnsvyResponseDto[] |
dcService.getNowDmgMtncGnsvy / useNowDmgMtncGnsvy |
Request (NowDmgMtncGnsvySearchDto)
| 필드 |
매핑 |
swtrmtFcltCd |
영역 A 처리시설 |
ctpvNm |
영역 A 시도 표시명 |
sggNm |
영역 A 구군 표시명 |
targetYear |
영역 A 연도 (gnsvyYr) |
Response: 지표 필드 + Dt1Dt4 / Dc1Dc4 접미사 스테이지 필드 (NowDmgMtncGnsvyResponseDto). UI는 data[0] 사용.
8-5. 분류체계 — DC
| 기능 |
Method |
URL |
Request DTO |
Response DTO |
API |
| 분류트리조회 |
GET |
/dc-service/api/v1/clsfSystm |
ClsfSystmParamsDto |
ClsfSystmResponseDto[] |
dcService.getClsfSystm / useClsfSystm |
Request: clsfSystmNm?, upClsfSystmSn?
Response: clsfSystmSn, upClsfSystmSn, clsfSystmNm, sortSeq, droppAble, path
레거시 경로 /clsf → 현재 클라이언트는 /clsfSystm.
8-6. 파일 목록·처리·다운로드 — DC
| 기능 |
Method |
URL |
Request DTO / Params |
Response DTO |
API |
| 파일목록 |
GET |
/dc-service/api/v1/file |
FileParamsDto (sort?, clsfSystmSn?, vetPrcsYn?) |
unknown TBD |
dcService.getFile / useFile |
| 파일처리정보 |
GET |
/dc-service/api/v1/fileprcs |
Query: fileSn |
unknown TBD |
dcService.getFilePrcs / useFilePrcs |
| 파일다운로드 |
POST |
/dc-service/api/v1/fileDownload |
FileDownloadParamsDto (filePath?, fileName?) |
unknown TBD |
dcService.fileDownload / useFileDownload |
TBD: 파일 관련 Response 스키마·다운로드 blob/헤더 처리·fileDownload POST body vs query 전달 방식은 백엔드/게이트웨이 확인 후 확정.
9. UI 구현 가이드
9-1. 기술 스택·원칙
- UI:
@common/components — Dialog, Select, Button, Table, Skeleton
- 상태: Dialog 로컬 state + React Query (
entities/dc, adstdstr)
- 영역 A 연도·처리시설:
useLvNowDmgMtncGnsvy를 level별 두 번(또는 시도 포함 시 세 번) 호출
- 테이블: 읽기 전용 고정 행 →
@tanstack/react-table / DataTable 불필요
- 트리: jsTree 미사용 — 재귀 들여쓰기 트리
- 번들:
PreviousPlanLookupDialog는 outline에서 next/dynamic 로드 권장
- 부모 폼: 수치 미반영 (조회·다운로드 only)
- 1차 구현 시 DC 미연동이면
@faker-js/faker mock + TODO → 이후 dcService 훅으로 교체
9-2. 앱·파일 배치
| 구분 |
경로 |
| 진입 버튼 |
pages/sewer-bsc-plan/ui/sections/outline-form-section.tsx |
| Dialog |
pages/sewer-bsc-plan/ui/previous-plan-lookup-dialog.tsx |
| 필터 |
pages/sewer-bsc-plan/ui/previous-plan/previous-plan-search-filters.tsx |
| 파일 |
pages/sewer-bsc-plan/ui/previous-plan/previous-plan-file-section.tsx |
| 총설 |
pages/sewer-bsc-plan/ui/previous-plan/previous-plan-summary-table.tsx |
| 처리구역 |
pages/sewer-bsc-plan/ui/previous-plan/previous-plan-area-table.tsx |
| 셀 매핑 유틸 |
pages/sewer-bsc-plan/lib/previous-plan-table-utils.ts |
| mock(선택) |
pages/sewer-bsc-plan/lib/previous-plan-mock.ts |
| DC entity |
entities/dc/api/dc-service.ts, queries.ts, model/dc-interface.ts |
| 레거시 참조 |
adssNewOld/.../cmmn/bscPlnPopup.jsp |
9-3. 영역별 UI 매핑
| 영역 |
컴포넌트 |
데이터 |
| A |
previous-plan-search-filters |
adstdstr + useLvNowDmgMtncGnsvy(level 1·2·3) |
| B |
previous-plan-file-section |
useClsfSystm + useFile + useFilePrcs + useFileDownload |
| C |
previous-plan-summary-table |
useNowDmgMtncGnsvy / 조회 결과 state |
| D |
previous-plan-area-table |
동일 |
9-4. 다이얼로그·라우팅
| 항목 |
내용 |
| 다이얼로그명 |
PreviousPlanLookupDialog / 타이틀 기본 계획 찾기 |
| 오픈 |
사업개요 [이전기본계획조회] |
| 라우트 |
없음 (모달). 부모: /sewer-bsc-plan/regist, /sewer-bsc-plan/[id]/edit |
| 선택 반영 |
없음 |
9-5. 데이터 흐름 (구현 요약)
10. 미확정 (TBD) 추적
| ID |
항목 |
비고 |
| T1 |
useLvNowDmgMtncGnsvy enabled을 level별 필수값으로 분기 |
1: ctpvNm / 2: +sggNm / 3: +gnsvyYr |
| T2 |
getFile / getFilePrcs / fileDownload Response DTO |
현재 unknown |
| T3 |
파일 다운로드 UX (blob, Content-Disposition, 게이트웨이) |
레거시 apigateway 직접 호출과 차이 |
| T4 |
clsfSystm의 upClsfSystmSn 점진 로드 여부 |
flat 목록 vs 계층 API |
| T5 |
1차 mock vs 즉시 dcService 실연동 |
마이그레이션 플랜은 mock 우선, entity는 준비됨 |
| T6 |
부모 폼 수치 반영 |
요구 없음(레거시 동일). 요청 시 별도 스펙 |
| T7 |
level=1 응답 UI 활용 여부 |
시도 선택 시 호출하나 구군은 adstdstr — 응답은 캐시·검증용일 수 있음 |