ProyectoGrupal/doli-front/presentacion/guion_presentacion.md

96 lines
4.0 KiB
Markdown
Raw Normal View History

# Guion de presentación — Frontend (doli-front)
> Tiempo estimado de esta parte: ~15 min dentro de los 50 min totales del equipo.
---
## 1. Introducción al frontend (2 min)
- Qué es `doli-front`: SPA que consume el BFF para mostrar y gestionar los datos de Dolibarr.
- Decisión técnica: **Vanilla JS** sin frameworks → sin dependencias de React/Vue, control total del DOM.
- Herramienta de build: **Vite 7** — HMR instantáneo en desarrollo, build optimizado con ES Modules.
---
## 2. Arquitectura interna (3 min)
Mostrar la estructura de carpetas en el IDE:
```
src/
├── main.js ← punto de entrada, monta layout
├── router.js ← escucha hash, carga la página correcta
├── pages/ ← cada página es una función que devuelve un HTMLElement
├── services/ ← apiClient.js centraliza el fetch + JWT
└── components/ ← sidebar, modales reutilizables
```
**Puntos clave a explicar:**
- El router es hash-based (`#/facturas`, `#/clientes`…) → no necesita servidor con rutas configuradas.
- `apiClient.js`: adjunta el token JWT automáticamente en cada petición, redirige al login en 401.
- Cada página encapsula su propio estado, listeners y cleanup (sin estado global compartido).
---
## 3. Demo en vivo — recorrido por las páginas (8 min)
Abrir la app en el navegador y mostrar:
### Dashboard
- Gráficas de facturas con **Chart.js**.
- Métricas en tarjetas (total clientes, facturas pendientes…).
### Facturas de proveedores ← parte más completa
- Listar facturas con búsqueda en tiempo real.
- Abrir detalle: ver líneas, importes, estado.
- Cambiar estado: Borrador → Validada → Pagada (botones contextuales).
- Añadir línea a una factura en borrador.
- Registrar un pago (seleccionar tipo, importe, fecha).
- Eliminar factura en borrador con confirmación.
### Contactos
- Búsqueda en tiempo real sobre la tabla.
- Ver detalle / editar inline.
- Crear nuevo contacto con selector de empresa.
### Configuración
- Toggle tema claro/oscuro (persiste en localStorage).
- Temporizador de expiración del JWT en tiempo real.
- Configurar URL de webhook (Teams/Slack).
- Registro de certificado VeriFactu: selector de archivo `.p12` → se convierte a base64 → se envía al BFF.
---
## 4. Decisiones técnicas destacables (2 min)
- **Sin framework**: cada página es una función `render*()` → fácil de leer, sin magia.
- **FileReader API**: el certificado `.p12` se lee en el navegador y se convierte a base64 antes de enviarlo, sin exponer rutas del servidor.
- **Asistente de voz**: Whisper ejecutándose en local en el navegador con `@huggingface/transformers` (sin APIs externas de voz).
- **Toast notifications**: sistema propio ligero sin librerías externas.
- **Cleanup de páginas**: cada página registra un método `cleanup()` que el router llama al navegar, evitando memory leaks de intervals/listeners.
---
## Capturas recomendadas para incluir en slides
- Captura del dashboard con las gráficas.
- Captura del modal de detalle de factura de proveedor (con líneas y pagos).
- Captura de la sección VeriFactu en ajustes.
- Diagrama simple del flujo: `Página → apiClient → BFF`.
---
## Posibles preguntas del profesor
**¿Por qué Vanilla JS y no React?**
→ Para demostrar conocimiento de las APIs del navegador sin abstracciones. El proyecto es de tamaño manejable y no requería el overhead de un framework.
**¿Cómo gestionas el estado?**
→ Cada página tiene su propio estado local (variables en el closure). No hay estado global; el router destruye la página anterior antes de montar la nueva.
**¿Cómo funciona el JWT?**
→ El BFF devuelve un token al hacer login. El frontend lo guarda en `localStorage` y `apiClient.js` lo adjunta en el header `Authorization: Bearer` de cada petición.
**¿Cómo se integra con VeriFactu?**
→ La página de ajustes lee el `.p12` como base64 con `FileReader`, lo envía al BFF, y el BFF lo reenvía al servicio Go que valida y almacena el certificado.