# Sistema Control de Pagos Laravel v3

Sistema web interno para registrar, autorizar, detener, liberar, procesar y comprobar solicitudes de pago.

## Stack

- PHP 8.2+
- Laravel 12
- MySQL/MariaDB
- Bootstrap 5
- Spatie Laravel Permission
- Maatwebsite Excel
- Twilio SDK para WhatsApp

## Módulos incluidos

- Login
- Dashboard
- Usuarios
- Roles y permisos
- Proveedores
- Cuentas bancarias de proveedores
- Cuentas bancarias de empresa
- Proyectos / eventos
- Categorías de gasto
- Solicitudes de pago
- Factura PDF y XML obligatorias para revisión
- Documentos soporte
- Flujo de estados: borrador, en revisión, observada, rechazada, autorizada, lista para pagar, procesando pago, detenida, cancelada, pagada
- Autorización individual y masiva
- Detener, cancelar y reactivar pagos
- Registro de pago con comprobante obligatorio
- Cuenta autorizada vs cuenta real usada
- Motivo obligatorio si la cuenta real difiere
- Lotes de pago
- Excel para bancos
- Notificaciones configurables por correo y WhatsApp Twilio
- Plantillas editables
- Destinatarios configurables
- Historial de notificaciones
- Reportes y exportación CSV
- Descarga protegida de documentos
- Diseño responsive/mobile

## Instalación local en MAMP

```bash
cd /Applications/MAMP/htdocs
unzip control-pagos-laravel-v3.zip
mv control-pagos-v3 pagos
cd pagos
composer install
cp .env.example .env
php artisan key:generate
```

Crear base de datos:

```sql
CREATE DATABASE control_pagos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

Configurar `.env`:

```env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=control_pagos
DB_USERNAME=root
DB_PASSWORD=root
```

Si MAMP usa 3306, cambiar `DB_PORT=3306`.

Luego ejecutar:

```bash
php artisan migrate --seed
php artisan storage:link
php artisan optimize:clear
php artisan serve
```

Abrir:

```text
http://127.0.0.1:8000
```

### Primer administrador

El seeder no incluye credenciales administrativas predeterminadas. El primer administrador debe aprovisionarse mediante `INITIAL_ADMIN_EMAIL` e `INITIAL_ADMIN_PASSWORD`, inyectadas desde el entorno y nunca guardadas en el repositorio.

## Twilio WhatsApp

Por default queda en modo apagado:

```env
TWILIO_ENABLED=false
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_WHATSAPP_FROM=whatsapp:+14155238886
```

También se puede configurar desde:

```text
Admin > Twilio
```

## Producción

Antes de subir a producción:

```bash
composer install --no-dev --optimize-autoloader
php artisan migrate --seed
php artisan storage:link
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

Asegurar permisos:

```bash
chmod -R 775 storage bootstrap/cache
```

## Nota

Esta versión v3 incluye los módulos funcionales principales. Debe probarse con datos reales antes de operar pagos reales: SMTP, Twilio, usuarios, roles, cuentas bancarias, cargas de documentos y generación de Excel.
