2 Commits
Author SHA1 Message Date
Coyaud Anthony e4271825f6 merge: intègre fix/coherence-pages-legales-et-documentation dans dev 2026-08-17 12:50:45 +02:00
Coyaud AnthonyandClaude Opus 5 7508f86c8c fix(contenu): aligne les pages légales et la documentation sur la réalité livrée
Plusieurs pages statiques affirmaient des faits contredits par le code, le dump
SQL ou le dossier de projet. Corrections vérifiées une à une contre les sources.

Documentation :
- React 18 -> React 19 (package.json : react ^19.2.5)
- token « stocké en sessionStorage » -> localStorage (api.js, AuthContext.jsx),
  avec HS256 / 60 min / sans refresh token
- « jobs CRON » -> jobs SQL Server Agent (aucun CRON dans le dump)
- « Infrastructure NEXERN / hébergement souverain » -> conteneurs Docker derrière
  un reverse proxy ; NEXERN redevient la cible métier
- suppression du monitoring « Infocentre » qui n'existe pas : la nomenclature
  livrée compte 6 monitorings Sage et 1 CRM, répartis sur les pôles Contrat (5)
  et Fournisseur (2)
- « contrastes conformes » -> objectif WCAG 2.1 AA, audit des contrastes à mener
- rôle « Administrateur » -> « Admin » (valeur réelle de l'énumération)

Mentions légales et CGU :
- éditeur : projet académique de COYAUD Anthony ; XEFI SA devient commanditaire.
  L'instance de démonstration n'est ni éditée ni exploitée par XEFI SA
- hébergeur : environnement de démonstration auto-hébergé, NEXERN en cible métier
- section Cookies : l'application ne dépose aucun cookie. La session et le choix
  de consentement sont en localStorage, et aucun traceur tiers n'est utilisé
- conservation : la purge à 24 mois porte sur l'historique de monitoring
  (TABLE_FINAL) ; la mention « 24 mois à compter de la dernière connexion »
  n'était adossée à aucun traitement
- droits RGPD : mise en avant du libre-service réellement implémenté
  (GET /me/data-export art. 20, DELETE /me art. 17)
- accessibilité : la conformité WCAG 2.1 AA devient un objectif, avec la liste
  des mesures en place et celle des points restant à traiter
- contact dpo@xefi.fr remplacé par a.coyaud@xefi.fr (6 occurrences)
- CGV et modération de commentaires déclarées explicitement sans objet

Build :
- vite.config.js : build.target déclaré explicitement (chrome111, edge111,
  firefox114, safari16.4, ios16.4) au lieu de dépendre du défaut de Vite, pour
  que la matrice de compatibilité annoncée dans le README soit tracée au dépôt

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 12:50:07 +02:00
4 changed files with 126 additions and 57 deletions
+60 -32
View File
@@ -27,14 +27,17 @@ export default function CGU() {
<h2 id="art1">Article 1 — Objet et champ d'application</h2> <h2 id="art1">Article 1 — Objet et champ d'application</h2>
<p> <p>
Les présentes Conditions Générales d'Utilisation (ci-après « CGU ») régissent l'accès et Les présentes Conditions Générales d'Utilisation (ci-après « CGU ») régissent l'accès et
l'utilisation de la plateforme <strong>Data Sentinel</strong>, outil interne de monitoring l'utilisation de la plateforme <strong>Data Sentinel</strong>, outil de monitoring de la
de la qualité des données développé par COYAUD Anthony pour le compte de <strong>XEFI SA</strong> qualité des données développé par <strong>COYAUD Anthony</strong> (ci-après « l'Éditeur »)
(ci-après « l'Éditeur »). dans le cadre de son projet annuel Nexa Digital School, en réponse à un besoin du service
Business Intelligence de <strong>XEFI SA</strong> (commanditaire).
</p> </p>
<p> <p>
Data Sentinel est une application web à usage professionnel interne, accessible uniquement Data Sentinel est une application web à usage professionnel interne. La présente instance
aux collaborateurs habilités de XEFI et de ses filiales. Toute utilisation de la plateforme est une <strong>démonstration académique</strong> : elle est accessible à des fins
implique l'acceptation pleine et entière des présentes CGU. d'évaluation au moyen de comptes de test et ne contient aucune donnée réelle
d'entreprise. Toute utilisation de la plateforme implique l'acceptation pleine et entière
des présentes CGU.
</p> </p>
</section> </section>
@@ -42,8 +45,9 @@ export default function CGU() {
<h2 id="art2">Article 2 — Accès au service</h2> <h2 id="art2">Article 2 — Accès au service</h2>
<p> <p>
L'accès à Data Sentinel est réservé aux utilisateurs disposant d'un compte valide créé L'accès à Data Sentinel est réservé aux utilisateurs disposant d'un compte valide créé
par un administrateur système XEFI. L'authentification s'effectue via un identifiant et par un administrateur de la plateforme. L'authentification s'effectue par identifiant et
un mot de passe fournis par l'entreprise. mot de passe, complétée par une vérification anti-robot. Les mots de passe ne sont jamais
stockés en clair.
</p> </p>
<ul className={styles.list}> <ul className={styles.list}>
<li>Chaque utilisateur est responsable de la confidentialité de ses identifiants.</li> <li>Chaque utilisateur est responsable de la confidentialité de ses identifiants.</li>
@@ -58,11 +62,17 @@ export default function CGU() {
<p>Data Sentinel offre les fonctionnalités suivantes :</p> <p>Data Sentinel offre les fonctionnalités suivantes :</p>
<ul className={styles.list}> <ul className={styles.list}>
<li><strong>Dashboard</strong> — Vue d'ensemble des indicateurs clés de qualité des données (KPI).</li> <li><strong>Dashboard</strong> — Vue d'ensemble des indicateurs clés de qualité des données (KPI).</li>
<li><strong>Monitoring</strong> — Suivi en temps réel des monitorings CRM, Sage et Infocentre.</li> <li><strong>Monitoring</strong> Suivi de 7 monitorings répartis sur deux pôles (Contrat, Fournisseur), alimentés par des extractions de Sage et du CRM.</li>
<li><strong>Vue consolidée</strong> Agrégation des résultats par service et catégorie.</li> <li><strong>Vue consolidée</strong> Agrégation des résultats par service et catégorie.</li>
<li><strong>Historique</strong> — Consultation et export des données historiques.</li> <li><strong>Historique</strong> Consultation et export des données historiques, à partir d'un instantané quotidien.</li>
<li><strong>Administration</strong> — Gestion des nomenclatures, utilisateurs et journaux.</li> <li><strong>Administration</strong> — Gestion des nomenclatures, utilisateurs et journaux.</li>
</ul> </ul>
<p>
Le service ne comporte <strong>ni vente, ni transaction, ni paiement en ligne</strong> :
aucune condition générale de vente n'est donc applicable. Il ne propose
<strong> aucun espace de contribution</strong> (commentaires, forum, avis), ce qui rend
sans objet toute politique de modération.
</p>
</section> </section>
<section className={styles.section} aria-labelledby="art4"> <section className={styles.section} aria-labelledby="art4">
@@ -80,33 +90,50 @@ export default function CGU() {
<section className={styles.section} aria-labelledby="art5"> <section className={styles.section} aria-labelledby="art5">
<h2 id="art5">Article 5 Protection des données personnelles (RGPD)</h2> <h2 id="art5">Article 5 Protection des données personnelles (RGPD)</h2>
<p> <p>
Conformément au Règlement Général sur la Protection des Données (UE 2016/679), XEFI SA Le traitement est conçu conformément au Règlement Général sur la Protection des Données
traite les données personnelles des utilisateurs dans le strict respect de la réglementation. (UE 2016/679). Les données personnelles traitées sont limitées au strict nécessaire pour
authentifier les utilisateurs et tracer les actions d'administration.
</p> </p>
<div className={styles.infoBox} role="note" aria-label="Informations RGPD"> <div className={styles.infoBox} role="note" aria-label="Informations RGPD">
<p><strong>Responsable du traitement :</strong> XEFI SA — 2507 Avenue de l'Europe, 69140 Rillieux-la-Pape</p> <p><strong>Responsable du traitement (instance de démonstration) :</strong> COYAUD Anthony — a.coyaud@xefi.fr</p>
<p><strong>Délégué à la Protection des Données (DPO) :</strong> dpo@xefi.fr</p> <p><strong>Données traitées :</strong> identifiant, e-mail, rôle, horodatage des connexions et des actions d'administration.</p>
<p><strong>Finalité :</strong> Authentification, traçabilité des actions, sécurité du système.</p> <p><strong>Finalité :</strong> Authentification, traçabilité des actions, sécurité du système.</p>
<p><strong>Durée de conservation :</strong> 24 mois à compter de la dernière connexion.</p> <p><strong>Base légale :</strong> intérêt légitime fiabilité des données et traçabilité des accès.</p>
<p><strong>Droits :</strong> Accès, rectification, effacement, portabilité à exercer auprès de dpo@xefi.fr.</p> <p><strong>Conservation :</strong> historique de monitoring purgé automatiquement au-delà de 24 mois. Les comptes et le journal d'audit sont conservés le temps de l'exploitation, puis supprimés avec l'instance.</p>
<p><strong>Droits :</strong> export de ses données et suppression de son compte directement dans l'application (portabilité art. 20, effacement art. 17 par désactivation et anonymisation). Pour toute autre demande accès, rectification, opposition : a.coyaud@xefi.fr.</p>
<p><strong>Transferts hors UE :</strong> aucun. <strong>Traceurs tiers :</strong> aucun.</p>
</div> </div>
<p>
Dans l'hypothèse d'un déploiement en production chez XEFI SA, la responsabilité du
traitement reviendrait à l'entreprise et une validation par son délégué à la protection
des données serait requise au préalable.
</p>
</section> </section>
<section className={styles.section} aria-labelledby="art6"> <section className={styles.section} aria-labelledby="art6">
<h2 id="art6">Article 6 — Accessibilité</h2> <h2 id="art6">Article 6 — Accessibilité</h2>
<p> <p>
XEFI s'engage à rendre Data Sentinel accessible conformément au Référentiel Général L'Éditeur s'est fixé pour <strong>objectif</strong> le niveau AA des WCAG 2.1, en
d'Amélioration de l'Accessibilité (RGAA). L'application respecte les principes WCAG 2.1 s'appuyant sur le Référentiel Général d'Amélioration de l'Accessibilité (RGAA).
niveau AA : perceptibilité, utilisabilité, compréhension et robustesse. Cet objectif est poursuivi par une démarche intégrée aux composants ; il ne fait pas
encore l'objet d'une déclaration de conformité, l'audit formel restant à mener.
</p> </p>
<p>Mesures effectivement en place :</p>
<ul className={styles.list}> <ul className={styles.list}>
<li>Navigation clavier intégrale supportée.</li> <li>Navigation clavier sur l'ensemble des contrôles ; les boîtes de dialogue retiennent le focus, se ferment par Échap et le restituent à l'élément appelant.</li>
<li>Compatibilité avec les lecteurs d'écran (ARIA labels, landmarks, roles).</li> <li>Attributs ARIA (labels, landmarks, rôles), langue déclarée, annonces des messages d'erreur et de chargement aux lecteurs d'écran.</li>
<li>Contrastes de couleurs conformes aux exigences WCAG 2.1 AA (ratio 4.5:1 minimum).</li> <li>Formulaires étiquetés ; la connexion est protégée par un captcha additif, sans image ni distorsion, donc restituable par un lecteur d'écran.</li>
<li>Aucune information portée par la seule couleur : les statuts sont doublés d'un libellé.</li>
<li>Interface responsive adaptée aux écrans de 320px à 1920px.</li> <li>Interface responsive adaptée aux écrans de 320px à 1920px.</li>
</ul> </ul>
<p>Points restant à traiter, énoncés par transparence :</p>
<ul className={styles.list}>
<li>Vérification systématique des contrastes (ratio 4.5:1) lors d'un audit dédié.</li>
<li>Tests sur lecteurs d'écran réels (NVDA, VoiceOver) non encore réalisés.</li>
<li>Aucune surcouche d'accessibilité n'est installée : ces widgets dégradent souvent la sémantique et la navigation clavier, l'accessibilité étant traitée à la source dans les composants.</li>
</ul>
<p> <p>
Pour signaler un problème d'accessibilité : <strong>dpo@xefi.fr</strong> Pour signaler un problème d'accessibilité : <strong>a.coyaud@xefi.fr</strong>
</p> </p>
</section> </section>
@@ -122,17 +149,18 @@ export default function CGU() {
<section className={styles.section} aria-labelledby="art8"> <section className={styles.section} aria-labelledby="art8">
<h2 id="art8">Article 8 Propriété intellectuelle</h2> <h2 id="art8">Article 8 Propriété intellectuelle</h2>
<p> <p>
L'ensemble des éléments composant Data Sentinel (code source, design, données, documentation) L'ensemble des éléments composant Data Sentinel (code source, design, documentation) a été
est la propriété exclusive de <strong>XEFI SA</strong>. Toute reproduction, modification réalisé par <strong>COYAUD Anthony</strong> dans le cadre de son alternance chez XEFI SA et
ou diffusion sans autorisation écrite préalable est interdite. de son projet annuel — Bachelor DBI, Nexa Digital School, 2026. Les règles de gestion et le
besoin métier appartiennent à XEFI SA.
</p> </p>
<p>Application développée par <strong>COYAUD Anthony</strong> Bachelor DBI, Nexa Digital School, 2026.</p> <p>Toute reproduction, modification ou diffusion sans autorisation préalable est interdite.</p>
</section> </section>
<section className={styles.section} aria-labelledby="art9"> <section className={styles.section} aria-labelledby="art9">
<h2 id="art9">Article 9 — Modification des CGU</h2> <h2 id="art9">Article 9 — Modification des CGU</h2>
<p> <p>
XEFI SA se réserve le droit de modifier les présentes CGU à tout moment. Les utilisateurs L'Éditeur se réserve le droit de modifier les présentes CGU à tout moment. Les utilisateurs
seront informés de toute modification substantielle. La poursuite de l'utilisation de la seront informés de toute modification substantielle. La poursuite de l'utilisation de la
plateforme après notification vaut acceptation des nouvelles conditions. plateforme après notification vaut acceptation des nouvelles conditions.
</p> </p>
@@ -142,15 +170,15 @@ export default function CGU() {
<h2 id="art10">Article 10 Droit applicable et contact</h2> <h2 id="art10">Article 10 Droit applicable et contact</h2>
<p>Les présentes CGU sont soumises au droit français. Pour toute question :</p> <p>Les présentes CGU sont soumises au droit français. Pour toute question :</p>
<div className={styles.infoBox} role="note" aria-label="Coordonnées de contact"> <div className={styles.infoBox} role="note" aria-label="Coordonnées de contact">
<p><strong>XEFI SA</strong></p> <p><strong>COYAUD Anthony</strong> Éditeur</p>
<p>2507 Avenue de l'Europe 69140 Rillieux-la-Pape</p> <p>Projet annuel Bachelor DBI Nexa Digital School, 2026</p>
<p>Email : dpo@xefi.fr</p> <p>Email : a.coyaud@xefi.fr</p>
</div> </div>
</section> </section>
</main> </main>
<footer className={styles.footer} role="contentinfo"> <footer className={styles.footer} role="contentinfo">
<p>Data Sentinel v1.0 © XEFI SA 2026</p> <p>Data Sentinel v1.0 COYAUD Anthony, Nexa Digital School 2026</p>
<nav aria-label="Liens légaux"> <nav aria-label="Liens légaux">
<a href="/mentions-legales">Mentions légales</a> <a href="/mentions-legales">Mentions légales</a>
</nav> </nav>
@@ -18,29 +18,29 @@ const sections = [
icon: Code, icon: Code,
title: 'Architecture technique', title: 'Architecture technique',
items: [ items: [
{ label: 'Frontend — React 18 + Vite', desc: 'SPA React 18 avec CSS Modules, React Router v7, Recharts. Build Vite.' }, { label: 'Frontend — React 19 + Vite', desc: 'SPA React 19 avec CSS Modules, React Router v7, Recharts. Build Vite.' },
{ label: 'Backend — API REST', desc: 'API REST avec authentification JWT. Endpoints documentés via Swagger.' }, { label: 'Backend — API REST', desc: 'API REST FastAPI avec authentification JWT. Endpoints documentés via Swagger.' },
{ label: 'Base de données — SQL Server', desc: 'SQL Server avec vues SQL optimisées et jobs CRON pour les agrégations.' }, { label: 'Base de données — SQL Server', desc: 'SQL Server 2022 avec vues SQL d\'agrégation et jobs SQL Server Agent pour l\'historisation quotidienne.' },
{ label: 'Infrastructure — NEXERN (XEFI)', desc: 'Hébergement souverain français sur les datacenters NEXERN de XEFI.' }, { label: 'Infrastructure — Docker', desc: 'Conteneurs Docker derrière un reverse proxy HTTPS. Cible métier : datacenters souverains NEXERN de XEFI.' },
], ],
}, },
{ {
icon: Database, icon: Database,
title: 'Monitorings disponibles', title: 'Monitorings disponibles',
items: [ items: [
{ label: 'CRM — Données clients et prospects', desc: 'Surveillance de la cohérence et de la complétude des données CRM.' }, { label: 'Contrat — 5 monitorings', desc: 'Tiers-payeurs, prélèvements sans RIB, TVA DOM-TOM, zone de ventes nulle, modes de règlement multiples.' },
{ label: 'Sage — Données comptables et financières', desc: 'Contrôle qualité des flux comptables issus de Sage.' }, { label: 'Fournisseur — 2 monitorings', desc: 'Écritures sans SIRET et écritures sans compte de contrepartie.' },
{ label: 'Infocentre — Reporting décisionnel', desc: 'Validation des données alimentant les rapports de direction.' }, { label: 'Sources — Sage et CRM en V1', desc: 'Le périmètre V1 couvre Sage (6 monitorings) et le CRM (1). L\'Infocentre fait partie du périmètre cible.' },
], ],
}, },
{ {
icon: Shield, icon: Shield,
title: 'Sécurité et conformité', title: 'Sécurité et conformité',
items: [ items: [
{ label: 'Authentification JWT', desc: 'Token JWT stocké en sessionStorage, expiration automatique.' }, { label: 'Authentification JWT', desc: 'Token JWT (HS256) stocké en localStorage, expiration 60 min sans refresh token.' },
{ label: 'Contrôle d\'accès RBAC', desc: 'Rôles : Administrateur, Superviseur, Consultant. Accès aux fonctions selon le rôle.' }, { label: 'Contrôle d\'accès RBAC', desc: 'Rôles : Admin, Superviseur, Consultant. Accès aux fonctions selon le rôle.' },
{ label: 'Conformité RGPD', desc: 'Conservation 24 mois, DPO joignable sur dpo@xefi.fr, droits exercés à la demande.' }, { label: 'Conformité RGPD', desc: 'Historique conservé 24 mois, export et suppression de son compte en libre-service, droits exercés à la demande.' },
{ label: 'Accessibilité RGAA / WCAG 2.1 AA', desc: 'Navigation clavier, ARIA, contrastes conformes, responsive 320px1920px.' }, { label: 'Accessibilité — objectif WCAG 2.1 AA', desc: 'Navigation clavier, ARIA, responsive 320px1920px. Audit formel des contrastes à finaliser.' },
], ],
}, },
]; ];
@@ -24,47 +24,82 @@ export default function MentionsLegales() {
<section className={styles.section}> <section className={styles.section}>
<h2>Éditeur</h2> <h2>Éditeur</h2>
<p><strong>XEFI SA</strong></p> <p><strong>COYAUD Anthony</strong></p>
<p>2507 Avenue de l'Europe</p> <p>Projet annuel Bachelor Data &amp; Business Intelligence</p>
<p>69140 Rillieux-la-Pape</p> <p>Nexa Digital School, 2026</p>
<p>dpo@xefi.fr</p> <p>a.coyaud@xefi.fr</p>
</section>
<section className={styles.section}>
<h2>Commanditaire</h2>
<p><strong>XEFI SA</strong> 2507 Avenue de l'Europe, 69140 Rillieux-la-Pape</p>
<p>
Le besoin métier et les règles de gestion sont ceux du service Business Intelligence
de XEFI. XEFI SA n'édite ni n'exploite la présente instance de démonstration.
</p>
</section> </section>
<section className={styles.section}> <section className={styles.section}>
<h2>Hébergeur</h2> <h2>Hébergeur</h2>
<p><strong>XEFI Infrastructure NEXERN</strong></p> <p><strong>Environnement de démonstration auto-hébergé</strong></p>
<p>Souveraineté française</p> <p>
Conteneurs Docker exposés en HTTPS via un reverse proxy, sur un serveur administré
par l'auteur du projet. Cible métier d'un déploiement réel : les datacenters
souverains NEXERN de XEFI.
</p>
</section> </section>
<section className={styles.section}> <section className={styles.section}>
<h2>Accès & Utilisation</h2> <h2>Accès &amp; Utilisation</h2>
<p>Usage interne exclusif aux collaborateurs habilités.</p> <p>
Application destinée à un usage professionnel interne. La présente instance est une
démonstration accessible à des fins d'évaluation académique, au moyen de comptes de
test ; elle ne contient aucune donnée réelle d'entreprise.
</p>
</section> </section>
<section className={styles.section}> <section className={styles.section}>
<h2>Données personnelles RGPD (UE 2016/679)</h2> <h2>Données personnelles RGPD (UE 2016/679)</h2>
<p>Conservation des données : 24 mois</p> <p>Données traitées : compte utilisateur (identifiant, e-mail, rôle) et journal des connexions.</p>
<p>Contact DPO : dpo@xefi.fr</p> <p>Conservation de l'historique de monitoring : 24 mois, par purge automatique en base.</p>
<p>
Droits exerçables directement dans l'application : export de ses données
(portabilité, art. 20) et suppression de son compte (effacement, art. 17, par
désactivation et anonymisation).
</p>
<p>Contact : a.coyaud@xefi.fr</p>
</section> </section>
<section className={styles.section}> <section className={styles.section}>
<h2>Cookies</h2> <h2>Cookies</h2>
<p>Session JWT uniquement, aucun tiers, bandeau de consentement.</p> <p>
Aucun cookie n'est déposé et aucun traceur tiers n'est utilisé. La session et le
choix de consentement sont conservés dans le stockage local du navigateur
(<code>localStorage</code>), effaçable à tout moment depuis les réglages du navigateur
ou par déconnexion.
</p>
</section> </section>
<section className={styles.section}> <section className={styles.section}>
<h2>Propriété intellectuelle</h2> <h2>Propriété intellectuelle</h2>
<p>© XEFI SA 2026, développé par COYAUD Anthony</p> <p>
Code source, design et documentation réalisés par <strong>COYAUD Anthony</strong>
{' '}dans le cadre de son alternance chez XEFI et de son projet annuel Nexa Digital
School (2026).
</p>
</section> </section>
<section className={styles.section}> <section className={styles.section}>
<h2>Responsabilité</h2> <h2>Responsabilité</h2>
<p>Données anonymisées pour rendu académique.</p> <p>
Jeu de données entièrement fictif, produit pour la démonstration. Aucune donnée
réelle de client, de fournisseur ou de collaborateur n'est exposée.
</p>
</section> </section>
</div> </div>
<footer className={styles.footer}> <footer className={styles.footer}>
<p>Data Sentinel v1.0 © XEFI SA 2026</p> <p>Data Sentinel v1.0 COYAUD Anthony, Nexa Digital School 2026</p>
</footer> </footer>
</div> </div>
</div> </div>
+6
View File
@@ -6,6 +6,12 @@ export default defineConfig({
plugins: [ plugins: [
react(), react(),
], ],
build: {
// Cible de compilation déclarée explicitement plutôt que laissée au défaut de
// Vite : la matrice de compatibilité annoncée dans le README est ainsi tracée
// dans le dépôt et ne bougera pas si Vite change sa baseline par défaut.
target: ['chrome111', 'edge111', 'firefox114', 'safari16.4', 'ios16.4'],
},
test: { test: {
environment: 'jsdom', environment: 'jsdom',
globals: true, globals: true,