Mettre en œuvre l'ensemble du cycle financier de la plateforme.
À l'issue du Sprint 6 :
Ce sprint clôture le cycle commercial complet :
Recherche ↓ Réservation ↓ Contrat ↓ Paiement ↓ Facturation
PaymentsModule InvoicesModule RefundsModule PaymentGatewayModule AccountingModule FinancialReportingModule
Réservation ↓ Contrat signé ↓ Paiement acompte ↓ Facture acompte ↓ Paiement solde ↓ Facture finale ↓ Réservation payée
En tant que système
Je souhaite créer automatiquement un paiement
Afin de permettre au client de régler sa réservation.
POST /payments
Réservation Montant Échéance Type paiement
DEPOSIT BALANCE FULL_PAYMENT ADDITIONAL_CHARGE
POST /payments/{id}/checkout
Stripe MangoPay PayPal (optionnel)
Carte bancaire Apple Pay Google Pay
GET /payments/{id}
Référence Montant Date Statut Transaction
GET /payments
Client Réservation Date Statut Montant
Réservation : 1 000 € Acompte : 30 % ↓ 300 €
Agence Bien Type contrat
Montant réservation - Acompte payé = Solde restant
X jours avant arrivée
Paiement reçu ↓ Facture générée
POST /invoices/generate
FAC-2027-000001
GET /invoices/{id}/download
GET /invoices
POST /credit-notes
Annulation Réduction commerciale Erreur facturation
AV-2027-000001
POST /payments/{id}/refund
Partiel Total
Paiement ↓ Demande remboursement ↓ Stripe Refund ↓ Historisation ↓ Avoir
GET /accounting/export
CSV Excel PDF
Paiements Factures Avoirs Taxes
CA Montant encaissé Montant remboursé Factures émises Avoirs émis
PENDING ↓ AUTHORIZED ↓ PAID └── FAILED └── REFUNDED
DRAFT ↓ ISSUED ↓ PAID └── CANCELLED
model Payment {
id String @id @default(uuid())
reservationId String
amount Decimal
paymentType String
status String
paymentDate DateTime?
transactionReference String?
}
model PaymentTransaction {
id String @id @default(uuid())
paymentId String
provider String
externalId String
status String
payload Json
}
model Invoice {
id String @id @default(uuid())
invoiceNumber String @unique
reservationId String
totalHt Decimal
totalVat Decimal
totalTtc Decimal
issuedAt DateTime
}
model InvoiceLine {
id String @id @default(uuid())
invoiceId String
description String
quantity Decimal
unitPrice Decimal
total Decimal
}
model CreditNote {
id String @id @default(uuid())
creditNoteNumber String @unique
invoiceId String
amount Decimal
reason String
}
src/modules/payments ├── payments │ ├── transactions │ ├── invoices │ ├── credit-notes │ ├── refunds │ ├── accounting │ └── gateways
PaymentService InvoiceService RefundService AccountingService PaymentGatewayService
PaymentAuthorized
PaymentSucceeded
PaymentFailed
PaymentRefunded
InvoiceGenerated
Stripe (prioritaire) MangoPay PayPal
Préparation future :
Sage Cegid EBP Pennylane
Payments Invoices Refunds Accounting
Environ :
30 endpoints
Pages :
/payments /payments/[id] /invoices /invoices/[id]
Pages :
/payments /invoices /credit-notes /accounting
PaymentCheckout PaymentHistory InvoiceViewer InvoiceTable RefundModal AccountingDashboard
PaymentService InvoiceService RefundService AccountingService
Reservation ↓ Contract Signed ↓ Payment ↓ Invoice ↓ Accounting
Réservation ↓ Contrat signé ↓ Paiement acompte ↓ Facture ↓ Paiement solde ↓ Facture finale
Le Sprint 6 est terminé lorsque :
Scénario métier :
1. Réservation créée 2. Contrat signé 3. Paiement acompte 4. Facture acompte 5. Paiement solde 6. Facture finale 7. Consultation historique 8. Export comptable
À l'issue du Sprint 6, la plateforme dispose :
Le MVP commercial est désormais opérationnel.
Objectif :
Offrir aux propriétaires un espace dédié de suivi.
Modules concernés :
OwnersModule OwnerPropertiesModule OwnerReservationsModule OwnerRevenueModule OwnerDocumentsModule
Fonctionnalités :
À l'issue du Sprint 7, les propriétaires pourront suivre en autonomie l'activité de leurs biens.