# Portal de cliente

Frihet ofrece tres formas de compartir documentos con tus clientes, cada una para un caso de uso diferente:

| Canal | URL | Uso |
|-------|-----|-----|
| **Portal completo** | `app.frihet.io/portal/:token` | Acceso self-service a todo: facturas, presupuestos, pagos, estado de cuenta |
| **Factura publica** | `app.frihet.io/p/:hash` | Enlace de solo lectura para compartir una factura individual |
| **Pagina de pago** | `app.frihet.io/pay/:userId/:invoiceId/:token` | Checkout directo con Stripe para cobrar una factura |

---

## Portal completo

El portal es una experiencia self-service donde tu cliente accede a toda su informacion sin necesidad de crear cuenta ni contraseña.

### Acceso

1. Abre la ficha de un cliente en Frihet
2. Pulsa **Generar enlace del portal**
3. Frihet genera un token unico para ese cliente
4. Comparte el enlace por email, WhatsApp o donde prefieras

```
https://app.frihet.io/portal/eyJhbGciOiJIUzI1NiJ9...
```

El enlace da acceso a **todo el historial del cliente**, no a una sola factura. Puedes revocarlo en cualquier momento desde la ficha del cliente.

### Pestanas del portal

El portal tiene 5 pestanas:

#### Dashboard

Vista general del cliente con:
- Saldo pendiente total
- Facturas vencidas (numero e importe)
- Actividad reciente (ultimas facturas, pagos, presupuestos)

#### Facturas

Lista completa de facturas del cliente con:
- Filtrado por estado (pendiente, pagada, vencida)
- Descarga de PDF individual
- Boton de pago (si Stripe Connect esta configurado)

#### Presupuestos

Lista de presupuestos enviados al cliente con:
- Estado actual (enviado, aceptado, rechazado, expirado)
- Aceptar o rechazar presupuesto directamente desde el portal

#### Pagos

Historial completo de pagos realizados:
- Fecha, importe y factura asociada
- Metodo de pago utilizado
- Estado del pago

#### Estado de cuenta

Resumen consolidado del historial financiero:
- Exportable como PDF
- Total facturado, total pagado, saldo pendiente

### Personalizacion

El portal muestra tu branding automaticamente:
- **Logo** de tu empresa (configurado en Ajustes > Datos de empresa)
- **Color de marca** principal
- **Nombre** de tu negocio

---

## Factura publica

Para compartir una factura individual de forma rapida, sin dar acceso al portal completo.

```
https://app.frihet.io/p/a1b2c3d4e5f6
```

### Como funciona

1. Abre una factura en Frihet
2. Pulsa **Compartir** > **Enlace publico**
3. Frihet genera un hash unico para esa factura
4. Cualquier persona con el enlace puede ver la factura

### Que ve el cliente

- Vista de solo lectura de la factura con tu branding
- Boton para descargar PDF
- Boton de pago (si Stripe Connect esta configurado)
- Sin acceso a otras facturas ni datos del portal

### Seguridad

- Hash aleatorio no adivinable (no contiene IDs secuenciales)
- Solo lectura — no se puede modificar nada
- Se puede revocar eliminando la factura o desde el detalle de la factura

---

## Pagina de pago

Enlace especifico para cobrar una factura via Stripe.

```
https://app.frihet.io/pay/{userId}/{invoiceId}/{token}
```

### Como funciona

1. **Requisito:** Tener Stripe Connect configurado en Ajustes > Pagos
2. El enlace se incluye automaticamente en los emails de factura con el boton "Ver y pagar factura"
3. El cliente ve los datos de la factura y pulsa **Pagar**
4. Se abre una sesion de Stripe Checkout (tarjeta, Apple Pay, Google Pay)
5. Al completar el pago, la factura se marca como pagada automaticamente

### Seguridad

- Token HMAC-SHA256 unico por combinacion usuario+factura
- Determinístico: no almacena tokens en base de datos
- Comparacion timing-safe para prevenir ataques de temporización
- HTTPS obligatorio

---

## Seguridad general

Todos los canales comparten las siguientes medidas:

- **Sin autenticacion tradicional:** No se requiere cuenta ni contraseña. Acceso por token o hash
- **HTTPS obligatorio** en todos los enlaces
- **Cabeceras de seguridad:** `X-Frame-Options: DENY`, `X-Content-Type-Options: nosniff`
- **Aislamiento:** Un cliente solo ve sus propios datos. No puede acceder a facturas de otros clientes
- **Revocacion:** Al eliminar un cliente, todos sus enlaces se invalidan inmediatamente
- **Sin expiracion:** Los tokens son validos indefinidamente mientras el cliente exista en tu base de datos

---

## Notificaciones automaticas

Frihet puede enviar emails automaticos al cliente:

- **Factura emitida:** Email cuando creas nueva factura (con enlace de pago y PDF adjunto)
- **Recordatorio de pago:** Email antes del vencimiento (configurable en Ajustes > Recordatorios)
- **Pago recibido:** Confirmacion cuando se registra un pago
- **Presupuesto expirado:** Aviso si un presupuesto caduca sin aceptar

Configura los automatismos en **Ajustes > Notificaciones**.
