Skip to content

Billing & Paiements

Le module Billing gère la facturation des patients (paiements de consultations). Il est distinct du système de Subscriptions qui gère l’abonnement du tenant à la plateforme.

L’architecture repose sur Stripe Connect : chaque entité de facturation possède son propre compte Stripe Connect pour recevoir les paiements.


Modèle : src/Domain/Billing/Models/BillingEntity.php (tenant) / CentralBillingEntity.php (central)

Une BillingEntity représente une entité juridique qui peut encaisser des paiements. Elle est polymorphe et peut appartenir à :

  • Un Site — facturation au niveau du lieu
  • Un Network — facturation réseau
ChampDescription
legal_nameRaison sociale
owner_type / owner_idPolymorphe (Site ou Network)
owner_first_name, owner_last_name, owner_birth_date, owner_emailReprésentant légal
billing_gouv_id, billing_vat_id, billing_medical_idIdentifiants légaux
bank_name, bank_last4, bank_country, bank_currencyInfos bancaires
stripe_connect_idID du compte Stripe Connect
stripe_connect_statusStatut de la vérification
stripe_location_idLocation Stripe pour les terminaux

Statut Connect (BillingEntityConnectStatus)

Section titled “Statut Connect (BillingEntityConnectStatus)”
StatutDescription
pending_enablementEn cours de vérification
completeVérification terminée
enabledCompte actif, paiements possibles
restrictedRestrictions actives
restricted_payouts_disabledVirements désactivés
restricted_charges_disabledEncaissements désactivés
restricted_past_dueDocuments manquants
pending_disabledEn cours de désactivation
rejectedRejeté par Stripe
TraitRôle
StripeAccountSetupCréation/vérification du compte Connect
StripeBalanceConsultation du solde
StripeTerminalTokenGénération de tokens pour les terminaux physiques

Le pivot site_user contient un champ billing_entity_mode (SiteBillingEntityMode) :

ModeDescription
lockedL’utilisateur utilise la billing entity du site, pas de choix
sitesL’utilisateur peut choisir parmi les billing entities des sites
allL’utilisateur peut choisir n’importe quelle billing entity

Modèle : BillingTerminal / CentralBillingTerminal

Les terminaux physiques (Stripe Terminal) sont rattachés à une BillingEntity. Le service StripeTerminalService gère l’interaction avec les terminaux.


Domaine : src/Domain/AppointmentInvoice/

Représentent le cycle de vie d’une facture de consultation.

Statuts de paiement (InvoicePaymentStatus)

Section titled “Statuts de paiement (InvoicePaymentStatus)”

Suivent l’état du paiement associé à la facture.

Les différents moyens de paiement acceptés pour les consultations.

La facturation s’intègre avec IntellioEditeur pour la gestion des Feuilles de Soins Electroniques (FSE). Le service IntellioEditeursService gère :

  • Création/simulation de factures FSE
  • Import de patients depuis l’annuaire
  • Récupération des données d’une facture

Les webhooks liés au billing sont gérés dans src/Infrastructure/Stripe/Webhooks/ :

HandlerEventAction
PaymentIntentSucceededpayment_intent.succeededPaiement réussi
PaymentIntentCanceledpayment_intent.canceledPaiement annulé
PaymentIntentPaymentFailedpayment_intent.payment_failedÉchec de paiement
PaymentIntentRequiresCapturepayment_intent.requires_captureAutorisation, capture à faire
AccountUpdatedaccount.updatedMise à jour du compte Connect
ChargeRefundedcharge.refundedRemboursement
TerminalReaderAction*terminal.reader.action_*Actions terminal physique

FichierRôle
src/Domain/Billing/Models/BillingEntity.phpEntité de facturation (tenant)
src/Domain/Billing/Models/CentralBillingEntity.phpEntité de facturation (central)
src/Domain/Billing/Models/BillingTerminal.phpTerminal de paiement
src/Domain/Billing/Concerns/StripeAccountSetup.phpSetup compte Connect
src/Domain/Billing/Concerns/StripeBalance.phpSolde Stripe
src/Domain/Billing/Jobs/BillingEntityStripeCreationJob.phpJob création compte Stripe
src/Domain/AppointmentInvoice/Factures patients
src/Infrastructure/Stripe/StripePaymentIntentService.phpService Payment Intent
src/Infrastructure/Stripe/StripeTerminalService.phpService Terminal