using TrajetKmTracker.Api.Models.DTOs; namespace TrajetKmTracker.Api.Services; /// /// Logique métier du barème kilométrique : CRUD des tranches, validation du non-chevauchement /// par (année, puissance fiscale), sélection de tranche et calcul de montant. /// public interface IBaremeService { /// Retourne toutes les tranches d'une année (toutes puissances fiscales confondues). Task> GetBaremeAsync(int annee, CancellationToken cancellationToken = default); /// /// Ajoute une tranche. Rejette l'ajout s'il crée un chevauchement d'intervalle [KmMin, KmMax] /// pour la même (année, puissance fiscale) via . /// Task AddTrancheAsync(SaveTrancheBaremeDto dto, CancellationToken cancellationToken = default); /// /// Met à jour une tranche existante. Rejette la mise à jour si elle crée un chevauchement /// (hors la tranche elle-même) via . /// Lève si la tranche n'existe pas. /// Task UpdateTrancheAsync(int id, SaveTrancheBaremeDto dto, CancellationToken cancellationToken = default); /// /// Supprime une tranche. Lève si elle n'existe pas. /// Task DeleteTrancheAsync(int id, CancellationToken cancellationToken = default); /// /// Sélectionne la tranche dont [KmMin, KmMax] contient pour la /// (année, puissance fiscale) donnée et calcule le montant `totalKm × Coefficient + Base` /// (Property 24/27). Si aucune tranche n'existe pour cette combinaison, retourne un montant nul /// et un signal « barème non configuré » sans lever d'erreur bloquante (Exigence 13.4). /// Task CalculerMontantAsync( int annee, int puissanceFiscale, decimal totalKm, CancellationToken cancellationToken = default); /// /// Copie toutes les tranches de l'année la plus récente (strictement antérieure à /// ) qui possède un barème, vers . /// Les tranches existantes de l'année cible sont d'abord supprimées (annule et remplace), /// en transaction. Retourne le nombre de tranches copiées. Retourne 0 si aucun barème /// antérieur n'existe (rien n'est modifié). /// Task CopierDernierBaremeAsync(int anneeCible, CancellationToken cancellationToken = default); /// Retourne les années (triées croissantes) pour lesquelles au moins une tranche de barème existe. Task> GetAnneesAvecBaremeAsync(CancellationToken cancellationToken = default); }