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

@@ -36,7 +36,7 @@ interface RssItem {
interface AutoRule {
keyword: string;
typeVeille?: "reglementaire" | "concurrentielle" | "technologique" | "generale";
typeVeille?: "reglementaire" | "concurrentielle" | "technologique" | "informationnelle";
categorieAap?: "Handicap" | "PA" | "Enfance" | "Précarité" | "Sanitaire" | "Autre";
}
@@ -360,16 +360,14 @@ async function processFeed(feed: RssFeed): Promise<FetchResult> {
() => {
const matchedRule = applyAutoRules(title, description, rules);
return {
categorie: detectVeilleCategorie(fullText),
typeVeille: (matchedRule?.typeVeille ?? feed.defaultTypeVeille ?? "generale") as
"reglementaire" | "concurrentielle" | "technologique" | "generale",
typeVeille: (matchedRule?.typeVeille ?? feed.defaultTypeVeille ?? "informationnelle") as
"reglementaire" | "concurrentielle" | "technologique" | "informationnelle",
};
}
);
const categorie = aiResult.categorie;
const typeVeille = (aiResult.typeVeille ?? feed.defaultTypeVeille ?? "generale") as
"reglementaire" | "concurrentielle" | "technologique" | "generale";
const typeVeille = (aiResult.typeVeille ?? feed.defaultTypeVeille ?? "informationnelle") as
"reglementaire" | "concurrentielle" | "technologique" | "informationnelle";
// Générer le résumé IA uniquement pour les articles pertinents
const iaResume = aiResult.relevant
@@ -381,7 +379,6 @@ async function processFeed(feed: RssFeed): Promise<FetchResult> {
await db.insert(veilleItems).values({
dedupKey,
titre: title,
categorie,
niveau,
territoire,
territoires: JSON.stringify(territoire !== "France" && territoire !== "Auvergne-Rhône-Alpes" ? [territoire] : []),
@@ -391,7 +388,6 @@ async function processFeed(feed: RssFeed): Promise<FetchResult> {
typeVeille,
datePublication: pubDate,
iaRelevant: aiResult.relevant,
iaCategorie: aiResult.categorie,
iaClassifiedBy: aiResult.classifiedBy,
iaReason: aiResult.reason,
iaResume: iaResume || null,
@@ -427,17 +423,12 @@ async function processFeed(feed: RssFeed): Promise<FetchResult> {
const aiResult = await classifyArticle(
title,
description,
() => {
const matchedRule = applyAutoRules(title, description, rules);
return {
categorie: (matchedRule?.categorieAap ?? feed.defaultCategorieAap ?? "Autre") as
"Handicap" | "PA" | "Enfance" | "Précarité" | "Sanitaire" | "Autre",
typeVeille: "generale" as const,
};
}
() => ({
typeVeille: "informationnelle" as const,
})
);
const categorie = aiResult.categorie as
const categorie = (feed.defaultCategorieAap ?? "Autre") as
"Handicap" | "PA" | "Enfance" | "Précarité" | "Sanitaire" | "Autre";
// Générer le résumé IA uniquement pour les articles pertinents
@@ -456,7 +447,6 @@ async function processFeed(feed: RssFeed): Promise<FetchResult> {
lien: link || null,
datePublication: pubDate,
iaRelevant: aiResult.relevant,
iaCategorie: aiResult.categorie,
iaClassifiedBy: aiResult.classifiedBy,
iaReason: aiResult.reason,
iaResume: iaResume || null,