53 lines
2 KiB
Markdown
53 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.
|