# 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.