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)); } }