Fonctionnement et architecture¶
Composants¶
| Composant | Rôle |
|---|---|
| FastAPI / Uvicorn | Routes, validation et serveur web |
| Jinja2 / HTMX | Pages et interactions de l'interface |
| PostgreSQL / psycopg | Données persistantes et transactions |
| ReportLab / pypdf | Génération et traitement des PDF |
| Docker Compose | Application, base et sauvegardes |
| Reverse proxy | HTTPS et accès public |
Le tag v0.2.9 utilise Python 3.15.0 dans Docker et la CI, FastAPI 0.150.0, Jinja2 3.1.6 et PostgreSQL 18.6. Ces versions concernent l’application, pas l’outil de construction de cette documentation.
PostgreSQL est le seul moteur accepté. DATABASE_URL configure sa connexion et DATA_DIR les fichiers de données.
Séparation des comptes¶
L'authentification est distincte des schémas métier par compte. Le compte connecté détermine les données consultables, les fichiers photo, paramètres et calendrier. Le propriétaire peut administrer les comptes.
Cette séparation applicative n'empêche pas un administrateur PostgreSQL ou un serveur compromis d'atteindre les données. Les sauvegardes doivent être privées et externes au serveur.
Cohérence métier¶
Les écritures sensibles utilisent transactions et verrous. Les ventes contrôlent ensemble le stock produit et lot. Les révisions des visites et ventes empêchent l'écrasement d'un formulaire ancien. Les migrations sont versionnées et exécutées sous verrou.
Sécurité¶
Les mots de passe sont hachés, les jetons de session et CalDAV stockés sous forme d'empreintes. Les formulaires sont protégés par CSRF. Les connexions sont limitées en débit. HTTPS et la bonne configuration du proxy restent nécessaires.
Modules de référence¶
| Fichier | Domaine |
|---|---|
app.py |
Initialisation, cheptel, extractions, produits et réglages |
field_tools.py |
QR codes privés et prévisions météo mises en cache par rucher |
workflow.py |
Visites regroupées, tâches et planning |
production.py |
Récoltes, lots et recherche de traçabilité |
commerce.py |
Ventes, stocks disponibles, caisse, dépenses et statistiques |
honey_labels.py |
Modèles, validation et génération des étiquettes |
miellerie.py |
Carnet de miellerie ODS/PDF |
offline_sync.py, static/offline-*.js |
Données locales et synchronisation des opérations |
database.py, schema/ |
Accès PostgreSQL et migrations |
Pour les données métier, ne prenez pas un libellé visuel pour une règle de calcul. Le stock reste la somme des mouvements, même si sa présentation évolue.
