SchotzIAD KM Tracker : suivi des trajets kilométriques (Angular + .NET 8)

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.
This commit is contained in:
2026-09-14 02:08:27 +02:00
commit e3f946f7d4
225 changed files with 38168 additions and 0 deletions
@@ -0,0 +1,35 @@
namespace TrajetKmTracker.Api.Services;
/// <summary>
/// Résultat d'un calcul de distance orchestré par <see cref="DistanceCalculatorService"/>.
/// Porte les coordonnées résolues des adresses de départ et d'arrivée, la distance
/// éventuellement calculée (routière via ORS ou orthodromique via Haversine), la
/// géométrie GeoJSON de l'itinéraire lorsqu'elle est disponible, et un éventuel
/// avertissement lorsque la distance n'a pas pu être calculée.
/// </summary>
/// <param name="DepartLatitude">Latitude résolue du point de départ (null si non résoluble).</param>
/// <param name="DepartLongitude">Longitude résolue du point de départ (null si non résoluble).</param>
/// <param name="ArriveeLatitude">Latitude résolue du point d'arrivée (null si non résoluble).</param>
/// <param name="ArriveeLongitude">Longitude résolue du point d'arrivée (null si non résoluble).</param>
/// <param name="DistanceKm">
/// Distance en kilomètres, arrondie à 2 décimales et bornée entre 0,01 et 99 999,99 km ;
/// <c>null</c> lorsque la distance n'a pas pu être calculée (aucune coordonnée résoluble).
/// </param>
/// <param name="GeometrieJson">
/// Géométrie GeoJSON de l'itinéraire routier (fournie par ORS) ; <c>null</c> en cas de
/// fallback Haversine ou d'absence de calcul.
/// </param>
/// <param name="Avertissement">
/// Vrai lorsque la distance n'a pas pu être calculée faute de coordonnées résolubles ;
/// dans ce cas l'appelant stocke une distance nulle avec un avertissement.
/// </param>
/// <param name="Message">Message d'avertissement associé, ou <c>null</c>.</param>
public record DistanceCalculationResult(
double? DepartLatitude,
double? DepartLongitude,
double? ArriveeLatitude,
double? ArriveeLongitude,
decimal? DistanceKm,
string? GeometrieJson,
bool Avertissement,
string? Message);