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).
| 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 (
./mvnwen Linux/Mac,mvnw.cmden Windows)
# Compilar, ejecutar tests y generar el JAR ejecutable
./mvnw package
# Solo compilar sin tests
./mvnw package -DskipTests
# Ejecutar solo los tests
./mvnw testEl JAR se genera en target/sepe-2.0.0.jar.
java -jar target/sepe-2.0.0.jar [OPCIONES] [EXCEL] [XML]
| Argumento | Descripción | Por defecto |
|---|---|---|
EXCEL |
Fichero Excel de entrada (.xlsx) |
datos.xlsx |
XML |
Fichero XML de salida | datos.xml |
| 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 | — |
# 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.xmlEl fichero Excel debe tener exactamente 3 hojas en el siguiente orden:
| 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
YYYYMMpara envíos mensuales oYYYY99para envíos anuales
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).
| 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 |
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.
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-
Envíos mensuales:
AÑO_MES_ENVIO=YYYYMM(ej.202401para 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.202499para 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
-
Bug de género (Sexo.java:112): En versiones anteriores, "Mujer" se mapeaba incorrectamente a
1en lugar de2. Corregido: ahoraSexo.MUJERretorna correctamente"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.
-
Métodos deprecados de Apache POI: Se eliminaron llamadas a
setCellType()(deprecado en POI 4.x, eliminado en POI 5.x). Corregido: se usagetCellType()con switch statement compatible con Java 8. -
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.
| 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.
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
Ver CHANGELOG.md para el historial de cambios.
Proyecto de código abierto. Ver licencia en el repositorio.