# R.E.S. Aubange — Gestion Affiliation V1

## Contenu de cette V1

Cette archive contient une première version fonctionnelle de l'application PHP 8.2 / MySQL :

- formulaire public en 6 étapes ;
- 7 langues (FR/EN/DE/NL/ES/IT/PT) ;
- mineur/majeur déterminé automatiquement depuis la date de naissance ;
- catégorie calculée via une table de règles par saison et par sexe ;
- règle fille configurable (exemple 2016 : garçon U11 / fille U10) ;
- club précédent : Oui / Non / Je ne sais pas ;
- adresse structurée ;
- validation date, e-mail, téléphone ;
- responsables légaux (1 ou 2) ;
- santé/sécurité pour les mineurs ;
- droit à l'image avec version de consentement ;
- upload CI recto/verso à partir de 12 ans ;
- composition de ménage si naissance OU domicile hors Belgique ;
- possibilité d'envoyer les documents plus tard via lien sécurisé ;
- envoi d'e-mails via Microsoft Graph ;
- login administrateur via Microsoft Entra ID ;
- liste nominative des utilisateurs autorisés ;
- statuts distincts Dossier / Type d'affiliation / FFA / PSD ;
- tableau de bord ;
- modèles d'e-mails en base ;
- audit de changement de statuts ;
- stockage privé des documents.

## Important : ce qui reste volontairement à compléter avant production

1. Les règles de catégories autres que l'exemple 2016 doivent être complétées dans `season_category_rules`.
2. Les traductions EN/DE/NL/ES/IT/PT sont fonctionnelles pour les champs principaux mais doivent être relues et complétées par un locuteur avant mise en production.
3. Les API d'autocomplétion d'adresses (Belgique/Luxembourg/France) ne sont pas encore branchées dans cette archive.
4. La génération PDF recto-verso est prévue dans le modèle de données mais pas encore codée dans cette itération.
5. L'éditeur graphique des modèles d'e-mails n'est pas encore codé ; les modèles sont déjà en base.
6. Les relances automatiques sont paramétrées en base mais nécessitent le script CRON de l'itération suivante.
7. L'envoi automatique des modèles FFA/PSD/finalisé sera branché sur les changements de statut dans l'itération suivante.
8. Le champ santé est actuellement stocké tel quel dans `health_info_encrypted`. Avant production, il faudra activer le chiffrement applicatif réel avec `APP_KEY`.

## Installation locale / OVH

### 1. Base MySQL
Créer une base MySQL/MariaDB UTF8MB4 puis importer :

`database/schema.sql`

### 2. Configuration
Copier :

`.env.example` vers `.env`

et renseigner la base, l'URL et les paramètres Microsoft.

Générer une clé applicative, par exemple :

`php -r "echo bin2hex(random_bytes(32)), PHP_EOL;"`

### 3. Racine du site
Configurer le domaine/sous-domaine pour que la racine web pointe vers :

`/public`

Le dossier `storage/private` ne doit jamais être accessible directement depuis Internet.

### 4. Premier administrateur
Ajouter manuellement le compte Microsoft autorisé :

```sql
INSERT INTO admin_users(email,role,is_active)
VALUES ('votre.compte@resaubange.be','admin',1);
```

Le compte doit correspondre exactement à l'adresse retournée par Microsoft Graph.

### 5. Microsoft Entra — authentification
Créer une App Registration dans votre tenant.

Redirect URI (Web) :
`https://VOTRE-DOMAINE/admin/callback.php`

Permission déléguée :
- Microsoft Graph / User.Read

Créer un Client Secret et placer les valeurs dans `.env`.

L'application vérifie ensuite l'adresse dans la table `admin_users`.
Comme vous n'avez pas Entra ID P1/P2, ce système d'autorisation nominative évite de dépendre de l'assignation de groupe à l'Enterprise Application.

### 6. Microsoft Graph — envoi des mails
Pour envoyer avec le flux client_credentials, ajouter l'autorisation Application :
- Microsoft Graph / Mail.Send

Puis accorder le consentement administrateur.

Important : les permissions Application Mail.Send sont puissantes. En production, il est recommandé de restreindre l'application à la boîte d'envoi `affiliation@resaubange.be` via les mécanismes Exchange Online disponibles dans votre tenant.

Renseigner :
`MAIL_FROM=affiliation@resaubange.be`

### 7. PHP
PHP 8.2 avec extensions :
- PDO MySQL
- cURL
- FileInfo
- JSON

Aucune dépendance Composer externe n'est nécessaire dans cette première archive.

## Arborescence

- `public/` : racine web
- `app/` : classes PHP
- `config/` : bootstrap/configuration
- `database/` : SQL
- `translations/` : langues
- `storage/private/` : documents non publics
- `storage/logs/` : logs techniques

## Suite recommandée

La prochaine itération devrait ajouter en priorité :

1. autocomplétion officielle des adresses BE/LU/FR avec saisie libre de secours ;
2. génération PDF CI recto-verso et composition de ménage ;
3. éditeur complet des modèles e-mails et CC/BCC ;
4. relances automatiques par CRON ;
5. boutons d'envoi FFA / PSD / finalisation dans l'admin ;
6. gestion des équipes/entraîneurs et CC automatique ;
7. exports XLSX/CSV ;
8. chiffrement réel des données de santé ;
9. détection des doublons ;
10. statuts « documents requis/reçus/vérifiés » calculés automatiquement.