8 Commits

Author SHA1 Message Date
f8c7139e6e feat(admin): live-updating leads view with auto-refresh, sort, filter, +N badge 2026-05-13 16:23:11 +00:00
7b1b28ead8 feat(admin): HTML leads list with filter + top empresas + download stats 2026-05-13 16:20:32 +00:00
b5aedb86b1 feat(admin): upload-material + delete-material endpoints with whitelist 2026-05-13 16:15:18 +00:00
94102279ae feat(admin): /admin/material-files lists files in the material volume 2026-05-13 16:12:42 +00:00
0f175ab138 fix(data): shift dates +1y in non-Charlie rows so 'last year' queries hit data
Today is 2026-05-13 but the dataset was calibrated for early 2025.
'Last year' queries (date > 2025-05-13) returned 0 rows because all
records were 2023-2025-04.

Shifted year by +1 for 46/50 rows. Kept old dates for 4 Charlie rows
that drive the overdue_procedures narrative in member_insights.json
(Annual Physical 2024-05-15, Dental Cleaning 2025-01-10, Vision Exam
2023-08-22, Blood Test 2024-11-04 — these MUST stay old to remain overdue).

Charlie's X Ray (2025-03-28 → 2026-03-28) is now recent, so 'last year
at City Hospital' returns Charlie + Diana + Frank + Bob + Ethan + Henry +
Isabel + Maria with recent visits.
2026-05-13 14:58:08 +00:00
715a6ca370 fix(api): tolerate column aliases (procedure_name → procedure) + Spanish value mappings
El LLM de watsonx Orchestrate estaba alucinando nombres de columnas
(procedure_name en lugar de procedure) y los valores de procedimientos
en español sin traducir. Dos fixes:

1. Backend (benefits_api.py): mapas _COLUMN_ALIASES y _VALUE_ALIASES
   resuelven aliases comunes (procedure_name, name, plan, etc.) y
   traducciones ES→EN (radiografía → X Ray, resonancia → MRI, etc.)
   antes de aplicar el filtro. Mensajes de error ahora listan columnas
   válidas para que el agente se corrija solo.

2. OpenAPI spec (yaml + json): description de cada operación ahora
   enumera explícitamente las columnas válidas y los valores válidos
   del campo procedure, más una sección VALUE MAPPING ES→EN para que
   el LLM no tenga que adivinar.
2026-05-13 14:51:31 +00:00
1f2ad8d235 feat(ui): paleta profesional + iconos SVG inline (sin emojis)
- Reemplaza emojis por iconos SVG estilo Lucide en cards landing y descargas
- Paleta refinada: slate grays + navy + accent amber-700 (B45309)
- Hero con grid pattern sutil y gradients radiales
- Cards con sombras suaves y borders, hover lift
- Header sticky con backdrop-filter
- Tipografía Inter con tracking ajustado
- Botones con flechas SVG inline
2026-05-13 03:12:59 +00:00
a062b45c51 feat: initial implementation taller-wox.fitlabs.dev
Portal FastAPI + 5 endpoints REST para Bootcamp Agentic AI con
watsonx Orchestrate (FactorIT). Single container, Coolify-ready.

- Landing brandeado FIT con formulario de registro (honeypot anti-bot)
- Tokens itsdangerous para descargas (24h expiry)
- 5 endpoints API: historical/available procedures, member-insights,
  schedule, generate-report (Jinja2 + Plotly)
- SQLite con upsert-on-email para leads + log de descargas
- Admin endpoints (HTTP Basic): leads.json, leads.csv, stats
- 23 tests pytest pasando
- Dockerfile listo para Coolify con volúmenes persistentes
  (/app/leads.db, /app/app/data/reports_output, /app/material)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 03:04:28 +00:00