Skip to content
elyal2Public

About

Sistema Nacional de Empleo Agencias de Colocación Espacio telemático común

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

SEPE XML Generator

Herramienta de línea de comandos que convierte un fichero Excel (.xlsx) en el fichero XML ENPI v1.3 requerido por el SEPE para el envío mensual y anual de datos de actividad de las agencias de colocación.

Obligación regulatoria: Real Decreto 1796/2010, de 30 de diciembre, por el que se regulan las Agencias de Colocación. Las agencias deben remitir mensualmente sus datos de actividad al Sistema de Información de los Servicios Públicos de Empleo (SISPE) a través del Espacio Telemático Común (ETC).


Requisitos

Componente Versión mínima Notas
Java Runtime 8 El JAR ejecutable requiere Java 8+ (class version 52)
Java (JDK) para compilar 8+ Cualquier JDK 8 o superior sirve para compilar
Maven 3.9 (o usar ./mvnw incluido) No se requiere instalación global

Notas de compatibilidad:

  • El proyecto está compilado para Java 8 (class version 52) para máxima compatibilidad
  • Usa Apache POI 4.1.2 (última versión compatible con Java 8; POI 5.x requiere Java 11+)
  • El JAR generado (target/sepe-2.0.0.jar) puede ejecutarse en cualquier Java 8 o superior
  • No se requiere instalar Maven globalmente; el proyecto incluye el Maven Wrapper (./mvnw en Linux/Mac, mvnw.cmd en Windows)

Compilar y empaquetar

# Compilar, ejecutar tests y generar el JAR ejecutable
./mvnw package

# Solo compilar sin tests
./mvnw package -DskipTests

# Ejecutar solo los tests
./mvnw test

El JAR se genera en target/sepe-2.0.0.jar.


Uso

java -jar target/sepe-2.0.0.jar [OPCIONES] [EXCEL] [XML]

Argumentos posicionales

Argumento Descripción Por defecto
EXCEL Fichero Excel de entrada (.xlsx) datos.xlsx
XML Fichero XML de salida datos.xml

Opciones

Opción Descripción Por defecto
-e, --encoding Codificación del XML de salida: ISO-8859-1 o windows-1252 windows-1252
-x, --xsd Ruta al fichero XSD para validar el XML generado XML_ENPI_v1_3.xsd
-v, --verbose Muestra información detallada de cada fila procesada desactivado
-h, --help Muestra la ayuda y termina —
--version Muestra la versión y termina —

Ejemplos

# Uso básico: carga datos.xlsx y genera datos.xml
java -jar sepe-2.0.0.jar

# Especificar ficheros de entrada y salida
java -jar sepe-2.0.0.jar enero_2024.xlsx envio_202401.xml

# Modo verboso para depuración
java -jar sepe-2.0.0.jar -v enero_2024.xlsx envio_202401.xml

# Usar codificación ISO-8859-1 en lugar de windows-1252
java -jar sepe-2.0.0.jar --encoding ISO-8859-1 datos.xlsx salida.xml

# Usar un XSD personalizado
java -jar sepe-2.0.0.jar --xsd /ruta/al/XSD_custom.xsd datos.xlsx salida.xml

Estructura del fichero Excel

El fichero Excel debe tener exactamente 3 hojas en el siguiente orden:

Hoja 1 – CABECERA

Columna A Columna B
CODIGO_AGENCIA AÑO_MES_ENVIO
9900000001 202401
  • CODIGO_AGENCIA: 10 dígitos, patrón (0x|1x|99)XXXXXXXX
  • AÑO_MES_ENVIO: formato YYYYMM para envíos mensuales o YYYY99 para envíos anuales

Hoja 2 – ACCIONES

Una fila por trabajador (fila 1 = cabecera, ignorada). Columnas en orden:

