Transformer une réservation en contrat juridiquement opposable.
À l'issue du Sprint 5 :
Ce sprint clôture le cycle :
Recherche ↓ Réservation ↓ Contractualisation
ContractsModule ContractTemplateModule ContractGenerationModule SignatureModule DocumentModule PdfModule
Réservation ↓ Génération contrat ↓ Production PDF ↓ Envoi signature ↓ Signature client ↓ Archivage ↓ Contrat actif
En tant que gestionnaire
Je souhaite générer un contrat
Afin de formaliser la réservation.
POST /contracts/generate
Client Bien Propriétaire Réservation Tarifs Conditions
Contrat PDF généré Version 1 Statut GENERATED
GET /contracts/{id}
Numéro Version Date génération Date signature Statut Documents
GET /contracts/{id}/download
POST /contract-templates
Nom Version Contenu Variables
PUT /contract-templates/{id}
Conserver les versions historiques.
V1 ↓ V2 ↓ V3
Template ↓ Fusion données ↓ HTML ↓ PDF ↓ Archivage
Puppeteer ou PDFKit
CONTRACT-2027-000001.pdf
POST /contracts/{id}/send-signature
Yousign DocuSign Universign
GENERATED ↓ SENT
GET /contracts/{id}/signature-status
PENDING OPENED SIGNED REFUSED EXPIRED
Signature validée ↓ Webhook fournisseur ↓ Téléchargement PDF signé ↓ Archivage ↓ Mise à jour contrat
SIGNED
CONTRACT SIGNED_CONTRACT ANNEX INVOICE IDENTITY_DOCUMENT
S3 MinIO
GET /documents
Type Client Réservation Date
DRAFT ↓ GENERATED ↓ SENT ↓ SIGNED ↓ ARCHIVED └── REFUSED └── EXPIRED
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())
}
model ContractTemplate {
id String @id @default(uuid())
name String
version Int
content String
active Boolean
}
model ContractSignature {
id String @id @default(uuid())
contractId String
provider String
externalId String
status String
signedAt DateTime?
}
model Document {
id String @id @default(uuid())
entityType String
entityId String
documentType String
fileName String
storagePath String
uploadedAt DateTime
}
src/modules/contracts ├── contracts │ ├── templates │ ├── generation │ ├── signatures │ ├── documents │ └── pdf
ContractGenerationService PdfGenerationService TemplateRenderingService SignatureService DocumentStorageService
ContractGenerated
ContractSent
ContractSigned
ContractRefused
Contracts ContractTemplates ContractGeneration Signatures Documents
Environ :
20 endpoints
Pages :
/contracts /contracts/[id] /documents
Pages :
/contracts /contracts/[id] /contract-templates /documents
ContractViewer ContractTimeline DocumentLibrary TemplateEditor SignatureStatusCard
ContractGenerationService PdfGenerationService SignatureService DocumentStorageService
Reservation ↓ Generate Contract ↓ Generate PDF ↓ Archive
Réservation ↓ Génération contrat ↓ Envoi signature ↓ Signature ↓ Téléchargement contrat signé
Le Sprint 5 est terminé lorsque :
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
Objectif :
Permettre l'encaissement et la facturation.
Modules concernés :
PaymentsModule InvoicesModule RefundsModule PaymentGatewayModule AccountingModule
Fonctionnalités :
À l'issue du Sprint 6, une réservation pourra être intégralement payée et facturée.