gigafibre-fsm/services/targo-hub/lib/categories.js
louispaulb 512c4a5f1b feat(ops): dispatch auto complet + perf Boîte/rapports + fix session
Planificateur « Suggérer » : 4 stratégies (smart / meilleurs d'abord / équilibré /
juste ce qu'il faut), compétences+niveaux par tech (édition inline), niveau requis
par compétence + par job, carte des tournées (1 couleur/tech, domicile→arrêts,
sélecteur de jour), fenêtre de dispatch auj.+demain (dates sélectionnées), règle
week-end + placeholder « en attente du quart », clustering + lasso + filtre-date
sur la carte, accès rapide « À assigner » (badge).

Boîte : liste /conversations allégée (45 Mo → ~1 Mo, 17×) + messages chargés à
l'ouverture. Rapports : cache SWR sur revenue-explorer (22×). Session : keep-alive
+ timeout fetch global + authFetch durci → fin des rechargements manuels.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 08:49:35 -04:00

54 lines
3.4 KiB
JavaScript

// ── Taxonomie des conversations — SOURCE UNIQUE ───────────────────────────────
// Avant : le « type » d'une conversation vivait dans 4 endroits désynchronisables
// - TYPES + l'énumération du prompt IA → inbox-triage.js
// - QUEUE_OF (type→file) + QUEUES → conversation.js
// Conséquence réelle : `telephonie`/`television` existaient dans QUEUE_OF mais PAS
// dans TYPES → jamais produits par le triage (clés inertes). On centralise ici pour
// que toute évolution de catégorie se fasse à UN seul endroit.
//
// ⚠️ CONTRAT : le prompt système de `classifyEmail` (inbox-triage.js) énumère les
// valeurs de TYPES À LA MAIN (contrainte du modèle). Si tu ajoutes un type ici,
// ajoute-le AUSSI dans cette énumération du prompt, sinon le triage ne le produira pas.
// Les 4 FILES de l'inbox partagé (= labels F fiables, vs 30 départements).
const QUEUES = ['Facturations', 'Service à la clientèle', 'Supports', 'Technicien']
// Types de demande que le triage peut produire (doivent matcher l'énumération du prompt IA).
const TYPES = ['support', 'facturation', 'vente', 'installation', 'autre']
// type → FILE de routage. (telephonie/television : réservés — routent vers Technicien si un jour produits.)
const QUEUE_OF = {
facturation: 'Facturations',
vente: 'Service à la clientèle',
support: 'Supports',
installation: 'Technicien',
telephonie: 'Technicien',
television: 'Technicien',
autre: '',
}
// type → catégorie de TICKET (ERPNext Issue).
const CAT = { facturation: 'Facturation', vente: 'Commercial', installation: 'Installation', support: 'Support', autre: 'Autre' }
// issue_type (ERPNext Issue — 40+ valeurs héritées de F) → une des 4 FILES omnichannel. '' / absent = non classé.
// Sert « Mes départements » sur la page Tickets : un agent voit les tickets des files dont il est membre.
// Les 4 noms de files sont eux-mêmes des Issue Type valides (identité). Mapping éditable — affiner au besoin.
const ISSUE_TYPE_QUEUE = {
// → Facturations
Facturation: 'Facturations', Facturations: 'Facturations', Recouvrement: 'Facturations',
'Compte Payable': 'Facturations', Suspension: 'Facturations', 'Changement forfait': 'Facturations', Achat: 'Facturations',
// → Service à la clientèle
Vente: 'Service à la clientèle', 'Service à la clientèle': 'Service à la clientèle', 'Satisfaction client': 'Service à la clientèle',
'Rétention': 'Service à la clientèle', Representant: 'Service à la clientèle', Suivi: 'Service à la clientèle', Direction: 'Service à la clientèle',
// → Supports
Support: 'Supports', Supports: 'Supports', 'Support Informatique': 'Supports', 'Support COM': 'Supports',
'Sys Admin': 'Supports', 'Net Admin': 'Supports', ToDo: 'Supports', Projet: 'Supports', Developpement: 'Supports', Conception: 'Supports',
// → Technicien
Technicien: 'Technicien', Monteur: 'Technicien', Reparation: 'Technicien', Installation: 'Technicien', Desinstallation: 'Technicien',
'Téléphonie': 'Technicien', 'Reparation Fibre': 'Technicien', 'Installation Fibre': 'Technicien', Garage: 'Technicien',
Domotique: 'Technicien', Fusionneur: 'Technicien', Relais: 'Technicien', 'Télévision': 'Technicien', Inventaire: 'Technicien',
'Install/Reparation Télé': 'Technicien', Activation: 'Technicien',
}
module.exports = { QUEUES, TYPES, QUEUE_OF, CAT, ISSUE_TYPE_QUEUE }