using System.Collections.Generic; using System.Linq; namespace ManagerService.Services { /// /// Liste fixe des thèmes de questions visiteurs. /// /// ⚠️ **Fixe, et c'est le point de conception.** Des thèmes découverts librement par l'IA /// colleraient mieux à chaque lieu, mais les agrégats mensuels ne se compareraient plus : /// « Horaires » en janvier et « Questions d'horaires » en février seraient deux lignes /// distinctes, et la courbe que le client regarde ne voudrait rien dire. Or la table /// d'agrégats existe précisément pour survivre à la purge et porter cet historique. /// /// ⚠️ **Ajouter un thème est possible, en renommer un ne l'est pas** : le libellé est la /// clé de , donc le renommer coupe l'historique /// en deux. Un nouveau thème, lui, apparaît simplement à partir du mois où il est ajouté. /// public static class QuestionThemes { public const string Other = "Autre"; public static readonly IReadOnlyList All = new[] { "Horaires et tarifs", "Accès et transport", "Accessibilité", "Œuvres et contenu", "Services sur place", "Événements et animations", "Orientation dans le lieu", Other, }; /// /// Ramène la réponse du modèle sur un thème connu. Une valeur inattendue tombe dans /// « Autre » plutôt que de créer une ligne d'agrégat parasite — le modèle peut /// paraphraser, la table ne doit pas en souffrir. /// public static string Normalize(string raw) { if (string.IsNullOrWhiteSpace(raw)) return Other; var trimmed = raw.Trim().Trim('"', '.', '-', ' '); return All.FirstOrDefault(t => string.Equals(t, trimmed, System.StringComparison.OrdinalIgnoreCase)) ?? Other; } } }