Ajouter charte et confidentialite

This commit is contained in:
Daniel Allaire 2026-06-01 14:13:44 -04:00
parent 8de5e49200
commit f04871c3b3
6 changed files with 68 additions and 13 deletions

View file

@ -21,7 +21,8 @@ MODULES_CONSULTATION = [
ModuleTuile(code="C5", nom="Gouvernance", description="Décisions du groupe", icone="📌", couleur="red"),
ModuleTuile(code="C7", nom="Mon profil", description="Modifier, PIN, notifications", icone="👤", couleur="gray"),
ModuleTuile(code="C9", nom="Postes à pourvoir", description="Postes disponibles, candidature", icone="🙋", couleur="yellow"),
ModuleTuile(code="C11", nom="Principes d'utilisation", description="L'application comme outil de service", icone="🧭", couleur="indigo"),
ModuleTuile(code="C11", nom="Charte d'utilisation", description="Outil de service et limites", icone="🧭", couleur="indigo"),
ModuleTuile(code="C13", nom="Confidentialité", description="Données, accès et journal", icone="🔒", couleur="gray"),
ModuleTuile(code="C12", nom="Mode papier", description="Formulaires de reprise en main", icone="🖨️", couleur="gray"),
ModuleTuile(code="S1T", nom="Trésorerie", description="État des résultats, soldes, registre", icone="🏦", couleur="green"),
]

View file

