SCENARIO-USER-030_예약 취소 및 만료 후 재진입 흐름

SCENARIO-USER-030_예약 취소 및 만료 후 재진입 흐름

SCENARIO-USER-030 예약 취소 및 만료 후 재진입 흐름

1. Metadata

  • Status: draft
  • Date: 2026-03-09
  • Owner: YSY
  • Related ADRs: ADR-050, ADR-060, ADR-070, ADR-080, ADR-100, ADR-260

2. Goal

예약 확정(reserved) 이후 사용자가 취소하거나 자동 만료되는 상황에서, 환불 정책/책임 경계/다음 행동을 혼동 없이 이해하고 다시 탐색으로 복귀할 수 있는 UX 표준 흐름을 정의한다.

3. UX-First Principles

  1. 취소/만료 결과는 정책 문구와 함께 즉시 확정 표시한다.
  2. 취소 확인 단계에서 핵심 비용/정책(환불 없음)을 먼저 보여준다.
  3. 실패/차단 상황에서는 한 번에 하나의 다음 행동만 기본 제안한다.
  4. 시간 관련 안내는 서버 기준 만료 시각을 사용자 로컬 시간으로 변환해 제공한다.
  5. 동일 요청 재전송 시 결과 화면을 동일하게 재노출한다.

4. Preconditions

  1. 사용자는 로그인 및 전화 인증을 완료했다.
  2. 대상 예약은 사용자 소유이며 상태가 reserved 또는 검증 대기 상태다.
  3. 현재 시각은 서버 UTC 기준으로 관리되고, 앱 표시는 로컬 시간으로 변환된다.
  4. 결제 방식은 prepaid 또는 on_site일 수 있다.

5. UX Main Scenario (사용자 취소)

  1. 사용자가 내 예약에서 대상 예약 상세를 연다.
  2. 상세 화면은 현재 상태, 만료 시각(로컬), 남은 시간, 취소 가능 여부를 표시한다.
  3. 사용자가 예약 취소 CTA를 누른다.
  4. 취소 확인 시트는 환불 없음 정책과 취소 후 결과(cancelled)를 명시한다.
  5. 사용자가 취소를 확정하면 상태를 cancelled로 전이하고 cancel_reason=user_cancelled를 기록한다.
  6. 완료 화면에서 결과 요약과 다음 행동 CTA(다른 슬롯 보기, 홈으로)를 제공한다.

6. UX Flow Spec (화면 단위)

PhaseScreen/Surface사용자 질문UI가 답해야 할 내용Primary CTASecondary CTA종료 조건
P1내 예약 목록“지금 처리해야 할 예약이 뭔가?”예약 상태/만료 임박 여부예약 상세 보기홈으로상세 진입
P2예약 상세(reserved)“취소 가능한가?”취소 가능 여부, 만료 시각(로컬), 정책 요약예약 취소뒤로취소 확인 진입
P3취소 확인 시트“취소하면 뭐가 바뀌나?”cancelled 전이, 환불 없음, 사유 기록취소 확정유지하기취소 요청 전송
P4취소 완료 화면“정상 처리됐나?”최종 상태, 처리 시각, refund=false다른 슬롯 보기홈으로플로우 종료
P5만료 완료 화면“왜 종료됐나?”만료 사유, 만료 시각, 다음 선택지다른 슬롯 보기내 예약 목록플로우 종료

7. Branches (취소/만료/책임 분기)

CaseTrigger상태 결과사용자 안내 핵심다음 행동
C1사용자 취소 확정reserved -> cancelled“예약이 취소되었고 환불은 제공되지 않아요”다른 슬롯 보기
C2파트너 취소reserved -> cancelled“매장 사정으로 취소되었어요”다른 슬롯 보기/문의
C3시스템 취소reserved -> cancelled“시스템 정책에 따라 취소되었어요”안내 확인
E1만료 시각 경과reserved -> expired“만료로 예약이 종료되었어요”다른 슬롯 보기
D1선결제 분쟁 문의상태 유지(`expiredcancelled`)“분쟁은 발행자와 직접 해결, 플랫폼은 증적 제공”
P1반복 미이행 임계 도달예약 시도 차단 가능“반복 미이행으로 일정 기간 제한”이의제기/해제 시각 확인

