almeira-web/facturacion-dian-hub/backend/tests/DianFiscalRules.test.ts

56 lines
1.8 KiB
TypeScript

import { describe, it } from 'node:test';
import assert from 'node:assert';
import { Nit } from '../src/domain/value-objects/Nit.js';
import { Cufe } from '../src/domain/value-objects/Cufe.js';
import { SoftwareSecurityCode } from '../src/domain/value-objects/SoftwareSecurityCode.js';
describe('Reglas Fiscales DIAN Colombia UBL 2.1 (Resolución 000165 de 2023)', () => {
it('Debe calcular correctamente el Dígito de Verificación (Módulo 11) para NIT de Innovación & Desarrollo S.A.S.', () => {
// NIT 901554892 -> DV = 9
const dvCalculado = Nit.calcularDigitoVerificacion('901554892');
assert.strictEqual(dvCalculado, '9');
const nit = new Nit('901554892', '9');
assert.strictEqual(nit.nitCompleto, '901554892-9');
});
it('Debe calcular correctamente el DV para NIT DIAN (800197268 -> DV = 4)', () => {
const dvDian = Nit.calcularDigitoVerificacion('800197268');
assert.strictEqual(dvDian, '4');
});
it('Debe generar un CUFE SHA-384 válido de 96 caracteres hexadecimales', () => {
const cufe = Cufe.generar({
numFac: 'DRIP-1001',
fecFac: '2026-10-19',
horFac: '17:00:00-05:00',
valFac: 100000.0,
codImp1: '01',
valImp1: 19000.0,
codImp2: '04',
valImp2: 0.0,
codImp3: '03',
valImp3: 0.0,
valTot: 119000.0,
nitOFE: '901554892',
numAdq: '1144123456',
claveTecnica: 'fc8eac422eba16e22ffd8c6f94b3f40a6e38162c',
tipoAmbiente: '2',
});
assert.strictEqual(cufe.valor.length, 96);
assert.match(cufe.valor, /^[a-f0-9]{96}$/);
});
it('Debe generar un SoftwareSecurityCode SHA-384 consistente', () => {
const code = SoftwareSecurityCode.generar(
'd5e07b47-6aea-43cc-b38c-3c7d46b4a52f',
'75319',
'DRIP-1001'
);
assert.strictEqual(code.hash.length, 96);
assert.match(code.hash, /^[a-f0-9]{96}$/);
});
});