Antoine Van Elstraete e9f73c7562 feat: persister les événements de présence et activer les clés étrangères SQLite
Ajoute le modèle WorkplacePresenceEvent pour stocker les événements de
présence reçus de Home Assistant, avec clé d'idempotence unique, lien vers
une journée et, facultativement, une plage horaire. Active les contraintes
de clés étrangères sur chaque connexion SQLite et documente le schéma dans
l'onboarding. Couvre le tout par des tests de modèle et de factory.

Co-authored-by: OpenAI/GPT-5.6-Luna-Pro <vibecoder@antoineve.me>
2026-08-13 17:36:26 +02:00
2026-03-13 13:45:19 +01:00

Tableau de bord pro

Application web personnelle de suivi du temps de travail et des déplacements professionnels.

Développée en vibe coding avec Claude Sonnet 4.6 (Anthropic).

Fonctionnalités

  • Journal de bord : saisie quotidienne avec type de journée (travail, télétravail, garde, astreinte, formation, RTT, congé, maladie, férié), plages horaires et commentaire
  • Suivi des déplacements : kilométrage par véhicule, estimation CO₂, calcul des frais réels selon le barème kilométrique fiscal
  • Solde congés / RTT : suivi des jours posés et du solde restant
  • Rapports annuels : kilométrage total, frais réels déductibles, répartition par type de journée
  • Véhicules électriques : majoration de 20 % appliquée automatiquement sur les frais réels

Installation

Prérequis

  • Python 3.11+

Développement

# Cloner le dépôt
git clone ssh://git.antoineve.me/AntoineVe/tableau-de-bord.git
cd tableau-de-bord

# Créer l'environnement virtuel et installer les dépendances
python -m venv .venv
.venv/bin/pip install -r requirements.txt

# Lancer le serveur de développement
.venv/bin/python run.py

L'application est accessible sur http://localhost:5000.

Production (systemd + Gunicorn)

Déploiement dans /var/www/tableau-de-bord-pro/, service géré par systemd.

# Copier l'application
sudo rsync -a --exclude='.venv' --exclude='instance' . /var/www/tableau-de-bord-pro/
cd /var/www/tableau-de-bord-pro
sudo python -m venv .venv
sudo .venv/bin/pip install -r requirements.txt
sudo chown -R www-data:www-data /var/www/tableau-de-bord-pro

# Installer le service
sudo cp tableau-de-bord-pro.service /etc/systemd/system/

# Configurer (notamment SECRET_KEY)
sudo systemctl edit --full tableau-de-bord-pro

# Activer et démarrer
sudo systemctl enable --now tableau-de-bord-pro

# Vérifier
sudo systemctl status tableau-de-bord-pro

Configuration

Toute la configuration métier se trouve dans config.toml :

  • [vehicles.*] : véhicules avec puissance fiscale, type de carburant et émissions CO₂
  • [journeys.*] : profils de trajet avec distances par véhicule
  • [bareme_kilometrique.YYYY.*] : barème fiscal par année et puissance (à mettre à jour chaque année)

Tests

.venv/bin/python -m pytest

Qualité Python

Ruff est l'unique outil de lint, de tri des imports et de formatage Python :

.venv/bin/ruff check .
.venv/bin/ruff format --check .

La configuration se trouve dans pyproject.toml (Python 3.11+, lignes de 100 caractères). Le formatage peut être appliqué avec .venv/bin/ruff format . lors de l'étape de correction dédiée.

Import bulk depuis CSV

Un script est disponible pour importer des entrées en masse depuis un fichier CSV :

# Format du CSV : date,day_type,journey_profile_id,motor_vehicle_id,start_time,end_time,comment
# Exemple :
# 2025-06-02,WORK,moteur_seul,familiale,09:00;14:00,17:45;12:00,Travail normal
# 2025-06-03,TT,,,09:00,17:45,Télétravail

.venv/bin/python scripts/import_csv.py mon_fichier.csv

# Avec une config personnalisée
.venv/bin/python scripts/import_csv.py mon_fichier.csv --config /chemin/vers/config.toml

Comportement :

  • En cas de conflit sur une date, les données existantes sont conservées et un avertissement est affiché
  • Les plages horaires multiples peuvent être séparées par des points-virgules (;)
  • Types de jour valides : WORK, TT, GARDE, ASTREINTE, FORMATION, RTT, CONGE, MALADE, FERIE

Licence

MIT — Copyright (c) 2026 Antoine Van-Elstraete

Description
Application web personnelle de suivi du temps de travail et des déplacements professionnels.
Readme 327 KiB
Languages
Python 70.8%
HTML 29.1%
Shell 0.1%