# Indicadores — panel de llamadas y cumplimiento

Aplicación **Laravel 13** + **React 19** (Vite, TypeScript, MUI): gestión de CDR, agentes, indicadores, transcripciones (Google Cloud Speech), nube de palabras y cumplimiento.

## Requisitos

- PHP **8.3+** con extensiones habituales de Laravel (pdo, mbstring, openssl, tokenizer, xml, ctype, json, fileinfo, bcmath).
- **Composer** 2.x
- **Node.js** 20+ y **npm**
- **MySQL** 8 (o compatible)
- Cuenta **Google Cloud** con APIs **Speech-to-Text** y **Cloud Storage** (para subida y transcripción de audio)

## Instalación rápida

```bash
cp .env.example .env
php artisan key:generate
```

Configure en `.env` la base de datos (`DB_*`), `APP_URL`, `FRONTEND_URL`, `SANCTUM_STATEFUL_DOMAINS` y las variables `GOOGLE_*`. Coloque el JSON de la cuenta de servicio en `storage/app/` y asigne su nombre en `GOOGLE_CREDENTIAL` (solo el nombre del archivo).

```bash
composer install
php artisan migrate
php artisan db:seed
npm install
npm run build
php artisan serve
```

Abra en el navegador la misma URL que `APP_URL` (por ejemplo `http://127.0.0.1:8000`).

### Usuarios de demostración (tras `db:seed`)

| Email            | Contraseña   |
|------------------|-------------|
| admin@example.com | password123 |
| usuario@example.com | password123 |

Cambie o elimine estos usuarios en producción.

## Desarrollo

En una terminal: `php artisan serve`  
En otra: `npm run dev`  
La aplicación debe abrirse vía **Laravel** (no el puerto aislado de Vite), para que cookies de sesión y Sanctum funcionen.

También puede usar el script de Composer:

```bash
composer run dev
```

## Variables de entorno del frontend (opcional)

Si la API no comparte origen con el SPA, puede definir en `.env` variables `VITE_*` (por ejemplo `VITE_API_URL`). Si las omite, el cliente usa rutas relativas `/api/...` respecto de `APP_URL`.

## Estructura relevante

| Ruta | Descripción |
|------|-------------|
| `frontend/src/` | SPA React |
| `resources/views/app.blade.php` | Shell HTML que carga Vite |
| `routes/api.php` | API REST |
| `lang/` | Traducciones (es/en) |

## Google Cloud

1. Proyecto con facturación habilitada (según políticas de Google).
2. Buckets y permisos de la cuenta de servicio para **Storage** y **Speech-to-Text**.
3. Archivo JSON en `storage/app/`; en `.env`, `GOOGLE_CREDENTIAL` sin rutas absolutas (solo nombre de archivo dentro de `storage/app`).

## Empaquetado para el comprador (Envato)

- Script automático (ZIP en `dist/`; requiere **Python 3**): `./scripts/package-envato.sh` (ver `./scripts/package-envato.sh --help`).
- No incluya `.env`, `node_modules`, `vendor`, ni claves JSON reales.
- Ejecute `npm run build` antes de generar el ZIP o deje instrucciones para `composer install` y `npm ci && npm run build`.
- Revise permisos de escritura en `storage`, `bootstrap/cache` y `public/uploads/avatars` en el servidor.

## Licencia del código

El código de este producto se distribuye bajo la licencia que indique el autor en la ficha de Envato. Laravel y paquetes de terceros conservan sus propias licencias.
