ADR 0008 : Import de listes de tâches par document (template à colonnes fixes)
- Statut : Accepté
- Décideurs : Julien (Commanditaire), Seer MENSAH-ASSIAKOLEY (Développeur)
- Date : 8 juillet 2026
Contexte et Problème
Julien souhaite pouvoir importer un document de « to-do list » complet et que la plateforme en crée automatiquement les tâches, assignées aux collaborateurs. Les exemples fournis (liste de déco boutique, checklists opérationnelles ENGWE) sont formulés de manières hétérogènes :
- @Sofia Guedra trouve un tapis leopard pour les escalier -> my tam commande
- chiner : miroir bulle + miroir lavabo -> sofia + my tam chine et my tam commande
- Commande plantes ? bambou -> on commande quand ?
Deux difficultés :
- Formulation libre : les lignes mélangent l'action, le ou les responsables, des notes et des questions ouvertes. Sans cadre, il faut une IA pour deviner « qui / quoi / quand » à chaque import.
- Coût récurrent : faire analyser chaque document par un LLM à chaque upload représente un coût par import et un risque d'erreur d'interprétation.
Il faut un mécanisme d'import fiable, à coût maîtrisé, qui reste simple à remplir pour un utilisateur non technique (Julien).
Facteurs de Décision
- Coût maîtrisé : pas de dépendance à un appel LLM payant à chaque import.
- Parsing fiable et déterministe : même entrée → même sortie, sans interprétation floue.
- Facilité de remplissage : la personne qui remplit le document (Julien) n'est pas technique ; le format ne doit pas casser facilement.
- Alignement au modèle de données : le document ne doit demander que des informations réellement stockables dans la table
task. - Contrôle humain avant écriture : éviter la création en masse de tâches mal assignées.
Options Envisagées
Option A : Import libre + interprétation par IA (LLM)
L'utilisateur upload n'importe quel document (Slack, notes, PDF) ; un LLM structure le contenu en tâches.
- Avantage : aucune contrainte de format pour l'utilisateur.
- Inconvénient : coût par import, erreurs d'interprétation, résultats non déterministes, difficile à tester/reproduire.
Option B : Template à colonnes fixes + parsing déterministe + écran d'aperçu (Recommandée)
On fournit un template à colonnes fixes (tableau Markdown et CSV/Excel). Le parsing est déterministe (aucune IA). Un écran d'aperçu affiche les tâches détectées et les assignés résolus avant création ; l'utilisateur corrige et valide.
- Avantage : coût nul par import, déterministe, testable, l'aperçu absorbe les cas ambigus sans IA.
- Inconvénient : demande à Julien de remplir un template plutôt que de coller du texte libre.
Option C : Saisie manuelle uniquement (statu quo)
On ne fait pas d'import ; chaque tâche est créée à la main.
- Avantage : rien à développer.
- Inconvénient : ne répond pas à la demande (Julien veut charger des listes entières d'un coup).
Décision Retenue
L'Option B : Template à colonnes fixes + parsing déterministe + écran d'aperçu a été retenue.
Justification
C'est la seule option qui répond à la fois au besoin (charger une liste entière d'un coup) et au facteur de coût (pas de LLM par import). Le template supprime l'ambiguïté à la source ; l'écran d'aperçu garde un humain dans la boucle pour les rares cas non résolus (nom inconnu, action partagée). L'IA reste une évolution possible en surcouche si Julien veut un jour coller du texte libre, sans remettre en cause ce socle.
Règles fonctionnelles arrêtées
- Colonnes du template :
Tâche(obligatoire) ·Notes·Assigné à·Responsable·Priorité·Pilier·Échéance. Le projet cible est choisi au moment de l'upload (une liste = un projet), il n'est pas une colonne. - Mapping vers la table
task:Colonne template Champ taskRemarque Tâche titleobligatoire Notes descriptiony compris le « pourquoi » et les infos hors-tâche Assigné à ownerpersonne qui réalise la tâche Responsable managerpersonne qui valide (optionnel) Priorité prioritybloquant→blocking,haute→high, vide/normale→normalPilier pillartexte libre (ex. Atelier, Stock, Achats…) Échéance due_enddate - created_byautomatique = auteur de l'import (jamais dans le document) - statusautomatique = todo - Sémantique
owner/manager/created_by: confirmée par le code (src/pages/EmployeeDashboard.jsx,src/hooks/useData.jsx).owner= assigné/faiseur,manager= validateur,created_by= créateur automatique. Le-> sofiad'une liste correspond àowner. - Matching des noms : normalisation (minuscules, trim, suppression des accents, espaces compactés) puis correspondance avec
member.name. Si aucun membre ne correspond →ownerlaissé vide, à compléter par Julien dans l'écran d'aperçu. - Une tâche = un seul
owner:task.ownerest une FK unique. Une action partagée entre plusieurs personnes est éclatée en autant de tâches que de personnes (fidélité littérale). Le co-équipier peut être rappelé dansNotes. - Ré-import : pas de déduplication. Chaque upload = un nouveau lot de tâches. La mise à jour d'une tâche existante se fait manuellement dans l'application, jamais via un ré-upload.
- Périmètre V1 : import ponctuel uniquement. Les checklists récurrentes (montage vélo par unité, checklist d'ouverture quotidienne, inventaire hebdomadaire, émargement sécurité) ne sont pas couvertes en V1 et feront l'objet d'un cadrage ultérieur.
Conséquences
Positives
- Coût par import nul : parsing 100 % déterministe, aucune dépendance LLM.
- Reproductible et testable : un même fichier produit toujours le même résultat.
- Sûr : l'écran d'aperçu empêche la création en masse de tâches mal assignées.
- Aligné au schéma : le template ne demande que des champs réellement persistés.
Négatives / Points de vigilance
- Friction de remplissage : Julien doit saisir sa liste dans le format du template plutôt que de coller du texte libre.
- Tâches partagées dupliquées et indépendantes (point d'honnêteté) : une action confiée à N personnes crée N tâches distinctes (
iddifférents,ownerdifférents). Ces copies ne sont pas synchronisées : si une personne termine la sienne, les autres restent ouvertes, et l'action compte pour N unités dans les statistiques « avancement par manager » du tableau de bord Super Manager. Comportement accepté pour la V1 (pour une action réellement collective, il est même cohérent que chacun suive sa part) ; à réévaluer si le besoin de tâches multi-assignées apparaît. - Pas de déduplication au ré-import : uploader deux fois la même liste crée les tâches en double. C'est un choix assumé (l'aperçu permet de décocher les lignes non voulues) ; une détection de doublons pourra être ajoutée plus tard si nécessaire.
- Checklists récurrentes non couvertes : une grande partie de l'activité ENGWE repose sur des procédures récurrentes ; leur import/génération est reporté à une V2.
