Feature #83
closedCorriger la reconnaissance automatique des champs lors du scan d'étiquettes
100%
## Bug — Reconnaissance automatique des champs lors du scan d'étiquettes
### Problème
La fenêtre « Enregistrer une étiquette » (composant scan HACCP/catering sous src/components/) ne pré-remplit pas les champs depuis l'image scannée. 3 champs attendus : Nom du produit, Date de péremption (JJ/MM/AAAA), Numéro de lot.
### Cause probable
Parcours : modal scan (front) → upload image → base44.functions.invoke(fonction d'extraction) → LlmPort / adaptateur OpenAI (gpt-4o vision) dans server/src/infrastructure/llm/. Bug à l'une/les deux jointures :
1. Backend : la fonction ne renvoie pas les 3 champs en JSON structuré stable, ou la date n'est pas normalisée JJ/MM/AAAA.
2. Frontend : le résultat n'est pas mappé dans l'état du formulaire (setState/setValue non appelés ou mauvais mapping de clés).
### Approche
1. Backend : passer l'image au LlmPort (gpt-4o vision) avec un prompt demandant un JSON structuré { nomProduit, datePeremption, numeroLot } en français ; normaliser la date en JJ/MM/AAAA côté serveur ; renvoyer null/vide pour tout champ non reconnu (jamais d'invention).
2. Frontend : après réception, mapper chaque champ reconnu dans l'état (champs éditables) ; champ non reconnu → vide + message discret « Non reconnu – merci de compléter. » sous le champ.
3. NE PAS toucher aux permissions (aucun rls/auth modifié).
4. Le flux de submit existant ne change pas.
### Critères d'acceptation
- Pré-remplissage auto d'au moins un des 3 champs dans 90% des cas (étiquettes lisibles) ; champs éditables ; non reconnu → vide + message discret ; date JJ/MM/AAAA ; enregistrement possible après correction ; aucun changement de permissions.
- Tests : parsing/normalisation côté server (date, champs manquants) ; lint + typecheck verts.
### Portée : un seul flux cohérent (extraction → mapping). Pas de découpage.
Description
### Problème
Actuellement, l'outil de scan d'étiquettes dans la fenêtre *"Enregistrer une étiquette"* ne remplit **pas automatiquement** les champs attendus à partir de l'image scannée. Les utilisateurs doivent saisir manuellement les informations, ce qui annule l'utilité de la fonctionnalité de reconnaissance.
### Contexte
L'outil doit extraire et remplir automatiquement trois champs spécifiques à partir d'une étiquette scannée :
- **Nom du produit** (ex. : "Filet de bœuf 200g")
- **Date de péremption** (format JJ/MM/AAAA)
- **Numéro de lot** (ex. : "LOT-2026-4567")
Les permissions d'accès à cette fonctionnalité sont déjà gérées et ne nécessitent pas de modification.
### Comportement proposé
1. **Remplissage automatique** : Le scan doit pré-remplir les trois champs avec les données reconnues dans l'image.
2. **Édition manuelle** : Les champs doivent rester éditables pour permettre à l'utilisateur de corriger ou compléter les informations.
3. **Gestion des erreurs** : Si une information n'est pas reconnue (ex. : numéro de lot illisible), le champ reste vide et un message discret apparaît en dessous : *"Non reconnu – merci de compléter."* (en gris clair).
4. **Format de date** : La date doit être affichée au format **JJ/MM/AAAA** (ex. : 15/06/2026).
5. **Validation** : L'utilisateur peut enregistrer l'étiquette après vérification ou correction des champs.
## Acceptance criteria
- [ ] Le scan remplit automatiquement au moins un des trois champs (Nom du produit, Date de péremption, Numéro de lot) dans 90% des cas pour des étiquettes lisibles.
- [ ] Les champs pré-remplis sont éditables et peuvent être corrigés manuellement par l'utilisateur.
- [ ] Si une information n'est pas reconnue, le champ reste vide et un message discret apparaît en dessous : *"Non reconnu – merci de compléter."*
- [ ] La date de péremption est affichée au format **JJ/MM/AAAA** (ex. : 15/06/2026).
- [ ] L'utilisateur peut enregistrer l'étiquette après avoir vérifié ou corrigé les champs.
- [ ] Aucun changement n'est requis sur les permissions d'accès à la fonctionnalité.
## Classification
- bug
## Complexity
- 6/10 — La correction implique des ajustements dans la logique de reconnaissance d'image et l'intégration avec le formulaire, ainsi que des tests pour valider la précision de la reconnaissance.
Files