Licencias OSS y servicios externos¶
Documento informativo de entrega. Licencias verificadas una por una el 2026-10-10 contra metadatos instalados (
backend/venv*.dist-info/METADATA,frontend/node_modules/*/package.json) y, donde no estaban instalados, contra PyPI JSON / Hugging Face API. No constituye dictamen de compatibilidad de licencias.
Fecha: 2026-10-10. Rutas relativas a la raíz del superproyecto.
1. Dependencias backend (Python)¶
Fuente: backend/requirements.txt, backend/requirements-dev.txt,
backend/Dockerfile (wheel CPU de torch).
| Paquete | Versión exigida | Licencia |
|---|---|---|
| fastapi | >= 0.109.0 | MIT |
| uvicorn[standard] | >= 0.27.0 | BSD-3-Clause |
| pydantic | >= 2.5.0 | MIT |
| pydantic-settings | >= 2.1.0 | MIT |
| sqlalchemy | >= 2.0.25 | MIT |
| asyncpg | >= 0.29.0 | Apache-2.0 |
| aiosqlite | >= 0.19.0 | MIT |
| alembic | >= 1.13.0 | MIT |
| pytest | >= 8.0.0 | MIT |
| pytest-asyncio | >= 0.23.0 | Apache-2.0 |
| httpx | >= 0.26.0 | BSD-3-Clause |
| testcontainers | >= 4.0.0 | Apache-2.0 |
| deepdiff | >= 7.0.0 | MIT |
| passlib[bcrypt] | >= 1.7.4 | BSD-3-Clause |
| python-jose[cryptography] | >= 3.3.0 | MIT |
| PyJWT | >= 2.7.0 | MIT |
| python-multipart | >= 0.0.6 | Apache-2.0 |
| python-dotenv | >= 1.0.0 | BSD-3-Clause |
| openai | >= 1.0.0 | Apache-2.0 |
| sse-starlette | >= 2.0.0 | BSD-3-Clause |
| sentence-transformers | >= 3.0.0 | Apache-2.0 |
| numpy | >= 1.26.0 | BSD-3-Clause (License-Expression 2.x: BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0) |
| redis (cliente) | >= 5.0.0 | MIT |
torch (wheel CPU, vía backend/Dockerfile:17) |
sin pin en requirements | BSD-3-Clause |
| import-linter (solo dev) | >= 2.0 | BSD-2-Clause |
| pydeps (solo dev) | >= 1.12 | BSD-2-Clause (serie 3.x; la sospecha GPL era de la 1.x) — solo herramienta de análisis, no se distribuye con la app |
| mypy (solo dev) | >= 1.10 | MIT |
| pyupgrade (solo dev) | >= 3.15 | MIT |
| pre-commit (solo dev) | >= 3.7 | MIT |
Notas:
- Verificado el 2026-10-10: ningún paquete del árbol es copyleft
(la sospecha GPL sobre
pydepsera de su serie 1.x; con>= 1.12se instala la 3.x, BSD-2-Clause).pydepseimport-linterson solo herramientas de desarrollo, no forman parte del runtime. python-joseestá prácticamente abandonado upstream; el proyecto lo usa junto aPyJWTpara la verificación RS256 delid_tokende Apple (requirements.txt:23,backend/app/core/config.py:112).
2. Dependencias frontend (Node)¶
Fuente: frontend/package.json. Runtime: Node 20 (frontend/Dockerfile:6),
Next.js 16, React 19.
| Paquete | Versión | Licencia |
|---|---|---|
| next | ^16.2.9 | MIT |
| react / react-dom | 19.2.4 | MIT |
| @xyflow/react | ^12.11.0 | MIT |
| class-variance-authority | ^0.7.1 | Apache-2.0 |
| clsx | ^2.1.1 | MIT |
| date-fns | ^4.1.0 | MIT |
| lucide-react | ^1.7.0 | ISC |
| next-themes | ^0.4.6 | MIT |
| qrcode.react | ^4.2.0 | ISC |
| radix-ui | ^1.4.3 | MIT |
| react-markdown | ^10.1.0 | MIT |
| recharts | ^3.8.1 | MIT |
| remark-gfm | ^4.0.1 | MIT |
| shadcn | ^4.1.2 | MIT |
| sonner | ^2.0.7 | MIT |
| tailwind-merge | ^3.5.0 | MIT |
| tw-animate-css | ^1.4.0 | MIT |
| vaul | ^1.1.2 | MIT |
| zustand | ^5.0.12 | MIT |
| @playwright/test (dev) | ^1.59.1 | Apache-2.0 |
| @tailwindcss/postcss (dev) | ^4 | MIT |
| @testing-library/* (dev) | ^6.9.1 / ^16.3.2 / ^14.6.1 | MIT |
| @types/* (dev) | ^19 / ^20 | MIT |
| @vitest/coverage-v8 (dev) | ^4.1.4 | MIT |
| eslint / eslint-config-next (dev) | ^9 / ^16.2.9 | MIT |
| jsdom (dev) | ^29.0.2 | MIT |
| openapi-typescript (dev) | ^7.13.0 | MIT |
| tailwindcss (dev) | ^4 | MIT |
| typescript (dev) | ^5 | Apache-2.0 |
| vitest (dev) | ^4.1.4 | MIT |
3. Servicios externos y proveedores¶
| Servicio | Uso en el proyecto | Evidencia | Tipo de cuenta / coste |
|---|---|---|---|
| PostgreSQL 15-alpine | BD principal (local y producción vía asyncpg) |
backend/docker-compose.yml:3, backend/app/core/database.py |
Autohospedado (imagen docker.io/postgres:15-alpine, licencia PostgreSQL, permisiva). Sin proveedor gestionado contratado que conste en el repo |
| Redis / Valkey | Rate limiting persistente y store de estado OAuth (redis_rate_limiter.py, redis_oauth_state_store.py); URL opcional (redis_url / valkey_url, backend/app/core/config.py:159-166) |
backend/requirements.txt:39, backend/app/core/config.py:159-166 |
Sin proveedor entregado (docker-compose.yml no levanta ningún servicio; sin configurar, el rate limiting degrada a memoria). Recomendación: la Sociedad monte Valkey (compatible, licencia BSD-3-Clause) y fije redis_url/valkey_url |
NVIDIA NIM (integrate.api.nvidia.com/v1) |
LLM del chat en la época histórica (modelo por defecto stepfun-ai/step-3.5-flash); la cuenta NVIDIA solo se usó para pruebas, no hay cuenta de producción que transmitir |
backend/docker-compose.yml (NVIDIA_API_KEY, NVIDIA_MODEL, NVIDIA_BASE_URL), backend/.env.example:9 |
API comercial de NVIDIA; requiere API key de pago. La Sociedad deberá crear su propia cuenta. Modelo LLM recomendado: DeepSeek Flash (vía proxy local OpenAI-compatible, configurado en NVIDIA_BASE_URL; ver arquitectura_hibrida_chatbot.md) |
| Google OAuth (cliente + admin) | Login con Google, dos clientes separados | backend/docker-compose.yml (GOOGLE_CUSTOMER_CLIENT_ID/SECRET, GOOGLE_ADMIN_CLIENT_ID/SECRET), backend/app/core/config.py:57-63 |
No se transmiten credenciales; la Sociedad los regenera con sus cuentas de empresa en Google Cloud Console + scripts/setup_oauth.sh |
| Apple Sign In (cliente + admin) | Login con Apple, verificación RS256 del id_token contra JWKS |
backend/app/core/config.py:67-72,112, backend/requirements.txt:23 |
No se transmiten credenciales; la Sociedad los regenera con sus cuentas de empresa en Apple Developer Program (de pago) |
| Hugging Face Hub | Descarga del modelo de embeddings en el primer arranque (cache en volumen camarero_ia_hf_cache) |
backend/docker-compose.yml (volumen /hf-cache), backend/app/shared/infrastructure/granite_embeddings.py |
Descarga pública, sin cuenta. Modelo por defecto en backend/app/core/config.py:128: sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (Apache-2.0); variante Granite evaluada en benchmark: ibm-granite/granite-embedding-97m-multilingual-r2 (Apache-2.0; solo alternativa, perdió frente a MiniLM, no es el default productivo) |
| Hosting / VPS + nginx | Reverse proxy de referencia (proxy_pass a frontend y backend) |
nginx/nginx.conf:61-62,93,118, nginx/n0idea.app.conf |
Servidor dado de baja — no se transmite ni hay acceso. Configs nginx incluidas como referencia para redesplegar. VPS/dominio a provisionar por la Sociedad |
4. Cuentas e infraestructura — titularidad pendiente¶
- Cuenta NVIDIA: solo se usó para pruebas, no se transmite ninguna cuenta; la Sociedad crea la suya. Modelo recomendado: DeepSeek Flash.
- Proyecto Google Cloud (OAuth cliente + admin) y URIs de redirección: a regenerar por la Sociedad con sus cuentas de empresa, no se transmiten.
- Apple Developer (Sign in with Apple, cliente + admin): a regenerar por la Sociedad con sus cuentas de empresa, no se transmiten.
- VPS, DNS de
n0idea.app, certificados TLS: servidor dado de baja, no se transmite; la Sociedad provisiona infraestructura propia con los scripts entregados. - Copias de seguridad de Postgres y política de retención: no hay nada al respecto en el repo; lo decide la Sociedad en su infraestructura.
ADMIN_SUPER_EMAILpor defecto (fquintanaquiroga@gmail.com, Francisco Quintana Quiroga) enbackend/docker-compose.yml— se mantiene como bootstrap inicial; la Sociedad lo cambia por su cuenta corporativa al desplegar.