# Pipeline de Provision — Estado y Gaps

> Ultima actualizacion: 2026-03-30

---

## Los 2 caminos de provision

### Camino A: `bewpro:provision` (JSON clasico)

```bash
php artisan bewpro:provision database/seeders/project-data/provision-mi-proyecto.json
```

**Cuando usarlo:** Proyecto custom donde el reseller (CD) define demo + modulos + contacto + branding.

**El JSON incluye:** name, db_name, demo, modules, skin, fonts, contact, social_media, header (CTA), users, schema_type.

**Seeds:** Usa contenido de `defaults/` (generico). NO carga seeds por industria automaticamente.

### Camino B: `bewpro:new` (por producto)

```bash
php artisan bewpro:new email@cliente.com "Nombre" insurance-advisor --db=bp-mi-proyecto
```

**Cuando usarlo:** Producto estandar del catalogo. El core define todo (demo, modulos, nav, fonts).

**Seeds:** Carga automaticamente los seeds del core (`core/seeds/faqs-{core}.json`, etc.).

---

## Comparacion detallada

| Aspecto | bewpro:provision | bewpro:new |
|---------|-----------------|------------|
| Input | JSON completo | email + titulo + slug |
| Demo | Del JSON | Del core preset |
| Modulos | Del JSON | Del core preset |
| Skin | Del JSON (`skin` field) | Del core preset (`auto` por default) |
| Fonts | Del JSON | Del core preset |
| Contact/Social | Del JSON (completo) | Minimal (solo email) |
| Seeds | Genericos de `defaults/` | **Especificos del core** (faqs, services, blog) |
| Assets | Sube si hay archivos | Mismo mecanismo |
| CTA Header | Del JSON | Del core preset |
| Email | No | Si (credenciales al admin) |
| Ideal para | Reseller (CD) personalizando | Venta automatizada (BewPro) |

---

## Bug critico corregido (2026-03-30)

### Seeds sobreescritos por defaults

**Problema:** `bewpro:new` copiaba los seeds del core a `project-data/`, pero despues `stepInstallContentDefaults()` los sobreescribia con los defaults genericos. El contenido por industria nunca llegaba a la DB.

**Fix:** Se agrego `$presetContentFiles` array en `ProvisionProject.php`. Cuando `ProvisionNew::writePresetContentJson()` coloca un seed, marca el archivo. `stepInstallContentDefaults()` ahora verifica esta lista y no sobreescribe archivos marcados.

**Archivos modificados:**
- `app/Console/Commands/ProvisionProject.php` — `$presetContentFiles` + skip logic
- `app/Console/Commands/ProvisionNew.php` — marca archivos al copiarlos

**Verificado:** Provision de `insurance-advisor` carga 10 FAQs de seguros + 5 servicios de seguros (contenido especifico, no generico).

---

## Gaps pendientes (no criticos)

### 1. Service categories no se crean con el seeder

El seed JSON define `service_categories` pero el seeder de services parece no procesarlas (0 categories en DB). Los servicios se crean correctamente pero sin categoria. **Impacto:** Bajo — los servicios se muestran, solo falta agrupacion por categoria.

### 2. Seeds solo cubren 3 modulos (faqs, services, blog)

Modulos como gallery, menu, products, projects, team, references no tienen seeds por core. Estos se provisionan vacios — el admin los carga despues.

**Impacto:** Medio — el sitio funciona pero estas secciones estan vacias hasta que el admin suba contenido.

### 3. Assets requieren paso manual

Tanto `bewpro:provision` como `bewpro:new` necesitan que el reseller:
1. Dropee los assets del cliente en `cd-project/assets/`
2. Corra `AssetsSeeder` (o no use `--skip-assets`)

**No hay assets default por producto.** Si no hay archivos, el sitio queda sin logo.

### 4. Cloudinary requerido para assets en produccion

Si Cloudinary no esta configurado, los assets se guardan con paths locales que no funcionan en servidor. El seeder no advierte sobre esto.

### 5. `bewpro:new` genera site data minimal

No pide tagline, description, keywords, social media. El sitio queda con campos vacios hasta que el admin los complete desde `/admin`.

---

## Proceso completo recomendado

### Para reseller (Compania Digital):

```bash
# 1. Preparar provision JSON con todos los datos del cliente
#    (usar provision-prueba1.json como template)

# 2. Generar skin custom si hay colores de marca
php artisan bewpro:skin --from-demo=insurance --primary=#003366 --output=skin-mi-proyecto.css

# 3. Dropear assets del cliente
cp ~/assets-cliente/* public/cd-project/assets/

# 4. Provisionar
php artisan bewpro:provision database/seeders/project-data/provision-mi-proyecto.json

# 5. Verificar
# Cambiar .env DB_DATABASE=bp-mi-proyecto, limpiar cache, abrir browser
```

### Para venta automatizada (BewPro):

```bash
# 1. Cliente compra producto en bewpro.com (ej: insurance-advisor)

# 2. Webhook/sistema provisiona automaticamente
php artisan bewpro:new cliente@email.com "Nombre Empresa" insurance-advisor --skip-assets

# 3. Cliente recibe email con credenciales

# 4. Cliente sube sus assets desde /admin (futuro)
```
