Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

197 lines
9.5 KiB
JavaScript

/**
* Source of truth for all SLA-related internal notification templates.
*
* Each entry has:
* - templateName: unique template identifier
* - subtypeName: the internal_notification_subtypes.name this template belongs to
* - translations: object keyed by language code with { title, message }
*
* SLA notifications are internal-only (sent to MSP technicians/managers).
*
* Used by migrations and seeds via upsertInternalTemplates().
*/
const TEMPLATES = [
// -- sla-warning (any threshold < 100%) -------------------------------------
{
templateName: 'sla-warning',
subtypeName: 'sla-warning',
translations: {
en: {
title: 'SLA Warning: {{thresholdPercent}}% Time Elapsed',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" is at {{thresholdPercent}}% of its {{slaType}} SLA. Time remaining: {{remainingTime}}.',
},
fr: {
title: 'Alerte SLA\u00a0: {{thresholdPercent}}\u00a0% du temps \u00e9coul\u00e9',
message: 'Le ticket #{{ticketNumber}} "{{ticketTitle}}" a atteint {{thresholdPercent}}\u00a0% de son SLA {{slaType}}. Temps restant\u00a0: {{remainingTime}}.',
},
es: {
title: 'Alerta de SLA: {{thresholdPercent}}% de tiempo transcurrido',
message: 'El ticket #{{ticketNumber}} "{{ticketTitle}}" est\u00e1 al {{thresholdPercent}}% de su SLA {{slaType}}. Tiempo restante: {{remainingTime}}.',
},
de: {
title: 'SLA-Warnung: {{thresholdPercent}}% der Zeit verstrichen',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" hat {{thresholdPercent}}% seines {{slaType}}-SLA erreicht. Verbleibende Zeit: {{remainingTime}}.',
},
nl: {
title: 'SLA-waarschuwing: {{thresholdPercent}}% van de tijd verstreken',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" heeft {{thresholdPercent}}% van zijn {{slaType}}-SLA bereikt. Resterende tijd: {{remainingTime}}.',
},
it: {
title: 'Avviso SLA: {{thresholdPercent}}% del tempo trascorso',
message: 'Il ticket #{{ticketNumber}} "{{ticketTitle}}" \u00e8 al {{thresholdPercent}}% del suo SLA {{slaType}}. Tempo rimanente: {{remainingTime}}.',
},
pl: {
title: 'Ostrze\u017cenie SLA: up\u0142yn\u0119\u0142o {{thresholdPercent}}% czasu',
message: 'Zg\u0142oszenie #{{ticketNumber}} "{{ticketTitle}}" osi\u0105gn\u0119\u0142o {{thresholdPercent}}% limitu SLA {{slaType}}. Pozosta\u0142y czas: {{remainingTime}}.',
},
},
},
// -- sla-breach -------------------------------------------------------------
{
templateName: 'sla-breach',
subtypeName: 'sla-breach',
translations: {
en: {
title: 'SLA Breached',
message: 'SLA BREACH: Ticket #{{ticketNumber}} "{{ticketTitle}}" has exceeded its {{slaType}} SLA target. Policy: {{policyName}}. Client: {{clientName}}.',
},
fr: {
title: 'SLA non respect\u00e9',
message: 'VIOLATION DE SLA\u00a0: le ticket #{{ticketNumber}} "{{ticketTitle}}" a d\u00e9pass\u00e9 l\'objectif de son SLA {{slaType}}. Politique\u00a0: {{policyName}}. Client\u00a0: {{clientName}}.',
},
es: {
title: 'SLA incumplido',
message: 'INCUMPLIMIENTO DE SLA: el ticket #{{ticketNumber}} "{{ticketTitle}}" ha superado el objetivo de su SLA {{slaType}}. Pol\u00edtica: {{policyName}}. Cliente: {{clientName}}.',
},
de: {
title: 'SLA verletzt',
message: 'SLA-VERLETZUNG: Ticket #{{ticketNumber}} "{{ticketTitle}}" hat das Ziel seines {{slaType}}-SLA \u00fcberschritten. Richtlinie: {{policyName}}. Kunde: {{clientName}}.',
},
nl: {
title: 'SLA overschreden',
message: 'SLA-OVERSCHRIJDING: ticket #{{ticketNumber}} "{{ticketTitle}}" heeft de doelstelling van zijn {{slaType}}-SLA overschreden. Beleid: {{policyName}}. Klant: {{clientName}}.',
},
it: {
title: 'SLA non rispettato',
message: 'VIOLAZIONE SLA: il ticket #{{ticketNumber}} "{{ticketTitle}}" ha superato l\'obiettivo del suo SLA {{slaType}}. Criterio: {{policyName}}. Cliente: {{clientName}}.',
},
pl: {
title: 'Naruszenie SLA',
message: 'NARUSZENIE SLA: zg\u0142oszenie #{{ticketNumber}} "{{ticketTitle}}" przekroczy\u0142o cel SLA {{slaType}}. Zasada: {{policyName}}. Klient: {{clientName}}.',
},
},
},
// -- sla-response-met -------------------------------------------------------
{
templateName: 'sla-response-met',
subtypeName: 'sla-response-met',
translations: {
en: {
title: 'Response SLA Met',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" response SLA was met. First response provided within target time.',
},
fr: {
title: 'SLA de r\u00e9ponse respect\u00e9',
message: 'Le SLA de r\u00e9ponse du ticket #{{ticketNumber}} "{{ticketTitle}}" a \u00e9t\u00e9 respect\u00e9. La premi\u00e8re r\u00e9ponse a \u00e9t\u00e9 fournie dans le d\u00e9lai cible.',
},
es: {
title: 'SLA de respuesta cumplido',
message: 'Se cumpli\u00f3 el SLA de respuesta del ticket #{{ticketNumber}} "{{ticketTitle}}". La primera respuesta se proporcion\u00f3 dentro del tiempo objetivo.',
},
de: {
title: 'Reaktions-SLA erf\u00fcllt',
message: 'Das Reaktions-SLA f\u00fcr Ticket #{{ticketNumber}} "{{ticketTitle}}" wurde erf\u00fcllt. Die erste Antwort wurde innerhalb der Zielzeit bereitgestellt.',
},
nl: {
title: 'Reactie-SLA behaald',
message: 'De reactie-SLA voor ticket #{{ticketNumber}} "{{ticketTitle}}" is behaald. De eerste reactie is binnen de streeftijd gegeven.',
},
it: {
title: 'SLA di risposta rispettato',
message: 'Lo SLA di risposta del ticket #{{ticketNumber}} "{{ticketTitle}}" \u00e8 stato rispettato. La prima risposta \u00e8 stata fornita entro il tempo previsto.',
},
pl: {
title: 'SLA odpowiedzi dotrzymane',
message: 'SLA odpowiedzi dla zg\u0142oszenia #{{ticketNumber}} "{{ticketTitle}}" zosta\u0142o dotrzymane. Pierwsza odpowied\u017a zosta\u0142a udzielona w docelowym czasie.',
},
},
},
// -- sla-resolution-met -----------------------------------------------------
{
templateName: 'sla-resolution-met',
subtypeName: 'sla-resolution-met',
translations: {
en: {
title: 'Resolution SLA Met',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" was resolved within SLA target. Great job!',
},
fr: {
title: 'SLA de r\u00e9solution respect\u00e9',
message: 'Le ticket #{{ticketNumber}} "{{ticketTitle}}" a \u00e9t\u00e9 r\u00e9solu dans le d\u00e9lai SLA. Excellent travail\u00a0!',
},
es: {
title: 'SLA de resoluci\u00f3n cumplido',
message: 'El ticket #{{ticketNumber}} "{{ticketTitle}}" se resolvi\u00f3 dentro del objetivo del SLA. \u00a1Excelente trabajo!',
},
de: {
title: 'L\u00f6sungs-SLA erf\u00fcllt',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" wurde innerhalb des SLA-Ziels gel\u00f6st. Gute Arbeit!',
},
nl: {
title: 'Oplossings-SLA behaald',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" is binnen de SLA-doelstelling opgelost. Goed gedaan!',
},
it: {
title: 'SLA di risoluzione rispettato',
message: 'Il ticket #{{ticketNumber}} "{{ticketTitle}}" \u00e8 stato risolto entro l\'obiettivo SLA. Ottimo lavoro!',
},
pl: {
title: 'SLA rozwi\u0105zania dotrzymane',
message: 'Zg\u0142oszenie #{{ticketNumber}} "{{ticketTitle}}" zosta\u0142o rozwi\u0105zane w ramach celu SLA. \u015awietna robota!',
},
},
},
// -- sla-escalation ---------------------------------------------------------
{
templateName: 'sla-escalation',
subtypeName: 'sla-escalation',
translations: {
en: {
title: 'Ticket Escalated (SLA)',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" has been escalated to level {{escalationLevel}} due to SLA. You have been added as an escalation manager.',
},
fr: {
title: 'Ticket escalad\u00e9 (SLA)',
message: 'Le ticket #{{ticketNumber}} "{{ticketTitle}}" a \u00e9t\u00e9 escalad\u00e9 au niveau {{escalationLevel}} en raison du SLA. Vous avez \u00e9t\u00e9 ajout\u00e9 comme responsable d\'escalade.',
},
es: {
title: 'Ticket escalado (SLA)',
message: 'El ticket #{{ticketNumber}} "{{ticketTitle}}" se ha escalado al nivel {{escalationLevel}} debido al SLA. Ha sido agregado como gestor de escalada.',
},
de: {
title: 'Ticket eskaliert (SLA)',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" wurde aufgrund des SLA auf Stufe {{escalationLevel}} eskaliert. Sie wurden als Eskalationsmanager hinzugef\u00fcgt.',
},
nl: {
title: 'Ticket ge\u00ebscaleerd (SLA)',
message: 'Ticket #{{ticketNumber}} "{{ticketTitle}}" is vanwege de SLA ge\u00ebscaleerd naar niveau {{escalationLevel}}. U bent toegevoegd als escalatiemanager.',
},
it: {
title: 'Ticket scalato (SLA)',
message: 'Il ticket #{{ticketNumber}} "{{ticketTitle}}" \u00e8 stato scalato al livello {{escalationLevel}} a causa dello SLA. Sei stato aggiunto come responsabile dell\'escalation.',
},
pl: {
title: 'Zg\u0142oszenie eskalowane (SLA)',
message: 'Zg\u0142oszenie #{{ticketNumber}} "{{ticketTitle}}" zosta\u0142o eskalowane do poziomu {{escalationLevel}} z powodu SLA. Zosta\u0142e\u015b(a\u015b) dodany(a) jako mened\u017cer eskalacji.',
},
},
},
];
module.exports = { TEMPLATES };