- infrastructure/case : clic ligne → /bovine/{id}, bouton Ajouter retiré, row-clickable ouvert à tous
- infrastructure/bovine.vue supprimée (création/édition de bovin gérée via EDNOTIF)
- bouton précédent de la page Vie du bovin : router.back avec fallback /inventory
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Entité BovineMovement (bovine, buildingCase|building, enteredAt, leftAt) + relation OneToMany sur Bovine ordonnée DESC
- Endpoint POST /api/bovine_movements via BovineMovementProcessor : ferme le mouvement courant, ouvre le nouveau, synchronise bovine.buildingCase
- Commande idempotente app:backfill-bovine-movements pour initialiser l'historique des bovins existants
- Onglet Mouvement de la page Vie du bovin : form 3 colonnes (style admin) + UiDataTable avec filtres header (Bâtiment, Case actifs ; Du/Au/Durée désactivés)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Nouvelle page /bovine/[id] avec tabs Mouvement / Passeport bovin / Santé
- Composant UiTabs partagé, réutilisé sur réception et expédition
- Champs père/mère (numéro national + type de race) sur Bovine, alimentés via la sync EDNOTIF
- Inventaire : ligne cliquable vers le passeport
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>