Saltar a contenido

Roadmap Priorizado — AdLab

Documento de trabajo para implementar los cambios acordados con la facultad.
Los ítems se abordan en orden de prioridad; marcar el estado a medida que avancemos.

Última actualización: Julio 2026
Dominio objetivo: patologiavetfcvunl.ar


Cómo usar este documento

Estado Significado
⬜ Pendiente Aún no iniciado
🔄 En curso Trabajo activo
✅ Hecho Implementado y verificado
⏸️ Postergado Fuera del alcance de esta etapa
🚫 Deshabilitado Código de dominio conservado; UI/rutas retiradas

Para cada ítem, anotar en Notas / PR el branch, PR o commit cuando corresponda.


1. Interfaz del Veterinario y Carga de Datos

Prioridad operativa: calidad de datos en origen y experiencia móvil.

Plan detallado: PLAN_PUNTO_1_VETERINARIO.md
Orden sugerido dentro del bloque: 1.3 ✅ → 1.2 ✅ → 1.1 ✅

1.1 Normalización de campos (Raza y Edad)

  • Estado: ✅ Hecho (Jun 2026)
  • Objetivo: Evitar texto libre que ensucie la base de datos.
  • Implementado:
  • Edad opcional: inputs años + meses → Protocol.age compuesto
  • Raza: select por especie (choices.py) + Otra con texto auxiliar
  • JS mínimo filtra razas al cambiar especie (create/edit)
  • Tests en protocols/test_age_breed.py
  • Notas / PR:

1.2 Optimización de notificaciones (móvil)

  • Estado: ✅ Hecho (Jun 2026; pulido Jul 2026)
  • Objetivo: Corregir demora y redirección interna al abrir una notificación desde el celular.
  • Implementado:
  • Login con ?next= en vista pública de protocolo
  • AuthenticationService respeta next seguro post-login
  • link_url como path relativo + migración de URLs legacy
  • Vista /notifications/<id>/go/ (marca leída + redirect) en bandeja y campana
  • Pulido posterior (Jul 2026):
  • Middleware de perfil incompleto no interfiere con rutas /api/ (evitaba HTML en respuestas JSON y rompía la campana / DJDT)
  • APIs de notificaciones devuelven 401 JSON si no hay sesión
  • Dropdown del navbar: últimas 5 + enlace a Central de notificaciones
  • Diagnóstico: NOTIFICATION_DIAGNOSTIC_RESULTS.md
  • Notas / PR:

1.3 Validación de tipos de punción (Citología)

  • Estado: ✅ Hecho (Jun 2026)
  • Objetivo: Etiqueta "Punción (PAAF)" visible en el select de técnica de citología.
  • Implementado: Choice renombrado, aliases legacy en formularios, migración 0020.
  • Notas / PR:

1.4 Timeline simplificado para el veterinario + recorte de emails

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: El veterinario no ve hitos internos del lab; solo el progreso que le importa hasta el informe. Menos emails en el camino feliz.
  • Principio: el modelo Protocol.Status no cambia. Solo cambia la presentación y los canales hacia el veterinario.

Estados visibles para el veterinario

Estado interno Etiqueta veterinario
draft Borrador
submitted Enviado
received Recibido
processing / ready En laboratorio
report_sent Informe enviado
rejected Rechazado

Implementado

  • Badge: get_veterinarian_status_display (ya existía).
  • Historial colapsado: build_veterinarian_status_history / build_status_history_for_user en protocol_detail_context.py.
  • Lab staff: historial completo (build_staff_status_history).
  • READY (opción A): sin email ni in-app al marcar listo para diagnóstico.

Recorte de emails (flujo protocolo)

Momento Email In-app
Enviado (SUBMITTED) No
Recibido (RECEIVED) Sí (discrepancias en el mismo mail si hay) Sí (body ampliado si hay observaciones)
Rechazado
Listo (READY) No No
Informe disponible Sí (+ PDF)
Orden de trabajo No (UI deshabilitada) No

Camino feliz: 2 emails (recepción + informe). Auth (verificación / reset) sin cambios.

Áreas del código

  • protocol_detail_context.py, protocol_detail.html, views.py (submit / reception)
  • protocol_service.py (sin notify en READY)
  • emails.py, email_service.py, sample_reception.html, notification_service.py

2. Rediseño del Módulo de Laboratorio (Histopatología)

Prioridad operativa: reducir fricción con guantes puestos en el banco.

