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>
This commit is contained in:
2026-08-13 17:36:26 +02:00
parent c30bd1c0c5
commit e9f73c7562
5 changed files with 183 additions and 0 deletions

View File

@@ -120,6 +120,14 @@ La base de données stocke l'activité saisie par l'utilisateur :
- **`work_entries`** : Une ligne par jour saisi (date, type de jour, ID du trajet, ID du véhicule, commentaire, timestamps).
- **`time_slots`** : Les plages horaires travaillées associées à une journée (heure de début, heure de fin, ID de l'entrée).
- **`leave_balance`** : Les quotas annuels de congés et de RTT (année, total congés, total RTT).
- **`workplace_presence_events`** : Les événements reçus de Home Assistant, avec une clé d'idempotence unique et leurs liens vers une journée et, facultativement, une plage horaire.
Les événements de présence stockent `received_at` comme un timestamp UTC naïf,
conformément à la convention existante des métadonnées. `occurred_at` est différent :
il représente une heure locale Europe/Paris naïve, et `local_date` est le jour local
qui en est dérivé. Une arrivée non encore rattachée à une plage est identifiée par
`event_type = "arrival"` et `time_slot_id IS NULL`; la signification de
`processed_at` sera précisée par le service métier de l'étape suivante.
---