Voici LE PROMPT COMPLET, OPTIMISÉ, CLÉ-EN-MAIN POUR AGENT-3 DE REPLIT,

Voici LE PROMPT COMPLET, OPTIMISÉ, CLÉ-EN-MAIN POUR AGENT-3 DE REPLIT,

pour que Agent-3 génère toute la WebApp “Typage Infirmier(ère)”, mobile-first, avec :

  • 🟦 Next.js 14 (App Router)
  • 🟩 TypeScript
  • 🟧 Tailwind minimaliste
  • 🟪 Zod pour la validation
  • 🟥 Wizard multi-écrans (auto-déclaration infirmier)
  • 🟫 Chargement dynamique de la nomenclature JSON
  • 🟨 API route pour générer le profil typé
  • 🟩 Intégration du moteur buildNurseProfile()
  • 🟣 Préparation à l’intégration n8n → Odoo
  • 🇫🇷 Tous les textes affichés dans la WebApp doivent rester en français
  • 🔒 Aucun secret exposé côté client

🧠 PROMPT AGENT-3 — À COPIER-COLLER TEL QUEL DANS REPLIT

You are Agent-3. Build a complete production-ready WebApp for “Typage Infirmier(ère) – Aidants & Seniors”. The entire WebApp must be fully implemented in **Next.js 14 (App Router)** with **TypeScript**, **React**, **Zod**, **TailwindCSS**, and a **mobile-first wizard UX**. ⚠️ All UI labels, placeholders, buttons and user-facing text MUST be in **French**. ⚠️ No call to external APIs. ⚠️ No Odoo or n8n calls in the frontend. We just prepare the backend endpoint that *could* forward to n8n later. ------------------------------------------------------------ 🎯 OBJECTIF ------------------------------------------------------------ Construire une WebApp permettant aux infirmiers et infirmières de : 1. Se présenter (nom, prénom, mode d'exercice) 2. Répondre à un **questionnaire structuré en 7 sections** 3. Générer automatiquement un **profil typé** basé sur une nomenclature de compétences infirmières 4. Afficher le profil généré en JSON (pour test) 5. Préparer (sans l’implémenter) l’appel à un webhook n8n Le wizard doit être fluide, mobile-first, avec navigation : ← Précédent / Continuer → ------------------------------------------------------------ 📁 STRUCTURE DU PROJET (IMPOSÉE) ------------------------------------------------------------ /app /infirmiers/onboarding/page.tsx → Wizard /api/infirmiers/profil/route.ts → API POST pour générer le profil /data nomenclatureInfirmiers.json → la nomenclature fournie ci-dessous /hooks useNurseQuestionnaire.ts /logic buildNurseProfile.ts /types nurseNomenclature.ts nurseAnswers.ts components/ NurseOnboardingWizard.tsx QuestionBlock.tsx ------------------------------------------------------------ 📌 CHARGER CETTE NOMENCLATURE JSON (COLLER EN FICHIER) ------------------------------------------------------------ ===> Create file: /data/nomenclatureInfirmiers.json (put EXACTLY the following JSON content:) [COLLER ICI LE JSON DE LA NOMENCLATURE FOURNIE DANS LE MESSAGE PRÉCÉDENT] ⚠️ NE PAS MODIFIER LE JSON. ------------------------------------------------------------ 📌 SPÉCIFICATIONS DU WIZARD (UX) ------------------------------------------------------------ 0. L’utilisateur infirmier doit d’abord entrer : - Nom - Prénom

- Adresse Rue

​ - Ville - Code Postal - Mode d'exercice (multi-boutons : “libéral”, “domicile”, “HAD”, “hôpital”, “EHPAD”) 1. Chaque section du questionnaire : - Affiche un titre (en français) - Affiche toutes les questions & options - Les options multi-select = toggles visuels - Les options single-select = choix exclusif 2. UI mobile-first : - Container max-w-xl, margin auto - Composants arrondis, padding 3 ou 4 - Typo lisible 3. Navigation : - “← Précédent” - “Continuer →” ou “Valider” 4. Dernière étape : - POST /api/infirmiers/profil - Body : { nom, prenom, mode_exercice, answers } 5. Réponse affichée en JSON dans une page de confirmation. ------------------------------------------------------------ 📌 API ROUTE – CRITÈRES ------------------------------------------------------------ POST /api/infirmiers/profil : - Parse & validate la forme des answers avec Zod. - Charge nomenclatureInfirmiers.json - Appelle buildNurseProfile() - Retourne : { ok: true, profile } Pas de DB, pas d’appel externe. ------------------------------------------------------------ 📌 LOGIQUE : buildNurseProfile() ------------------------------------------------------------ Les exigences : - collecter tous les competenceCodes liés aux options sélectionnées - grouper les compétences par famille - générer : • score_global_expertise (0–100) • expertises_principales (max 4 strings) • match_recommande_seniors : autonomie troubles_cognitifs plaies diabete cardio_respiratoire isolement_psychosocial - générer un id_infirmier unique (timestamp) => EXACTLY follow the logic from the code I provided: collectCompetenceCodesFromAnswers() groupCompetencesByFamily() computeGlobalScore() computeSeniorMatchScores() buildExpertisesPrincipales() ------------------------------------------------------------ 📌 TYPESCRIPT & ZOD (OBLIGATOIRES) ------------------------------------------------------------ Créer EXACTEMENT les interfaces : - NurseNomenclature - Family - Competence - QuestionnaireSection - Question - QuestionOption - CompetenceCode Créer : - nurseAnswersSchema (Zod) - type NurseAnswers ------------------------------------------------------------ 📌 RÉSULTAT ATTENDU ------------------------------------------------------------ Agent-3 MUST output: ✔️ All Next.js pages & components ✔️ All TypeScript types ✔️ All Zod schemas ✔️ The entire wizard UI ✔️ The API route generating the nurse profile ✔️ Tailwind config and minimal styling ✔️ Successfully compilable project ------------------------------------------------------------ 🔚 FIN DU PROMPT ------------------------------------------------------------

version complète du prompt Agent-3, enrichie avec les exigences de screenshots HD des principaux écrans.

You are Agent-3.

Build a complete production-ready WebApp for “Typage Infirmier(ère) – Aidants & Seniors”.

The entire WebApp must be fully implemented in:

  • Next.js 14 (App Router)
  • TypeScript
  • React
  • Zod
  • TailwindCSS (minimal, modern, mobile-first)
  • File-based routing

⚠️ All UI labels, placeholders, buttons and user-facing text MUST be in FRENCH.

⚠️ Do NOT call any external API.

⚠️ Do NOT call Odoo or n8n directly from the frontend.

We only PREPARE a backend endpoint that could be wired later to a webhook (e.g. n8n → Odoo).

The goal is to:

  • Let nurses (infirmiers / infirmières) declare their compétences through a wizard.
  • Map their answers to a structured competency profile.
  • Return and display this structured profile in JSON (for now).
  • Provide static HD screenshots (mockups) of the main screens as PNG files in /public/screenshots.

🎯 OBJECTIF FONCTIONNEL

Build a WebApp that allows a nurse to:

  1. Enter identity information:
    • Nom (last name)
    • Prénom (first name)
    • Adresse (address)
    • Ville (town)
    • Code postal (postal code)
    • Mode d'exercice (libéral, domicile, HAD, hôpital, EHPAD)
  2. Answer a questionnaire structured in 7 sections (multi-step "wizard"):
    • S1: Soins techniques et surveillance
    • S2: Personnes âgées et gérontologie
    • S3: Plaies, escarres et stomies
    • S4: Maladies chroniques
    • S5: Pratique avancée (IPA)
    • S6: Coordination & parcours de soins
    • S7: Télésanté et outils numériques
  3. Submit all answers to a backend API:
    • POST /api/infirmiers/profil
    • Body:

      { nom: string; prenom: string; adresse: string; ville: string; code_postal: string; mode_exercice: string[]; answers: Record<string, string[]>; // questionId → optionIds }

  4. Backend:
    • Validate the payload with Zod.
    • Load a nomenclature JSON file.
    • Map answers → competency codes.
    • Build a structured nurse profile.
    • Return { ok: true, profile }.
  5. Frontend:
    • After successful submit, show a “Profil généré” screen.
    • Display the profile JSON in a pretty, readable way (code block / panel).
    • This serves as a test page and debug view.
  6. Provide three static HD PNG screenshots of the main UI screens (see the “📸 SCREENSHOTS” section).
    The content can be simple UI mockups that represent the described screens.
    The real browser captures can be done manually later.

🔧 TECH STACK & QUALITY BAR

REQUIRED:

  • Next.js 14 with App Router (app/ directory)
  • TypeScript everywhere (no any unless absolutely necessary)
  • TailwindCSS configured and used consistently
  • Zod for schema validation (request body)
  • Mobile-first responsive layout (looks good on 360–400px width)
  • Clear, modern, minimal UI (rounded cards, subtle shadows, spacing)

Code must:

  • Compile without TypeScript errors.
  • Be structured and reusable (components, hooks, logic files).
  • Separate concerns:
    • UI (components)
    • State management (hooks)
    • Business logic (buildNurseProfile)
    • Data (nomenclature JSON)
    • API route

Provide standard scripts in package.json such as:

  • "dev"
  • "build"
  • "lint"

The code must be written so that npm run build and npm run lint can pass in a standard Next.js environment (even si ces commandes ne sont pas exécutées dans ce contexte).

📁 ARCHITECTURE DE DOSSIERS (IMPOSÉE)

Create exactly these files and folders:

/app /infirmiers/onboarding/page.tsx → Main wizard page (client component) /app/api/infirmiers/profil/route.ts → POST endpoint generating the profile /components NurseOnboardingWizard.tsx → Main wizard component QuestionBlock.tsx → Component to render one question + options /hooks useNurseQuestionnaire.ts → Custom hook to handle wizard state /logic buildNurseProfile.ts → Business logic: map answers → profile /types nurseNomenclature.ts → Types for nomenclature & questionnaire nurseAnswers.ts → Zod schema + type for nurse answers /data nomenclatureInfirmiers.json → Competency nomenclature + questionnaire /public /screenshots → Folder for PNG screenshots

Also include:

  • tailwind.config.(js/ts)
  • postcss.config.(js/ts)
  • globals.css (or equivalent) with Tailwind directives.

📌 NOMENCLATURE JSON À UTILISER

Create file: /data/nomenclatureInfirmiers.json with EXACTLY this JSON content:

{ "version": "1.0", "context": "Nomenclature de compétences infirmières pour appariement automatique Seniors ↔ Infirmiers", "families": [ { "id": "A", "code": "GEN", "label_fr": "Compétences générales (IDE)", "description_fr": "Compétences générales d'infirmier(ère) diplômé(e) d'État : soins courants, surveillance clinique, éducation thérapeutique.", "competences": [ { "id": "A1", "code": "GEN_SOINS_TECHNIQUES", "label_fr": "Soins techniques courants", "description_fr": "Injections, perfusions, pansements simples, prélèvements, pose de cathéter.", "keywords_fr": [ "injection", "piqûre", "perfusion", "pansement", "prise de sang", "cathéter" ] }, { "id": "A2", "code": "GEN_SURVEILLANCE_CLINIQUE", "label_fr": "Surveillance clinique", "description_fr": "Surveillance des constantes, de la douleur, de l'état cognitif et du risque de chute.", "keywords_fr": [ "tension", "pression artérielle", "température", "pouls", "douleur", "chute", "confusion" ] }, { "id": "A3", "code": "GEN_EDUCATION_THERAPEUTIQUE", "label_fr": "Éducation thérapeutique", "description_fr": "Explication des traitements, observance médicamenteuse, conseils de vie quotidienne pour les maladies chroniques.", "keywords_fr": [ "médicament", "comprimé", "prescription", "prise de traitement", "autogestion", "éducation" ] } ] }, { "id": "B", "code": "GER", "label_fr": "Prise en charge gérontologique", "description_fr": "Compétences spécifiques pour la prise en charge des personnes âgées et des troubles liés au vieillissement.", "competences": [ { "id": "B1", "code": "GER_AUTONOMIE_DEPENDANCE", "label_fr": "Autonomie et dépendance", "description_fr": "Évaluation de l'autonomie (ADL/IADL), repérage des difficultés de marche, prévention des chutes.", "keywords_fr": [ "autonomie", "dépendance", "aide pour se lever", "aide à la toilette", "chute", "marche", "déambulateur" ] }, { "id": "B2", "code": "GER_TROUBLES_COGNITIFS", "label_fr": "Troubles cognitifs", "description_fr": "Repérage de la désorientation, des troubles de la mémoire, des pathologies de type Alzheimer ou apparentées.", "keywords_fr": [ "mémoire", "désorientation", "Alzheimer", "perdu", "oublis", "démence" ] }, { "id": "B3", "code": "GER_SOUTIEN_PSYCHOSOCIAL", "label_fr": "Soutien psycho-social", "description_fr": "Écoute, repérage de l'isolement, de l'anxiété, soutien des familles et aidants.", "keywords_fr": [ "solitude", "isolement", "anxiété", "angoisse", "dépression", "famille", "aidant" ] } ] }, { "id": "C", "code": "WOUND", "label_fr": "Plaies, cicatrisation et soins complexes", "description_fr": "Compétences pour la prise en charge des plaies aiguës et chroniques, escarres, stomies.", "competences": [ { "id": "C1", "code": "WOUND_ESCARRES", "label_fr": "Escarres", "description_fr": "Évaluation et prise en charge des escarres, prévention, choix de pansements adaptés.", "keywords_fr": [ "escarre", "plaie de lit", "rougeur", "ulcération fessier", "positionnement" ] }, { "id": "C2", "code": "WOUND_PLAIES_CHRONIQUES", "label_fr": "Plaies chroniques", "description_fr": "Prise en charge des ulcères veineux, artériels, plaies chroniques complexes.", "keywords_fr": [ "ulcère", "jambe", "plaie qui ne guérit pas", "pansement complexe" ] }, { "id": "C3", "code": "WOUND_STOMATHERAPIE", "label_fr": "Stomathérapie", "description_fr": "Prise en charge des stomies digestives ou urinaires, choix du matériel, éducation du patient.", "keywords_fr": [ "stomie", "poche", "colostomie", "iléostomie", "urostomie" ] } ] }, { "id": "D", "code": "CHRONIC", "label_fr": "Pathologies chroniques", "description_fr": "Compétences pour le suivi des maladies chroniques fréquentes chez les seniors.", "competences": [ { "id": "D1", "code": "CHRONIC_DIABETE", "label_fr": "Diabète", "description_fr": "Suivi des patients diabétiques : glycémies, injections d'insuline, éducation, capteurs.", "keywords_fr": [ "diabète", "glycémie", "insuline", "hypoglycémie", "capteur de glucose" ] }, { "id": "D2", "code": "CHRONIC_INSUFFISANCE_CARDIO_RESP", "label_fr": "Insuffisance cardiaque / respiratoire", "description_fr": "Suivi des patients avec insuffisance cardiaque ou respiratoire, O2, repérage des décompensations.", "keywords_fr": [ "essoufflement", "insuffisance cardiaque", "insuffisance respiratoire", "oxygène", "oedèmes" ] }, { "id": "D3", "code": "CHRONIC_ONCOLOGIE", "label_fr": "Oncologie", "description_fr": "Suivi des patients sous chimiothérapie ou traitements oncologiques, gestion des effets secondaires.", "keywords_fr": [ "cancer", "chimiothérapie", "nausées", "fatigue importante", "soins de support" ] } ] }, { "id": "E", "code": "IPA", "label_fr": "Infirmière en pratique avancée (IPA)", "description_fr": "Compétences d'infirmier(ère) en pratique avancée, avec champ d'autonomie élargi et prescriptions.", "competences": [ { "id": "E1", "code": "IPA_PATHOLOGIES_CHRONIQUES", "label_fr": "IPA – Pathologies chroniques stabilisées", "description_fr": "Prise en charge avancée des maladies chroniques stabilisées chez l'adulte.", "keywords_fr": [ "consultation de suivi", "ajustement traitement", "pathologie chronique stabilisée" ] }, { "id": "E2", "code": "IPA_PSYCHIATRIE", "label_fr": "IPA – Psychiatrie / santé mentale", "description_fr": "Suivi et prise en charge avancée en psychiatrie et santé mentale.", "keywords_fr": [ "trouble psychiatrique", "suivi psychologique", "psychose", "dépression sévère" ] }, { "id": "E3", "code": "IPA_ONCOLOGIE", "label_fr": "IPA – Oncologie", "description_fr": "Consultations avancées en oncologie et hémato-oncologie.", "keywords_fr": [ "oncologie avancée", "coordination soins cancer" ] }, { "id": "E4", "code": "IPA_INSUFFISANCE_RENALE", "label_fr": "IPA – Insuffisance rénale", "description_fr": "Suivi avancé des patients en insuffisance rénale.", "keywords_fr": [ "dialyse", "insuffisance rénale", "néphrologie" ] }, { "id": "E5", "code": "IPA_URGENCES", "label_fr": "IPA – Urgences", "description_fr": "Prise en charge avancée dans un contexte d'urgences.", "keywords_fr": [ "urgence", "triage", "détresse respiratoire", "douleur aiguë" ] } ] }, { "id": "F", "code": "COORD", "label_fr": "Coordination & parcours de soins", "description_fr": "Compétences liées à la coordination des parcours de soins, en particulier pour les personnes âgées.", "competences": [ { "id": "F1", "code": "COORD_SORTIE_HOPITAL", "label_fr": "Coordination de sortie d'hôpital", "description_fr": "Organisation du retour à domicile ou en structure, coordination avec les différents intervenants.", "keywords_fr": [ "sortie d'hôpital", "retour à domicile", "plan de soins", "orientation" ] }, { "id": "F2", "code": "COORD_HAD", "label_fr": "Coordination en HAD", "description_fr": "Coordination des soins en Hospitalisation à Domicile.", "keywords_fr": [ "HAD", "hospitalisation à domicile", "intervenants multiples" ] }, { "id": "F3", "code": "COORD_CASE_MANAGER", "label_fr": "Case management", "description_fr": "Gestion de cas complexes, suivi global du parcours de soins.", "keywords_fr": [ "parcours complexe", "cas complexe", "gestion de cas", "multi-pathologies" ] }, { "id": "F4", "code": "COORD_AIDANTS", "label_fr": "Coordination avec les aidants", "description_fr": "Communication et coordination avec les aidants familiaux.", "keywords_fr": [ "aidant", "famille", "proche aidant", "coordination familiale" ] } ] }, { "id": "G", "code": "TELE", "label_fr": "Télésanté & outils numériques", "description_fr": "Compétences liées à l'utilisation des outils numériques, télésoins et télésurveillance.", "competences": [ { "id": "G1", "code": "TELE_TELESOINS", "label_fr": "Télésoins", "description_fr": "Réalisation de télésoins avec les patients à domicile.", "keywords_fr": [ "télésoin", "visio", "consultation vidéo" ] }, { "id": "G2", "code": "TELE_TELESURVEILLANCE", "label_fr": "Télésurveillance médicale", "description_fr": "Suivi à distance des constantes et paramètres de santé.", "keywords_fr": [ "télésurveillance", "capteur", "données à distance" ] }, { "id": "G3", "code": "TELE_OUTILS_NUMERIQUES", "label_fr": "Outils numériques patients", "description_fr": "Utilisation de dossiers partagés, applications patients, planning numérique.", "keywords_fr": [ "DMP", "dossier partagé", "application santé", "agenda en ligne" ] } ] } ], "questionnaire": { "language": "fr", "sections": [ { "id": "S1", "label_fr": "Soins techniques et surveillance", "questions": [ { "id": "Q1", "type": "multi_select", "text_fr": "Quels soins techniques pratiquez-vous régulièrement ?", "options": [ { "id": "Q1_O1", "label_fr": "Injections (SC, IM, IV)", "map_to_competences": ["GEN_SOINS_TECHNIQUES"] }, { "id": "Q1_O2", "label_fr": "Perfusions", "map_to_competences": ["GEN_SOINS_TECHNIQUES"] }, { "id": "Q1_O3", "label_fr": "Pansements simples", "map_to_competences": ["GEN_SOINS_TECHNIQUES"] }, { "id": "Q1_O4", "label_fr": "Pansements complexes", "map_to_competences": ["GEN_SOINS_TECHNIQUES", "WOUND_PLAIES_CHRONIQUES"] }, { "id": "Q1_O5", "label_fr": "Prélèvements sanguins", "map_to_competences": ["GEN_SOINS_TECHNIQUES"] }, { "id": "Q1_O6", "label_fr": "Surveillance des constantes et de la douleur", "map_to_competences": ["GEN_SURVEILLANCE_CLINIQUE"] } ] } ] }, { "id": "S2", "label_fr": "Personnes âgées et gérontologie", "questions": [ { "id": "Q2", "type": "multi_select", "text_fr": "Avez-vous une expérience spécifique avec les personnes âgées sur les sujets suivants ?", "options": [ { "id": "Q2_O1", "label_fr": "Évaluation de l'autonomie (ADL / IADL)", "map_to_competences": ["GER_AUTONOMIE_DEPENDANCE"] }, { "id": "Q2_O2", "label_fr": "Prévention des chutes", "map_to_competences": ["GER_AUTONOMIE_DEPENDANCE"] }, { "id": "Q2_O3", "label_fr": "Repérage des troubles de la mémoire ou de l'orientation", "map_to_competences": ["GER_TROUBLES_COGNITIFS"] }, { "id": "Q2_O4", "label_fr": "Suivi du comportement (agitation, retrait, troubles du sommeil)", "map_to_competences": ["GER_TROUBLES_COGNITIFS", "GER_SOUTIEN_PSYCHOSOCIAL"] }, { "id": "Q2_O5", "label_fr": "Accompagnement des aidants familiaux", "map_to_competences": ["GER_SOUTIEN_PSYCHOSOCIAL", "COORD_AIDANTS"] } ] } ] }, { "id": "S3", "label_fr": "Plaies, escarres et stomies", "questions": [ { "id": "Q3", "type": "multi_select", "text_fr": "Quelles compétences avez-vous en plaies et cicatrisation ?", "options": [ { "id": "Q3_O1", "label_fr": "Prise en charge des escarres", "map_to_competences": ["WOUND_ESCARRES"] }, { "id": "Q3_O2", "label_fr": "Prise en charge des ulcères de jambe", "map_to_competences": ["WOUND_PLAIES_CHRONIQUES"] }, { "id": "Q3_O3", "label_fr": "Pansements de plaies post-opératoires complexes", "map_to_competences": ["WOUND_PLAIES_CHRONIQUES"] }, { "id": "Q3_O4", "label_fr": "Prise en charge de stomies (digestives ou urinaires)", "map_to_competences": ["WOUND_STOMATHERAPIE"] } ] } ] }, { "id": "S4", "label_fr": "Maladies chroniques", "questions": [ { "id": "Q4", "type": "multi_select", "text_fr": "Quelles maladies chroniques suivez-vous régulièrement ?", "options": [ { "id": "Q4_O1", "label_fr": "Diabète (insuline, capteurs, glycémies)", "map_to_competences": ["CHRONIC_DIABETE"] }, { "id": "Q4_O2", "label_fr": "Insuffisance cardiaque", "map_to_competences": ["CHRONIC_INSUFFISANCE_CARDIO_RESP"] }, { "id": "Q4_O3", "label_fr": "Insuffisance respiratoire (O2, BPCO)", "map_to_competences": ["CHRONIC_INSUFFISANCE_CARDIO_RESP"] }, { "id": "Q4_O4", "label_fr": "Oncologie (patients sous chimiothérapie)", "map_to_competences": ["CHRONIC_ONCOLOGIE"] } ] } ] }, { "id": "S5", "label_fr": "Pratique avancée (IPA)", "questions": [ { "id": "Q5", "type": "single_select", "text_fr": "Êtes-vous infirmier(ère) en pratique avancée (IPA) ?", "options": [ { "id": "Q5_O1", "label_fr": "Oui", "map_to_competences": [] }, { "id": "Q5_O2", "label_fr": "Non", "map_to_competences": [] } ] }, { "id": "Q5B", "type": "multi_select", "text_fr": "Si oui, dans quels domaines exercez-vous en tant qu'IPA ?", "options": [ { "id": "Q5B_O1", "label_fr": "Pathologies chroniques stabilisées", "map_to_competences": ["IPA_PATHOLOGIES_CHRONIQUES"] }, { "id": "Q5B_O2", "label_fr": "Psychiatrie / santé mentale", "map_to_competences": ["IPA_PSYCHIATRIE"] }, { "id": "Q5B_O3", "label_fr": "Oncologie / hémato-oncologie", "map_to_competences": ["IPA_ONCOLOGIE"] }, { "id": "Q5B_O4", "label_fr": "Insuffisance rénale", "map_to_competences": ["IPA_INSUFFISANCE_RENALE"] }, { "id": "Q5B_O5", "label_fr": "Urgences", "map_to_competences": ["IPA_URGENCES"] } ] } ] }, { "id": "S6", "label_fr": "Coordination et parcours de soins", "questions": [ { "id": "Q6", "type": "multi_select", "text_fr": "Participez-vous à la coordination de parcours de soins ?", "options": [ { "id": "Q6_O1", "label_fr": "Organisation de sortie d'hôpital", "map_to_competences": ["COORD_SORTIE_HOPITAL"] }, { "id": "Q6_O2", "label_fr": "Coordination en HAD (hospitalisation à domicile)", "map_to_competences": ["COORD_HAD"] }, { "id": "Q6_O3", "label_fr": "Case management (gestion de cas complexes)", "map_to_competences": ["COORD_CASE_MANAGER"] }, { "id": "Q6_O4", "label_fr": "Coordination avec les aidants familiaux", "map_to_competences": ["COORD_AIDANTS"] } ] } ] }, { "id": "S7", "label_fr": "Télésanté et outils numériques", "questions": [ { "id": "Q7", "type": "multi_select", "text_fr": "Utilisez-vous les outils numériques et la télésanté dans votre pratique ?", "options": [ { "id": "Q7_O1", "label_fr": "Télésoins (visio, téléconsultation infirmière)", "map_to_competences": ["TELE_TELESOINS"] }, { "id": "Q7_O2", "label_fr": "Télésurveillance médicale (capteurs, remontées de données)", "map_to_competences": ["TELE_TELESURVEILLANCE"] }, { "id": "Q7_O3", "label_fr": "Dossiers ou applications numériques patients", "map_to_competences": ["TELE_OUTILS_NUMERIQUES"] } ] } ] } ] } }

📌 TYPESCRIPT : TYPES & ZOD (OBLIGATOIRE)

  1. In /types/nurseNomenclature.ts, define:
  • Import the JSON:

    import nomenclature from "@/data/nomenclatureInfirmiers.json";

  • Type CompetenceCode inferred from the JSON:

    export type CompetenceCode = (typeof nomenclature)["families"][number]["competences"][number]["code"];

  • interface Competence (id, code, label_fr, description_fr, keywords_fr[])
  • interface Family
  • type QuestionType = "multi_select" | "single_select"
  • interface QuestionOption:

    interface QuestionOption { id: string; label_fr: string; map_to_competences: CompetenceCode[]; }

  • interface Question
  • interface QuestionnaireSection
  • interface NurseNomenclature with:
    • version: string
    • context: string
    • families: Family[]
    • questionnaire: { language: string; sections: QuestionnaireSection[] }
  1. In /types/nurseAnswers.ts, define:
  • Zod schema:

    import { z } from "zod"; export const nurseAnswersSchema = z.record( z.string(), // questionId z.array(z.string()) // optionIds ); export type NurseAnswers = z.infer<typeof nurseAnswersSchema>;

📌 LOGIQUE : buildNurseProfile()

In /logic/buildNurseProfile.ts, create:

  • interface NurseProfile with:

    import { CompetenceCode, NurseNomenclature } from "@/types/nurseNomenclature"; export interface NurseProfile { id_infirmier: string; identite: { nom: string; prenom: string; adresse: string; ville: string; code_postal: string; mode_exercice: string[]; }; competences: Record<string, CompetenceCode[]>; // keyed by family code: GEN, GER, WOUND... expertises_principales: string[]; score_global_expertise: number; match_recommande_seniors: { autonomie: number; troubles_cognitifs: number; plaies: number; diabete: number; cardio_respiratoire: number; isolement_psychosocial: number; }; }

  • Helper functions (in the same file):
    • collectCompetenceCodesFromAnswers(nomenclature, answers): CompetenceCode[]
      → iterate sections/questions/options, match optionIds in answers, accumulate all mapped competences (remove duplicates).
    • groupCompetencesByFamily(families, codes): Record<string, CompetenceCode[]>
      → group by family.code (e.g. "GEN", "GER").
    • computeGlobalScore(codes): number
      → simple heuristic: for example, base 60, add points depending on the number of distinct competences, capped at 100.
    • computeSeniorMatchScores(codes): { ... }
      → simple rule-based mapping:
      • if codes includes GER_AUTONOMIE_DEPENDANCE → autonomie high (e.g. 80–100)
      • if codes includes GER_TROUBLES_COGNITIFS → troubles_cognitifs high
      • if WOUND_ESCARRES or WOUND_PLAIES_CHRONIQUES → plaies high
      • if CHRONIC_DIABETE → diabete high
      • if CHRONIC_INSUFFISANCE_CARDIO_RESP → cardio_respiratoire high
      • if GER_SOUTIEN_PSYCHOSOCIAL → isolement_psychosocial high
    • buildExpertisesPrincipales(families, codes): string[]
      → generate up to 4 human-readable bullet points like:
      • "Plaies complexes et escarres"
      • "Gérontologie – troubles cognitifs"
      • "Suivi des patients diabétiques"
      • etc.
  • Export function buildNurseProfile(params):

    import { NurseAnswers } from "@/types/nurseAnswers"; interface BuildNurseProfileParams { id_infirmier?: string; nom: string; prenom: string; adresse: string; ville: string; code_postal: string; mode_exercice: string[]; nomenclature: NurseNomenclature; answers: NurseAnswers; } export function buildNurseProfile({ id_infirmier, nom, prenom, adresse, ville, code_postal, mode_exercice, nomenclature, answers, }: BuildNurseProfileParams): NurseProfile { const effectiveId = id_infirmier ?? `INF-${Date.now()}`; const codes = collectCompetenceCodesFromAnswers(nomenclature, answers); const competencesByFamily = groupCompetencesByFamily( nomenclature.families, codes ); const score_global_expertise = computeGlobalScore(codes); const match_recommande_seniors = computeSeniorMatchScores(codes); const expertises_principales = buildExpertisesPrincipales( nomenclature.families, codes ); return { id_infirmier: effectiveId, identite: { nom, prenom, adresse, ville, code_postal, mode_exercice, }, competences: competencesByFamily, expertises_principales, score_global_expertise, match_recommande_seniors, }; }

📌 HOOK : useNurseQuestionnaire

In /hooks/useNurseQuestionnaire.ts:

Implement a hook that:

  • Receives nomenclature: NurseNomenclature.
  • Manages:
    • currentSectionIndex (0..n-1)
    • answers: NurseAnswers
  • Exposes:

    interface UseNurseQuestionnaireResult { currentSection: QuestionnaireSection; currentSectionIndex: number; totalSections: number; answers: NurseAnswers; toggleOption: (questionId: string, optionId: string) => void; // for multi_select setSingle: (questionId: string, optionId: string) => void; // for single_select nextSection: () => void; prevSection: () => void; isLast: boolean; }

The hook must:

  • Use React state for currentSectionIndex and answers.
  • For toggleOption, add/remove an optionId in the question’s array.
  • For setSingle, replace the question’s array by [optionId].
  • Prevent going out of bounds on nextSection / prevSection (clamp indices).

📌 COMPONENTS UI (EN FRANÇAIS)

NurseOnboardingWizard.tsx (client component)

Responsibilities:

  • Render identity fields:
    • Inputs: “Nom”, “Prénom”, “Adresse”, “Ville”, “Code postal”.
    • Buttons for “Mode d'exercice”:

      const MODES_EXERCICE = ["libéral", "domicile", "HAD", "hôpital", "EHPAD"];

  • Use useNurseQuestionnaire(nomenclature) to:
    • Show current section label.
    • Show questions and options via QuestionBlock.
  • Navigation buttons:
    • Left: “← Précédent”
    • Right: “Continuer →” or “Valider mon profil” for the last step.
  • On last step:
    • Validate answers with nurseAnswersSchema.
    • Check minimal identity fields (nom, prenom, mode_exercice non vides).
    • Call POST /api/infirmiers/profil.
    • Once response is ok, show a final screen with the JSON profile.

UI style:

  • Card-like with border, rounded corners, small shadow.
  • Use Tailwind classes such as:
    • max-w-xl mx-auto p-4 space-y-4 border rounded-2xl shadow
    • Buttons: pill-style, small text, subtle colors.

The final “Profil généré” screen should:

  • Afficher un titre “Profil généré”.
  • Afficher le JSON formaté (par ex. <pre> / <code>).

QuestionBlock.tsx

  • Props:

    interface QuestionBlockProps { question: Question; selected: string[]; onToggle: (optionId: string) => void; onSelectSingle?: (optionId: string) => void; }

  • Render:
    • Question text as p with font-medium.
    • For each option:
      • A button with the option label in French.
      • Visual state for selected / unselected (Tailwind, ex. bg-blue-600 text-white vs bg-white border).
      • For multi_select, onClick utilise onToggle.
      • For single_select, onClick utilise onSelectSingle si fourni.

📌 PAGE : /app/infirmiers/onboarding/page.tsx

  • Importer la nomenclature depuis /data/nomenclatureInfirmiers.json.
  • Rendre NurseOnboardingWizard en lui passant la nomenclature.
  • S'assurer que la page est un composant client si nécessaire ("use client" en haut du fichier, ou dans le composant du wizard).

📌 API ROUTE : /api/infirmiers/profil

In /app/api/infirmiers/profil/route.ts:

Implement POST:

  1. Parse JSON body.
  2. Validate answers with nurseAnswersSchema.
  3. Validate minimal fields nom, prenom, mode_exercice (non-empty).
  4. Import nomenclatureInfirmiers.json statically.
  5. Call buildNurseProfile with:
    • nom, prenom, adresse, ville, code_postal, mode_exercice
    • nomenclature
    • answers
  6. Return NextResponse.json({ ok: true, profile }).

No database, no external HTTP calls.

Just compute and return.

📸 SCREENSHOTS HD (STATIQUES, OBLIGATOIRES)

Create three static HD PNG files under /public/screenshots with the exact names:

  1. /public/screenshots/01-identite-etape-1.png
    • Représente l’écran où l’infirmier(ère) remplit :
      • Nom
      • Prénom
      • Adresse
      • Ville
      • Code postal
      • Mode d'exercice
      • Et voit la première section “Soins techniques et surveillance”.
  2. /public/screenshots/02-gerontologie-etape-2.png
    • Représente l’écran montrant la section :
      • “Personnes âgées et gérontologie”
      • Avec quelques options sélectionnées (par exemple : autonomie, troubles cognitifs, aidants).
  3. /public/screenshots/03-profil-genere.png
    • Représente l’écran final après soumission :
      • Titre “Profil généré”.
      • Affichage du JSON du profil (formaté).

Ces fichiers peuvent être des mockups statiques (images créées ou exportées simplement), à une résolution d’au moins 1440x900 ou équivalente.

Aucune automatisation Playwright/Puppeteer n’est requise : il suffit que ces fichiers PNG existent dans le dépôt avec ces noms.

🧪 TESTS & VALIDATION

  • Fournir des scripts npm run build et npm run lint dans package.json.
  • Écrire le code de manière à ce que :
    • TypeScript ne remonte pas d’erreurs de compilation.
    • Le wizard fonctionne de la section 1 à la section 7.
    • La sélection d’options mette bien à jour l’état answers.
    • L’API /api/infirmiers/profil retourne un JSON de profil valide.

L’exécution effective de ces commandes pourra être faite ultérieurement dans un environnement standard Next.js.

📄 README

Create a minimal README.md at project root, in FRENCH, explaining:

  • Objectif de la WebApp.
  • Stack technique utilisée.
  • Comment lancer le projet (installation, npm install, npm run dev).
  • Où trouver les screenshots (public/screenshots).
  • Exemple de payload JSON retourné par l’API (exemple de profile).

🔚 FIN DU PROMPT

ANNEXE > remarque de GPT sur l'implémentation direct du prompt au dessus sur Agent3 de replit

Je ne peux pas te garantir honnêtement un “100 % sûr” pour Agent-3 (je n’ai pas la main sur son moteur ni sur la config exacte de son environnement), mais je peux te dire où ton prompt est parfaitement OK et où il y a des zones de risque pour qu’il échoue ou rende un projet bancal.

En l’état, ton prompt est très bien structuré et tout à fait dans la “zone de confort” d’Agent-3 pour :

  • Next.js 14 / App Router
  • TypeScript + React
  • Tailwind
  • Zod + validation backend
  • Architecture de dossiers imposée
  • Wizard multi-étapes + API POST /api/infirmiers/profil
  • Import d’un JSON de nomenclature et mapping métier

👉 Donc conceptuellement : OUI, c’est implémentable.

Mais je ne le validerais pas comme “100 % garanti” à cause de quelques points concrets.

1. Points vraiment sensibles pour Agent-3

a) Génération de PNG dans /public/screenshots

“Provide static HD screenshots (mockups) of the main screens as PNG files…”

C’est le point le plus fragile :

  • Agent-3 sait très bien référencer des images dans /public/screenshots,
  • mais selon la façon dont Replit l’a branché, il ne génère pas toujours de vrais fichiers binaires PNG (ou peut juste mettre du texte à la place, ou oublier de les créer).

🔴 Risque :

Il crée les pages, le code, mais pas les 3 vrais .png, ou il les nomme légèrement différemment.

👉 Pour le rendre “safe Agent-3”, je reformulerais comme ceci :

“Create three routes/components that display UI as if screenshots existed at:

/public/screenshots/01-identite-etape-1.png, etc.

The actual PNG files can be created manually later.

The code must reference these image paths, but does not need to generate the binary PNG files.”

Ou bien :

“If the environment does not allow generating PNG files, it is enough to create empty placeholder files or just reference the paths and document it in the README.”

b) “EXACTEMENT ces fichiers et dossiers” + zéro erreur TypeScript

Tu demandes :

  • une architecture ultra-précise,
  • + aucune erreur TypeScript,
  • + npm run lint & build OK.

En pratique :

  • Agent-3 peut y arriver, mais il peut :
    • Ajouter 1–2 fichiers de config de plus (.eslintrc.*, tsconfig.json un peu différent…)
    • Laisser passer un petit warning / type un peu large, ou oublier un import.
  • L’import du JSON avec typeof nomenclature["families"][number]… est correct, mais dépend de resolveJsonModule dans tsconfig. S’il oublie, tu auras une erreur TS.

👉 Je te conseille de relaxer légèrement le ton pour maximiser les chances que ça marche “en vrai” :

Exemples de reformulation plus safe :

  • Au lieu de :

“Create EXACTLY these files and folders:”

➡️

“Create AT LEAST these files and folders (vous pouvez ajouter les fichiers de configuration nécessaires comme tsconfig, eslint, etc.)”

  • Au lieu de :

“Le code doit être écrit de sorte que npm run build et npm run lint passent sans erreur.”

➡️

“Écrire le code de manière propre et typée, en visant un npm run build et npm run lint sans erreur dans un environnement Next.js standard (de légères adaptations pourront être faites ensuite si besoin).”

  • Pour l’import JSON, préciser :

“Configurer tsconfig.json avec resolveJsonModule: true pour pouvoir importer le JSON de nomenclature en TypeScript.”

c) Taille & complexité globale du prompt

Ton prompt est long, très précis, et multi-contraintes :

  • Beaucoup de détails sur les types, interfaces, helpers, API, etc.
  • Agent-3 peut parfois :
    • oublier 1 helper,
    • simplifier une interface,
    • ou ne pas respecter parfaitement chaque propriété demandée.

Ce n’est pas bloquant, mais ça rend difficile la promesse “100 % parfait à la première exécution”.

Si tu veux être plus “safe”, tu peux :

  • Garder exactement la même architecture,
  • Mais transformer certains “OBLIGATOIRE / EXACTEMENT” en “OBLIGATOIRE MAIS ADAPTABLE” (par ex. “vous pouvez légèrement adapter les noms des helpers si nécessaire tant que le comportement est respecté”).

2. Donc : est-ce que ce prompt peut être implémenté par Agent-3 ?

  • Oui, sur le plan technique, c’est entièrement réalisable par un agent de code moderne comme Agent-3.
  • Non, je ne peux pas te garantir à 100 % que, dans la pratique, il le fera sans :
    • oublier les PNG,
    • rater un petit détail de types,
    • ou produire un petit bug de linting.

👉 Si ton objectif est “maximum de chances que ça passe du premier coup”, je changerais juste 3 choses :

  1. Screenshots → uniquement “référencer”/documenter les PNG, pas exiger la création réelle des fichiers binaires.
  2. Architecture → “au moins ces fichiers”, laisser la porte ouverte à des fichiers de config en plus.
  3. TS / lint → demander du code propre prêt à être adapté, plutôt que garantir 0 erreur.

Si tu veux, je peux te faire une version raccourcie “Agent-3 safe” de ton prompt qui garde 100 % de la logique métier mais assouplit uniquement ces points-là.


Nouveau prompt proposé par GPT5.1

You are Agent-3.


Build a complete production-ready WebApp for “Typage Infirmier(ère) – Aidants & Seniors”.


The entire WebApp must be fully implemented in:


  - Next.js 14 (App Router, app/ directory)

  - TypeScript

  - React

  - Zod

  - TailwindCSS (minimal, modern, mobile-first)

  - File-based routing


⚠️ All UI labels, placeholders, buttons and user-facing text MUST be in FRENCH.


⚠️ Do NOT call any external API.


⚠️ Do NOT call Odoo or n8n directly from the frontend.


We only PREPARE a backend endpoint that could be wired later to a webhook (e.g. n8n → Odoo).


The goal is to:


  - Let nurses (infirmiers / infirmières) declare their compétences through a wizard (multi-step form).

  - Map their answers to a structured competency profile.

  - Return and display this structured profile in JSON (for now).

  - Provide references to static HD screenshots (mockups) of the main screens as PNG files in /public/screenshots. 

    If the environment cannot actually create binary PNG files, it is enough to:

      - assume these PNG files exist at the specified paths, and

      - document them in the README.

    The real browser captures can be done manually later.


------------------------------------------------

🎯 OBJECTIF FONCTIONNEL


Build a WebApp that allows a nurse to:


1) Enter identity information:


  - Nom (last name)

  - Prénom (first name)

  - Adresse (address)

  - Ville (town)

  - Code postal (postal code)

  - Mode d'exercice (libéral, domicile, HAD, hôpital, EHPAD) → multi-select or tag buttons


2) Answer a questionnaire structured in 7 sections (multi-step "wizard"):


  - S1: Soins techniques et surveillance

  - S2: Personnes âgées et gérontologie

  - S3: Plaies, escarres et stomies

  - S4: Maladies chroniques

  - S5: Pratique avancée (IPA)

  - S6: Coordination & parcours de soins

  - S7: Télésanté et outils numériques


