feat: fusion multi-département RSS, enrichissement catégorie/niveau/territoire

- Ajout colonnes territoires (JSON) dans veille_items et departements (JSON) dans aap_items
- Logique de fusion : articles similaires (même sujet, départements différents) fusionnés en un seul
- Extraction automatique : catégorie (Handicap/PA/Enfance/Précarité/Sanitaire/Autre), niveau et territoire
- Endpoint POST /api/scheduled/rss-migrate pour migration des articles existants
- Correction patterns détection : Loire, Rhône (sans Lyon seul), Auvergne-Rhône-Alpes protégé
This commit is contained in:
Manus Deploy
2026-04-28 19:19:06 -04:00
parent ddf1533d04
commit 76a71ebc2c
6 changed files with 1326 additions and 29 deletions

View File

@@ -60,12 +60,14 @@ export type InsertAppSetting = typeof appSettings.$inferInsert;
export const veilleItems = mysqlTable("veille_items", {
id: int("id").autoincrement().primaryKey(),
// Clé de déduplication : hash du titre + lien
// Clé de déduplication : hash du titre normalisé (sans nom de département)
dedupKey: varchar("dedupKey", { length: 64 }).notNull().unique(),
titre: text("titre").notNull(),
categorie: varchar("categorie", { length: 128 }),
niveau: varchar("niveau", { length: 128 }),
territoire: varchar("territoire", { length: 255 }),
// Liste JSON des territoires (multi-département) ex: ["Isère","Savoie"]
territoires: json("territoires").$type<string[]>(),
resume: text("resume"),
source: varchar("source", { length: 512 }),
passage: text("passage"),
@@ -89,6 +91,8 @@ export const aapItems = mysqlTable("aap_items", {
categorie: mysqlEnum("categorie", ["Handicap", "PA", "Enfance", "Précarité", "Sanitaire", "Autre"]).notNull(),
region: varchar("region", { length: 255 }),
departement: varchar("departement", { length: 255 }),
// Liste JSON des départements (multi-département) ex: ["Isère (38)","Savoie (73)"]
departements: json("departements").$type<string[]>(),
dateCloture: timestamp("dateCloture"),
datePublication: timestamp("datePublication"),
lien: text("lien"),