2.1 Simplificación del flujo de estados

  • Estado: ✅ Hecho (Jun 2026)
  • Objetivo: Eliminar pantallas y acciones obligatorias de pasos manuales intermedios.
  • Implementado:
  • Cassettes: un botón Procesar colapsa fijación, inclusión y entacado (mark_processed()).
  • Slides: un botón Marcar listo desde pendiente (mark_ready_from_pending()).
  • Timeline simplificado en protocol_status.html; sin migración de schema.
  • Áreas del código: protocols/models.py, protocol_service.py, templates _cassette_timeline, _slide_timeline, _processing_actions.
  • Notas / PR: Ver PLAN_PUNTO_2_LAB_HP.md.

2.2 Unificación de Cassettes y Slides (pantalla única)

  • Estado: ✅ Hecho (Jun 2026)
  • Objetivo: Cargar cassettes y slides en un solo paso, con descripción libre por cassette.

Sección superior — Cassettes

  • Campo libre para listar cassettes y describir qué piezas u órganos contiene cada uno.
  • Romper la estructura rígida actual de “superior / inferior”.

Sección inferior — Slides (vidrios)

  • Multi-select de cassettes por slide; posicion=COMPLETO en backend.
  • POST atómico en SampleRegistrationView (/processing/register/<pk>/).

  • Implementado: sample_register.html, redirects desde cassette_create / slide_register, navegación unificada (Registrar muestra).

  • Pulido (Jul 2026): códigos preview (HP 26/006-C1), orden numérico de slides, seeds demo, docs de lab staff.
  • Notas / PR: Ver PLAN_PUNTO_2_LAB_HP.md.

2.3 Observaciones por portaobjeto en citología (cierre de banco)

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Anotar observaciones de banco por cada portaobjeto de CT al cerrar el procesamiento, sin edición ni revertir etapas.
  • Implementado:
  • Solo citología; HP sigue con observaciones en Registrar muestra.
  • Detalle del protocolo → «Procesamiento de laboratorio»: textarea opcional por slide en received / processing.
  • Marcar listo para diagnóstico guarda observaciones en Slide.observaciones y cierra el protocolo (READY).
  • Campo vacío → no sobrescribe texto previo (p. ej. recepción automática).
  • Tras READY: tabla solo lectura.
  • Fuera de alcance: marcar listo por slide, revertir, calidad/coloración, registro unificado CT.
  • Áreas del código: _protocol_processing_section.html, ProtocolMarkReadyView, mark_ready_for_diagnosis.
  • Docs: processing-samples.md, receiving-samples.md, complete-sample-journey.md.

3. Informes, Formato y Galería

Prioridad operativa: entregables institucionales listos para uso oficial.

Nota de alcance (Jul 2026): el formato institucional del PDF (3.1) se implementó con la plantilla Word de la facultad. Los ítems 3.2 y 3.3 ya estaban completos de forma independiente.

3.1 Formato y encabezado del PDF

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Reemplazar diseño provisorio por formato legal e institucional definitivo.
  • Implementado:
  • Banners de encabezado y pie extraídos del Word oficial (assets/static/images/reports/)
  • Layout institucional en ReportLab (report_pdf_builder.py): HP y CT, secciones RESULTADOS/OBSERVACIONES
  • Mapeo de campos: remisión, material, animal, propietario, MV comitente, fijación, tinción, firma
  • Especificación: docs/internal/reports/pdf-template-spec.md
  • Áreas del código: report_pdf_builder.py, pdf_service.py, assets estáticos
  • Notas / PR: Tipografía v1 en Helvetica; Calibri opcional si la facultad lo confirma. Validación visual pendiente con un informe real en prod.

3.2 Automatización del nombre del archivo PDF

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Al descargar o guardar el informe final, usar nomenclatura oficial.
  • Formato acordado (provisorio hasta confirmación facultad): HP-YY-NNN.pdf a partir de protocol_number (ej. HP 26/006HP-26-006.pdf).
  • Implementado:
  • Report.generate_pdf_filename()HP-26-006.pdf
  • Descarga (ReportPDFView) y persistencia en storage usan el mismo nombre
  • Áreas del código: protocols/models.py, views_reports.py, pdf_service.py
  • Notas / PR: Confirmar con facultad si el formato exacto difiere.

3.3 Corrección en la carga de imágenes (galería macro/micro)

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Solucionar demora o falla al adjuntar fotos macro y micro con referencias al final del informe.
  • Implementado:
  • Embebido en PDF vía PIL (JPEG; soporta WebP/PNG que ReportLab no maneja nativo)
  • Downscale de imágenes grandes al embeber (máx. 1600 px)
  • Validación de payload real de imagen en upload
  • Borrado de archivos en storage al eliminar del formset
  • Áreas del código: report_image_service.py, pdf_service.py, forms_reports.py
  • Notas / PR:

