Files
gloria_app/TASKS.md
Marco Gallegos 423f96022a feat: Complete Sprints 3 & 4 - Email, Reschedule, OCR, Upload, Contact Forms
Sprint 3 - Crisis y Agenda (100%):
- Implement SMTP email service with nodemailer
- Create email templates (reschedule, daily agenda, course inquiry)
- Add appointment reschedule functionality with modal
- Add Google Calendar updateEvent function
- Create scheduled job for daily agenda email at 10 PM
- Add manual trigger endpoint for testing

Sprint 4 - Pagos y Roles (100%):
- Add Payment proof upload with OCR (tesseract.js, pdf-parse)
- Extract data from proofs (amount, date, reference, sender, bank)
- Create PaymentUpload component with drag & drop
- Add course contact form to /cursos page
- Update Services button to navigate to /servicios
- Add Reschedule button to Assistant and Therapist dashboards
- Add PaymentUpload component to Assistant dashboard
- Add eventId field to Appointment model
- Add OCR-extracted fields to Payment model
- Update Prisma schema and generate client
- Create API endpoints for reschedule, upload-proof, courses contact
- Create manual trigger endpoint for daily agenda job
- Initialize daily agenda job in layout.tsx

Dependencies added:
- nodemailer, node-cron, tesseract.js, sharp, pdf-parse, @types/nodemailer

