Spaces:
Sleeping
Sleeping
Commit History
-
Aislar por clínica los resultados de analizador
Jose Salazar +1: Claude Opus 5ARCHITECTURE_REVIEW §2.1 (+ la parte de identidad de §2.9). Era el hallazgo más grave de la revisión: `lab/almacen.py` era un dict global sin dueño y `routers/lab.py` no filtraba nada, así que CUALQUIER sesión autenticada podía leer la muestra de cualquier clínica, y `/api/lab/pendientes` las enumeraba todas —sin necesidad siquiera de adivinar IDs—. Cada `muestra_id` abre el panel completo de analitos más las pistas de paciente (nombre de la mascota, raza, sexo). IDENTIDAD DE DISPOSITIVO. `lab_api_keys` pasa de lista de secretos anónimos a `clinica:clave`. `verificar_dispositivo` devuelve el tenant dueño en vez de None, y el recorrido sigue siendo en tiempo constante sobre TODAS las claves (un lookup por diccionario sobre un secreto filtra por tiempo). Revocar = quitar la clave y reiniciar. DE DÓNDE SALE EL TENANT. Del servidor, siempre: de la API key en la ingesta y de la cookie FIRMADA en la lectura. Nunca del cuerpo de la petición —si el puente pudiera declarar su clínica, mentir …1339cdc
-
Añadir el stack nuevo: Vite/TypeScript + FastAPI
Jose Salazar +1: Claude Opus 5frontend/ Motor de patrones portado a TS (analisis.ts) con 27 tests dorados que fijan el comportamiento validado por veterinarios, más el resto de módulos (ui, pdf-parser, auth, papers, lab-import, ia). backend/ Servicio FastAPI: salida estructurada con Pydantic, clientes medGemma/Claude, recuperación RAG y toda la seguridad (sesión, CSRF, rate limit, CORS cerrado, BD fuera del webroot). bridge/ Puente local ASTM/HL7 para analizadores de laboratorio. evals/ Arnés de evaluación clínica + puerta de CI. index.html pasa a cargar el bundle TS en lugar de js/main.js. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>70e641d