Sistema de IA especializado que automatiza la generación de documentación para licitaciones públicas en España, reduciendo tiempos de semanas a minutos con cumplimiento normativo garantizado
Mini-CELIA (Copilot Inteligente de Licitaciones para la Administración) es un sistema de IA multi-agente que automatiza la generación de documentación para procesos de licitación pública en España. Utilizando arquitectura LangGraph, coordina múltiples agentes especializados (Retriever RAG, Generadores, Validadores) para producir documentos completos con validación automática y cumplimiento normativo garantizado.
En la administración pública española, preparar documentación de licitación es:
- ⏱️ Lento: 2-4 semanas por expediente
- 📚 Complejo: Requiere conocimiento profundo de normativa (LCSP, RGPD, DNSH)
- ❌ Propenso a errores: Riesgo de incumplimiento normativo
- 🔄 Repetitivo: Mismos patrones en documentos similares
Mini-CELIA automatiza el proceso completo:
- ⚡ Rápido: De semanas a menos de 10 segundos
- 🤖 Inteligente: Sistema multi-agente con auto-validación y auto-reparación
- ✅ Compliant: Cumplimiento normativo automático (LCSP + RGPD + DNSH)
- 📊 Trazable: Observabilidad completa con LangFuse y TruLens
- 📄 Exportable: PDF multi-sección con narrativas legales completas
- 🐍 Python 3.11+ (Descargar)
- 📦 Node.js 18+ (Descargar)
- 🔑 OpenAI API Key (Obtener) (opcional)
- 🔑 Groq API Key (Obtener) (opcional)
- 🍃 MongoDB (Atlas Cloud o local)
git clone https://github.com/Bootcamp-IA-P4/ADD4U.git
cd ADD4U# Crear entorno virtual
python -m venv .venv
# Activar entorno virtual
.\.venv\Scripts\Activate.ps1
# Si tienes problemas de permisos, ejecuta primero:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser# Crear entorno virtual
python -m venv .venv
# Activar entorno virtual
.venv\Scripts\activate.bat# Crear entorno virtual
python3 -m venv .venv
# Activar entorno virtual
source .venv/bin/activate# Crear entorno virtual
python -m venv .venv
# Activar entorno virtual
source .venv/Scripts/activate💡 Verificación: Deberías ver
(.venv)al inicio de tu línea de comandos
Crear archivo .env desde la plantilla:
# Copiar plantilla de variables de entorno
cp .env.example .envEditar el archivo .env con tus credenciales reales (OpenAI API Key, MongoDB URI, etc.).
El archivo .env.example contiene todas las variables necesarias con valores de ejemplo.
💡 Nota: Para desarrollo local, el sistema puede funcionar sin MongoDB ni APIs externas usando datos mock.
📄 Variables de Entorno: Revisa el archivo
.env.examplepara ver todas las variables disponibles y su descripción.
# Asegúrate de que el entorno virtual esté activado
# Deberías ver (.venv) en tu prompt
# Instalar todas las dependencias
pip install -r requirements.txt# Asegúrate de tener el entorno virtual activado
# Deberías ver (.venv) en tu prompt
# Ejecutar con uvicorn
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000# Asegúrate de tener el entorno virtual activado
source .venv/bin/activate
# Ejecutar con uvicorn
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000El backend estará disponible en: http://localhost:8000
Documentación Swagger: http://localhost:8000/docs
Health Check: http://localhost:8000/health
✅ Verificación: Deberías ver
Application startup completeen la consola
# Ir al directorio del frontend
cd frontend
# Instalar dependencias
npm install# Dentro del directorio frontend/
# Modo desarrollo (con hot reload)
npm run dev
# Build para producción
npm run build
# Preview del build de producción
npm run previewEl frontend estará disponible en: http://localhost:5173
✅ Verificación: Deberías ver el mensaje
Local: http://localhost:5173/en la consola
🪟 Windows (PowerShell):
Invoke-WebRequest -Uri http://localhost:8000/health
# Debería responder: {"status":"ok","service":"mini-celia-backend","timestamp":"..."}🐧 Linux / 🍎 macOS:
curl http://localhost:8000/health
# Debería responder: {"status":"ok","service":"mini-celia-backend","timestamp":"..."}🌐 Navegador:
- Abrir
http://localhost:8000/docs(Swagger UI) - Verificar que se muestra la documentación de la API
- Abrir navegador en
http://localhost:5173 - Verificar que la interfaz carga correctamente
- Verificar que el chat muestra el mensaje de bienvenida
- Escribir en el chat: "Hola"
- Verificar respuesta del bot
- Probar generación: "Generar JN.1 para servicios de limpieza"
- Verificar que se genera la narrativa completa
🪟 Windows:
# Verificar que el backend esté corriendo en puerto 8000
netstat -an | findstr :8000
# Verificar proceso Python
Get-Process python🐧 Linux / 🍎 macOS:
# Verificar que el backend esté corriendo en puerto 8000
lsof -i :8000
# O alternativa:
netstat -tuln | grep :8000Solución: Asegúrate de que el backend esté ejecutándose y el firewall no bloquee el puerto 8000
Todos los sistemas:
# 1. Activar entorno virtual primero
# Windows PowerShell:
.\.venv\Scripts\Activate.ps1
# Linux/macOS:
source .venv/bin/activate
# 2. Reinstalar dependencias de Python
pip install --upgrade pip
pip install -r requirements.txt
# 3. Verificar instalación
pip list | grep fastapiWindows PowerShell:
# Habilitar ejecución de scripts:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Verificar cambio:
Get-ExecutionPolicy
# Luego activar:
.\.venv\Scripts\Activate.ps1Windows CMD (alternativa):
# Usar script .bat en lugar de .ps1
.venv\Scripts\activate.bat🪟 Windows:
# Encontrar proceso usando puerto 8000
netstat -ano | findstr :8000
# Matar proceso (reemplaza PID con el número encontrado)
taskkill /PID <PID> /F🐧 Linux / 🍎 macOS:
# Encontrar proceso
lsof -ti:8000
# Matar proceso
kill -9 $(lsof -ti:8000)Verificar VITE_API_URL:
# En frontend/.env
VITE_API_URL=http://localhost:8000
# NO usar https, NO añadir /api al finalVerificar CORS:
El backend debe permitir peticiones desde http://localhost:5173. Esto ya está configurado en backend/main.py
# ===== TERMINAL 1 - Backend =====
cd "C:\ruta\a\tu\ADD4U"
.\.venv\Scripts\Activate.ps1
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000
# ===== TERMINAL 2 - Frontend =====
cd "C:\ruta\a\tu\ADD4U\frontend"
npm run devREM ===== TERMINAL 1 - Backend =====
cd C:\ruta\a\tu\ADD4U
.venv\Scripts\activate.bat
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000
REM ===== TERMINAL 2 - Frontend =====
cd C:\ruta\a\tu\ADD4U\frontend
npm run dev# ===== TERMINAL 1 - Backend =====
cd ~/ruta/a/tu/ADD4U
source .venv/bin/activate
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000
# ===== TERMINAL 2 - Frontend =====
cd ~/ruta/a/tu/ADD4U/frontend
npm run dev# ===== TERMINAL 1 - Backend =====
cd /c/ruta/a/tu/ADD4U
source .venv/Scripts/activate
uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000
# ===== TERMINAL 2 - Frontend =====
cd /c/ruta/a/tu/ADD4U/frontend
npm run devCrear start-dev.ps1 (Windows):
# Archivo: start-dev.ps1
Write-Host "🚀 Iniciando Mini-CELIA..." -ForegroundColor Green
.\.venv\Scripts\Activate.ps1
Start-Process powershell -ArgumentList "-NoExit", "-Command", "cd frontend; npm run dev"
uvicorn backend.main:app --reloadCrear start-dev.sh (Linux/macOS):
#!/bin/bash
echo "🚀 Iniciando Mini-CELIA..."
source .venv/bin/activate
gnome-terminal -- bash -c "cd frontend && npm run dev; exec bash" &
uvicorn backend.main:app --reload-
💬 Chat Inteligente
- Interfaz conversacional tipo ChatGPT
- Respuestas contextuales sobre licitaciones
- Modo offline (sin APIs) y online (con IA)
-
📋 Generación de Justificación de la Necesidad (JN)
- Click en "Generar JN"
- Introduce ID del expediente
- Describe la necesidad
- IA genera la documentación completa
-
🔍 Validación Normativa
- Cumplimiento DNSH
- Protección de datos RGPD
- Prevención de fraccionamiento
-
📊 Exportación
- Formatos Word, PDF
- Plantillas oficiales
- Metadatos incluidos
flowchart TD
A[Usuario abre Mini-CELIA] --> B[Chat de bienvenida]
B --> C["Click \"Generar JN\""]
C --> D[Introduce ID expediente]
D --> E[Describe la necesidad]
E --> F[IA procesa con GPT-4]
F --> G[Documento JN generado]
G --> H[Revisar y exportar]
┌─────────────────────────────────────────────────────────────────┐
│ MINI-CELIA ARCHITECTURE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ FRONTEND │ │ BACKEND │ │
│ │ │ │ │ │
│ │ React 18 │◄──HTTP─►│ FastAPI │ │
│ │ Vite │ │ Python 3.11 │ │
│ │ Tailwind │ │ Async/Await │ │
│ │ Port 5173 │ │ Port 8000 │ │
│ └──────────────┘ └──────┬───────┘ │
│ │ │
│ ┌──────────────┼──────────────┐ │
│ │ │ │ │
│ ┌──────▼─────┐ ┌─────▼──────┐ ┌────▼─────┐ │
│ │ LANGCHAIN │ │ MONGODB │ │ OPENAI │ │
│ │ Orchestrator│ │ Database │ │ GPT-4o │ │
│ │ LangGraph │ │ Atlas │ │ │ │
│ └──────┬─────┘ └────────────┘ └──────────┘ │
│ │ │
│ ┌──────────┼───────────┐ │
│ │ │ │ │
│ ┌─────▼────┐ ┌──▼──────┐ ┌─▼──────────┐ │
│ │ RETRIEVER│ │GENERATOR│ │ VALIDATOR │ │
│ │ Agent │ │ Agents │ │ Agent │ │
│ │ (RAG) │ │ A & B │ │ (Schemas) │ │
│ └──────────┘ └─────────┘ └────────────┘ │
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ OBSERVABILITY & MONITORING │ │
│ │ ┌──────────┐ ┌──────────┐ ┌───────────┐ │ │
│ │ │ LangFuse │ │ TruLens │ │ Logging │ │ │
│ │ │ Tracing │ │ Metrics │ │ System │ │ │
│ │ └──────────┘ └──────────┘ └───────────┘ │ │
│ └──────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────┘
[1] USUARIO [2] FRONTEND [3] BACKEND
│ │ │
│ "Generar JN.1 │ │
│ para limpieza" │ │
└──────────────────────────────►│ │
│ POST /jn/generate │
│ {expediente_id, │
│ user_text, │
│ seccion: "JN.1"} │
└──────────────────────────►│
│
[4] ORCHESTRATOR (LangGraph)
│
┌────────────────┼────────────────┐
│ │ │
[5] RETRIEVER [6] PROMPT [7] GENERATOR A
(RAG Agent) MANAGER (Estructurado)
│ │ │
│ Vector Search │ Build Prompt │ LLM GPT-4o
│ MongoDB Atlas │ A + context │ → JSON_A
│ Embeddings │ │
│ │ │
└────────────────┴────────────────┘
│
[8] VALIDATOR A
(Schema Check)
│
┌──────┴──────┐
│ ❌ Error? │
└──────┬──────┘
│ Sí
[9] AUTO-REPAIR (max 2 retries)
│
Regenera JSON_A
│
│ No (✅)
│
┌────────────────┼────────────────┐
│ │ │
[10] GENERATOR B [11] VALIDATOR B [12] SAVE TO DB
(Narrativa) (Coherence) (MongoDB)
│ │ │
LLM GPT-4o JSON_A vs JSON_B │
→ JSON_B Semantic check │
│ │ │
└────────────────┴────────────────┘
│
[13] RETURN TO FRONTEND
│
JSON_A + JSON_B
│
┌───────────────────────────┘
│
[14] FRONTEND RENDER
│
┌────┴─────┐
│ Display │
│ Chat │
│ Response │
└────┬─────┘
│
[15] USER ACTIONS
│
├─► 💾 Guardar
├─► 📄 Exportar PDF
├─► 📝 Exportar Word
└─► 🔄 Regenerar
| Fase | Tiempo Promedio | Descripción |
|---|---|---|
| Retriever (RAG) | ~1-2 seg | Búsqueda vectorial en MongoDB |
| Generator A | ~3-5 seg | Generación JSON estructurado |
| Validator A | ~100 ms | Validación + Auto-repair si es necesario |
| Generator B | ~3-4 seg | Generación narrativa legal |
| Validator B | ~100 ms | Validación de coherencia |
| TOTAL | ~8-12 seg | Pipeline completo end-to-end |
| Capa | Tecnología | Función | Versión |
|---|---|---|---|
| 🎨 Frontend | React | Interfaz de usuario | 18.x |
| Vite | Build tool + HMR | 5.x | |
| Tailwind CSS | Estilos utility-first | 3.x | |
| jsPDF | Generación PDF client-side | Latest | |
| Axios | Cliente HTTP | Latest | |
| 🚀 Backend | FastAPI | Framework web | 0.109+ |
| Python | Lenguaje | 3.11+ | |
| Uvicorn | Servidor ASGI | Latest | |
| Pydantic | Validación de datos | 2.x | |
| 🤖 IA Multi-Agente | LangGraph | Orquestación de agentes | Latest |
| LangChain | Framework LLM | Latest | |
| OpenAI GPT-4o | Generación estructurada | Latest | |
| Groq Llama 3.1 | Generación narrativa | 70B | |
| 🔍 RAG | SentenceTransformers | Embeddings vectoriales | all-MiniLM-L6-v2 |
| MongoDB Atlas | Vector search | 7.0+ | |
| ✅ Validación | BinderSchemas | JSON Schema validation | Custom |
| OutputParser | Limpieza y parsing | Custom | |
| 📊 Observability | LangFuse | Tracing distribuido | Cloud |
| TruLens | Métricas y evaluación | Latest | |
| 🗄️ Base de Datos | MongoDB Atlas | Persistencia + Vector DB | 7.0+ |
| Variable | Descripción | Valor por Defecto | Requerido |
|---|---|---|---|
OPENAI_API_KEY |
API Key de OpenAI | - | No* |
GROQ_API_KEY |
API Key de Groq | - | No* |
MONGODB_URI |
Conexión MongoDB | mongodb://localhost:27017 |
No* |
VITE_API_URL |
URL del backend | http://localhost:8000 |
Sí |
PORT |
Puerto del backend | 8000 |
No |
DEBUG |
Logs detallados | true |
No |
* El sistema funciona offline sin estas variables
# Modelos OpenAI disponibles
DEFAULT_STRUCTURED_MODEL=gpt-4o-mini # Más económico
# DEFAULT_STRUCTURED_MODEL=gpt-4o # Más potente
# Modelos Groq disponibles
DEFAULT_NARRATIVE_MODEL=llama-3.1-70b-versatile # Recomendado
# DEFAULT_NARRATIVE_MODEL=llama-3.1-8b-instant # Más rápido
# DEFAULT_NARRATIVE_MODEL=mixtral-8x7b-32768 # AlternativoOpción 1 - MongoDB Local:
# Instalar MongoDB Community
# Windows: https://www.mongodb.com/try/download/community
# Ubuntu: sudo apt-get install mongodb
# macOS: brew install mongodb/brew/mongodb-community
# Iniciar servicio
mongod --dbpath ./data/dbOpción 2 - MongoDB Atlas (Cloud):
MONGODB_URI=mongodb+srv://usuario:password@cluster0.xxxxx.mongodb.net/mini_celia?retryWrites=true&w=majority# Tests del backend
pytest backend/tests/ -v
# Tests del frontend
cd frontend && npm test# Backend con auto-reload
uvicorn backend.main:app --reload
# Frontend con HMR (Hot Module Replacement)
cd frontend && npm run dev# Logs detallados del backend
DEBUG=true uvicorn backend.main:app --reload
# Inspeccionar base de datos
mongosh mini_celia --eval "db.expedientes.find().pretty()"# Build para producción
pip install -r requirements.txt
# Ejecutar con Gunicorn
gunicorn backend.main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000# Build estático
cd frontend && npm run build
# Servir con servidor web (nginx, apache, etc.)
# Los archivos están en frontend/dist/# Dockerfile.backend
FROM python:3.11-slim
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY backend/ ./backend/
EXPOSE 8000
CMD ["uvicorn", "backend.main:app", "--host", "0.0.0.0", "--port", "8000"]
# Dockerfile.frontend
FROM node:18-alpine
COPY frontend/package*.json ./
RUN npm install
COPY frontend/ .
RUN npm run build
FROM nginx:alpine
COPY --from=0 /app/dist /usr/share/nginx/html
stephyangeles Frontend & IA Developer |
abbyenredes IA Developer & Base de Datos |
Jorgeluuu IA Developer & Backend |
mikewig IA Developer & Backend |
merkandez IA Developer & Backend |
- 💬 Chat Conversacional: Interfaz tipo ChatGPT optimizada para licitaciones
- 📱 Diseño Responsivo: Perfecto en móvil, tablet y desktop con Tailwind CSS
- 📄 Exportación PDF Multi-Sección: Detecta automáticamente todas las secciones JN generadas (JN.1 a JN.5)
- 💾 Gestión de Borradores: Sistema de guardado y carga de trabajos previos
- 🎯 Ejemplos Integrados: Panel lateral con casos de uso reales
- 🧠 Orchestrator: Coordina flujo completo de 8 pasos con LangGraph
- 🔍 Retriever Agent (RAG): Búsqueda vectorial en MongoDB con embeddings (score > 0.75)
- 📝 Generator A: JSON estructurado (JSON_A) con campos validados
- 📖 Generator B: Narrativa legal legible (JSON_B) con referencias normativas
- ✅ Validator Agent: Validación automática con auto-retry (max 2 intentos)
- 🔧 Output Parser: Limpieza HTML y parsing centralizado
- 🧹 Sanitizer: Conversión automática de valores "faltantes" a campos vacíos
- 📋 BinderSchemas: Validación contra JSON Schema con estructura nested
- 🔄 Auto-Repair: Regeneración automática con prompts especializados si falla validación
- 🎯 Nested Fields: Validación recursiva con dot notation (ej:
secciones_JN.objeto) ⚠️ Warnings: Sistema de alertas para campos incompletos sin bloquear flujo- � Tasa de Éxito: Del 70% al 95% con auto-retry implementado
- 🔍 LangFuse: Tracing distribuido de todas las invocaciones LLM con contexto
- 📈 TruLens: Métricas de evaluación y dashboard local (puerto 8501)
- � Health Endpoint:
/healthcon timestamp UTC y status del servicio - 📝 Logs Estructurados: Sistema de logging con niveles configurables
- ⚡ Local Cache: Modelos de embeddings en
./models_cache(reduce startup de 30s a <3s) - 🔄 Async/Await: Backend completamente asíncrono con FastAPI
- 📦 HuggingFace Timeout Fix: Sin dependencia de descarga en cada inicio
- 🎯 Vector Search: MongoDB Atlas con índices optimizados (150 candidates, top 5)
- ✅ LCSP: Ley 9/2017 de Contratos del Sector Público
- ✅ RGPD: Reglamento (UE) 2016/679 de Protección de Datos
- ✅ DNSH: Do No Significant Harm (EU Green Deal)
- ✅ Directiva 2014/24/UE: Contratación pública europea
ADD4U/
│
├── 📁 backend/ # 🔧 API y Lógica del Sistema
│ │
│ ├── 📁 agents/ # 🤖 Agentes de IA (LangGraph)
│ │ ├── orchestrator.py # Orquestador principal (LangGraph)
│ │ ├── retriever_agent.py # RAG: Recuperación de contexto normativo
│ │ ├── prompt_manager.py # Gestor de prompts dinámicos
│ │ ├── prompt_refiner.py # Refinador de prompts por sección
│ │ ├── validator.py # Validador con auto-retry
│ │ │
│ │ ├── 📁 generators/ # Generadores de contenido
│ │ │ ├── generator_a.py # Genera JSON estructurado (JSON_A)
│ │ │ ├── generator_b.py # Genera narrativa legal (JSON_B)
│ │ │ └── output_parser.py # Parser centralizado de outputs
│ │ │
│ │ ├── 📁 schemas/ # Esquemas de validación
│ │ │ └── json_schemas.py # BinderSchemas (JSON_A, JSON_B)
│ │ │
│ │ └── 📁 nodes/ # Nodos del grafo LangGraph
│ │
│ ├── 📁 api/ # 🛣️ Endpoints REST
│ │ ├── jn_routes.py # POST /jn/generate, GET /jn/status
│ │ ├── routes_expedientes.py # CRUD expedientes
│ │ ├── routes_normativa.py # Gestión normativa Golden
│ │ └── routes_outputs.py # Historial de outputs generados
│ │
│ ├── 📁 core/ # ⚡ Lógica Central
│ │ ├── config.py # Configuración global (Settings)
│ │ ├── llm_client.py # Cliente OpenAI/Groq
│ │ ├── logic_jn.py # Lógica de negocio JN
│ │ ├── langfuse_client.py # Cliente trazabilidad LangFuse
│ │ ├── trulens_client.py # Cliente métricas TruLens
│ │ └── trulens_metrics.py # Definición de métricas
│ │
│ ├── 📁 database/ # 🗄️ Persistencia MongoDB
│ │ ├── mongo.py # Configuración cliente AsyncMongo
│ │ ├── init_expedientes.py # Inicialización BD expedientes
│ │ ├── init_normativa.py # Inicialización BD normativa
│ │ ├── init_outputs.py # Inicialización BD outputs
│ │ ├── outputs_repository.py # Repositorio de outputs
│ │ └── process_normativa_global.py # Procesamiento embeddings
│ │
│ ├── 📁 models/ # 📋 Esquemas Pydantic
│ │ └── schemas_jn.py # Modelos de datos JN
│ │
│ ├── 📁 prompts/ # 💭 Prompts Optimizados
│ │ ├── jn_prompts.py # Prompts específicos JN
│ │ └── 📁 templates/ # Plantillas de prompts
│ │
│ ├── 📁 tests/ # 🧪 Tests Unitarios
│ │ ├── test_orchestrator_e2e.py # Test end-to-end
│ │ ├── test_validator_improvements.py # Tests validador
│ │ ├── test_retriever.py # Tests RAG
│ │ └── test_jn_validator.py # Tests validación JN
│ │
│ ├── 📁 utils/ # 🛠️ Utilidades
│ │ └── dict_utils.py # Helpers manipulación diccionarios
│ │
│ ├── 📁 trulens_data/ # 📊 Base de datos TruLens
│ │ └── trulens.db # SQLite DB para métricas
│ │
│ └── main.py # 🚀 Punto de entrada FastAPI
│
├── 📁 frontend/ # 🎨 Aplicación React
│ │
│ ├── 📁 src/
│ │ ├── 📁 components/ # 🧩 Componentes React
│ │ │ ├── ChatSection.jsx # Chat principal con IA
│ │ │ ├── ClarificationPrompts.jsx # Prompts de clarificación
│ │ │ ├── DraftModal.jsx # Modal de borradores
│ │ │ ├── ExportMenu.jsx # Menú exportación (PDF/Word)
│ │ │ ├── LicitacionExamples.jsx # Ejemplos de licitaciones
│ │ │ └── Toast.jsx # Sistema de notificaciones
│ │ │
│ │ ├── 📁 contexts/ # 🔄 Context API
│ │ │ └── AppStateContext.jsx # Estado global aplicación
│ │ │
│ │ ├── 📁 pages/ # 📄 Páginas
│ │ │ └── MainApp.jsx # Página principal
│ │ │
│ │ ├── 📁 services/ # 🌐 Servicios API
│ │ │ └── apiService.js # Cliente HTTP (Axios)
│ │ │
│ │ ├── 📁 utils/ # 🛠️ Utilidades
│ │ │ └── pdfGenerator.js # Generador PDF (jsPDF)
│ │ │
│ │ ├── App.jsx # Componente raíz
│ │ ├── index.css # Estilos globales
│ │ └── main.jsx # Entrada React
│ │
│ ├── index.html # HTML principal
│ ├── package.json # Dependencias NPM
│ ├── postcss.config.js # Configuración PostCSS
│ ├── tailwind.config.js # Configuración Tailwind
│ └── vite.config.js # Configuración Vite
│
├── 📁 docs/ # 📚 Documentación
│ ├── 📁 diagrams/flujos/ # Diagramas de flujo
│ │ ├── jn_operativo.md # Flujo operativo JN
│ │ ├── flujo_operativo.md # Flujo general
│ │ └── bbdd_flujo.md # Flujo base de datos
│ │
│ ├── 📁 diagrams/ejemplos_json/ # Ejemplos de estructuras
│ │ ├── output_jsonA.json # Ejemplo JSON_A
│ │ ├── output_jsonB.json # Ejemplo JSON_B
│ │ ├── expediente.json # Ejemplo expediente
│ │ └── normativa_global.json # Ejemplo normativa
│ │
│ ├── guia_endpoints_orquestador.md # Guía API
│ ├── server_setup.md # Setup servidor
│ ├── mejoras_sistema_validacion.md # Doc mejoras validación
│ └── Mini-CELIA-Final-Documento-Informativo.md # 📖 Doc completo para entender proyecto
│
├── 📁 outputs/ # 📤 Archivos generados
├── 📁 tests/ # 🧪 Tests de integración
│
├── 📄 .env # 🔐 Variables de entorno (local)
├── 📄 .env.example # 📄 Plantilla variables entorno
├── 📄 .gitignore # 🚫 Archivos ignorados Git
├── 📄 README.md # 📖 Este documento
├── 📄 requirements.txt # 📦 Dependencias Python
└── 📄 package.json # 📦 Metadatos proyecto
*_agent.py: Agentes individuales de LangChain/LangGraph*_routes.py: Endpoints FastAPI agrupados por dominioschemas_*.py: Modelos Pydantic de validación*.jsx: Componentes React*_prompts.py: Colecciones de prompts para IA
Al abrir la aplicación, encontrarás ejemplos organizados en 4 categorías:
- Servicios de Limpieza: Ejemplo para limpieza de edificios municipales
- Mantenimiento Informático: Soporte técnico para equipos IT
- Rehabilitación de Edificio: Restauración de edificios históricos
- Pavimentación Urbana: Obras de mejora de calles y aceras
- Equipos Informáticos: Renovación de parque informático
- Mobiliario de Oficina: Adquisición de mesas, sillas y archivadores
- Auditoría Energética: Análisis y mejora de eficiencia energética
- Asesoría Legal: Servicios jurídicos especializados
💡 Consejo: Haz clic en cualquier ejemplo para prellenarlo en el chat, luego personalízalo con tus datos específicos.
Escribe directamente en el chat para obtener ayuda personalizada:
"Necesito una justificación para contratar servicios de limpieza de 5 edificios"
"Genera documentación para rehabilitar un edificio histórico de 1500m²"
"Ayúdame con la contratación de 50 ordenadores portátiles"
"Quiero hacer una auditoría energética de 10 edificios"
- 🚀 Iniciar: Abre la aplicación en
http://localhost:5173 - 🎯 Seleccionar: Haz clic en un ejemplo o escribe tu consulta
- 📝 Personalizar: Ajusta cantidades, ubicaciones y requisitos específicos
- ⚡ Generar: La IA procesa tu solicitud y genera la documentación completa
- 📄 Revisar: Verifica el contenido generado en formato JSON estructurado
- 💾 Exportar: Descarga en PDF o Word con un clic
- 🧠 Respuestas inteligentes y contextuales
- 📚 Acceso a conocimiento actualizado
- 🎯 Personalización por tipo de licitación
- ✅ Cumplimiento normativo automático
- 🟢 Verde: Conectado a OpenAI
- 🔴 Rojo: Modo offline/simulado
- ⏳ Amarillo: Cargando respuesta
- 🌈 Tema Corporativo: Amarillo y blanco elegante
- ✨ Efectos Glass: Interfaces modernas y atractivas
- 🎭 Iconos SVG: Profesionales
- 📱 Mobile First: Optimizado para dispositivos móviles
- 🚫 Sin Autenticación: No hay datos personales almacenados
- 🔐 API Keys Locales: Las claves solo se almacenan localmente
- 🏠 Procesamiento Local: Datos no enviados a servidores externos
- 🔄 Sesiones Temporales: No hay persistencia de conversaciones
- ✅ LCSP: Ley de Contratos del Sector Público
- ✅ RGPD: Reglamento General de Protección de Datos
- ✅ DNSH: Do No Significant Harm (EU)
- ✅ PRTR: Plan de Recuperación, Transformación y Resiliencia
- 📄 Generación PPT (Pliego de Prescripciones Técnicas)
- 📋 Generación CEC (Cuadro de Características)
- ⚖️ Criterios de Adjudicación automáticos
- 📊 Dashboard de Analytics
- 🔄 Integración con sistemas ERP
- 📱 Aplicación móvil nativa
- 🎯 Plantillas por Organismos: Adaptadas a diferentes administraciones
- 🤖 Agentes Especializados: Por tipos de licitación específicos
- 📚 Base de Conocimiento: Jurisprudencia y casos de éxito
- 🔄 Workflow Completo: Desde inicio hasta adjudicación
Este proyecto ha sido desarrollado como Proof of Concept (PoC) para demostrar las capacidades de IA aplicadas al sector público español.
Configuración inicial:
# Fork y clonar repositorio
git clone [repository-url]
cd ADD4U
# Crear branch para tu feature
git checkout -b feature/nueva-funcionalidadDesarrollo:
- Seguir PEP 8 para Python
- Usar ESLint para JavaScript
- Documentar funciones nuevas
- Incluir tests unitarios
- Actualizar README si es necesario
Enviar cambios:
- Commit tus cambios:
git commit -am 'Add nueva funcionalidad' - Push al branch:
git push origin feature/nueva-funcionalidad - Crear Pull Request
Si encuentras algún problema o tienes sugerencias:
- 📝 Describe el problema detalladamente
- 🔄 Incluye pasos para reproducirlo
- 📸 Adjunta capturas de pantalla si es posible
- 💻 Especifica tu sistema operativo y navegador
- 📖 Documentación API:
http://localhost:8000/docs - 🐛 Reportar Bugs: [GitHub Issues]
- 💬 Discusiones: [GitHub Discussions]
Para consultas técnicas avanzadas o implementaciones empresariales, contacta con el equipo de desarrollo.
Este proyecto está bajo licencia MIT, lo que permite:
- ✅ Uso comercial y personal
- ✅ Modificación y distribución
- ✅ Uso en proyectos privados
- ❌ No incluye garantías
- OpenAI GPT-4 para generación de contenido
- Groq para modelos open-source
- FastAPI por el excelente framework
- React y Vite por la experiencia de desarrollo
- MongoDB para la persistencia de datos
Mini-CELIA está diseñado específicamente para:
- 🏢 Ayuntamientos de cualquier tamaño
- 🏛️ Diputaciones provinciales
- 🎓 Universidades públicas
- 🏥 Organismos autónomos
- 🚀 Empresas del sector público
🚀 ¡Transforma tu proceso de licitaciones con IA!
Desarrollado con ❤️ para modernizar la Administración Pública española

