# Suivi projet — copro_gestion

> **Document de contexte pour les agents Cursor** (portable, fixe, reprise de session).
> Dernière mise à jour : **28 juin 2026** — version applicative **v0.3.1**.

---

## Travail multi-poste

| Machine | Accès au projet |
|---------|-----------------|
| Portable | Lecteur réseau `Y:\copro_gestion` |
| Fixe | Même mappage `Y:\copro_gestion` (ou identique) |
| VPS (prod) | `/var/www/stessy.org/copro_gestion` — **disque local du serveur** |

- **Pas de workflow git pull/push** entre les deux PC : c’est le **même dossier** via le partage réseau.
- Le dépôt **Bitbucket** (`origin`) sert de **sauvegarde / reprise** en cas de besoin, pas de sync quotidienne.
- Après modification du code : redémarrer Gunicorn sur le VPS si l’app tourne déjà (`sudo systemctl restart copro_gestion`).

### Ne pas confondre (important pour l’agent)

- Sur **Windows** : `Y:\` = partage vers le serveur.
- Sur le **VPS** : Gunicorn lit/écrit des fichiers **locaux** (`/var/www/...`). Ce n’est **pas** du SMB côté serveur.
- Erreurs SQLite « readonly » ou « locked » côté prod → vérifier **permissions `www-data`** et **1 worker Gunicorn**, pas le partage réseau.

---

## Application

| Élément | Valeur |
|---------|--------|
| Stack | Python 3, Flask, SQLite, Gunicorn, Apache |
| URL prod | `https://www.stessy.org/papa/` (préfixe Apache uniquement) |
| Port Gunicorn | `127.0.0.1:8001` |
| Service systemd | `deploy/copro_gestion.service` — user `www-data`, **1 worker** |
| Doc install | `README.md` |

### Bases SQLite (`data/`)

| Fichier | Usage |
|---------|--------|
| `copropriete.db` | Production |
| `import-test.db` | Import / tests (défaut du CLI) |
| `import-config.json` | Réponses questionnaire import (gitignoré) |
| `import-reports/` | Rapports d’import (gitignoré) |
| `backups/` | Sauvegardes auto avant `--prod` (gitignoré) |

**Sélecteur à la connexion** : choix Production vs Import (test) **uniquement au login** ; badge jaune en en-tête si base import. Changer de base = déconnexion + reconnexion. Voir `app/database_profiles.py`, `app/routes/auth.py`.

### Comptes créés par `init_db.py` (si absents)

| Login | Mot de passe | Admin |
|-------|--------------|-------|
| `stessy.cauet` | `Scauet.000` | oui |
| `jeanmarc.cauet` | `JMcauet.000` | non |
| `amaranthe.hurtado` | `Ahurtado.000` | non |

L’import Excel rattache ces 3 comptes à la copropriété importée (`app/excel_import/contexts/copropriete.py`).

---

## Import Excel (v0.3)

### État actuel (juin 2026)

- Questionnaire rempli par le père → `data/import-config.json`.
- Import test exécuté sur `import-test.db` : ~1 copro, **48 lots**, ~**80 personnes**, **117 rôles**.
- Feuille source principale : **« Info propriétaires & occupants »** (pas la feuille « (2) »).
- **En attente** : retour du père sur la relecture → ajustements import à faire ensuite.

### Point bloquant connu — lot copro n° 42

Doublon détecté à l’import :

- **GIGAUD** → lot copro **0.4** (selon Excel)
- **RIT** → lot copro **7.1** mais aussi signalé en **42**

Règles de remap syndic déjà en place (`app/excel_import/config.py`) :

- `P042000` → copro `42`
- `P004200` → copro `4`

**À trancher avec le père** avant import prod définitif.

### Autres règles d’import déjà codées

- Éclatement lots : **09-10**, **40-41**, **44-45**
- Contextes CLI (`--only` / `--all`) : `copropriete` → `personnes` → `lots` → `roles` → `autres`

