No description
| alembic | ||
| database | ||
| src | ||
| .env | ||
| .gitignore | ||
| alembic.ini | ||
| README.md | ||
| requirements.txt | ||
| run_bdns_pipeline.py | ||
BDNS ETL - Sistema de Procesamiento de Subvenciones
Descripción
BDNS ETL es un sistema de extracción, transformación y carga (ETL) para la Base de Datos Nacional de Subvenciones (BDNS) de España. El sistema se encarga de obtener información sobre subvenciones públicas, procesarla, analizarla y almacenarla en una base de datos estructurada para su posterior consulta y análisis.
Características Principales
- Extracción de datos: Obtiene información de subvenciones desde la API oficial de la BDNS.
- Procesamiento asíncrono: Utiliza procesamiento asíncrono para manejar grandes volúmenes de datos de manera eficiente.
- Análisis con IA: Incorpora capacidades de análisis mediante inteligencia artificial para extraer información relevante de los documentos de las subvenciones.
- Puntuación de relevancia: Evalúa la relevancia de las subvenciones para diferentes perfiles de empresa.
- Almacenamiento estructurado: Guarda toda la información en una base de datos PostgreSQL con un esquema bien definido.
- Gestión de filtros: Permite a los usuarios definir filtros personalizados para encontrar subvenciones relevantes.
Estructura del Proyecto
.
├── alembic/ # Configuración de migraciones de base de datos
├── database/ # Módulos de base de datos
│ ├── database.py # Definición de modelos y esquemas
│ ├── migrations.py # Funciones de migración
│ └── __init__.py
├── src/ # Código fuente principal
│ ├── ai_utils.py # Utilidades de IA para análisis de documentos
│ ├── api_client.py # Cliente para la API de BDNS
│ ├── bdns_flow_controller.py # Controlador principal del flujo de trabajo
│ ├── config.py # Configuración del sistema
│ ├── constants.py # Constantes y prompts para IA
│ ├── database_handler.py # Manejador de operaciones de base de datos
│ ├── grant_analyzer.py # Analizador de subvenciones
│ ├── grant_orchestrator.py # Orquestador del proceso de subvenciones
│ ├── grant_processor.py # Procesador de subvenciones
│ └── __init__.py
├── .env # Variables de entorno
├── .gitignore # Configuración de Git
├── alembic.ini # Configuración de Alembic
├── requirements.txt # Dependencias del proyecto
└── run_bdns_pipeline.py # Punto de entrada principal
Modelos de Datos
El sistema maneja varios modelos de datos principales:
- BasicInfo: Información básica de las subvenciones
- DetailedInfo: Información detallada de las subvenciones
- Document: Documentos asociados a las subvenciones
- LLMAnalysis: Análisis de IA sobre los documentos
- User: Usuarios del sistema
- CompanyProfile: Perfiles de empresa
- Filter: Filtros de búsqueda de subvenciones
- GrantScore: Puntuaciones de relevancia de subvenciones
- Proposal: Propuestas de subvenciones
- ProposalDocument: Documentos asociados a propuestas
Flujo de Trabajo
- Extracción: El sistema consulta la API de BDNS para obtener información sobre subvenciones.
- Procesamiento: Procesa la información básica y detallada de cada subvención.
- Análisis de Documentos: Descarga y analiza los documentos asociados a cada subvención.
- Análisis con IA: Utiliza modelos de IA para extraer información clave de los documentos.
- Puntuación: Evalúa la relevancia de cada subvención para diferentes perfiles de empresa.
- Almacenamiento: Guarda toda la información procesada en la base de datos.
Requisitos
- Python 3.10+
- PostgreSQL
- Dependencias listadas en
requirements.txt
Instalación
-
Clonar el repositorio:
git clone <url-del-repositorio> cd GIT_BDNS_ETL -
Instalar dependencias:
pip install -r requirements.txt -
Configurar variables de entorno: Copiar el archivo
.env.examplea.envy configurar las variables necesarias:DB_HOST=<host-de-base-de-datos> DB_PORT=<puerto> DB_USER=<usuario> DB_PASSWORD=<contraseña> DB_NAME=<nombre-de-base-de-datos> ENVIRONMENT=<production|development> OPENAI_API_KEY=<clave-api-openai> -
Ejecutar migraciones de base de datos:
alembic upgrade head
Uso
Para ejecutar el pipeline completo:
python run_bdns_pipeline.py
Opciones disponibles:
--limit N: Limitar el número de subvenciones a procesar (por defecto: 99999)--enable-ai: Habilitar análisis y puntuación con IA (desactivado por defecto)--batch-size N: Establecer el tamaño del lote para procesamiento (por defecto: 20)--retries N: Establecer el número de reintentos para llamadas a la API (por defecto: 5)
Ejemplo:
python run_bdns_pipeline.py --limit 100 --enable-ai --batch-size 10
Tecnologías Utilizadas
- SQLAlchemy: ORM para interacción con la base de datos
- Alembic: Gestión de migraciones de base de datos
- aiohttp: Cliente HTTP asíncrono para llamadas a la API
- OpenAI: Análisis de documentos mediante IA
- Pydantic: Validación de datos y serialización
- python-dotenv: Gestión de variables de entorno