Feature #49
closedFeature #26: Implémenter la classification automatique et l'estimation de complexité des tickets par l'assistant AI
Backend — enrichir le draft de ticket avec classification & estimation de complexité
0%
conversation:21#26
Description
**Parent :** #26 · **Taille :** L · **Dépendances :** aucune · **Surface :** backend (`api/`, hexagonal FastAPI)
## Objectif
Enrichir le draft de ticket produit par l'assistant Mistral (`MistralTicketSpecWriter`, `draft_ticket`, `create_ticket_from_draft`) avec :
- une **classification** par défaut : `bug` | `évolution`
- une **estimation de complexité** : note `/10` + explication courte
Propager ces champs dans le domaine + DTO du draft ; à la création (`create_ticket_from_draft`), persister sur Redmine, ajouter le label **`bf-disagree`** si le client a modifié la classification proposée, et persister une **argumentation** optionnelle (commentaire/champ, peut être vide). Multi-tenant + langue du client (FR/EN). Non-bloquant.
## Acceptance criteria
- [ ] `draft_ticket` renvoie `classification` (bug|évolution) + `complexity` (note/10 + explication) par défaut.
- [ ] L'explication de complexité est rendue dans la langue du client (FR/EN).
- [ ] `create_ticket_from_draft` persiste classification + note + explication sur le ticket Redmine.
- [ ] Si la classification finale ≠ proposition de l'assistant → label `bf-disagree` ajouté automatiquement.
- [ ] Argumentation optionnelle persistée (peut être vide → pas d'erreur, non-bloquant).
- [ ] Isolation multi-tenant (un client ne voit/écrit que ses tickets).
- [ ] Gate vert : `python -m pytest -q` (×2 sur une DB), `ruff check .`, `mypy src`. TDD.
Files