← Volver al índice | Arquitectura IA | Modelo de Datos | Bancos de Datos Animales
Gobernanza de Datasets e Innovación IA
Tipo: Investigación — Propuesta Técnica
Audiencia: Equipo de desarrollo, dirección técnica, responsables de departamento
Fecha: 20 de marzo de 2026
Relacionado con: Arquitectura IA | Análisis LLM Departamental | Modelo de Datos | Bancos de Datos Animales
1. Revisión de la Innovación IA — Estado Actualizado
1.1 Stack IA Actualizado (Post-Investigación)
La investigación departamental ha producido una migración significativa del stack genérico inicial a un stack especializado por departamento:
| Capa |
Stack Inicial (doc original) |
Stack Propuesto (actual) |
Mejora |
| VLM General |
(genérico) |
Qwen2.5-VL 7B |
Stack departamental especializado |
| VLM Premium |
— |
InternVL2.5 78B (servidor) |
Nivel GPT-4o |
| Texto / Oceánico |
Llama 3.1 8B |
OceanGPT + Llama 3.1 |
Conocimiento oceánico nativo |
| Detección objetos |
— |
YOLOv11 fine-tuned |
Tiempo real en vídeo |
| Segmentación |
— |
U-Net + Mask R-CNN |
Otolitos y patologías |
| Embeddings |
CLIP ViT-L/14 |
CLIP ViT-L/14 fine-tuned |
Especializado fauna marina |
| Edge AI |
TFLite genérico |
YOLOv11 TFLite |
Detección de especies on-device |
| Foto-ID |
— |
Happywhale / MYDAS |
Cetáceos y tortugas |
| Geoespacial |
— |
MariNeXt |
Contaminación satelital |
[!IMPORTANT]
El stack ha pasado de 4 modelos genéricos a 9+ modelos especializados organizados por departamento. Esto es el diferenciador clave de la plataforma.
1.2 Innovaciones Clave
- CAG+RAG Estratificado: Arquitectura híbrida única que combina caché de atención precalculada (latencia <500ms) con RAG dinámico para datos frescos
- Pipeline multi-modelo por departamento: Cada departamento tiene su propio stack de IA optimizado (ej. Pesquerías: YOLOv11 + U-Net + Qwen2.5-VL)
- Fine-tuning con datos propietarios del IEO: Otolitos ICES, campañas ECOMED, colecciones históricas desde 1907
- Soberanía total (ENS): Todo ejecuta localmente via Ollama — ningún dato sale de la infraestructura CSIC
2. Modelo de Datasets — Fuentes, Tipos y Carga Incremental
2.1 Tipología de Fuentes de Datos por Departamento
Cada departamento del COM genera datos en múltiples formatos y desde múltiples fuentes. Esta es la realidad que el sistema debe soportar:
| Departamento |
Fuentes principales |
Formatos típicos |
Volumen estimado |
| Pesquerías |
SIRENO (Oracle), SharePoint, GSheets de campaña, fotografías de campo |
.xlsx, .csv, .jpg, .tiff, Oracle dump |
~500 GB/año |
| Medio Marino |
Sensores CTD, estaciones de muestreo, laboratorio de plancton |
.cnv, .csv, .xlsx, GSheets, imágenes microscopía |
~200 GB/año |
| Acuicultura |
IoT tanques (temp, O₂, pH), registros de alimentación, fotografías |
JSON streams, .xlsx, .csv, fotos |
~100 GB/año |
| Geociencias Marinas |
Ecosondas multihaz, perfiles sísmicos, muestreos sedimento |
.xyz, GeoTIFF, .shp, .xlsx |
~1 TB/año |
| Tortugas y Cetáceos |
Fotografías de campo (foto-ID), avistamientos, GPS trackers |
.jpg, .csv, GSheets, GPX |
~50 GB/año |
| Oceanografía |
CTD, boyas, satélites (Copernicus), series temporales |
NetCDF, .csv, API REST, HDF5 |
~300 GB/año |
| Servicios Generales |
Logs de sistema, métricas, configuración |
JSON, YAML, métricas Prometheus |
~10 GB/año |
2.2 Modelo de Dataset
Cada dataset es una unidad lógica de datos con identidad, versionado e historial de actividad:
erDiagram
DATASET ||--o{ DATASET_VERSION : "tiene versiones"
DATASET_VERSION ||--o{ CARGA_INCREMENTAL : "recibe cargas"
CARGA_INCREMENTAL ||--o{ LOG_ACTIVIDAD : "genera logs"
DATASET }o--|| DEPARTAMENTO : "pertenece a"
DATASET }o--|| FUENTE_DATOS : "proviene de"
DATASET ||--o{ DATASET_PERMISO : "controlado por"
DATASET_PERMISO }o--|| ROL : "asignado a"
DATASET {
uuid id PK
string nombre
string descripcion
string departamento_id FK
string fuente_tipo
string formato_origen
string esquema_json
string periodicidad
boolean activo
timestamp created_at
}
DATASET_VERSION {
uuid id PK
uuid dataset_id FK
int version_num
int registros_total
int registros_nuevos
int registros_modificados
int registros_eliminados
string hash_checksum
timestamp fecha_carga
string cargado_por
}
CARGA_INCREMENTAL {
uuid id PK
uuid version_id FK
string fuente_uri
string estado
int filas_procesadas
int filas_error
float duracion_seg
jsonb errores_detalle
timestamp inicio
timestamp fin
}
LOG_ACTIVIDAD {
uuid id PK
uuid carga_id FK
string tipo_evento
string descripcion
string usuario
jsonb datos_extra
timestamp timestamp_evento
}
2.3 Pipeline de Carga Incremental
flowchart TB
subgraph Fuentes ["Fuentes de Datos"]
GS["GSheets"]
SP["SharePoint"]
SIR["SIRENO - Oracle"]
IOT["IoT / Sensores"]
SAT["Copernicus / Satélite"]
CAM["Fotografías de campo"]
end
subgraph Deteccion ["Detección de Cambios"]
POLL["Polling periódico"]
HOOK["Webhooks M365"]
CDC["Change Data Capture"]
end
subgraph ETL ["Pipeline ETL"]
DIFF["Delta Detection"]
VAL["Validación de esquema"]
NORM["Normalización"]
EMB["Generación embeddings"]
end
subgraph Storage ["Almacenamiento"]
PG["PostgreSQL"]
CHROMA["ChromaDB"]
MINIO["MinIO"]
end
subgraph Audit ["Auditoría"]
VER["Versionado"]
LOG["Log de actividad"]
ALERT["Alertas"]
end
GS --> POLL
SP --> HOOK
SIR --> CDC
IOT --> POLL
SAT --> POLL
CAM --> HOOK
POLL --> DIFF
HOOK --> DIFF
CDC --> DIFF
DIFF --> VAL --> NORM --> EMB
EMB --> PG
EMB --> CHROMA
NORM --> MINIO
VAL --> VER
NORM --> LOG
EMB --> ALERT
style DIFF fill:#e74c3c,color:#fff
style EMB fill:#9b59b6,color:#fff
style VER fill:#2ecc71,color:#fff
2.4 Mecanismos de Detección de Cambios
| Fuente |
Mecanismo |
Periodicidad |
Detalle |
| GSheets |
API Sheets v4 — modifiedTime |
Cada 15 min |
Compara hash SHA-256 del contenido |
| SharePoint |
Webhooks Graph API |
Tiempo real |
Suscripción a cambios en carpetas monitorizadas |
| SIRENO (Oracle) |
CDC via trigger + tabla de cambios |
Cada hora |
Inserts/updates/deletes en tablas SIRENO_% |
| IoT / Sensores |
Polling MQTT o REST |
Cada 5 min |
Buffer local + batch upload |
| Copernicus |
API CMEMS — check de nuevos productos |
Diario |
Descargas nocturnas programadas |
| Fotografías |
FileWatcher en carpeta hot-folder |
Tiempo real |
Nuevos archivos en /incoming/{departamento}/ |
3. Historial de Actividad y Auditoría
3.1 Eventos Registrados
Cada dataset mantiene un log inmutable de todos los eventos:
| Tipo de Evento |
Descripción |
Quién lo genera |
CARGA_INICIAL |
Primera importación del dataset |
Sistema / Técnico |
CARGA_INCREMENTAL |
Actualización con datos nuevos/modificados |
Sistema (automático) |
VALIDACION_OK |
El esquema y las reglas de validación pasaron |
Sistema |
VALIDACION_ERROR |
Se detectaron errores en los datos entrantes |
Sistema → alerta a Técnico |
ESQUEMA_MODIFICADO |
Se detectó un cambio en la estructura del archivo origen |
Sistema → alerta a Responsable |
EMBEDDINGS_GENERADOS |
Los vectores se actualizaron en ChromaDB/pgvector |
Sistema |
REVISION_MANUAL |
Un investigador revisó y aprobó los datos |
Investigador / Responsable |
CORRECCION |
Se corrigieron datos erróneos |
Investigador / Técnico |
ELIMINACION |
Se eliminaron registros (soft delete con motivo) |
Responsable (requiere justificación) |
3.2 Retención y Trazabilidad
| Aspecto |
Política |
| Retención de logs |
Indefinida (ENS requiere trazabilidad completa) |
| Retención de versiones |
Últimas 12 versiones activas + archivo anual en MinIO |
| Formato de export |
JSON Lines (.jsonl) para cada versión |
| Acceso a logs |
Director y Administración: completo; Responsable: su departamento; otros: solo sus acciones |
4. Matriz de Gobernanza: Rol × Responsabilidad × Dataset
4.1 Modelo RACI por Tipo de Acción
| Acción sobre Dataset |
Director |
Responsable de Área |
Científico Titular |
Técnico Especializado |
Administración/TI |
Colaborador Externo |
| Definir nuevo dataset |
A |
R |
C |
I |
I |
— |
| Configurar fuente/esquema |
I |
A |
— |
R |
C |
— |
| Ejecutar carga inicial |
I |
A |
— |
R |
C |
— |
| Monitorizar cargas automáticas |
I |
C |
— |
R |
A |
— |
| Revisar/aprobar datos cargados |
— |
R |
R |
C |
— |
— |
| Corregir datos erróneos |
— |
A |
R |
R |
— |
— |
| Consultar datos (lectura) |
✅ |
✅ |
✅ (su dpto) |
✅ (su dpto) |
— |
✅ (públicos) |
| Exportar datos |
✅ |
✅ |
✅ |
— |
— |
Limitado |
| Eliminar registros |
A |
R |
— |
— |
— |
— |
| Ver historial completo |
✅ |
✅ (su dpto) |
— |
— |
✅ |
— |
| Configurar alertas |
✅ |
✅ |
— |
✅ |
✅ |
— |
| Aprobar cambios de esquema |
A |
R |
C |
I |
I |
— |
Leyenda RACI: R = Responsable (ejecuta), A = Aprobador, C = Consultado, I = Informado, — = Sin acceso
4.2 Datasets Típicos por Departamento con Roles Asignados
| Departamento |
Dataset ejemplo |
Fuente |
Formato |
Responsable de carga |
Revisor |
Monitor |
| Pesquerías |
Biometrías ECOMED 2025 |
GSheet + SharePoint |
.xlsx → 1 hoja/lance |
Técnico |
Responsable |
Administración |
| Pesquerías |
Lecturas de otolitos (SmartDots) |
ICES SmartDots export |
.csv |
Investigador |
Responsable |
Administración |
| Pesquerías |
Datos SIRENO (desembarcados) |
Oracle CDC |
Tablas Oracle |
Sistema (automático) |
Responsable |
Administración |
| Medio Marino |
Series CTD trimestrales |
Instrumentación CTD |
.cnv → .csv |
Técnico |
Investigador |
Administración |
| Medio Marino |
Registro de plancton (EPRA) |
GSheet compartido |
.xlsx multilhoja |
Investigador |
Responsable |
Administración |
| Acuicultura |
Parámetros de tanques (IoT) |
Sensores MQTT |
JSON stream |
Sistema (automático) |
Técnico |
Administración |
| Acuicultura |
Registros de alimentación |
GSheet diario |
.xlsx |
Técnico |
Investigador |
Administración |
| Geociencias |
Batimetría multihaz |
Ecosonda |
.xyz, GeoTIFF |
Técnico |
Investigador |
Administración |
| Tortugas y Cetáceos |
Foto-ID avistamientos |
Cámara de campo |
.jpg + GSheet |
Investigador |
Responsable |
Administración |
| Oceanografía |
SST Copernicus |
API CMEMS |
NetCDF |
Sistema (automático) |
Investigador |
Administración |
4.3 El Problema de los Múltiples GSheets
[!WARNING]
Cada departamento puede generar entre 5 y 20 GSheets con formatos heterogéneos. Sin gobernanza, esto se convierte en un caos de versiones y formatos imposible de integrar.
Estrategia propuesta:
- Registro obligatorio: Todo GSheet que alimente la plataforma debe registrarse como dataset con esquema definido
- Validación de esquema: Si un investigador cambia columnas → el sistema detecta el cambio y alerta al Responsable antes de ingestar
- Plantillas estandarizadas: Crear plantillas GSheet por tipo de dato (biometrías, avistamientos, parámetros, etc.) con cabeceras fijas
- Modo "sandbox": Las cargas de GSheets nuevos o modificados van a una tabla temporal hasta que un Responsable las apruebe
- Versionado automático: Cada snapshot del GSheet se archiva como versión en MinIO
5. Consistencia con el Frontend (UI Actual)
5.1 Cambios a Reflejar en Documentación
La UI del frontend ahora implementa un modelo que debe ser consistente con la documentación técnica:
| Elemento |
Documentación anterior |
Estado actual (UI) |
Acción |
| Roles |
4 (Admin, Responsable, Investigador, Colaborador) |
6 (Director, Responsable, Científico Titular, Técnico, Administración, Colaborador) |
Actualizar todos los docs |
| Departamentos |
6 genéricos |
7 reales del COM (Pesquerías, Medio Marino, Acuicultura, Geociencias, Tortugas y Cetáceos, Oceanografía, Servicios Generales) |
Actualizar |
| Modelo IA |
Qwen2.5-VL 7B como base + stack departamental |
Qwen2.5-VL 7B como base + stack departamental |
✅ Sincronizado |
| Backend |
Quarkus 3.20 LTS + Dapr |
Quarkus 3.20 LTS + Dapr |
✅ Sincronizado |
5.2 Documentos que Requieren Actualización
| Documento |
Urgencia |
Cambios necesarios |
arquitectura/arquitectura_ia.md |
✅ Actualizado |
Modelos actualizados a Qwen2.5-VL, stack departamental |
arquitectura/modelo_datos.md |
Alta |
Añadir entidades Dataset, DatasetVersion, CargaIncremental, LogActividad |
negocio/catalogo_servicios.md |
Media |
Actualizar roles y número de departamentos |
negocio/fases_integracion.md |
Media |
Actualizar con 7 departamentos reales |
especificacion/especificacion_web_spa.md |
Media |
Añadir selector de departamento, Dashboard por departamento |
proyecto/backlog.md |
Baja |
Añadir épicas de gobernanza de datasets |
6. Recomendaciones
6.1 Prioridad de Implementación
| Fase |
Componente |
Esfuerzo |
| Fase 1 |
Registro de datasets + validación de esquema GSheets |
2 sprints |
| Fase 1 |
Log de actividad + versionado básico |
1 sprint |
| Fase 2 |
CDC para SIRENO (Oracle) + webhooks SharePoint |
2 sprints |
| Fase 2 |
Dashboard de monitorización de datasets |
1 sprint |
| Fase 3 |
Alertas inteligentes (cambio de esquema, anomalías) |
1 sprint |
| Fase 3 |
API de gobernanza para auditores |
1 sprint |
6.2 Principios de Diseño
- Cada dato tiene dueño: Ningún dataset sin departamento y sin responsable asignado
- Todo cambio es trazable: Log inmutable con quién, cuándo, qué, desde dónde
- Validar antes de ingestar: Las cargas con errores se rechazan con informe, nunca contaminan producción
- El Técnico carga, el Responsable aprueba: Separación de responsabilidades entre ejecución y aprobación
- Soberanía de datos: Todo procesamiento en infraestructura CSIC, cumplimiento ENS
7. Consultas IA Compartidas — El Diferenciador
[!IMPORTANT]
Esta funcionalidad es el plato fuerte de la plataforma. El IEO ya tiene métricas (PowerBI, Excel). Lo que no tiene es un motor de IA que responde preguntas en lenguaje natural con datos reales citados y que permite guardar, compartir y reutilizar esas consultas.
7.1 Modelo de Consulta IA
erDiagram
CONSULTA_IA ||--o{ EJECUCION : "ha sido ejecutada"
CONSULTA_IA }o--|| USUARIO : "creada por"
CONSULTA_IA }o--o| DEPARTAMENTO : "pertenece a"
EJECUCION ||--|| RESPUESTA_IA : "produce"
CONSULTA_IA {
uuid id PK
string query
string descripcion
string visibilidad
string departamento
string creador
jsonb etiquetas
int ejecutada
timestamp created_at
}
EJECUCION {
uuid id PK
uuid consulta_id FK
string usuario
float confianza
string modelo_utilizado
int tiempo_ms
int registros
timestamp ejecutada_en
}
RESPUESTA_IA {
uuid id PK
uuid ejecucion_id FK
text resumen
jsonb fuentes
jsonb datos_estructurados
}
7.2 Niveles de Visibilidad (tipo Jira)
| Nivel |
Quién ve |
Quién crea |
Ejemplo |
| Personal |
Solo el creador |
Cualquier rol con acceso a Búsqueda |
"Mis muestras pendientes de confirmar esta semana" |
| Departamento |
Todos los miembros del departamento |
Investigador, Técnico, Responsable |
"Biometrías del último lance ECOMED" |
| Público IEO |
Todo el centro (cross-departamental) |
Responsable, Director |
"Correlación SST vs abundancia de boquerón" |
7.3 Ejemplos de Consultas por Departamento
| Departamento |
Consulta ejemplo |
Modelo utilizado |
Confianza |
Fuentes |
| Pesquerías |
Otolitos de sardina Mediterráneo 2015-2024 |
Qwen2.5-VL + CAG |
94% |
ECOMED, SIRENO, Colección Otolitos |
| Tortugas |
Especies avistadas Estrecho Gibraltar 2025 |
Qwen2.5-VL + MYDAS |
97% |
CIRCE-IEO, Happywhale, GSheet campo |
| Oceanografía |
Correlación SST vs boquerón |
OceanGPT + Qwen2.5-VL |
88% |
CTD, SIRENO, Copernicus |
| Geociencias |
Cartografía batimétrica sin procesar |
CAG + listado |
92% |
SharePoint GEMAR, Base campañas |
| Acuicultura |
Crecimiento dorada vs lubina Q1 2025 |
CAG + series temporales |
93% |
IoT, GSheet alimentación |
7.4 Funcionalidades de Compartir
- Guardar consulta: Cualquier búsqueda puede guardarse con descripción y etiquetas
- Cambiar visibilidad: Personal → Departamento → Público (escalonamiento)
- Plantillas por departamento: Queries sugeridas según la temática del departamento activo
- Historial de ejecuciones: Cuántas veces se ha ejecutado, quién, cuándo, resultados
- Re-ejecutar: El mismo query sobre datos actualizados (los resultados evolucionan con el dataset)
Documentos Relacionados
| Nivel |
Documento |
Descripción |
| Investigación |
Análisis LLM Departamental |
Modelos IA por departamento, datasets públicos, tests |
| Investigación |
Análisis Tecnológico |
CAG+RAG, M365, ENS, evaluación |
| Investigación |
Bancos de Datos Animales |
Fuentes internacionales, APIs, datasets de imágenes, almacenamiento |
| Arquitectura |
Arquitectura IA |
Pipeline CAG+RAG, modelos, edge AI |
| Arquitectura |
Modelo de Datos |
Schema PostgreSQL, ChromaDB, MinIO |
| Negocio |
Catálogo de Servicios |
Servicios ofrecidos al IEO |