물류·재고·피킹
피킹·검수·상차를 하나의 완료 상태로 묶지 않은 이유
식자재 유통 WMS에서 출고지시, 피킹, 검수, 상차와 일일 차이 확인을 별도 상태로 두고 검수 전 상차 완료를 차단한 구현 기록입니다.

핵심 요약
식자재 유통 WMS에서 출고지시, 피킹, 검수, 상차와 일일 차이 확인을 별도 상태로 두고 검수 전 상차 완료를 차단한 구현 기록입니다.
검증 메모
자체 설계한 업무 절차- 작성·검토
- Biz2Lab 운영자 · B2B 유통 현장 시스템 설계·개발 · 공개 코드 계정 mizzang0305-oss
- 검증 내용
- 식자재 유통 WMS의 mock 운영 흐름에서 출고지시, 피킹, 검수, 상차와 일일 차이 확인을 별도 상태로 렌더링하고 검수 전 상차 완료 차단 문구를 확인했습니다.
- 적용 범위
- fixture UI와 상태 모델을 확인한 것이며 실제 출고량, 재고 정확도, 작업자 생산성, 스캐너 입력과 운영 DB 연동은 검증하지 않았습니다.
이 글은 외부 통계나 제품 성능을 인용하지 않고, 본문에 공개한 절차·계산식·가상 샘플과 CSV를 근거로 작성했습니다.
최종 내용 검토일 2026-07-28. 오류 제보와 수정일 원칙은 소개·편집 원칙에서 확인할 수 있습니다.
화면 증거
로컬에서 다시 확인한 구현 화면
고객정보와 운영 DB를 사용하지 않은 fixture·로컬 데모입니다. 화면이 입증하는 범위와 입증하지 못하는 성과를 함께 표시합니다.

fixture 화면. 가상 작업 건으로 단계 분리와 검수 전 상차 차단 설계를 보여 주며 실제 출고 성과는 포함하지 않습니다.
- 직접 구현 화면
- 식자재 유통 WMS
- 캡처 기준
- 2026-07-29 · commit 6838b13
- 확인 가능한 범위
- 피킹·검수·상차를 별도 상태로 두고 검수 전 상차 완료를 차단하는 설계
- 확인할 수 없는 범위
- 실제 물류 처리시간, 오배송 감소율 또는 운영 DB의 출고 상태

