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