# Pagos en LavanderOS

## Alcance aprobado

LavanderOS admite pagos y abonos parciales por orden. Los métodos iniciales de captura manual son efectivo, tarjeta de débito, tarjeta de crédito, transferencia bancaria y otro. Un pago mixto se representa mediante dos o más pagos vigentes asociados a la misma orden.

Mercado Pago se integrará mediante tres canales:

- Point para cobro presencial en terminal;
- QR para cobro presencial desde el teléfono del cliente;
- enlace de pago para envío remoto.

BBVA queda fuera del alcance actual y podrá añadirse posteriormente como otro proveedor.

## Destino del dinero

Cada propietario conectará su propia cuenta de Mercado Pago mediante OAuth. Los cobros de sus órdenes se crearán con esa conexión y el dinero llegará directamente a su cuenta, menos las comisiones aplicables. LavanderOS no será una cuenta concentradora ni custodiará fondos operativos.

Este cobro al cliente final es independiente del pago de planes y mensualidades del SaaS. Las credenciales globales del `.env` sólo se utilizan durante el desarrollo en sandbox; en producción cada tenant tendrá una conexión cifrada y aislada.

La capa de pagos conservará campos neutrales como `provider`, `channel`, `external_id`, `external_reference` e `idempotency_key`. Así podrá añadirse otra pasarela mediante un adaptador propio sin cambiar la lógica financiera de órdenes, abonos y saldos.

## Reglas financieras

- El servidor calcula siempre el total pagado y el saldo.
- Cada alta o cancelación bloquea la orden en base de datos.
- No se permiten importes superiores al saldo ni pagos sobre órdenes canceladas o entregadas.
- La cancelación conserva el pago original, exige permiso y motivo, registra usuario y fecha, y recalcula el saldo.
- Los pagos se aíslan mediante claves compuestas de lavandería, sucursal, orden y método.
- Todas las fechas del módulo son `DATETIME` en UTC.

## Estado de Mercado Pago

Los métodos Point, QR y enlace existen en el catálogo, pero permanecen inactivos hasta implementar OAuth/credenciales, API Orders, idempotencia, webhooks firmados y conciliación. No deben habilitarse como captura manual porque eso podría registrar como confirmado un pago que la pasarela no procesó.

El enlace sandbox ya puede generarse desde una orden con saldo. Cada solicitud crea un intento local con referencia externa y clave de idempotencia, llama a Checkout Pro y redirige a la URL de prueba. En esta etapa el retorno del navegador no acredita dinero: la actualización del saldo se habilitará únicamente mediante consulta autenticada o webhook validado.

Las credenciales de prueba se cargan exclusivamente desde `.env`. Su conexión puede validarse sin crear pagos mediante:

```bash
/opt/lampp/bin/php yii mercado-pago/verify
```

La siguiente entrega añadirá conexiones OAuth de proveedor por lavandería, eventos webhook, estados pendiente/aprobado/rechazado/reembolsado y activación controlada de cada canal. Los intentos de pago neutrales e idempotentes ya están modelados.
