Historia de Usuario: Módulo de Recepción e Indexación de Archivos (Apache Camel)
Versión: 1.0
Fecha: 2025-06-03
Autor: Arquitecto de Tecnologías
🎯 Historia de Usuario
Como Sistema de Integración EDI
Quiero contar con un módulo de recepción e indexación basado en Apache Camel
Para que pueda procesar archivos EDI desde múltiples fuentes (SFTP, SOAP), registrar sus metadatos esenciales y moverlos a una ubicación de procesamiento posterior, manteniendo trazabilidad completa.
✅ Criterios de Aceptación
- El proceso de Apache Camel debe monitorear continuamente la carpeta SFTP
/incomingpara nuevos archivos. - El sistema debe exponer un endpoint de servicio web SOAP para recibir archivos EDI. Los archivos recibidos vía SOAP se depositarán en la carpeta SFTP
/incoming. - El módulo debe ser desarrollado usando Apache Camel y desplegado como un componente (microservicio o parte de una aplicación Spring Boot) dentro del ecosistema EDI.
- Por cada archivo detectado/recibido, se deben extraer y guardar en la tabla
processed_filesde PostgreSQL los siguientes metadatos:file_name: Nombre original del archivo.received_at: Timestamp de recepción.source_id: FK acat_file_sources(identificando si es 'SFTP' o 'SOAP').sftp_path_incoming: Ruta SFTP original (si aplica).file_hash: Checksum del archivo (ej. SHA-256) para validación de integridad (opcional).metadata_registration_status_id: Estado del registro (ej. 'SUCCESS', 'ERROR').metadata_registration_error: Mensaje de error si falla el registro.parsing_status_id: Inicializado a estado 'PENDING'.overall_status_id: Inicializado a estado 'RECEIVED'.
- Si el registro de metadatos es exitoso, el archivo debe moverse de
/incominga/outcoming. - En caso de error durante el registro o movimiento, el archivo debe moverse a
/error_camely los estados enprocessed_filesdeben reflejar el fallo. - El servicio debe ser idempotente (evitar reprocesamiento de archivos con el mismo nombre y timestamp).
- Toda la información debe persistirse en PostgreSQL.
- El componente debe exponer métricas Prometheus (vía Spring Boot Actuator).
- Se debe incluir trazabilidad mediante logs con IDs de correlación (ExchangeID, breadcrumbId).
- Deben ser configurables externamente: credenciales y rutas SFTP, endpoint SOAP, parámetros de polling.
- El origen del archivo (
source_id) debe registrarse correctamente (SFTP o SOAP).
🧪 Definition of Done (DoD)
- Rutas Apache Camel implementadas para SFTP y SOAP.
- Archivos de
/incoming(directos o vía SOAP) procesados y registrados enprocessed_files. - Archivos exitosamente registrados se mueven a
/outcoming. - Archivos fallidos se mueven a
/error_camely se registra el error. - Idempotencia implementada y validada.
- Métricas disponibles en
/actuator/prometheus. - El módulo no falla si un archivo individual genera error.
- Configuración externalizada.
- Logs con niveles INFO, ERROR, DEBUG y trazabilidad implementados.
- Documentación de operación y monitoreo incluida.
📦 Consideraciones Técnicas
- Componentes Camel a usar:
sftp,sqlojpa,cxfospring-ws,log,bean,direct/seda. - DSL: Java o Kotlin.
- Usar
idempotentRepositorybasado en base de datos (clave:file_name+received_at). - Implementar transaccionalidad en rutas que combinan base de datos y movimiento de archivos.
🛠️ Consideraciones para Ambientes Productivos
🔐 Seguridad
- Validar extensiones y tamaño de archivo antes de procesar.
- Asegurar credenciales SFTP y certificados SOAP con Spring Cloud Config, Vault u otro sistema.
- Deshabilitar endpoints no esenciales (JMX si no se usa).
- Verificar dependencias con OWASP Dependency-Check.
🧠 Eficiencia e Idempotencia
- Ajustar
maxMessagesPerPollydelaysegún el volumen esperado. - Considerar rutas asíncronas (
seda,disruptor) para alto volumen. - Usar base de datos como
idempotentRepositorypara consistencia en clústeres.
🧪 Observabilidad y Logging
- Métricas Prometheus relevantes:
camel.route.exchanges.succeededcamel.route.exchanges.failedcamel.route.processing.time.mean
- Logs con
ExchangeIDybreadcrumbIdpara trazabilidad completa.