fixture 화면. 검수 통과 전 상차 완료 차단과 다음 필수 행동만 보여 주며 실제 창고 처리 결과나 운영 DB 상태는 포함하지 않습니다.
- 직접 구현 화면
- 식자재 유통 WMS
- 캡처 기준
- 2026-07-29 · commit 6838b13
- 확인 가능한 범위
- 검수 통과 전 상차 완료 처리를 차단하는 설계
- 확인할 수 없는 범위
- 실제 처리시간, 오배송 감소율, 재고 정확도 또는 Production 데이터베이스 상태
완료 하나가 현장의 차이를 숨긴다
출고 작업을 진행중 / 완료 두 값으로만 관리하면 상품을 꺼낸 상태, 수량을 대조한 상태와 차량에 실은 상태가 모두 같은 “진행중”이 됩니다. 문제가 발견돼도 어느 단계에서 생겼는지 찾기 어렵고, 검수하지 않은 박스를 상차 완료로 처리할 수 있습니다.
식자재 유통 WMS 작업대에서는 출고지시, picking, inspection, loading, 출고 완료를 별도 상태로 두었습니다. 각 단계는 다음 단계의 입력이지만 이전 단계를 덮어쓰지 않습니다.
fixture 화면에서 확인한 경계
아래 두 화면은 운영 DB가 아닌 mock fixture입니다. 첫 390px 세로 화면은 출고지시 맥락 아래 피킹·검수·상차·차이 확인 완료를 서로 다른 lane으로 보여 줍니다. 두 번째 집중 화면은 “검수 미완료 시 상차 완료 차단”과 다음 필수 행동인 inspection 통과를 보여 줍니다. 화면이 보여 주는 설계 결정은 검수 통과가 상차 완료의 선행 조건이라는 점입니다.
이 캡처로 실제 출고량, 작업자 생산성, 오배송 감소율과 재고 정확도를 입증할 수 없습니다. 가상 작업 건과 상태 문구로 UI 흐름을 재현한 결과입니다.
상태와 책임을 함께 나눴다
| 상태 | 현장 질문 | 다음 단계 조건 |
|---|---|---|
| 출고지시 | 무엇을 언제 준비해야 하나 | 주문·재고 검증 통과 |
| picking | 지시 수량을 꺼냈는가 | 품목·수량 스캔 또는 확인 |
| inspection | 상품·수량·상태가 맞는가 | 차이 없음 또는 차이 처리 |
| loading | 검수된 박스를 차량에 실었는가 | inspection 통과 |
| completed | 출고 근거가 모두 남았는가 | 단계별 기록과 차이 해소 |
하나의 버튼으로 여러 상태를 동시에 바꾸면 빠르지만 누가 무엇을 확인했는지 사라집니다. 그래서 각 전환은 이전 상태, 변경 시각과 다음 행동을 남기고 실패하면 현재 단계에 머물도록 설계했습니다.
차이를 별도 작업으로 만든 이유
피킹 수량과 검수 수량이 다르거나 시스템 재고와 실물이 다를 때 주문 자체를 삭제하거나 재고 숫자를 바로 덮어쓰면 원인을 잃습니다. 차이는 run과 item으로 분리해 어떤 기준시각에 어떤 품목에서 발생했는지 남기고 담당자가 확인하도록 했습니다.
fixture에는 on_hand, reserved, available 같은 재고 구분이 있지만 이는 실제 재고가 아닙니다. 중요한 것은 차이가 생겼다는 이벤트와 조정 판단을 재고 원장 변경과 분리했다는 구조입니다.
안전하게 촬영한 범위
소스 앱은 API가 없어도 mock fallback으로 실행되는 운영 콘솔입니다. 전용 clean worktree의 확인된 commit에서 브라우저를 띄웠고, 운영 API와 DB는 시작하지 않았습니다. 상태 lane 캡처는 재고 차이·품목·수량·담당자 영역을 제외했고, 상차 차단 캡처는 기존 alert 하나로 제한했습니다.
DOM의 전화번호, 이메일, 주민·사업자번호, 계좌와 secret 형태, 로컬 경로를 검사하고 통과한 이미지에만 candidate를 부여했습니다. 비공개 저장소 URL과 회사명은 공개 화면·manifest에 넣지 않습니다.
아직 필요한 검증
mock 화면은 상태 모델과 차단 문구가 렌더링된다는 사실만 확인합니다. 실제 스캐너 입력, 동시 작업 충돌, 오프라인 복구, 창고별 재고 원장과 권한 제어는 운영과 같은 테스트 환경에서 별도 검증해야 합니다. 이번 작업에서는 DB seed, migration과 production API를 실행하지 않았습니다.
다른 조직은 먼저 주문 원본 분리 사례처럼 주문 식별자를 정하고, 피킹·검수·상차 담당자가 인계할 최소 기록을 합의해야 합니다. 화면을 만들기 전에 어떤 상태에서 반드시 멈춰야 하는지를 정하는 것이 출발점입니다.
관련 글
전화·메시지·포털 주문 원본을 지우지 않고 한 작업대로 모은 방법
식자재 유통 WMS 주문 작업대에서 주문 채널과 원본 참조, 재고·한도 보류를 별도 상태로 두어 누락 원인을 추적한 설계를 설명합니다.
미수금 관리표: 약속일·경과일·분쟁 여부로 회수 순서 정하기
미수금을 단순 금액 목록이 아니라 약속일, 경과일, 최근 연락, 다음 조치, 분쟁 여부로 관리하는 aging 표와 실무 확인 순서를 제공합니다.
자동화 기능보다 실행·실패 로그를 먼저 만든 이유
외부 실행 기능을 늘리기 전에 작업 상태, 안전 메시지, 실패 사유와 수동 검토 대상을 남기는 실행 로그를 먼저 만든 순서와 한계를 설명합니다.
다음 단계
물류 단계에 들어오기 전 주문 원본과 보류 상태를 어떻게 나눴는지 확인합니다.
주문 원본 작업대 보기