HBIV212_수량 변경·반품 모달
(Hereby) 재고관리 > 수량 변경·반품 모달
| 앱 | 재고관리 (HBIV) |
| 대상 사용자 | 조건1 [재고관리 권한] |
| 프로토타입 | TBU |
| 관련 정책 | TBU |
| Status | review |
| Owner | 카나 (PM) |
개요
- 품목 목록([[HBIV210_재고관리 (품목 목록)]]) row 작업의 "수량" / "반품" 클릭 시 열리는 2개 모달을 다룬다.
- 수량 변경은 현재 수량 + 변경량(+ 입고 / - 출고) + "변경 후: n" 실시간 미리보기 + 사유로 delta 조정하는 destructive 액션이다(변경량 0이면 "변경" disabled). 반품 관리는 "반품 대상으로 표시" 체크 단일로 flag를 저장한다.
- 현재 수량 변경은 delta + 사유 수준이며, 입출고 이력을 영속하는 InventoryLedger(입고/출고/조정 immutable ledger)는 미구현 = Donue 정본 설계 원칙 후보(TBU).
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 + 확정 스타일 |
Data I/O
Server → Client
| 변수 | 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
| $ | inventory_items.name | - | 선택 품목명. 예시 "test" |
| $ | item.quantity | 0 | "현재 수량 n" 표시. 예시 "현재 수량 0" |
| $ | 현재 수량 + 변경량 (computed) | 현재 수량 | "변경 후: n" 실시간 미리보기 |
| $ | inventory_items.isRefundCandidate | false | 반품 flag 초기 체크 상태 (추정) |
Client → Server
| 액션 | 전달 값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 수량 변경 | itemId, delta, reason | sdk.inventory.quantity.adjust() (추정) | inventory:write (추정), destructive, 사람 확정 |
| 반품 flag 저장 | itemId, refundTarget | sdk.inventory.refund.mark() (추정) | inventory:write (추정) |
화면 플로우
수량 변경 모달 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | 품목 row "수량" 클릭 | InventoryQuantityAdjustment | |
| 10 | 제목 | Text | "수량 변경" | ||
| 20 | 품목명 | Text | • 선택 품목명 표시. "test" | inventory_items.name | |
| 30 | 현재 수량 | Output | • 조정 전 현재 수량 표시. "현재 수량 0" | item.quantity | |
| 40 | 변경량 | Input | • 입고(+)/출고(-) delta 입력. "변경량 (+ 입고 / - 출고)" • 입력 시: "변경 후" 미리보기 실시간 갱신 | delta | |
| 50 | 변경 후 | Output | • 현재 수량 + 변경량 실시간 미리보기. "변경 후: n". 예시 "변경 후: 0" | computed | 실시간 반영 |
| 60 | 사유 | Input Box | • 조정 사유 입력(audit 최소 필드). "사유", placeholder "입고, 소모, 폐기 등" • 입력 시: adjustment.reason 바인딩 | adjustment.reason | audit 최소 필드 |
| 70 | 취소 | Button | • 조정을 버리고 모달을 닫는 기능. "취소" • 클릭 시: 즉시 실행, 모달 닫기 (조정 없음) | close | |
| 80 | 변경 | Button | • 변경량만큼 수량을 delta 조정하는 기능(destructive). "변경" • 클릭 시: - CASE01 [변경량 0]: disabled (실행 불가) - CASE02 [변경량 비0]: delta + 사유로 수량 조정 mutation | quantity adjustment | destructive, 변경량 0 disabled, 미실행 |
반품 관리 모달 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 노출 조건 | - | 품목 row "반품" 클릭 | RefundCandidate | |
| 10 | 제목 | Text | "반품 관리" | ||
| 20 | 품목명 | Text | • 선택 품목명 표시. "test" | inventory_items.name | |
| 30 | 반품 flag | Checkbox | • 품목을 반품 대상으로 표시하는 단일 체크(memo/quantity/status 필드 미노출). "반품 대상으로 표시" • 클릭 시: isRefundCandidate 토글 (체크 상태 반영) | inventory_items.isRefundCandidate | 단일 체크 |
| 40 | 취소 | Button | • 변경을 버리고 모달을 닫는 기능. "취소" • 클릭 시: 즉시 실행, 모달 닫기 (저장 없음) | close | |
| 50 | 저장 | Button | • 반품 flag를 저장하는 기능. "저장" • 클릭 시: refund flag 저장 mutation → [[HBIV230_관리 (반품 대상 목록)]] 집계 반영 | refund flag save | mutation, 미실행 |
Open Question
- 수량 변경 history/audit 조회 UI 존재 여부, 입출고 이력 InventoryTransaction 존재 여부 = TBU
- ledger 영속: 현재 delta+reason 수준. Donue InventoryLedger(입고/출고/조정/반품/폐기 immutable, actor+timestamp+before/after) 원칙 = 설계 후보(TBU)
- 반품 모달 memo(refundMemo) / quantity(refundQuantity) / status 필드는 ERD에 존재하나 라이브 flag만 확인 = TBU