For Florida families
Purchase states: one named state per item, and never a second charge for it
self-help lane · Deterministic — no model call
Current availability
ShippedConfigured and enabled: every consumer purchase door.
- Where it lives
- The unlock cards (estate plan, single documents, probate, the funding fix) · /api/checkout/item-status · /api/checkout
- What unlocks it
- a signed-in buyer, for their own items
Status is evaluated against this deployment's configuration by the capability-status service at build time; the catalogue's facts were last reviewed on the date shown.
Capabilities
- ShippedEach item reads as one of ten states from what the database recorded — not purchased, checkout unavailable, payment pending, paid, generating, ready, failed, expired, refunded, access restored — never guessed from a return link.
- ShippedWhile a payment is pending or the item is granted, the page offers no purchase; a pending order shows its own payment page to return to and when it lapses.
- ShippedThe database refuses a second start for an item whose checkout is still open (naming that order) or that is already granted, and two starts at once wait for each other; a checkout cut off before it reached the payment provider counts as open for 15 minutes only.
- ShippedEvery state carries a support reference derived from the checkout's own id — never a card, an e-mail, an answer or the provider's payload.
Limits
- A pending order whose payment page was not kept shows as pending with its expiry; the payment page itself is the provider's.
- A refund leaves the documents available while the grant continues; refunds are decided by billing support, not by this page.
What EstateDraftFL refuses
| Reason code | HTTP | What it means |
|---|---|---|
| unauthorized | 401 | The purchase state is read by the signed-in buyer only. |
| invalid-item | 400 | The item could not be read (its kind, its plan or its reference). |
| already-purchased | 409 | The item is already granted — it is opened from the account; nothing was charged. |
| purchase-pending | 409 | A payment for this item has already started — the same order (its page and expiry) is returned; a second one is never started. |
| unavailable | 503 | The purchase could not be read just now — never shown as not purchased; nothing changed. |
Evidence
- supabase/migrations/20261002130000_phase16_purchase_guard.sql
- src/lib/payments/purchase-state.ts
- src/lib/payments/purchase-guard.ts
- src/app/api/checkout/item-status/route.ts
- src/components/estate/PurchaseStatePanel.tsx
- src/components/estate/UnlockCard.tsx
- scripts/rls-negative-suite.sql
- src/lib/master-plan-phase16.test.ts
Last reviewed 2026-10-02