Files
SIG-CM2.0/src/api/SIGCM2.Domain/Fiscal/ProvinciaArgentina.cs

92 lines
3.6 KiB
C#

namespace SIGCM2.Domain.Fiscal;
/// <summary>
/// Jurisdicciones fiscales de Argentina: 23 provincias INDEC + Ciudad Autónoma de Buenos Aires.
/// Almacenado en BD como VARCHAR(50) (nombre del enum via ToString()).
/// </summary>
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
}
/// <summary>
/// Extension methods para ProvinciaArgentina: mapping bidireccional con el display name
/// (nombre con acentos/espacios) que se usa para presentación en UI.
/// </summary>
public static class ProvinciaArgentinaExtensions
{
private static readonly Dictionary<ProvinciaArgentina, string> 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<string, ProvinciaArgentina> ByDisplayName =
DisplayNames.ToDictionary(kv => kv.Value, kv => kv.Key, StringComparer.Ordinal);
/// <summary>
/// Retorna el nombre con acentos/espacios para presentación en UI y almacenamiento en BD.
/// </summary>
public static string ToDisplayString(this ProvinciaArgentina provincia)
=> DisplayNames[provincia];
/// <summary>
/// Parsea un display name a su valor de enum correspondiente.
/// Lanza <see cref="ArgumentException"/> si el nombre no corresponde a ningún valor.
/// </summary>
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));
}
}