====== 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.