3) Submit all answers to a backend API:


  - Endpoint: POST /api/infirmiers/profil

  - Request body (JSON):


    {

      nom: string;

      prenom: string;

      adresse: string;

      ville: string;

      code_postal: string;

      mode_exercice: string[];

      answers: Record<string, string[]>; // questionId → optionIds

    }


4) Backend behavior:


  - Validate the payload with Zod.

  - Load a nomenclature JSON file from /data/nomenclatureInfirmiers.json.

  - Map answers → competency codes using this nomenclature.

  - Build a structured nurse profile.

  - Return: { ok: true, profile }.


5) Frontend behavior:


  - After successful submit, show a “Profil généré” screen.

  - Display the profile JSON in a pretty, readable way (code block / panel).

  - This serves as a test page and debug view.


------------------------------------------------

🔧 TECH STACK & QUALITÉ


REQUIRED:


  - Next.js 14 with App Router (use app/ directory).

  - TypeScript everywhere (avoid any, except in rare necessary cases).

  - TailwindCSS configured and used consistently.

  - Zod for schema validation (request body on API route).

  - Mobile-first responsive layout (looks good on small screens ~360–400px width).

  - Clear, modern, minimal UI (rounded cards, subtle shadows, spacing).


Code should:


  - Be reasonably clean and type-safe in a standard Next.js environment.

  - Be structured and reusable (components, hooks, logic files).

  - Separate concerns clearly:

      - UI (components)

      - State management (hooks)

      - Business logic (buildNurseProfile)

      - Data (nomenclature JSON)

      - API route


