De admin toolbox: force-complete, impersonation, stuck-flow fixes
Knoppen met audit, redenen en beperkte blast radius voor stuck escrows, force-completers, stranded signups en read-only impersonation.
De Admin Toolbox is het gecontroleerde escape path voor tenantproblemen die de gewone UI niet kan oplossen: één tenant, één rij, één vastgelopen flow, met audit, verplichte reden en de kleinst mogelijke blast radius.
Force-complete endpoints
Specifieke operationele flows hebben een force-complete escape-hatch in de platform admin UI: een receiving session die niet sluit door een stale lock, een workflow stage die moet vooruitgaan terwijl één criterium ontbreekt, een settlement run die halverwege abortte. Elke force-complete schrijft zijn eigen audit event met reden, actor en affected rows. De endpoints bestaan niet voor algemeen gebruik; ze zijn de “somebody needs to break the glass”-route.
Drie escape-hatches voor stuck escrows
Escrows kunnen op drie specifieke manieren vastlopen: deposit confirmed maar funds kwamen niet aan (payment-side mismatch), goods received maar ship-guard ging niet open (ship-event-side mismatch), release ready maar settlement row werd niet geschreven (settlement-side mismatch). Elk krijgt zijn eigen admin button onder /admin/escrow met een confirmation prompt die exact uitschrijft wat geflipt wordt — geen samengestelde acties achter één klik.
Manual Blancco sync trigger
Per-tenant Blancco sync draait op een cron, maar als een tenant de integratie net configureerde of net een bulk-import had die onmiddellijke aandacht vraagt, start een admin button de sync on demand. De trigger respecteert dezelfde rate-limit en batching als de cron — hetzelfde codepad, alleen voor de volgende geplande run.
Email-verification + stranded-signup recovery
Wanneer een tenant-admin zich registreert maar nooit de verificatie-e-mail krijgt, toont /admin/users de verification status en biedt een re-send. Stranded signups (gestart maar nooit voltooid) verschijnen in /admin/onboarding met de optie om manueel te clearen of de welcome flow opnieuw te sturen.
Subscription-status override
Wanneer de subscription_status van een tenant afwijkt van de billing provider (zeldzaam, maar het gebeurt — webhook gemist, manual cancel), biedt /admin/billing een direct override field met verplichte reason note; de override wordt audit-gelogd en de billing provider wordt bij de volgende webhook gereconcilieerd.
Impersonation with write-block
Het grootste tool. /admin/impersonate laat platform staff inloggen als tenant user (read-only) om te onderzoeken wat zij zien zonder eindeloze emails. Middleware onderschept mutating HTTP methods (POST, PUT, PATCH, DELETE) op impersonated sessions en retourneert een 403 met “impersonation is read-only”. Session tracking schrijft elke pagina die de impersonator bezoekt naar de activity log — dus een tenant die vraagt “heeft iemand van het platform onze data bekeken?” krijgt een rij, geen gok.
audit_events append-only op triggerniveau
De audit_events tabel heeft databasetriggers die UPDATE en DELETE weigeren. Zelfs een admin met verhoogde database access kan de history niet stilletjes herschrijven. Nieuwe rijen kunnen worden ingevoegd (een correction met reference naar het original event), maar de originele rij blijft. De Admin Toolbox kan repareren wat stuk is; hij kan niet opruimen wat geregistreerd werd.