### Commandes utiles

```bash
# Simulation
python import_excel.py --dry-run --all

# Écriture base test (défaut)
python import_excel.py --all

# Un contexte, sans reset entre passes
python import_excel.py --only personnes
python import_excel.py --only lots --no-reset

# Prod (sauvegarde + reset + copropriete.db)
python import_excel.py --all --prod
```

Fichier Excel par défaut dans le code : chemin local Windows dans `app/excel_import/config.py` (`DEFAULT_EXCEL`) — passer `--excel "chemin"` si autre machine/chemin.

Parser questionnaire : `python tools/parse_questionnaire_reponses.py "fichier.xlsx" -o data/import-config.json`

Doc détaillée : `docs/import-questionnaire.md`

---

## Déploiement / ops VPS

```bash
cd /var/www/stessy.org/copro_gestion
./venv/bin/pip install -r requirements.txt   # openpyxl ajouté en v0.3
sudo cp deploy/copro_gestion.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl restart copro_gestion
```

### Permissions (cause fréquente d’erreurs)

Fichiers en `root:root` → `www-data` ne peut **pas** écrire (664 = lecture seule pour others).

```bash
sudo chown -R www-data:www-data /var/www/stessy.org/copro_gestion/data/
sudo chmod 755 /var/www/stessy.org/copro_gestion/data
sudo chmod 664 /var/www/stessy.org/copro_gestion/data/*.db
```

Après création/copie de `.db` depuis root ou via partage Windows : **refaire le chown**.

### SQLite côté app

- `app/db_sqlite.py` : `PRAGMA busy_timeout=30000` uniquement (**pas de WAL** — provoquait des erreurs readonly).
- `config.py` : timeout connexion 30 s, binds prod + import.

---

## Fichiers clés (pour navigation rapide)

| Fichier | Rôle |
|---------|------|
| `import_excel.py` | Point d’entrée CLI import |
| `app/excel_import/` | Logique par contextes |
| `init_db.py` | Schéma + migrations légères + comptes par défaut |
| `app/database_profiles.py` | Routage ORM prod / import-test |
| `app/routes/auth.py` | Login + choix de base |
| `app/routes/admin.py` | Gestion users (gestion erreurs SQLite) |
| `deploy/copro_gestion.service` | Gunicorn 1 worker |

---

## Prochaines étapes (à jour manuellement)

- [ ] **Retour du père** sur l’import Excel → appliquer les ajustements demandés
- [ ] Résoudre le **conflit lot 42** (GIGAUD / RIT)
- [ ] Valider import sur `import-test.db` via l’UI (connexion base Import)
- [ ] Import prod (`--prod`) seulement après validation
- [ ] Vérifier sur VPS : service 1 worker déployé, droits `www-data` sur `data/`

---

## Consignes pour l’agent Cursor

1. **Répondre en français** à l’utilisateur (stessy).
2. **Minimiser la portée** des diffs — pas de refacto hors sujet.
3. **Ne pas commit/push** sauf demande explicite ; le remote Bitbucket est une sauvegarde, pas le flux de travail quotidien.
4. **Ne pas expliquer** les problèmes SQLite prod par le « partage réseau côté serveur ».
5. Mettre à jour **ce fichier** après une session importante (décisions, blocages, commandes, état import).

---

## Historique versions récentes

| Version | Date | Contenu principal |
|---------|------|-------------------|
| v0.3.1 | 28 juin 2026 | `docs/suivi-projet.md`, `AGENTS.md` — reprise session / multi-poste (Y:\) |
| v0.3 | 27 juin 2026 | Import Excel, sélecteur BDD login, 3 comptes par défaut, SQLite/Gunicorn |
| v0.2 | 28 juin 2026 | Lots enrichis, téléphones, navigation, UUID publics |
| v0.1 | — | Application initiale Flask + SQLite |

Commit v0.3.1 sur Bitbucket : `6c2fa61` — v0.3 : `f1b0645`.