Col Campo Obligatorio Formato/Valores
A ID_TRABAJADOR Sí NIF/NIE, 9 caracteres
B NOMBRE_TRABAJADOR Sí Texto, máx. 15 caracteres
C APELLIDO1_TRABAJADOR Sí Texto, máx. 20 caracteres
D APELLIDO2_TRABAJADOR No Texto, máx. 20 caracteres
E FECHA_NACIMIENTO Sí Fecha Excel o texto YYYYMMDD
F SEXO_TRABAJADOR Sí 1/Varón o 2/Mujer
G NIVEL_FORMATIVO Sí 00 Sin estudios, 10 Primarios, 20 Secundarios, 30 Postsecundarios
H DISCAPACIDAD Sí S/Si o N/No
I INMIGRANTE Sí S/Si o N/No
J COLOCACION No S/Si o N/No (default N)
K FECHA_COLOCACION Si J=S Fecha Excel o texto YYYYMMDD
L TIPO_CONTRATO Si J=S 001 Indefinido completo, 003 Indefinido parcial, 005 Fijo Discontinuo, 401 Determinado completo, 501 Determinado parcial
M CIF_NIF_EMPRESA Si J=S CIF/NIF, 9 caracteres
N RAZON_SOCIAL_EMPRESA Si J=S Texto, máx. 55 caracteres

En envíos anuales (mes = 99), la hoja ACCIONES debe estar vacía (solo cabecera).

Hoja 3 – AGREGADOS

Col Campo Descripción
A TOTAL_PERSONAS Personas atendidas en el mes
B TOTAL_NUEVAS_REGISTRADAS Nuevas personas registradas
C TOTAL_PERSONAS_PERCEPTORES Perceptores de prestaciones por desempleo
D TOTAL_PERSONAS_INSERCION Colectivos con dificultades de inserción
E TOTAL_OFERTAS Ofertas captadas
F TOTAL_OFERTAS_ENVIADAS Personas enviadas a ofertas
G TOTAL_OFERTAS_CUBIERTAS Ofertas cubiertas
H TOTAL_PUESTOS Puestos captados
I TOTAL_PUESTOS_CUBIERTOS Puestos cubiertos
J TOTAL_CONTRATOS Contratos suscritos
K TOTAL_CONTRATOS_INDEFINIDOS Contratos indefinidos
L TOTAL_PERSONAS_COLOCADAS Personas colocadas

Codificación

El SEPE acepta dos codificaciones para los ficheros XML:

Codificación Descripción Cuándo usar
windows-1252 Windows Western European (por defecto) Recomendado; es la codificación de los ficheros de ejemplo oficiales del SEPE
ISO-8859-1 Latin-1 Si el sistema receptor lo requiere explícitamente

Ambas codificaciones son compatibles con los caracteres del español (acentos, ñ, ç).

Nota técnica: Los ficheros XML de ejemplo oficiales proporcionados por el SEPE (XML_EJEMPLO.xml, XML_EJEMPLO_AGREGADA_ANUAL.xml) están codificados en windows-1252, por lo que esta codificación se usa por defecto para garantizar compatibilidad.


Validación XSD

El XML generado se valida automáticamente contra el esquema XSD v1.3 (XML_ENPI_v1_3.xsd, incluido en la raíz del proyecto). Si la validación falla, el programa termina con código de salida 1 y muestra el error.

Cambios respecto a XSD v1.1:

  • Se añade el tipo de contrato 005 (Fijo Discontinuo) requerido por la legislación actual
  • El XSD v1.3 es la versión oficial vigente según la documentación técnica del SEPE

Para usar un XSD diferente (p.ej. una versión futura):

java -jar sepe-2.0.0.jar --xsd /ruta/a/nuevo_schema.xsd

Notas técnicas

Envíos anuales vs. mensuales

  • Envíos mensuales: AÑO_MES_ENVIO = YYYYMM (ej. 202401 para enero 2024)

    • La hoja ACCIONES debe contener todas las personas atendidas en el mes
    • La hoja AGREGADOS contiene los totales mensuales
  • Envíos anuales: AÑO_MES_ENVIO = YYYY99 (ej. 202499 para el año 2024)

    • La hoja ACCIONES debe estar vacía (solo la fila de cabecera)
    • La hoja AGREGADOS contiene los totales anuales acumulados
    • El XML generado tendrá <ACCIONES_REALIZADAS></ACCIONES_REALIZADAS> vacío