Files created/modified:
- src/infrastructure/email/smtp.ts
- src/lib/email/templates/*
- src/jobs/send-daily-agenda.ts
- src/app/api/calendar/reschedule/route.ts
- src/app/api/payments/upload-proof/route.ts
- src/app/api/contact/courses/route.ts
- src/app/api/jobs/trigger-agenda/route.ts
- src/components/dashboard/RescheduleModal.tsx
- src/components/dashboard/PaymentUpload.tsx
- src/components/forms/CourseContactForm.tsx
- src/app/dashboard/asistente/page.tsx (updated)
- src/app/dashboard/terapeuta/page.tsx (updated)
- src/app/cursos/page.tsx (updated)
- src/components/layout/Services.tsx (updated)
- src/infrastructure/external/calendar.ts (updated)
- src/app/layout.tsx (updated)
- prisma/schema.prisma (updated)
- src/lib/validations.ts (updated)
- src/lib/env.ts (updated)

Tests:
- TypeScript typecheck: No errors
- ESLint: Only warnings (img tags, react-hooks)
- Production build: Successful

Documentation:
- Updated CHANGELOG.md with Sprint 3/4 changes
- Updated PROGRESS.md with 100% completion status
- Updated TASKS.md with completed tasks
2026-02-02 20:45:32 -06:00

12 KiB
Raw Blame History

🗺️ Plan Maestro Detallado Proyecto Gloria (Sprints & QA)

Este documento define el plan de ejecución por sprints, controles de seguridad y fases de validación colaborativa.


🎨 Referencia Visual (Mockup)

Importante: Se ha creado un prototipo visual de alta fidelidad en la carpeta mockup/. Este prototipo (index.html + styles.css) debe utilizarse como referencia estricta de diseño (colores, tipografía, espaciado, animaciones) para la implementación en Next.js. NO copiar y pegar el código HTML directamente; implementar usando componentes React y Tailwind/CSS Modules según la arquitectura del proyecto.


🟢 Sprint 1 Cimientos, Infraestructura y Seguridad Base

Estado: 🚧 En Progreso Inicio: 2026-02-01 Responsable: Ops-Agent + Data-Agent Tech Stack: Next.js 14, TypeScript, Tailwind CSS, Shadcn/ui, Prisma, SQLite, Redis, Docker

Foco

Aislamiento de procesos y entorno Non-Root.

Stack Definitivo

  • Runtime: Node.js 22.x
  • Package Manager: pnpm
  • Framework: Next.js 14 (App Router)
  • UI Library: Shadcn/ui (basado en Radix UI)
  • Database: SQLite + Prisma ORM
  • Cache: Redis
  • Infrastructure: Docker + Docker Compose
  • User: appuser (UID 1001) - Non-Root

Tareas Técnicas Detalladas

1.1 Crear Dockerfile con usuario appuser (UID 1001). Prohibir RUN sudo.

1.2 Configurar docker-compose.yml con límites de CPU y memoria.

1.3 Configurar SQLite con permisos restringidos.

1.4 Validar .env con zod en arranque.

1.5 Inicializar Next.js 14 con App Router.

1.6 Configurar TypeScript 5.x y ESLint.

1.7 Configurar Tailwind CSS con paleta Nano Banana.

1.8 Configurar Shadcn/ui components.

1.9 Crear estructura de carpetas base.

1.10 Configurar Prisma schema con modelos iniciales.

1.11 Implementar middleware de seguridad (helmet.js).

1.12 Configurar scripts de desarrollo (dev, build, lint, typecheck).

Testing & Seguridad

  • Funcional: pnpm install y prisma migrate dentro del contenedor.
  • Manual: docker exec -it <id> whoami ≠ root.
  • Automático: Integrar helmet.js.

Criterios de Aceptación

  1. pnpm install funciona sin errores
  2. pnpm dev levanta servidor en http://localhost:3000
  3. Docker compose funciona con Redis
  4. Prisma schema crea tablas correctamente
  5. Tailwind muestra colores Nano Banana
  6. Usuario appuser (UID 1001) corre en Docker
  7. ESLint y TypeScript no tienen errores
  8. Shadcn components renderizan correctamente
  9. Variables de entorno validan con Zod
  10. Documentación actualizada

🔵 Sprint 2 Identidad Phone-First y Onboarding

Foco

Validación sin contraseñas y privacidad.

Tareas Técnicas

2.1 Rate limiting con Redis (IP + teléfono).

2.2 Formulario multi-paso persistente.

2.3 Fidelidad visual Nano Banana.

Testing & Seguridad

  • Funcional: Registro completo.
  • Manual: Inyección XSS en nombre.
  • Privacidad: IDs con UUID.

🟡 Sprint 3 Triaje de Crisis y Agenda

Estado: 🟡 90% Completado

Foco

Lógica sensible y disponibilidad.

Tareas Técnicas

3.1 Motor de detección de crisis.

3.2 Sincronización Google Calendar con locks.

3.3 Pendiente: Configurar servicio de email SMTP

  • Usar nodemailer con transport TLS

  • Pool de conexiones para eficiencia

  • Variables de entorno: SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS

    3.4 Pendiente: Funcionalidad de reacomodar citas

  • Botón "Reacomodar" en dashboards (asistente y terapeuta)

  • Modal para seleccionar nueva fecha/hora

  • Verificar disponibilidad con Google Calendar API

  • Actualizar evento en Google Calendar y SQLite

  • Invalidar caché de disponibilidad en Redis

  • Enviar email de confirmación al paciente

    3.5 Pendiente: Job programado para email diario a las 10 PM

  • Usar node-cron para schedule (0 22 * * *)

  • Consultar citas del día siguiente

  • Enviar email a admin (Gloria) con resumen:

    • Hora de cita
    • Nombre del paciente
    • Teléfono
    • Tipo (crisis/regular)
    • Estado de pago
  • Template HTML del reporte

Testing & Seguridad

  • Funcional: Alta en calendario.
  • Manual: Manipulación consola.
  • Resiliencia: Simulación fallo API.
  • Pendiente: Test de envío de emails SMTP.
  • Pendiente: Test de reacomodación de citas.
  • Pendiente: Test de job programado manual y automático.

🟠 Sprint 4 Pagos y Roles

Foco

Integridad financiera y control de acceso.

Tareas Técnicas

4.1 Upload seguro (tipo/tamaño).

4.2 Middleware RBAC.

4.3 Dashboards de Asistente y Terapeuta.

4.4 Pendiente: Upload de comprobantes con OCR (híbrido)

  • Validar tipo de archivo (PDF, JPG, PNG)

  • Validar tamaño máximo (5MB)

  • Pre-procesar en cliente (escala de grises, contraste)

  • OCR en servidor para extraer datos:

    • Monto
    • Fecha de transferencia
    • Clave/Referencia de transferencia
    • Nombre del remitente
    • Banco remitente
  • Guardar archivo con nombre único

  • Generar URL temporal

  • Crear registro de Payment con datos extraídos

    4.5 Pendiente: Botón "Ver Más Servicios" en landing

  • Cambiar botón en sección de servicios

  • Enlazar a /servicios

    4.6 Pendiente: Contacto específico para cursos

  • Formulario en página /cursos

  • Campos: Nombre, Email, Curso de interés, Mensaje

  • Email de notificación al admin

Testing & Seguridad

  • Funcional: Validación pago.
  • Manual: Bypass dashboard.
  • Pendiente: Vulnerabilidades: Archivos maliciosos.
  • Pendiente: OCR accuracy test con diferentes comprobantes.

🔴 Sprint 5 Voz y Notas Clínicas

Foco

Privacidad extrema y ciclo de vida.

Tareas Técnicas

5.1 Audio sandbox + Signed URLs.

5.2 Cron purga 7 días.

Testing & Seguridad

  • Funcional: Audio → WhatsApp.
  • Manual: Acceso directo.
  • Purga: Ejecución forzada.

🟣 Sprint 6 Integración Final y Stress QA

Foco

Estabilidad y cumplimiento.

Tareas Técnicas

6.1 Pendiente: Recordatorios WhatsApp (ya implementados en Sprint 3 con email en lugar de WhatsApp para evitar baneos de Meta).

6.2 Pendiente: Log de auditoría.

Testing & Seguridad

  • Regresión completa.
  • Cookies compliance.
  • Stress test (50 usuarios).

📦 Nuevas Dependencias a Instalar (Sprints 3/4 Completación)

pnpm add nodemailer node-cron tesseract.js sharp pdf-parse @types/nodemailer
Paquete Uso Sprint
nodemailer Enviar emails vía SMTP 3
node-cron Job programado para email diario 3
tesseract.js OCR para extraer texto de imágenes 4
sharp Pre-procesar imágenes (optimizar para OCR) 4
pdf-parse Extraer texto de PDFs 4
@types/nodemailer TypeScript definitions 3

📝 Protocolo de Colaboración en Testing

Entregables del Agente

  • Código fuente
  • Comando de test
  • Evidencia de ejecución

Validación del Director Técnico

  • Ejecución manual
  • Prueba de seguridad
  • Revisión de logs

Aprobación

Solo tras validación manual se habilita la siguiente fase.


📋 Plan de Implementación Detallado - Sprints 3/4

Fase 1: Sprint 3 Completación (10% Pendiente)

Tarea 1.1: Configurar Servicio de Email (SMTP)

  • Archivos: src/infrastructure/email/smtp.ts, src/lib/env.ts, src/lib/validations.ts
  • Variables: SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, ADMIN_EMAIL
  • Specs: Transport TLS, pool de conexiones, manejo de errores con retry

Tarea 1.2: Funcionalidad de Reacomodar Citas

  • Archivos: src/app/api/calendar/reschedule/route.ts, src/components/dashboard/RescheduleModal.tsx, src/infrastructure/external/calendar.ts
  • Flujo: Modal → Verificar disponibilidad → Actualizar Google Calendar + SQLite → Enviar email al paciente

Tarea 1.3: Job Programado - Email Diario 10 PM

  • Archivos: src/jobs/send-daily-agenda.ts, src/lib/email/templates/daily-agenda.ts, src/app/api/jobs/trigger-agenda/route.ts
  • Schedule: 0 22 * * * (10 PM todos los días)
  • Destino: Admin (Gloria) - No se envía a asistente
  • Contenido: Tabla HTML con citas del día siguiente (hora, paciente, teléfono, tipo, estado de pago)

Fase 2: Sprint 4 Completación (15% Pendiente)

Tarea 2.1: Botón "Ver Más Servicios" en Landing

  • Archivo: src/components/layout/Services.tsx
  • Cambio: Botón en sección de servicios del landing → Enlaza a /servicios

Tarea 2.2: Contacto Específico para Cursos

  • Archivos: src/app/api/contact/courses/route.ts, src/lib/email/templates/course-inquiry.ts, src/app/cursos/page.tsx
  • Formulario: Nombre, Email, Curso de interés (dropdown), Mensaje
  • Al enviar: Guardar registro + Email notificación a admin

Tarea 2.3: Upload de Comprobantes con OCR (Híbrido)

  • Archivos: src/app/api/payments/upload-proof/route.ts, src/lib/ocr/processor.ts, src/lib/ocr/templates.ts, src/components/dashboard/PaymentUpload.tsx
  • DB: Actualizar modelo Payment con campos extraídos por OCR
  • Flujo:
    • Cliente: Drag & drop → Validación → Pre-procesar (escala grises, contraste)
    • Servidor: Validar → Guardar → OCR → Extraer datos (monto, fecha, referencia, remitente, banco) → Retornar URL + datos
  • API: POST /api/payments/upload-proof
  • Datos extraídos: extractedDate, extractedAmount, extractedReference, extractedSenderName, extractedSenderBank

📊 Cronograma de Ejecución

Fase Tarea Prioridad Estimado
1.1 Configurar SMTP Alta 1-2 horas
1.2 Reacomodar citas Alta 3-4 horas
1.3 Email diario 10 PM Alta 2-3 horas
2.1 Botón servicios Baja 30 min
2.2 Contacto cursos Media 2-3 horas
2.3 Upload con OCR Alta 4-5 horas

Total estimado: 13-18 horas


🔍 Testing Checklist - Sprints 3/4

Sprint 3

  • Test de SMTP: enviar email de prueba
  • Test de reacomodar: cambiar cita y verificar email enviado
  • Test de job manual: trigger endpoint y verificar email diario
  • Test de job programado: esperar a las 10 PM y verificar email automático

Sprint 4

  • Test de botón servicios: navegar a /servicios
  • Test de contacto cursos: enviar consulta y verificar email
  • Test de upload PDF: subida, OCR, extracción de datos
  • Test de upload JPG: subida, OCR, extracción de datos
  • Test de validación: intentar subir archivo inválido (tipo/size)
  • Test de drag & drop: arrastrar archivo al componente

⚠️ Notas Importantes

  1. Reminders por WhatsApp: Se decidió NO implementar recordatorios por WhatsApp para evitar baneos de Meta. Los recordatorios se manejan a través de:

    • Google Calendar (reminders de email a 24h antes - ya implementado)
    • Email diario a las 10 PM al admin con agenda del día siguiente (pendiente)
  2. Reacomodar Citas: Flujo con confirmación enviada (email al paciente). El cambio es automático al recibir el email.

  3. Upload de Comprobantes: Enfoque híbrido (pre-procesamiento en cliente, OCR en servidor) para extraer datos de cualquier banco sin plantillas específicas.

  4. Email Diario: Se envía solo a admin (Gloria), no al asistente. Hora: 10 PM (configurable para timezone).

  5. Datos a Extraer del Comprobante:

    • Monto
    • Fecha de transferencia
    • Clave/Referencia de transferencia
    • Nombre del remitente
    • Banco remitente

Documento de control operativo y aseguramiento de calidad Proyecto Gloria