Provide standard scripts in package.json such as:


  - "dev"

  - "build"

  - "lint"


Write the code to be compatible with a typical Next.js + TypeScript + Tailwind setup, so that `npm run build` and `npm run lint` are intended to pass after any minor local configuration adjustments if needed.


------------------------------------------------

📁 ARCHITECTURE DE DOSSIERS (MINIMUM À FOURNIR)


Create AT LEAST the following files and folders (you MAY also create any additional config files like tsconfig.json, .eslintrc, etc. as needed):


/app

  /infirmiers/onboarding/page.tsx      → Main wizard page (client component)


/app/api/infirmiers/profil/route.ts   → POST endpoint generating the profile


/components

  NurseOnboardingWizard.tsx           → Main wizard component

  QuestionBlock.tsx                   → Component to render one question + options


/hooks

  useNurseQuestionnaire.ts            → Custom hook to handle wizard state


/logic

  buildNurseProfile.ts                → Business logic: map answers → profile


/types

  nurseNomenclature.ts                → Types for nomenclature & questionnaire

  nurseAnswers.ts                     → Zod schema + type for nurse answers


/data

  nomenclatureInfirmiers.json         → Competency nomenclature + questionnaire


/public

  /screenshots                        → Folder for PNG screenshots (paths may be referenced even if PNGs are added later)


