# Nuna CRM — Guía de Despliegue

## Requisitos del servidor

| Componente | Versión mínima |
|---|---|
| PHP | 8.2+ |
| MySQL / MariaDB | 10.4+ |
| Composer | 2.x |
| Extensiones PHP | pdo_mysql, mbstring, openssl, xml, fileinfo, zip |

> **Nota**: `ext-intl` **no es requerida**. El proyecto incluye un polyfill en
> `patches/apply-intl-polyfill.php` que reemplaza la dependencia de `Number::format()`.

---

## 1. Clonar y preparar

```bash
git clone <repo-url> nuna
cd nuna
composer install --no-dev --ignore-platform-req=ext-intl
cp .env.example .env
php artisan key:generate
```

---

## 2. Configurar `.env`

```dotenv
APP_NAME=Nuna
APP_ENV=production
APP_DEBUG=false
APP_URL=https://tu-dominio.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nuna_db
DB_USERNAME=<usuario>
DB_PASSWORD=<contraseña>

# Opcional: Upwork OAuth (ver UPWORK_INTEGRATION.md)
UPWORK_CLIENT_ID=
UPWORK_CLIENT_SECRET=
UPWORK_REDIRECT_URI=https://tu-dominio.com/upwork/callback
```

---

## 3. Base de datos

```bash
php artisan migrate --force
php artisan db:seed --class=AccountSeeder
php artisan db:seed --class=SystemSettingSeeder
php artisan db:seed --class=UserSeeder   # Solo primera vez
```

---

## 4. Aplicar polyfill (sin ext-intl)

Este paso se ejecuta automáticamente en `composer install/update`, pero si necesitas aplicarlo manualmente:

```bash
php patches/apply-intl-polyfill.php
```

---

## 5. Assets Filament

```bash
php artisan filament:assets
php artisan optimize
```

---

## 6. Permisos de carpetas

```bash
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
```

---

## 7. Cron job (Schedule)

Agrega al crontab del servidor:

```cron
* * * * * cd /ruta/a/nuna && php artisan schedule:run >> /dev/null 2>&1
```

El scheduler ejecuta automáticamente:
- **Domingo 02:00** → `upwork:sync-weekly` (sincronización de contratos Upwork)

---

## 8. Servidor web (Nginx)

```nginx
server {
    listen 80;
    server_name tu-dominio.com;
    root /var/www/nuna/public;

    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
```

---

## 9. Usuarios iniciales

Después del seed, los usuarios disponibles son:

| Email | Contraseña | Rol |
|---|---|---|
| admin@nuna.com | admin1234 | Administrador |
| contador@nuna.com | contador1234 | Contador |
| gestor@nuna.com | gestor1234 | Gestor de cuentas |

> **Importante**: Cambiar contraseñas en producción desde Filament → Usuarios.

---

## 10. Desarrollo local (XAMPP)

```bash
php artisan serve --port=8080
# Panel: http://localhost:8080/admin
```

---

## Troubleshooting

### Error: "The intl extension is required"
Aplicar el polyfill: `php patches/apply-intl-polyfill.php`

### Error de migraciones (FK payments antes que sales)
Las migraciones están ordenadas por timestamp. Si hay conflicto ejecutar:
```bash
php artisan migrate:fresh --seed
```

### Port en uso
```bash
php artisan serve --port=8081
```
