feat(frontend): #50 — validation CGU et politique de confidentialité

- Modale de validation avec chargement des PDF distants, PdfViewPinch et barre de progression latérale (repli PdfView sous Windows).

- Service documents légaux actifs, correction des URLs média, intégration au formulaire de présentation.

- Documentation juridique et réorganisation (archive, index, tickets).

Made-with: Cursor
This commit is contained in:
2026-04-17 17:28:07 +02:00
parent 241ce36b85
commit 7381ce356d
34 changed files with 2169 additions and 912 deletions
+698
View File
@@ -0,0 +1,698 @@
# 📄 Documentation Technique - Gestion Documents Légaux (CGU/Privacy)
**Version** : 1.0
**Date** : 25 Novembre 2025
**Auteur** : Équipe PtitsPas
**Référence** : RGPD & Conformité juridique
---
## 📖 Table des matières
1. [Vue d'ensemble](#vue-densemble)
2. [Architecture](#architecture)
3. [Tables BDD](#tables-bdd)
4. [Service Documents Légaux](#service-documents-légaux)
5. [Workflow Upload & Activation](#workflow-upload--activation)
6. [Workflow Acceptation Utilisateur](#workflow-acceptation-utilisateur)
7. [APIs](#apis)
8. [Interface Admin](#interface-admin)
9. [Conformité RGPD](#conformité-rgpd)
---
## 🎯 Vue d'ensemble
### Problématique
Chaque collectivité déployant P'titsPas on-premise doit pouvoir :
1.**Personnaliser** les CGU et la Politique de confidentialité
2.**Versionner** les documents (traçabilité juridique)
3.**Tracer** qui a accepté quelle version (RGPD)
4.**Prouver** l'acceptation (IP, User-Agent, horodatage)
5.**Empêcher** le retour en arrière (sécurité juridique)
### Solution
- **Documents génériques v1** fournis par défaut (rédigés avec juriste)
- **Upload de nouvelles versions** par l'admin (PDF uniquement)
- **Versioning automatique** (incrémentation sans retour arrière)
- **Activation manuelle** (prévisualisation avant mise en prod)
- **Traçabilité complète** (hash SHA-256, IP, User-Agent)
---
## 🏗️ Architecture
### Flux de données
```
┌─────────────────────────────────────────────────────────┐
│ Workflow Documents │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. UPLOAD (Admin) │
│ Admin ──▶ API ──▶ File System ──▶ BDD │
│ /documents/legaux/ │
│ cgu_v4_<timestamp>.pdf │
│ │
│ 2. ACTIVATION (Admin) │
│ Admin ──▶ API ──▶ BDD (actif=true) │
│ │
│ 3. ACCEPTATION (Utilisateur) │
│ User ──▶ Frontend ──▶ API ──▶ BDD │
│ (inscription) (trace IP/UA) │
│ │
└─────────────────────────────────────────────────────────┘
```
### Composants
1. **Table `documents_legaux`** : Stockage versions + métadonnées
2. **Table `acceptations_documents`** : Traçabilité acceptations
3. **Service `DocumentsLegauxService`** : Upload, versioning, activation
4. **API REST** : CRUD documents
5. **Interface Admin** : Upload + activation
6. **Interface Inscription** : Affichage + acceptation
---
## 📊 Tables BDD
### Table 1 : `documents_legaux`
```sql
-- Table pour gérer les versions des documents légaux
CREATE TABLE documents_legaux (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
type VARCHAR(50) NOT NULL, -- 'cgu' ou 'privacy'
version INTEGER NOT NULL, -- Numéro de version (auto-incrémenté)
fichier_nom VARCHAR(255) NOT NULL, -- Nom original du fichier
fichier_path VARCHAR(500) NOT NULL, -- Chemin de stockage
fichier_hash VARCHAR(64) NOT NULL, -- Hash SHA-256 pour intégrité
actif BOOLEAN DEFAULT false, -- Version actuellement active
televerse_par UUID REFERENCES utilisateurs(id), -- Qui a uploadé
televerse_le TIMESTAMPTZ DEFAULT now(), -- Date d'upload
active_le TIMESTAMPTZ, -- Date d'activation
UNIQUE(type, version) -- Pas de doublon version
);
-- Index pour performance
CREATE INDEX idx_documents_legaux_type_actif ON documents_legaux(type, actif);
CREATE INDEX idx_documents_legaux_version ON documents_legaux(type, version DESC);
```
**Contraintes** :
- ✅ Un seul document `actif=true` par type à la fois
- ✅ Versioning auto-incrémenté (pas de gaps)
- ✅ Hash SHA-256 pour vérifier l'intégrité du fichier
---
### Table 2 : `acceptations_documents`
```sql
-- Table de traçabilité des acceptations (RGPD)
CREATE TABLE acceptations_documents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE,
id_document UUID REFERENCES documents_legaux(id),
type_document VARCHAR(50) NOT NULL, -- 'cgu' ou 'privacy'
version_document INTEGER NOT NULL, -- Version acceptée
accepte_le TIMESTAMPTZ DEFAULT now(), -- Date d'acceptation
ip_address INET, -- IP de l'utilisateur (RGPD)
user_agent TEXT -- Navigateur (preuve)
);
CREATE INDEX idx_acceptations_utilisateur ON acceptations_documents(id_utilisateur);
CREATE INDEX idx_acceptations_document ON acceptations_documents(id_document);
```
**Données capturées** :
-**Qui** : `id_utilisateur`
-**Quoi** : `type_document`, `version_document`
-**Quand** : `accepte_le`
-**Où** : `ip_address`
-**Comment** : `user_agent`
---
### Modification table `utilisateurs`
```sql
-- Ajouter colonnes pour référence rapide (optionnel)
ALTER TABLE utilisateurs
ADD COLUMN cgu_version_acceptee INTEGER,
ADD COLUMN cgu_acceptee_le TIMESTAMPTZ,
ADD COLUMN privacy_version_acceptee INTEGER,
ADD COLUMN privacy_acceptee_le TIMESTAMPTZ;
```
**Note** : Ces colonnes sont **redondantes** avec `acceptations_documents`, mais permettent un accès rapide sans JOIN.
---
### Seed initial
```sql
-- Documents génériques v1 (fournis par défaut)
INSERT INTO documents_legaux (type, version, fichier_nom, fichier_path, fichier_hash, actif, televerse_le, active_le) VALUES
('cgu', 1, 'cgu_v1_default.pdf', '/documents/legaux/cgu_v1_default.pdf', 'a3f8b2c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2', true, now(), now()),
('privacy', 1, 'privacy_v1_default.pdf', '/documents/legaux/privacy_v1_default.pdf', 'b4f9c3d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4', true, now(), now());
```
**Fichiers à fournir** :
- `/documents/legaux/cgu_v1_default.pdf` (rédigé avec juriste)
- `/documents/legaux/privacy_v1_default.pdf` (conforme RGPD)
---
## 🔧 Service Documents Légaux
### Responsabilités
1. **Récupérer documents actifs** : `getDocumentsActifs()`
2. **Uploader nouvelle version** : `uploadNouvelleVersion(type, file, userId)`
3. **Activer une version** : `activerVersion(documentId)`
4. **Lister versions** : `listerVersions(type)`
5. **Télécharger document** : `telechargerDocument(documentId)`
### Implémentation (TypeScript)
```typescript
// backend/src/documents-legaux/documents-legaux.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { DocumentLegal } from './entities/document-legal.entity';
import * as crypto from 'crypto';
import * as fs from 'fs/promises';
import * as path from 'path';
@Injectable()
export class DocumentsLegauxService {
private readonly UPLOAD_DIR = '/app/documents/legaux';
constructor(
@InjectRepository(DocumentLegal)
private docRepo: Repository<DocumentLegal>,
) {}
// Récupérer les documents actifs
async getDocumentsActifs(): Promise<{ cgu: DocumentLegal; privacy: DocumentLegal }> {
const cgu = await this.docRepo.findOne({
where: { type: 'cgu', actif: true },
});
const privacy = await this.docRepo.findOne({
where: { type: 'privacy', actif: true },
});
if (!cgu || !privacy) {
throw new Error('Documents légaux manquants');
}
return { cgu, privacy };
}
// Uploader une nouvelle version
async uploadNouvelleVersion(
type: 'cgu' | 'privacy',
file: Express.Multer.File,
userId: string,
): Promise<DocumentLegal> {
// 1. Calculer la prochaine version
const lastDoc = await this.docRepo.findOne({
where: { type },
order: { version: 'DESC' },
});
const nouvelleVersion = (lastDoc?.version || 0) + 1;
// 2. Calculer le hash du fichier
const fileBuffer = file.buffer;
const hash = crypto.createHash('sha256').update(fileBuffer).digest('hex');
// 3. Générer le nom de fichier unique
const timestamp = Date.now();
const fileName = `${type}_v${nouvelleVersion}_${timestamp}.pdf`;
const filePath = path.join(this.UPLOAD_DIR, fileName);
// 4. Sauvegarder le fichier
await fs.mkdir(this.UPLOAD_DIR, { recursive: true });
await fs.writeFile(filePath, fileBuffer);
// 5. Créer l'entrée en BDD
const document = this.docRepo.create({
type,
version: nouvelleVersion,
fichier_nom: file.originalname,
fichier_path: filePath,
fichier_hash: hash,
actif: false, // Pas actif par défaut
televerse_par: userId,
televerse_le: new Date(),
});
return await this.docRepo.save(document);
}
// Activer une version
async activerVersion(documentId: string): Promise<void> {
const document = await this.docRepo.findOne({ where: { id: documentId } });
if (!document) {
throw new Error('Document non trouvé');
}
// Transaction : désactiver l'ancienne version, activer la nouvelle
await this.docRepo.manager.transaction(async (manager) => {
// Désactiver toutes les versions de ce type
await manager.update(
DocumentLegal,
{ type: document.type, actif: true },
{ actif: false },
);
// Activer la nouvelle version
await manager.update(
DocumentLegal,
{ id: documentId },
{ actif: true, active_le: new Date() },
);
});
}
// Lister toutes les versions (pour l'admin)
async listerVersions(type: 'cgu' | 'privacy'): Promise<DocumentLegal[]> {
return await this.docRepo.find({
where: { type },
order: { version: 'DESC' },
relations: ['televerse_par'],
});
}
// Télécharger un document (stream)
async telechargerDocument(documentId: string): Promise<{ stream: Buffer; filename: string }> {
const document = await this.docRepo.findOne({ where: { id: documentId } });
if (!document) {
throw new Error('Document non trouvé');
}
const fileBuffer = await fs.readFile(document.fichier_path);
return {
stream: fileBuffer,
filename: document.fichier_nom,
};
}
// Vérifier l'intégrité d'un document
async verifierIntegrite(documentId: string): Promise<boolean> {
const document = await this.docRepo.findOne({ where: { id: documentId } });
if (!document) {
throw new Error('Document non trouvé');
}
const fileBuffer = await fs.readFile(document.fichier_path);
const hash = crypto.createHash('sha256').update(fileBuffer).digest('hex');
return hash === document.fichier_hash;
}
}
```
---
## 🔄 Workflow Upload & Activation
### Diagramme de séquence
```mermaid
sequenceDiagram
participant A as Admin
participant API as Backend API
participant FS as File System
participant DB as PostgreSQL
A->>API: POST /api/v1/documents-legaux<br/>{type: 'cgu', file: PDF}
API->>API: Validation fichier<br/>(PDF, max 10MB)
API->>API: Calcul hash SHA-256
API->>DB: SELECT MAX(version)<br/>WHERE type='cgu'
DB-->>API: version = 3
API->>API: Nouvelle version = 4
API->>FS: Enregistrer fichier<br/>/documents/legaux/cgu_v4_<timestamp>.pdf
FS-->>API: ✅ Fichier sauvegardé
API->>DB: INSERT INTO documents_legaux<br/>(type, version=4, actif=false)
DB-->>API: ✅ Document créé
API-->>A: 201 Created<br/>{id, version: 4, actif: false}
A->>A: Prévisualisation PDF
A->>API: PATCH /api/v1/documents-legaux/{id}/activer
API->>DB: BEGIN TRANSACTION
API->>DB: UPDATE documents_legaux<br/>SET actif=false WHERE type='cgu'
API->>DB: UPDATE documents_legaux<br/>SET actif=true, active_le=now()<br/>WHERE id={id}
API->>DB: COMMIT
API-->>A: ✅ CGU v4 activées
```
---
## 📥 Workflow Acceptation Utilisateur
### Diagramme de séquence
```mermaid
sequenceDiagram
participant U as Utilisateur
participant App as Frontend
participant API as Backend
participant DB as PostgreSQL
U->>App: Inscription (étape CGU)
App->>API: GET /api/v1/documents-legaux/actifs
API->>DB: SELECT * FROM documents_legaux<br/>WHERE actif=true
DB-->>API: {cgu: v4, privacy: v2}
API-->>App: {cgu: {version: 4, url: '...'}, privacy: {...}}
App->>App: Afficher liens PDF<br/>"CGU v4" et "Privacy v2"
U->>U: Lit les documents
U->>U: Coche "J'accepte"
App->>API: POST /api/v1/auth/register<br/>{..., cgu_version: 4, privacy_version: 2, ip, user_agent}
API->>DB: BEGIN TRANSACTION
API->>DB: INSERT INTO utilisateurs<br/>(..., cgu_version_acceptee=4, privacy_version_acceptee=2)
DB-->>API: id_utilisateur
API->>DB: INSERT INTO acceptations_documents<br/>(id_utilisateur, type='cgu', version=4, ip, user_agent)
API->>DB: INSERT INTO acceptations_documents<br/>(id_utilisateur, type='privacy', version=2, ip, user_agent)
API->>DB: COMMIT
API-->>App: ✅ Inscription réussie
```
---
## 🔌 APIs
### API 1 : Récupérer documents actifs (Public)
```http
GET /api/v1/documents-legaux/actifs
```
**Réponse 200** :
```json
{
"cgu": {
"id": "uuid-cgu-v4",
"type": "cgu",
"version": 4,
"url": "/api/v1/documents-legaux/uuid-cgu-v4/download",
"active_le": "2025-11-20T14:30:00Z"
},
"privacy": {
"id": "uuid-privacy-v2",
"type": "privacy",
"version": 2,
"url": "/api/v1/documents-legaux/uuid-privacy-v2/download",
"active_le": "2025-10-15T09:15:00Z"
}
}
```
---
### API 2 : Lister versions (Admin)
```http
GET /api/v1/documents-legaux/:type/versions
Authorization: Bearer <super_admin_token>
```
**Paramètres** :
- `type` : `cgu` | `privacy`
**Réponse 200** :
```json
[
{
"id": "uuid-cgu-v4",
"version": 4,
"fichier_nom": "CGU_Mairie_Bezons_2025.pdf",
"actif": true,
"televerse_par": {
"id": "uuid-admin",
"prenom": "Lucas",
"nom": "MOREAU"
},
"televerse_le": "2025-11-20T14:00:00Z",
"active_le": "2025-11-20T14:30:00Z"
},
{
"id": "uuid-cgu-v3",
"version": 3,
"fichier_nom": "CGU_v3.pdf",
"actif": false,
"televerse_par": {
"id": "uuid-admin",
"prenom": "Admin",
"nom": "Système"
},
"televerse_le": "2025-10-15T09:00:00Z",
"active_le": "2025-10-15T09:15:00Z"
}
]
```
---
### API 3 : Upload nouvelle version (Admin)
```http
POST /api/v1/documents-legaux
Authorization: Bearer <super_admin_token>
Content-Type: multipart/form-data
```
**Body** :
```
type: cgu
file: <fichier PDF>
```
**Réponse 201** :
```json
{
"id": "uuid-nouveau-doc",
"type": "cgu",
"version": 5,
"fichier_nom": "CGU_Mairie_Bezons_2025_v2.pdf",
"actif": false,
"televerse_le": "2025-11-25T10:00:00Z"
}
```
**Erreurs** :
- `400 Bad Request` : Fichier non PDF ou trop volumineux (>10MB)
- `401 Unauthorized` : Token manquant ou invalide
- `403 Forbidden` : Rôle insuffisant (pas super_admin)
---
### API 4 : Activer une version (Admin)
```http
PATCH /api/v1/documents-legaux/:id/activer
Authorization: Bearer <super_admin_token>
```
**Réponse 200** :
```json
{
"message": "Document activé avec succès",
"documentId": "uuid-nouveau-doc",
"type": "cgu",
"version": 5
}
```
---
### API 5 : Télécharger document (Public)
```http
GET /api/v1/documents-legaux/:id/download
```
**Réponse 200** :
```
Content-Type: application/pdf
Content-Disposition: attachment; filename="CGU_v5.pdf"
<binary PDF data>
```
---
### API 6 : Historique acceptations utilisateur (Admin)
```http
GET /api/v1/users/:userId/acceptations
Authorization: Bearer <super_admin_token>
```
**Réponse 200** :
```json
[
{
"type_document": "cgu",
"version_document": 4,
"accepte_le": "2025-11-20T15:30:00Z",
"ip_address": "192.168.1.100",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
},
{
"type_document": "privacy",
"version_document": 2,
"accepte_le": "2025-11-20T15:30:00Z",
"ip_address": "192.168.1.100",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
]
```
---
## 💻 Interface Admin
### Écran Gestion Documents Légaux
```
┌─────────────────────────────────────────────────────────┐
│ 📄 Gestion des Documents Légaux │
├─────────────────────────────────────────────────────────┤
│ [ CGU ] [ Politique de confidentialité ] │
├─────────────────────────────────────────────────────────┤
│ │
│ 📋 Conditions Générales d'Utilisation (CGU) │
│ │
│ Version active : v4 │
│ Activée le : 20/11/2025 14:30 │
│ Téléversée par : Lucas MOREAU │
│ │
│ [ 📥 Télécharger ] [ 👁️ Prévisualiser ] │
│ │
│ ───────────────────────────────────────────────── │
│ │
│ 📤 Uploader une nouvelle version │
│ │
│ ⚠️ Attention : L'upload d'une nouvelle version │
│ créera la version v5. Vous pourrez la prévisualiser│
│ avant de l'activer. │
│ │
│ [ Choisir un fichier PDF ] (max 10MB) │
│ │
│ [ 📤 Uploader ] │
│ │
│ ───────────────────────────────────────────────── │
│ │
│ 📜 Historique des versions │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ ✅ v4 (Active) │ │
│ │ Activée le : 20/11/2025 14:30 │ │
│ │ Par : Lucas MOREAU │ │
│ │ Hash : a3f8b2c4...e0f1a2 ✓ │ │
│ │ [ 📥 Télécharger ] [ 👁️ Voir ] │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ v3 (Inactive) │ │
│ │ Activée le : 15/10/2025 09:15 │ │
│ │ Par : Admin Système │ │
│ │ Hash : b4f9c3d6...f2a3b4 ✓ │ │
│ │ [ 📥 Télécharger ] [ 👁️ Voir ] [🔄 Réactiver]│ │
│ └───────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
```
---
## 🔒 Conformité RGPD
### Données capturées
| Donnée | Justification RGPD | Durée conservation |
|--------|-------------------|-------------------|
| `id_utilisateur` | Traçabilité acceptation | Durée du compte |
| `version_document` | Preuve version acceptée | Durée du compte |
| `accepte_le` | Horodatage légal | Durée du compte |
| `ip_address` | Preuve origine acceptation | 1 an (recommandé) |
| `user_agent` | Preuve navigateur/appareil | 1 an (recommandé) |
### Droits utilisateur
#### Droit d'accès (Article 15)
L'utilisateur peut demander :
- Quelles versions il a acceptées
- Quand il les a acceptées
- Depuis quelle IP
**API** : `GET /api/v1/users/me/acceptations`
#### Droit à l'oubli (Article 17)
Lors de la suppression du compte :
- Suppression des données personnelles
- Conservation des acceptations anonymisées (obligation légale)
**Implémentation** :
```sql
-- Anonymisation (pas suppression totale)
UPDATE acceptations_documents
SET ip_address = NULL,
user_agent = NULL
WHERE id_utilisateur = '<uuid>';
-- Puis suppression utilisateur
DELETE FROM utilisateurs WHERE id = '<uuid>';
```
---
## 📚 Références
### Documentation interne
- [01_CAHIER-DES-CHARGES.md](../01_CAHIER-DES-CHARGES.md)
- [10_DATABASE.md](../10_DATABASE.md)
- [11_API.md](../11_API.md)
- [21_CONFIGURATION-SYSTEME.md](../21_CONFIGURATION-SYSTEME.md)
### Documentation externe
- [RGPD - Article 7 (Consentement)](https://www.cnil.fr/fr/reglement-europeen-protection-donnees/chapitre2#Article7)
- [RGPD - Article 15 (Droit d'accès)](https://www.cnil.fr/fr/reglement-europeen-protection-donnees/chapitre3#Article15)
- [RGPD - Article 17 (Droit à l'oubli)](https://www.cnil.fr/fr/reglement-europeen-protection-donnees/chapitre3#Article17)
---
**Dernière mise à jour** : 25 Novembre 2025
**Version** : 1.0
**Statut** : ✅ Document validé
+41
View File
@@ -0,0 +1,41 @@
# Juridique · P'titsPas
Ce dossier regroupe la **documentation juridique** et les **sources Markdown**
destinées à être publiées (souvent en **PDF**) dans lapplication : notamment
l’écran d**acceptation à linscription** (CGU + politique de confidentialité).
## Documents « application » (à exporter en PDF)
| Fichier | Rôle |
|--------|------|
| [**cgu.md**](./cgu.md) | **Conditions générales dutilisation** du service |
| [**politique-confidentialite.md**](./politique-confidentialite.md) | **Politique de confidentialité** (RGPD, droits, finalités) |
Ces deux fichiers correspondent aux types **`cgu`** et **`privacy`** côté API
documents légaux (voir doc technique ci-dessous).
## Document complémentaire (optionnel)
| Fichier | Rôle |
|--------|------|
| [**cgc.md**](./cgc.md) | **Conditions générales contractuelles** (cadre
dengagement des parties) — distinct de la politique de confidentialité |
## Documentation technique
| Fichier | Rôle |
|--------|------|
| [**22_DOCUMENTS-LEGAUX.md**](./22_DOCUMENTS-LEGAUX.md) | API, BDD, versioning,
traçabilité des acceptations |
> Tous les textes ci-dessus sont des **brouillons** à valider par un **juriste**
> ou la **DPD/DPO** avant diffusion en production.
## Export PDF (local)
1. Ouvrir le `.md` dans Cursor.
2. `Ctrl+Shift+P`**Markdown PDF: Export (pdf)** (extension *Markdown PDF*,
auteur yzane).
Les PDF déployés côté API sont décrits dans
[22_DOCUMENTS-LEGAUX.md](./22_DOCUMENTS-LEGAUX.md).
+116
View File
@@ -0,0 +1,116 @@
# Conditions générales contractuelles (CGC)
**Produit** : P'titsPas
**Version document** : 0.1 (brouillon)
**Date** : avril 2026
**Statut** : à valider juridiquement avant publication
> **Ce document nest pas** la **politique de confidentialité** (données
> personnelles / RGPD) : voir
> [**politique-confidentialite.md**](./politique-confidentialite.md).
---
## 1. Objet
Les présentes **conditions générales contractuelles** (« CGC ») définissent le
**cadre contractuel** entre les **parties** impliquées dans lusage de la
plateforme **P'titsPas** pour la gestion de la garde denfants au sein des
**collectivités** ou structures habilitées.
Elles complètent les [**conditions générales dutilisation**](./cgu.md) (CGU),
qui régissent lusage du **Service numérique** lui-même.
---
## 2. Parties
Selon les cas dusage du déploiement, peuvent notamment être parties :
- la **collectivité** ou l**employeur public** porteur du dispositif ;
- l**Éditeur** ou l**opérateur** assurant lhébergement et la maintenance du
Service ;
- les **Utilisateurs** (parents, assistantes maternelles, relais dassistantes
maternelles, gestionnaires, etc.).
[À compléter : identification précise des personnes morales signataires et
rôles (maîtrise douvrage, maîtrise d’œuvre, délégation).]
---
## 3. Objet du contrat
Le contrat a pour objet de préciser :
- les **missions** et **responsabilités** de chaque catégorie dacteur ;
- les **conditions dinscription**, de **validation** des dossiers et de
**clôture** des comptes ;
- les **obligations** en matière de **sincérité** des informations et de
**coopération** avec les services compétents.
---
## 4. Obligations des Utilisateurs
Les Utilisateurs sengagent à :
- respecter le **cadre légal** applicable à la garde denfants et à la
protection de lenfance ;
- ne fournir que des **documents** et **informations** licites et, le cas échéant,
conformes aux demandes des gestionnaires ;
- respecter la **charte dusage** et les consignes communiquées par la
collectivité ou l’Éditeur.
---
## 5. Obligations de la collectivité / de l’Éditeur
[À compléter : disponibilité cible, support, sauvegardes, sous-traitance,
sous-traitants, transferts hors UE, etc.]
---
## 6. Durée et résiliation
Le présent cadre contractuel est conclu pour la **durée** dutilisation du
Service par les Utilisateurs concernés, sous réserve des **résiliations**
prévues par la réglementation ou par décision légitime de l’Éditeur / de la
collectivité.
La **résiliation** dun compte Utilisateur nimplique pas nécessairement la
**suppression immédiate** de toutes les données ; les **archives** et délais
peuvent être imposés par la loi.
---
## 7. Modification
Les CGC peuvent être **adaptées** (évolution réglementaire, organisation du
dispositif). Les Utilisateurs en sont informés par un **moyen approprié** et,
lorsque la loi ou la pratique lexige, une **nouvelle acceptation** est
enregistrée.
---
## 8. Responsabilité et assurance
[À compléter : plafonds, exclusions, co-traitance, garanties, assurance
responsabilité civile, etc.]
---
## 9. Litiges
[À compléter : médiation, compétence territoriale, droit applicable.]
---
## 10. Dispositions finales
[À compléter : intégralité de laccord, nullité partielle, langue de référence,
date deffet.]
---
*Document généré comme base de travail pour le projet P'titsPas. Il ne
constitue pas un conseil juridique.*
+119
View File
@@ -0,0 +1,119 @@
# Conditions générales dutilisation (CGU)
**Produit** : P'titsPas
**Version document** : 0.2 (brouillon)
**Date** : avril 2026
**Statut** : à valider juridiquement avant publication
---
## 1. Objet et champ dapplication
Les présentes **conditions générales dutilisation** (« CGU ») encadrent
laccès et lusage de la **plateforme logicielle P'titsPas** (ci-après le
« **Service** »), dédiée à lorganisation de la **garde denfants de 0 à 3 ans**
dans le cadre des **collectivités locales** ou structures habilitées.
Toute **création de compte** ou **utilisation** du Service vaut acceptation des
CGU en vigueur au moment de lutilisation.
---
## 2. Définitions
- **Éditeur** : la personne morale ou la collectivité responsable du
déploiement et de ladministration du Service.
- **Utilisateur** : toute personne disposant dun compte (parent, assistante
maternelle, relais, gestionnaire, administrateur, etc.).
- **Données** : informations saisies ou générées dans le Service.
---
## 3. Accès au Service
Le Service est accessible selon les **modalités techniques** définies par
l’Éditeur (URL, authentification, pare-feu, etc.).
L’Éditeur peut **suspendre** ou **restreindre** laccès pour maintenance,
sécurité ou obligation légale, dans la mesure du possible en informant les
Utilisateurs par un moyen adapté.
---
## 4. Comptes et sécurité
Chaque Utilisateur sengage à :
- fournir des **informations exactes** et les mettre à jour ;
- **garder confidentiels** ses identifiants et mots de passe ;
- signaler sans délai toute **utilisation non autorisée** de son compte.
L’Éditeur peut **désactiver** un compte en cas de manquement grave aux présentes
CGU ou à la réglementation applicable.
---
## 5. Usage loyal du Service
Il est notamment interdit dutiliser le Service pour :
- porter atteinte aux **droits des tiers** ou à l**ordre public** ;
- tenter d**accéder** de manière frauduleuse à des données ou des fonctions non
autorisées ;
- **perturber** le fonctionnement du Service (attaques, surcharge, etc.).
---
## 6. Propriété intellectuelle
Les **éléments** du Service (logiciel, charte graphique, documentation interne
non publique, etc.) restent la propriété de leurs titulaires respectifs, sauf
mention contraire.
Les **contenus** saisis par les Utilisateurs (textes, pièces jointes autorisées)
restent sous leur responsabilité ; ils concèdent à l’Éditeur les droits
**strictement nécessaires** à lhébergement et au fonctionnement du Service.
---
## 7. Données personnelles
Le traitement des données personnelles est décrit dans la [**politique de
confidentialité**](./politique-confidentialite.md) et les documents affichés
dans le Service, conformément au **RGPD** et aux obligations locales.
---
## 8. Responsabilité
Le Service est fourni **en l’état**, dans les limites de l’état de lart et des
moyens raisonnables de l’Éditeur.
L’Éditeur ne saurait être tenu responsable des **dommages indirects** ou des
**indisponibilités** indépendantes de sa volonté, dans les limites autorisées par
la loi.
---
## 9. Évolution des CGU
Les CGU peuvent être **modifiées**. Les Utilisateurs sont informés selon les
moyens prévus (notification, ré-affichage à la connexion, etc.). La **version**
acceptée est **tracée** dans le Service lorsque la fonctionnalité est activée.
---
## 10. Droit applicable et litiges
[À compléter : droit applicable, juridiction compétente, médiation éventuelle.]
---
## 11. Contact
[À compléter : coordonnées du DPO ou du service utilisateurs.]
---
*Document généré comme base de travail pour le projet P'titsPas. Il ne
constitue pas un conseil juridique.*
Binary file not shown.
+188
View File
@@ -0,0 +1,188 @@
# Politique de confidentialité
**Produit** : P'titsPas
**Version document** : 0.1 (brouillon)
**Date** : avril 2026
**Statut** : à valider juridiquement avant publication
Document distinct des [**conditions générales dutilisation**](./cgu.md)
(CGU), qui régissent lusage du service.
---
## 1. Introduction
La présente **politique de confidentialité** décrit comment sont traitées les
**données à caractère personnel** dans le cadre de la plateforme **P'titsPas**,
application dédiée à lorganisation de la **garde denfants** (notamment 0 à 3
ans) pour le compte de **collectivités** ou structures habilitées.
Elle sapplique aux **Utilisateurs** du Service (parents, assistantes
maternelles, relais, gestionnaires, administrateurs, etc.).
---
## 2. Responsable du traitement
[À compléter : identité et coordonnées du **responsable du traitement** — en
général la collectivité ou la personne morale désignée selon le mode de
déploiement (on-premise, délégation, etc.).]
Pour toute question relative à cette politique ou à vos droits :
- **Contact** : [À compléter : courriel / adresse postale du service ou du
DPD/DPO.]
- **Délégué à la protection des données (DPD/DPO)** : [À compléter si désigné.]
---
## 3. Données collectées
Selon les profils et les fonctionnalités activées, peuvent notamment être
traitées :
- **Données didentité et de contact** : nom, prénom, adresse électronique,
numéro de téléphone, adresse postale, etc.
- **Données dauthentification** : identifiant, données de connexion, indicateur
de changement de mot de passe obligatoire, etc.
- **Données professionnelles** (assistantes maternelles, relais) : agrément,
capacité, présentation, pièces ou identifiants professionnels selon le
formulaire.
- **Données relatives aux enfants** : prénom, date de naissance, lien avec les
titulaires de lautorité parentale, informations de santé ou de garde **uniquement**
dans la mesure où leur collecte est **nécessaire** au service et **encadrée**
par la collectivité et la loi.
- **Données de connexion et de traçabilité** : journaux techniques, adresse IP,
agent utilisateur, horodatages, traces d**acceptation** des documents légaux
(CGU, présente politique), etc.
- **Contenus** saisis dans le Service (textes libres, messages si la messagerie
est activée, etc.).
[À compléter : liste exhaustive alignée sur les écrans et tables réelles du
déploiement.]
---
## 4. Finalités et bases légales
Les traitements poursuivent notamment les finalités suivantes (bases légales
indicatives, **à affiner** avec le juriste) :
| Finalité | Base légale (indicative) |
|----------|---------------------------|
| Création et gestion des **comptes** | Exécution de mesures précontractuelles /
contrat ; obligation légale le cas échéant |
| Gestion des **dossiers** de garde et des **inscriptions** | Mission de
service public / contrat / obligation légale selon contexte |
| **Sécurité** du Service, prévention des abus | Intérêt légitime ; obligation
légale |
| **Traçabilité** des acceptations de documents (CGU, politique) | Obligation
légale ; preuve dun contrat |
| **Amélioration** et statistiques dusage (si activées) | Intérêt légitime ou
consentement selon les moyens |
---
## 5. Destinataires des données
Les données peuvent être accessibles :
- aux **personnels habilités** de la collectivité ou de l’Éditeur (selon les
rôles : gestionnaire, administrateur, etc.) ;
- aux **Utilisateurs** dans la limite de ce qui est nécessaire au fonctionnement
du dispositif (ex. dossier partagé) ;
- aux **sous-traitants** techniques strictement nécessaires (hébergement,
sauvegarde, messagerie, etc.) **sous contrat** conforme au RGPD.
[À compléter : liste des sous-traitants et pays dhébergement.]
---
## 6. Durée de conservation
Les données sont conservées :
- pendant la **durée dutilisation** du compte et du dossier ;
- puis, le cas échéant, pour les **durées légales** ou réglementaires de
conservation (archives, preuve, comptabilité, etc.).
[À compléter : grille de conservation par type de donnée.]
---
## 7. Vos droits
Conformément au **RGPD**, vous disposez notamment des droits suivants (dans les
conditions et limites prévues par la loi) :
- **droit daccès** et de **rectification** ;
- **droit à leffacement** (« droit à loubli ») ;
- **droit à la limitation** du traitement ;
- **droit à la portabilité** (le cas échéant) ;
- **droit dopposition** (notamment pour prospection, selon contexte) ;
- **droit de retirer votre consentement** lorsque le traitement repose sur le
consentement ;
- **droit dintroduire une réclamation** auprès de la **CNIL** (France) :
[https://www.cnil.fr](https://www.cnil.fr).
Pour exercer vos droits : [À compléter : procédure, délais de réponse, pièce
didentité si exigée.]
---
## 8. Sécurité
L’Éditeur met en œuvre des **mesures techniques et organisationnelles**
appropriées (contrôle daccès, chiffrement en transit selon configuration,
journalisation, mots de passe, etc.).
[À compléter : politique de sauvegarde, PRA, certification éventuelle.]
---
## 9. Transferts hors Union européenne
[À compléter : absence de transfert, ou garanties (clauses types, pays
adéquats, etc.).]
---
## 10. Cookies et traceurs (application web)
Lorsque le Service est utilisé via un **navigateur**, des **cookies** ou
mécanismes équivalents peuvent être utilisés pour la **session**, la
**sécurité** ou des mesures d**audience** si elles sont activées.
[À compléter : liste des traceurs, finalité, durée, consentement si requis.]
---
## 11. Données des enfants
Les données concernant les **enfants** ne sont traitées que dans le **cadre
légal** de la garde et des missions de la collectivité, avec les **garants**
habituellement titulaires de lautorité parentale ou personnes désignées par la
loi.
[À compléter : référence au cadre local (protection de lenfance, secret
professionnel, etc.).]
---
## 12. Évolution de la politique
La présente politique peut être **modifiée**. Les Utilisateurs en sont informés
par un **moyen adapté** ; une **nouvelle version** peut être présentée lors de la
connexion ou de linscription, avec **trace** de lacceptation lorsque le
Service le prévoit.
---
## 13. Contact
[À compléter : même bloc que section 2 si besoin.]
---
*Document généré comme base de travail pour le projet P'titsPas. Il ne
constitue pas un conseil juridique.*
Binary file not shown.