diff --git a/src/api/SIGCM2.Domain/Fiscal/ProvinciaArgentina.cs b/src/api/SIGCM2.Domain/Fiscal/ProvinciaArgentina.cs new file mode 100644 index 0000000..ad0d152 --- /dev/null +++ b/src/api/SIGCM2.Domain/Fiscal/ProvinciaArgentina.cs @@ -0,0 +1,91 @@ +namespace SIGCM2.Domain.Fiscal; + +/// +/// Jurisdicciones fiscales de Argentina: 23 provincias INDEC + Ciudad Autónoma de Buenos Aires. +/// Almacenado en BD como VARCHAR(50) (nombre del enum via ToString()). +/// +public enum ProvinciaArgentina +{ + BuenosAires, + Catamarca, + Chaco, + Chubut, + CiudadAutonomaDeBuenosAires, + Cordoba, + Corrientes, + EntreRios, + Formosa, + Jujuy, + LaPampa, + LaRioja, + Mendoza, + Misiones, + Neuquen, + RioNegro, + Salta, + SanJuan, + SanLuis, + SantaCruz, + SantaFe, + SantiagoDelEstero, + TierraDelFuego, + Tucuman +} + +/// +/// Extension methods para ProvinciaArgentina: mapping bidireccional con el display name +/// (nombre con acentos/espacios) que se usa para presentación en UI. +/// +public static class ProvinciaArgentinaExtensions +{ + private static readonly Dictionary DisplayNames = new() + { + [ProvinciaArgentina.BuenosAires] = "Buenos Aires", + [ProvinciaArgentina.Catamarca] = "Catamarca", + [ProvinciaArgentina.Chaco] = "Chaco", + [ProvinciaArgentina.Chubut] = "Chubut", + [ProvinciaArgentina.CiudadAutonomaDeBuenosAires] = "Ciudad Autónoma de Buenos Aires", + [ProvinciaArgentina.Cordoba] = "Córdoba", + [ProvinciaArgentina.Corrientes] = "Corrientes", + [ProvinciaArgentina.EntreRios] = "Entre Ríos", + [ProvinciaArgentina.Formosa] = "Formosa", + [ProvinciaArgentina.Jujuy] = "Jujuy", + [ProvinciaArgentina.LaPampa] = "La Pampa", + [ProvinciaArgentina.LaRioja] = "La Rioja", + [ProvinciaArgentina.Mendoza] = "Mendoza", + [ProvinciaArgentina.Misiones] = "Misiones", + [ProvinciaArgentina.Neuquen] = "Neuquén", + [ProvinciaArgentina.RioNegro] = "Río Negro", + [ProvinciaArgentina.Salta] = "Salta", + [ProvinciaArgentina.SanJuan] = "San Juan", + [ProvinciaArgentina.SanLuis] = "San Luis", + [ProvinciaArgentina.SantaCruz] = "Santa Cruz", + [ProvinciaArgentina.SantaFe] = "Santa Fe", + [ProvinciaArgentina.SantiagoDelEstero] = "Santiago del Estero", + [ProvinciaArgentina.TierraDelFuego] = "Tierra del Fuego", + [ProvinciaArgentina.Tucuman] = "Tucumán", + }; + + private static readonly Dictionary ByDisplayName = + DisplayNames.ToDictionary(kv => kv.Value, kv => kv.Key, StringComparer.Ordinal); + + /// + /// Retorna el nombre con acentos/espacios para presentación en UI y almacenamiento en BD. + /// + public static string ToDisplayString(this ProvinciaArgentina provincia) + => DisplayNames[provincia]; + + /// + /// Parsea un display name a su valor de enum correspondiente. + /// Lanza si el nombre no corresponde a ningún valor. + /// + public static ProvinciaArgentina FromDisplayString(string displayName) + { + if (ByDisplayName.TryGetValue(displayName, out var result)) + return result; + + throw new ArgumentException( + $"'{displayName}' no es un nombre de provincia válido. Usá uno de los valores de ProvinciaArgentina.", + nameof(displayName)); + } +}