@ramiidv/arca-mtxca 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +171 -318
- package/dist/arca-mtxca.d.ts +83 -75
- package/dist/arca-mtxca.d.ts.map +1 -1
- package/dist/arca-mtxca.js +197 -141
- package/dist/arca-mtxca.js.map +1 -1
- package/dist/constants.d.ts +37 -21
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +49 -22
- package/dist/constants.js.map +1 -1
- package/dist/format.d.ts +18 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +65 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -10
- package/dist/index.js.map +1 -1
- package/dist/mtxca-client.d.ts +90 -32
- package/dist/mtxca-client.d.ts.map +1 -1
- package/dist/mtxca-client.js +416 -324
- package/dist/mtxca-client.js.map +1 -1
- package/dist/parse.d.ts +31 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +82 -0
- package/dist/parse.js.map +1 -0
- package/dist/serialize.d.ts +43 -0
- package/dist/serialize.d.ts.map +1 -0
- package/dist/serialize.js +323 -0
- package/dist/serialize.js.map +1 -0
- package/dist/types.d.ts +314 -174
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts +16 -7
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +292 -92
- package/dist/validation.js.map +1 -1
- package/llms.txt +81 -159
- package/package.json +5 -4
package/dist/validation.js
CHANGED
|
@@ -1,111 +1,311 @@
|
|
|
1
|
-
import { ArcaValidationError } from '@ramiidv/arca-common';
|
|
1
|
+
import { ArcaValidationError, parseAfipDate } from '@ramiidv/arca-common';
|
|
2
|
+
import { ALICUOTAS_IVA } from './constants.js';
|
|
3
|
+
import { roundDecimal, roundImporte, toXsdDate } from './format.js';
|
|
4
|
+
// Validaciones de negocio del manual del desarrollador de WSMTXCA (v0.25.8).
|
|
5
|
+
// Los números entre paréntesis son los códigos de error de ARCA que se evitan.
|
|
6
|
+
/** Comprobantes clase A (incluye "A con leyenda" y FCE A). */
|
|
7
|
+
const CLASE_A = new Set([1, 2, 3, 51, 52, 53, 201, 202, 203]);
|
|
8
|
+
/** Comprobantes clase B (incluye FCE B). */
|
|
9
|
+
const CLASE_B = new Set([6, 7, 8, 206, 207, 208]);
|
|
10
|
+
/** Tipos en los que el ítem lleva importeIVA y precio sin IVA (514, 515, 519). */
|
|
11
|
+
const ITEM_CON_IVA = new Set([1, 2, 3, 51, 52, 53]);
|
|
12
|
+
/** Tipos en los que el ítem no lleva importeIVA y el precio incluye IVA (514, 519). */
|
|
13
|
+
const ITEM_SIN_IVA = new Set([6, 7, 8]);
|
|
14
|
+
/** Tipos que exigen receptor con CUIT (128, 129). */
|
|
15
|
+
const RECEPTOR_CUIT = new Set([1, 2, 3, 51, 52, 53, 201, 202, 203, 206, 207, 208]);
|
|
16
|
+
/** Condiciones de IVA gravadas (110) y las que llevan subtotal de IVA (127, 400). */
|
|
17
|
+
const GRAVADAS = new Set([3, 4, 5, 6]);
|
|
18
|
+
const CON_SUBTOTAL = new Set([4, 5, 6]);
|
|
19
|
+
const SENA = 97;
|
|
20
|
+
const BONIFICACION = 99;
|
|
21
|
+
const ANULACION = 95;
|
|
2
22
|
/**
|
|
3
|
-
*
|
|
23
|
+
* Margen de error del manual: error relativo <= 0.01% o error absoluto
|
|
24
|
+
* <= 0.01 * cantidad de elementos sumados.
|
|
25
|
+
*/
|
|
26
|
+
function dentroDelMargen(actual, esperado, cantidad = 1) {
|
|
27
|
+
const diff = Math.abs(actual - esperado);
|
|
28
|
+
if (diff <= 0.01 * Math.max(1, cantidad) + 1e-9)
|
|
29
|
+
return true;
|
|
30
|
+
return esperado !== 0 && diff / Math.abs(esperado) <= 0.0001;
|
|
31
|
+
}
|
|
32
|
+
const sum = (values) => values.reduce((a, b) => a + b, 0);
|
|
33
|
+
const imp = (v) => (typeof v === 'number' && Number.isFinite(v) ? roundImporte(v) : 0);
|
|
34
|
+
const dec = (v) => (typeof v === 'number' && Number.isFinite(v) ? roundDecimal(v) : 0);
|
|
35
|
+
const fmt = (n) => roundImporte(n).toFixed(2);
|
|
36
|
+
function esUnidadSinCantidad(item) {
|
|
37
|
+
return item.codigoUnidadMedida === SENA || item.codigoUnidadMedida === BONIFICACION;
|
|
38
|
+
}
|
|
39
|
+
function throwIfErrors(errors, what) {
|
|
40
|
+
if (errors.length > 0) {
|
|
41
|
+
throw new ArcaValidationError(`${what}: ${errors.map((e) => `${e.field}: ${e.message}`).join('; ')}`, errors, errors[0].field);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Reglas de presencia de campos de un ítem (500, 503, 507, 509, 510, 514,
|
|
46
|
+
* 520, 521), excluyentes tanto en CAE como en CAEA.
|
|
47
|
+
*/
|
|
48
|
+
function validarItemEstructura(item, i, cbteTipo, errors) {
|
|
49
|
+
const p = `items[${i}]`;
|
|
50
|
+
const add = (field, message, value) => errors.push({ field: `${p}.${field}`, message, value });
|
|
51
|
+
const sinCantidad = esUnidadSinCantidad(item);
|
|
52
|
+
if (!sinCantidad) {
|
|
53
|
+
if (item.unidadesMtx === undefined)
|
|
54
|
+
add('unidadesMtx', 'es obligatorio salvo unidad de medida 97 o 99 (500)', item.unidadesMtx);
|
|
55
|
+
if (item.codigoMtx === undefined)
|
|
56
|
+
add('codigoMtx', 'es obligatorio salvo unidad de medida 97 o 99 (503)', item.codigoMtx);
|
|
57
|
+
if (item.cantidad === undefined)
|
|
58
|
+
add('cantidad', 'es obligatoria salvo unidad de medida 97 o 99 (507)', item.cantidad);
|
|
59
|
+
if (item.precioUnitario === undefined)
|
|
60
|
+
add('precioUnitario', 'es obligatorio salvo unidad de medida 97 o 99 (509)', item.precioUnitario);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
if (item.cantidad !== undefined)
|
|
64
|
+
add('cantidad', 'no corresponde con unidad de medida 97 o 99 (507)', item.cantidad);
|
|
65
|
+
if (item.precioUnitario !== undefined)
|
|
66
|
+
add('precioUnitario', 'no corresponde con unidad de medida 97 o 99 (509)', item.precioUnitario);
|
|
67
|
+
if (item.importeBonificacion !== undefined) {
|
|
68
|
+
add('importeBonificacion', 'no corresponde con unidad de medida 97 o 99 (510)', item.importeBonificacion);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Fuera de 97/99 los dos son obligatorios (ya reportado arriba).
|
|
72
|
+
if (sinCantidad && (item.unidadesMtx === undefined) !== (item.codigoMtx === undefined)) {
|
|
73
|
+
add('unidadesMtx', 'unidadesMtx y codigoMtx se informan juntos (520)', item.unidadesMtx);
|
|
74
|
+
}
|
|
75
|
+
if (ITEM_CON_IVA.has(cbteTipo) && item.importeIVA === undefined) {
|
|
76
|
+
add('importeIVA', `es obligatorio para el tipo de comprobante ${cbteTipo} (514)`, item.importeIVA);
|
|
77
|
+
}
|
|
78
|
+
if (ITEM_SIN_IVA.has(cbteTipo) && item.importeIVA !== undefined) {
|
|
79
|
+
add('importeIVA', `no corresponde para el tipo de comprobante ${cbteTipo} (514)`, item.importeIVA);
|
|
80
|
+
}
|
|
81
|
+
if ([1, 2, 3].includes(item.codigoCondicionIVA) && item.importeIVA !== undefined && imp(item.importeIVA) !== 0) {
|
|
82
|
+
add('importeIVA', 'debe ser 0 si codigoCondicionIVA es 1, 2 o 3 (521)', item.importeIVA);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function itemsDe(c) {
|
|
86
|
+
return Array.isArray(c?.items) ? c.items.filter((i) => i !== null && typeof i === 'object') : [];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Valida las reglas de ítems que el manual marca como excluyentes para
|
|
90
|
+
* `informarComprobanteCAEA` (1100-1112, 1121) y el par tipo/número de documento (707).
|
|
4
91
|
*
|
|
5
|
-
* @throws ArcaValidationError
|
|
92
|
+
* @throws ArcaValidationError
|
|
6
93
|
*/
|
|
7
|
-
export function
|
|
94
|
+
export function validateComprobanteCAEA(c) {
|
|
8
95
|
const errors = [];
|
|
9
|
-
|
|
10
|
-
if (
|
|
11
|
-
errors.push({
|
|
12
|
-
field: `${prefix}descripcion`,
|
|
13
|
-
message: 'descripcion es requerido',
|
|
14
|
-
value: item.descripcion,
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
if (item.cantidad == null || item.cantidad <= 0) {
|
|
18
|
-
errors.push({
|
|
19
|
-
field: `${prefix}cantidad`,
|
|
20
|
-
message: 'cantidad debe ser > 0',
|
|
21
|
-
value: item.cantidad,
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
if (item.precioUnitario == null || item.precioUnitario < 0) {
|
|
25
|
-
errors.push({
|
|
26
|
-
field: `${prefix}precioUnitario`,
|
|
27
|
-
message: 'precioUnitario debe ser >= 0',
|
|
28
|
-
value: item.precioUnitario,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
if (item.unidadMedida == null || item.unidadMedida <= 0) {
|
|
32
|
-
errors.push({
|
|
33
|
-
field: `${prefix}unidadMedida`,
|
|
34
|
-
message: 'unidadMedida debe ser > 0',
|
|
35
|
-
value: item.unidadMedida,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
if (errors.length > 0) {
|
|
39
|
-
throw new ArcaValidationError(`Validacion de item fallida: ${errors.map((e) => e.message).join('; ')}`, errors);
|
|
96
|
+
itemsDe(c).forEach((item, i) => validarItemEstructura(item, i, c.codigoTipoComprobante, errors));
|
|
97
|
+
if ((c.codigoTipoDocumento === undefined) !== (c.numeroDocumento === undefined)) {
|
|
98
|
+
errors.push({ field: 'numeroDocumento', message: 'codigoTipoDocumento y numeroDocumento se informan juntos (707)' });
|
|
40
99
|
}
|
|
100
|
+
throwIfErrors(errors, 'Comprobante CAEA inválido');
|
|
41
101
|
}
|
|
42
102
|
/**
|
|
43
|
-
*
|
|
103
|
+
* Valida un comprobante a autorizar con CAE (`autorizarComprobante`) según
|
|
104
|
+
* las validaciones excluyentes del manual: presencia de campos por unidad de
|
|
105
|
+
* medida y tipo de comprobante, fórmulas de importe e IVA por ítem, subtotales
|
|
106
|
+
* de IVA por alícuota y la coherencia de gravado/no gravado/exento/subtotal/
|
|
107
|
+
* otros tributos/total, con el margen de error del manual. Usa los importes ya
|
|
108
|
+
* redondeados como se envían (2 decimales; 6 en cantidad y precio).
|
|
44
109
|
*
|
|
45
|
-
*
|
|
110
|
+
* No reemplaza las validaciones de padrón que hace ARCA (CUIT activa, punto de
|
|
111
|
+
* venta habilitado, correlatividad, etc.).
|
|
112
|
+
*
|
|
113
|
+
* @throws ArcaValidationError con todos los errores encontrados.
|
|
46
114
|
*/
|
|
47
|
-
export function
|
|
115
|
+
export function validateComprobanteCAE(c) {
|
|
48
116
|
const errors = [];
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
errors.push({
|
|
58
|
-
field: 'cbteTipo',
|
|
59
|
-
message: 'cbteTipo debe ser > 0',
|
|
60
|
-
value: request.cbteTipo,
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
if (!request.invoice) {
|
|
64
|
-
errors.push({
|
|
65
|
-
field: 'invoice',
|
|
66
|
-
message: 'invoice es requerido',
|
|
67
|
-
value: request.invoice,
|
|
68
|
-
});
|
|
69
|
-
// Cannot validate further without invoice
|
|
70
|
-
throw new ArcaValidationError(`Validacion de AutorizarRequest fallida: ${errors.map((e) => e.message).join('; ')}`, errors);
|
|
71
|
-
}
|
|
72
|
-
const inv = request.invoice;
|
|
73
|
-
if (!inv.cbteFch) {
|
|
74
|
-
errors.push({
|
|
75
|
-
field: 'invoice.cbteFch',
|
|
76
|
-
message: 'cbteFch es requerido',
|
|
77
|
-
value: inv.cbteFch,
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
if (inv.importeTotal == null || inv.importeTotal < 0) {
|
|
81
|
-
errors.push({
|
|
82
|
-
field: 'invoice.importeTotal',
|
|
83
|
-
message: 'importeTotal debe ser >= 0',
|
|
84
|
-
value: inv.importeTotal,
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
if (!inv.items || inv.items.length === 0) {
|
|
88
|
-
errors.push({
|
|
89
|
-
field: 'invoice.items',
|
|
90
|
-
message: 'items no puede estar vacio',
|
|
91
|
-
value: inv.items,
|
|
92
|
-
});
|
|
117
|
+
const add = (field, message, value) => errors.push({ field, message, value });
|
|
118
|
+
const tipo = c.codigoTipoComprobante;
|
|
119
|
+
const items = itemsDe(c);
|
|
120
|
+
// --- Comprobante -------------------------------------------------------
|
|
121
|
+
if (![1, 2, 3].includes(c.codigoConcepto))
|
|
122
|
+
add('codigoConcepto', 'debe ser 1, 2 o 3 (121)', c.codigoConcepto);
|
|
123
|
+
if ((c.codigoTipoDocumento === undefined) !== (c.numeroDocumento === undefined)) {
|
|
124
|
+
add('numeroDocumento', 'codigoTipoDocumento y numeroDocumento se informan juntos (108)');
|
|
93
125
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
126
|
+
if (RECEPTOR_CUIT.has(tipo)) {
|
|
127
|
+
if (c.codigoTipoDocumento === undefined)
|
|
128
|
+
add('codigoTipoDocumento', `es obligatorio para el tipo de comprobante ${tipo} (128)`);
|
|
129
|
+
else if (c.codigoTipoDocumento !== 80)
|
|
130
|
+
add('codigoTipoDocumento', `debe ser 80 (CUIT) para el tipo de comprobante ${tipo} (129)`, c.codigoTipoDocumento);
|
|
131
|
+
}
|
|
132
|
+
const servicios = c.codigoConcepto === 2 || c.codigoConcepto === 3;
|
|
133
|
+
for (const campo of ['fechaServicioDesde', 'fechaServicioHasta', 'fechaVencimientoPago']) {
|
|
134
|
+
const presente = c[campo] !== undefined;
|
|
135
|
+
if (servicios && !presente)
|
|
136
|
+
add(campo, 'es obligatoria si codigoConcepto es 2 o 3 (122-124)');
|
|
137
|
+
if (!servicios && presente)
|
|
138
|
+
add(campo, 'solo corresponde si codigoConcepto es 2 o 3 (122-124)', c[campo]);
|
|
139
|
+
}
|
|
140
|
+
const fecha = (v, field) => {
|
|
141
|
+
if (v === undefined)
|
|
142
|
+
return undefined;
|
|
143
|
+
try {
|
|
144
|
+
return parseAfipDate(toXsdDate(v, field)).getTime();
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
if (e instanceof ArcaValidationError)
|
|
148
|
+
return undefined; // ya lo reporta la validación del XSD
|
|
149
|
+
throw e;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const desde = fecha(c.fechaServicioDesde, 'fechaServicioDesde');
|
|
153
|
+
const hasta = fecha(c.fechaServicioHasta, 'fechaServicioHasta');
|
|
154
|
+
if (desde !== undefined && hasta !== undefined && desde > hasta) {
|
|
155
|
+
add('fechaServicioHasta', 'debe ser posterior o igual a fechaServicioDesde (133)');
|
|
156
|
+
}
|
|
157
|
+
const emision = fecha(c.fechaEmision, 'fechaEmision');
|
|
158
|
+
const vto = fecha(c.fechaVencimientoPago, 'fechaVencimientoPago');
|
|
159
|
+
if (emision !== undefined && vto !== undefined && vto < emision) {
|
|
160
|
+
add('fechaVencimientoPago', 'debe ser posterior o igual a fechaEmision (125)');
|
|
161
|
+
}
|
|
162
|
+
if (c.codigoMoneda === 'PES') {
|
|
163
|
+
if (c.cotizacionMoneda !== undefined && c.cotizacionMoneda !== 1)
|
|
164
|
+
add('cotizacionMoneda', 'debe ser 1 si codigoMoneda es PES (120)', c.cotizacionMoneda);
|
|
165
|
+
if (c.cancelaEnMismaMonedaExtranjera === 'S')
|
|
166
|
+
add('cancelaEnMismaMonedaExtranjera', 'no corresponde con codigoMoneda PES (169)', 'S');
|
|
167
|
+
}
|
|
168
|
+
if (c.cotizacionMoneda === undefined && c.cancelaEnMismaMonedaExtranjera !== 'S') {
|
|
169
|
+
add('cotizacionMoneda', 'es obligatoria salvo cancelaEnMismaMonedaExtranjera = "S" (194)');
|
|
170
|
+
}
|
|
171
|
+
(c.otrosTributos ?? []).forEach((t, i) => {
|
|
172
|
+
if (t?.codigo === 99 && !t.descripcion)
|
|
173
|
+
add(`otrosTributos[${i}].descripcion`, 'es obligatoria si codigo es 99 (301)');
|
|
174
|
+
});
|
|
175
|
+
// --- Ítems ---------------------------------------------------------------
|
|
176
|
+
const ivaItem = [];
|
|
177
|
+
items.forEach((item, i) => {
|
|
178
|
+
validarItemEstructura(item, i, tipo, errors);
|
|
179
|
+
const p = `items[${i}]`;
|
|
180
|
+
const u = item.codigoUnidadMedida;
|
|
181
|
+
const alic = ALICUOTAS_IVA[item.codigoCondicionIVA];
|
|
182
|
+
const importeItem = imp(item.importeItem);
|
|
183
|
+
const importeIVA = imp(item.importeIVA);
|
|
184
|
+
if (alic === undefined) {
|
|
185
|
+
add(`${p}.codigoCondicionIVA`, `condición de IVA ${item.codigoCondicionIVA} desconocida (consultá getCondicionesIVA())`, item.codigoCondicionIVA);
|
|
186
|
+
ivaItem.push(0);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
ivaItem.push(CLASE_B.has(tipo) ? importeItem - importeItem / (1 + alic) : importeIVA);
|
|
190
|
+
// Signo del importe (518) y del IVA (517).
|
|
191
|
+
if ((u === BONIFICACION || u === ANULACION) && !(importeItem < 0)) {
|
|
192
|
+
add(`${p}.importeItem`, `debe ser menor a 0 con unidad de medida ${u} (518)`, item.importeItem);
|
|
193
|
+
}
|
|
194
|
+
else if (u !== SENA && u !== BONIFICACION && u !== ANULACION && importeItem < 0) {
|
|
195
|
+
add(`${p}.importeItem`, 'debe ser mayor o igual a 0 (518)', item.importeItem);
|
|
196
|
+
}
|
|
197
|
+
if (ITEM_CON_IVA.has(tipo)) {
|
|
198
|
+
if ((u === BONIFICACION || u === ANULACION) && importeIVA > 0) {
|
|
199
|
+
add(`${p}.importeIVA`, `debe ser menor o igual a 0 con unidad de medida ${u} (517)`, item.importeIVA);
|
|
99
200
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
201
|
+
else if (u !== SENA && u !== BONIFICACION && u !== ANULACION && importeIVA < 0) {
|
|
202
|
+
add(`${p}.importeIVA`, 'debe ser mayor o igual a 0 (517)', item.importeIVA);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Bonificación <= precio * cantidad (511).
|
|
206
|
+
const bruto = dec(item.precioUnitario) * dec(item.cantidad);
|
|
207
|
+
if (item.importeBonificacion !== undefined && dec(item.importeBonificacion) > bruto + 1e-9) {
|
|
208
|
+
add(`${p}.importeBonificacion`, 'debe ser menor o igual a precioUnitario * cantidad (511)', item.importeBonificacion);
|
|
209
|
+
}
|
|
210
|
+
// Unidad 99: tiene que haber otro ítem con la misma condición de IVA (513).
|
|
211
|
+
if (u === BONIFICACION && !items.some((o) => o !== item && o.codigoCondicionIVA === item.codigoCondicionIVA && o.codigoUnidadMedida !== BONIFICACION)) {
|
|
212
|
+
add(`${p}.codigoUnidadMedida`, 'una bonificación (99) requiere otro ítem con la misma condición de IVA (513)', u);
|
|
213
|
+
}
|
|
214
|
+
// Fórmulas de importe (515, 519).
|
|
215
|
+
const base = bruto - dec(item.importeBonificacion);
|
|
216
|
+
const signo = u === ANULACION ? -1 : 1;
|
|
217
|
+
if (ITEM_CON_IVA.has(tipo)) {
|
|
218
|
+
if (u === SENA || u === BONIFICACION) {
|
|
219
|
+
const esperado = importeItem - importeItem / (1 + alic);
|
|
220
|
+
if (!dentroDelMargen(importeIVA, esperado)) {
|
|
221
|
+
add(`${p}.importeIVA`, `debe ser importeItem - importeItem / (1 + alícuota) = ${fmt(esperado)} (515)`, item.importeIVA);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else if (item.cantidad !== undefined && item.precioUnitario !== undefined) {
|
|
225
|
+
const ivaEsperado = signo * base * alic;
|
|
226
|
+
const itemEsperado = signo * base * (1 + alic);
|
|
227
|
+
if (!dentroDelMargen(importeIVA, ivaEsperado)) {
|
|
228
|
+
add(`${p}.importeIVA`, `debe ser (precioUnitario * cantidad - importeBonificacion) * alícuota = ${fmt(ivaEsperado)} (515)`, item.importeIVA);
|
|
229
|
+
}
|
|
230
|
+
if (!dentroDelMargen(importeItem, itemEsperado)) {
|
|
231
|
+
add(`${p}.importeItem`, `debe ser (precioUnitario * cantidad - importeBonificacion) * (1 + alícuota) = ${fmt(itemEsperado)} (519)`, item.importeItem);
|
|
103
232
|
}
|
|
104
233
|
}
|
|
105
234
|
}
|
|
235
|
+
else if (ITEM_SIN_IVA.has(tipo) && u !== SENA && u !== BONIFICACION && item.cantidad !== undefined && item.precioUnitario !== undefined) {
|
|
236
|
+
const itemEsperado = signo * base;
|
|
237
|
+
if (!dentroDelMargen(importeItem, itemEsperado)) {
|
|
238
|
+
add(`${p}.importeItem`, `debe ser precioUnitario (con IVA) * cantidad - importeBonificacion = ${fmt(itemEsperado)} (519)`, item.importeItem);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
// --- Subtotales de IVA (127, 400-405) -----------------------------------
|
|
243
|
+
const subtotales = c.subtotalesIVA ?? [];
|
|
244
|
+
const codigosConIVA = new Set(items.filter((i) => CON_SUBTOTAL.has(i.codigoCondicionIVA)).map((i) => i.codigoCondicionIVA));
|
|
245
|
+
const vistos = new Set();
|
|
246
|
+
subtotales.forEach((s, i) => {
|
|
247
|
+
const p = `subtotalesIVA[${i}]`;
|
|
248
|
+
if (!CON_SUBTOTAL.has(s?.codigo)) {
|
|
249
|
+
add(`${p}.codigo`, 'debe ser 4, 5 o 6 (400)', s?.codigo);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (vistos.has(s.codigo))
|
|
253
|
+
add(`${p}.codigo`, `subtotal de IVA ${s.codigo} repetido (402)`, s.codigo);
|
|
254
|
+
vistos.add(s.codigo);
|
|
255
|
+
if (!codigosConIVA.has(s.codigo)) {
|
|
256
|
+
add(`${p}.codigo`, `no hay ítems con condición de IVA ${s.codigo} (403)`, s.codigo);
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const delCodigo = items.map((it, k) => (it.codigoCondicionIVA === s.codigo ? ivaItem[k] : undefined)).filter((v) => v !== undefined);
|
|
260
|
+
const esperado = sum(delCodigo);
|
|
261
|
+
if (!dentroDelMargen(imp(s.importe), esperado, delCodigo.length)) {
|
|
262
|
+
add(`${p}.importe`, `debe ser la suma del IVA de los ítems con condición ${s.codigo} = ${fmt(esperado)} (401)`, s.importe);
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
for (const codigo of codigosConIVA) {
|
|
266
|
+
if (!vistos.has(codigo))
|
|
267
|
+
add('subtotalesIVA', `falta el subtotal de IVA para la condición ${codigo} (403)`);
|
|
106
268
|
}
|
|
107
|
-
|
|
108
|
-
|
|
269
|
+
const totalIVA = sum(subtotales.map((s) => imp(s?.importe)));
|
|
270
|
+
if (totalIVA < 0)
|
|
271
|
+
add('subtotalesIVA', 'la suma de los subtotales de IVA no puede ser negativa (405)');
|
|
272
|
+
// --- Totales (110-116) ----------------------------------------------------
|
|
273
|
+
const porCondicion = (pred) => items.map((it, k) => ({ it, k })).filter(({ it }) => pred(it.codigoCondicionIVA));
|
|
274
|
+
if (CLASE_A.has(tipo) || CLASE_B.has(tipo)) {
|
|
275
|
+
const gravados = porCondicion((x) => GRAVADAS.has(x));
|
|
276
|
+
const gravadoEsperado = sum(gravados.map(({ it, k }) => imp(it.importeItem) - ivaItem[k]));
|
|
277
|
+
if (!dentroDelMargen(imp(c.importeGravado), gravadoEsperado, gravados.length)) {
|
|
278
|
+
add('importeGravado', `debe ser la suma de importeItem sin IVA de los ítems gravados = ${fmt(gravadoEsperado)} (110)`, c.importeGravado);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
const noGravados = porCondicion((x) => x === 1);
|
|
282
|
+
const noGravadoEsperado = sum(noGravados.map(({ it }) => imp(it.importeItem)));
|
|
283
|
+
if (!dentroDelMargen(imp(c.importeNoGravado), noGravadoEsperado, noGravados.length)) {
|
|
284
|
+
add('importeNoGravado', `debe ser la suma de importeItem de los ítems no gravados = ${fmt(noGravadoEsperado)} (111)`, c.importeNoGravado);
|
|
285
|
+
}
|
|
286
|
+
const exentos = porCondicion((x) => x === 2);
|
|
287
|
+
const exentoEsperado = sum(exentos.map(({ it }) => imp(it.importeItem)));
|
|
288
|
+
if (!dentroDelMargen(imp(c.importeExento), exentoEsperado, exentos.length)) {
|
|
289
|
+
add('importeExento', `debe ser la suma de importeItem de los ítems exentos = ${fmt(exentoEsperado)} (112)`, c.importeExento);
|
|
290
|
+
}
|
|
291
|
+
const subtotalEsperado = imp(c.importeGravado) + imp(c.importeNoGravado) + imp(c.importeExento);
|
|
292
|
+
if (!dentroDelMargen(imp(c.importeSubtotal), subtotalEsperado)) {
|
|
293
|
+
add('importeSubtotal', `debe ser importeGravado + importeNoGravado + importeExento = ${fmt(subtotalEsperado)} (113)`, c.importeSubtotal);
|
|
294
|
+
}
|
|
295
|
+
const tributos = c.otrosTributos ?? [];
|
|
296
|
+
const tributosEsperado = sum(tributos.map((t) => imp(t?.importe)));
|
|
297
|
+
if (!dentroDelMargen(imp(c.importeOtrosTributos), tributosEsperado, tributos.length)) {
|
|
298
|
+
add('importeOtrosTributos', `debe ser la suma de otrosTributos[].importe = ${fmt(tributosEsperado)} (114)`, c.importeOtrosTributos);
|
|
299
|
+
}
|
|
300
|
+
const total = imp(c.importeTotal);
|
|
301
|
+
const totalPorSubtotales = imp(c.importeSubtotal) + imp(c.importeOtrosTributos) + totalIVA;
|
|
302
|
+
if (!dentroDelMargen(total, totalPorSubtotales)) {
|
|
303
|
+
add('importeTotal', `debe ser importeSubtotal + importeOtrosTributos + subtotales de IVA = ${fmt(totalPorSubtotales)} (115)`, c.importeTotal);
|
|
304
|
+
}
|
|
305
|
+
const totalPorItems = imp(c.importeOtrosTributos) + sum(items.map((it) => imp(it.importeItem)));
|
|
306
|
+
if (!dentroDelMargen(total, totalPorItems, items.length)) {
|
|
307
|
+
add('importeTotal', `debe ser importeOtrosTributos + suma de importeItem = ${fmt(totalPorItems)} (116)`, c.importeTotal);
|
|
109
308
|
}
|
|
309
|
+
throwIfErrors(errors, 'Comprobante inválido');
|
|
110
310
|
}
|
|
111
311
|
//# sourceMappingURL=validation.js.map
|
package/dist/validation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
|