Feature #83
Updated by Redmine Admin about 2 months ago
## 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. conversation:38