# Booking & calendar

### TB-009 — Booking request, accept, decline state machine

- **Size:** L
- **Hours:** 23
- **Scope:** MVP

Booking request, accept, decline state machine

Size reason: L — a multi-state flow with expiry and race conditions between owner and walker actions is the trickiest logic in the product.

**Acceptance criteria**

- Owner can submit a booking request that walker receives in a pending state
- Walker accept/decline transitions the booking state and notifies the owner
- Unanswered requests automatically expire after the defined time window
- Concurrent accept/decline attempts do not produce inconsistent state
- Invalid transitions, e.g. accepting an expired request, are rejected

### TB-010 — Reschedule and cancellation with policy windows

- **Size:** L
- **Hours:** 23
- **Scope:** Full

Reschedule and cancellation with policy windows

Size reason: L — cancellation windows, partial refunds and walker no-show handling multiply the edge cases.

**Acceptance criteria**

- Cancelling within the policy window applies the correct refund or no-refund outcome
- Reschedule updates the booking time and notifies both owner and walker
- Marking a walker no-show triggers the defined refund/credit workflow
- Cancelling outside the allowed window is blocked or partially refunded per policy
- Every cancellation/reschedule action is logged with timestamp and actor

### TB-011 — Booking calendar view for walkers

- **Size:** M
- **Hours:** 11
- **Scope:** MVP

Booking calendar view for walkers

Size reason: M — calendar rendering across day and week views with multiple booking states.

**Acceptance criteria**

- Walker can toggle between day and week calendar views
- Calendar visually distinguishes pending, accepted and cancelled bookings
- Calendar reflects newly accepted or cancelled bookings without a manual refresh
- Navigating dates loads the correct bookings for that period

### TB-012 — Booking confirmation reminders

- **Size:** S
- **Hours:** 5
- **Scope:** MVP

Booking confirmation reminders

Size reason: S — a single scheduled job plus a notification template, no branching.

**Acceptance criteria**

- Scheduled job sends a reminder at the defined time before a booking
- Reminder includes correct booking time and counterpart name
- No duplicate reminder is sent for the same booking
- Cancelled bookings do not trigger a reminder