Application complète de saisie et de suivi des trajets kilométriques avec calcul de distance routière (OpenRouteService), barème kilométrique, résumés et régularisation annuelle. Backend (ASP.NET Core .NET 8, EF Core, SQLite) : - Trajets (CRUD, réordonnancement, insertion), calcul de distance ORS avec fallback Haversine, géométrie d'itinéraire stockée par trajet, recalcul en masse. - Profil, véhicules (avec dénomination), carnet d'adresses nommées, cache d'adresses. - Barème kilométrique : tranches multiples par puissance fiscale, borne max exclusive avec 'illimité' (KmMax nullable), coefficient à 3 décimales, recopie du dernier barème connu. - Résumés mensuel/annuel, montants réglés, régularisation, export PDF. Frontend (Angular 22, zoneless + signals) : - Consultation par jour, navigation temporelle synchronisée, carte Leaflet, formulaire de trajet (adresses nommées, domicile, autocomplétion BAN). - Détection de changement zoneless (indépendante de zone.js). Hébergement : Docker Compose (nginx + backend), scripts run-dev.sh / run-docker.sh.
66 lines
4.0 KiB
C#
66 lines
4.0 KiB
C#
namespace TrajetKmTracker.Api.Services;
|
||
|
||
/// <summary>
|
||
/// Génération des Export_PDF (QuestPDF). Compose les services métier existants
|
||
/// (résumé, profil, véhicule, barème, montants réglés) pour produire les documents.
|
||
/// La génération est enveloppée dans un délai de 15 secondes ; en cas de dépassement
|
||
/// ou d'erreur de rendu, une <see cref="Exceptions.PdfGenerationException"/> est levée
|
||
/// (Exigence 7.5) — le controller la mappe vers <c>503 Service Unavailable</c>.
|
||
/// </summary>
|
||
public interface IPdfService
|
||
{
|
||
/// <summary>
|
||
/// Génère le rapport PDF mensuel d'un (année, mois) pour le véhicule indiqué (Exigences 7.1,
|
||
/// 7.4, 7.6, 7.8, 7.10, 7.11). L'en-tête contient l'identité de l'utilisateur, le véhicule
|
||
/// (plaque, puissance fiscale, coefficient et base de la tranche annuelle applicable), la
|
||
/// période, l'adresse de départ du profil, le total kilométrique du mois, le total kilométrique
|
||
/// annuel cumulé, le TOTAL IK du mois (km du mois × coefficient de la tranche annuelle) et le
|
||
/// Montant_Regle du mois. Le corps liste les trajets (date, motif/commentaire, départ → arrivée, km).
|
||
/// Le nom de fichier suggéré est <c>trajets_MM_AAAA.pdf</c>.
|
||
/// </summary>
|
||
/// <exception cref="Exceptions.PdfGenerationException">
|
||
/// Levée en cas de dépassement du délai de 15 s ou d'échec de rendu (Exigence 7.5).
|
||
/// </exception>
|
||
Task<PdfResult> GenererRapportMensuelAsync(
|
||
int annee, int mois, int vehiculeId, CancellationToken cancellationToken = default);
|
||
|
||
/// <summary>
|
||
/// Génère la synthèse annuelle de régularisation d'une <paramref name="annee"/> pour le véhicule
|
||
/// indiqué (Exigences 7.2, 7.4, 7.6, 7.7, 7.8, 7.12). La page de synthèse contient le nom et le
|
||
/// prénom de l'utilisateur, l'année, l'adresse de domicile, le barème applicable de l'année (les
|
||
/// trois tranches coefficient/base par puissance fiscale du véhicule), le véhicule et sa puissance
|
||
/// fiscale, la tranche annuelle applicable ; puis pour chacun des douze mois : les kilomètres
|
||
/// parcourus, le Montant_Regle (frais payé) et le Frais_Reel_Mensuel (frais réel). Les totaux
|
||
/// (km annuel, total réglé, Montant_Reel, Regularisation) et la « formule réelle » sont indiqués.
|
||
/// Le nom de fichier suggéré est <c>trajets_AAAA.pdf</c>.
|
||
/// </summary>
|
||
/// <exception cref="Exceptions.PdfGenerationException">
|
||
/// Levée en cas de dépassement du délai de 15 s ou d'échec de rendu (Exigence 7.5).
|
||
/// </exception>
|
||
Task<PdfResult> GenererRapportAnnuelAsync(
|
||
int annee, int vehiculeId, CancellationToken cancellationToken = default);
|
||
|
||
/// <summary>
|
||
/// Détermine les véhicules ayant des Trajets pour l'<paramref name="annee"/> et génère un rapport
|
||
/// annuel PDF distinct par véhicule (Exigence 7.9). Retourne un PDF par véhicule ayant des données,
|
||
/// trié par identifiant de véhicule. Retourne une liste vide si aucun trajet n'existe pour l'année.
|
||
/// </summary>
|
||
/// <exception cref="Exceptions.PdfGenerationException">
|
||
/// Levée en cas de dépassement du délai de 15 s ou d'échec de rendu (Exigence 7.5).
|
||
/// </exception>
|
||
Task<IReadOnlyList<PdfResult>> GenererRapportsAnnuelsParVehiculeAsync(
|
||
int annee, CancellationToken cancellationToken = default);
|
||
|
||
/// <summary>
|
||
/// Détermine les véhicules ayant des Trajets pour le couple (<paramref name="annee"/>,
|
||
/// <paramref name="mois"/>) et génère un rapport mensuel PDF distinct par véhicule (Exigence 7.9).
|
||
/// Retourne un PDF par véhicule ayant des données, trié par identifiant de véhicule. Retourne une
|
||
/// liste vide si aucun trajet n'existe pour la période.
|
||
/// </summary>
|
||
/// <exception cref="Exceptions.PdfGenerationException">
|
||
/// Levée en cas de dépassement du délai de 15 s ou d'échec de rendu (Exigence 7.5).
|
||
/// </exception>
|
||
Task<IReadOnlyList<PdfResult>> GenererRapportsMensuelsParVehiculeAsync(
|
||
int annee, int mois, CancellationToken cancellationToken = default);
|
||
}
|