mirror of
https://github.com/marcogll/gloria_app.git
synced 2026-03-15 10:24:43 +00:00
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
211 lines
7.0 KiB
Markdown
211 lines
7.0 KiB
Markdown
# Progreso del Proyecto Gloria
|
|
|
|
Este documento rastrea el progreso detallado de cada Sprint.
|
|
|
|
## Resumen Global
|
|
|
|
| Sprint | Estado | Progreso | Fecha |
|
|
| ------------------------------- | ------------------------------ | -------- | ---------- |
|
|
| 🟢 Sprint 1 - Cimientos | ✅ Completado | 100% | 2026-02-01 |
|
|
| 🔵 Sprint 2 - Phone-First | ✅ Completado | 100% | 2026-02-01 |
|
|
| 🟡 Sprint 3 - Crisis y Agenda | ✅ Completado | 100% | 2026-02-02 |
|
|
| 🟠 Sprint 4 - Pagos y Roles | ✅ Completado | 100% | 2026-02-02 |
|
|
| 🔴 Sprint 5 - Voz y Notas | ⏳ No Iniciado (Esperando 3/4) | 0% | Pendiente |
|
|
| 🟣 Sprint 6 - Integración Final | ⏳ No Iniciado (Esperando 3/4) | 0% | Pendiente |
|
|
|
|
**Progreso Total del Proyecto:** 67% (4/6 sprints completados)
|
|
|
|
---
|
|
|
|
## 🟡 Sprint 3 - Triaje de Crisis y Agenda
|
|
|
|
**Estado:** ✅ 100% Completado
|
|
**Fecha Inicio:** 2026-02-01
|
|
**Fecha Finalización:** 2026-02-02
|
|
**Responsable:** Data-Agent + UI-Agent
|
|
**Progreso:** 100%
|
|
|
|
### Foco
|
|
|
|
Lógica sensible y disponibilidad.
|
|
|
|
### Progreso Global
|
|
|
|
| Fase | Estado | % Completado |
|
|
| ----------------------- | ------------- | ------------ |
|
|
| Motor de Crisis | ✅ Completado | 100% |
|
|
| Google Calendar API | ✅ Completado | 100% |
|
|
| Caché de Disponibilidad | ✅ Completado | 100% |
|
|
| Sistema de Locks | ✅ Completado | 100% |
|
|
| Servicio de Email SMTP | ✅ Completado | 100% |
|
|
| Reacomodar Citas | ✅ Completado | 100% |
|
|
| Job Email Diario 10 PM | ✅ Completado | 100% |
|
|
|
|
### Tareas Detalladas
|
|
|
|
#### Motor de Crisis (100% Completado)
|
|
|
|
- [x] API endpoint POST /api/crisis/evaluate
|
|
- [x] Algoritmo de detección de palabras clave
|
|
- [x] Preguntas de validación adicionales
|
|
# Sprint 3 y 4 completados - ver detalles arriba
|
|
|
|
#### 1. Upload de Comprobantes con OCR (Híbrido)
|
|
|
|
**Archivos a crear:**
|
|
|
|
- `src/app/api/payments/upload-proof/route.ts` - API endpoint de upload
|
|
- `src/lib/ocr/processor.ts` - Procesador OCR (servidor)
|
|
- `src/lib/ocr/templates.ts` - Templates para extraer datos específicos
|
|
- `src/components/dashboard/PaymentUpload.tsx` - Componente de upload con drag & drop
|
|
- `src/lib/utils/ocr-client.ts` - Pre-procesamiento en cliente (opcional)
|
|
|
|
**Archivos a modificar:**
|
|
|
|
- `prisma/schema.prisma` - Agregar campos extraídos a modelo Payment
|
|
- `src/app/dashboard/asistente/page.tsx` - Integrar componente de upload
|
|
|
|
**Base de datos - Actualizar modelo Payment:**
|
|
|
|
```prisma
|
|
model Payment {
|
|
// ... campos existentes
|
|
|
|
// Datos extraídos por OCR
|
|
extractedDate DateTime?
|
|
extractedAmount Float?
|
|
extractedReference String? // Clave de transferencia
|
|
extractedSenderName String?
|
|
extractedSenderBank String?
|
|
}
|
|
```
|
|
|
|
**Flujo del proceso (Híbrido):**
|
|
|
|
**Cliente:**
|
|
|
|
1. Usuario arrastra o selecciona archivo (PDF, JPG, PNG)
|
|
2. Validación de tipo y tamaño (máx 5MB)
|
|
3. Pre-procesamiento opcional: Escala de grises, Aumentar contraste, Redimensionar si es muy grande
|
|
4. Enviar archivo al servidor
|
|
|
|
**Servidor:**
|
|
|
|
1. Recibir archivo multipart/form-data
|
|
2. Validar tipo (PDF, JPG, PNG) y tamaño (5MB)
|
|
3. Generar nombre único: `payment_{appointmentId}_{timestamp}.{ext}`
|
|
4. Guardar en `/public/uploads/payments/`
|
|
5. Procesar con OCR:
|
|
- Si es imagen: usar tesseract.js directamente
|
|
- Si es PDF: extraer texto con pdf-parse primero
|
|
6. Extraer datos usando regex patterns (monto, fecha, referencia, remitente, banco)
|
|
7. Guardar datos extraídos en Payment model
|
|
8. Retornar URL del archivo y datos extraídos
|
|
|
|
**Componente PaymentUpload:**
|
|
|
|
- Área de drag & drop
|
|
- Previsualización de archivo (imagen o icono PDF)
|
|
- Barra de progreso de upload
|
|
- Mostrar datos extraídos por OCR con opción de editar
|
|
- Botón para reintentar si OCR falla
|
|
|
|
---
|
|
|
|
#### 2. Botón "Ver Más Servicios" en Landing
|
|
|
|
**Archivo a modificar:**
|
|
|
|
- `src/components/layout/Services.tsx` - Línea 136-144
|
|
|
|
**Cambios:**
|
|
|
|
```tsx
|
|
// Antes:
|
|
<Button onClick={() => { ... }}>Agenda tu Primera Sesión</Button>
|
|
|
|
// Después:
|
|
<Button
|
|
onClick={() => router.push("/servicios")}
|
|
className="rounded-full bg-accent px-8 py-4 font-semibold text-primary transition-colors hover:bg-accent/90"
|
|
>
|
|
Ver Más Servicios
|
|
</Button>
|
|
```
|
|
|
|
---
|
|
|
|
#### 3. Contacto Específico para Cursos
|
|
|
|
**Archivos a crear:**
|
|
|
|
- `src/app/api/contact/courses/route.ts` - Endpoint para consultas de cursos
|
|
- `src/lib/email/templates/course-inquiry.ts` - Template HTML de notificación
|
|
|
|
**Archivo a modificar:**
|
|
|
|
- `src/app/cursos/page.tsx` - Agregar sección de contacto específica
|
|
|
|
**Especificaciones:**
|
|
|
|
- Formulario con campos:
|
|
- Nombre (requerido)
|
|
- Email (requerido)
|
|
- Curso de interés (dropdown - requerido)
|
|
- Mensaje (requerido)
|
|
- Al enviar:
|
|
- Guardar registro en SQLite
|
|
- Enviar email de notificación a admin
|
|
- Diseño consistente con paleta Nano Banana
|
|
- Animaciones suaves con Framer Motion
|
|
- Cambiar botones "Más Información" para abrir modal o ir a sección de contacto
|
|
|
|
---
|
|
|
|
### 📊 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
|
|
|
|
#### 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 para evitar baneos de Meta. Los recordatorios se manejan a través de Google Calendar (email 24h antes - ya implementado) y email diario a las 10 PM al admin (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.
|