Checkpoint: Simplification de la classification IA dans l'onglet Veille Stratégique : suppression de la catégorie médico-sociale (Handicap, PA, Enfance, etc.), remplacement de "Générale" par "Informationnelle", classification IA réduite au seul type de veille (réglementaire/concurrentielle/technologique/informationnelle). Migration BDD des données generale → informationnelle. 0 erreur TypeScript, 21 tests passés.

This commit is contained in:
Manus
2026-06-17 04:02:17 -04:00
parent 937dda1cac
commit dcb726832c
17 changed files with 1310 additions and 331 deletions

View File

@@ -0,0 +1,2 @@
ALTER TABLE `rss_feeds` MODIFY COLUMN `defaultTypeVeille` enum('reglementaire','concurrentielle','technologique','informationnelle');--> statement-breakpoint
ALTER TABLE `veille_items` MODIFY COLUMN `typeVeille` enum('reglementaire','concurrentielle','technologique','informationnelle') NOT NULL;

View File

@@ -0,0 +1,985 @@
{
"version": "5",
"dialect": "mysql",
"id": "60818888-9a29-4da2-b430-ea765431d740",
"prevId": "88852e92-af9f-4778-8015-3c6318f59cb4",
"tables": {
"aap_items": {
"name": "aap_items",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"dedupKey": {
"name": "dedupKey",
"type": "varchar(64)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"titre": {
"name": "titre",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"categorie": {
"name": "categorie",
"type": "enum('Handicap','PA','Enfance','Précarité','Sanitaire','Autre')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"region": {
"name": "region",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"departement": {
"name": "departement",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"departements": {
"name": "departements",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"dateCloture": {
"name": "dateCloture",
"type": "timestamp",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"datePublication": {
"name": "datePublication",
"type": "timestamp",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"lien": {
"name": "lien",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"importedAt": {
"name": "importedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(now())"
},
"iaRelevant": {
"name": "iaRelevant",
"type": "boolean",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"iaCategorie": {
"name": "iaCategorie",
"type": "varchar(128)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"iaClassifiedBy": {
"name": "iaClassifiedBy",
"type": "enum('ia','rules')",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"iaReason": {
"name": "iaReason",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"iaResume": {
"name": "iaResume",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"aap_items_id": {
"name": "aap_items_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {
"aap_items_dedupKey_unique": {
"name": "aap_items_dedupKey_unique",
"columns": [
"dedupKey"
]
}
},
"checkConstraint": {}
},
"app_settings": {
"name": "app_settings",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"key": {
"name": "key",
"type": "varchar(128)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"value": {
"name": "value",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"onUpdate": true,
"default": "(now())"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"app_settings_id": {
"name": "app_settings_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {
"app_settings_key_unique": {
"name": "app_settings_key_unique",
"columns": [
"key"
]
}
},
"checkConstraint": {}
},
"article_reads": {
"name": "article_reads",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"userId": {
"name": "userId",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"articleType": {
"name": "articleType",
"type": "enum('veille','aap')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"articleId": {
"name": "articleId",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"readAt": {
"name": "readAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(now())"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"article_reads_id": {
"name": "article_reads_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"ideas": {
"name": "ideas",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"userId": {
"name": "userId",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"userName": {
"name": "userName",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"titre": {
"name": "titre",
"type": "varchar(512)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"message": {
"name": "message",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"statut": {
"name": "statut",
"type": "enum('ouvert','en_cours','resolu','ferme')",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'ouvert'"
},
"reponseAdmin": {
"name": "reponseAdmin",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"reponduPar": {
"name": "reponduPar",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"reponduAt": {
"name": "reponduAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(now())"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"onUpdate": true,
"default": "(now())"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"ideas_id": {
"name": "ideas_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"import_logs": {
"name": "import_logs",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"fileType": {
"name": "fileType",
"type": "enum('veille','aap')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"source": {
"name": "source",
"type": "varchar(512)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"status": {
"name": "status",
"type": "enum('success','partial','error')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"totalRows": {
"name": "totalRows",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"newRows": {
"name": "newRows",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"skippedRows": {
"name": "skippedRows",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"errorMessage": {
"name": "errorMessage",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"details": {
"name": "details",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"startedAt": {
"name": "startedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(now())"
},
"completedAt": {
"name": "completedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"import_logs_id": {
"name": "import_logs_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"local_users": {
"name": "local_users",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"name": {
"name": "name",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"username": {
"name": "username",
"type": "varchar(128)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"email": {
"name": "email",
"type": "varchar(320)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"passwordHash": {
"name": "passwordHash",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"role": {
"name": "role",
"type": "enum('admin','user','readonly')",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'user'"
},
"isActive": {
"name": "isActive",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": true
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(now())"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"onUpdate": true,
"default": "(now())"
},
"lastSignedIn": {
"name": "lastSignedIn",
"type": "timestamp",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"local_users_id": {
"name": "local_users_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {
"local_users_username_unique": {
"name": "local_users_username_unique",
"columns": [
"username"
]
}
},
"checkConstraint": {}
},
"rss_feeds": {
"name": "rss_feeds",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"url": {
"name": "url",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"feedType": {
"name": "feedType",
"type": "enum('veille','aap')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"defaultTypeVeille": {
"name": "defaultTypeVeille",
"type": "enum('reglementaire','concurrentielle','technologique','informationnelle')",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"defaultCategorieAap": {
"name": "defaultCategorieAap",
"type": "enum('Handicap','PA','Enfance','Précarité','Sanitaire','Autre')",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"autoRules": {
"name": "autoRules",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"isActive": {
"name": "isActive",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": true
},
"lastFetchedAt": {
"name": "lastFetchedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"lastFetchStatus": {
"name": "lastFetchStatus",
"type": "enum('ok','error','pending')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'pending'"
},
"lastFetchError": {
"name": "lastFetchError",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(now())"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"onUpdate": true,
"default": "(now())"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"rss_feeds_id": {
"name": "rss_feeds_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"rss_settings": {
"name": "rss_settings",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"fetchIntervalMinutes": {
"name": "fetchIntervalMinutes",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": 360
},
"scheduledTime": {
"name": "scheduledTime",
"type": "varchar(5)",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'06:00'"
},
"fetchMode": {
"name": "fetchMode",
"type": "enum('interval','scheduled')",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'scheduled'"
},
"autoFetchEnabled": {
"name": "autoFetchEnabled",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": true
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"onUpdate": true,
"default": "(now())"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"rss_settings_id": {
"name": "rss_settings_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"users": {
"name": "users",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"openId": {
"name": "openId",
"type": "varchar(64)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"email": {
"name": "email",
"type": "varchar(320)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"loginMethod": {
"name": "loginMethod",
"type": "varchar(64)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"role": {
"name": "role",
"type": "enum('user','admin')",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "'user'"
},
"createdAt": {
"name": "createdAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(now())"
},
"updatedAt": {
"name": "updatedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"onUpdate": true,
"default": "(now())"
},
"lastSignedIn": {
"name": "lastSignedIn",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(now())"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"users_id": {
"name": "users_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {
"users_openId_unique": {
"name": "users_openId_unique",
"columns": [
"openId"
]
}
},
"checkConstraint": {}
},
"veille_items": {
"name": "veille_items",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"dedupKey": {
"name": "dedupKey",
"type": "varchar(64)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"titre": {
"name": "titre",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"categorie": {
"name": "categorie",
"type": "varchar(128)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"niveau": {
"name": "niveau",
"type": "varchar(128)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"territoire": {
"name": "territoire",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"territoires": {
"name": "territoires",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"resume": {
"name": "resume",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"source": {
"name": "source",
"type": "varchar(512)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"passage": {
"name": "passage",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"lien": {
"name": "lien",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"typeVeille": {
"name": "typeVeille",
"type": "enum('reglementaire','concurrentielle','technologique','informationnelle')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"datePublication": {
"name": "datePublication",
"type": "timestamp",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"importedAt": {
"name": "importedAt",
"type": "timestamp",
"primaryKey": false,
"notNull": true,
"autoincrement": false,
"default": "(now())"
},
"iaRelevant": {
"name": "iaRelevant",
"type": "boolean",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"iaCategorie": {
"name": "iaCategorie",
"type": "varchar(128)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"iaClassifiedBy": {
"name": "iaClassifiedBy",
"type": "enum('ia','rules')",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"iaReason": {
"name": "iaReason",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"iaResume": {
"name": "iaResume",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"veille_items_id": {
"name": "veille_items_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {
"veille_items_dedupKey_unique": {
"name": "veille_items_dedupKey_unique",
"columns": [
"dedupKey"
]
}
},
"checkConstraint": {}
}
},
"views": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
},
"internal": {
"tables": {},
"indexes": {}
}
}

View File

@@ -64,6 +64,13 @@
"when": 1781593251405,
"tag": "0008_worried_molten_man",
"breakpoints": true
},
{
"idx": 9,
"version": "5",
"when": 1781683138994,
"tag": "0009_fat_rocket_racer",
"breakpoints": true
}
]
}

View File

@@ -73,7 +73,7 @@ export const veilleItems = mysqlTable("veille_items", {
passage: text("passage"),
lien: text("lien"),
// Type de veille (feuille d'origine)
typeVeille: mysqlEnum("typeVeille", ["reglementaire", "concurrentielle", "technologique", "generale"]).notNull(),
typeVeille: mysqlEnum("typeVeille", ["reglementaire", "concurrentielle", "technologique", "informationnelle"]).notNull(),
// Date extraite de la colonne Source (qui contient parfois une date ISO)
datePublication: timestamp("datePublication"),
importedAt: timestamp("importedAt").defaultNow().notNull(),
@@ -165,7 +165,7 @@ export const rssFeeds = mysqlTable("rss_feeds", {
// Type de contenu alimenté par ce flux
feedType: mysqlEnum("feedType", ["veille", "aap"]).notNull(),
// Pour les flux de type veille : type de veille par défaut
defaultTypeVeille: mysqlEnum("defaultTypeVeille", ["reglementaire", "concurrentielle", "technologique", "generale"]),
defaultTypeVeille: mysqlEnum("defaultTypeVeille", ["reglementaire", "concurrentielle", "technologique", "informationnelle"]),
// Pour les flux de type aap : catégorie par défaut
defaultCategorieAap: mysqlEnum("defaultCategorieAap", ["Handicap", "PA", "Enfance", "Précarité", "Sanitaire", "Autre"]),
// Règles d'automatisme JSON : [{keyword, typeVeille|categorieAap}]