Skip to content

Rétrocession

La rétrocession gère le partage de revenus entre praticiens. Typiquement, un ophtalmologue rétrocède une partie de ses honoraires à l’orthoptiste qui a fait le bilan, ou un réseau facture des frais aux cabinets membres.


Modèle : src/Domain/Retrocession/Models/RetrocessionAccount.php

Un compte de rétrocession est une entité capable d’émettre et recevoir des paiements. Il utilise Laravel Cashier (Billable) pour la gestion Stripe.

Le compte est polymorphe (resource_type / resource_id) :

RetrocessionAccountResourceTypeDescription
userCompte personnel d’un praticien
siteCompte du site (cabinet)
networkCompte du réseau

Le mode de rétrocession du site (SiteRetrocessionMode) détermine qui est le payeur :

ModeDescription
individualChaque praticien paie/reçoit individuellement
globalLe site gère globalement les rétrocessions

Modèle : src/Domain/Retrocession/Models/Retrocession.php

Représente une rétrocession pour une période donnée entre un payeur et un destinataire.

ChampTypeDescription
payer_iduuidRetrocessionAccount payeur
recipient_type / recipient_idmorphToDestinataire
period_start / period_enddatePériode couverte
amountintMontant total (centimes)
total_platform_feeintFrais plateforme (centimes)
agreed_amountintMontant convenu après négo
statusenumStatut du workflow
payment_statusenumStatut du paiement
stripe_pi / stripe_invoicestringRéférences Stripe
expires_atdatetimeExpiration (auto-accept après 7j)

Les lignes de détail de la rétrocession. Chaque ligne correspond à un acte facturé.

RetrocessionLineTypeDescription
appointment_type_networkActe réseau (type de RDV)
proofreading_between_usersRelecture entre praticiens
TypeDescription
fixedMontant fixe par acte
percentagePourcentage du montant

stateDiagram-v2
    [*] --> pending
    pending --> countered
    pending --> auto_accepted: Après 7j sans réponse
    countered --> accepted
    countered --> cancelled
    accepted --> [*]: Paiement
    auto_accepted --> [*]: Paiement
StatutDescription
pendingProposition initiale
counteredContre-proposition en cours
acceptedAccepté par les deux parties
auto_acceptedAuto-accepté après expiration
cancelledAnnulé

Les deux parties peuvent négocier le montant via des offres :

RetrocessionOfferStatusDescription
proposedOffre en attente
acceptedOffre acceptée
declinedOffre refusée
supersededRemplacée par une nouvelle offre
RetrocessionOfferActorDescription
payerLe payeur fait l’offre
recipientLe destinataire fait l’offre
StatutDescription
pendingEn attente de paiement
in_transitPaiement en cours
succeededPayé
failedÉchec
refundedRemboursé

Le paiement est géré par RetrocessionPayoutService qui utilise Stripe pour les transferts.


FichierRôle
src/Domain/Retrocession/Models/RetrocessionAccount.phpCompte de rétrocession
src/Domain/Retrocession/Models/Retrocession.phpRétrocession (période)
src/Domain/Retrocession/Models/RetrocessionLine.phpLigne de détail
src/Domain/Retrocession/Models/RetrocessionOffer.phpOffre/contre-offre
src/Domain/Retrocession/Enums/Tous les enums
src/Domain/Retrocession/Jobs/ProofreadingRetrocession*Job.phpJobs de calcul
src/Infrastructure/Stripe/RetrocessionPayoutService.phpService de paiement Stripe
src/Domain/Site/Enums/SiteRetrocessionMode.phpMode par site