# Portal de Clientes Interlink

Portal independiente en **PHP puro** para clientes, usando la **misma base de datos** del CRM, pero con código y despliegue separados.

## Alcance incluido

- Login por **código WhatsApp** con validación contra `portal_login_codes` y `portal_sessions`
- Dashboard del cliente
- Consulta de estado de cuenta, facturas y pagos
- Estado de conexión usando `service_connection_cache`
- Reclamos/solicitudes desde portal, con creación real de `ticket` + `portal_requests`
- Informe de pagos con carga de comprobante
- Pago online con **Mercado Pago Checkout Pro**
- Inicio de **suscripción recurrente con Mercado Pago** usando `/preapproval`
- Estructura preparada para **Banco Macro** mediante URL de pago provista por Macro/viüMi/Click de Pago
- Webhook para Mercado Pago

## Decisiones tomadas

1. **Independencia:** código separado, misma base de datos del CRM.
2. **Login WhatsApp:** envío directo desde el portal al proveedor configurado.
3. **Estado de conexión:** se muestra desde `service_connection_cache`, con fecha de última verificación.
4. **Reclamos:** cada solicitud del portal crea también un ticket real.
5. **Stack:** PHP puro, sin framework pesado.

## Estructura

- `public/` front controller
- `app/Controllers/` controladores
- `app/Models/` consultas a BD
- `app/Services/` WhatsApp + Mercado Pago + Banco Macro
- `sql/portal_patch.sql` tablas extra del portal

## Instalación

1. Copiar la carpeta `portal_clientes` al VPS.
2. Duplicar `config/config.example.php` como `config/config.php`.
3. Configurar:
   - base_url
   - datos MySQL
   - `app_key`
   - credenciales WhatsApp
   - credenciales Mercado Pago
   - URL de pago de Banco Macro si ya te la entregaron
4. Ejecutar `sql/portal_patch.sql`.
5. Asegurar permisos de escritura en `storage/uploads/payment_reports`.
6. Configurar Apache apuntando al directorio `public/`.

## WhatsApp

El portal usa un envío directo tipo CRMInbox:

- `base_url`
- `api_key`
- `device_id`

## Mercado Pago

Se implementó:

- Checkout Pro para pago puntual
- Preapproval para suscripción recurrente
- Webhook receptor en `/webhook/mercadopago`

## Banco Macro

Quedó preparado como **adaptador configurable**, porque la información pública encontrada sobre **Click de Pago** y **viüMi** muestra onboarding comercial e integración provista por Macro, pero no expone una API pública completa lista para integrar sin credenciales/contrato. Cuando Macro te entregue la URL o especificación final, se conecta desde `BancoMacroService.php`. 

## Importante

- El webhook actual marca la factura como `paid` e inserta pago cuando recibe evento de pago con `external_reference` válido.
- Conviene agregar una validación anti-duplicados sobre referencias de Mercado Pago antes de pasar a producción.
- El campo `created_by_user_id` para `ticket_updates` se toma de `config.php`; debe existir en `users`.

## Siguiente mejora recomendada

Te recomiendo que el próximo paso sea agregarte un **módulo admin mínimo del portal** para revisar comprobantes informados, suscripciones activas y conciliación de webhooks.
