Files
SchotzIAD/.kiro/specs/precision-distances-km/tasks.meta.json
T
MadJax 7e80427e09 Precision configurable des distances (arrondi superieur 0/1/2 decimales)
- Nouveau parametre global Precision_Distance (sous-menu Application de la
  Page_Parametrage, entre Compte et Vehicules), persiste via une entite
  singleton ParametresApplication, expose par GET/PUT /api/parametres-application
- Arrondi superieur (ceiling) applique a l'affichage et aux agregats : trajet
  simple, aller/retour (arrondi puis doublement), totaux jour/mois/annee,
  carte, export PDF et bareme kilometrique - jamais a la distance brute stockee
- Refonte du Montant_Previsionnel : le montant mensuel (80%) porte desormais
  sur le seul mois affiche (tranche determinee par le cumul annuel) ; nouvelle
  ligne Montant_Previsionnel_Annuel (100%, sans minoration, sur le cumul)
- Backend : PrecisionDistanceService (ArrondirDistance), integration dans
  ResumeService/TotauxService/RemboursementService/MontantRegleService,
  migration EF Core ; 7 tests de propriete (FsCheck) + tests existants, 62/62 verts
- Frontend : ParametresApplicationService (signal partage), composant de
  parametrage, fonction miroir arrondirDistance, adaptation de la liste des
  trajets, du panneau des totaux, de la carte et des montants regles
- Specs : nouvelle spec precision-distances-km (requirements/design/tasks) ;
  mise a jour de requirements.md, design.md et design-requirements.md de
  schotziad-km-tracker (Requirement 22, renvois croises, Montant_Previsionnel)
- Suppression du fichier chromium .deb suivi par erreur dans le depot
2026-09-25 12:02:52 +02:00

