diff --git a/frontend/pages/entry-exit/entry/[id].vue b/frontend/pages/entry-exit/entry/[id].vue
index 58fc83c..499d8f4 100644
--- a/frontend/pages/entry-exit/entry/[id].vue
+++ b/frontend/pages/entry-exit/entry/[id].vue
@@ -73,7 +73,44 @@
-
Tableau récap à venir
+
+
+ {{ formatDate(item.birthDate) }}
+
+
+ {{ formatDate(item.arrivalDate) }}
+
+
+ {{ formatPrice(item.finalPrice) }}
+
+
+ {{ formatPrice(item.pricePerKg) }}
+
+
+ {{ item.effectiveBuilding?.label ?? '—' }}
+
+
+ {{ item.buildingCase?.caseNumber ?? '—' }}
+
+
+ {{ item.bovineType?.label ?? '—' }}
+
+
+
+
+
([])
const savedBovines = ref([])
const isAdding = ref(false)
+const recapPage = ref(1)
+const recapPerPage = ref(50)
+
+const recapColumns = [
+ { key: 'nationalNumber', label: 'N° National', width: '110px' },
+ { key: 'workNumber', label: 'N° Travail', width: '90px' },
+ { key: 'bovineType.label', label: 'Race', width: '110px' },
+ { key: 'sex', label: 'Sexe', width: '60px' },
+ { key: 'birthDate', label: 'Né le', width: '90px' },
+ { key: 'receivedWeight', label: 'Poids', width: '70px' },
+ { key: 'arrivalDate', label: 'Entrée le', width: '90px' },
+ { key: 'pricePerKg', label: 'Prix/kg', width: '80px' },
+ { key: 'finalPrice', label: 'Prix total', width: '90px' },
+ { key: 'buildingCase.building.label', label: 'Bâtiment', width: '1fr' },
+ { key: 'buildingCase.caseNumber', label: 'Case', width: '60px' }
+]
+
+const formatDate = (date: string | null | undefined) => {
+ if (!date) return '—'
+ const d = new Date(date.replace(' ', 'T'))
+ if (isNaN(d.getTime())) return date
+ return d.toLocaleDateString('fr-FR', { day: '2-digit', month: '2-digit', year: 'numeric' })
+}
+
+const formatPrice = (price: number | null | undefined) => {
+ if (price === null || price === undefined) return '—'
+ return `${price.toLocaleString('fr-FR', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} €`
+}
+
+const confirmDeleteBovine = async (bovine: BovineData) => {
+ const confirmed = window.confirm(`Supprimer le bovin ${bovine.nationalNumber} ?`)
+ if (!confirmed) return
+
+ await api.delete(`bovines/${bovine.id}`)
+ await loadSavedBovines()
+}
interface FormState {
nationalNumber: string