본문으로 건너뛰기

재고 수불부

재고 수불부는 재고가 증가하거나 감소한 모든 원인을 시간순으로 기록하는 원장입니다. 현재고가 결과라면 수불부는 그 결과가 만들어진 과정입니다.

주의사항

수불부는 현재고를 설명하는 근거 데이터입니다. 이미 생성된 수불을 삭제하면 장애 분석과 마감 검증이 어려워지므로, 취소나 보정은 별도 역거래로 남기는 방식을 우선 검토하세요.

왜 수불 이력 테이블이 필요한가

현재고 테이블만 있으면 재고가 왜 틀렸는지 알 수 없습니다. 수불부가 있으면 특정 상품의 재고가 언제, 어떤 문서 때문에 바뀌었는지 추적할 수 있습니다.

질문수불부가 답하는 방식
재고가 왜 줄었는가출고확정, 조정감소, 폐기 수불 확인
반품이 재고에 반영됐는가반품입고 또는 불량 이동 수불 확인
취소가 두 번 반영됐는가원수불과 역수불 연결 확인
월말 재고가 맞는가기간 수불 합계로 기초/기말 계산

재고 수불 흐름

재고 오류 로그와 재고 이력의 차이

로그는 시스템이 어떤 작업을 했는지 남기는 기술 기록입니다. 수불부는 업무적으로 재고가 변한 공식 기록입니다. 로그는 삭제되거나 보관 기간이 짧을 수 있지만, 수불부는 마감과 감사의 기준이 됩니다.

수불 유형 예시

유형방향설명
INBOUND_CONFIRM증가입고확정
OUTBOUND_CONFIRM감소출고확정
MOVE_OUT감소로케이션 이동 출발
MOVE_IN증가로케이션 이동 도착
ADJUST_INCREASE증가실사/조정 증가
ADJUST_DECREASE감소실사/조정 감소
RETURN_INBOUND증가정상 반품 재고 복구
DISPOSAL감소폐기
OUTBOUND_CANCEL증가출고확정 취소

수불 예시 테이블

시각상품유형수량원문서
09:00ITEM-AINBOUND_CONFIRM100IN-001
10:00ITEM-AOUTBOUND_CONFIRM-10OB-001
11:00ITEM-ARETURN_INBOUND2RT-001
12:00ITEM-AADJUST_DECREASE-1ADJ-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
);

관련 문서