Project

General

Profile

Actions

Feature #26

closed
CD

Implémenter la classification automatique et l'estimation de complexité des tickets par l'assistant AI

Feature #26: Implémenter la classification automatique et l'estimation de complexité des tickets par l'assistant AI

Added by Client Dashboard about 2 months ago. Updated about 2 months ago.

Status:
Shipped
Priority:
Normal
Assignee:
-
Start date:
06/11/2026
Due date:
% Done:

100%

Estimated time:
(Total: 0:00 h)
spec_ref:

split:49,50,51

build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
preprod_url:
deployed_at:
branch:
pr_url:
security_key:
severity:
paused:

Description

### Problème
Actuellement, l’assistant AI de Pipeliner ne propose pas de classification (bug/évolution) ni d’estimation de complexité pour les demandes des clients. Cela entraîne une charge manuelle pour l’équipe OmDev, qui doit revoir chaque ticket pour déterminer son type et son effort associé. De plus, les clients ne disposent pas d’une visibilité immédiate sur la priorisation potentielle de leur demande.

### Contexte
Lorsqu’un client décrit une demande (bug ou évolution) dans le chat, l’assistant doit :
1. **Proposer une classification par défaut** (bug ou évolution) basée sur l’analyse du texte.
2. **Afficher une estimation de complexité** (note sur 10 avec explication courte) pour aider à prioriser le travail.
3. **Permettre au client de modifier ces valeurs**, avec des mécanismes pour signaler un désaccord (tag `bf-disagree`) et argumenter si nécessaire.
4. **Afficher ces informations** dans la prévisualisation du ticket et sur la page du ticket après création.

Cette fonctionnalité s’intègre dans le flux existant de création de tickets (conversation → Redmine) et doit respecter les contraintes suivantes :
- Multi-tenant (chaque client voit ses propres tickets).
- Multi-langue (FR/EN, selon la préférence du client).
- Non-bloquant (le client peut valider le ticket même en cas de désaccord).

