====== Sprint 4 — Réservation & Calendrier ======
===== Objectif du Sprint =====
Mettre en œuvre le moteur de réservation de la plateforme.
À l'issue du Sprint 4 :
* Un client peut vérifier la disponibilité d'un bien
* Un client peut calculer le coût de son séjour
* Un client peut créer une réservation
* Les voyageurs sont enregistrés
* Le calendrier est automatiquement bloqué
* L'agence peut gérer les réservations
* Les conflits de réservation sont empêchés
Ce sprint constitue le premier parcours métier complet générateur de chiffre d'affaires.
----
====== Périmètre ======
===== Modules concernés =====
ReservationsModule
ReservationCalendarModule
ReservationGuestModule
PricingModule
AvailabilityEngineModule
----
====== Workflow métier ======
Recherche Bien
↓
Consultation Disponibilité
↓
Sélection Dates
↓
Calcul Tarif
↓
Saisie Voyageurs
↓
Création Réservation
↓
Blocage Calendrier
↓
Confirmation
----
====== User Stories ======
===== US-401 : Vérifier la disponibilité =====
**En tant que client**
Je souhaite connaître les dates disponibles
Afin de réserver un séjour.
----
===== Endpoint =====
GET /properties/{id}/availability
----
===== Paramètres =====
startDate
endDate
----
===== Réponse =====
{
"available": true,
"conflicts": []
}
----
===== Critères =====
* Vérification temps réel
* Exclusion des périodes bloquées
* Exclusion des réservations confirmées
----
====== US-402 : Calculer un tarif ======
===== Endpoint =====
POST /pricing/calculate
----
===== Données =====
{
"propertyId": "uuid",
"startDate": "2027-07-01",
"endDate": "2027-07-15",
"guestCount": 4
}
----
===== Calcul =====
Nombre de nuits
+
Tarif saisonnier
+
Taxes
+
Options
=
Montant total
----
===== Réponse =====
{
"nights": 14,
"subtotal": 2100,
"taxes": 150,
"fees": 50,
"total": 2300
}
----
====== US-403 : Créer une réservation ======
===== Endpoint =====
POST /reservations
----
===== Données =====
{
"propertyId": "uuid",
"startDate": "2027-07-01",
"endDate": "2027-07-15",
"guestCount": 4
}
----
===== Critères =====
* Disponibilité vérifiée
* Tarif recalculé
* Réservation créée
* Numéro généré
----
===== Numérotation =====
RES-2027-000001
----
====== US-404 : Ajouter les voyageurs ======
===== Endpoint =====
POST /reservations/{id}/guests
----
===== Données =====
Nom
Prénom
Date naissance
Nationalité
----
===== Contraintes =====
Nombre voyageurs ≤ capacité bien
----
====== US-405 : Consulter une réservation ======
===== Endpoint =====
GET /reservations/{id}
----
===== Informations =====
Référence
Bien
Voyageurs
Montant
Statut
Historique
----
====== US-406 : Modifier une réservation ======
===== Endpoint =====
PUT /reservations/{id}
----
===== Modifications autorisées =====
Dates
Nombre voyageurs
Commentaires
----
===== Conditions =====
Statut = PENDING
----
====== US-407 : Annuler une réservation ======
===== Endpoint =====
POST /reservations/{id}/cancel
----
===== Conséquences =====
Statut = CANCELLED
↓
Libération calendrier
↓
Historisation
----
====== Gestion du calendrier ======
===== US-408 : Blocage automatique =====
Lorsqu'une réservation est créée :
Création réservation
↓
Création événement calendrier
↓
Blocage période
----
===== Statuts calendrier =====
AVAILABLE
PENDING
BOOKED
MAINTENANCE
BLOCKED
----
====== US-409 : Visualiser le calendrier ======
===== Endpoint =====
GET /properties/{id}/calendar
----
===== Vues =====
Mensuelle
Trimestrielle
Annuelle
----
====== Gestion tarifaire ======
===== US-410 : Calcul saisonnier =====
===== Exemple =====
Basse saison
100 €
Haute saison
180 €
Très haute saison
250 €
----
===== Moteur =====
Le calcul doit :
* Découper le séjour par période
* Appliquer le tarif adéquat
* Additionner les montants
----
====== US-411 : Gestion des frais =====
===== Types =====
Frais ménage
Frais dossier
Taxe séjour
Caution
----
====== Workflow réservation ======
===== États =====
PENDING
↓
CONFIRMED
↓
SIGNED
↓
COMPLETED
└── CANCELLED
----
====== Modèle Prisma ======
===== Reservation =====
model Reservation {
id String @id @default(uuid())
reservationNumber String @unique
propertyId String
tenantId String
startDate DateTime
endDate DateTime
guestCount Int
totalAmount Decimal
status ReservationStatus
createdAt DateTime @default(now())
}
----
===== ReservationGuest =====
model ReservationGuest {
id String @id @default(uuid())
reservationId String
firstName String
lastName String
birthDate DateTime?
nationality String?
}
----
===== ReservationEvent =====
model ReservationEvent {
id String @id @default(uuid())
reservationId String
eventType String
payload Json
createdAt DateTime
}
----
===== CalendarEvent =====
model CalendarEvent {
id String @id @default(uuid())
propertyId String
reservationId String?
startDate DateTime
endDate DateTime
status String
}
----
====== Architecture Backend ======
src/modules/reservations
├── reservations
│
├── guests
│
├── pricing
│
├── calendar
│
├── availability
│
└── events
----
====== Domain Services ======
AvailabilityService
ReservationService
PricingService
CalendarService
ReservationNumberGenerator
----
====== Événements métier ======
===== ReservationCreated =====
ReservationCreated
----
===== ReservationCancelled =====
ReservationCancelled
----
===== ReservationConfirmed =====
ReservationConfirmed
----
====== Swagger ======
===== Tags =====
Reservations
ReservationGuests
ReservationPricing
ReservationCalendar
----
===== Volume API =====
Environ :
25 endpoints
----
====== Frontend ======
===== Pages publiques =====
/property/[slug]
/booking
/booking/confirmation
----
===== Espace client =====
/reservations
/reservations/[id]
----
===== Composants =====
AvailabilityCalendar
BookingForm
BookingSummary
GuestForm
ReservationTimeline
----
====== Tests ======
===== Unitaires =====
PricingService
AvailabilityService
ReservationService
CalendarService
----
===== Intégration =====
Check Availability
↓
Calculate Price
↓
Create Reservation
↓
Block Calendar
----
===== E2E =====
Recherche
↓
Choix dates
↓
Calcul prix
↓
Création réservation
↓
Consultation réservation
----
====== Définition de terminé ======
Le Sprint 4 est terminé lorsque :
* Disponibilités fonctionnelles
* Calcul tarifaire fonctionnel
* Réservations fonctionnelles
* Voyageurs fonctionnels
* Calendrier fonctionnel
* Blocages automatiques fonctionnels
* Swagger à jour
* Tests verts
* CI verte
----
====== Livrables ======
* ReservationsModule
* ReservationGuestModule
* ReservationCalendarModule
* PricingModule
* AvailabilityEngineModule
* DTO
* Swagger
* Tests
* Migrations Prisma
----
====== Démonstration Sprint ======
Scénario métier :
1. Consultation d'un bien
2. Vérification disponibilité
3. Calcul tarif
4. Création réservation
5. Ajout voyageurs
6. Blocage calendrier
7. Consultation réservation
----
====== Sprint suivant ======
===== Sprint 5 — Contrats & Signature Électronique =====
Objectif :
Transformer une réservation en engagement contractuel juridiquement opposable.
Modules concernés :
ContractsModule
ContractTemplateModule
ContractGenerationModule
SignatureModule
DocumentModule
Fonctionnalités :
* Génération automatique du contrat
* Gestion des modèles
* Production PDF
* Signature électronique
* Archivage des documents
* Téléchargement des contrats
À l'issue du Sprint 5, une réservation pourra être contractualisée et signée électroniquement par le client.