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
RA Updated by Redmine Admin about 2 months ago
- Status changed from Submitted to Spec
Spec en cours (factory). Transition Submitted → Spec.
RA Updated by Redmine Admin about 2 months ago
- % Done changed from 0 to 100
- spec_ref updated (diff)
**Spec terminée** — pas de découpage. Cause probable : la fonction d'extraction vision ne renvoie pas les 3 champs en JSON structuré et/ou le frontend ne mappe pas le résultat dans le formulaire. `spec_ref` renseigné, `done_ratio=100`. Reste à **Spec** (bug → pas de design).
RA Updated by Redmine Admin about 2 months ago
- Status changed from Spec to In development
- branch set to fix/83-label-scan
Dev démarré (worktree isolé, branche `fix/83-label-scan` sur `origin/dev`). Spec → In development.
RA Updated by Redmine Admin about 2 months ago
- Status changed from In development to QA
- pr_url set to https://github.com/Scobby-organisation/scobby/pull/5
PR #5 ouverte vers `dev`, rebasée sur `dev` (après merge de #80 — fichiers serveur partagés ai.use-cases.ts/app.module.ts réconciliés ; test corrigé pour le constructeur AiFunctions à 2 args de #80). In development → QA. Gates : server typecheck, test unitaire 5/5, lint, build verts. Extraction réelle (vraies photos d'étiquettes + clé OpenAI) à valider en préprod.
RA Updated by Redmine Admin about 2 months ago
- Status changed from QA to Preprod
Déployé en préprod (https://preprod-scobby.omdev.tech). Passage QA → Preprod.
RA Updated by Redmine Admin about 1 month ago
- Status changed from Preprod to Ready to ship
Livré sur master (dev = preprod = master). Commit `b5bb450c` (PR #5) — fix(tracabilite): reconnaissance auto des champs au scan d'étiquette. Passage en **Ready to ship** — *Shipped* après confirmation du gate prod manuel (Jenkins) sur scobby.fr.
RA Updated by Redmine Admin about 1 month ago
- Status changed from Ready to ship to Shipped
- deploy_status set to deployed
- deployed_at set to 06/23/2026
Déploiement PROD confirmé live sur scobby.fr (gate manuel Jenkins approuvé le 2026-06-23). Passage en **Shipped**.