Files
Omika/infra/postgresql/007_diagnostics_usage.sql
T
2026-10-23 18:46:50 +02:00

48 lines
2.9 KiB
SQL

-- ============================================================
-- Omika Diagnostic Center -- 007_diagnostics_usage.sql
-- Tâche 18 : télémétrie d'utilisation des écrans / fonctionnalités (additif).
-- ============================================================
-- IDEMPOTENT : ADD COLUMN IF NOT EXISTS + CREATE INDEX IF NOT EXISTS.
-- AUCUN DROP, AUCUNE suppression, AUCUNE migration destructive.
-- PostgreSQL 18 compatible (syntaxe disponible depuis 9.6).
--
-- Ajoute au diagnostic_event deux dimensions d'USAGE fonctionnel, NULLABLES :
-- les événements antérieurs restent parfaitement valides (screen_code = NULL,
-- feature_code = NULL), AUCUN backfill, AUCUNE valeur inventée (« UNKNOWN »/« N/A »
-- interdits).
--
-- screen_code : code fonctionnel STABLE d'un écran (ex. AGENDA, SITE_DETAIL).
-- Produit DEPUIS le catalogue applicatif (jamais un nom de
-- Page/ViewModel, jamais un identifiant métier, jamais une saisie
-- utilisateur). Null pour les événements background sans écran.
-- feature_code: code fonctionnel STABLE d'une action métier significative
-- (ex. EMAIL_SEND, REPORT_GENERATE). Attaché à l'événement précis
-- de l'action, jamais à un « contexte courant » global. Null si non
-- applicable.
--
-- CHOIX DE TYPE (cohérence schéma) : TEXT sans VARCHAR, comme les autres chaînes
-- (priority, level, component, license_number…). La validation (longueur, valeurs
-- bornées) est portée par le code au moment de la résolution, comme les autres
-- champs. Les deux colonnes sont NON SENSIBLES : jamais de DeviceId/UserId/
-- CollaborateurId/email/téléphone/token/id métier dynamique (§9/§10/§72).
-- ============================================================
ALTER TABLE diagnostic_event
ADD COLUMN IF NOT EXISTS screen_code TEXT,
ADD COLUMN IF NOT EXISTS feature_code TEXT;
-- Index de recherche « tous les ScreenView d'un écran dans le temps » (T18, §49) :
-- les agrégations d'usage filtrent par (event_code, screen_code) puis par période,
-- mais l'index composé (screen_code, timestamp_utc DESC) couvre le filtre écran +
-- le tri temporel des diagnostics filtrés (§60), aligné sur le style de
-- ix_diagnostic_event_device_key_timestamp (006).
CREATE INDEX IF NOT EXISTS ix_diagnostic_event_screen_code_timestamp
ON diagnostic_event (screen_code, timestamp_utc DESC);
-- Index (feature_code, timestamp_utc DESC) : filtre fonctionnalité + tri temporel.
-- FeatureCode est une dimension de catalogue à cardinalité TRÈS faible (< 10), donc
-- un index est peu sélectif ; il est néanmoins ajouté par symétrie avec screen_code
-- car le filtre « Tous les diagnostics d'une fonctionnalité » (§60) est prévu.
CREATE INDEX IF NOT EXISTS ix_diagnostic_event_feature_code_timestamp
ON diagnostic_event (feature_code, timestamp_utc DESC);