# Notion -> Google Forms Playbook

> Compania Digital | Captura de datos optimizada por modulos
> Revision: 2026-03-24

---

## 1) Objetivo

Definir un flujo operativo donde:

- `Clientes 1` centraliza el estado del cliente y la solicitud de formulario.
- `Checklist nuevo proyecto` define modulos activos y requisitos minimos.
- Al pasar a `Data Pending`, se genera automaticamente un Google Form optimizado.
- El formulario se diseña con plantillas separadas para evitar ruido.

---

## 2) Modelo recomendado en Notion

### Base: `Clientes 1`

Propiedades minimas sugeridas:

- `Name` (title): nombre interno del cliente/proyecto.
- `FormStatus` (select): `Draft`, `Generated`, `Sent`, `Answered`, `Validated`, `Blocked`.
- `PipelineStatus` (select): `Lead Intake`, `Scoping`, `Data Pending`, `Ready for Provision`, `Provisioned`.
- `ProjectType` (select): `corporate-site`, `restaurant`, `catalogue`, `agency`, `other`.
- `ProvisionTitle` (rich_text): valor final para `title` de `bewpro:new`.
- `ProvisionEmail` (email): valor final para `email` de `bewpro:new`.
- `ProvisionProductSlug` (select): valor final para `product` de `bewpro:new`.
- `ProvisionUrl` (url, opcional): URL objetivo para provision.
- `ClientIntakeFormUrl` (url): URL publica del Google Form generado.
- `Checklist` (relation): relacion hacia `Checklist nuevo proyecto`.
- `ActiveModules` (rollup): modulos activos desde checklist.
- `OpenMustCount` (rollup): cantidad de items `Must` pendientes.
- `ReadyForProvision` (formula): `true` solo cuando minimos + checklist estan completos.

Formula sugerida para `ReadyForProvision`:

```
and(
  not empty(prop("ProvisionTitle")),
  not empty(prop("ProvisionEmail")),
  not empty(prop("ProvisionProductSlug")),
  prop("OpenMustCount") == 0,
  prop("FormStatus") == "Validated"
)
```

### Base: `Checklist nuevo proyecto`

Estructura 1 fila = 1 requisito:

- `CheckItem` (title)
- `Client` (relation -> `Clientes 1`)
- `Module` (select): `base`, `assets`, `faqs`, `blog`, `gallery`, `menu`, `news`, `products`, `projects`, `team`
- `Criticality` (select): `Must`, `Should`
- `Status` (select): `Pending`, `In Progress`, `Blocked`, `Done`
- `EvidenceUrl` (url)
- `RequiredForForm` (checkbox)
- `BlockProvision` (formula): `prop("Criticality") == "Must" and prop("Status") != "Done"`

---

## 3) Estrategia de formularios (plantillas separadas)

Se usan plantillas separadas para minimizar cantidad de preguntas:

1. `base-intake-v1` (siempre)
2. `corporate-site-v1`
3. `restaurant-v1`
4. `catalogue-v1`
5. `agency-v1`

En cada plantilla:

- Seccion base obligatoria (datos minimos de provision).
- Secciones modulares opcionales agregadas solo si el checklist marca modulo activo.
- Repeticion limitada (minimo viable): pedir 3 elementos por bloque y luego "agregamos mas en fase 2".

---

## 4) Flujo por estado (status-based trigger)

Trigger recomendado:

- Cuando `Clientes 1.PipelineStatus` cambia a `Data Pending`.

Proceso:

1. Leer cliente desde Notion.
2. Validar que tenga `ProjectType`.
3. Calcular modulos activos desde checklist.
4. Seleccionar plantilla.
5. Crear Google Form y secciones modulares.
6. Guardar URL en `ClientIntakeFormUrl`.
7. Mover `FormStatus` a `Generated` (o `Sent` si ya se notifica al cliente).

Transiciones sugeridas:

- `Draft` -> `Generated` -> `Sent` -> `Answered` -> `Validated`
- `Blocked` cuando falta un dato bloqueante o hay inconsistencia.

---

## 5) Criterios de optimizacion

- Objetivo: entre 12 y 18 preguntas visibles en casos tipicos.
- Solo obligatorio lo que bloquea provision: `title`, `email`, `product`.
- El resto se marca como recomendado y editable luego en admin.
- Para bloques de contenido, usar formato guiado en texto largo (reduce friccion).

---

## 6) Mapeo rapido a provision minima

Campos minimos para ejecutar:

- `ProvisionEmail` -> argumento `email`
- `ProvisionTitle` -> argumento `title`
- `ProvisionProductSlug` -> argumento `product`
- `ProvisionUrl` -> opcion `--url` (opcional)

Referencia del comando:

`app/Console/Commands/ProvisionNew.php`

---

## 7) Archivos de implementacion

Este playbook se implementa con:

- `scripts/notion-google-forms/google-apps-script.js`
- `scripts/notion-google-forms/form_blueprints.json`
- `scripts/notion-google-forms/module_question_bank.json`
- `scripts/notion-google-forms/response_contract.schema.json`
- `scripts/notion-google-forms/notion_trigger_payload.example.json`

---

## 8) Proximo paso operativo

1. Cargar `form_blueprints.json` y `module_question_bank.json` en el script.
2. Configurar IDs de base Notion y token en Script Properties.
3. Probar con un cliente sandbox pasando a `Data Pending`.
4. Validar que se guarde `ClientIntakeFormUrl` y cambie `FormStatus`.