Also include:


  - tailwind.config.(js/ts)

  - postcss.config.(js/ts)

  - globals.css (or equivalent) with Tailwind directives.


In tsconfig.json, make sure to enable:


  - "resolveJsonModule": true

  - "esModuleInterop": true


so that TypeScript can import the JSON file.


------------------------------------------------

📌 NOMENCLATURE JSON À UTILISER


Create file: /data/nomenclatureInfirmiers.json with EXACTLY this JSON content:


{

  "version": "1.0",

  "context": "Nomenclature de compétences infirmières pour appariement automatique Seniors ↔ Infirmiers",

  "families": [

    {

      "id": "A",

      "code": "GEN",

      "label_fr": "Compétences générales (IDE)",

      "description_fr": "Compétences générales d'infirmier(ère) diplômé(e) d'État : soins courants, surveillance clinique, éducation thérapeutique.",

      "competences": [

        {

          "id": "A1",

          "code": "GEN_SOINS_TECHNIQUES",

          "label_fr": "Soins techniques courants",

          "description_fr": "Injections, perfusions, pansements simples, prélèvements, pose de cathéter.",

          "keywords_fr": [

            "injection",

            "piqûre",

            "perfusion",

            "pansement",

            "prise de sang",

            "cathéter"

          ]

        },

        {

          "id": "A2",

          "code": "GEN_SURVEILLANCE_CLINIQUE",

          "label_fr": "Surveillance clinique",

          "description_fr": "Surveillance des constantes, de la douleur, de l'état cognitif et du risque de chute.",

          "keywords_fr": [

            "tension",

            "pression artérielle",

            "température",

            "pouls",

            "douleur",

            "chute",

            "confusion"

          ]

        },

        {

          "id": "A3",

          "code": "GEN_EDUCATION_THERAPEUTIQUE",

          "label_fr": "Éducation thérapeutique",

          "description_fr": "Explication des traitements, observance médicamenteuse, conseils de vie quotidienne pour les maladies chroniques.",

          "keywords_fr": [

            "médicament",

            "comprimé",

            "prescription",

            "prise de traitement",

            "autogestion",

            "éducation"

          ]

        }

      ]

    },

    {

      "id": "B",

      "code": "GER",

      "label_fr": "Prise en charge gérontologique",

      "description_fr": "Compétences spécifiques pour la prise en charge des personnes âgées et des troubles liés au vieillissement.",

      "competences": [

        {

          "id": "B1",

          "code": "GER_AUTONOMIE_DEPENDANCE",

          "label_fr": "Autonomie et dépendance",

          "description_fr": "Évaluation de l'autonomie (ADL/IADL), repérage des difficultés de marche, prévention des chutes.",

          "keywords_fr": [

            "autonomie",

            "dépendance",

            "aide pour se lever",

            "aide à la toilette",

            "chute",

            "marche",

            "déambulateur"

          ]

        },

        {

          "id": "B2",

          "code": "GER_TROUBLES_COGNITIFS",

          "label_fr": "Troubles cognitifs",

          "description_fr": "Repérage de la désorientation, des troubles de la mémoire, des pathologies de type Alzheimer ou apparentées.",

          "keywords_fr": [

            "mémoire",

            "désorientation",

            "Alzheimer",

            "perdu",

            "oublis",

            "démence"

          ]

        },

        {

          "id": "B3",

          "code": "GER_SOUTIEN_PSYCHOSOCIAL",

          "label_fr": "Soutien psycho-social",

          "description_fr": "Écoute, repérage de l'isolement, de l'anxiété, soutien des familles et aidants.",

          "keywords_fr": [

            "solitude",

            "isolement",

            "anxiété",

            "angoisse",

            "dépression",

            "famille",

            "aidant"

          ]

        }

      ]

    },

    {

      "id": "C",

      "code": "WOUND",

      "label_fr": "Plaies, cicatrisation et soins complexes",

      "description_fr": "Compétences pour la prise en charge des plaies aiguës et chroniques, escarres, stomies.",

      "competences": [

        {

          "id": "C1",

          "code": "WOUND_ESCARRES",

          "label_fr": "Escarres",

          "description_fr": "Évaluation et prise en charge des escarres, prévention, choix de pansements adaptés.",

          "keywords_fr": [

            "escarre",

            "plaie de lit",

            "rougeur",

            "ulcération fessier",

            "positionnement"

          ]

        },

        {

          "id": "C2",

          "code": "WOUND_PLAIES_CHRONIQUES",

          "label_fr": "Plaies chroniques",

          "description_fr": "Prise en charge des ulcères veineux, artériels, plaies chroniques complexes.",

          "keywords_fr": [

            "ulcère",

            "jambe",

            "plaie qui ne guérit pas",

            "pansement complexe"

          ]

        },

        {

          "id": "C3",

          "code": "WOUND_STOMATHERAPIE",

          "label_fr": "Stomathérapie",

          "description_fr": "Prise en charge des stomies digestives ou urinaires, choix du matériel, éducation du patient.",

          "keywords_fr": [

            "stomie",

            "poche",

            "colostomie",

            "iléostomie",

            "urostomie"

          ]

        }

      ]

    },

    {

      "id": "D",

      "code": "CHRONIC",

      "label_fr": "Pathologies chroniques",

      "description_fr": "Compétences pour le suivi des maladies chroniques fréquentes chez les seniors.",

      "competences": [

        {

          "id": "D1",

          "code": "CHRONIC_DIABETE",

          "label_fr": "Diabète",

          "description_fr": "Suivi des patients diabétiques : glycémies, injections d'insuline, éducation, capteurs.",

          "keywords_fr": [

            "diabète",

            "glycémie",

            "insuline",

            "hypoglycémie",

            "capteur de glucose"

          ]

        },

        {

          "id": "D2",

          "code": "CHRONIC_INSUFFISANCE_CARDIO_RESP",

          "label_fr": "Insuffisance cardiaque / respiratoire",

          "description_fr": "Suivi des patients avec insuffisance cardiaque ou respiratoire, O2, repérage des décompensations.",

          "keywords_fr": [

            "essoufflement",

            "insuffisance cardiaque",

            "insuffisance respiratoire",

            "oxygène",

            "oedèmes"

          ]

        },

        {

          "id": "D3",

          "code": "CHRONIC_ONCOLOGIE",

          "label_fr": "Oncologie",

          "description_fr": "Suivi des patients sous chimiothérapie ou traitements oncologiques, gestion des effets secondaires.",

          "keywords_fr": [

            "cancer",

            "chimiothérapie",

            "nausées",

            "fatigue importante",

            "soins de support"

          ]

        }

      ]

    },

    {

      "id": "E",

      "code": "IPA",

      "label_fr": "Infirmière en pratique avancée (IPA)",

      "description_fr": "Compétences d'infirmier(ère) en pratique avancée, avec champ d'autonomie élargi et prescriptions.",

      "competences": [

        {

          "id": "E1",

          "code": "IPA_PATHOLOGIES_CHRONIQUES",

          "label_fr": "IPA – Pathologies chroniques stabilisées",

          "description_fr": "Prise en charge avancée des maladies chroniques stabilisées chez l'adulte.",

          "keywords_fr": [

            "consultation de suivi",

            "ajustement traitement",

            "pathologie chronique stabilisée"

          ]

        },

        {

          "id": "E2",

          "code": "IPA_PSYCHIATRIE",

          "label_fr": "IPA – Psychiatrie / santé mentale",

          "description_fr": "Suivi et prise en charge avancée en psychiatrie et santé mentale.",

          "keywords_fr": [

            "trouble psychiatrique",

            "suivi psychologique",

            "psychose",

            "dépression sévère"

          ]

        },

        {

          "id": "E3",

          "code": "IPA_ONCOLOGIE",

          "label_fr": "IPA – Oncologie",

          "description_fr": "Consultations avancées en oncologie et hémato-oncologie.",

          "keywords_fr": [

            "oncologie avancée",

            "coordination soins cancer"

          ]

        },

        {

          "id": "E4",

          "code": "IPA_INSUFFISANCE_RENALE",

          "label_fr": "IPA – Insuffisance rénale",

          "description_fr": "Suivi avancé des patients en insuffisance rénale.",

          "keywords_fr": [

            "dialyse",

            "insuffisance rénale",

            "néphrologie"

          ]

        },

        {

          "id": "E5",

          "code": "IPA_URGENCES",

          "label_fr": "IPA – Urgences",

          "description_fr": "Prise en charge avancée dans un contexte d'urgences.",

          "keywords_fr": [

            "urgence",

            "triage",

            "détresse respiratoire",

            "douleur aiguë"

          ]

        }

      ]

    },

    {

      "id": "F",

      "code": "COORD",

      "label_fr": "Coordination & parcours de soins",

      "description_fr": "Compétences liées à la coordination des parcours de soins, en particulier pour les personnes âgées.",

      "competences": [

        {

          "id": "F1",

          "code": "COORD_SORTIE_HOPITAL",

          "label_fr": "Coordination de sortie d'hôpital",

          "description_fr": "Organisation du retour à domicile ou en structure, coordination avec les différents intervenants.",

          "keywords_fr": [

            "sortie d'hôpital",

            "retour à domicile",

            "plan de soins",

            "orientation"

          ]

        },

        {

          "id": "F2",

          "code": "COORD_HAD",

          "label_fr": "Coordination en HAD",

          "description_fr": "Coordination des soins en Hospitalisation à Domicile.",

          "keywords_fr": [

            "HAD",

            "hospitalisation à domicile",

            "intervenants multiples"

          ]

        },

        {

          "id": "F3",

          "code": "COORD_CASE_MANAGER",

          "label_fr": "Case management",

          "description_fr": "Gestion de cas complexes, suivi global du parcours de soins.",

          "keywords_fr": [

            "parcours complexe",

            "cas complexe",

            "gestion de cas",

            "multi-pathologies"

          ]

        },

        {

          "id": "F4",

          "code": "COORD_AIDANTS",

          "label_fr": "Coordination avec les aidants",

          "description_fr": "Communication et coordination avec les aidants familiaux.",

          "keywords_fr": [

            "aidant",

            "famille",

            "proche aidant",

            "coordination familiale"

          ]

        }

      ]

    },

    {

      "id": "G",

      "code": "TELE",

      "label_fr": "Télésanté & outils numériques",

      "description_fr": "Compétences liées à l'utilisation des outils numériques, télésoins et télésurveillance.",

      "competences": [

        {

          "id": "G1",

          "code": "TELE_TELESOINS",

          "label_fr": "Télésoins",

          "description_fr": "Réalisation de télésoins avec les patients à domicile.",

          "keywords_fr": [

            "télésoin",

            "visio",

            "consultation vidéo"

          ]

        },

        {

          "id": "G2",

          "code": "TELE_TELESURVEILLANCE",

          "label_fr": "Télésurveillance médicale",

          "description_fr": "Suivi à distance des constantes et paramètres de santé.",

          "keywords_fr": [

            "télésurveillance",

            "capteur",

            "données à distance"

          ]

        },

        {

          "id": "G3",

          "code": "TELE_OUTILS_NUMERIQUES",

          "label_fr": "Outils numériques patients",

          "description_fr": "Utilisation de dossiers partagés, applications patients, planning numérique.",

          "keywords_fr": [

            "DMP",

            "dossier partagé",

            "application santé",

            "agenda en ligne"

          ]

        }

      ]

    }

  ],

  "questionnaire": {

    "language": "fr",

    "sections": [

      {

        "id": "S1",

        "label_fr": "Soins techniques et surveillance",

        "questions": [

          {

            "id": "Q1",

            "type": "multi_select",

            "text_fr": "Quels soins techniques pratiquez-vous régulièrement ?",

            "options": [

              {

                "id": "Q1_O1",

                "label_fr": "Injections (SC, IM, IV)",

                "map_to_competences": ["GEN_SOINS_TECHNIQUES"]

              },

              {

                "id": "Q1_O2",

                "label_fr": "Perfusions",

                "map_to_competences": ["GEN_SOINS_TECHNIQUES"]

              },

              {

                "id": "Q1_O3",

                "label_fr": "Pansements simples",

                "map_to_competences": ["GEN_SOINS_TECHNIQUES"]

              },

              {

                "id": "Q1_O4",

                "label_fr": "Pansements complexes",

                "map_to_competences": ["GEN_SOINS_TECHNIQUES", "WOUND_PLAIES_CHRONIQUES"]

              },

              {

                "id": "Q1_O5",

                "label_fr": "Prélèvements sanguins",

                "map_to_competences": ["GEN_SOINS_TECHNIQUES"]

              },

              {

                "id": "Q1_O6",

                "label_fr": "Surveillance des constantes et de la douleur",

                "map_to_competences": ["GEN_SURVEILLANCE_CLINIQUE"]

              }

            ]

          }

        ]

      },

      {

        "id": "S2",

        "label_fr": "Personnes âgées et gérontologie",

        "questions": [

          {

            "id": "Q2",

            "type": "multi_select",

            "text_fr": "Avez-vous une expérience spécifique avec les personnes âgées sur les sujets suivants ?",

            "options": [

              {

                "id": "Q2_O1",

                "label_fr": "Évaluation de l'autonomie (ADL / IADL)",

                "map_to_competences": ["GER_AUTONOMIE_DEPENDANCE"]

              },

              {

                "id": "Q2_O2",

                "label_fr": "Prévention des chutes",

                "map_to_competences": ["GER_AUTONOMIE_DEPENDANCE"]

              },

              {

                "id": "Q2_O3",

                "label_fr": "Repérage des troubles de la mémoire ou de l'orientation",

                "map_to_competences": ["GER_TROUBLES_COGNITIFS"]

              },

              {

                "id": "Q2_O4",

                "label_fr": "Suivi du comportement (agitation, retrait, troubles du sommeil)",

                "map_to_competences": ["GER_TROUBLES_COGNITIFS", "GER_SOUTIEN_PSYCHOSOCIAL"]

              },

              {

                "id": "Q2_O5",

                "label_fr": "Accompagnement des aidants familiaux",

                "map_to_competences": ["GER_SOUTIEN_PSYCHOSOCIAL", "COORD_AIDANTS"]

              }

            ]

          }

        ]

      },

      {

        "id": "S3",

        "label_fr": "Plaies, escarres et stomies",

        "questions": [

          {

            "id": "Q3",

            "type": "multi_select",

            "text_fr": "Quelles compétences avez-vous en plaies et cicatrisation ?",

            "options": [

              {

                "id": "Q3_O1",

                "label_fr": "Prise en charge des escarres",

                "map_to_competences": ["WOUND_ESCARRES"]

              },

              {

                "id": "Q3_O2",

                "label_fr": "Prise en charge des ulcères de jambe",

                "map_to_competences": ["WOUND_PLAIES_CHRONIQUES"]

              },

              {

                "id": "Q3_O3",

                "label_fr": "Pansements de plaies post-opératoires complexes",

                "map_to_competences": ["WOUND_PLAIES_CHRONIQUES"]

              },

              {

                "id": "Q3_O4",

                "label_fr": "Prise en charge de stomies (digestives ou urinaires)",

                "map_to_competences": ["WOUND_STOMATHERAPIE"]

              }

            ]

          }

        ]

      },

      {

        "id": "S4",

        "label_fr": "Maladies chroniques",

        "questions": [

          {

            "id": "Q4",

            "type": "multi_select",

            "text_fr": "Quelles maladies chroniques suivez-vous régulièrement ?",

            "options": [

              {

                "id": "Q4_O1",

                "label_fr": "Diabète (insuline, capteurs, glycémies)",

                "map_to_competences": ["CHRONIC_DIABETE"]

              },

              {

                "id": "Q4_O2",

                "label_fr": "Insuffisance cardiaque",

                "map_to_competences": ["CHRONIC_INSUFFISANCE_CARDIO_RESP"]

              },

              {

                "id": "Q4_O3",

                "label_fr": "Insuffisance respiratoire (O2, BPCO)",

                "map_to_competences": ["CHRONIC_INSUFFISANCE_CARDIO_RESP"]

              },

              {

                "id": "Q4_O4",

                "label_fr": "Oncologie (patients sous chimiothérapie)",

                "map_to_competences": ["CHRONIC_ONCOLOGIE"]

              }

            ]

          }

        ]

      },

      {

        "id": "S5",

        "label_fr": "Pratique avancée (IPA)",

        "questions": [

          {

            "id": "Q5",

            "type": "single_select",

            "text_fr": "Êtes-vous infirmier(ère) en pratique avancée (IPA) ?",

            "options": [

              {

                "id": "Q5_O1",

                "label_fr": "Oui",

                "map_to_competences": []

              },

              {

                "id": "Q5_O2",

                "label_fr": "Non",

                "map_to_competences": []

              }

            ]

          },

          {

            "id": "Q5B",

            "type": "multi_select",

            "text_fr": "Si oui, dans quels domaines exercez-vous en tant qu'IPA ?",

            "options": [

              {

                "id": "Q5B_O1",

                "label_fr": "Pathologies chroniques stabilisées",

                "map_to_competences": ["IPA_PATHOLOGIES_CHRONIQUES"]

              },

              {

                "id": "Q5B_O2",

                "label_fr": "Psychiatrie / santé mentale",

                "map_to_competences": ["IPA_PSYCHIATRIE"]

              },

              {

                "id": "Q5B_O3",

                "label_fr": "Oncologie / hémato-oncologie",

                "map_to_competences": ["IPA_ONCOLOGIE"]

              },

              {

                "id": "Q5B_O4",

                "label_fr": "Insuffisance rénale",

                "map_to_competences": ["IPA_INSUFFISANCE_RENALE"]

              },

              {

                "id": "Q5B_O5",

                "label_fr": "Urgences",

                "map_to_competences": ["IPA_URGENCES"]

              }

            ]

          }

        ]

      },

      {

        "id": "S6",

        "label_fr": "Coordination et parcours de soins",

        "questions": [

          {

            "id": "Q6",

            "type": "multi_select",

            "text_fr": "Participez-vous à la coordination de parcours de soins ?",

            "options": [

              {

                "id": "Q6_O1",

                "label_fr": "Organisation de sortie d'hôpital",

                "map_to_competences": ["COORD_SORTIE_HOPITAL"]

              },

              {

                "id": "Q6_O2",

                "label_fr": "Coordination en HAD (hospitalisation à domicile)",

                "map_to_competences": ["COORD_HAD"]

              },

              {

                "id": "Q6_O3",

                "label_fr": "Case management (gestion de cas complexes)",

                "map_to_competences": ["COORD_CASE_MANAGER"]

              },

              {

                "id": "Q6_O4",

                "label_fr": "Coordination avec les aidants familiaux",

                "map_to_competences": ["COORD_AIDANTS"]

              }

            ]

          }

        ]

      },

      {

        "id": "S7",

        "label_fr": "Télésanté et outils numériques",

        "questions": [

          {

            "id": "Q7",

            "type": "multi_select",

            "text_fr": "Utilisez-vous les outils numériques et la télésanté dans votre pratique ?",

            "options": [

              {

                "id": "Q7_O1",

                "label_fr": "Télésoins (visio, téléconsultation infirmière)",

                "map_to_competences": ["TELE_TELESOINS"]

              },

              {

                "id": "Q7_O2",

                "label_fr": "Télésurveillance médicale (capteurs, remontées de données)",

                "map_to_competences": ["TELE_TELESURVEILLANCE"]

              },

              {

                "id": "Q7_O3",

                "label_fr": "Dossiers ou applications numériques patients",

                "map_to_competences": ["TELE_OUTILS_NUMERIQUES"]

              }

            ]

          }

        ]

      }

    ]

  }

}


