# Fiche Mission TPZ — application de génération

Application web (Flask) qui produit un fichier Word `.docx` fidèle au modèle
Instadrone à partir d'un formulaire, avec calculs de densité de population basés
sur les données carroyées INSEE Filosofi.

## Lancer l'application

Installation (une fois) :

```bash
pip install -r requirements.txt
```

Lancement (Windows, recommandé) : **double-cliquer sur `lancer_fiche_mission.bat`**
depuis l'explorateur de fichiers Windows. Ce lanceur ferme automatiquement toute
ancienne instance restée ouverte sur le port 5000, démarre l'application et ouvre
le navigateur.

> ⚠️ **Ne pas lancer avec « Code Runner » / le bouton « Run » de VS Code.** Ce
> mode n'est pas un vrai terminal : il met l'affichage en mémoire tampon (les
> messages n'apparaissent jamais tant que le serveur tourne) et ne permet pas
> d'arrêter le serveur. Lancez le `.bat` par double-clic dans l'explorateur
> Windows, ou depuis le **Terminal intégré** de VS Code (menu Terminal → Nouveau
> terminal) avec `.\lancer_fiche_mission.bat`.
>
> **Pour arrêter** l'application : fermez la fenêtre du lanceur, ou faites
> `CTRL+C` dans le terminal. Si une instance semble « bloquée » sur le port 5000,
> relancez simplement le `.bat` : il ferme l'ancienne avant de démarrer.

Lancement manuel (toutes plateformes) :

```bash
python app.py
```

Le navigateur s'ouvre tout seul sur http://127.0.0.1:5000. Si le port 5000 est
déjà occupé par une instance précédente, l'application le signale et s'arrête
au lieu de démarrer en double (plus de « fantôme » qui sert une vieille version).
Pour utiliser un autre port : `set FICHE_PORT=5050` (Windows) puis `python app.py`.

## Utilisation en équipe (instance partagée sur le réseau)

Pour que plusieurs personnes utilisent l'outil **sans rien installer** : un seul
poste héberge l'application, les autres l'ouvrent dans leur navigateur. Les
fiches et l'annuaire des télépilotes sont alors **communs à toute l'équipe**
(une seule base de données).

Sur le poste hôte : **double-cliquer sur `lancer_serveur_partage.bat`**. Au
premier lancement, autoriser Python dans le pare-feu Windows (« Réseaux
privés »). La fenêtre affiche deux adresses : une locale, et une « Depuis les
AUTRES postes » (ex. `http://192.168.1.23:5000`) — c'est cette dernière à
transmettre aux collègues, qui la saisissent dans leur navigateur.

Conditions : le poste hôte doit rester allumé et l'application ouverte pendant
l'utilisation ; tous les postes doivent être sur le même réseau local. Pour un
usage confortable, il est conseillé de réserver une **adresse IP fixe** au poste
hôte (sinon l'adresse peut changer au fil des redémarrages). L'application est
servie par *waitress* (serveur adapté à plusieurs utilisateurs simultanés).

Rappel : comme les données sont centralisées sur ce poste, ce sont ses fichiers
`data/` qui font foi — pensez à les inclure dans vos sauvegardes.

## Serveur TOUJOURS actif (installation en service Windows)

Pour que l'équipe ne dépende plus de personne pour démarrer l'outil, on installe
l'application en **service Windows** : elle démarre automatiquement à l'allumage
du poste hôte, tourne en arrière-plan (aucune fenêtre à garder ouverte) et
redémarre seule en cas de plantage. Cela fonctionne aussi bien sur ton PC que
sur un PC dédié du bureau.

Sur le poste qui hébergera le serveur, **clic droit sur `installer_service.bat`
→ « Exécuter en tant qu'administrateur »** (à faire une seule fois). Le script
télécharge l'utilitaire NSSM, crée le service, le démarre, et affiche l'adresse
à partager. Pour retirer le service : `desinstaller_service.bat` (en
administrateur ; vos données `data/` sont conservées).

Réglages du poste hôte :
- **Désactiver la mise en veille / veille prolongée** (Paramètres → Alimentation),
  sinon le serveur devient injoignable quand le PC dort.
- **Sauvegarder le dossier `data/`** régulièrement (il contient toutes les fiches).
- **Export PDF en service** : un service Windows ne peut pas piloter Microsoft
  Word. Pour que le bouton PDF fonctionne dans ce mode, installez **LibreOffice**
  (gratuit) sur le poste hôte — l'application l'utilisera automatiquement. Le
  téléchargement Word (.docx) fonctionne dans tous les cas.

### Adresse d'accès et réseaux WiFi (2.4 / 5 GHz)

Au démarrage, l'application affiche deux adresses pour les autres postes : une
**par IP** (`http://192.168.x.x:5000`) et une **par nom de machine**
(`http://NOM-DU-PC:5000`). **Privilégiez l'adresse par nom** : elle ne change pas
même si l'adresse IP du poste évolue.

À propos des bandes WiFi : le 2.4 GHz et le 5 GHz d'une même box/routeur
aboutissent presque toujours au **même réseau local** — un appareil en 5 GHz peut
donc joindre le poste hôte connecté en 2.4 GHz (et inversement) sans problème. Ce
qui compte, c'est d'être sur le **même réseau**, pas la même bande. Points
d'attention :
- Évitez le réseau « invité » (souvent isolé) : les postes doivent être sur le
  réseau principal, comme le poste hôte.
- Pour une stabilité maximale, branchez le poste hôte en **Ethernet (câble)** et
  demandez une **IP fixe** (réservation DHCP sur la box) — ou utilisez simplement
  l'adresse par nom de machine, qui s'affranchit des changements d'IP.
- Si certains postes ne joignent vraiment pas le serveur, c'est probablement que
  ce sont des réseaux réellement séparés (VLAN / routeurs distincts) : il faut
  alors les rattacher au même réseau que le poste hôte.

> **Vérifier si deux postes sont sur le même réseau** : sur chacun, ouvrir une
> invite de commandes et taper `ipconfig`. Comparer l'« Adresse IPv4 ». Si les
> trois premiers nombres sont identiques (ex. `192.168.1.x` des deux côtés), ils
> se joignent. S'ils diffèrent, connectez-les au même WiFi (celui de la box du
> poste hôte).

### Diffuser l'adresse sans intervention (raccourci Bureau)

L'adresse par nom de machine étant **permanente**, il suffit de la distribuer une
fois. Le plus simple : exécuter `creer_raccourci_bureau.bat` sur chaque poste
utilisateur (il demande le nom du PC serveur et crée une icône « Fiche Mission
TPZ » sur le Bureau). Les collègues n'ont alors qu'à double-cliquer l'icône,
sans rien retenir ni taper. Le fichier `.url` créé peut aussi être copié
directement sur le Bureau des autres postes, ou déposé sur un dossier partagé.

Astuce : renommez une fois pour toutes le PC serveur avec un nom simple et
mémorisable (Paramètres Windows → Système → « Renommer ce PC », ex.
`INSTADRONE-SERVEUR`). L'adresse devient alors `http://instadrone-serveur:5000`,
facile à communiquer et définitive.

### Accès à distance (hors bureau)

Non couvert par défaut, et à n'activer qu'en cas de besoin réel : exposer l'outil
hors du réseau local nécessiterait d'ajouter une **authentification** (mot de
passe) et du **HTTPS**, voire de passer par un **VPN** d'entreprise. À voir le
moment venu.

