# Modification groupée de formule — saisie de quantités décimales

## Problème

Dans la feuille "Formule modification groupée", on ne pouvait saisir que des entiers dans les champs quantité ("Qté à remplacer", "Qté remplacement" / "Dosage").

Cause : les champs étaient des `<input type="number">` associés à un filtre JS qui réécrivait `this.value` à chaque frappe. Avec un champ number, une saisie en cours comme `1,` ou `1.` est lue comme invalide ou incomplète par le navigateur, puis la réécriture supprimait le séparateur décimal.

## Changements

### Vue — [index.blade.php](../resources/views/formule_modification_groupee/index.blade.php)
- Les champs `qte_produit_{i}` / `qte_substitution_{i}` passent en `type="text" inputmode="decimal"` (clavier numérique sur mobile).
- Filtre `input` revu : la virgule est convertie en point, seuls les chiffres et un seul séparateur décimal sont gardés, et la valeur n'est réécrite que si elle a changé.

### Contrôleur — [formule_modification_groupee_controller.php](../app/Http/Controllers/formule_modification_groupee_controller.php)
- `valider()` : les quantités sont normalisées (`,` → `.`) avant le `floatval()`, par sécurité.
- **Comparaison des quantités** (`data_table()` et les 2 branches de `valider()`, mode "remplacement avec vérification de quantité") : `where('composition_quantite', $q)` devient `whereRaw('ABS(composition_quantite - ?) < 0.0001', [$q])`.
  La colonne `t_composition.composition_quantite` est en `FLOAT` (simple précision). Une égalité stricte avec un décimal ne trouve donc jamais de ligne. Vérifié sur la base de dev : `= 0.3` → 0 ligne, avec tolérance → 149 lignes.

## Vérifications
- Lint PHP OK, compilation Blade OK, requête de comparaison testée sur la base de dev.
- Non testé dans le navigateur (page protégée par authentification).