------------------------------------------------

📌 TYPESCRIPT : TYPES & ZOD (OBLIGATOIRE)


In /types/nurseNomenclature.ts, define:


  - Import the JSON:


    import nomenclature from "@/data/nomenclatureInfirmiers.json";


  - Type CompetenceCode inferred from the JSON:


    export type CompetenceCode =

      (typeof nomenclature)["families"][number]["competences"][number]["code"];


  - Define interfaces:

      - interface Competence (id, code, label_fr, description_fr, keywords_fr[])

      - interface Family

      - type QuestionType = "multi_select" | "single_select"

      - interface QuestionOption:


        interface QuestionOption {

          id: string;

          label_fr: string;

          map_to_competences: CompetenceCode[];

        }


      - interface Question

      - interface QuestionnaireSection

      - interface NurseNomenclature with:

          - version: string

          - context: string

          - families: Family[]

          - questionnaire: { language: string; sections: QuestionnaireSection[] }


In /types/nurseAnswers.ts, define:


  - Zod schema:


    import { z } from "zod";


    export const nurseAnswersSchema = z.record(

      z.string(),            // questionId

      z.array(z.string())    // optionIds

    );


    export type NurseAnswers = z.infer<typeof nurseAnswersSchema>;


------------------------------------------------

📌 LOGIQUE : buildNurseProfile()


