@ramiidv/arca-empleados 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 +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 +215 -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 +292 -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 +77 -229
- package/dist/validators.js.map +1 -1
- package/llms.txt +49 -249
- package/package.json +13 -10
- 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,103 @@
|
|
|
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
|
-
const errors = [];
|
|
104
|
-
collectErrors(() => validateCuil(mod.cuil), errors);
|
|
105
|
-
collectErrors(() => validateFecha(mod.fechaInicio, 'fechaInicio'), errors);
|
|
106
|
-
if (mod.domicilioExplotacion) {
|
|
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({ field: c, message: `El campo "${c}" es obligatorio para el movimiento ${r.movimiento}`, value: r[c] });
|
|
32
|
+
}
|
|
150
33
|
}
|
|
151
34
|
}
|
|
152
35
|
/**
|
|
153
|
-
*
|
|
154
|
-
*
|
|
36
|
+
* Campos obligatorios por movimiento que valida el SDK en modo `strict`.
|
|
37
|
+
*
|
|
38
|
+
* - `AT`: los datos mínimos del alta según el manual (RG 5508/2024): CUIL, fecha de
|
|
39
|
+
* inicio, modalidad de contrato, obra social y domicilio de desempeño (sucursal).
|
|
40
|
+
* La fecha de fin es obligatoria en contratos a plazo fijo, pero el SDK no conoce la
|
|
41
|
+
* tabla de modalidades (no es pública) y no lo puede verificar.
|
|
42
|
+
* - `BT`: CUIL y fecha de fin (fecha de baja).
|
|
43
|
+
* - `MR`, `NA`, `NB`: CUIL.
|
|
44
|
+
*
|
|
45
|
+
* El servicio de ARCA aplica sus propias validaciones al importar el archivo.
|
|
155
46
|
*/
|
|
156
|
-
export
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
47
|
+
export const CAMPOS_OBLIGATORIOS = Object.freeze({
|
|
48
|
+
AT: Object.freeze(['cuil', 'fechaInicio', 'modalidadContrato', 'obraSocial', 'sucursal']),
|
|
49
|
+
BT: Object.freeze(['cuil', 'fechaFin']),
|
|
50
|
+
MR: Object.freeze(['cuil']),
|
|
51
|
+
NA: Object.freeze(['cuil']),
|
|
52
|
+
NB: Object.freeze(['cuil']),
|
|
53
|
+
});
|
|
54
|
+
function enRango(r, campo, validos, errores) {
|
|
55
|
+
const v = r[campo];
|
|
56
|
+
if (!presente(v))
|
|
57
|
+
return;
|
|
58
|
+
const n = Number(v);
|
|
59
|
+
if (!validos.includes(n)) {
|
|
60
|
+
errores.push({ field: campo, message: `"${campo}" debe ser uno de ${validos.join(', ')}`, value: v });
|
|
163
61
|
}
|
|
164
62
|
}
|
|
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');
|
|
63
|
+
function fechaComparable(f) {
|
|
64
|
+
try {
|
|
65
|
+
return formatFechaSR(f);
|
|
202
66
|
}
|
|
203
|
-
|
|
204
|
-
|
|
67
|
+
catch {
|
|
68
|
+
return undefined; // el error de formato ya lo informa erroresDeFormato
|
|
205
69
|
}
|
|
206
70
|
}
|
|
207
71
|
/**
|
|
208
|
-
*
|
|
209
|
-
*
|
|
72
|
+
* Valida un registro completo: formato (que se pueda escribir en las 130 posiciones)
|
|
73
|
+
* y reglas de negocio (CUIL con dígito verificador y prefijo de persona física,
|
|
74
|
+
* campos obligatorios por movimiento, rectificación 00-05, marca 0-9, fechaFin ≥ fechaInicio).
|
|
75
|
+
* Informa todos los errores juntos.
|
|
76
|
+
* @throws ArcaValidationError
|
|
210
77
|
*/
|
|
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
|
-
errors.push({
|
|
232
|
-
field: 'localidad',
|
|
233
|
-
message: 'La localidad es requerida',
|
|
234
|
-
value: dom.localidad,
|
|
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
|
-
});
|
|
78
|
+
export function validateRegistro(registro, opciones) {
|
|
79
|
+
const errores = erroresDeFormato(registro, opciones);
|
|
80
|
+
if (errores.length === 1 && errores[0].field === 'registro') {
|
|
81
|
+
throw new ArcaValidationError(errores[0].message, errores, 'registro');
|
|
82
|
+
}
|
|
83
|
+
const conErrorDeFormato = new Set(errores.map((e) => e.field));
|
|
84
|
+
if (!conErrorDeFormato.has('cuil')) {
|
|
85
|
+
collectErrors(() => validateCuilTrabajador(registro.cuil), errores);
|
|
86
|
+
}
|
|
87
|
+
const obligatorios = CAMPOS_OBLIGATORIOS[registro.movimiento];
|
|
88
|
+
if (obligatorios)
|
|
89
|
+
requerido(registro, [...obligatorios], errores);
|
|
90
|
+
enRango(registro, 'rectificacion', VALORES_RECTIFICACION, errores);
|
|
91
|
+
enRango(registro, 'marcaCovidTipoContratoCCG', VALORES_MARCA_COVID_CCG, errores);
|
|
92
|
+
if (presente(registro.fechaInicio) && presente(registro.fechaFin)) {
|
|
93
|
+
const ini = fechaComparable(registro.fechaInicio);
|
|
94
|
+
const fin = fechaComparable(registro.fechaFin);
|
|
95
|
+
if (ini && fin && fin < ini) {
|
|
96
|
+
errores.push({ field: 'fechaFin', message: `fechaFin (${fin}) es anterior a fechaInicio (${ini})`, value: registro.fechaFin });
|
|
97
|
+
}
|
|
250
98
|
}
|
|
251
|
-
if (
|
|
252
|
-
throw new ArcaValidationError(`
|
|
99
|
+
if (errores.length > 0) {
|
|
100
|
+
throw new ArcaValidationError(`Registro ${String(registro.movimiento)} inválido: ${errores.map((e) => e.message).join('; ')}`, errores, errores[0].field);
|
|
253
101
|
}
|
|
254
102
|
}
|
|
255
103
|
//# 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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"}
|