637 lines
26 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"pbtResults": {},
"executionHistory": {
"1. Backend — Entité `ParametresApplication` et migration EF Core": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324603235
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324614373
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324711242
}
],
"2.1 Créer l'exception `Services/Exceptions/PrecisionDistanceInvalideException.cs` (même modèle que `MontantRegleNegatifException`)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324603514
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324715209
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324763012
}
],
"2.2 Créer `Services/IPrecisionDistanceService.cs` (`ObtenirAsync`, `DefinirAsync`, `ArrondirDistance`)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324603633
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324767607
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324819140
}
],
"2.3 Implémenter `Services/PrecisionDistanceService.cs`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324603727
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324824384
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324882607
}
],
"3.1 Créer `Models/DTOs/ParametresApplicationDtos.cs` (`ParametresApplicationDto`, `SavePrecisionDistanceDto`)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324603798
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324892736
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324931371
}
],
"3.2 Créer `Controllers/ParametresApplicationController.cs` (GET/PUT `api/parametres-application`, mapping `PrecisionDistanceInvalideException` → 400)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324603868
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324949397
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325012025
}
],
"3.3 Enregistrer `IPrecisionDistanceService`/`PrecisionDistanceService` dans `Program.cs` (`AddScoped`, section services métier)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324603948
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325016241
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325065910
}
],
"4. Checkpoint — Ensure all tests pass": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604002
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325074171
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325267173
}
],
"5.1 Modifier `Services/ResumeService.cs` : injecter `IPrecisionDistanceService`, appliquer `ArrondirDistance(Distance, precision) × (AllerRetour ? 2 : 1)` par trajet dans `ConstruireResumeMensuel`, exposer `TrajetDto.Distance` déjà arrondi, sommer les valeurs déjà arrondies pour `TotalKm` sans second arrondi": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604065
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325283389
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325405943
}
],
"5.2 Modifier `Services/TotauxService.cs` : injecter `IPrecisionDistanceService`, remplacer la fonction locale `Effective(distance, allerRetour)` par l'arrondi avant doublement, supprimer le `Math.Round(..., 2, ...)` final existant sur `TotalJour`/`TotalMois`/`TotalAnnuelPartiel`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604119
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325285149
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325407417
}
],
"5.3 Modifier `Services/RemboursementService.cs` : injecter `IPrecisionDistanceService`, construire `kmMoisMap` à partir des distances arrondies par trajet (au lieu de la distance brute), garantissant `totalKmAnnuel` et chaque `KmMois` comme sommes de distances déjà arrondies": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604176
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325286774
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325409159
}
],
"6.1 Créer/modifier le DTO `MontantPrevisionnelDto` (`TotalMoisKm`, `TotalAnnuelPartielKm`, `MontantPrevisionnelMensuel`, `MontantPrevisionnelAnnuel`) dans `Models/DTOs/`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604233
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325415845
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325475007
}
],
"6.2 Modifier `Services/IMontantRegleService.cs` et `Services/MontantRegleService.cs` : injecter `IPrecisionDistanceService`, calculer `totalMoisAffiche`/`totalAnnuelPartiel` à partir des distances arrondies, déterminer la tranche via le cumul annuel (`baremeAnnuel`), appliquer son coefficient/base au total du mois pour `MontantPrevisionnelMensuel` (80%), calculer `MontantPrevisionnelAnnuel` (100% sur le cumul)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604288
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325477020
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325597163
}
],
"7.1 Vérifier/corriger l'endpoint trajets/journée (`ITrajetService`/`TrajetsController`, méthode consommée par `TrajetService.getTrajetsJournee`) pour renvoyer la Distance_Effective_Arrondie via `IPrecisionDistanceService`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604402
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325603594
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325715537
}
],
"7.2 Vérifier `Services/PdfService.cs` (`AssemblerModeleMensuelAsync`, composition des tables mensuelle/annuelle) : confirmer qu'aucun recalcul de distance brute ne subsiste et que le modèle assemblé provient intégralement de `IResumeService`/`IRemboursementService` déjà corrigés": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604453
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325605135
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325717074
}
],
"8. Checkpoint — Ensure all tests pass": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604508
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325722240
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790326716373
}
],
"9.1 Créer `core/models/parametres-application.model.ts` (`ParametresApplication { precisionDistanceKm: number }`)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604565
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790326726636
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790326790793
}
],
"9.2 Créer `core/services/parametres-application.service.ts` (`ParametresApplicationService` : signal partagé `precisionDistance`, `charger()`, `definirPrecisionDistance()`)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604619
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790326796128
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790326877000
}
],
"9.3 Créer `shared/utils/arrondir-distance.ts` (`arrondirDistance`, `distanceEffectiveArrondie`), miroir exact de la formule backend": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604682
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790326882045
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790326945574
}
],
"10.1 Créer `features/parametres-application/parametres-application.component.ts` (+ `.html`, `.scss`) : sélection 0/1/2, présélection de la valeur courante, confirmation de succès, restauration + notification d'erreur en cas d'échec": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604751
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790326959853
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327069685
}
],
"10.2 Ajouter la route `/parametrage/application` dans `app.routes.ts`, entre `compte` et `vehicules`, gardée uniquement par `authGuard` (pas `profilConfigureGuard`)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604815
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327075529
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327196670
}
],
"10.3 Ajouter le lien « Application » entre « Compte » et « Véhicules » dans `features/parametrage/parametrage.component.html`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604873
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327076628
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327197485
}
],
"11.1 Modifier `app.component.ts` pour appeler `ParametresApplicationService.charger()` au même moment que le chargement du profil (effect déclenché à l'authentification)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324604952
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327204036
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327280212
}
],
"12. Checkpoint — Ensure all tests pass": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324605014
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327287107
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327678359
}
],
"13.1 Modifier `features/trajet-list/trajet-list.component.ts` (méthode `distanceAffichee`) : formater selon `ParametresApplicationService.precisionDistance()` au lieu d'un arrondi fixe à 2 décimales": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324605079
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327683970
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327885223
}
],
"13.2 Modifier `features/panneau-totaux/panneau-totaux.component.ts` + `.html` : format dynamique des distances basé sur `precisionDistance()`, ajout de la ligne « Montant prévisionnel annuel » sous l'indication de versement mensuelle, consommation de `montantPrevisionnelMensuel`/`montantPrevisionnelAnnuel`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324605136
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327686156
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327882270
}
],
"13.3 Modifier `features/carte-trajets/carte-trajets.component.ts` (méthode `contenuInfobulle`) : `toFixed(precision)` dynamique basé sur `ParametresApplicationService.precisionDistance()`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324605196
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327687238
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327880538
}
],
"13.4 Modifier `features/montants-regles/montants-regles.component.ts` : lire `montantPrevisionnelMensuel` au lieu de `montantPrevisionnel`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324605263
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327688307
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327883770
}
],
"14. Checkpoint final — Ensure all tests pass": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324605326
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327893936
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790328182621
}
],
"15.1 Exécuter le build backend (`dotnet build`) et le build frontend (`ng build` / `npm run build`), corriger toute erreur de compilation résultant des changements de DTO/modèle": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324605386
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790328189219
},
{
"executionId": "7dd406e6-29f8-4020-98c1-c18461c20a8a",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790329414209
}
],
"15.2 Exécuter l'ensemble des tests backend (`dotnet test`) et frontend (`ng test` / `vitest --run`), vérifier que toutes les propriétés et tous les tests unitaires/intégration passent": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324605452
},
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790328190132
},
{
"executionId": "7dd406e6-29f8-4020-98c1-c18461c20a8a",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790329415260
}
],
"2. Backend — Service de précision et exception métier": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790324882738
}
],
"3. Backend — DTOs et contrôleur `ParametresApplicationController`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325065987
}
],
"5. Backend — Intégration de l'arrondi dans les services d'agrégation existants": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325409224
}
],
"6. Backend — Refonte de `MontantRegleService.GetMontantPrevisionnelAsync`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325597233
}
],
"7. Backend — Cohérence carte et export PDF": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325717153
}
],
"2.4 Écrire les tests de propriété pour `PrecisionDistanceService`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325995274
}
],
"5.4 Écrire le test de propriété pour la sommation": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325995448
}
],
"5.5 Écrire le test unitaire de l'exemple chiffré Aller_Retour": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325996594
}
],
"6.3 Écrire les tests de propriété pour le calcul prévisionnel": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790325997191
}
],
"9. Frontend — Modèle, service et utilitaire d'arrondi": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790326945673
}
],
"10. Frontend — Composant `ParametresApplicationComponent` et route/menu": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327197551
}
],
"11. Frontend — Chargement initial dans `AppComponent`": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327280285
}
],
"13. Frontend — Adaptation des composants consommateurs": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327885292
}
],
"9.5 Mettre à jour `core/models/bareme.model.ts` et `core/services/bareme.service.ts` avec les nouveaux champs `MontantPrevisionnel` (`totalMoisKm`, `totalAnnuelPartielKm`, `montantPrevisionnelMensuel`, `montantPrevisionnelAnnuel`)": [
{
"executionId": "0004c7a8-345c-45b5-8865-a79b13f348d0",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790327886765
}
],
"15. Vérification finale": [
{
"executionId": "7dd406e6-29f8-4020-98c1-c18461c20a8a",
"chatSessionId": "sess_20c9bee5-b332-43f8-922c-20b9225bb8d8",
"timestamp": 1790329415401
}
]
}
}