4. Migración al Dominio Final

Prioridad operativa: producción bajo dominio institucional antes de correos y ajustes finales de backend.

Cerrado (Jul 2026): dominio patologiavetfcvunl.ar y SSL operativos en producción.

4.1 Configuración del entorno de producción

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Desplegar bajo el dominio definitivo patologiavetfcvunl.ar.
  • Implementado:
  • ALLOWED_HOSTS, CSRF_TRUSTED_ORIGINS, URLs absolutas en emails.
  • Configuración Nginx / reverse proxy.
  • Variables de entorno en servidor.
  • Documentación relacionada: production-deployment.md, nginx-setup.md.
  • Notas / PR:

4.2 Certificados de seguridad (SSL)

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: HTTPS de punta a punta en el nuevo dominio.
  • Implementado:
  • Certificados y renovación automática.
  • Redirección HTTP → HTTPS.
  • Documentación relacionada: ssl-certificates.md.
  • Notas / PR:

5. Infraestructura y Comunicaciones (Sistemas de Correo)

Prioridad operativa: correo operativo en producción; luego migrar a casilla institucional definitiva.

5.1 Integración de cuenta Gmail (arranque) + migración institucional (luego)

  • Estado: ⬜ Pendiente de configurar (credenciales en próxima reunión) / ⏸️ migración institucional diferida
  • Decisión (Jul 2026): por ahora se usará una casilla Gmail vía SMTP (App Password + 2FA) para desbloquear envíos reales. No es la solución definitiva.
  • Arranque (próxima reunión — pedir):
  • Dirección de la casilla Gmail y App Password.
  • Confirmación de 2FA activada.
  • Variables SMTP en producción: EMAIL_HOST=smtp.gmail.com, EMAIL_PORT=587, EMAIL_USE_TLS=true, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, DEFAULT_FROM_EMAIL.
  • Deuda técnica / riesgos a resolver luego:
  • Cuotas diarias bajas de Gmail (límites de envío).
  • Deliverabilidad y reputación (From @gmail.com vs dominio institucional).
  • Sin panel de bounces/complaints; frágil ante cambios de política Google.
  • Migrar a casilla institucional UNL o SMTP autenticado en patologiavetfcvunl.ar (cambio principalmente de variables EMAIL_*; el código ya lo soporta).
  • Documentación relacionada: email-setup.md, Step 13 en archivo histórico.
  • Notas / PR: Dejar explícito en producción que el SMTP Gmail es provisorio.

5.2 Flujo de verificación de usuarios (veterinarios externos)

  • Estado: ⬜ Pendiente
  • Objetivo: Confirmar que veterinarios externos deben verificar email antes de habilitar su perfil.
  • Alcance:
  • Validar bloqueo de login sin verificación.
  • Probar registro → email → activación → acceso completo.
  • Revisar mensajes y tiempos de expiración de token (24 h).
  • Áreas probables del código: accounts/views.py, User.email_verified, templates de verificación.
  • Notas / PR: Ejecutar esta validación después de tener SMTP Gmail operativo (5.1 arranque).

6. Módulos deshabilitados / postergados

6.1 Órdenes de Trabajo y Finanzas

  • Estado: 🚫 Deshabilitado en UI (Jul 2026) — modelos conservados
  • Decisión: La facultad no usará órdenes de trabajo en esta etapa. Se retira la funcionalidad de la interfaz y las rutas HTTP; no se eliminan modelos ni migraciones (reactivación futura sin pérdida de datos).
  • Qué se retira:
  • Rutas /workorders/... (no registradas en urls.py)
  • Enlaces en dashboards (lab staff y veterinario)
  • Acciones en detalle de protocolo (“Ver orden…”, “Agregar a orden…”)
  • Opción “Incluir orden de trabajo” al enviar informe
  • Qué se conserva:
  • Modelos WorkOrder, WorkOrderService, WorkOrderCounter, PricingCatalog
  • Servicios, formularios y vistas en código (views_workorder.py, etc.) para reactivación
  • Tests de modelo/servicio (no de vistas HTTP)
  • Admin de Django (acceso técnico interno)
  • No se usa feature flag por env var: deshabilitación simple por ausencia de URLs y de enlaces en plantillas.
  • Incluye (congelado para el futuro):
  • Gestión de aranceles
  • Cálculo automático según cantidad de piezas/materiales
  • Saldos pendientes
  • Emisión de resúmenes de cuenta
  • Notas / PR:

7. Fase piloto — Carga de protocolos por laboratorio

Addenda acordada post-reunión (Jul 2026). Plan detallado: PLAN_PUNTO_7_LAB_CARGA_PROTOCOLOS.md

Prioridad operativa: el personal de lab carga protocolos a nombre del MV comitente mientras los veterinarios externos no operan el sistema en el día a día.

7.1 Carga delegada por personal de lab (MVP)

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Permitir a PERSONAL_LAB (y admin vía is_lab_staff) crear y enviar protocolos HP/CT a nombre de un veterinario existente.
  • Implementado:
  • Protocol.created_by — migración 0022
  • Vistas /protocols/lab/create/… (búsqueda MV → tipo → formulario reutilizado)
  • Dashboard lab: acción «Cargar protocolo»
  • Lab edita/envía borradores; historial «Cargado por personal de laboratorio»
  • Tests: protocols/test_lab_protocol_create.py
  • Filtro actual: User.email_verified=True, User.is_active=True, Veterinarian.is_verified=True (punto 11, Jul 2026).
  • Notas / PR: Ver PLAN_PUNTO_7_LAB_CARGA_PROTOCOLOS.md.

8. Categoría de animal (HP y CT)

Addenda post-reunión (Jul 2026). Plan: PLAN_PUNTOS_8_9_10.md §8.

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Nuevo campo categoría de animal en protocolos de citología e histopatología.
  • Implementado:
  • Protocol.animal_category — texto libre; formularios create/edit, detalle, PDF (_build_animal_line)
  • Migración 0023_animal_category_and_pdf_image_flag.py
  • Tests en test_roadmap_items_8_9_10.py
  • Notas / PR:

9. Editar / eliminar portaobjetos (solo HP)

Addenda post-reunión (Jul 2026). Plan: PLAN_PUNTOS_8_9_10.md §9.

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Corregir o borrar portaobjetos ya registrados en histopatología.
  • Implementado:
  • Edición de slides HP en sample_register.html (can_edit_existing_slides)
  • SlideDeleteView + delete_histopathology_slide() con ProcessingLog
  • Bloqueo si slide en informe finalizado; CT sin cambios
  • Tests en test_roadmap_items_8_9_10.py
  • Notas / PR:

10. Marcar imágenes para incluir en PDF del informe

Addenda post-reunión (Jul 2026). Plan: PLAN_PUNTOS_8_9_10.md §10.

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Booleano en ReportImage para elegir qué fotos micro/macro van al PDF.
  • Implementado:
  • ReportImage.include_in_pdfdefault=True
  • Checkbox en formset de edición; PDF filtra include_in_pdf=True
  • Migración 0023; tests en test_roadmap_items_8_9_10.py
  • Notas / PR:

11. Habilitación de veterinarios (registro abierto, operación controlada)

Addenda post-reunión (Jul 2026). Plan detallado: PLAN_PUNTOS_11_12.md §11.

Prioridad operativa: cerrar el gap entre registro público y veterinarios habilitados para crear protocolos y aparecer en la búsqueda del lab (punto 7).

11.1 Gate is_verified + pantalla de contacto

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Veterinarian.is_verified bloquea creación HP/CT y búsqueda lab; MV pendiente ve pantalla de contacto administrable (patrón banner).
  • Implementado:
  • VeterinarianApprovedMixin en vistas de creación HP/CT
  • Pantalla /accounts/veterinarian/pending-approval/ + singleton VeterinarianPendingApprovalSettings
  • Filtro punto 7: is_verified=True en lab_protocol.py
  • Notas / PR: Ver VETERINARIAN_APPROVAL_TESTING.md

11.2 Panel admin — Gestión de veterinarios

  • Estado: ✅ Hecho (Jul 2026)
  • Objetivo: Vista /dashboard/admin/veterinarians/ (no Django Admin): buscador con Habilitar y Eliminar (soft delete); emails en ambos casos.
  • Implementado:
  • VeterinarianApprovalService (approve, delete, reactivate)
  • Emails + AuthAuditLog + contador pendientes en panel admin
  • Soft delete: sin protocolos → anonimizar; con protocolos → solo desactivar
  • Notas / PR: Guía operativa en managing-users.md

12. Protección de endpoints públicos (rate limit + CAPTCHA)

