/** * Filtres d'affichage du module « Tickets de pesée » (M5, ERP-191). Helpers PURS * et testables, partagés par la liste et les écrans. Le serveur reste l'autorité * de normalisation (spec-front § Règles de formatage) : ces helpers ne font que * mettre en forme la valeur déjà normalisée renvoyée par l'API. */ /** * Date courte française `JJ-MM-AAAA` (spec M5). Chaîne vide si la valeur est * absente ou invalide. Lit les composantes locales (cohérent avec l'affichage * des autres répertoires M1→M4). */ export function formatDateFr(value: string | null | undefined): string { if (!value) { return '' } const date = new Date(value) if (Number.isNaN(date.getTime())) { return '' } const day = String(date.getDate()).padStart(2, '0') const month = String(date.getMonth() + 1).padStart(2, '0') return `${day}-${month}-${date.getFullYear()}` } /** * Poids en kg avec séparateur de milliers (espace) + suffixe « Kg » * (spec-front : « 7 150 Kg »). Chaîne vide si le poids est absent (ticket dont la * pesée à plein n'est pas finalisée). Groupement manuel (espace ASCII) pour un * rendu déterministe, indépendant de l'ICU de l'environnement. */ export function formatWeightKg(value: number | null | undefined): string { if (value === null || value === undefined) { return '' } const grouped = String(Math.round(value)).replace(/\B(?=(\d{3})+(?!\d))/g, ' ') return `${grouped} Kg` } /** * Immatriculation en MAJUSCULES (cohérent avec la normalisation serveur RG-5.01 : * trim + UPPER). Chaîne vide si absente. */ export function formatPlate(value: string | null | undefined): string { return value ? value.trim().toUpperCase() : '' }