|
|
<!DOCTYPE html> |
|
|
<html lang="fr"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>PRD v4.0 (Final) - Plateforme d'Analyse de CV</title> |
|
|
<style> |
|
|
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&family=Google+Sans:wght@400;500;700&display=swap'); |
|
|
|
|
|
:root { |
|
|
--google-blue: #1a73e8; |
|
|
--google-red: #ea4335; |
|
|
--google-green: #34a853; |
|
|
--google-yellow: #fbbc05; |
|
|
--text-primary: #202124; |
|
|
--text-secondary: #5f6368; |
|
|
--bg-light: #f8f9fa; |
|
|
--bg-medium: #e8f0fe; |
|
|
--border-color: #dadce0; |
|
|
} |
|
|
|
|
|
* { box-sizing: border-box; margin: 0; padding: 0; } |
|
|
|
|
|
body { |
|
|
font-family: 'Roboto', 'Google Sans', sans-serif; |
|
|
display: flex; |
|
|
background-color: #fff; |
|
|
color: var(--text-primary); |
|
|
line-height: 1.7; |
|
|
} |
|
|
|
|
|
.sidebar { |
|
|
flex: 0 0 280px; |
|
|
background-color: var(--bg-light); |
|
|
border-right: 1px solid var(--border-color); |
|
|
height: 100vh; |
|
|
position: fixed; |
|
|
top: 0; |
|
|
left: 0; |
|
|
padding: 24px; |
|
|
overflow-y: auto; |
|
|
} |
|
|
|
|
|
.sidebar-header { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
gap: 12px; |
|
|
margin-bottom: 24px; |
|
|
padding-bottom: 16px; |
|
|
border-bottom: 1px solid var(--border-color); |
|
|
} |
|
|
|
|
|
.sidebar-header .icon { font-size: 24px; } |
|
|
.sidebar-header h2 { font-size: 18px; color: var(--google-blue); font-family: 'Google Sans', sans-serif; border: none; padding: 0; margin: 0; } |
|
|
|
|
|
.sidebar nav ul { list-style: none; } |
|
|
.sidebar nav li a { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
gap: 10px; |
|
|
color: var(--text-secondary); |
|
|
text-decoration: none; |
|
|
padding: 12px 15px; |
|
|
border-radius: 20px; |
|
|
margin-bottom: 8px; |
|
|
font-weight: 500; |
|
|
transition: background-color 0.2s ease, color 0.2s ease; |
|
|
} |
|
|
.sidebar nav li a:hover { background-color: #e9ecef; color: var(--text-primary); } |
|
|
.sidebar nav li a.active { background-color: var(--bg-medium); color: var(--google-blue); font-weight: 700; } |
|
|
|
|
|
.main-content { margin-left: 280px; flex-grow: 1; padding: 32px 64px; } |
|
|
section { padding-top: 60px; margin-bottom: 40px; scroll-margin-top: 60px; } |
|
|
#header { padding-top: 0; } |
|
|
|
|
|
h1 { font-family: 'Google Sans', sans-serif; font-size: 32px; margin-bottom: 8px; font-weight: 700; } |
|
|
h1 + p { color: var(--text-secondary); font-size: 18px; margin-bottom: 24px; } |
|
|
h2 { font-family: 'Google Sans', sans-serif; font-size: 24px; font-weight: 500; color: var(--text-primary); border-bottom: 2px solid var(--google-blue); padding-bottom: 8px; margin-bottom: 24px; display: flex; align-items: center; gap: 10px; } |
|
|
h3 { font-family: 'Google Sans', sans-serif; font-size: 20px; margin-top: 24px; margin-bottom: 12px; color: var(--text-primary); } |
|
|
h4 { font-family: 'Roboto', sans-serif; font-size: 18px; font-weight: 500; color: var(--text-primary); margin-top: 16px; display: flex; align-items: center; gap: 8px; } |
|
|
|
|
|
blockquote { border-left: 4px solid var(--google-yellow); padding: 16px 24px; margin: 24px 0; background-color: #fffbe6; font-size: 16px; font-style: italic; font-weight: 400; border-radius: 0 8px 8px 0; } |
|
|
|
|
|
table { width: 100%; border-collapse: collapse; margin-top: 24px; box-shadow: 0 2px 8px rgba(0,0,0,0.06); border: 1px solid var(--border-color); border-radius: 8px; overflow: hidden; } |
|
|
th, td { text-align: left; padding: 16px; border-bottom: 1px solid var(--border-color); } |
|
|
th { background-color: var(--bg-light); font-weight: 500; font-size: 14px; text-transform: uppercase; color: var(--text-secondary); } |
|
|
tr:last-child td { border-bottom: none; } |
|
|
td ul { padding-left: 20px; margin-top: 5px; } |
|
|
|
|
|
.collapsible { background-color: #fff; color: var(--text-primary); cursor: pointer; padding: 18px; width: 100%; border: 1px solid var(--border-color); text-align: left; outline: none; font-size: 18px; font-weight: 500; transition: background-color 0.2s; margin-top: 16px; border-radius: 8px; display: flex; justify-content: space-between; align-items: center; font-family: 'Google Sans', sans-serif; } |
|
|
.collapsible:hover, .collapsible.active { background-color: var(--bg-light); border-color: var(--google-blue); } |
|
|
.collapsible::after { content: '▼'; color: var(--google-blue); font-weight: bold; transition: transform 0.2s ease-in-out; } |
|
|
.collapsible.active::after { transform: rotate(-180deg); } |
|
|
.content { padding: 0 18px; max-height: 0; overflow: hidden; transition: max-height 0.4s ease-out; background-color: white; border: 1px solid var(--border-color); border-top: none; border-radius: 0 0 8px 8px; } |
|
|
.content > * { margin-top: 24px; margin-bottom: 24px; } |
|
|
|
|
|
.new-feature-badge { background-color: var(--google-yellow); color: var(--text-primary); font-size: 12px; font-weight: 700; padding: 4px 10px; border-radius: 12px; margin-left: 10px; } |
|
|
|
|
|
.grid-container { |
|
|
display: grid; |
|
|
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); |
|
|
gap: 24px; |
|
|
margin-top: 24px; |
|
|
} |
|
|
.grid-item { |
|
|
background-color: var(--bg-light); |
|
|
padding: 24px; |
|
|
border-radius: 8px; |
|
|
border: 1px solid var(--border-color); |
|
|
} |
|
|
.grid-item ul { |
|
|
list-style-type: none; |
|
|
padding: 0; |
|
|
margin-top: 10px; |
|
|
} |
|
|
.grid-item li { |
|
|
margin-bottom: 10px; |
|
|
} |
|
|
|
|
|
footer { margin-top: 60px; padding-top: 24px; border-top: 1px solid var(--border-color); font-size: 14px; color: var(--text-secondary); text-align: center; } |
|
|
</style> |
|
|
</head> |
|
|
<body> |
|
|
|
|
|
<aside class="sidebar"> |
|
|
<div class="sidebar-header"> |
|
|
<span class="icon">📄</span> |
|
|
<h2>Analyse de CV</h2> |
|
|
</div> |
|
|
<nav> |
|
|
<ul> |
|
|
<li><a href="#header" class="active">🏠 Mission & Guide</a></li> |
|
|
<li><a href="#portee">⚙️ Portée Fonctionnelle</a></li> |
|
|
<li><a href="#architecture">🛠️ Architecture Technique</a></li> |
|
|
<li><a href="#non-fonctionnel">🛡️ Exigences Non-Fonctionnelles</a></li> |
|
|
<li><a href="#roadmap">🗺️ Roadmap</a></li> |
|
|
<li><a href="#kpis">📈 KPIs & Succès</a></li> |
|
|
</ul> |
|
|
</nav> |
|
|
</aside> |
|
|
|
|
|
<main class="main-content"> |
|
|
<section id="header"> |
|
|
<h1>Plateforme d’Analyse Automatisée des CV Auditeurs</h1> |
|
|
<p>PRD Version 4.0 (Final) – Mis à jour le 28 juillet 2025</p> |
|
|
|
|
|
<h2>1. Mission de l'Outil & Guide d'Utilisation</h2> |
|
|
<p>La mission de cet outil est de fournir aux directeurs de site un moyen **simple, rapide et standardisé** pour effectuer une première évaluation de CV. Il vise à traduire les exigences complexes des référentiels en un rapport clair et actionnable, facilitant la communication avec le siège et accélérant le processus de recrutement.</p> |
|
|
|
|
|
<h3>Comment utiliser cet outil ?</h3> |
|
|
<div class="grid-container"> |
|
|
<div class="grid-item"> |
|
|
<h4><span style="color:var(--google-blue);">🔧</span> Configuration</h4> |
|
|
<ul> |
|
|
<li><strong>Clé API :</strong> Saisissez votre clé API Groq personnelle dans le panneau latéral.</li> |
|
|
<li><strong>Modèle d'IA :</strong> Sélectionnez le moteur d'IA à utiliser en fonction du besoin (précision vs. vitesse).</li> |
|
|
</ul> |
|
|
</div> |
|
|
<div class="grid-item"> |
|
|
<h4><span style="color:var(--google-red);">🔍</span> Analyse</h4> |
|
|
<ul> |
|
|
<li><strong>Téléchargement :</strong> Uploadez un CV au format PDF.</li> |
|
|
<li><strong>Sélection :</strong> Choisissez le référentiel GFSI applicable pour ce candidat.</li> |
|
|
<li><strong>Lancement :</strong> Cliquez sur le bouton "Analyser le CV".</li> |
|
|
</ul> |
|
|
</div> |
|
|
<div class="grid-item"> |
|
|
<h4><span style="color:var(--google-green);">📊</span> Résultats</h4> |
|
|
<ul> |
|
|
<li><strong>Consultation :</strong> Visualisez le rapport détaillé directement dans l'interface.</li> |
|
|
<li><strong>Exploration :</strong> Naviguez par section (Qualifications, Expérience, etc.) pour voir les détails.</li> |
|
|
<li><strong>Export :</strong> Téléchargez un rapport complet et professionnel au format HTML.</li> |
|
|
</ul> |
|
|
</div> |
|
|
</div> |
|
|
<blockquote><strong>Astuce :</strong> Plus le document est clairement formaté (sans images superflues, avec des titres de section clairs), meilleure et plus rapide sera l'analyse de l'IA.</blockquote> |
|
|
</section> |
|
|
|
|
|
<section id="portee"> |
|
|
<h2><span style="color: var(--google-blue);">⚙️</span>Portée Fonctionnelle Détaillée</h2> |
|
|
<p>La plateforme s'articule autour de quatre modules interdépendants, formant un écosystème complet.</p> |
|
|
|
|
|
<button type="button" class="collapsible">Module 1 : Interface Utilisateur & Expérience</button> |
|
|
<div class="content"> |
|
|
<h4>1.1. Barre Latérale de Configuration Dynamique</h4> |
|
|
<ul> |
|
|
<li><strong>Gestion de l'API :</strong> Champ de saisie sécurisé (type `password`) pour la clé API Groq. La clé est stockée dans l'état de la session pour la durée d'utilisation, elle n'est jamais sauvegardée en clair.</li> |
|
|
<li><strong>Sélecteur de Modèle d'IA :</strong> Menu déroulant permettant de choisir entre plusieurs modèles d'IA (ex: `Llama 3.3 70B` pour la précision, `Llama 3.1 8B` pour la vitesse), offrant un contrôle direct sur le compromis performance/coût.</li> |
|
|
<li><strong>Options Techniques :</strong> Case à cocher pour un "Mode Debug" qui affiche les charges utiles JSON brutes envoyées et reçues de l'API, essentiel pour le dépannage.</li> |
|
|
</ul> |
|
|
<h4>1.2. Panneau d'Analyse Principal</h4> |
|
|
<ul> |
|
|
<li><strong>Upload de Fichiers :</strong> Zone de téléversement claire pour les CV au format PDF, avec des aides contextuelles sur les formats supportés et la taille maximale.</li> |
|
|
<li><strong>Sélecteur de Référentiel :</strong> Menu déroulant peuplé dynamiquement à partir des fichiers de configuration JSON présents sur le serveur.</li> |
|
|
<li><strong>Internationalisation (I18N) <span class="new-feature-badge">Nouveau</span> :</strong> L'ensemble des textes de l'interface est géré via un dictionnaire de traduction (FR/EN), permettant une utilisation fluide dans un contexte international.</li> |
|
|
</ul> |
|
|
</div> |
|
|
|
|
|
<button type="button" class="collapsible">Module 2 : Moteur d'Analyse à Double Logique</button> |
|
|
<div class="content"> |
|
|
<p>Le cœur de la plateforme est capable d'interpréter les référentiels de deux manières distinctes pour allier précision moderne et compatibilité avec l'existant.</p> |
|
|
<h4>2.1. Analyse Granulaire (Logique par défaut)</h4> |
|
|
<p>Ce mode utilise un "mega-prompt" sophistiqué pour forcer l'IA à agir comme un expert en conformité méticuleux.</p> |
|
|
<ul> |
|
|
<li><strong>Instruction de Rôle :</strong> Le prompt assigne à l'IA le rôle d' "Expert en conformité GFSI".</li> |
|
|
<li><strong>Format de Sortie Imposé :</strong> La réponse doit obligatoirement être un JSON structuré, minimisant les hallucinations et facilitant le parsing.</li> |
|
|
<li><strong>Analyse Exigence par Exigence :</strong> Le prompt liste chaque exigence du référentiel sélectionné, forçant l'IA à fournir une évaluation pour chacune.</li> |
|
|
<li><strong>Exigence de Justification :</strong> Pour chaque évaluation, l'IA est instruite de trouver et de **citer textuellement** les passages pertinents du CV (<code>candidate_evidence</code>).</li> |
|
|
<li><strong>Auto-Évaluation de l'IA :</strong> Le modèle doit fournir un <code>confidence_score</code> (de 0.0 à 1.0) sur sa propre évaluation, permettant de mesurer la fiabilité de chaque point.</li> |
|
|
</ul> |
|
|
<h4>2.2. Analyse Traditionnelle (Mode de Compatibilité)</h4> |
|
|
<p>Pour les anciens fichiers de référentiels ne suivant pas la nouvelle structure, un prompt plus simple est utilisé, assurant que l'application ne tombe pas en panne et peut continuer à analyser ces cas de figure.</p> |
|
|
</div> |
|
|
|
|
|
<button type="button" class="collapsible">Module 3 : Reporting et Visualisation des Données</button> |
|
|
<div class="content"> |
|
|
<h4>3.1. Affichage à l'Écran (Post-Analyse)</h4> |
|
|
<ul> |
|
|
<li><strong>Tableau de Bord Synthétique :</strong> Affichage en haut de page de métriques clés (Total, Conformes, Partiels, Non-conformes) et d'un taux de conformité global.</li> |
|
|
<li><strong>Verdict Visuel :</strong> Une boîte de recommandation finale (ex: "RECOMMANDÉ") utilise des couleurs vives (vert, jaune, rouge) pour un impact immédiat.</li> |
|
|
<li><strong>Analyse Qualitative :</strong> Trois colonnes distinctes pour les "Forces Principales", les "Lacunes Critiques" et les "Opportunités de Développement".</li> |
|
|
<li><strong>Exploration Détaillée :</strong> Les exigences sont regroupées par catégories dans des onglets. Au sein de chaque onglet, chaque exigence est présentée dans une boîte extensible ("expander"), permettant à l'utilisateur de se concentrer sur les points d'intérêt.</li> |
|
|
</ul> |
|
|
<h4>3.2. Rapport Exportable</h4> |
|
|
<ul> |
|
|
<li><strong>Génération HTML :</strong> Création d'un fichier HTML complet, autonome et stylisé, pouvant être facilement partagé, imprimé ou archivé.</li> |
|
|
<li><strong>Branding et Clarté :</strong> Le rapport inclut un en-tête professionnel, la date de l'analyse, et une mise en page claire utilisant des tableaux et des codes couleur pour une lisibilité maximale.</li> |
|
|
</ul> |
|
|
</div> |
|
|
|
|
|
<button type="button" class="collapsible">Module 4 : Administration et Gestion de Contenu <span class="new-feature-badge">Mise à jour majeure</span></button> |
|
|
<div class="content"> |
|
|
<p>Cette section, protégée par mot de passe, transforme l'application d'un outil statique à une plateforme de connaissance vivante.</p> |
|
|
<h4>4.1. Assistant de Création de Référentiels via IA</h4> |
|
|
<p>C'est la fonctionnalité la plus innovante, permettant une autonomie complète du siège :</p> |
|
|
<ol> |
|
|
<li>L'administrateur **colle le texte brut** d'un nouveau standard dans une zone de texte.</li> |
|
|
<li>Il clique sur <strong>"Générer le JSON"</strong>.</li> |
|
|
<li>L'application envoie ce texte à l'API Groq avec un prompt spécifique lui demandant de **structurer l'information** selon le format JSON requis par l'application (avec catégories, poids, exigences critiques, etc.).</li> |
|
|
<li>L'IA retourne un objet JSON propre et formaté.</li> |
|
|
</ol> |
|
|
<h4>4.2. Système de Gestion de Contenu (CMS) Simplifié</h4> |
|
|
<ul> |
|
|
<li><strong>Prévisualisation :</strong> Le JSON généré est affiché à l'écran pour validation par l'administrateur.</li> |
|
|
<li><strong>Sauvegarde en un Clic :</strong> L'administrateur nomme le fichier et clique sur "Sauvegarder". Le fichier est alors écrit sur le disque du serveur.</li> |
|
|
<li><strong>Rechargement à la Volée :</strong> L'application est conçue pour recharger dynamiquement la liste des référentiels disponibles, rendant le nouveau standard immédiatement utilisable sans redémarrage ni intervention technique.</li> |
|
|
</ul> |
|
|
</div> |
|
|
</section> |
|
|
|
|
|
<section id="architecture"> |
|
|
<h2><span style="color: var(--google-red);">🛠️</span>Architecture Technique et Options d'Évolution</h2> |
|
|
<h3>Architecture Actuelle (MVP Streamlit)</h3> |
|
|
<p>L'application est un monolithe intelligent basé sur Streamlit qui gère à la fois le frontend et le backend.</p> |
|
|
<pre style="background-color: var(--bg-light); padding: 15px; border-radius: 8px; font-size: 14px;"><code> |
|
|
Utilisateur (Directeur/Admin) |
|
|
| |
|
|
|-- Navigateur Web |
|
|
| |
|
|
[ Serveur / Machine Virtuelle ] |
|
|
| |
|
|
|-- Application Streamlit (Python) |
|
|
| | |
|
|
| |-- 1. Gestion UI & Session State |
|
|
| | |
|
|
| |-- 2. Logique Métier (extract_text, build_prompt) |
|
|
| | | |
|
|
| | '-----> [ API Externe : Groq Cloud ] |
|
|
| | |-- LLM (Llama, etc.) |
|
|
| | |
|
|
| '-- 3. Accès Fichiers Locaux |
|
|
| | |
|
|
| '-----> /referentiels/*.json (Lecture/Écriture) |
|
|
</code></pre> |
|
|
|
|
|
<h3>Options d'Évolution pour la Scalabilité</h3> |
|
|
<table> |
|
|
<thead> |
|
|
<tr><th>Option</th><th>Description de la Stack</th><th>Avantages</th><th>Inconvénients</th><th>Cas d'usage Idéal</th></tr> |
|
|
</thead> |
|
|
<tbody> |
|
|
<tr> |
|
|
<td><strong>A. MVP Actuel</strong><br>(Streamlit)</td> |
|
|
<td>Monolithe Python avec Streamlit.</td> |
|
|
<td><ul><li>Vitesse de développement imbattable</li><li>Écosystème unique (Python)</li><li>Faible coût initial</li></ul></td> |
|
|
<td><ul><li>Scalabilité horizontale limitée</li><li>Personnalisation de l'UI contrainte</li><li>Gestion fine des droits complexe</li></ul></td> |
|
|
<td>Proof of Concept, déploiement interne rapide pour < 50 utilisateurs.</td> |
|
|
</tr> |
|
|
<tr> |
|
|
<td><strong>B. Scale-Up API-First</strong><br>(Découplé)</td> |
|
|
<td>Backend: <strong>FastAPI/Flask</strong> (Python)<br>Frontend: <strong>Vue.js/React</strong> (JavaScript)</td> |
|
|
<td><ul><li>API REST robuste et réutilisable</li><li>Expérience utilisateur riche et sur-mesure</li><li>Scalabilité horizontale claire</li><li>Équipes spécialisées (front/back)</li></ul></td> |
|
|
<td><ul><li>Développement plus long et complexe</li><li>Nécessite des compétences multiples (Py/JS)</li><li>Déploiement en deux parties</li></ul></td> |
|
|
<td>Besoin d'intégrations tierces (SIRH), application mobile future, UI complexe, > 50 utilisateurs.</td> |
|
|
</tr> |
|
|
<tr> |
|
|
<td><strong>C. Enterprise "Tout-en-Un"</strong><br>(Django)</td> |
|
|
<td>Framework <strong>Django</strong> (Python) avec son système de templates et son ORM.</td> |
|
|
<td><ul><li>Sécurité et robustesse éprouvées</li><li>Interface d'admin générée automatiquement</li><li>ORM puissant pour la BDD</li><li>"Piles incluses" (authentification, etc.)</li></ul></td> |
|
|
<td><ul><li>Plus rigide et "cadré"</li><li>Le frontend est moins dynamique qu'avec un framework JS dédié</li><li>Plus lourd pour une application simple</li></ul></td> |
|
|
<td>L'application devient un système de gestion central avec des règles métier complexes et une forte dépendance à une base de données relationnelle.</td> |
|
|
</tr> |
|
|
</tbody> |
|
|
</table> |
|
|
</section> |
|
|
|
|
|
<section id="non-fonctionnel"> |
|
|
<h2><span style="color: var(--google-yellow);">🛡️</span>Exigences Non-Fonctionnelles</h2> |
|
|
<table> |
|
|
<thead><tr><th>Catégorie</th><th>Spécification Détaillée (déduite du code v25.12)</th></tr></thead> |
|
|
<tbody> |
|
|
<tr><td><strong>Performance</strong></td><td>Temps de réponse interactif grâce à des spinners Streamlit. L'analyse principale, dépendante de l'API, doit viser un retour en moins de 30 secondes pour une expérience fluide.</td></tr> |
|
|
<tr><td><strong>Sécurité</strong></td><td><strong>Confidentialité API :</strong> Utilisation de `st.session_state` et input de type `password` pour la clé. <strong>Confidentialité Données :</strong> Instruction de l'IA via le prompt pour l'anonymisation. <strong>Contrôle d'accès :</strong> Section Admin protégée par un mot de passe non-stocké.</td></tr> |
|
|
<tr><td><strong>Maintenabilité</strong></td><td>Code modulaire avec des fonctions dédiées (extraction, analyse, affichage, rapport). La logique des référentiels est externalisée dans des fichiers JSON, permettant des mises à jour sans toucher au code source.</td></tr> |
|
|
<tr><td><strong>Internationalisation (I18N)</strong></td><td>Présence d'un dictionnaire `TRANSLATIONS` pour le support du Français et de l'Anglais, rendant l'application prête pour un déploiement global.</td></tr> |
|
|
<tr><td><strong>Robustesse & Gestion d'Erreurs</strong></td><td>Le code gère explicitement : les PDF invalides (vides, protégés), les clés API incorrectes, les erreurs de connexion à l'API Groq, et les échecs de parsing JSON de la réponse, affichant des messages d'erreur clairs à l'utilisateur.</td></tr> |
|
|
<tr><td><strong>Configurabilité & Extensibilité</strong></td><td>L'application est hautement configurable : l'utilisateur choisit le modèle d'IA. Elle est extensible : les administrateurs peuvent ajouter de nouveaux référentiels de manière autonome via l'interface, sans intervention de l'équipe de développement.</td></tr> |
|
|
</tbody> |
|
|
</table> |
|
|
</section> |
|
|
|
|
|
<section id="roadmap"> |
|
|
<h2><span style="color: var(--google-green);">🗺️</span>Roadmap d'Évolution</h2> |
|
|
<table> |
|
|
<thead> |
|
|
<tr><th>Phase</th><th>Durée</th><th>Livrables Clés</th></tr> |
|
|
</thead> |
|
|
<tbody> |
|
|
<tr> |
|
|
<td><strong>1 – MVP Avancé</strong><br>(Statut : Terminé)</td> |
|
|
<td>0-3 mois</td> |
|
|
<td>Workflow complet d'analyse, support PDF, moteur d'analyse granulaire, rapport HTML, <strong>mode admin avec assistant IA, support multilingue (FR/EN)</strong>.</td> |
|
|
</tr> |
|
|
<tr> |
|
|
<td><strong>2 – Améliorations</strong><br>(À venir)</td> |
|
|
<td>4-9 mois</td> |
|
|
<td>Tableau de bord de statistiques pour les admins, support des formats <code>.docx</code> et <code>.txt</code>, fonctionnalité d'analyse comparative (1 CV vs plusieurs référentiels), historisation des analyses dans une base de données.</td> |
|
|
</tr> |
|
|
<tr> |
|
|
<td><strong>3 – Évolution</strong><br>(Vision à long terme)</td> |
|
|
<td>10-18 mois</td> |
|
|
<td>Mise en place d'une API REST pour intégration avec des SIRH, module de suivi du plan de formation pour les candidats recrutés, gestion avancée des droits et des équipes.</td> |
|
|
</tr> |
|
|
</tbody> |
|
|
</table> |
|
|
</section> |
|
|
|
|
|
<section id="kpis"> |
|
|
<h2><span style="color: var(--google-blue);">📈</span>KPIs & Critères de Succès</h2> |
|
|
<ol> |
|
|
<li><strong>Taux d'Adoption Utilisateur :</strong> Pourcentage de directeurs de site utilisant activement l'outil chaque mois. <strong>Cible : > 80%</strong>.</li> |
|
|
<li><strong>Efficacité du Processus :</strong> Réduction du temps moyen entre la réception d'un CV et la décision de pré-qualification par le siège. <strong>Cible : -75%</strong>.</li> |
|
|
<li><strong>Fiabilité de l'Analyse :</strong> Pourcentage de rapports générés jugés "fiables et utiles" (ne nécessitant pas de reprise manuelle complète) par les experts du siège. <strong>Cible : > 90%</strong>.</li> |
|
|
<li><strong>Satisfaction Utilisateur (NPS) :</strong> Score Net Promoter Score collecté auprès des directeurs de site et des administrateurs. <strong>Cible : > +40</strong>.</li> |
|
|
</ol> |
|
|
</section> |
|
|
|
|
|
<footer> |
|
|
<p>Fin du document PRD v4.0 (Final)</p> |
|
|
</footer> |
|
|
</main> |
|
|
|
|
|
<script> |
|
|
const collapsibles = document.querySelectorAll(".collapsible"); |
|
|
collapsibles.forEach(item => { |
|
|
item.addEventListener("click", function() { |
|
|
this.classList.toggle("active"); |
|
|
const content = this.nextElementSibling; |
|
|
if (content.style.maxHeight) { |
|
|
content.style.maxHeight = null; |
|
|
} else { |
|
|
content.style.maxHeight = content.scrollHeight + 40 + "px"; |
|
|
} |
|
|
}); |
|
|
}); |
|
|
|
|
|
const sections = document.querySelectorAll("section"); |
|
|
const navLinks = document.querySelectorAll(".sidebar nav a"); |
|
|
window.addEventListener("scroll", () => { |
|
|
let current = ""; |
|
|
sections.forEach(section => { |
|
|
const sectionTop = section.offsetTop; |
|
|
if (pageYOffset >= sectionTop - 70) { |
|
|
current = section.getAttribute("id"); |
|
|
} |
|
|
}); |
|
|
|
|
|
navLinks.forEach(a => { |
|
|
a.classList.remove("active"); |
|
|
if (a.getAttribute("href") === "#" + current) { |
|
|
a.classList.add("active"); |
|
|
} |
|
|
}); |
|
|
}); |
|
|
</script> |
|
|
</body> |
|
|
</html> |