Configure fiscal compliance
Self-service checklist to close Beacon fiscal onboarding before production.
howto • updated 2026-03-17
Prerequisites
- Organization on an eligible paid plan.
- Owner/admin operating in the correct mode (
testorlive). - setup-state available with no manual customer secrets.
Step-by-step
11) Prepare fiscal engine
Run Beacon-managed provisioning and confirmsetup-state.22) Configure TA in live
UsePOST /api/fiscal/setup/at?org=<slug>&mode=liveto store encrypted credentials and validate access only inlive.33) Configure profile and context
Fill the fiscal profile and usestate.issuanceContextOptionsfromGET /api/fiscal/setup-stateto confirm the default establishment and series.44) Clear blocked states
Useseries/communicate,saft/automatic, andsetup/self-healuntil the environment reachesready.55) Test issuance
Generatesetup/preview, issue documents intest, and validate the first controlled issuance inlive.
Quality gate before live
- Confirm the frontend relies only on
GET /api/fiscal/setup-state?org=<slug>&mode=<mode>for CTAs andstate.issuanceContextOptions. - Verify the frontend reads the functional state from the
statefield in the response, without parallel endpoints. - Verify reconciliation between Stripe events and issued fiscal documents.
- Ensure runbooks exist for stuck provisioning, KEK rotation, and fiscal backlog.
Canonical frontend endpoint
Always use GET /api/fiscal/setup-state?org=<slug>&mode=<mode>. The current public response is an envelope { ok, state, context }.
Frequent errors
| Signal | Cause | Mitigation |
|---|---|---|
blocked:at_credentials_invalid | invalid TA credentials | reconfigure TA and rerun diagnostics |
blocked:series_not_reported | default series not reported yet | communicate the series and validate again |
blocked:provider_unavailable | temporary outage | wait for nextRetryAt and retry |