Renommage : TrajetKmTracker -> SchotzIadKmTracker (backend, specs, frontend)
- Backend : projets, solution, namespaces et références TrajetKmTracker.Api/.Tests -> SchotzIadKmTracker.Api/.Tests (dossiers, .csproj, .sln, .http, namespaces C#). GUID UserSecretsId préservé. - Specs : dossier .kiro/specs/trajet-km-tracker -> schotziad-km-tracker et mise à jour des références internes (chemins, tags de propriétés). - Frontend : projet Angular trajet-km-tracker -> schotziad-km-tracker (package.json, angular.json, chemin dist, Dockerfile), titre applicatif 'SchotzIAD KM Tracker'. - Docker et scripts (backend/Dockerfile, frontend/Dockerfile, run-dev.sh) mis à jour. - Suppression du fichier résiduel package.json.bak. Backend (solution) et frontend (build production) compilent sans erreur.
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace SchotzIadKmTracker.Api.Models.Entities;
|
||||
|
||||
/// <summary>Cache des adresses géocodées via ORS.</summary>
|
||||
public class AdresseCache
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required, MaxLength(255)]
|
||||
public string Adresse { get; set; } = string.Empty; // texte normalisé
|
||||
|
||||
public double Latitude { get; set; } // précision 6 décimales
|
||||
public double Longitude { get; set; } // précision 6 décimales
|
||||
|
||||
/// <summary>Géométrie GeoJSON de l'itinéraire (null si indisponible).</summary>
|
||||
public string? GeometrieJson { get; set; }
|
||||
|
||||
public DateTime DerniereUtilisation { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace SchotzIadKmTracker.Api.Models.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// Adresse enregistrée dans le Carnet_Adresses, identifiée par une Dénomination unique
|
||||
/// et réutilisable par sa Dénomination lors de la saisie/insertion d'un Trajet.
|
||||
/// </summary>
|
||||
public class AdresseNommee
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>Libellé libre et unique identifiant l'adresse (1 à 100 caractères).</summary>
|
||||
[Required, MaxLength(100)]
|
||||
public string Denomination { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Forme normalisée de la Dénomination (trim + minuscules + sans accents) servant de clé
|
||||
/// d'unicité via l'index unique UX_AdresseNommee_Denomination. Calculée par le backend.
|
||||
/// </summary>
|
||||
[Required, MaxLength(100)]
|
||||
public string DenominationNormalisee { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>Texte d'adresse résolu via l'autocomplétion BAN (1 à 255 caractères).</summary>
|
||||
[Required, MaxLength(255)]
|
||||
public string Adresse { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>Latitude (précision 6 décimales) ; null si le géocodage a échoué.</summary>
|
||||
public double? Latitude { get; set; }
|
||||
|
||||
/// <summary>Longitude (précision 6 décimales) ; null si le géocodage a échoué.</summary>
|
||||
public double? Longitude { get; set; }
|
||||
|
||||
/// <summary>Vrai si les coordonnées ont été obtenues (cache ou BAN) ; faux sinon.</summary>
|
||||
public bool GeocodageReussi { get; set; } = false;
|
||||
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace SchotzIadKmTracker.Api.Models.Entities;
|
||||
|
||||
/// <summary>Montant réglé (remboursement reçu) pour un mois, une année et un véhicule.</summary>
|
||||
public class MontantRegle
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public int Annee { get; set; }
|
||||
|
||||
[Required]
|
||||
public int Mois { get; set; } // 1–12
|
||||
|
||||
[Required]
|
||||
public int VehiculeId { get; set; }
|
||||
public Vehicule? Vehicule { get; set; }
|
||||
|
||||
/// <summary>Montant réglé en euros (>= 0), deux décimales.</summary>
|
||||
[Required]
|
||||
public decimal Montant { get; set; }
|
||||
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace SchotzIadKmTracker.Api.Models.Entities;
|
||||
|
||||
/// <summary>Profil utilisateur (singleton — une seule ligne).</summary>
|
||||
public class Profil
|
||||
{
|
||||
public int Id { get; set; } = 1; // toujours 1
|
||||
|
||||
[MaxLength(100)]
|
||||
public string? Nom { get; set; }
|
||||
|
||||
[MaxLength(100)]
|
||||
public string? Prenom { get; set; }
|
||||
|
||||
/// <summary>Matricule (8 caractères maximum).</summary>
|
||||
[MaxLength(8)]
|
||||
public string? Matricule { get; set; }
|
||||
|
||||
[MaxLength(255)]
|
||||
public string? AdresseDomicile { get; set; }
|
||||
|
||||
public double? DomicileLatitude { get; set; }
|
||||
public double? DomicileLongitude { get; set; }
|
||||
public bool DomicileGeocode { get; set; } = false;
|
||||
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace SchotzIadKmTracker.Api.Models.Entities;
|
||||
|
||||
/// <summary>Trajet kilométrique saisi par l'utilisateur.</summary>
|
||||
public class Trajet
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public DateOnly Date { get; set; }
|
||||
|
||||
[Required, MaxLength(255)]
|
||||
public string AdresseDepart { get; set; } = string.Empty;
|
||||
|
||||
[Required, MaxLength(255)]
|
||||
public string AdresseArrivee { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Distance en kilomètres, arrondie à 2 décimales, strictement positive lorsqu'elle est
|
||||
/// connue. <c>null</c> lorsque la distance n'a pas pu être calculée (aucune coordonnée
|
||||
/// résoluble via le Cache_Adresses / la BAN) : le Trajet est alors persisté avec une
|
||||
/// Distance nulle et un avertissement (Exigence 2.4). La modification ultérieure peut
|
||||
/// recalculer la Distance si de nouvelles coordonnées deviennent disponibles (Exigence 5.10).
|
||||
/// </summary>
|
||||
public decimal? Distance { get; set; }
|
||||
|
||||
/// <summary>Commentaire optionnel (0–500 caractères).</summary>
|
||||
[MaxLength(500)]
|
||||
public string? Commentaire { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Géométrie GeoJSON (LineString) de l'itinéraire routier départ→arrivée, telle que
|
||||
/// renvoyée par OpenRouteService, pour le tracé exact sur la carte. <c>null</c> lorsque
|
||||
/// l'itinéraire routier n'a pas pu être obtenu (fallback vol d'oiseau) : la carte trace
|
||||
/// alors une ligne droite. La géométrie dépend de la PAIRE départ→arrivée, c'est pourquoi
|
||||
/// elle est portée par le Trajet et non par le Cache_Adresses (indexé par adresse seule).
|
||||
/// </summary>
|
||||
public string? GeometrieJson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Rang du trajet dans la liste de la journée. Valeur décimale (ex. 1.0, 1.5, 2.0)
|
||||
/// permettant l'insertion sans réordonnancement systématique.
|
||||
/// Trié par ordre croissant pour l'affichage.
|
||||
/// </summary>
|
||||
[Required]
|
||||
public decimal Position { get; set; }
|
||||
|
||||
/// <summary>Référence au véhicule associé au trajet (véhicule courant à la date de création par défaut).</summary>
|
||||
[Required]
|
||||
public int VehiculeId { get; set; }
|
||||
public Vehicule? Vehicule { get; set; }
|
||||
|
||||
/// <summary>Puissance fiscale (CV) du véhicule au moment de l'association ; stockée pour l'historique.</summary>
|
||||
[Required]
|
||||
public int PuissanceFiscale { get; set; }
|
||||
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace SchotzIadKmTracker.Api.Models.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// Tranche du barème kilométrique URSSAF pour une année et une puissance fiscale.
|
||||
/// Trois tranches par (année, puissance fiscale) : ≤5000 km, 5001–20000 km, >20000 km.
|
||||
/// </summary>
|
||||
public class TrancheBareme
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
public int Annee { get; set; }
|
||||
|
||||
[Required]
|
||||
public int PuissanceFiscale { get; set; }
|
||||
|
||||
/// <summary>Borne minimale de kilométrage annuel (incluse).</summary>
|
||||
[Required]
|
||||
public decimal KmMin { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Borne maximale de kilométrage annuel, EXCLUSIVE : la tranche couvre [KmMin, KmMax[.
|
||||
/// <c>null</c> signifie « illimité » (dernière tranche, sans borne supérieure).
|
||||
/// </summary>
|
||||
public decimal? KmMax { get; set; }
|
||||
|
||||
/// <summary>Coefficient en euros par kilomètre.</summary>
|
||||
[Required]
|
||||
public decimal Coefficient { get; set; }
|
||||
|
||||
/// <summary>Base fixe en euros ajoutée au montant (nulle pour les tranches 1 et 3). Formule : km × Coefficient + Base.</summary>
|
||||
public decimal Base { get; set; } = 0m;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace SchotzIadKmTracker.Api.Models.Entities;
|
||||
|
||||
/// <summary>Véhicule de l'utilisateur avec date d'effet. Historique conservé.</summary>
|
||||
public class Vehicule
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>Dénomination libre du véhicule (ex. « Voiture personnelle »), obligatoire (1–100 caractères).</summary>
|
||||
[Required, MaxLength(100)]
|
||||
public string Denomination { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>Plaque d'immatriculation (1–15 caractères).</summary>
|
||||
[Required, MaxLength(15)]
|
||||
public string Plaque { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>Puissance fiscale en chevaux fiscaux (entier positif).</summary>
|
||||
[Required]
|
||||
public int PuissanceFiscale { get; set; }
|
||||
|
||||
/// <summary>Date à partir de laquelle ce véhicule devient le véhicule courant (<= date du jour).</summary>
|
||||
[Required]
|
||||
public DateOnly DateEffet { get; set; }
|
||||
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
|
||||
public ICollection<Trajet> Trajets { get; set; } = new List<Trajet>();
|
||||
}
|
||||
Reference in New Issue
Block a user