Cosmos.Types.IdentificacionesLegales
1.2.0
dotnet add package Cosmos.Types.IdentificacionesLegales --version 1.2.0
NuGet\Install-Package Cosmos.Types.IdentificacionesLegales -Version 1.2.0
<PackageReference Include="Cosmos.Types.IdentificacionesLegales" Version="1.2.0" />
<PackageVersion Include="Cosmos.Types.IdentificacionesLegales" Version="1.2.0" />
<PackageReference Include="Cosmos.Types.IdentificacionesLegales" />
paket add Cosmos.Types.IdentificacionesLegales --version 1.2.0
#r "nuget: Cosmos.Types.IdentificacionesLegales, 1.2.0"
#:package Cosmos.Types.IdentificacionesLegales@1.2.0
#addin nuget:?package=Cosmos.Types.IdentificacionesLegales&version=1.2.0
#tool nuget:?package=Cosmos.Types.IdentificacionesLegales&version=1.2.0
Cosmos.Types.IdentificacionesLegales
IdentificacionLegal — Value Object de identificación legal para el ERP Cosmos: tipo de documento
(país-scoped, catálogo embebido de 46 tipos), número y dígito de verificación. Implementa el
módulo-11 DIAN para el NIT colombiano. Viaja dentro de eventos event-sourced (JSONB) aguas abajo,
por lo que su forma serializada es un contrato estable.
Instalación
dotnet add package Cosmos.Types.IdentificacionesLegales
Construcción
Dos tipos, dos puertas distintas:
TipoDocumentoes un VO de catálogo país-scoped: se obtiene conTipoDocumento.Obtener(pais, codigo), que lanzaArgumentExceptionsi el código no existe/activo para ese país. SuCrearesinternal.IdentificacionLegales un VO compuesto: su factory públicaCrear(...) : Result<IdentificacionLegal>valida sin lanzar (EsExitoso/.Valor/.Errores).
using Cosmos.Types.IdentificacionesLegales;
using Cosmos.Types.Paises;
var colombia = Pais.Obtener("CO");
var nit = TipoDocumento.Obtener(colombia, "NIT"); // VO de catálogo: Obtener (lanza)
var resultado = IdentificacionLegal.Crear( // VO compuesto: Crear (Result)
tipo: nit,
numero: "900123456"); // el DV se calcula (módulo-11 DIAN)
if (resultado.EsExitoso)
UsarIdentificacion(resultado.Valor); // resultado.Valor.DigitoVerificacion == "8"
else
foreach (var error in resultado.Errores)
Console.WriteLine(error.Codigo); // V02 (tipo), V03 (número), V06 (DV)
Crear recibe el TipoDocumento tipado y deriva el país de él (un tipo de documento existe "para
un país"): no se pasa el país por separado. Para tipos con DV (NIT) el dígito se calcula (módulo-11
DIAN); si lo proveés (digitoVerificacion: "8") la politica controla el desajuste: Rechazo falla con
V06, Advertencia lo degrada. Ver el algoritmo en
docs/algoritmos-dv.md.
Forma serializada
{
"tipoDocumento": "NIT",
"numero": "900123456",
"pais": { "codigo": "CO" },
"digitoVerificacion": "8"
}
Las claves son camelCase ancladas con [JsonPropertyName]. Notá la asimetría deliberada: el
tipo de documento se aplana a un string ("tipoDocumento": "NIT", no un objeto), mientras que el
pais se anida como objeto ({ "codigo": "CO" }). Un consumidor que mapee a mano necesita
saberlo. La ClaveCanonica es un accessor derivado [JsonIgnore]: no viaja.
Rehidratación (deserialización)
No requiere setup: ni JsonConverter ni JsonSerializerContext registrados; basta el STJ por
defecto. Al deserializar un evento histórico el VO se rehidrata crudo ([JsonConstructor]), sin
validar — un tipo que ya no figura en el catálogo igual se rehidrata.
Listado
Para poblar un selector de tipos de documento de un país (frontends) usá TipoDocumento.ListarPorPais(pais)
— devuelve los mismos TipoDocumento que consume la escritura. El backend proyecta su propio DTO de API:
var tiposDto = TipoDocumento.ListarPorPais(colombia)
.Select(tipo => new { tipo.Codigo, tipo.Nombre, tipo.AplicaA, tipo.CapturaDv });
Superficie derivada de TipoDocumento (para armar el formulario)
Además de Nombre, TipoDocumento expone dos accessors derivados del catálogo para que un consumidor
arme el formulario de captura sin conocer vocabularios del catálogo (nombres de algoritmo, strings de
naturaleza):
AplicaA(Naturaleza?) — enum tipado{ PersonaNatural, PersonaJuridica, Ambos }. Sirve para parear tipo ↔ naturaleza (ofrecer solo los tipos que aplican al sujeto).CapturaDv(CapturaDigitoVerificacion?) —record (bool Requiere, int? Longitud): la decisión de mostrar/ocultar el campo de DV y su longitud, no el nombre del algoritmo.NIT(CO) →{ true, 1 };RUC-PA/NT-PA→{ true, 2 }; DV embebido (cédula/RNC de DO) o sin algoritmo →{ false, null }.
Ambos son [JsonIgnore]: no viajan al wire (la forma serializada de TipoDocumento sigue siendo
{ pais, codigo }). Como son datos de display/decisión, es responsabilidad del backend consumidor
proyectar su propio DTO (ver el ejemplo de ListarPorPais arriba) antes de exponerlos a un frontend JS.
En un TipoDocumento rehidratado cuyo código ya no figura en el catálogo (poison), ambos devuelven null
sin lanzar (igual que Nombre).
La forma del DV que expone CapturaDv sale de la misma fuente única que gobierna qué algoritmo de
cálculo aplica IdentificacionLegal.Crear: no hay un segundo mapeo que pueda diverger.
Dependencias
Cosmos.Types.Abstractions(kernel:Result<T>)Cosmos.Types.Paises(validación del país)
Requiere net10.0. Solo está implementado el módulo-11 DIAN (NIT colombiano); otros algoritmos de DV quedan diferidos.
Documentación
Licencia
Uso interno del ERP Cosmos.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Cosmos.Types.Abstractions (>= 1.1.1)
- Cosmos.Types.Paises (>= 1.1.1)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on Cosmos.Types.IdentificacionesLegales:
| Package | Downloads |
|---|---|
|
ObligacionesPorPagar.Entradas.Contratos
Contratos de reconocimiento expuestos a terceros. |
|
|
Cosmos.Impuestos.Contratos
Eventos públicos de integración de Cosmos Impuestos (IPublicEvent) para consumidores en otros bounded contexts. |
|
|
Cosmos.Contabilidad.Contratos
Package Description |
|
|
ObligacionesPorPagar.Reconocimiento.Contratos
Contratos de reconocimiento expuestos a terceros. |
GitHub repositories
This package is not used by any popular GitHub repositories.