### Comportement proposé
1. **Classification automatique** :
- L’assistant analyse le texte de la demande et propose une classification (*Bug* ou *Évolution*) dans la prévisualisation du ticket.
- Le client peut modifier cette classification, ce qui déclenche :
- Un message d’avertissement : *« Changer la classification nécessitera une revue par l’équipe OmDev avant de démarrer ce ticket. »*
- L’ajout automatique du tag `bf-disagree` (couleur orange #FF9800) avec un tooltip : *« L’équipe OmDev examinera cette classification avant de commencer le travail. »*
- Un champ d’argumentation optionnel : *« Pourquoi pensez-vous que c’est un [Bug/Évolution] ? »*

2. **Estimation de complexité** :
- L’assistant propose une note sur 10 (ex. : *« 6/10 – Nouvel écran + API backend »*) dans la prévisualisation et sur la page du ticket.
- Le client peut modifier cette note, mais la valeur par défaut est conservée s’il ne le fait pas.

3. **Affichage** :
- La classification et la note sont visibles dans :
- La prévisualisation du ticket (avant validation).
- La page du ticket (après création).
- Le tag `bf-disagree` est affiché sur le ticket dans la liste et sur sa page détaillée.

4. **Valeurs par défaut** :
- Si le client ne modifie pas la classification ou la note, les propositions de l’assistant sont conservées.

## Acceptance criteria
- [ ] L’assistant AI propose une classification (*Bug* ou *Évolution*) par défaut pour chaque demande dans la prévisualisation du ticket.
- [ ] L’assistant AI propose une estimation de complexité (note sur 10 + explication courte) par défaut pour chaque demande.
- [ ] Le client peut modifier la classification et la note dans la prévisualisation du ticket.
- [ ] Si le client modifie la classification :
- [ ] Un message d’avertissement apparaît : *« Changer la classification nécessitera une revue par l’équipe OmDev avant de démarrer ce ticket. »*
- [ ] Le tag `bf-disagree` (couleur orange #FF9800) est ajouté automatiquement au ticket.
- [ ] Un tooltip est affiché au survol du tag : *« L’équipe OmDev examinera cette classification avant de commencer le travail. »*
- [ ] Un champ d’argumentation optionnel est affiché : *« Pourquoi pensez-vous que c’est un [Bug/Évolution] ? »* (le champ peut être laissé vide).
- [ ] La classification, la note et le tag `bf-disagree` (si applicable) sont visibles :
- [ ] Dans la prévisualisation du ticket avant validation.
- [ ] Sur la page du ticket après création.
- [ ] Les valeurs par défaut (classification et note) sont conservées si le client ne les modifie pas.
- [ ] Le flux fonctionne en français et en anglais (selon la langue du client).
- [ ] Les tests couvrent les cas suivants :
- [ ] Création d’un ticket sans modification des valeurs par défaut.
- [ ] Création d’un ticket avec modification de la classification (tag `bf-disagree` ajouté).
- [ ] Création d’un ticket avec modification de la note.
- [ ] Affichage correct des informations dans la prévisualisation et sur la page du ticket.
- [ ] Comportement multi-tenant (chaque client voit ses propres tickets).


Subtasks 3 (0 open3 closed)

Feature #49: Backend — enrichir le draft de ticket avec classification & estimation de complexitéShipped06/11/2026

Actions
Feature #50: Frontend — classification & complexité éditables dans TicketDraftPanel (prévisualisation)Shipped06/11/2026

Actions
Feature #51: Frontend — affichage classification, complexité & tag bf-disagree sur la page et la listeShipped06/11/2026

Actions

RA Updated by Redmine Admin about 2 months ago Actions #1

  • Status changed from Submitted to Spec

RA Updated by Redmine Admin about 2 months ago Actions #2

  • Subtask #49 added

RA Updated by Redmine Admin about 2 months ago Actions #3

  • Subtask #50 added

RA Updated by Redmine Admin about 2 months ago Actions #4

  • Subtask #51 added

RA Updated by Redmine Admin about 2 months ago Actions #5

  • spec_ref updated (diff)

Spec'd & décomposé (scrum-master + PO self-review, approuvé sans révision). Épée split en 3 sous-tâches :
- #49 Backend [L] — enrichir le draft (classification bug|évolution + complexité /10) ; persistance + label `bf-disagree` + argumentation. Aucune dépendance.
- #50 Frontend [M, dép. #49] — classification & complexité éditables dans `TicketDraftPanel` (avertissement + tag + tooltip + argumentation).
- #51 Frontend [M, dép. #49] — affichage classification/complexité + tag `bf-disagree` sur la page (`TaskDetailPane`) et la liste ; réutilise le tag de #50.

Ordre de build : #49 → (#50#51). spec_ref=split:49,50,51 (épopée split → done_ratio dérivé des enfants).

RA Updated by Redmine Admin about 2 months ago Actions #6

  • Status changed from Spec to In development

Rollup automatique : enfant le moins avancé (#51) passe en « In development ». Parent synchronisé.

RA Updated by Redmine Admin about 2 months ago Actions #7

  • Status changed from In development to QA

Rollup automatique : tous les enfants sont désormais ≥ QA (#49 Shipped, #50 QA, #51 QA). Enfant le moins avancé = QA → parent synchronisé en QA.

RA Updated by Redmine Admin about 2 months ago Actions #8

**Rollup epic (apres QA PASS de #51)** — etat des enfants : #49 *Shipped*, #50 *QA*, #51 *QA* (PASS). Enfant le moins avance = **QA**. Le parent #26 est deja en **QA**, ce qui correspond au plancher — aucune transition necessaire, l'epic reste en **QA**.

RA Updated by Redmine Admin about 2 months ago Actions #9

  • Status changed from QA to Shipped

Épopée livrée en production (rollup : tous les enfants Shipped). Classification automatique (bug/évolution) + estimation de complexité par l'assistant AI : #49 (backend draft enrichi) + #50 (édition dans la prévisualisation) + #51 (affichage page + liste, tag bf-disagree) tous en prod (master #65).

Actions

Also available in: PDF Atom