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