# 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.
