@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 ADDED
@@ -0,0 +1,109 @@
1
+ # Changelog
2
+
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - bed68e8: Paquetes solo ESM y Node >= 20.19. `arca-common`, `arca-facturacion` y
8
+ `arca-padron` dejan de publicar un build CommonJS: desde CommonJS se cargan con
9
+ `require()` (require(esm), Node >= 20.19 / 22.12). Todos los paquetes pasan a
10
+ requerir Node >= 20.19.0 (Node 18 y 20 sin soporte). El código vive ahora en el
11
+ monorepo `arca-sdks`.
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [8c02c30]
16
+ - Updated dependencies [f8bd053]
17
+ - Updated dependencies [242fb5f]
18
+ - Updated dependencies [fd438bc]
19
+ - Updated dependencies [bed68e8]
20
+ - Updated dependencies [20ecf7d]
21
+ - Updated dependencies [b86db00]
22
+ - @ramiidv/arca-common@0.5.0
23
+
24
+ ## 0.3.0 (2026-11-01)
25
+
26
+ Reescritura del serializador según el diseño de registro oficial del
27
+ [Manual de Ayuda de Simplificación Registral (ARCA, feb. 2025), pág. 24](https://www.arca.gob.ar/simplificacionregistral/ayuda/documentos/SR_Manual-de-Ayuda_20250218_definitivo.pdf).
28
+ Las versiones anteriores generaban un formato inventado que ARCA no acepta.
29
+
30
+ ### Breaking
31
+ - El archivo pasa a ser TXT de **ancho fijo de 130 posiciones** con un único tipo de registro `01` y
32
+ código de movimiento `AT`/`BT`/`MR`/`NA`/`NB`. Se eliminaron el header `00`, los registros `01`–`05`
33
+ delimitados por `|` y todo lo asociado: datos complementarios, CBU, relaciones familiares y domicilio
34
+ de explotación (`datosComplementarios()`, `cbu()`, `relacionFamiliar()`, `domicilioExplotacion()`),
35
+ que no forman parte del formato oficial.
36
+ - Se abandona el nombre "F935" (era el archivo encriptado del viejo aplicativo "Mi Simplificación –
37
+ Ingreso Masivo de Datos v2.0", ya discontinuado). Tipos nuevos: `DatosRelacionLaboral`,
38
+ `RegistroRelacionLaboral`, `ArchivoIngresoMasivo`, `ResumenIngresoMasivo`, `OpcionesSerializacion`.
39
+ Se eliminaron `F935Registro*`, `F935Archivo`, `F935Output`, `F935Resumen`, `AltaEmpleado`,
40
+ `BajaEmpleado`, `ModificacionEmpleado`, `DatosComplementarios`, `DatosCBU`, `RelacionFamiliar`,
41
+ `DomicilioExplotacion` (sin alias: la forma de los datos cambió por completo).
42
+ - `ArcaEmpleadosConfig`: se quitan `cuitEmpleador` y `razonSocial` (el archivo no los lleva); se agregan
43
+ `serializacion` y se mantiene `strict`. El constructor no requiere argumentos.
44
+ - Campos renombrados según el manual: `modalidadContratacion` → `modalidadContrato`,
45
+ `actividadEconomica` → `actividad`, `fechaBaja` → `fechaFin` (en `BT`), `remuneracion` → `retribucion`,
46
+ `puestoDesempenado` → `puesto`, `convenioColectivo` → `cct`; `motivoBaja` y `domicilioExplotacion` no
47
+ existen en el formato (el domicilio se informa con el código de `sucursal`).
48
+ - `generar()` devuelve `{ contenido, lineas, encoding, buffer, resumen }`.
49
+ - Constantes: se eliminaron todas las tablas sin fuente verificable (`ModalidadContratacion`,
50
+ `SituacionRevista`, `MotivoBaja`, `NivelEducacion`, `EstadoCivil`, `TipoRelacionFamiliar`, `Provincia`
51
+ local, `TipoServicio`, `ModalidadLiquidacion`, `TipoOperacion`, `TipoCuenta`, `Escolaridad`, sus
52
+ `*_DESCRIPCION` y `MODALIDADES_CON_FECHA_FIN`). Quedan solo los valores del manual: `CodigoMovimiento`,
53
+ `VALORES_RECTIFICACION`, `VALORES_MARCA_COVID_CCG`, `LONGITUD_REGISTRO`, `TIPO_REGISTRO`.
54
+ - Ya no se re-exportan los validadores de common (`validateCuil`, `normalizeCuil`, `formatCuil`,
55
+ `validateCBU`, `validateFecha`, `validateFechaRango`); usá `@ramiidv/arca-common` directamente.
56
+ `formatDate` (que daba `DDMMAAAA`) se reemplaza por `formatFechaSR` (`AAAA/MM/DD`), para no chocar
57
+ con el `formatDate` de common.
58
+ - Serializadores reemplazados por `serializarRegistro`, `serializarArchivo` y `codificarArchivo`.
59
+ - Dependencia `@ramiidv/arca-common` `^0.4.0`.
60
+
61
+ ### Features
62
+ - API por movimiento: `alta` (AT), `baja` (BT), `modificacion` (MR) y `novedad` (cualquier código,
63
+ incluidos `NA`/`NB`), más `altasMasivas`, `bajasMasivas`, `modificacionesMasivas` y
64
+ `novedadesMasivas`, **atómicas** (si un registro falla no se agrega ninguno; los errores llevan
65
+ el índice: `"[i].campo"`).
66
+ - Opciones de serialización configurables: fin de línea (CRLF por defecto), fin de línea final,
67
+ codificación (`latin1` por defecto, o `ascii`), transliteración de caracteres no representables y
68
+ relleno de numéricos vacíos.
69
+ - `generar().buffer` (ISO-8859-1) listo para escribir a disco; `codificarArchivo()`.
70
+ - `DISENO_REGISTRO` (tabla del manual), `CAMPOS_OBLIGATORIOS`, `validateRegistro`,
71
+ `validateCuilTrabajador` (prefijos 20/23/24/27 + dígito verificador).
72
+ - `ArcaSerializationError` con `field`, `desde`, `hasta`, `value`, `indice` y `cause`;
73
+ `ArcaEmpleadosError` acepta `{ cause }`.
74
+ - `package.json`: `sideEffects: false`, `exports.import`, `prepublishOnly` con clean + build + test.
75
+
76
+ ### Fixes
77
+ - Ningún valor se trunca en silencio: exceso de largo, `NaN`, `Infinity`, negativos, decimales en
78
+ códigos, más de 2 decimales en la retribución, tipos incorrectos, fechas inexistentes, caracteres de
79
+ control y caracteres no representables lanzan `ArcaSerializationError`.
80
+ - Fechas en formato `AAAA/MM/DD` (antes `DDMMAAAA`) y sin corrimientos por zona horaria: los `Date` se
81
+ toman en hora de Argentina y los strings `AAAA-MM-DD` se respetan literalmente.
82
+ - `strict: false` con datos inválidos daba `TypeError: Cannot read properties of undefined`; ahora da
83
+ `ArcaValidationError` / `ArcaSerializationError` explícitos.
84
+ - `registros` devolvía los objetos internos (mutables); ahora devuelve copias, y los datos se copian
85
+ al agregarlos.
86
+ - README y `llms.txt` decían `@ramiidv/arca-empleados-sdk`; el paquete es `@ramiidv/arca-empleados`.
87
+ `repository`/`bugs` apuntan a `github.com/ramiidv/arca-empleados`.
88
+
89
+ ## 0.2.0 (2026-06-03)
90
+
91
+ ### Fixes
92
+ - Dependencia `@ramiidv/arca-common` `^0.2.0` (corrige el dígito verificador de CBU); tests de CBU y
93
+ ejemplos con CBUs válidos.
94
+ - `publishConfig.access: public`; `homepage` a arca-sdk.dev.
95
+
96
+ ### Chore
97
+ - Workflows de CI (Node 18/20/22) y de release.
98
+
99
+ ## 0.1.0 (2026-03-31)
100
+
101
+ ### Features
102
+ - Initial release
103
+ - F935 file generation for employee management (Mi Simplificación)
104
+ - Alta (hiring), Baja (termination), Modificación (changes)
105
+ - Datos complementarios, CBU registration, relaciones familiares, domicilio de explotación
106
+ - Bulk operations (altasMasivas, bajasMasivas)
107
+ - Full CUIL/CBU/date validation (from @ramiidv/arca-common)
108
+ - Record-level validation for all operation types
109
+ - Complete F935 serialization with pipe-delimited format
package/README.md CHANGED
@@ -1,379 +1,171 @@
1
- # @ramiidv/arca-empleados-sdk
1
+ # @ramiidv/arca-empleados
2
2
 
3
- SDK de TypeScript para la gestion de empleados con ARCA (ex AFIP). Genera archivos F935 para el sistema "Mi Simplificacion - Ingreso Masivo de Datos v2.0".
3
+ SDK de TypeScript que genera el archivo TXT de **"Ingreso masivo de datos – Relaciones laborales"** del
4
+ servicio **Simplificación Registral** de ARCA (ex AFIP): altas, bajas y modificaciones de relaciones
5
+ laborales en registros de ancho fijo de 130 posiciones.
4
6
 
5
- ## Importante
7
+ - No hace llamadas a servicios web: ARCA no expone un web service para esto. El archivo se sube a mano
8
+ en Simplificación Registral → Relaciones laborales → Carga Masiva → Nuevo → Cargar Archivo → Enviar.
9
+ - Fuente del formato: [Manual de Ayuda de Simplificación Registral (ARCA, feb. 2025), pág. 24](https://www.arca.gob.ar/simplificacionregistral/ayuda/documentos/SR_Manual-de-Ayuda_20250218_definitivo.pdf).
6
10
 
7
- Este SDK **no realiza llamadas a servicios web ni APIs**. ARCA no expone una API publica para la gestion de empleados. En cambio, los empleadores utilizan la interfaz web de "Mi Simplificacion" o la aplicacion de escritorio "Ingreso Masivo de Datos" que procesa archivos de datos estructurados.
11
+ > **¿Y el F.935?** Las versiones 0.1/0.2 de este paquete hablaban de "archivos F935" con registros
12
+ > `00`–`05` separados por `|`. Ese formato no existe: el F.935 era el archivo encriptado que generaba
13
+ > el viejo aplicativo "Mi Simplificación – Ingreso Masivo de Datos v2.0", que ya no se usa. El formato
14
+ > vigente es el TXT de ancho fijo que describe el manual, y es el que genera la versión 0.3.0.
8
15
 
9
- Este SDK genera esos archivos de datos (formato F935) con tipado fuerte y validacion completa.
10
-
11
- ## Instalacion
16
+ ## Instalación
12
17
 
13
18
  ```bash
14
- npm install @ramiidv/arca-empleados-sdk
15
- ```
16
-
17
- ## Inicio rapido
18
-
19
- ```ts
20
- import { writeFileSync } from 'node:fs';
21
- import {
22
- ArcaEmpleados,
23
- ModalidadContratacion,
24
- Provincia,
25
- } from '@ramiidv/arca-empleados-sdk';
26
-
27
- const empleados = new ArcaEmpleados({
28
- cuitEmpleador: '30-71234567-1',
29
- razonSocial: 'Mi Empresa S.A.',
30
- });
31
-
32
- empleados.alta({
33
- cuil: '20-12345678-6',
34
- fechaInicio: new Date(2024, 2, 1),
35
- modalidadContratacion: ModalidadContratacion.TIEMPO_COMPLETO_INDETERMINADO,
36
- obraSocial: '100100',
37
- actividadEconomica: '620100',
38
- domicilioExplotacion: {
39
- calle: 'Av. Corrientes',
40
- numero: '1234',
41
- localidad: 'CABA',
42
- codigoPostal: '1043',
43
- provincia: Provincia.CAPITAL_FEDERAL,
44
- },
45
- });
46
-
47
- const resultado = empleados.generar();
48
- writeFileSync('F935.txt', resultado.contenido, 'utf-8');
49
- console.log(resultado.resumen);
50
- ```
51
-
52
- ## Tipos de registro
53
-
54
- El archivo F935 comunica 5 tipos de registro:
55
-
56
- ### 1. Relaciones Laborales (Alta / Baja / Modificacion)
57
-
58
- **Alta** - Registro de un nuevo empleado. Segun RG 5508/2024, requiere 7 campos obligatorios:
59
-
60
- ```ts
61
- empleados.alta({
62
- cuil: '20-12345678-6',
63
- fechaInicio: new Date(2024, 2, 1),
64
- modalidadContratacion: ModalidadContratacion.TIEMPO_COMPLETO_INDETERMINADO,
65
- obraSocial: '100100',
66
- actividadEconomica: '620100',
67
- trabajadorAgropecuario: false, // default: false
68
- domicilioExplotacion: { /* ... */ },
69
- fechaFin: undefined, // solo para plazo fijo, eventual, aprendizaje, pasantia
70
- });
71
- ```
72
-
73
- **Baja** - Desvinculacion de un empleado (debe informarse dentro de 5 dias habiles):
74
-
75
- ```ts
76
- empleados.baja({
77
- cuil: '20-12345678-6',
78
- fechaBaja: new Date(2024, 5, 15),
79
- motivoBaja: MotivoBaja.RENUNCIA,
80
- });
81
- ```
82
-
83
- **Modificacion** - Cambios en una relacion laboral existente:
84
-
85
- ```ts
86
- empleados.modificacion({
87
- cuil: '20-12345678-6',
88
- fechaInicio: new Date(2024, 2, 1),
89
- obraSocial: '100200', // nuevo valor
90
- });
19
+ npm install @ramiidv/arca-empleados
91
20
  ```
92
21
 
93
- ### 2. Datos Complementarios del Trabajador
94
-
95
- Datos adicionales que deben completarse antes de la primera liquidacion:
96
-
97
- ```ts
98
- empleados.datosComplementarios({
99
- cuil: '20-12345678-6',
100
- fechaInicio: new Date(2024, 2, 1),
101
- situacionRevista: SituacionRevista.ACTIVO,
102
- nivelEducacion: NivelEducacion.UNIVERSITARIO_COMPLETO,
103
- modalidadLiquidacion: ModalidadLiquidacion.MENSUAL,
104
- remuneracion: 350000,
105
- // ... mas campos opcionales
106
- });
107
- ```
22
+ Requiere Node.js 18 o superior. ESM.
108
23
 
109
- ### 3. CBU (Datos Bancarios)
24
+ ## Uso
110
25
 
111
26
  ```ts
112
- empleados.cbu({
113
- cuil: '20-12345678-6',
114
- fechaInicio: new Date(2024, 2, 1),
115
- cbu: '0110599100000054489273',
116
- tipoCuenta: TipoCuenta.CAJA_AHORRO,
117
- });
118
- ```
27
+ import { writeFileSync } from 'node:fs';
28
+ import { ArcaEmpleados } from '@ramiidv/arca-empleados';
119
29
 
120
- ### 4. Relaciones Familiares
30
+ const sr = new ArcaEmpleados();
121
31
 
122
- ```ts
123
- empleados.relacionFamiliar({
32
+ sr.alta({
124
33
  cuil: '20-12345678-6',
125
- fechaInicio: new Date(2024, 2, 1),
126
- tipoRelacion: TipoRelacionFamiliar.HIJO,
127
- nombreFamiliar: 'Juan',
128
- apellidoFamiliar: 'Perez',
129
- fechaNacimiento: new Date(2015, 5, 10),
130
- });
131
- ```
132
-
133
- ### 5. Domicilios de Explotacion
34
+ fechaInicio: '2026-11-02',
35
+ modalidadContrato: 8,
36
+ obraSocial: '126205',
37
+ sucursal: 1,
38
+ retribucion: 850000.5,
39
+ cct: '9999/99',
40
+ })
41
+ .baja({ cuil: '27-11111111-7', fechaInicio: '2024-03-01', fechaFin: '2026-10-31' })
42
+ .modificacion({ cuil: '20-34567890-6', retribucion: 1200000 });
43
+
44
+ const { buffer, contenido, lineas, resumen } = sr.generar();
45
+ writeFileSync('relaciones-laborales.txt', buffer); // ISO-8859-1 + CRLF
46
+ ```
47
+
48
+ Los códigos (modalidad de contrato, obra social, situación de revista, sucursal, actividad, puesto,
49
+ convenio, categoría, tipo de servicio, modalidad de liquidación) se obtienen en el propio servicio con
50
+ **"Ver tablas informativas de códigos"**. ARCA no publica esas tablas en un documento público, así que el
51
+ SDK no las trae: valida solo que cada código sea numérico/alfanumérico y entre en su campo.
52
+
53
+ ### API
54
+
55
+ | Método | Movimiento | Descripción |
56
+ | ------------------------------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------- |
57
+ | `alta(datos)` | `AT` | Alta de relación laboral |
58
+ | `baja(datos)` | `BT` | Baja (la fecha de baja va en `fechaFin`) |
59
+ | `modificacion(datos)` | `MR` | Modificación |
60
+ | `novedad({ movimiento, ...datos })` | `AT`/`BT`/`MR`/`NA`/`NB` | Cualquier código; única vía para `NA` y `NB` |
61
+ | `altasMasivas([...])`, `bajasMasivas([...])`, `modificacionesMasivas([...])`, `novedadesMasivas([...])` | | **Atómicas**: validan todo y, si algo falla, no agregan nada |
62
+ | `generar()` | | `{ contenido, lineas, encoding, buffer, resumen }` |
63
+ | `registros` | | Copia de los registros agregados (modificarla no afecta al builder) |
64
+ | `cantidad`, `resumen()`, `limpiar()` | | |
65
+
66
+ Cada registro se valida y se serializa **al agregarlo**: si falla, se lanza el error y no se agrega.
67
+
68
+ Funciones sueltas (uso avanzado): `serializarRegistro`, `serializarArchivo`, `codificarArchivo`,
69
+ `formatFechaSR` (fecha → `AAAA/MM/DD`; distinto del `formatDate` de common, que da `AAAAMMDD`),
70
+ `validateRegistro`, `validateCuilTrabajador`, `DISENO_REGISTRO`, `CAMPOS_OBLIGATORIOS`.
71
+
72
+ ### Configuración
134
73
 
135
74
  ```ts
136
- empleados.domicilioExplotacion({
137
- cuil: '20-12345678-6',
138
- calle: 'Av. Corrientes',
139
- numero: '1234',
140
- localidad: 'CABA',
141
- codigoPostal: '1043',
142
- provincia: Provincia.CAPITAL_FEDERAL,
75
+ new ArcaEmpleados({
76
+ strict: true, // default
77
+ serializacion: {
78
+ eol: '\r\n', // o '\n'
79
+ eolFinal: true, // fin de línea después del último registro
80
+ encoding: 'latin1', // o 'ascii'
81
+ noRepresentables: 'error', // o 'transliterar' (quita diacríticos: Ñ→N, Ú→U)
82
+ numericoVacio: 'ceros', // o 'espacios'
83
+ },
143
84
  });
144
85
  ```
145
86
 
146
- ## API
147
-
148
- ### `ArcaEmpleados`
149
-
150
- Constructor:
151
-
152
- ```ts
153
- new ArcaEmpleados(config: ArcaEmpleadosConfig)
154
- ```
155
-
156
- | Opcion | Tipo | Default | Descripcion |
157
- |--------|------|---------|-------------|
158
- | `cuitEmpleador` | `string` | (requerido) | CUIT del empleador |
159
- | `razonSocial` | `string` | - | Razon social del empleador |
160
- | `strict` | `boolean` | `true` | Valida campos al agregar registros |
161
-
162
- Metodos:
163
-
164
- | Metodo | Retorno | Descripcion |
165
- |--------|---------|-------------|
166
- | `alta(data)` | `this` | Agrega un alta |
167
- | `baja(data)` | `this` | Agrega una baja |
168
- | `modificacion(data)` | `this` | Agrega una modificacion |
169
- | `datosComplementarios(data)` | `this` | Agrega datos complementarios |
170
- | `cbu(data)` | `this` | Agrega datos de CBU |
171
- | `relacionFamiliar(data)` | `this` | Agrega relacion familiar |
172
- | `domicilioExplotacion(data)` | `this` | Agrega domicilio de explotacion |
173
- | `altasMasivas(data[])` | `this` | Agrega multiples altas |
174
- | `bajasMasivas(data[])` | `this` | Agrega multiples bajas |
175
- | `generar()` | `F935Output` | Genera el archivo |
176
- | `resumen()` | `F935Resumen` | Resumen sin generar |
177
- | `limpiar()` | `this` | Limpia registros |
178
- | `registros` | `F935Registro[]` | Registros almacenados (lectura) |
179
-
180
- ### `F935Output`
181
-
182
- ```ts
183
- interface F935Output {
184
- contenido: string; // Contenido del archivo
185
- archivo: F935Archivo; // Metadata
186
- resumen: F935Resumen; // Resumen de registros
187
- }
188
- ```
189
-
190
- ### `F935Resumen`
191
-
192
- ```ts
193
- interface F935Resumen {
194
- totalRegistros: number;
195
- altas: number;
196
- bajas: number;
197
- modificaciones: number;
198
- datosComplementarios: number;
199
- cbus: number;
200
- familiares: number;
201
- domicilios: number;
202
- }
203
- ```
204
-
205
- ## Enums y constantes
206
-
207
- ### Modalidad de Contratacion (`ModalidadContratacion`)
208
-
209
- Codigos oficiales SICOSS (tabla T03). Se muestran los mas utilizados:
210
-
211
- | Codigo | Enum | Descripcion |
212
- |--------|------|-------------|
213
- | `0` | `PROMOVIDA_REDUCCION_0` | Contrato Modalidad Promovida. Reduccion 0% |
214
- | `1` | `TIEMPO_PARCIAL_INDETERMINADO` | A tiempo parcial: Indeterminado/permanente |
215
- | `3` | `APRENDIZAJE` | De aprendizaje Ley 25.013 |
216
- | `8` | `TIEMPO_COMPLETO_INDETERMINADO` | A Tiempo completo indeterminado / Trabajo permanente |
217
- | `11` | `TEMPORADA` | Trabajo de temporada |
218
- | `12` | `EVENTUAL` | Trabajo eventual |
219
- | `21` | `TIEMPO_PARCIAL_PLAZO_FIJO` | A tiempo parcial determinado (plazo fijo) |
220
- | `22` | `TIEMPO_COMPLETO_PLAZO_FIJO` | A Tiempo completo determinado (plazo fijo) |
221
- | `24` | `CONSTRUCCION` | Personal de la Construccion Ley 22.250 |
222
- | `27` | `PASANTIA_CON_OS` | Pasantias Ley 26.427 -con obra social- |
223
- | `32` | `PERIODO_PRUEBA` | Periodo de Prueba Art. 6 Ley 25.877 |
224
- | `110` | `AGRARIO_PERMANENTE` | Trabajo permanente Ley 26.727 (agrario) |
225
- | `111` | `AGRARIO_TEMPORARIO` | Trabajo temporario Ley 26.727 (agrario) |
226
- | `112` | `AGRARIO_PERMANENTE_DISCONTINUO` | Trabajo permanente discontinuo Ley 26.727 |
227
-
228
- > Hay 35 codigos en total. Consultar el enum `ModalidadContratacion` para la lista completa.
229
-
230
- ### Motivo de Baja (`MotivoBaja`)
231
-
232
- Codigos oficiales de Simplificacion Registral. Se muestran los mas utilizados:
233
-
234
- | Codigo | Enum | Descripcion |
235
- |--------|------|-------------|
236
- | `0` | `FALLECIMIENTO` | Baja por fallecimiento |
237
- | `7` | `DESPIDO` | Baja por despido |
238
- | `21` | `RENUNCIA` | Renuncia del trabajador (Art.240 LCT) |
239
- | `22` | `MUTUO_ACUERDO` | Voluntad concurrente de las partes (Art.241 LCT) |
240
- | `26` | `DESPIDO_SIN_CAUSA` | Despido sin causa (Art.245 LCT) |
241
- | `30` | `VENCIMIENTO_PLAZO` | Vencimiento de plazo (Art.250 LCT) |
242
- | `33` | `JUBILACION` | Jubilacion (Art.252 LCT) |
243
- | `34` | `INCAPACIDAD` | Incapacidad del trabajador (Art.254 LCT) |
244
- | `38` | `FIN_APRENDIZAJE_PASANTIA` | Fin contrato de aprendizaje y pasantias |
245
- | `99` | `VENCIMIENTO_PLAZO_FIJO` | Vencimiento contrato a plazo fijo o determinado |
246
-
247
- > Hay 34 codigos en total. Consultar el enum `MotivoBaja` para la lista completa.
248
-
249
- ### Situacion de Revista (`SituacionRevista`)
250
-
251
- Codigos oficiales de Simplificacion Registral. Se muestran los mas utilizados:
252
-
253
- | Codigo | Enum | Descripcion |
254
- |--------|------|-------------|
255
- | `1` | `ACTIVO` | Activo |
256
- | `5` | `LICENCIA_MATERNIDAD` | Licencia por maternidad |
257
- | `6` | `SUSPENSION_OTRAS_CAUSALES` | Suspensiones otras causales |
258
- | `9` | `SUSPENSION_223_BIS` | Suspendido Art. 223 Bis |
259
- | `13` | `LICENCIA_SIN_GOCE` | Licencia sin goce de haberes |
260
- | `14` | `RESERVA_PUESTO` | Reserva de puesto |
261
- | `32` | `LICENCIA_PATERNIDAD` | Licencia por paternidad |
262
- | `44` | `CONSERVACION_EMPLEO` | Conservacion del empleo |
263
-
264
- > Hay 23 codigos en total. Consultar el enum `SituacionRevista` para la lista completa.
265
-
266
- ### Provincias (`Provincia`)
267
-
268
- Codigos 0-23: CABA (0), Buenos Aires (1), Catamarca (2), Cordoba (3), Corrientes (4), Entre Rios (5), Jujuy (6), Mendoza (7), La Rioja (8), Salta (9), San Juan (10), San Luis (11), Santa Fe (12), Santiago del Estero (13), Tucuman (14), Chaco (15), Chubut (16), Formosa (17), Misiones (18), Neuquen (19), La Pampa (20), Rio Negro (21), Santa Cruz (22), Tierra del Fuego (23).
269
-
270
- ### Otros enums
271
-
272
- - `NivelEducacion` (0-10): Sin instruccion hasta Posgrado completo
273
- - `EstadoCivil` (1-6): Soltero, Casado, Divorciado, Viudo, Separado, Union convivencial
274
- - `TipoRelacionFamiliar` (1-7): Conyuge, Hijo, Hijo discapacitado, Hijastro, Menor en guarda, Prenatal, Conviviente
275
- - `TipoServicio` (1-2): Con/sin aporte PAMI
276
- - `ModalidadLiquidacion` (1-8): Mensual, Quincenal, Semanal, Diaria, Por hora, Por pieza, A comision, Jornal
277
- - `TipoCuenta` (1-2): Caja de ahorro, Cuenta corriente
278
- - `Escolaridad` (0-5): No escolar hasta Universitaria
279
-
280
- ### Mapas de descripciones
281
-
282
- Cada enum tiene un mapa de descripciones exportado:
283
-
284
- ```ts
285
- import { MOTIVO_BAJA_DESCRIPCION, MotivoBaja } from '@ramiidv/arca-empleados-sdk';
286
-
287
- console.log(MOTIVO_BAJA_DESCRIPCION[MotivoBaja.RENUNCIA]); // "Renuncia del trabajador (Art.240 LCT)"
288
- ```
289
-
290
- Mapas disponibles: `MODALIDAD_CONTRATACION_DESCRIPCION`, `MOTIVO_BAJA_DESCRIPCION`, `SITUACION_REVISTA_DESCRIPCION`, `NIVEL_EDUCACION_DESCRIPCION`, `ESTADO_CIVIL_DESCRIPCION`, `TIPO_RELACION_FAMILIAR_DESCRIPCION`, `PROVINCIA_DESCRIPCION`, `MODALIDAD_LIQUIDACION_DESCRIPCION`, `TIPO_CUENTA_DESCRIPCION`, `ESCOLARIDAD_DESCRIPCION`, `TIPO_SERVICIO_DESCRIPCION`.
291
-
292
- ## Validacion
293
-
294
- El SDK valida automaticamente los datos cuando `strict: true` (default):
295
-
296
- ### CUIL
297
-
298
- - Formato: 11 digitos (acepta `XX-XXXXXXXX-X` o `XXXXXXXXXXX`)
299
- - Prefijos validos: 20, 23, 24, 27, 30, 33, 34
300
- - Digito verificador: algoritmo de modulo 11 con pesos [5,4,3,2,7,6,5,4,3,2]
301
-
302
- ### CBU
303
-
304
- - Formato: 22 digitos
305
- - Bloque 1 (8 digitos): banco + sucursal + digito verificador
306
- - Bloque 2 (14 digitos): cuenta + digito verificador
307
- - Ambos digitos verificadores se validan con algoritmo de pesos alternados
308
-
309
- ### Fechas
310
-
311
- - Deben ser objetos `Date` validos
312
- - `fechaFin` debe ser posterior a `fechaInicio`
313
- - `fechaFin` es obligatoria para contratos a plazo fijo, eventuales, aprendizaje y pasantia
314
-
315
- ### Domicilios
316
-
317
- - Calle, numero, localidad y codigo postal son requeridos
318
- - Provincia debe ser un valor entre 0 y 23
319
-
320
- ## Manejo de errores
321
-
322
- ```ts
323
- import {
324
- ArcaEmpleadosError, // Base (catch-all)
325
- ArcaValidationError, // Datos invalidos
326
- ArcaSerializationError, // Fallo al serializar
327
- } from '@ramiidv/arca-empleados-sdk';
328
-
329
- try {
330
- empleados.alta({ /* ... */ });
331
- } catch (error) {
332
- if (error instanceof ArcaValidationError) {
333
- console.error('Campo:', error.field);
334
- for (const detalle of error.errors) {
335
- console.error(` ${detalle.field}: ${detalle.message}`);
336
- }
337
- }
338
- }
339
- ```
340
-
341
- ## Utilidades de CUIL/CBU
342
-
343
- ```ts
344
- import {
345
- validateCuil, // Valida y retorna CUIL normalizado (11 digitos)
346
- validateCBU, // Valida y retorna CBU (22 digitos)
347
- normalizeCuil, // Quita guiones: "20-12345678-6" -> "20123456786"
348
- formatCuil, // Agrega guiones: "20123456789" -> "20-12345678-6"
349
- } from '@ramiidv/arca-empleados-sdk';
350
- ```
351
-
352
- ## Formato del archivo
353
-
354
- El archivo generado usa formato delimitado por pipes (`|`). Cada linea representa un registro:
355
-
356
- ```text
357
- 00|CUIT_EMPLEADOR|RAZON_SOCIAL|FECHA_GENERACION|CANTIDAD_REGISTROS|
358
- 01|CUIT_EMPLEADOR|TIPO_OP|CUIL|...campos...|
359
- 02|CUIT_EMPLEADOR|CUIL|...campos...|
360
- 03|CUIT_EMPLEADOR|CUIL|...campos...|
361
- 04|CUIT_EMPLEADOR|CUIL|...campos...|
362
- 05|CUIT_EMPLEADOR|CUIL|...campos...|
363
- ```
364
-
365
- - `00`: Header
366
- - `01`: Relacion laboral (alta=0, baja=1, modificacion=2)
367
- - `02`: Datos complementarios
368
- - `03`: CBU
369
- - `04`: Relacion familiar
370
- - `05`: Domicilio de explotacion
371
-
372
- Las fechas se formatean como DDMMYYYY. Los booleanos como 'S'/'N'.
373
-
374
- ## Nota sobre codigos SICOSS
375
-
376
- Los codigos de modalidad de contratacion, situacion de revista, motivos de baja y otros estan basados en las tablas SICOSS oficiales. Es recomendable verificar los valores contra las tablas vigentes publicadas por ARCA, ya que pueden actualizarse periodicamente.
87
+ - `strict: true`: formato + reglas de negocio (CUIL con prefijo de persona física 20/23/24/27 y dígito
88
+ verificador, campos obligatorios por movimiento, rectificación `00`–`05`, marca `0`–`9`,
89
+ `fechaFin ≥ fechaInicio`). Todos los errores se informan juntos en `ArcaValidationError.details`.
90
+ - `strict: false`: solo formato (que el registro entre en las 130 posiciones). Datos que no son un
91
+ objeto o un movimiento inválido dan `ArcaValidationError`; un valor que no entra en su campo da
92
+ `ArcaSerializationError` con `field`, `desde`, `hasta` y `value`.
93
+
94
+ ## Diseño de registro (oficial)
95
+
96
+ Un único tipo de registro, `01`, de 130 posiciones. Tabla transcripta del manual (pág. 24):
97
+
98
+ | Pos. | Campo (propiedad) | Tipo | Long. | Formato |
99
+ | ------- | --------------------------------------------------------------------------------- | ---- | ----- | ---------------------------- |
100
+ | 1-2 | Tipo de registro | N | 2 | `01` |
101
+ | 3-4 | Código de movimiento (`movimiento`) | A | 2 | `AT`, `BT`, `MR`, `NA`, `NB` |
102
+ | 5-15 | CUIL del empleado (`cuil`) | N | 11 | |
103
+ | 16 | Marca de trabajador agropecuario (`trabajadorAgropecuario`) | A | 1 | |
104
+ | 17-19 | Modalidad de contrato (`modalidadContrato`) | N | 3 | |
105
+ | 20-29 | Fecha de inicio de rel. laboral (`fechaInicio`) | A | 10 | `AAAA/MM/DD` |
106
+ | 30-39 | Fecha de fin de rel. laboral (`fechaFin`) | A | 10 | `AAAA/MM/DD` |
107
+ | 40-45 | Código obra social (`obraSocial`) | N | 6 | |
108
+ | 46-47 | Situación de revista (`situacionRevista`) | N | 2 | |
109
+ | 48-57 | Fecha recepción telegrama de renuncia (`fechaTelegramaRenuncia`) | A | 10 | `AAAA/MM/DD` |
110
+ | 58-72 | Retribución pactada (`retribucion`) | N | 15 | |
111
+ | 73 | Modalidad de liquidación (`modalidadLiquidacion`) | N | 1 | |
112
+ | 74-78 | Sucursal – domicilio de desempeño (`sucursal`) | N | 5 | |
113
+ | 79-84 | Actividad en el domicilio de desempeño (`actividad`) | N | 6 | |
114
+ | 85-88 | Puesto desempeñado (`puesto`) | A | 4 | |
115
+ | 89-90 | Rectificación (`rectificacion`) | N | 2 | `00`–`05` |
116
+ | 91-100 | Convenio colectivo de trabajo (`cct`) | A | 10 | |
117
+ | 101-106 | Categoría profesional (`categoriaProfesional`) | N | 6 | |
118
+ | 107-109 | Tipo de servicio (`tipoServicio`) | N | 3 | |
119
+ | 110-119 | Fecha de suspensión servicios temporarios (`fechaSuspensionServiciosTemporarios`) | A | 10 | `AAAA/MM/DD` |
120
+ | 120-129 | Número formulario agropecuario (`numeroFormularioAgropecuario`) | N | 10 | |
121
+ | 130 | Marca licencia COVID / tipo de contrato CCG (`marcaCovidTipoContratoCCG`) | N | 1 | `0`–`9` |
122
+
123
+ ### Qué es oficial y qué es convención
124
+
125
+ **Oficial (manual):** las posiciones, largos y tipos de la tabla; el formato `AAAA/MM/DD` de las fechas;
126
+ los códigos `AT,BT,MR,NA,NB`; rectificación `00`–`05`; la marca de la posición 130 (`0`–`9`, default
127
+ `0`); que la retribución se informa "con indicación de centavos"; que el CCT `9999/99` es "excluido de
128
+ convenio"; los datos mínimos del alta (RG 5508/2024): CUIL, domicilio de desempeño, fecha de inicio,
129
+ modalidad de contratación, obra social y fecha de fin si el contrato es a plazo fijo.
130
+
131
+ **Convención no documentada por ARCA** (la habitual en los diseños de registro de ARCA; configurable
132
+ donde se indica):
133
+
134
+ | Tema | Lo que hace el SDK | Configurable |
135
+ | -------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
136
+ | Numéricos | Ceros a la izquierda | — |
137
+ | Numérico no informado | Ceros (salvo rectificación y marca 130, siempre `0`) | `numericoVacio: 'espacios'` |
138
+ | Alfanuméricos | Espacios a la derecha; sin cambiar mayúsculas | — |
139
+ | Fecha no informada | 10 espacios | — |
140
+ | Retribución | 2 decimales implícitos, sin separador: `1500.5` → `000000000150050`. Más de 2 decimales es error (no se redondea) | — |
141
+ | Codificación | ISO-8859-1 (`Buffer` en latin1, 1 byte por caracter) | `encoding: 'ascii'` |
142
+ | Caracteres no representables | Error | `noRepresentables: 'transliterar'` |
143
+ | Fin de línea | CRLF, también después del último registro | `eol`, `eolFinal` |
144
+ | Fechas `Date` | Se toma la fecha calendario de Argentina (`America/Argentina/Buenos_Aires`) | Pasá un string `AAAA-MM-DD` para fijarla literal |
145
+ | Marca de trabajador agropecuario | Se escribe el caracter que pases (el manual no dice cuál) | — |
146
+
147
+ **No verificado / no documentado:**
148
+
149
+ - El significado de `NA` y `NB`. El manual los lista sin describirlos (`AT`, `BT` y `MR` = alta, baja y
150
+ modificación coinciden con la RG 3399/2012). Se pueden usar con `novedad()`; el SDK solo exige el CUIL.
151
+ - El significado de cada valor de "Rectificación" y de la marca de la posición 130.
152
+ - Qué campos exige ARCA para `BT`, `MR`, `NA` y `NB`. El SDK exige: `AT` → `cuil`, `fechaInicio`,
153
+ `modalidadContrato`, `obraSocial`, `sucursal`; `BT` → `cuil`, `fechaFin`; el resto → `cuil`
154
+ (`CAMPOS_OBLIGATORIOS`). La fecha de fin obligatoria para contratos a plazo fijo no se puede chequear
155
+ sin la tabla de modalidades. El servicio de ARCA hace su propia validación al importar el archivo y
156
+ muestra los rechazos en el listado de novedades.
157
+
158
+ Nada se trunca en silencio: un valor que no entra en su campo, `NaN`, un número negativo o con decimales
159
+ en un campo de código, un tipo incorrecto, una fecha inexistente, un salto de línea o un caracter no
160
+ representable lanzan `ArcaSerializationError`.
161
+
162
+ ## Errores
163
+
164
+ | Clase | Cuándo |
165
+ | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
166
+ | `ArcaValidationError` (de common) | Reglas de negocio, datos que no son un objeto, movimiento inválido, `generar()` sin registros. `details[]` por campo; en las operaciones masivas el campo es `"[i].campo"` y `cause` es el error original (o un `AggregateError` con uno por registro). |
167
+ | `ArcaSerializationError` | Un valor no se puede escribir en el formato. `field`, `desde`, `hasta`, `value`, `indice` (en `serializarArchivo`), `cause`. |
168
+ | `ArcaEmpleadosError` | Base de los errores propios (acepta `{ cause }`). |
377
169
 
378
170
  ## Licencia
379
171