In /logic/buildNurseProfile.ts, create:


  - Import types:


    import { CompetenceCode, NurseNomenclature } from "@/types/nurseNomenclature";

    import { NurseAnswers } from "@/types/nurseAnswers";


  - Define interface NurseProfile:


    export interface NurseProfile {

      id_infirmier: string;

      identite: {

        nom: string;

        prenom: string;

        adresse: string;

        ville: string;

        code_postal: string;

        mode_exercice: string[];

      };

      competences: Record<string, CompetenceCode[]>; // keyed by family.code: GEN, GER, WOUND...

      expertises_principales: string[];

      score_global_expertise: number;

      match_recommande_seniors: {

        autonomie: number;

        troubles_cognitifs: number;

        plaies: number;

        diabete: number;

        cardio_respiratoire: number;

        isolement_psychosocial: number;

      };

    }


  - Helper functions (in the same file):


    - collectCompetenceCodesFromAnswers(

        nomenclature: NurseNomenclature,

        answers: NurseAnswers

      ): CompetenceCode[]


      → iterate sections/questions/options, match optionIds in answers, accumulate all mapped competences (remove duplicates).


    - groupCompetencesByFamily(

        families: NurseNomenclature["families"],

        codes: CompetenceCode[]

      ): Record<string, CompetenceCode[]>


      → group by family.code (e.g. "GEN", "GER").


    - computeGlobalScore(codes: CompetenceCode[]): number


      → simple heuristic, for example:

          - base 60

          - add points depending on the number of distinct competences

          - cap the score at 100


    - computeSeniorMatchScores(

        codes: CompetenceCode[]

      ): {

        autonomie: number;

        troubles_cognitifs: number;

        plaies: number;

        diabete: number;

        cardio_respiratoire: number;

        isolement_psychosocial: number;

      }


      → simple rule-based mapping, examples:

          - if GER_AUTONOMIE_DEPENDANCE present → autonomie high (e.g. 80–100)

          - if GER_TROUBLES_COGNITIFS present → troubles_cognitifs high

          - if WOUND_ESCARRES or WOUND_PLAIES_CHRONIQUES present → plaies high

          - if CHRONIC_DIABETE present → diabete high

          - if CHRONIC_INSUFFISANCE_CARDIO_RESP present → cardio_respiratoire high

          - if GER_SOUTIEN_PSYCHOSOCIAL present → isolement_psychosocial high


    - buildExpertisesPrincipales(

        families: NurseNomenclature["families"],

        codes: CompetenceCode[]

      ): string[]


      → generate up to 4 human-readable bullet points like:

          - "Plaies complexes et escarres"

          - "Gérontologie – troubles cognitifs"

          - "Suivi des patients diabétiques"

          - etc.


  - Export function buildNurseProfile(params):


    interface BuildNurseProfileParams {

      id_infirmier?: string;

      nom: string;

      prenom: string;

      adresse: string;

      ville: string;

      code_postal: string;

      mode_exercice: string[];

      nomenclature: NurseNomenclature;

      answers: NurseAnswers;

    }


    export function buildNurseProfile({

      id_infirmier,

      nom,

      prenom,

      adresse,

      ville,

      code_postal,

      mode_exercice,

      nomenclature,

      answers,

    }: BuildNurseProfileParams): NurseProfile {

      const effectiveId = id_infirmier ?? `INF-${Date.now()}`;


      const codes = collectCompetenceCodesFromAnswers(nomenclature, answers);

      const competencesByFamily = groupCompetencesByFamily(

        nomenclature.families,

        codes

      );

      const score_global_expertise = computeGlobalScore(codes);

      const match_recommande_seniors = computeSeniorMatchScores(codes);

      const expertises_principales = buildExpertisesPrincipales(

        nomenclature.families,

        codes

      );


      return {

        id_infirmier: effectiveId,

        identite: {

          nom,

          prenom,

          adresse,

          ville,

          code_postal,

          mode_exercice,

        },

        competences: competencesByFamily,

        expertises_principales,

        score_global_expertise,

        match_recommande_seniors,

      };

    }


