# GESTFORM — Gestion des formulaires F3 (version 2.0.0)

Application web de gestion des formulaires F3 (Carte de Commerçant de Côte d'Ivoire) : commandes, groupes organisés, bordereaux, talons (réception, capture
des images, saisie), tableaux de bord, export. Interface en français, utilisable sur ordinateur, tablette et téléphone.

## Tester en local

1. **MySQL de test** : lancer `..\mysql-local\demarrer-mysql.bat` (MySQL 8 sur le port 3307, base `gestfom`, utilisateur `gestfom` / `gestfom`) et laisser la fenêtre ouverte.
   Si le dossier `mysql-local` n'existe pas : voir « MySQL local » plus bas.
2. **Application** : `demarrer.bat` (ou `node server.js`) puis ouvrir http://localhost:3000.
   Au premier démarrage les tables sont créées et les données de référence chargées (DR, types, groupes organisés).
3. **Premier compte** : sur ce poste, la page de connexion demande de créer le compte administrateur.
4. **Chargement des formulaires** : menu « Chargement F3 » (ou `node outils/charger-f3.js`, option `--simuler` pour analyser sans écrire).
5. **Créer les comptes** : menu « Utilisateurs » (un code d'activation à 6 chiffres est remis à chaque personne, qui choisit son mot de passe à sa première connexion).

### Vérifications automatiques (base de TEST uniquement)
`node outils/test-api.js` : parcourt les droits, périmètres (CZ, DR), commandes, groupes, bordereaux, réception, capture, saisie, statistiques, exports et chargement.
Il commence par `outils/reinitialiser-test.js` (efface commandes, saisies, images, groupes créés dans l'application et comptes autres que `admin`).

### MySQL local (si besoin)
```
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --initialize-insecure --datadir=...\mysql-local\data
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --datadir=...\mysql-local\data --port=3307
mysql -uroot -P3307 -h127.0.0.1 -e "CREATE DATABASE gestfom CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'gestfom'@'127.0.0.1' IDENTIFIED BY 'gestfom'; GRANT ALL ON gestfom.* TO 'gestfom'@'127.0.0.1';"
```

## Menus et droits

| Menu | Admin | Superviseur | CZ | DR | Superviseur général | Opérateur |
|---|:-:|:-:|:-:|:-:|:-:|:-:|
| Commande F3 | ✔ | ✔ | ✔ (sa zone) | ✔ (sa DR) | ✔ | ✔ (ses saisies) |
| Groupes organisés | ✔ | ✔ | ✔ (sa zone) | ✔ (sa DR) | tableau + export | ✔ |
| Bordereaux | ✔ | ✔ | ✔ (sa zone) | ✔ (sa DR) | tableau | ✔ (ses saisies) |
| Talons > Réception | ✔ | ✔ | ✔ | ✔ | ✔ | — |
| Talons > Capture images | ✔ | ✔ | — | — | — | ✔ |
| Talons > Saisie | ✔ | ✔ | ✔ | ✔ | — | ✔ |
| Talons > Récépissés saisis | ✔ | ✔ | ✔ | ✔ | ✔ | ses saisies |
| Talons > Statistiques / Export | ✔ | ✔ | ✔ | ✔ | ✔ | — |
| DR | ✔ | — | — | — | ✔ | — |
| Tableau de bord | ✔ | — | ✔ (sa zone) | ✔ (sa DR) | ✔ | — |
| Utilisateurs, Chargement F3 | ✔ | — | — | — | — | — |

Un compte **CZ** est lié à une zone, un compte **DR** à une direction régionale (choisies à la création du compte). Source unique : `lib/droits.js`.

## Circuit d'un talon

1. **Chargement** : les formulaires (code de paiement = `FORM_Numero`, n° de série, redevance, agent de collecte) sont chargés depuis les classeurs Excel.
2. **Réception talons** : date, DR, groupe organisé, agent, superviseur et nombre de talons reçus par redevance.
3. **Capture images** : saisir/scanner le code de paiement → la DR, le groupe, la redevance et le n° de série s'affichent ; « Capturer l'image » (scanner ou appareil photo) ou
   « Importer une image » ; choisir *Talon* ou *Volant*. L'image est enregistrée (chiffrée), affichée, et le comptage du groupe (chargés / reçus / capturés / saisis) est mis à jour
   avec une alerte si des images sont capturées en plus des talons reçus.
4. **Saisie talons** : code de paiement → champs en lecture seule (DR, région, redevance, n° de série, agent de collecte) et **image du talon à droite** ; saisie des données complémentaires.
   `Entrée` = champ suivant, `Ctrl + Entrée` = enregistrer.

## Capture : scanner et appareil photo

Le navigateur ne peut pas piloter directement un scanner TWAIN/WIA. L'application utilise l'accès caméra du navigateur (`getUserMedia`) : un scanner ou une caméra de documents
qui se présente comme caméra est détecté et lancé automatiquement ; sur téléphone / tablette l'appareil photo arrière s'ouvre. Pour un scanner classique, numériser vers un fichier
puis « Importer une image ». L'accès caméra exige **HTTPS** (ou `localhost`).

## Données et sauvegarde

* Base MySQL : à sauvegarder avec les outils de l'hébergeur.
* **Images** : dossier `DATA_DIR/images/<DR>/<GROUPE>/<BENE_Code>_<FORM_Numero>.jpg`, **chiffrées** avec la clé `DATA_DIR/images.key`.
  **Sauvegarder `images.key` en lieu sûr : sans elle les images sont illisibles.**

Voir `DEPLOIEMENT.md` pour la mise en ligne, `CHANGELOG.md` pour l'historique.
