====== Sprint 5 — Contrats & Signature Électronique ======
===== Objectif du Sprint =====
Transformer une réservation en contrat juridiquement opposable.
À l'issue du Sprint 5 :
* Un contrat est généré automatiquement à partir d'une réservation
* Les modèles de contrat sont administrables
* Un PDF est produit automatiquement
* Le contrat est envoyé en signature électronique
* Le client peut signer à distance
* Le contrat signé est archivé
* Le contrat est téléchargeable à tout moment
Ce sprint clôture le cycle :
Recherche
↓
Réservation
↓
Contractualisation
----
====== Périmètre ======
===== Modules concernés =====
ContractsModule
ContractTemplateModule
ContractGenerationModule
SignatureModule
DocumentModule
PdfModule
----
====== Workflow métier ======
Réservation
↓
Génération contrat
↓
Production PDF
↓
Envoi signature
↓
Signature client
↓
Archivage
↓
Contrat actif
----
====== User Stories ======
===== US-501 : Générer un contrat =====
**En tant que gestionnaire**
Je souhaite générer un contrat
Afin de formaliser la réservation.
----
===== Endpoint =====
POST /contracts/generate
----
===== Données utilisées =====
Client
Bien
Propriétaire
Réservation
Tarifs
Conditions
----
===== Résultat =====
Contrat PDF généré
Version 1
Statut GENERATED
----
====== US-502 : Consulter un contrat ======
===== Endpoint =====
GET /contracts/{id}
----
===== Données =====
Numéro
Version
Date génération
Date signature
Statut
Documents
----
====== US-503 : Télécharger un contrat ======
===== Endpoint =====
GET /contracts/{id}/download
----
===== Formats =====
PDF
----
====== Gestion des modèles ======
===== US-504 : Créer un modèle =====
===== Endpoint =====
POST /contract-templates
----
===== Données =====
Nom
Version
Contenu
Variables
----
====== US-505 : Modifier un modèle ======
===== Endpoint =====
PUT /contract-templates/{id}
----
====== US-506 : Versionner un modèle ======
===== Objectif =====
Conserver les versions historiques.
----
===== Exemple =====
V1
↓
V2
↓
V3
----
====== Génération PDF ======
===== US-507 : Produire un PDF =====
===== Étapes =====
Template
↓
Fusion données
↓
HTML
↓
PDF
↓
Archivage
----
===== Bibliothèque =====
Puppeteer
ou
PDFKit
----
===== Nommage =====
CONTRACT-2027-000001.pdf
----
====== Signature électronique ======
===== US-508 : Envoyer en signature =====
===== Endpoint =====
POST /contracts/{id}/send-signature
----
===== Fournisseurs compatibles =====
Yousign
DocuSign
Universign
----
===== État =====
GENERATED
↓
SENT
----
====== US-509 : Suivre une signature ======
===== Endpoint =====
GET /contracts/{id}/signature-status
----
===== Statuts =====
PENDING
OPENED
SIGNED
REFUSED
EXPIRED
----
====== US-510 : Réception contrat signé ======
===== Workflow =====
Signature validée
↓
Webhook fournisseur
↓
Téléchargement PDF signé
↓
Archivage
↓
Mise à jour contrat
----
===== État final =====
SIGNED
----
====== Archivage documentaire ======
===== US-511 : Archiver un document =====
===== Types =====
CONTRACT
SIGNED_CONTRACT
ANNEX
INVOICE
IDENTITY_DOCUMENT
----
===== Stockage =====
S3
MinIO
----
====== US-512 : Historique documentaire =====
===== Endpoint =====
GET /documents
----
===== Filtres =====
Type
Client
Réservation
Date
----
====== Cycle de vie du contrat ======
DRAFT
↓
GENERATED
↓
SENT
↓
SIGNED
↓
ARCHIVED
└── REFUSED
└── EXPIRED
----
====== Modèle Prisma ======
===== Contract =====
model Contract {
id String @id @default(uuid())
reservationId String @unique
contractNumber String @unique
version Int
status String
generatedAt DateTime?
signedAt DateTime?
createdAt DateTime @default(now())
}
----
===== ContractTemplate =====
model ContractTemplate {
id String @id @default(uuid())
name String
version Int
content String
active Boolean
}
----
===== ContractSignature =====
model ContractSignature {
id String @id @default(uuid())
contractId String
provider String
externalId String
status String
signedAt DateTime?
}
----
===== Document =====
model Document {
id String @id @default(uuid())
entityType String
entityId String
documentType String
fileName String
storagePath String
uploadedAt DateTime
}
----
====== Architecture Backend ======
src/modules/contracts
├── contracts
│
├── templates
│
├── generation
│
├── signatures
│
├── documents
│
└── pdf
----
====== Domain Services ======
ContractGenerationService
PdfGenerationService
TemplateRenderingService
SignatureService
DocumentStorageService
----
====== Événements métier ======
===== ContractGenerated =====
ContractGenerated
----
===== ContractSent =====
ContractSent
----
===== ContractSigned =====
ContractSigned
----
===== ContractRefused =====
ContractRefused
----
====== Swagger ======
===== Tags =====
Contracts
ContractTemplates
ContractGeneration
Signatures
Documents
----
===== Volume API =====
Environ :
20 endpoints
----
====== Frontend ======
===== Espace Client =====
Pages :
/contracts
/contracts/[id]
/documents
----
===== Back Office =====
Pages :
/contracts
/contracts/[id]
/contract-templates
/documents
----
===== Composants =====
ContractViewer
ContractTimeline
DocumentLibrary
TemplateEditor
SignatureStatusCard
----
====== Tests ======
===== Unitaires =====
ContractGenerationService
PdfGenerationService
SignatureService
DocumentStorageService
----
===== Intégration =====
Reservation
↓
Generate Contract
↓
Generate PDF
↓
Archive
----
===== E2E =====
Réservation
↓
Génération contrat
↓
Envoi signature
↓
Signature
↓
Téléchargement contrat signé
----
====== Définition de terminé ======
Le Sprint 5 est terminé lorsque :
* Contrat généré automatiquement
* PDF généré automatiquement
* Signature électronique fonctionnelle
* Archivage fonctionnel
* Téléchargement fonctionnel
* Historique fonctionnel
* Swagger à jour
* Tests verts
* CI verte
----
====== Livrables ======
* ContractsModule
* ContractTemplateModule
* ContractGenerationModule
* SignatureModule
* DocumentModule
* PdfModule
* DTO
* Swagger
* Tests
* Migrations Prisma
----
====== Démonstration Sprint ======
Scénario métier :
1. Réservation créée
2. Génération du contrat
3. Génération PDF
4. Envoi signature
5. Signature client
6. Réception document signé
7. Archivage
8. Téléchargement contrat
----
====== Sprint suivant ======
===== Sprint 6 — Paiements & Facturation =====
Objectif :
Permettre l'encaissement et la facturation.
Modules concernés :
PaymentsModule
InvoicesModule
RefundsModule
PaymentGatewayModule
AccountingModule
Fonctionnalités :
* Paiement CB
* Paiement acompte
* Paiement solde
* Factures automatiques
* Avoirs
* Remboursements
* Historique financier
* Export comptable
À l'issue du Sprint 6, une réservation pourra être intégralement payée et facturée.