------------------------------------------------

📌 HOOK : useNurseQuestionnaire


In /hooks/useNurseQuestionnaire.ts:


Implement a hook that:


  - Receives nomenclature: NurseNomenclature.

  - Manages:

      - currentSectionIndex (0..n-1)

      - answers: NurseAnswers


Expose:


  interface UseNurseQuestionnaireResult {

    currentSection: QuestionnaireSection;

    currentSectionIndex: number;

    totalSections: number;

    answers: NurseAnswers;

    toggleOption: (questionId: string, optionId: string) => void; // for multi_select

    setSingle: (questionId: string, optionId: string) => void;    // for single_select

    nextSection: () => void;

    prevSection: () => void;

    isLast: boolean;

  }


The hook must:


  - Use React state for currentSectionIndex and answers.

  - For toggleOption:

      - if optionId not in array -> add it

      - if already present -> remove it

  - For setSingle:

      - replace the question’s array by [optionId].

  - Prevent going out of bounds on nextSection / prevSection (clamp indices).


------------------------------------------------

📌 COMPONENTS UI (EN FRANÇAIS)


NurseOnboardingWizard.tsx (client component)


Responsibilities:


  - Render identity fields:

      - Inputs (in French) for:

          - “Nom”

          - “Prénom”

          - “Adresse”

          - “Ville”

          - “Code postal”

      - Buttons or chips for “Mode d'exercice”:


        const MODES_EXERCICE = ["libéral", "domicile", "HAD", "hôpital", "EHPAD"];


  - Use useNurseQuestionnaire(nomenclature) to:

      - Show current section label.

      - Show questions and options via QuestionBlock.


  - Navigation buttons:

      - Left: “← Précédent”

      - Right: “Continuer →” or “Valider mon profil” for the last step.


  - On last step:

      - Validate answers with nurseAnswersSchema.

      - Check minimal identity fields (nom, prenom, mode_exercice non vides).

      - Call POST /api/infirmiers/profil.

      - Once response is ok, show a final screen with the JSON profile.


