@ramiidv/arca-empleados 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 +109 -0
- package/README.md +149 -357
- package/dist/constants.d.ts +55 -313
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +54 -510
- package/dist/constants.js.map +1 -1
- package/dist/errors.d.ts +30 -7
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +21 -10
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -20
- package/dist/index.js.map +1 -1
- package/dist/ingreso-masivo.d.ts +63 -0
- package/dist/ingreso-masivo.d.ts.map +1 -0
- package/dist/ingreso-masivo.js +234 -0
- package/dist/ingreso-masivo.js.map +1 -0
- package/dist/serializer.d.ts +51 -57
- package/dist/serializer.d.ts.map +1 -1
- package/dist/serializer.js +301 -269
- package/dist/serializer.js.map +1 -1
- package/dist/types.d.ts +127 -193
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +1 -1
- package/dist/validators.d.ts +22 -31
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +85 -229
- package/dist/validators.js.map +1 -1
- package/llms.txt +49 -249
- package/package.json +24 -23
- package/dist/f935-builder.d.ts +0 -91
- package/dist/f935-builder.d.ts.map +0 -1
- package/dist/f935-builder.js +0 -246
- package/dist/f935-builder.js.map +0 -1
package/dist/validators.js
CHANGED
|
@@ -1,255 +1,111 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import { MODALIDADES_CON_FECHA_FIN } from './constants.js';
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
// Error collection helpers (local)
|
|
7
|
-
// ---------------------------------------------------------------------------
|
|
1
|
+
import { ArcaValidationError, collectErrors, validateCuit } from '@ramiidv/arca-common';
|
|
2
|
+
import { PREFIJOS_CUIL_PERSONA_FISICA, VALORES_MARCA_COVID_CCG, VALORES_RECTIFICACION } from './constants.js';
|
|
3
|
+
import { erroresDeFormato, formatFechaSR } from './serializer.js';
|
|
8
4
|
/**
|
|
9
|
-
*
|
|
5
|
+
* Valida un CUIL de trabajador: 11 dígitos, prefijo de persona física
|
|
6
|
+
* (20, 23, 24 o 27) y dígito verificador. Devuelve el CUIL normalizado (solo dígitos).
|
|
7
|
+
* @throws ArcaValidationError
|
|
10
8
|
*/
|
|
11
|
-
function
|
|
9
|
+
export function validateCuilTrabajador(cuil, field = 'cuil') {
|
|
10
|
+
let normalizado;
|
|
12
11
|
try {
|
|
13
|
-
|
|
12
|
+
normalizado = validateCuit(cuil);
|
|
14
13
|
}
|
|
15
14
|
catch (e) {
|
|
16
15
|
if (e instanceof ArcaValidationError) {
|
|
17
|
-
|
|
18
|
-
...err,
|
|
19
|
-
field: fieldName,
|
|
20
|
-
})));
|
|
16
|
+
throw new ArcaValidationError(e.message.replace(/^CUIT/, 'CUIL'), e.details.map((d) => ({ ...d, field, message: d.message.replace(/CUIT/g, 'CUIL') })), field, { cause: e });
|
|
21
17
|
}
|
|
18
|
+
throw e;
|
|
22
19
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
// Record-level validators
|
|
26
|
-
// ---------------------------------------------------------------------------
|
|
27
|
-
/**
|
|
28
|
-
* Validates all fields of an AltaEmpleado record.
|
|
29
|
-
* @throws ArcaValidationError if any field is invalid.
|
|
30
|
-
*/
|
|
31
|
-
export function validateAlta(alta) {
|
|
32
|
-
const errors = [];
|
|
33
|
-
// CUIL
|
|
34
|
-
collectErrors(() => validateCuil(alta.cuil), errors);
|
|
35
|
-
// Fecha de inicio
|
|
36
|
-
collectErrors(() => validateFecha(alta.fechaInicio, 'fechaInicio'), errors);
|
|
37
|
-
// Modalidad de contratacion
|
|
38
|
-
if (alta.modalidadContratacion == null || typeof alta.modalidadContratacion !== 'number') {
|
|
39
|
-
errors.push({
|
|
40
|
-
field: 'modalidadContratacion',
|
|
41
|
-
message: 'La modalidad de contratacion es requerida',
|
|
42
|
-
value: alta.modalidadContratacion,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
// Obra social
|
|
46
|
-
if (!alta.obraSocial || typeof alta.obraSocial !== 'string' || alta.obraSocial.trim() === '') {
|
|
47
|
-
errors.push({
|
|
48
|
-
field: 'obraSocial',
|
|
49
|
-
message: 'La obra social es requerida',
|
|
50
|
-
value: alta.obraSocial,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
// Actividad economica
|
|
54
|
-
if (!alta.actividadEconomica || typeof alta.actividadEconomica !== 'string' || alta.actividadEconomica.trim() === '') {
|
|
55
|
-
errors.push({
|
|
56
|
-
field: 'actividadEconomica',
|
|
57
|
-
message: 'La actividad economica es requerida',
|
|
58
|
-
value: alta.actividadEconomica,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
// Domicilio de explotacion
|
|
62
|
-
collectErrorsWithPrefix(() => validateDomicilio(alta.domicilioExplotacion), errors, 'domicilioExplotacion');
|
|
63
|
-
// Fecha de fin requerida para ciertas modalidades
|
|
64
|
-
if (MODALIDADES_CON_FECHA_FIN.has(alta.modalidadContratacion) && !alta.fechaFin) {
|
|
65
|
-
errors.push({
|
|
66
|
-
field: 'fechaFin',
|
|
67
|
-
message: `La fecha de fin es requerida para la modalidad de contratacion ${alta.modalidadContratacion}`,
|
|
68
|
-
value: alta.fechaFin,
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
// Validate fecha range if both dates exist
|
|
72
|
-
if (alta.fechaFin) {
|
|
73
|
-
collectErrors(() => validateFechaRango(alta.fechaInicio, alta.fechaFin), errors);
|
|
74
|
-
}
|
|
75
|
-
if (errors.length > 0) {
|
|
76
|
-
throw new ArcaValidationError(`Datos de alta invalidos: ${errors.map(e => e.message).join('; ')}`, errors);
|
|
20
|
+
if (!PREFIJOS_CUIL_PERSONA_FISICA.includes(normalizado.slice(0, 2))) {
|
|
21
|
+
throw new ArcaValidationError(`CUIL inválido: "${cuil}". El prefijo ${normalizado.slice(0, 2)} no corresponde a una persona física (20, 23, 24 o 27).`, [{ field, message: `Prefijo ${normalizado.slice(0, 2)} no es de persona física`, value: cuil }], field);
|
|
77
22
|
}
|
|
23
|
+
return normalizado;
|
|
78
24
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
* @throws ArcaValidationError if any field is invalid.
|
|
82
|
-
*/
|
|
83
|
-
export function validateBaja(baja) {
|
|
84
|
-
const errors = [];
|
|
85
|
-
collectErrors(() => validateCuil(baja.cuil), errors);
|
|
86
|
-
collectErrors(() => validateFecha(baja.fechaBaja, 'fechaBaja'), errors);
|
|
87
|
-
if (baja.motivoBaja == null || typeof baja.motivoBaja !== 'number') {
|
|
88
|
-
errors.push({
|
|
89
|
-
field: 'motivoBaja',
|
|
90
|
-
message: 'El motivo de baja es requerido',
|
|
91
|
-
value: baja.motivoBaja,
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
if (errors.length > 0) {
|
|
95
|
-
throw new ArcaValidationError(`Datos de baja invalidos: ${errors.map(e => e.message).join('; ')}`, errors);
|
|
96
|
-
}
|
|
25
|
+
function presente(v) {
|
|
26
|
+
return v !== undefined && v !== null && v !== '';
|
|
97
27
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
collectErrorsWithPrefix(() => validateDomicilio(mod.domicilioExplotacion), errors, 'domicilioExplotacion');
|
|
108
|
-
}
|
|
109
|
-
if (mod.fechaFin) {
|
|
110
|
-
collectErrors(() => validateFechaRango(mod.fechaInicio, mod.fechaFin), errors);
|
|
111
|
-
}
|
|
112
|
-
if (errors.length > 0) {
|
|
113
|
-
throw new ArcaValidationError(`Datos de modificacion invalidos: ${errors.map(e => e.message).join('; ')}`, errors);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Validates all fields of a DatosComplementarios record.
|
|
118
|
-
* @throws ArcaValidationError if any field is invalid.
|
|
119
|
-
*/
|
|
120
|
-
export function validateDatosComplementarios(datos) {
|
|
121
|
-
const errors = [];
|
|
122
|
-
collectErrors(() => validateCuil(datos.cuil), errors);
|
|
123
|
-
collectErrors(() => validateFecha(datos.fechaInicio, 'fechaInicio'), errors);
|
|
124
|
-
if (datos.situacionRevista == null || typeof datos.situacionRevista !== 'number') {
|
|
125
|
-
errors.push({
|
|
126
|
-
field: 'situacionRevista',
|
|
127
|
-
message: 'La situacion de revista es requerida',
|
|
128
|
-
value: datos.situacionRevista,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
if (datos.remuneracion !== undefined && datos.remuneracion < 0) {
|
|
132
|
-
errors.push({
|
|
133
|
-
field: 'remuneracion',
|
|
134
|
-
message: 'La remuneracion no puede ser negativa',
|
|
135
|
-
value: datos.remuneracion,
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
if (datos.cantidadHorasTrabajadas !== undefined && datos.cantidadHorasTrabajadas < 0) {
|
|
139
|
-
errors.push({
|
|
140
|
-
field: 'cantidadHorasTrabajadas',
|
|
141
|
-
message: 'La cantidad de horas trabajadas no puede ser negativa',
|
|
142
|
-
value: datos.cantidadHorasTrabajadas,
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
if (datos.fechaPreaviso) {
|
|
146
|
-
collectErrors(() => validateFecha(datos.fechaPreaviso, 'fechaPreaviso'), errors);
|
|
147
|
-
}
|
|
148
|
-
if (errors.length > 0) {
|
|
149
|
-
throw new ArcaValidationError(`Datos complementarios invalidos: ${errors.map(e => e.message).join('; ')}`, errors);
|
|
28
|
+
function requerido(r, campos, errores) {
|
|
29
|
+
for (const c of campos) {
|
|
30
|
+
if (!presente(r[c])) {
|
|
31
|
+
errores.push({
|
|
32
|
+
field: c,
|
|
33
|
+
message: `El campo "${c}" es obligatorio para el movimiento ${r.movimiento}`,
|
|
34
|
+
value: r[c],
|
|
35
|
+
});
|
|
36
|
+
}
|
|
150
37
|
}
|
|
151
38
|
}
|
|
152
39
|
/**
|
|
153
|
-
*
|
|
154
|
-
*
|
|
40
|
+
* Campos obligatorios por movimiento que valida el SDK en modo `strict`.
|
|
41
|
+
*
|
|
42
|
+
* - `AT`: los datos mínimos del alta según el manual (RG 5508/2024): CUIL, fecha de
|
|
43
|
+
* inicio, modalidad de contrato, obra social y domicilio de desempeño (sucursal).
|
|
44
|
+
* La fecha de fin es obligatoria en contratos a plazo fijo, pero el SDK no conoce la
|
|
45
|
+
* tabla de modalidades (no es pública) y no lo puede verificar.
|
|
46
|
+
* - `BT`: CUIL y fecha de fin (fecha de baja).
|
|
47
|
+
* - `MR`, `NA`, `NB`: CUIL.
|
|
48
|
+
*
|
|
49
|
+
* El servicio de ARCA aplica sus propias validaciones al importar el archivo.
|
|
155
50
|
*/
|
|
156
|
-
export
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
51
|
+
export const CAMPOS_OBLIGATORIOS = Object.freeze({
|
|
52
|
+
AT: Object.freeze(['cuil', 'fechaInicio', 'modalidadContrato', 'obraSocial', 'sucursal']),
|
|
53
|
+
BT: Object.freeze(['cuil', 'fechaFin']),
|
|
54
|
+
MR: Object.freeze(['cuil']),
|
|
55
|
+
NA: Object.freeze(['cuil']),
|
|
56
|
+
NB: Object.freeze(['cuil']),
|
|
57
|
+
});
|
|
58
|
+
function enRango(r, campo, validos, errores) {
|
|
59
|
+
const v = r[campo];
|
|
60
|
+
if (!presente(v))
|
|
61
|
+
return;
|
|
62
|
+
const n = Number(v);
|
|
63
|
+
if (!validos.includes(n)) {
|
|
64
|
+
errores.push({ field: campo, message: `"${campo}" debe ser uno de ${validos.join(', ')}`, value: v });
|
|
163
65
|
}
|
|
164
66
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
*/
|
|
169
|
-
export function validateRelacionFamiliar(rel) {
|
|
170
|
-
const errors = [];
|
|
171
|
-
collectErrors(() => validateCuil(rel.cuil), errors);
|
|
172
|
-
collectErrors(() => validateFecha(rel.fechaInicio, 'fechaInicio'), errors);
|
|
173
|
-
if (rel.tipoRelacion == null || typeof rel.tipoRelacion !== 'number') {
|
|
174
|
-
errors.push({
|
|
175
|
-
field: 'tipoRelacion',
|
|
176
|
-
message: 'El tipo de relacion familiar es requerido',
|
|
177
|
-
value: rel.tipoRelacion,
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
if (!rel.nombreFamiliar || rel.nombreFamiliar.trim() === '') {
|
|
181
|
-
errors.push({
|
|
182
|
-
field: 'nombreFamiliar',
|
|
183
|
-
message: 'El nombre del familiar es requerido',
|
|
184
|
-
value: rel.nombreFamiliar,
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
if (!rel.apellidoFamiliar || rel.apellidoFamiliar.trim() === '') {
|
|
188
|
-
errors.push({
|
|
189
|
-
field: 'apellidoFamiliar',
|
|
190
|
-
message: 'El apellido del familiar es requerido',
|
|
191
|
-
value: rel.apellidoFamiliar,
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
collectErrors(() => validateFecha(rel.fechaNacimiento, 'fechaNacimiento'), errors);
|
|
195
|
-
// CUIL familiar validation (if provided)
|
|
196
|
-
if (rel.cuilFamiliar) {
|
|
197
|
-
collectErrorsAs(() => validateCuil(rel.cuilFamiliar), errors, 'cuilFamiliar');
|
|
198
|
-
}
|
|
199
|
-
// CUIL titular obra social validation (if provided)
|
|
200
|
-
if (rel.cuilTitularObraSocial) {
|
|
201
|
-
collectErrorsAs(() => validateCuil(rel.cuilTitularObraSocial), errors, 'cuilTitularObraSocial');
|
|
67
|
+
function fechaComparable(f) {
|
|
68
|
+
try {
|
|
69
|
+
return formatFechaSR(f);
|
|
202
70
|
}
|
|
203
|
-
|
|
204
|
-
|
|
71
|
+
catch {
|
|
72
|
+
return undefined; // el error de formato ya lo informa erroresDeFormato
|
|
205
73
|
}
|
|
206
74
|
}
|
|
207
75
|
/**
|
|
208
|
-
*
|
|
209
|
-
*
|
|
76
|
+
* Valida un registro completo: formato (que se pueda escribir en las 130 posiciones)
|
|
77
|
+
* y reglas de negocio (CUIL con dígito verificador y prefijo de persona física,
|
|
78
|
+
* campos obligatorios por movimiento, rectificación 00-05, marca 0-9, fechaFin ≥ fechaInicio).
|
|
79
|
+
* Informa todos los errores juntos.
|
|
80
|
+
* @throws ArcaValidationError
|
|
210
81
|
*/
|
|
211
|
-
export function
|
|
212
|
-
const
|
|
213
|
-
if (
|
|
214
|
-
throw new ArcaValidationError(
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
if (!dom.codigoPostal || dom.codigoPostal.trim() === '') {
|
|
238
|
-
errors.push({
|
|
239
|
-
field: 'codigoPostal',
|
|
240
|
-
message: 'El codigo postal es requerido',
|
|
241
|
-
value: dom.codigoPostal,
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
if (dom.provincia == null || typeof dom.provincia !== 'number' || dom.provincia < 0 || dom.provincia > 23) {
|
|
245
|
-
errors.push({
|
|
246
|
-
field: 'provincia',
|
|
247
|
-
message: 'La provincia debe ser un valor entre 0 y 23',
|
|
248
|
-
value: dom.provincia,
|
|
249
|
-
});
|
|
82
|
+
export function validateRegistro(registro, opciones) {
|
|
83
|
+
const errores = erroresDeFormato(registro, opciones);
|
|
84
|
+
if (errores.length === 1 && errores[0].field === 'registro') {
|
|
85
|
+
throw new ArcaValidationError(errores[0].message, errores, 'registro');
|
|
86
|
+
}
|
|
87
|
+
const conErrorDeFormato = new Set(errores.map((e) => e.field));
|
|
88
|
+
if (!conErrorDeFormato.has('cuil')) {
|
|
89
|
+
collectErrors(() => validateCuilTrabajador(registro.cuil), errores);
|
|
90
|
+
}
|
|
91
|
+
const obligatorios = CAMPOS_OBLIGATORIOS[registro.movimiento];
|
|
92
|
+
if (obligatorios)
|
|
93
|
+
requerido(registro, [...obligatorios], errores);
|
|
94
|
+
enRango(registro, 'rectificacion', VALORES_RECTIFICACION, errores);
|
|
95
|
+
enRango(registro, 'marcaCovidTipoContratoCCG', VALORES_MARCA_COVID_CCG, errores);
|
|
96
|
+
if (presente(registro.fechaInicio) && presente(registro.fechaFin)) {
|
|
97
|
+
const ini = fechaComparable(registro.fechaInicio);
|
|
98
|
+
const fin = fechaComparable(registro.fechaFin);
|
|
99
|
+
if (ini && fin && fin < ini) {
|
|
100
|
+
errores.push({
|
|
101
|
+
field: 'fechaFin',
|
|
102
|
+
message: `fechaFin (${fin}) es anterior a fechaInicio (${ini})`,
|
|
103
|
+
value: registro.fechaFin,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
250
106
|
}
|
|
251
|
-
if (
|
|
252
|
-
throw new ArcaValidationError(`
|
|
107
|
+
if (errores.length > 0) {
|
|
108
|
+
throw new ArcaValidationError(`Registro ${String(registro.movimiento)} inválido: ${errores.map((e) => e.message).join('; ')}`, errores, errores[0].field);
|
|
253
109
|
}
|
|
254
110
|
}
|
|
255
111
|
//# sourceMappingURL=validators.js.map
|
package/dist/validators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|