Addenda post-reunión (Jul 2026). Plan: PLAN_PUNTOS_11_12.md §12.

  • Estado: ✅ Implementado (Jul 2026)
  • Objetivo: Reducir abuso en registro, login, reset y reenvío de verificación.
  • Alcance v1:
  • Rate limiting por IP (Redis): login, register, password-reset, resend-verification
  • Cloudflare Turnstile en registro (no en todos los forms)
  • Complementa el punto 11 (menos basura en cola admin).
  • Notas / PR: Ver public-endpoint-protection.md

Orden sugerido de implementación

1 ✅ → 2 ✅ → 3 ✅ → 4 ✅ → 5.1 Gmail → 5.2 → 7 ✅ → 8–10 ✅ → 11 ✅ → 12 ✅ → (correo institucional) → (6.1 reactivar si la facultad lo pide)
# Bloque Ítems Dependencias clave
1 Veterinario / datos 1.1–1.3 ✅, 1.4 ✅ Ninguna crítica
2 Laboratorio HP 2.1 ✅, 2.2 ✅, 2.3 ✅ Implementado Jun–Jul 2026
3 Informes / PDF 3.1, 3.2, 3.3 ✅ Formato facultad aplicado Jul 2026
4 Dominio / SSL 4.1 ✅, 4.2 ✅ Cerrado Jul 2026 (patologiavetfcvunl.ar)
5 Correo / auth 5.1 Gmail provisorio → institucional luego; 5.2 Credenciales Gmail en próxima reunión
6 Finanzas / OT 6.1 🚫 UI off Modelos intactos
7 Piloto lab — carga delegada 7.1 ✅ Filtro is_verified ✅ (punto 11)
8 Categoría de animal 0023
9 Portaobjetos edit/delete (solo HP) CT excluido
10 Imágenes en PDF (flag) include_in_pdf
11 Habilitación MV 11.1–11.2 ✅ 5.1 recomendado para emails
12 Rate limit + CAPTCHA Independiente; complementa 11

Registro de sesiones de trabajo

Usar esta sección para anotar qué ítem se tomó en cada sesión.

Fecha Ítem Resultado
Jun 2026 2.1, 2.2 Rediseño Lab HP: etapas colapsadas + registro unificado
Jun–Jul 2026 1.2 (pulido) Fix campana/API JSON (middleware perfil incompleto); dropdown últimas 5 + central
Jul 2026 Roadmap Documentar dominio (4), deshabilitar OT (6.1), informes sin formato (3.2–3.3; 3.1 espera facultad)
Jul 2026 3.2, 3.3, 6.1 Implementación: nombre PDF, galería imágenes, retiro UI de órdenes de trabajo
Jul 2026 1.4 Timeline vet “En laboratorio”; recorte emails (READY off, submit in-app only, discrepancias en recepción)
Jul 2026 2.3 Observaciones CT por portaobjeto al marcar listo para diagnóstico
Jul 2026 Bloque 1 (verif. local) 1.1–1.4 probados OK en entorno local
Jul 2026 Bloque 2 (verif. local) 2.1 HP, 2.2 registro unificado, 2.3 observaciones CT probados OK
Jul 2026 Bloque 3 (verif. local) 3.2 nombre PDF, 3.3 imágenes en PDF, envío al vet probados OK
Jul 2026 3.1 Formato institucional PDF (banners Word, layout HP/CT, RESULTADOS/OBSERVACIONES)
Jul 2026 4.1, 4.2 Dominio patologiavetfcvunl.ar + SSL cerrados en producción
Jul 2026 5.1 (decisión) Arranque con Gmail SMTP (provisorio); migración a casilla institucional diferida
Jul 2026 7.1 (planificación) Addenda post-reunión: carga de protocolos por lab; plan en PLAN_PUNTO_7
Jul 2026 8, 9, 10 (planificación) Addenda: categoría animal, edit/delete portaobjetos, flag imágenes PDF; plan en PLAN_PUNTOS_8_9_10
Jul 2026 7.1, 8, 9, 10 Implementación: carga delegada lab, animal_category, edit/delete slides HP, include_in_pdf; tests test_lab_protocol_create, test_roadmap_items_8_9_10
Jul 2026 11, 12 (planificación) Habilitación MV (gate is_verified, panel admin, soft delete) + rate limit/CAPTCHA; plan en PLAN_PUNTOS_11_12
Jul 2026 11 Implementación: gate VeterinarianApprovedMixin, panel /dashboard/admin/veterinarians/, pantalla contacto, soft delete, filtro lab is_verified; tests test_veterinarian_approval

Referencias