## Première utilisation : préparer les données INSEE

Les calculs de densité s'appuient sur la grille carroyée 200 m de l'INSEE
(~240 Mo). Au premier lancement, un bandeau en haut de page propose « Préparer
les données INSEE » : cette étape unique télécharge le fichier puis le convertit
en base indexée (GeoPackage). Elle peut durer plusieurs minutes ; une fois
faite, les calculs sont quasi instantanés et le cache est réutilisé.

**Si la préparation échoue** (message « n'est pas une archive ZIP » ou erreur
réseau) : le site de l'INSEE a renvoyé autre chose que le fichier attendu. Vous
pouvez le télécharger manuellement — « Carreau 200m – Shapefile » sur
https://www.insee.fr/fr/statistiques/8735162 — et déposer le `.zip` dans
`data/insee_cache/` sous le nom `Filosofi2021_carreaux_200m_shp.zip`, puis
relancer la préparation depuis le bandeau.

## Fonctionnalités principales

- **Formulaire complet** reprenant les sections A à D du modèle.
- **Jusqu'à 5 parcelles**, chacune avec son propre KML, ses mitigations
  (M1(A)/M1(C)/M2) et ses densités.
- **Jusqu'à 4 télépilotes**, reliés à un annuaire nom → téléphone
  (bouton « Gérer les télépilotes », édition/suppression sans quitter le
  formulaire).
