// reference.jsx — Écran « Fiche projet » : décrire le projet une seule fois. // 3-5 questions simples (+ docs) → génération LLM → revue/édition → approbation. // // CÂBLAGE (2026-08-07) : la fiche N'EST PLUS une démonstration. Les réponses // se lisent depuis le dossier réel et repartent en base (`saveProject`) avant // la génération — ce sont elles que le moteur relira à chaque formulaire. // `ProjectReference` (l'objet de synthèse de l'ontologie) reste un extension // point : on persiste aujourd'hui ses CHAMPS, pas encore la fiche rédigée. const { useState: useStateRf, useEffect: useEffectRf, useRef: useRefRf } = React; function ReferenceScreen({ onNext, onBack, stage, setStage, project }) { const { t } = useLang(); // stage: "intro" | "generating" | "review" const [answers, setAnswers] = useStateRf(() => { const o = {}; FICHE_QUESTIONS.forEach((q) => (o[q.id] = "")); return o; }); // Le dossier réel remplit ce qu'il sait ; le reste demeure vide. (Les // réponses d'exemple ont été supprimées de data.jsx : une fiction plausible // se relit distraitement et finissait persistée comme objectifs du projet.) useEffectRf(() => { if (!project) return; setAnswers({ quoi: project.description || "", pourquoi: project.problemStatement || "", ges: project.objectives || "", etapes: project.methodology || "", budget: project.expectedResults || "", }); }, [project && project.id]); const [saveErr, setSaveErr] = useStateRf(null); const generate = async () => { // Les réponses partent en base AVANT la génération : ce sont elles que le // moteur relira à chaque formulaire (objectifs, méthodologie, résultats). if (project && project.id) { try { await G4M.saveProject(project.id, { description: answers.quoi || null, problemStatement: answers.pourquoi || null, objectives: answers.ges || null, methodology: answers.etapes || null, expectedResults: answers.budget || null, }); } catch (e) { setSaveErr(e.message); return; } } setStage("generating"); }; if (stage === "generating") return setStage("review")} />; if (stage === "review") return setStage("intro")} project={project} />; return (

{t("Pourquoi cette étape ?")}{t(" Plutôt que de vous faire affronter un {formulaire} de 14 pages, on part de vos réponses en langage courant. Pas de jargon, pas de bonne ou mauvaise réponse.")}

{FICHE_QUESTIONS.map((q, i) => (
{i + 1}

{t(q.hint)}