UI style (Tailwind examples):


  - Container:

      - max-w-xl mx-auto p-4 space-y-4 border rounded-2xl shadow

  - Buttons:

      - pill-style classes, e.g. px-3 py-1 rounded-full text-sm

      - Selected state: e.g. bg-blue-600 text-white

      - Unselected state: e.g. bg-white border text-gray-700


Final “Profil généré” screen should:


  - Display title “Profil généré”.

  - Show the formatted JSON (e.g. <pre><code>{JSON.stringify(profile, null, 2)}</code></pre>).


QuestionBlock.tsx


  - Props:


    interface QuestionBlockProps {

      question: Question;

      selected: string[];

      onToggle: (optionId: string) => void;

      onSelectSingle?: (optionId: string) => void;

    }


  - Render:

      - Question text as a paragraph with font-medium.

      - For each option:

          - A button with the option label in French.

          - Visual state selected / unselected using Tailwind.

          - For multi_select: onClick calls onToggle(option.id).

          - For single_select: onClick calls onSelectSingle?.(option.id) if provided.


------------------------------------------------

📌 PAGE : /app/infirmiers/onboarding/page.tsx


  - Import nomenclature from /data/nomenclatureInfirmiers.json.

  - Render NurseOnboardingWizard by passing the nomenclature.

  - Make sure the wizard uses "use client" at the top of its file, or mark page.tsx as a client component if needed.


------------------------------------------------

📌 API ROUTE : /app/api/infirmiers/profil/route.ts


Implement POST handler:


  - Parse JSON body.

  - Validate answers with nurseAnswersSchema.

  - Validate minimal fields: nom, prenom, mode_exercice (non-empty).

  - Import nomenclatureInfirmiers.json statically.

  - Call buildNurseProfile with:

      - nom, prenom, adresse, ville, code_postal, mode_exercice

      - nomenclature

      - answers

  - Return NextResponse.json({ ok: true, profile }).


No database, no external HTTP calls.


Just compute and return a JSON object.


------------------------------------------------

📸 SCREENSHOTS HD (RÉFÉRENCES STATIQUES)


Create references for three static HD PNG files under /public/screenshots with the exact names:


  - /public/screenshots/01-identite-etape-1.png

      - Represents the screen where the nurse fills:

          - Nom

          - Prénom

          - Adresse

          - Ville

          - Code postal

          - Mode d'exercice

          - And sees the first section “Soins techniques et surveillance”.


  - /public/screenshots/02-gerontologie-etape-2.png

      - Represents the screen showing the section:

          - “Personnes âgées et gérontologie”

          - With some options selected (e.g. autonomie, troubles cognitifs, aidants).


  - /public/screenshots/03-profil-genere.png

      - Represents the final screen after submission:

          - Title “Profil généré”.

          - Display of the JSON profile (formatted).


If the environment used by Agent-3 cannot actually generate PNG binary files, it is sufficient to:


  - Assume these files exist at these paths,

  - Reference them in the code (for example with <Image> or <img>),

  - Document them in the README so that real screenshots can be added manually later.


------------------------------------------------

🧪 TESTS & VALIDATION (INTENTION)


  - Provide npm run dev, npm run build, and npm run lint scripts.

  - Write code so that, in a typical Next.js + TypeScript + Tailwind setup:

      - The wizard works from section 1 to section 7.

      - Selecting options correctly updates the answers state.

      - The API /api/infirmiers/profil returns a valid JSON profile.


------------------------------------------------

📄 README


Create a minimal README.md at project root, in FRENCH, explaining:


  - Objectif de la WebApp.

  - Stack technique utilisée.

  - Comment lancer le projet (installation, npm install, npm run dev).

  - Où trouver les screenshots (public/screenshots).

  - Un exemple de payload JSON retourné par l’API (exemple de profil).

Si tu veux, après le premier run d’Agent-3, tu pourras me coller la structure générée (ou le zip) et on fera ensemble le diff entre le résultat et ce cahier des charges pour voir ce qui manque ou ce qui est à corriger.












ChatGPT peut commettre des erreurs. Il est recommandé de vérifier les informations importantes. Voir les préférences en matière de cookies.