8. Recovery UX (예외/복구)

A1. 취소 요청 권한 없음

  • 안내: 권한 부족 사유를 명시한다. (AUTH_TRANSITION_DENIED)
  • 행동: 목록 복귀 또는 지원 채널 이동 CTA를 제공한다.

A2. 취소 사유 누락

  • 안내: 취소 사유가 필요함을 명시한다. (CANCEL_REASON_REQUIRED)
  • 행동: 사유 입력/선택 후 재시도하게 한다.

A3. 중복 취소 탭/네트워크 재전송

  • 안내: 이미 처리된 요청임을 표시한다.
  • 행동: 최초 처리 결과 화면을 동일하게 재노출한다.

A4. 만료 임박 상태

  • 안내: 만료 임박 강조와 정확한 로컬 시각을 함께 노출한다.
  • 행동: 취소 또는 즉시 이용 행동 중 하나를 선택하게 한다.

A5. 선결제 분쟁 문의

  • 안내: 환불 없음 정책과 책임 경계를 반복 안내한다.
  • 행동: 발행자 직접 문의 경로 + 증적 요청 경로를 제공한다.

9. Domain Mapping (참조용 상태/사유)

이벤트상태 전이필수 사유/필드
사용자 취소reserved -> cancelledcancel_reason=user_cancelled, refund=false
파트너 취소reserved -> cancelledcancel_reason=partner_cancelled, refund=false
시스템 취소reserved -> cancelledcancel_reason=system_cancelled, refund=false
만료 처리reserved -> expiredexpires_at_utc 기준 판정, refund=false
재요청상태 변화 없음idempotency_key로 동일 결과 재반환

정책 메모:

  • expired|cancelled는 모두 환불 없음 정책을 따른다.
  • 취소 요청은 cancel_reason 없이 처리할 수 없다.
  • 만료 기준은 서버 UTC, 사용자 표시는 로컬 타임존을 사용한다.
  • 반복 expired/cancelled는 제재 정책과 연동될 수 있다.

10. ADR Impact

  1. ADR-060: 취소 확인 UX에서 refund=false와 책임 경계 문구를 표준화한다.
  2. ADR-050: 취소 권한 실패 시 차단 사유/복구 CTA 표준을 명확화한다.
  3. ADR-080: 만료 시각 로컬 표기와 임박 강조 규칙을 사용자 플로우 기준으로 고정한다.
  4. ADR-070: 취소 재요청 시 동일 결과 화면 재노출을 UX 계약으로 연결한다.
  5. ADR-100: 반복 미이행 사용자 경고/제재 안내 진입 시점을 시나리오로 명시한다.

11. Acceptance Criteria

  • 취소 확인 단계에서 환불 없음 정책이 명확히 노출된다.
  • 사용자 취소 성공 시 cancel_reason=user_cancelled 기준으로 cancelled 완료 화면을 노출한다.
  • 취소/만료 결과 화면은 다음 행동 CTA를 최소 1개 이상 제공한다.
  • 만료 시각은 서버 UTC 기준으로 판정되고 로컬 시간으로 표시된다.
  • 취소 사유 누락 요청은 실패하고 사유 보완 UX를 제공한다.
  • 멱등 재요청 시 동일 결과 화면을 재노출한다.
  • 선결제 분쟁 문의에서 발행자 직접 해결 경로를 기본으로 안내한다.
  • 반복 미이행 시 경고/제재 안내가 예약 시도 단계에서 노출된다.
  • 관련 ADR/SPEC/RUNBOOK과 충돌하지 않는다.