재고 수불부
재고 수불부는 재고가 증가하거나 감소한 모든 원인을 시간순으로 기록하는 원장입니다. 현재고가 결과라면 수불부는 그 결과가 만들어진 과정입니다.
주의사항
수불부는 현재고를 설명하는 근거 데이터입니다. 이미 생성된 수불을 삭제하면 장애 분석과 마감 검증이 어려워지므로, 취소나 보정은 별도 역거래로 남기는 방식을 우선 검토하세요.
왜 수불 이력 테이블이 필요한가
현재고 테 이블만 있으면 재고가 왜 틀렸는지 알 수 없습니다. 수불부가 있으면 특정 상품의 재고가 언제, 어떤 문서 때문에 바뀌었는지 추적할 수 있습니다.
| 질문 | 수불부가 답하는 방식 |
|---|---|
| 재고가 왜 줄었는가 | 출고확정, 조정감소, 폐기 수불 확인 |
| 반품이 재고에 반영됐는가 | 반품입고 또는 불량 이동 수불 확인 |
| 취소가 두 번 반영됐는가 | 원수불과 역수불 연결 확인 |
| 월말 재고가 맞는가 | 기간 수불 합계로 기초/기말 계산 |
재고 수불 흐름
재고 오류 로그와 재고 이력의 차이
로그는 시스템이 어떤 작업을 했는지 남기는 기술 기록입니다. 수불부는 업무적으로 재고가 변한 공식 기록입니다. 로그는 삭제되거나 보관 기간이 짧을 수 있지만, 수불부는 마감과 감사의 기준이 됩니다.
수불 유형 예시
| 유형 | 방향 | 설명 |
|---|---|---|
INBOUND_CONFIRM | 증가 | 입고확정 |
OUTBOUND_CONFIRM | 감소 | 출고확정 |
MOVE_OUT | 감소 | 로케이션 이동 출발 |
MOVE_IN | 증가 | 로케이션 이동 도착 |
ADJUST_INCREASE | 증가 | 실사/조정 증가 |
ADJUST_DECREASE | 감소 | 실사/조정 감소 |
RETURN_INBOUND | 증가 | 정상 반품 재고 복구 |
DISPOSAL | 감소 | 폐기 |
OUTBOUND_CANCEL | 증가 | 출고확정 취소 |
수불 예시 테이블
| 시각 | 상품 | 유형 | 수량 | 원문서 |
|---|---|---|---|---|
| 09:00 | ITEM-A | INBOUND_CONFIRM | 100 | IN-001 |
| 10:00 | ITEM-A | OUTBOUND_CONFIRM | -10 | OB-001 |
| 11:00 | ITEM-A | RETURN_INBOUND | 2 | RT-001 |
| 12:00 | ITEM-A | ADJUST_DECREASE | -1 | ADJ-001 |
예시 계산식
기초재고 50
+ 입고 100
- 출고 10
+ 반품입고 2
- 조정감소 1
= 기말재고 141
테이블 구조 예시
create table stock_ledger (
id bigint primary key,
movement_type varchar(40) not null,
item_id varchar(50) not null,
warehouse_id varchar(50) not null,
location_id varchar(50),
quantity numeric(18, 3) not null,
source_type varchar(40) not null,
source_id varchar(80) not null,
reversal_of_ledger_id bigint,
occurred_at timestamp not null
);