- **Densité maximale (section B)** : mesurée sur la zone la plus extérieure du
  KML (le buffer), carreau INSEE le plus dense de l'empreinte.
- **Densité moyenne (section D)** : moyenne pondérée sur un cercle de 5 km de
  rayon centré sur le centre du buffer de chaque parcelle.
- **Sélecteurs de dates** (début/fin) formatés automatiquement.
- **Valeurs par défaut** : 40 m AGL et ARC-B (toujours présentes sur la fiche).
- **Remplissage automatique** des noms de fichiers KML (section B) et de la
  catégorie de densité (sections B et D).
- **Réf. dossier mémorisée** (dernière valeur utilisée).
- **Sauvegarde durable** des fiches générées (« Mes fiches ») : rouvrir,
  corriger, régénérer. Les images d'annexes sont conservées et réutilisées.
  L'ouverture d'une fiche existante la met à jour en place (pas de doublon) ;
  un **garde-fou** prévient si une nouvelle fiche a la même réf. dossier et le
  même numéro qu'une fiche déjà enregistrée.
- **Source des densités affichée** : le jeu de données INSEE utilisé (Filosofi
  2021, carreaux 200 m) est indiqué dans le formulaire et rappelé discrètement
  en pied de page de la fiche générée.
- **Brouillon local** automatique dans le navigateur (anti-perte de saisie).
- **Annexe 1 multi-images** : possibilité d'importer plusieurs cartes de densité,
  chacune placée sur sa propre page paysage (bandeau-titre répété). L'annexe 2
  reste une image unique.
- **Trois actions séparées** en bas de formulaire : « Enregistrer la fiche »
  (persistance seule, sans téléchargement), « Télécharger en Word (.docx) » et
  « Télécharger en PDF ». Les trois enregistrent la fiche.
- **Annexes** : insertion d'images redimensionnées pour tenir sur leur page
  (paysage), sans page blanche parasite.

## Export PDF

Le bouton « Télécharger en PDF » convertit le document Word en PDF :
- via **Microsoft Word** (module `docx2pdf`) sur un poste Windows/macOS équipé
  d'Office — rendu identique à Word ;
- sinon via **LibreOffice** (`soffice`) s'il est installé.

Si aucun des deux n'est disponible, l'application le signale clairement et le
téléchargement Word reste utilisable. Pour activer le PDF : garder Microsoft Word
installé (cas courant), ou installer LibreOffice (gratuit).

## Stockage des données

Par défaut, les fiches et fichiers sont enregistrés dans `./data/` :
- `data/missions.db` — base SQLite des fiches ;
- `data/mission_files/<id>/` — fichiers joints (KML, images d'annexes) ;
- `data/pilots.json` — annuaire des télépilotes ;
- `data/insee_cache/` — données INSEE téléchargées/indexées.

Pour utiliser un autre répertoire (par ex. si le disque courant ne supporte pas
le verrouillage SQLite) :

```bash
FICHE_DATA_DIR=/chemin/vers/donnees python app.py
```

## Régénérer le modèle Word

Le template réutilisable est produit une fois à partir du document source par :

```bash
python build_template.py
```

(Ce n'est nécessaire que si le document source de référence change.)

## Tests

```bash
python test_insee_density.py   # logique géométrique (KML, densités)
python test_generate.py        # génération d'un docx de démonstration
```
