본문으로 건너뛰기

부분 취소

부분 취소는 주문 전체가 아니라 특정 상품이나 일부 수량만 취소하는 처리다. 전체 취소보다 구현 난이도가 높은 이유는 주문 헤더, 주문 라인, 결제 금액, 배송비, 쿠폰, 재고 예약, 출고 요청이 모두 부분적으로 바뀌기 때문이다.

전체 취소와 부분 취소의 차이

구분전체 취소부분 취소
대상주문 전체주문 라인 또는 수량 일부
주문 헤더 상태CANCELEDPARTIALLY_CANCELED 가능
주문 라인 상태전체 취소라인별 상태 필요
금액 처리전액 취소상품/할인/배송비 재계산
출고 처리출고 전체 취소일부 라인만 취소 또는 수량 조정
실무 팁

부분 취소를 지원하려면 주문 헤더 상태만으로는 부족하다. 주문 상세 라인별 상태와 수량 컬럼을 반드시 분리해야 한다.

실제 업무 흐름

주문 header/detail 구조

부분 취소는 라인 단위 상태가 핵심이다.

테이블주요 컬럼설명
ordersorder_status, total_amount, canceled_amount주문 헤더
order_linesordered_qty, canceled_qty, shipped_qty, line_status상품별 상세
order_line_amountsproduct_amount, discount_amount, refund_amount라인별 금액
stock_reservationsreserved_qty, released_qty예약 재고

예를 들어 상품 3개 중 1개만 취소하면 주문 헤더는 PARTIALLY_CANCELED, 해당 라인은 PARTIALLY_CANCELED가 될 수 있다. 남은 2개는 출고가 계속 진행된다.

금액 재계산

부분 취소에서는 단순히 상품 금액만 빼면 안 된다.

항목확인 포인트
상품 금액취소 수량만큼 환불
쿠폰/포인트전체 주문 할인인지 라인 할인인지 구분
배송비무료배송 조건이 깨지는지 확인
결제 수단카드 부분 취소 가능 여부 확인
정산 금액매출, 수수료, 배송비 정산 영향 반영

출고 일부 취소

출고 요청 후 부분 취소가 들어오면 WMS 상태를 확인해야 한다.

피킹 전이면 출고 라인 수량을 줄일 수 있다. 이미 피킹된 상품이 있다면 작업자 회수, 검수 보류, 재피킹 같은 운영 절차가 필요하다.

API 예시

POST /api/orders/ORD-1001/partial-cancel
Content-Type: application/json

{
"reasonCode": "CUSTOMER_REQUEST",
"lines": [
{"orderLineId": 10, "cancelQty": 1}
],
"idempotencyKey": "mall-ord-1001-cancel-1"
}

실무에서 어려운 케이스

  • 묶음 할인 상품 중 일부만 취소하는 경우
  • 무료배송 조건이 깨져 배송비를 다시 부과해야 하는 경우
  • 이미 일부 상품은 출고되고 일부 상품만 취소되는 경우
  • 외부몰이 부분 취소를 지원하지 않아 전체 취소 후 재주문으로 처리해야 하는 경우
  • 쿠폰, 포인트, 카드 결제 취소 순서가 꼬이는 경우

관련 문서