56 lines
1.8 KiB
TypeScript
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}$/);
|
|
});
|
|
});
|