Files
Laurent Chedanne daaa2f3e00 Specs and todo
2026-05-20 11:33:27 +02:00

79 lines
4.4 KiB
Markdown

Tâches d'amélioration — csv-to-timemanager.py
==============================================
Validation des champs obligatoires
-----------------------------------
### TODO : Améliorer la validation des champs CSV
**Actuellement** : le script n'effectue pas de validation stricte sur les champs obligatoires. Cela peut conduire à :
- Créer des tâches avec un nom vide (si `Titre` manque).
- Créer des entrées de temps avec `start` ou `end` incomplets (si dates/heures manquent).
**À faire** :
1. Ajouter une validation au début de la boucle de traitement des lignes CSV pour vérifier que les champs suivants sont non-vides **et valides** :
- `Titre` : non vide après nettoyage.
- `Date debut` : non vide et correspond à un format date valide.
- `Heure debut` : non vide et correspond à un format heure valide (ex: `HH:MM` ou `HH:MM:SS`).
- `Date fin` : non vide et correspond à un format date valide.
- `Heure fin` : non vide et correspond à un format heure valide.
2. Condition d'import : une ligne est importée **seulement si** :
- `Description` OU `Categories` sont renseignés (au moins un),
- ET tous les champs listés ci-dessus sont valides.
3. Pour les lignes invalides : enregistrer une ligne de log / warning avec la raison (ex: "Titre manquant", "Date debut invalide"), pour faciliter le débogage.
### TEST : Vérifier qu'aucune tâche n'est créée avec champs manquants
**Objectif** : S'assurer que le code corrigé ne crée pas de tâches/entrées de temps incomplètes.
**À faire** :
1. Créer un petit fichier CSV de test contenant des lignes avec champs manquants (ex: `Titre` vide, `Date debut` manquant, etc.).
2. Exécuter le script avec ce fichier de test.
3. Vérifier dans la base de données ou via l'interface TimeManager que **aucune** tâche ou entrée de temps incomplète n'a été créée.
4. Documenter les résultats du test dans un fichier `tests/csv_validation_test.md`.
### Alternative : Utiliser la validation existante dans TimeManager
Si l'API TimeManager rejette les entrées incomplètes, le script bénéficiera indirectement de cette validation.
À vérifier auprès du serveur TimeManager (réponse HTTP 406 / erreur de validation de la requête).
Gestion des modifications utilisateur et réimport
--------------------------------------------------
### TODO : Analyser le comportement en cas de modification manuelle + réimport
**Problème** : Que se passe-t-il si un utilisateur modifie une tâche ou une entrée de temps directement dans TimeManager, puis que le script réimporte le même CSV ?
**Cas d'usage** :
1. Un CSV est importé, créant une tâche `Nom original` avec une entrée de temps.
2. L'utilisateur renomme la tâche à `Nom modifié` dans TimeManager.
3. Le CSV est réimporté avec la même ligne.
**Comportement actuel** :
- Le script utilise la colonne `Titre` du CSV (ex: `Nom original`) pour chercher la tâche existante.
- Si la tâche a été renommée (ex: `Nom modifié`), le script ne la trouvera **pas** (car `sanitize("Nom original") != sanitize("Nom modifié")`).
- Le script créera une **nouvelle tâche** `Nom original`, créant ainsi un doublon.
- L'ancienne tâche (`Nom modifié`) restera en place dans TimeManager.
**Risques** :
- Création involontaire de doublons.
- Incohérence entre le CSV et TimeManager.
- Perte de données si les modifications de l'utilisateur n'ont pas été sauvegardées ailleurs.
**À considérer** :
1. Faut-il implémenter une stratégie de fusionnement / synchronisation bidirectionnelle (ex: tracking des UUIDs) ?
2. Faut-il documenter que le script n'est pas conçu pour gérer les modifications manuelles post-import ?
3. Faut-il ajouter une option `--allow-duplicates` ou `--force-sync` au script pour expliciter ce comportement ?
4. Analyser comment l'app TimeManager gère les commits et les conflits (voir `lib/Db/StorageHelper.php`).
**Priorité** : À discuter avec l'équipe pour clarifier le flux de travail prévu.
Références
----------
- Détail de la validation : voir `docs/specs.md` section "Gestion des données manquantes".
- Code de validation des lignes : voir `csv-to-timemanager.py` ligne ~437.
- Détection d'existence de tâches : voir `csv-to-timemanager.py` fonctions `task_exist_by_name`, `project_exist_by_name`, `client_exist_by_name`.
- Stratégie de sync TimeManager : voir `lib/Db/StorageHelper.php` (analyse du système de commits et résolution de conflits).