SLA was already built (missed by Gemini's plan): hub /sla/policies store,
useSla() composable (slaFor → ok/at_risk/breached + SLA_BADGE), editable
SlaSettings.vue — used on tickets. Surfaced it on Planification jobs by
reuse (NO ERPNext schema migration, NO new cron):
- jobSlaBadge(job): maps a Dispatch Job to a synthetic ticket
(priority→capitalized, creation, first_responded_on set so it uses the
RESOLUTION band = creation + policy[priority]) and returns only the
actionable states. entrySlaBadge for review entries via poolByName.
- Red "SLA dépassé" / orange "SLA proche" chip on pool jobs (triage) and
review entries; ok/none show nothing (no clutter).
Compute-on-read, so the matrix stays editable in Settings with zero
migration risk. Verified: 57 breached + 5 at-risk on the current pool
backlog; chip renders next to the job subject.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>