Checkpoint: Ajout de filtres de période (dernier mois, trimestre, année) pour affiner l'analyse des tendances. Implémentation de l'export Excel des rapports analytiques avec 5 feuilles (statistiques globales, inscriptions par mois, taux de remplissage, participation par établissement et par fonction). Création du schéma de base de données pour les alertes automatiques (fonctionnalité future). Les utilisateurs peuvent maintenant filtrer les données analytiques par période et télécharger des rapports Excel complets.

This commit is contained in:
Manus Sandbox
2025-11-23 16:36:26 -05:00
parent 64db3f1aa6
commit 03efb59cbf
11 changed files with 1914 additions and 7 deletions

View File

@@ -221,3 +221,34 @@ export const formateurs = mysqlTable("formateurs", {
export type Formateur = typeof formateurs.$inferSelect;
export type InsertFormateur = typeof formateurs.$inferInsert;
/**
* Table des alertes automatiques
* Configure les alertes à envoyer selon certaines conditions
*/
export const alertes = mysqlTable("alertes", {
id: int("id").autoincrement().primaryKey(),
/** Nom de l'alerte */
nom: varchar("nom", { length: 255 }).notNull(),
/** Type d'alerte (taux_remplissage, seuil_inscriptions) */
type: mysqlEnum("type", ["taux_remplissage", "seuil_inscriptions"]).notNull(),
/** Condition de déclenchement (ex: ">=", ">", "<=", "<", "=") */
condition: varchar("condition", { length: 10 }).notNull(),
/** Valeur seuil pour déclencher l'alerte */
valeurSeuil: int("valeurSeuil").notNull(),
/** Code établissement concerné (null = tous) */
codeEtablissement: varchar("codeEtablissement", { length: 50 }),
/** Email(s) destinataire(s) séparés par des virgules */
emailsDestinataires: text("emailsDestinataires").notNull(),
/** Actif ou non */
actif: boolean("actif").default(true).notNull(),
/** Dernière vérification */
derniereVerification: timestamp("derniereVerification"),
/** Dernier envoi d'alerte */
dernierEnvoi: timestamp("dernierEnvoi"),
createdAt: timestamp("createdAt").defaultNow().notNull(),
updatedAt: timestamp("updatedAt").defaultNow().onUpdateNow().notNull(),
});
export type Alerte = typeof alertes.$inferSelect;
export type InsertAlerte = typeof alertes.$inferInsert;