No description
Find a file
2025-02-26 10:22:01 +01:00
alembic Update environment configuration and API key management 2025-02-20 13:48:28 +01:00
database Add proposal-related database models and enhance scoring functionality 2025-02-20 12:31:02 +01:00
src Update environment configuration and API key management 2025-02-20 13:48:28 +01:00
.env - Switched database host 2025-02-25 11:07:30 +01:00
.gitignore Update environment configuration and API key management 2025-02-20 13:48:28 +01:00
alembic.ini Add company profile management and integrate AI document querying feature 2024-12-19 11:17:00 +01:00
README.md Update README.md 2025-02-26 10:22:01 +01:00
requirements.txt Add markitdown package to requirements.txt 2025-02-25 11:43:30 +01:00
run_bdns_pipeline.py Update environment configuration and API key management 2025-02-20 13:48:28 +01:00

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

  1. Extracción: El sistema consulta la API de BDNS para obtener información sobre subvenciones.
  2. Procesamiento: Procesa la información básica y detallada de cada subvención.
  3. Análisis de Documentos: Descarga y analiza los documentos asociados a cada subvención.
  4. Análisis con IA: Utiliza modelos de IA para extraer información clave de los documentos.
  5. Puntuación: Evalúa la relevancia de cada subvención para diferentes perfiles de empresa.
  6. Almacenamiento: Guarda toda la información procesada en la base de datos.

Requisitos

  • Python 3.10+
  • PostgreSQL
  • Dependencias listadas en requirements.txt

Instalación

  1. Clonar el repositorio:

    git clone <url-del-repositorio>
    cd GIT_BDNS_ETL
    
  2. Instalar dependencias:

    pip install -r requirements.txt
    
  3. Configurar variables de entorno: Copiar el archivo .env.example a .env y 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>
    
  4. 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