# Instalación y Despliegue — ASISMA CRM

## Requisitos

- PHP >= 5.5 con extensiones: `pdo_mysql`, `curl`, `fileinfo`, `mbstring`, `openssl`.
- MySQL/MariaDB >= 5.6.
- Apache 2.4 (usa `FallbackResource`, no requiere `mod_rewrite`).

## 1. Base de datos

```bash
mysql -u root -p < database/schema.sql        # crea la BD asisma_crm y las 20 tablas
mysql -u root -p asisma_crm < database/seeds.sql   # datos mínimos (regiones, config, admin)
```

## 2. Variables de entorno (`.env.php`)

Archivo en la raíz del proyecto (no debe versionarse ni quedar accesible por web —
el `.htaccess` ya bloquea los archivos que comienzan con punto):

```php
<?php
return [
    'DB_HOST' => 'localhost',
    'DB_USER' => 'root',
    'DB_PASS' => '********',
    'DB_NAME' => 'asisma_crm',
    'DB_CHARSET' => 'utf8mb4',
    'APP_URL' => 'http://asismacrm.duckdns.org',   // sin slash final
    'APP_DEBUG' => false,                            // true solo en desarrollo
    'APP_TIMEZONE' => 'Etc/GMT+4',

    // Evolution API (WhatsApp) - valores por defecto para nuevas instancias
    'EVOLUTION_API_URL' => 'https://evolution-api...',
    'EVOLUTION_API_TOKEN' => '...',
];
```

## 3. VirtualHost Apache

Ya configurado en `C:\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhosts.conf`:

```apache
<VirtualHost *:80>
    ServerName asismacrm.duckdns.org
    DocumentRoot "C:/wamp/www/asisma_crm"
    <Directory "C:/wamp/www/asisma_crm">
        Options -Indexes
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog "logs/asismacrm-error.log"
    CustomLog "logs/asismacrm-access.log" common
</VirtualHost>
```

## 4. Cron de rotación en cascada

El corazón de la asignación automática. Programar cada 1 a 5 minutos
(el timeout por franquiciado se define en `franquiciados.tiempo_toma_lead`, default 300 s):

**Windows (Programador de tareas):**
```
Programa:  C:\wamp\bin\php\php5.5.12\php.exe
Argumento: C:\wamp\www\asisma_crm\cron\rotacion_leads.php
Repetir:   cada 5 minutos
```

**Linux (crontab):**
```
*/5 * * * * php /ruta/asisma_crm/cron/rotacion_leads.php >> /dev/null 2>&1
```

Log de ejecución: `logs/rotacion_leads.log`.

## 5. Webhook de WhatsApp (Evolution API)

**Modelo**: cada franquicia tiene su propio servidor Evolution (p. ej. en
Railway) y, dentro de él, **una instancia por cada línea/vendedor**. Cada
línea usa una URL de webhook única.

Por cada línea:

1. Registrar la instancia en el CRM (**WhatsApp → Instancias**): nombre exacto
   de la instancia en Evolution, URL y token del servidor, **vendedor dueño de
   la línea** y franquicia. Al guardar se genera el token único del webhook.
2. Copiar la URL única con el botón "Copiar URL" de la tabla:
   `{APP_URL}/api/whatsapp/webhook?t={token}`
3. En Evolution API, configurar esa URL como webhook de la instancia:
   - Evento: `MESSAGES_UPSERT`
   - Activar "Webhook Base64" para recibir adjuntos completos.

Al enviar desde el CRM, la línea se elige así: instancia fijada en el lead →
línea del vendedor asignado → línea de la franquicia → línea de la matriz.

## 6. Integración Control Empresas (opcional)

En **Configuración → Integración Control Empresas** (solo admin):

| Clave | Valor |
|---|---|
| `CE_PROVISION_URL` | URL del `ws_provision.php` de Control Empresas |
| `CE_PROVISION_API_KEY` | API key del webservice |
| `CE_PLANTILLA_ID` | ID de la empresa plantilla a clonar (acción `listar` del WS) |

**Con los tres campos vacíos la integración queda desactivada** y el cierre de
leads solo lo deja registrado en la bitácora. Al configurarlos, cada lead
marcado como *Ganado* creará el cliente en producción.

## 7. API de facturación por franquiciado (opcional)

En la ficha de cada empresa franquiciada (`empresas_franquiciados`) se define
`api_facturacion_url` y `api_key_facturacion`. Al ganar un lead, el CRM hace
`POST` JSON a esa URL (ver payload en docs/API.md).

## 8. Permisos de archivos

Asegurar escritura del usuario de Apache sobre:
- `logs/`
- `storage/uploads/`, `storage/pdf/`, `storage/whatsapp_media/`

## 9. Checklist de producción

- [ ] `APP_DEBUG => false` en `.env.php`
- [ ] Contraseña fuerte para el usuario admin
- [ ] Cron de rotación activo y logueando
- [ ] Webhook de Evolution apuntando al dominio público
- [ ] `API_KEY_LEADS` distribuida solo a los formularios/sitios autorizados
- [ ] Respaldo programado de la BD `asisma_crm`
