취소 만료 환불 책임 경계 통합

취소 만료 환불 책임 경계 통합

ADR-060 취소 만료 환불 책임 경계 통합

1. Metadata

  • ADR ID: ADR-060
  • Status: draft
  • Date: 2026-03-09
  • Owner: YSY

2. Domain Decision

  1. expiredcancelled 모두 환불 없음으로 고정한다.
  2. prepaid 분쟁은 발행자-사용자 직접 해결을 기본으로 한다.
  3. 플랫폼은 상태/로그 근거 제공에 집중한다.
  4. cancelled 상태의 사유는 cancel_reason으로 분리 저장한다.
  5. cancel_reason 표준값은 user_cancelled, partner_cancelled, system_cancelled를 기본으로 한다.
  6. 확장 사유 payment_cancelled, ops_cancelled는 운영 설정으로만 활성화한다.
  7. cancel_reason 미지정 취소는 허용하지 않는다.
  8. 취소 처리 시 cancel_reason은 감사로그/통계 집계 키로 필수 저장한다.

3. Product Decision

  1. expired/cancelled 모두 환불 없음 정책을 적용한다.
  2. prepaid 분쟁은 발행자-사용자 직접 해결을 기본으로 한다.
  3. 분쟁 가이드는 앱/고객센터 문구로 명확히 제공한다.
  4. 반복 expired/cancelled는 신용점수 기반 제재 정책과 연동한다.

4. UX Decision

  1. 취소/만료 UX의 단일 SoT는 SPEC-000의 UX Rule Catalog를 따른다.
  2. 취소 확인/결과 화면 규칙은 UX-R-008/009를 참조한다.
  3. 선결제 분쟁 안내 규칙은 UX-R-013을 참조한다.
  4. 반복 미이행 경고 노출 기준은 UX-R-014를 참조한다.

5. Tech Decision

  • 해당 없음

6. Ops Decision

  1. 취소/만료/선결제 분쟁 처리 절차를 구분한다.
  2. 플랫폼 책임 범위와 안내 범위를 명확히 한다.
  3. 분쟁 증적 수집 기준을 표준화한다.
  4. expired/cancelled 환불 없음 정책을 상담 스크립트에 고정한다.
  5. prepaid 분쟁은 발행자-사용자 직접 해결 원칙으로 안내한다.

7. Implementation Contract (Optional)

7.1 API Contract

  • 취소 명령은 cancel_reason을 필수 입력으로 받는다.
  • expired|cancelled 응답은 refund=false 정책 플래그를 포함한다.

7.2 Data Contract

  • cancel_reason 기본값은 user_cancelled|partner_cancelled|system_cancelled로 제한한다.
  • 확장 사유는 운영 설정으로만 활성화한다.

7.3 Error/Observability Contract

  • 사유 누락 취소는 CANCEL_REASON_REQUIRED로 거부한다.
  • 취소/만료/분쟁 관련 이벤트는 원인 코드와 함께 기록한다.

7.4 Test/Acceptance Contract

  • 사유 없는 취소 요청은 항상 실패해야 한다.
  • expired|cancelled 케이스에서 환불 경로가 자동 생성되지 않아야 한다.
  • UX 수용 기준 검증은 SPEC-000UX-R-008/009/013/014 준수 여부로 판정한다.

8. Validation

  • Domain/Product/UX/Tech/Ops 결정이 충돌하지 않는다.
  • 구현 기준은 SPEC과 정합성을 유지한다.
  • 운영 절차는 RUNBOOK으로 연결된다.