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.
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
| Element | Destination |
|---|---|
| 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
| ID | Screen | User task |
|---|---|---|
| P0 | Landing | Choose an entry point |
| P4 | Calculator access | State professional email |
| P5 | Calculator form | Fill mission parameters |
| P6 | Quote result | Review public estimate and confirm interest |
| P7 | Deposit button | Pay the quoted deposit |
| P11 | Stripe hosted checkout | Enter card and confirm |
| P12 | Return / cancelled | See confirmation or backing-out notice |
| P13 | Webhook (machine) | Settle payment and grant entitlement |
| P14 | Entitlement / delivery | Download 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
- The calculator validates the email domain and opens the form.
POST /api/quoteruns the engine and returns a public projection.- The visitor clicks “Confirmer mon intérêt” to receive a detailed quote.
- The contact page shows the quote with a deposit button.
- Clicking “Verser l’acompte” posts to
/paiement/devis/acompte/, which recomputes the deposit server-side and opens Stripe. - 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.txtand 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
| State | What the visitor sees | What happens next |
|---|---|---|
| Pending | Checkout form, “continuer vers le paiement sécurisé” | Redirect to Stripe |
| Processing | Return page: “confirmation en cours” | Webhook settles the row |
| Paid | Return page: deposit confirmed, next instalment if any | Buyer downloads or books |
| Cancelled | “Vous avez annulé le paiement” — nothing was charged | Buyer may restart |
| Failed | Error message, no charge | Buyer retries or contacts support |