Bugs críticos corregidos en v2.0.0

  1. Bug de género (Sexo.java:112): En versiones anteriores, "Mujer" se mapeaba incorrectamente a 1 en lugar de 2. Corregido: ahora Sexo.MUJER retorna correctamente "2".

  2. Bug de normalización de TipoContrato: El código anterior normalizaba "1" a "001" y luego lo sobrescribía de vuelta a "1". Corregido: ahora se usa un enum type-safe que retorna el código correcto directamente.

  3. Métodos deprecados de Apache POI: Se eliminaron llamadas a setCellType() (deprecado en POI 4.x, eliminado en POI 5.x). Corregido: se usa getCellType() con switch statement compatible con Java 8.

  4. XSD obsoleto: El proyecto original usaba XSD v1.1 que no incluía el tipo de contrato 005 (Fijo Discontinuo). Actualizado: ahora se usa XSD v1.3 oficial del SEPE.

Dependencias principales

Librería Versión Propósito
Apache POI 4.1.2 Lectura de ficheros Excel .xlsx (última versión compatible con Java 8)
Picocli 4.7.6 Framework CLI moderno para parsing de argumentos
Log4j 2.23.1 Sistema de logging (actualizado por seguridad)
JUnit 5.10.2 Framework de testing

Nota: Apache POI 5.x requiere Java 11+, por lo que se mantiene POI 4.1.2 para compatibilidad con Java 8.


Estructura del proyecto

sepe/
├── src/
│   ├── main/java/com/fcoalberto/
│   │   ├── Main.java                  # CLI principal (picocli)
│   │   ├── EnvioENPI.java             # Cabecera del envío
│   │   ├── Accion.java                # Datos de un trabajador
│   │   ├── AccionesRealizadas.java    # Lista de acciones (lectura Excel)
│   │   ├── DatosAgregados.java        # Contadores mensuales/anuales
│   │   ├── model/
│   │   │   ├── Sexo.java              # Enum: 1=Varón, 2=Mujer
│   │   │   ├── NivelFormativo.java    # Enum: 00/10/20/30
│   │   │   ├── TipoContrato.java      # Enum: 001/003/005/401/501
│   │   │   └── BooleanSN.java         # Enum: S/N
│   │   └── exception/
│   │       ├── SepeException.java
│   │       ├── InvalidExcelFormatException.java
│   │       ├── DataValidationException.java
│   │       └── XmlGenerationException.java
│   └── test/java/com/fcoalberto/
│       ├── AccionTest.java            # Tests unitarios de Accion
│       ├── EnvioENPITest.java         # Tests unitarios de EnvioENPI
│       ├── DatosAgregadosTest.java    # Tests unitarios de DatosAgregados
│       ├── EjemploXmlIntegrationTest.java  # Tests con datos del XML de ejemplo
│       └── RegressionTest.java        # Tests de regresión de bugs corregidos
├── _docs/
│   ├── XML_EJEMPLO.xml                # Ejemplo XML mensual oficial
│   ├── XML_EJEMPLO_AGREGADA_ANUAL.xml # Ejemplo XML anual oficial
│   ├── XML_ENPI_v1.3.xsd              # Esquema XSD v1.3 (fuente)
│   └── XML_ENPI_v1_1.pdf              # Documentación técnica SEPE
├── XML_ENPI_v1_3.xsd                  # XSD v1.3 en uso (copia para runtime)
├── XML_ENPI_v1_1.xsd                  # XSD v1.1 (referencia histórica)
├── pom.xml                            # Maven build (Java 8, POI 4.1.2, Picocli 4.7.6)
├── mvnw / mvnw.cmd                    # Maven Wrapper
├── CHANGELOG.md
└── README.md

Changelog

Ver CHANGELOG.md para el historial de cambios.


Licencia

Proyecto de código abierto. Ver licencia en el repositorio.

About

Sistema Nacional de Empleo Agencias de Colocación Espacio telemático común

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages