From c47c76215e191f2eb468edfb020e0e0320a01241 Mon Sep 17 00:00:00 2001 From: Manus Date: Fri, 12 Jun 2026 05:18:49 -0400 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Classification=20IA=20automatique?= =?UTF-8?q?=20=C3=A0=20l'insertion=20RSS,=20suppression=20badge=20IA=20et?= =?UTF-8?q?=20bouton=20Classer=20avec=20l'IA=20dans=20VeilleDashboard,=20s?= =?UTF-8?q?uppression=20section=20Analyse=20IA=20dans=20la=20bo=C3=AEte=20?= =?UTF-8?q?de=20dialogue=20d=C3=A9tail,=20mise=20=C3=A0=20jour=20AAPDashbo?= =?UTF-8?q?ard=20avec=20champs=20IA=20et=20affichage=20cat=C3=A9gorie=20IA?= =?UTF-8?q?=20en=20priorit=C3=A9=20(vue=20liste=20et=20vignettes)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .manus/db/db-query-1780479772854.json | 26 +++++++ .manus/db/db-query-1780479848637.json | 19 +++++ .manus/db/db-query-1780479869310.json | 9 +++ .manus/db/db-query-1781254479053.json | 40 +++++++++++ .manus/db/db-query-1781254483164.json | 17 +++++ .manus/db/db-query-1781254543292.json | 9 +++ .manus/db/db-query-error-1781254472873.json | 8 +++ client/public/__manus__/version.json | 4 +- client/src/pages/AAPDashboard.tsx | 16 +++-- client/src/pages/VeilleDashboard.tsx | 79 +-------------------- gen_hash.cjs | 2 + todo.md | 15 ++++ 12 files changed, 158 insertions(+), 86 deletions(-) create mode 100644 .manus/db/db-query-1780479772854.json create mode 100644 .manus/db/db-query-1780479848637.json create mode 100644 .manus/db/db-query-1780479869310.json create mode 100644 .manus/db/db-query-1781254479053.json create mode 100644 .manus/db/db-query-1781254483164.json create mode 100644 .manus/db/db-query-1781254543292.json create mode 100644 .manus/db/db-query-error-1781254472873.json create mode 100644 gen_hash.cjs diff --git a/.manus/db/db-query-1780479772854.json b/.manus/db/db-query-1780479772854.json new file mode 100644 index 0000000..d7af242 --- /dev/null +++ b/.manus/db/db-query-1780479772854.json @@ -0,0 +1,26 @@ +{ + "query": "SELECT id, name, username, email, role, isActive FROM local_users LIMIT 10;", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SELECT id, name, username, email, role, isActive FROM local_users LIMIT 10;", + "rows": [ + { + "id": "30001", + "name": "Lea Peyriere", + "username": "l.peyriere@itinova.org", + "email": "l.peyriere@itinova.org", + "role": "admin", + "isActive": "1" + }, + { + "id": "60001", + "name": "Admin Itinova", + "username": "adminItinova", + "email": "o.pareige@itinova.org", + "role": "admin", + "isActive": "1" + } + ], + "messages": [], + "stdout": "id\tname\tusername\temail\trole\tisActive\n30001\tLea Peyriere\tl.peyriere@itinova.org\tl.peyriere@itinova.org\tadmin\t1\n60001\tAdmin Itinova\tadminItinova\to.pareige@itinova.org\tadmin\t1\n", + "stderr": "", + "execution_time_ms": 782 +} \ No newline at end of file diff --git a/.manus/db/db-query-1780479848637.json b/.manus/db/db-query-1780479848637.json new file mode 100644 index 0000000..30f42b2 --- /dev/null +++ b/.manus/db/db-query-1780479848637.json @@ -0,0 +1,19 @@ +{ + "query": "SELECT id, name, username, email, role, isActive, LEFT(passwordHash, 20) as hashPreview FROM local_users WHERE username = 'adminItinova' OR username = 'admin';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SELECT id, name, username, email, role, isActive, LEFT(passwordHash, 20) as hashPreview FROM local_users WHERE username = 'adminItinova' OR username = 'admin';", + "rows": [ + { + "id": "60001", + "name": "Admin Itinova", + "username": "adminItinova", + "email": "o.pareige@itinova.org", + "role": "admin", + "isActive": "1", + "hashPreview": "$2b$12$BFswq4nzwOXHx" + } + ], + "messages": [], + "stdout": "id\tname\tusername\temail\trole\tisActive\thashPreview\n60001\tAdmin Itinova\tadminItinova\to.pareige@itinova.org\tadmin\t1\t$2b$12$BFswq4nzwOXHx\n", + "stderr": "", + "execution_time_ms": 587 +} \ No newline at end of file diff --git a/.manus/db/db-query-1780479869310.json b/.manus/db/db-query-1780479869310.json new file mode 100644 index 0000000..2771d71 --- /dev/null +++ b/.manus/db/db-query-1780479869310.json @@ -0,0 +1,9 @@ +{ + "query": "UPDATE local_users SET passwordHash = '$2b$12$Huuk0HibUISWtZhv92SbOuEPghB91OI84pKCCQIPhwOEENFGlYM.O' WHERE username = 'adminItinova';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute UPDATE local_users SET passwordHash = '$2b$12$Huuk0HibUISWtZhv92SbOuEPghB91OI84pKCCQIPhwOEENFGlYM.O' WHERE username = 'adminItinova';", + "rows": [], + "messages": [], + "stdout": "", + "stderr": "", + "execution_time_ms": 572 +} \ No newline at end of file diff --git a/.manus/db/db-query-1781254479053.json b/.manus/db/db-query-1781254479053.json new file mode 100644 index 0000000..d193347 --- /dev/null +++ b/.manus/db/db-query-1781254479053.json @@ -0,0 +1,40 @@ +{ + "query": "SHOW TABLES;", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SHOW TABLES;", + "rows": [ + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "__drizzle_migrations" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "aap_items" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "app_settings" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "ideas" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "import_logs" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "local_users" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "rss_feeds" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "rss_settings" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "users" + }, + { + "Tables_in_VepzDyqR8YkJNcqpZ729Bw": "veille_items" + } + ], + "messages": [], + "stdout": "Tables_in_VepzDyqR8YkJNcqpZ729Bw\n__drizzle_migrations\naap_items\napp_settings\nideas\nimport_logs\nlocal_users\nrss_feeds\nrss_settings\nusers\nveille_items\n", + "stderr": "", + "execution_time_ms": 657 +} \ No newline at end of file diff --git a/.manus/db/db-query-1781254483164.json b/.manus/db/db-query-1781254483164.json new file mode 100644 index 0000000..a7c019b --- /dev/null +++ b/.manus/db/db-query-1781254483164.json @@ -0,0 +1,17 @@ +{ + "query": "SELECT id, username, email, role, isActive FROM local_users WHERE username = 'adminItinova';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SELECT id, username, email, role, isActive FROM local_users WHERE username = 'adminItinova';", + "rows": [ + { + "id": "60001", + "username": "adminItinova", + "email": "o.pareige@itinova.org", + "role": "admin", + "isActive": "1" + } + ], + "messages": [], + "stdout": "id\tusername\temail\trole\tisActive\n60001\tadminItinova\to.pareige@itinova.org\tadmin\t1\n", + "stderr": "", + "execution_time_ms": 583 +} \ No newline at end of file diff --git a/.manus/db/db-query-1781254543292.json b/.manus/db/db-query-1781254543292.json new file mode 100644 index 0000000..7cab40e --- /dev/null +++ b/.manus/db/db-query-1781254543292.json @@ -0,0 +1,9 @@ +{ + "query": "UPDATE local_users SET passwordHash = '$2b$10$W14yZYJ7KMTgDqb683LiY.bHpCbFouYaBTp09ASM41uYVROvVpirS' WHERE username = 'adminItinova';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute UPDATE local_users SET passwordHash = '$2b$10$W14yZYJ7KMTgDqb683LiY.bHpCbFouYaBTp09ASM41uYVROvVpirS' WHERE username = 'adminItinova';", + "rows": [], + "messages": [], + "stdout": "", + "stderr": "", + "execution_time_ms": 583 +} \ No newline at end of file diff --git a/.manus/db/db-query-error-1781254472873.json b/.manus/db/db-query-error-1781254472873.json new file mode 100644 index 0000000..2f20a7b --- /dev/null +++ b/.manus/db/db-query-error-1781254472873.json @@ -0,0 +1,8 @@ +{ + "query": "SELECT id, username, email, role, isActive FROM user WHERE username = 'adminItinova';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.63b125a8f9ca --database VepzDyqR8YkJNcqpZ729Bw --execute SELECT id, username, email, role, isActive FROM user WHERE username = 'adminItinova';", + "returncode": 1, + "logs": [ + "ERROR 1146 (42S02) at line 1: Table 'vepzdyqr8ykjncqpz729bw.user' doesn't exist" + ] +} \ No newline at end of file diff --git a/client/public/__manus__/version.json b/client/public/__manus__/version.json index e35c21e..73f0f37 100644 --- a/client/public/__manus__/version.json +++ b/client/public/__manus__/version.json @@ -1,4 +1,4 @@ { - "version": "dab72037", - "timestamp": 1780479118639 + "version": "69e54e0a", + "timestamp": 1781255928989 } \ No newline at end of file diff --git a/client/src/pages/AAPDashboard.tsx b/client/src/pages/AAPDashboard.tsx index e348c00..79cf569 100644 --- a/client/src/pages/AAPDashboard.tsx +++ b/client/src/pages/AAPDashboard.tsx @@ -49,6 +49,10 @@ interface AAPItem { datePublication: Date | null; lien: string | null; importedAt: Date; + iaRelevant: boolean | null; + iaCategorie: string | null; + iaClassifiedBy: "ia" | "rules" | null; + iaReason: string | null; } const CAT_COLORS: Record = { @@ -294,14 +298,14 @@ function AAPListView({ items }: { items: AAPItem[] }) { {items.map((item, idx) => ( - + {idx + 1}

{item.titre}

- - {item.categorie} + + {item.iaCategorie || item.categorie} {item.region || "—"} @@ -330,11 +334,11 @@ function AAPGridView({ items }: { items: AAPItem[] }) { return (
{items.map((item) => ( - + )} - {/* Analyse IA */} - {item.iaClassifiedBy && ( -
-
- -

Analyse par l'IA

-
-
-
- - - {item.iaClassifiedBy === "ia" ? "Classé par l'IA" : "Classé par règles"} - - {item.iaRelevant === false && ( - Hors périmètre médico-social - )} - {item.iaRelevant === true && item.iaCategorie && ( - {item.iaCategorie} - )} -
- {item.iaReason && ( -

"{item.iaReason}"

- )} -
-
- )} {/* Lien externe */} {item.lien && ( @@ -278,15 +237,6 @@ export default function VeilleDashboard() { const { user } = useLocalAuth(); const isAdmin = user?.role === "admin"; const utils = trpc.useUtils(); - const reclassifyMutation = trpc.veille.reclassifyWithAI.useMutation({ - onSuccess: (data) => { - toast.success(`Classification IA terminée — ${data.processed} article(s) traité(s)${data.errors > 0 ? `, ${data.errors} erreur(s)` : ""}`); - utils.veille.list.invalidate(); - }, - onError: (err) => { - toast.error(`Erreur lors de la classification IA : ${err.message}`); - }, - }); const purgeMutation = trpc.veille.purge.useMutation({ onSuccess: (data) => { toast.success(`Purge effectuée — ${data.deleted} entrée(s) supprimée(s)`); @@ -369,17 +319,6 @@ export default function VeilleDashboard() { {isAdmin && ( <> -