Path B

Calculator → deposit

The visitor opens the calculator, states a professional email, fills the mission form, receives a public quote, confirms interest, and optionally pays the deposit.

Status Implemented Last reviewed 2026-08-06 All user flows →
User intent

What the visitor is trying to do

“I want to estimate a mission cost and pay a deposit to lock in my interest — without revealing all my project details up front.”

Entry points

ElementDestination
Tools hub “Estimer”/outils/calculator/
Engagement “Ouvrir le calculateur”/outils/calculator/
Capabilities “Comparer dans le classement”/expertises/
Footer “Contact”/contact/

Flow

flowchart LR
      LAND["Landing page"] --> CALC["/outils/calculator/"]
      CALC --> GATE["Access gate
(professional email)"] GATE --> FORM["Mission form
(5 steps)"] FORM --> API["POST /api/quote"] API --> QUOTE["Public quote result"] QUOTE --> CONFIRM["Confirm interest"] CONFIRM --> DETAIL["Detailed quote + deposit"] DETAIL --> DEPOSIT["POST /paiement/devis/acompte/"] DEPOSIT --> SESSION["Stripe Checkout session"] SESSION --> RETURN["/paiement/<ref>/retour/"] SESSION --> CANCEL["/paiement/<ref>/annule/"] RETURN --> WEBHOOK["Webhook confirms PAID"] WEBHOOK --> ENTITLE["Entitlement + delivery link"]

Screen inventory

IDScreenUser task
P0LandingChoose an entry point
P4Calculator accessState professional email
P5Calculator formFill mission parameters
P6Quote resultReview public estimate and confirm interest
P7Deposit buttonPay the quoted deposit
P11Stripe hosted checkoutEnter card and confirm
P12Return / cancelledSee confirmation or backing-out notice
P13Webhook (machine)Settle payment and grant entitlement
P14Entitlement / deliveryDownload file or see access instructions

Flow scenario

Scenario B1

Estimate a mission and pay the deposit

Trigger

  • Visitor clicks “Qualifier une mission” or opens the calculator from the nav
  • States a professional email at the access gate
  • Fills the 5-step mission form

Experience

  1. The calculator validates the email domain and opens the form.
  2. POST /api/quote runs the engine and returns a public projection.
  3. The visitor clicks “Confirmer mon intérêt” to receive a detailed quote.
  4. The contact page shows the quote with a deposit button.
  5. Clicking “Verser l’acompte” posts to /paiement/devis/acompte/, which recomputes the deposit server-side and opens Stripe.
  6. The return page shows the paid deposit and the next instalment link when applicable.

Trust and safety rules

  • The amount charged is always recomputed from the stored qualification — never from a browser field.
  • The terms version is frozen at payment creation time; later CGV updates do not retroactively change an open payment.
  • The return page never declares a payment settled: it shows “confirmation en cours” until the signed webhook arrives.
  • No card data touches the server. Stripe hosts the checkout page and returns the buyer via HTTPS.
  • Pending checkouts are throttled per email address to prevent probing.
  • Payment pages are blocked by robots.txt and carry no editorial SEO value.

Interaction rules

  • The calculator requires a professional email before any engine is touched; the access gate blocks disposable domains.
  • The deposit form on the contact page is optional: the visitor can book a call without paying.
  • A visitor cannot start a second pending payment from the same email address more than ten times per hour.
  • Reduced-motion preferences disable nonessential transitions.

Result states

StateWhat the visitor seesWhat happens next
PendingCheckout form, “continuer vers le paiement sécurisé”Redirect to Stripe
ProcessingReturn page: “confirmation en cours”Webhook settles the row
PaidReturn page: deposit confirmed, next instalment if anyBuyer downloads or books
Cancelled“Vous avez annulé le paiement” — nothing was chargedBuyer may restart
FailedError message, no chargeBuyer retries or contacts support