/** * Helpers de saisie numérique du formulaire principal transporteur (ERP-170). * Champs texte restreints (volume m³ décimal, indexation plafonnée). Purs / testables. */ /** * Restreint une saisie à un nombre décimal : chiffres + UN seul point (RG volume m³, * « nombres avec des points » comme les autres modules). Supprime tout autre caractère. */ export function sanitizeDecimal(value: string): string { let cleaned = (value ?? '').replace(/[^0-9.]/g, '') const dot = cleaned.indexOf('.') if (dot !== -1) { // Conserve le 1er point, retire les suivants. cleaned = cleaned.slice(0, dot + 1) + cleaned.slice(dot + 1).replace(/\./g, '') } return cleaned } /** * Plafonne un pourcentage à 100 (contrainte FRONT : l'indexation n'a pas de max back). * Renvoie « 100 » si la valeur saisie dépasse 100, sinon la valeur telle quelle. */ export function clampPercent(value: string): string { const n = Number(String(value ?? '').replace(',', '.').replace(/\s/g, '')) return (!Number.isNaN(n) && n > 100) ? '100' : value }