groupe-meditation/docs/ARCHITECTURE.md
2026-05-25 17:39:38 -04:00

52 lines
2 KiB
Markdown

# Architecture technique
## Sources de vérité
- `propositions` porte les propositions, résolutions, nominations et contributions.
- Une décision de groupe est une proposition adoptée avec `date_adoption`, `numero_resolution`, `etant_donne_que` et `groupe_a_decide_de`.
- `transactions_comptables` est la source des soldes financiers.
- `mouvements_reserves` est la source des soldes de réserves.
- `reserves.montant` est un cache d'affichage; il ne doit pas devenir la source de vérité.
## Backend
- `app/core`: configuration, sécurité, rôles, règles communes.
- `app/services`: logique métier réutilisable, notamment `finance.py`.
- `app/models`: tables SQLAlchemy.
- `app/routers`: endpoints FastAPI. Les routers doivent orchestrer, pas contenir les calculs centraux.
- `app/schemas`: contrats Pydantic d'entrée/sortie.
Règle de maintenance: un router ne doit pas importer un autre router pour obtenir une logique métier. Extraire dans `app/services` ou `app/core`.
## Frontend
- `src/pages`: écrans applicatifs.
- `src/components`: composants partagés.
- `src/utils`: calculs purs et helpers.
- `src/stores`: état global et client API.
Règle de maintenance: si un contrôle ou calcul apparaît dans plusieurs pages, l'extraire dans `components` ou `utils`.
## Comptabilité
Les écritures comptables utilisent:
- `compte`: `banque` ou `encaisse`;
- `sens`: `debit` augmente le compte, `credit` le diminue;
- `source_table` et `source_id`: lien vers l'objet métier.
Exemples:
- Collecte reçue: débit `encaisse`.
- Vente de littérature reçue: débit `encaisse`.
- Dépôt bancaire: débit `banque`, crédit `encaisse`.
- Retrait bancaire: crédit `banque`, débit `encaisse`.
- Dépense cash: crédit `encaisse`.
- Dépense par chèque/virement débitée: crédit `banque`.
- Contribution débitée: crédit `banque`.
## Déploiement
La voie normale est Ansible. Voir [ANSIBLE.md](ANSIBLE.md).
Le déploiement installe PostgreSQL, le backend FastAPI, le frontend compilé, NGINX, systemd et les sauvegardes.