취소 만료 환불 책임 경계 통합
ADR-060 취소 만료 환불 책임 경계 통합
1. Metadata
- ADR ID: ADR-060
- Status: draft
- Date: 2026-03-09
- Owner: YSY
2. Domain Decision
expired와 cancelled 모두 환불 없음으로 고정한다.- prepaid 분쟁은 발행자-사용자 직접 해결을 기본으로 한다.
- 플랫폼은 상태/로그 근거 제공에 집중한다.
cancelled 상태의 사유는 cancel_reason으로 분리 저장한다.cancel_reason 표준값은 user_cancelled, partner_cancelled, system_cancelled를 기본으로 한다.- 확장 사유
payment_cancelled, ops_cancelled는 운영 설정으로만 활성화한다. cancel_reason 미지정 취소는 허용하지 않는다.- 취소 처리 시
cancel_reason은 감사로그/통계 집계 키로 필수 저장한다.
3. Product Decision
- expired/cancelled 모두 환불 없음 정책을 적용한다.
- prepaid 분쟁은 발행자-사용자 직접 해결을 기본으로 한다.
- 분쟁 가이드는 앱/고객센터 문구로 명확히 제공한다.
- 반복 expired/cancelled는 신용점수 기반 제재 정책과 연동한다.
4. UX Decision
- 취소/만료 UX의 단일 SoT는
SPEC-000의 UX Rule Catalog를 따른다. - 취소 확인/결과 화면 규칙은
UX-R-008/009를 참조한다. - 선결제 분쟁 안내 규칙은
UX-R-013을 참조한다. - 반복 미이행 경고 노출 기준은
UX-R-014를 참조한다.
5. Tech Decision
6. Ops Decision
- 취소/만료/선결제 분쟁 처리 절차를 구분한다.
- 플랫폼 책임 범위와 안내 범위를 명확히 한다.
- 분쟁 증적 수집 기준을 표준화한다.
expired/cancelled 환불 없음 정책을 상담 스크립트에 고정한다.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-000의 UX-R-008/009/013/014 준수 여부로 판정한다.
8. Validation