Revue : etat des leviers joint a chaque constat, transmis au conseiller et historise

This commit is contained in:
Tallagrand Thierry
2026-10-08 09:56:36 +02:00
parent dea9c88530
commit b7448b72c4
8 changed files with 83 additions and 11 deletions

View File

@@ -35,7 +35,7 @@ const ctx = {
jour: jourParis,
revueDuJour,
dejaRepondu,
constats: aExaminer.map((c) => ({ code: c.code, texte: String(c.texte), contexte: String(c.contexte || '') })),
constats: aExaminer.map((c) => ({ code: c.code, texte: String(c.texte), contexte: String(c.contexte || ''), etat: String(c.etat || '') })),
};
const systemPrompt = [
@@ -56,6 +56,11 @@ const systemPrompt = [
'- Si tu ne vois pas de cause, dis « cause non identifiable avec ces donnees ».',
'- Une piste fait au plus 280 caracteres, en francais, sans jargon inutile.',
'- Le contexte est la raison publiee par le controleur au debut de l episode.',
'- L etat donne les leviers a ce moment-la : consigne reseau, courant de charge max fixe',
' par l ACM, mode de nuit (sans_edf : la voiture ne fait pas fermer EDF ; complete : elle',
' charge sur EDF en HC), budget voiture sans EDF, SOC requis, cible du matin. Cherche la',
' cause d abord dans ces leviers (un courant ACM bas, une consigne egale a la maison, un',
' mode sans_edf avec budget 0 expliquent souvent le constat).',
'',
'Reponds UNIQUEMENT en JSON : {"pistes":[{"code":"<code du constat>","piste":"<texte>"}]}',
].join('\n');
@@ -63,7 +68,7 @@ const systemPrompt = [
const userPrompt = [
`Revue du ${jourParis}. ${aExaminer.length} constat(s) a examiner :`,
'',
...aExaminer.map((c, i) => `${i + 1}. code=${c.code}\n constat : ${c.texte}\n contexte : ${String(c.contexte || '(aucun)').slice(0, 400)}`),
...aExaminer.map((c, i) => `${i + 1}. code=${c.code}\n constat : ${c.texte}\n contexte : ${String(c.contexte || '(aucun)').slice(0, 400)}\n etat : ${String(c.etat || '(inconnu)').slice(0, 600)}`),
'',
'JSON uniquement.',
].join('\n');

View File

@@ -54,7 +54,8 @@ for (const p of obj.pistes) {
const c = parCode.get(code);
if (!piste) { ecarter(code, '', 'piste vide'); continue; }
if (!c) { ecarter(code, piste, 'code inconnu ou constat non a examiner'); continue; }
const permis = new Set(nombres(`${c.texte} ${c.contexte}`));
const permis = new Set(nombres(`${c.texte} ${c.contexte} ${c.etat || ''}`)
.flatMap((n) => [n, String(Math.round(Number(n))), String(Math.round(Number(n) * 10) / 10)]));
const inventes = nombres(piste).filter((n) => !permis.has(n));
if (inventes.length) { ecarter(code, piste, `chiffre absent du constat : ${inventes.join(', ')}`); continue; }
if (pistes.some((x) => x.code === code)) { ecarter(code, piste, 'doublon'); continue; }