@ -32,6 +32,7 @@ import AssembleeInvite from './pages/AssembleeInvite';
import JournalActions from './pages/JournalActions';
import GestionGroupes from './pages/GestionGroupes';
import PrincipesUtilisation from './pages/PrincipesUtilisation';
import Confidentialite from './pages/Confidentialite';
import ModePapier from './pages/ModePapier';
import BottomNav from './components/BottomNav';
@ -102,6 +103,7 @@ export default function App() {
case 'G8': pageActive = <ConfigRepartition />; break;
case 'C9': pageActive = <Impliquer />; break;
case 'C11': pageActive = <PrincipesUtilisation />; break;
case 'C13': pageActive = <Confidentialite />; break;
case 'C12': pageActive = <ModePapier />; break;
case 'C10': pageActive = <Tresorerie />; break;
default: pageActive = <Accueil />;
@ -120,6 +122,8 @@ export default function App() {
// Pages publiques
switch (page) {
case 'inscription': return <Inscription />;
case 'charte': return <PrincipesUtilisation />;
case 'confidentialite': return <Confidentialite />;
default: return <Login />;
}
}

View file

@ -12,7 +12,7 @@ const COULEURS = {
gray: 'bg-gray-50 border-gray-200 text-gray-700',
};
const NAVIGABLE = ['C7', 'S1', 'S1T', 'S2', 'S3', 'S4', 'S5', 'C1', 'C2', 'C4', 'C5', 'C9', 'C11', 'C12', 'G2', 'G9', 'G11', 'G12', 'G13', 'G14', 'M0', 'M1', 'M2', 'M3', 'M4', 'M5', 'M6'];
const NAVIGABLE = ['C7', 'S1', 'S1T', 'S2', 'S3', 'S4', 'S5', 'C1', 'C2', 'C4', 'C5', 'C9', 'C11', 'C12', 'C13', 'G2', 'G9', 'G11', 'G12', 'G13', 'G14', 'M0', 'M1', 'M2', 'M3', 'M4', 'M5', 'M6'];
const MODULES_CONTEXTE = new Set(['S0', 'M0', 'M1', 'M2']);
const MODULE_INVENTAIRES = {
code: 'M5',
@ -29,7 +29,7 @@ const CONTEXTES = {
sections: [
{ titre: 'À faire maintenant', codes: ['S5', 'C5', 'C9'] },
{ titre: 'État', codes: ['S1T', 'C2', 'C1', 'C4'] },
{ titre: 'Mon espace', codes: ['C7', 'C11', 'C12'] },
{ titre: 'Mon espace', codes: ['C7', 'C11', 'C13', 'C12'] },
],
},
reunion: {

View file

@ -0,0 +1,39 @@
import React from 'react';
import PageHeader from '../components/PageHeader';
const SECTIONS = [
['Données recueillies', "L'application conserve les renseignements nécessaires au fonctionnement du groupe: prénom, coordonnées utiles, identifiant de connexion, date d'abstinence optionnelle, rôles, présences, décisions, finances du groupe et historique des changements."],
['Utilisation', "Les données servent à soutenir les rencontres, assemblées, mandats, rapports, finances, communications internes, sauvegardes et reprises d'historique."],
['Accès', "Les membres voient les informations nécessaires à leur participation. Les exécutifs et les postes autorisés ont des accès plus larges selon leurs responsabilités. Le sysadmin technique agit seulement pour soutenir l'application."],
['Journal', "Les changements réussis sont journalisés pour comprendre ce qui a été modifié, par qui et quand. Ce journal existe pour protéger l'historique et corriger les erreurs, pas pour surveiller les membres."],
['Isolation des groupes', "Les groupes sont isolés. Un membre connecté dans un groupe ne doit pas accéder aux données d'un autre groupe."],
['Sauvegardes', "Les sauvegardes contiennent des données personnelles et doivent être protégées. Elles servent à restaurer le service en cas d'erreur ou d'incident."],
["Droit à l'oubli", "Un membre peut demander l'anonymisation de ses renseignements. L'enregistrement n'est pas supprimé afin de préserver l'historique; l'ID technique et le prénom peuvent demeurer."],
['Notifications', "Les notifications push sont optionnelles. Le membre choisit les catégories qu'il souhaite recevoir et peut les désactiver."],
['Limites', "Aucun système n'est parfait. Les groupes doivent conserver leurs rapports importants et pouvoir reprendre les processus sur papier au besoin."],
];
export default function Confidentialite() {
return (
<div className="min-h-screen bg-gray-100">
<PageHeader titre="Confidentialité" sousTitre="Données, accès et journal" />
<div className="p-4 space-y-4">
<div className="bg-white rounded-2xl p-4 shadow-sm">
<p className="text-sm text-gray-700 leading-relaxed">
Cette politique résume comment l'application traite les données des groupes et des membres.
Elle doit rester simple, compréhensible et conforme à l'esprit de service.
</p>
</div>
<div className="space-y-2">
{SECTIONS.map(([titre, texte]) => (
<div key={titre} className="bg-white rounded-2xl p-4 shadow-sm">
<p className="font-bold text-gray-800">{titre}</p>
<p className="text-sm text-gray-600 mt-1 leading-relaxed">{texte}</p>
</div>
))}
</div>
</div>
</div>
);
}

View file

@ -223,6 +223,14 @@ export default function Login() {
Sysadmin
</button>
)}
<div className="mb-3 flex items-center justify-center gap-4 text-xs">
<button type="button" onClick={() => setPage('charte')} className="font-medium text-blue-200/75 underline-offset-4 active:text-white">
Charte d'utilisation
</button>
<button type="button" onClick={() => setPage('confidentialite')} className="font-medium text-blue-200/75 underline-offset-4 active:text-white">
Confidentialité
</button>
</div>
<p className="text-center text-xs text-blue-300">100% logiciel libre · Hébergé au Québec</p>
</div>
</div>

View file

@ -2,22 +2,25 @@ import React from 'react';
import PageHeader from '../components/PageHeader';
const PRINCIPES = [
['Outil de service', "L'application soutient les serviteurs; elle ne remplace jamais la conscience de groupe."],
['Reprise sur papier', "Les rencontres, assemblées et rapports doivent pouvoir continuer même si l'informatique tombe."],
['Sobriété des données', "On conserve seulement les renseignements utiles au fonctionnement du groupe."],
['Transparence', "Le journal sert à comprendre les changements et protéger l'historique, pas à surveiller les membres."],
['Outil de service', "L'application soutient les tâches du groupe. Elle ne remplace jamais la conscience de groupe, les réunions, ni les décisions prises par les membres."],
['Autonomie du groupe', "Chaque groupe demeure responsable de ses données, de ses usages, de ses décisions et de ses comptes rendus."],
['Limites du service', "Le soutien technique est offert au meilleur effort. Aucune disponibilité continue ou intervention d'urgence n'est promise."],
['Reprise sur papier', "Les rencontres, assemblées, rapports et décisions doivent pouvoir continuer même si l'informatique devient indisponible."],
['Sobriété des données', "On conserve seulement les renseignements utiles au fonctionnement du groupe et à la continuité de son historique."],
['Transparence', "Le journal sert à comprendre les changements, corriger les erreurs et protéger l'historique. Il ne doit pas servir à surveiller les membres."],
['Pouvoirs visibles', "Les accès viennent des postes occupés. Les actions sensibles doivent rester explicables au groupe."],
['Participation libre', "L'application ne doit jamais devenir nécessaire pour assister à une réunion ou participer au groupe."],
['Participation libre', "L'application ne doit jamais devenir nécessaire pour assister à une réunion, participer au groupe ou demander de l'aide."],
['Frais éventuels', "S'il y a contribution financière, elle sert à couvrir l'hébergement, les sauvegardes et l'entretien minimal."],
];
export default function PrincipesUtilisation() {
return (
<div className="min-h-screen bg-gray-100">
<PageHeader titre="Principes d'utilisation" sousTitre="L'application comme outil de service" />
<PageHeader titre="Charte d'utilisation" sousTitre="Outil de service et limites" />
<div className="p-4 space-y-4">
<div className="bg-white rounded-2xl p-4 shadow-sm">
<p className="text-sm text-gray-700 leading-relaxed">
Cette application aide le groupe à alléger les tâches, préserver l'historique et soutenir la transparence.
Cette application est offerte comme outil de service. Elle aide à alléger les tâches, préserver l'historique et soutenir la transparence.
Elle ne gouverne pas le groupe. Les décisions demeurent prises par les membres, selon les pratiques du groupe.
</p>
</div>
@ -32,10 +35,10 @@ export default function PrincipesUtilisation() {
</div>
<div className="bg-blue-50 border border-blue-100 rounded-2xl p-4">
<p className="font-bold text-aa-blue">Boussole simple</p>
<p className="font-bold text-aa-blue">Acceptation</p>
<p className="text-sm text-blue-900 mt-1 leading-relaxed">
Une fonctionnalité est saine si elle augmente la capacité du groupe à se servir lui-même.
Elle devient fragile si elle augmente surtout le contrôle sur les membres.
Utiliser l'application implique d'accepter ces principes. Une fonctionnalité est saine si elle augmente
la capacité du groupe à se servir lui-même. Elle devient fragile si elle augmente surtout le contrôle sur les membres.
</p>
</div>
</div>