> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gu1.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Sinergia

> Qué disparadores permiten qué acciones y qué acciones pueden ir inmediatamente después—mismas reglas que API y Workflow Builder. Consulta el esquema del.

El producto aplica **sinergia** para mantener las automatizaciones válidas:

1. **Disparador → acción:** si una acción está en **`ALLOWED_TRIGGERS_BY_ACTION`**, solo esos triggers pueden usarla.
2. **Acción → siguiente acción:** si una acción está en **`ALLOWED_NEXT_ACTIONS`**, solo las acciones listadas pueden ir **inmediatamente después** en la secuencia ordenada (pasos o recorrido del grafo).

Si una acción **no** figura en esos mapas (o no hay entrada), el comportamiento por defecto es **permisivo**: cualquier trigger y casi cualquier siguiente acción.

<Info>
  **Fuente de verdad:** `packages/shared/src/workflow-synergy.ts` (`ALLOWED_TRIGGERS_BY_ACTION`, `ALLOWED_NEXT_ACTIONS`). La API y la UI usan la misma validación.
</Info>

## Regla 1 — Triggers permitidos por acción

| Acción                                                                             | Triggers permitidos                                                                                                                                                                                                                                               |
| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `create_investigation`                                                             | `alert_created`, `rule_triggered`                                                                                                                                                                                                                                 |
| `generate_checklist`, `assign_to`, `add_note`                                      | `alert_created`, `investigation_created`, `investigation_status_changed`, `investigation_updated`                                                                                                                                                                 |
| `start_investigation`, `change_status`, `change_priority`, `set_stage_role_access` | `investigation_created`, `investigation_status_changed`, `investigation_updated`                                                                                                                                                                                  |
| `set_entity_status`, `run_risk_matrix`                                             | `entity_created`, `create_entity_flow`, `alert_created`, `investigation_created`, `investigation_status_changed`, `investigation_updated`, `transaction_created`, `rule_triggered`, `kyc_approved`, `kyc_rejected`, `kyc_validation_finished`, `manual_execution` |
| `run_basic_enrichment`                                                             | `manual_execution`, `entity_created`, `create_entity_flow`                                                                                                                                                                                                        |
| `run_enrichment`, `run_shareholders_flow`                                          | `entity_created`, `create_entity_flow` (`run_shareholders_flow` también admite `manual_execution`)                                                                                                                                                                |
| `create_kyc_validation`                                                            | `entity_created`, `create_entity_flow`, `alert_created`, `rule_triggered`, `kyc_approved`, `kyc_rejected`, `kyc_validation_finished`, `manual_execution`                                                                                                          |
| `request_transaction_approval`, `set_transaction_status`                           | `transaction_created`, `rule_triggered`, `manual_execution`, `scheduled`                                                                                                                                                                                          |

**Por defecto permisivo:** `send_webhook`, `send_push_notification`, `create_alert` y cualquier acción **no listada** aceptan **cualquier** trigger.

**Nota:** `scheduled` **no** está en la lista de `set_entity_status`, `run_risk_matrix`, `run_enrichment`, `create_kyc_validation`, etc. Diseñá automatizaciones programadas solo con acciones permitidas para `scheduled`.

## Regla 2 — Siguiente acción inmediata

Solo se valida el par **inmediato**. En **grafos**, el motor ordena las acciones (p. ej. BFS desde el trigger) y valida los mismos pares.

| Acción previa                                                                                                                    | Puede ir seguida inmediatamente por                                                                                                                                                                 |
| -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_enrichment`                                                                                                                 | `run_risk_matrix`, `set_entity_status`, `create_alert`, `send_webhook`, `send_push_notification`, `create_kyc_validation`                                                                           |
| `run_basic_enrichment`                                                                                                           | `run_shareholders_flow`, `run_risk_matrix`, `set_entity_status`, `create_alert`, `send_webhook`, `send_push_notification`, `create_kyc_validation`                                                  |
| `run_shareholders_flow`                                                                                                          | `run_risk_matrix`, `set_entity_status`, `create_alert`, `send_webhook`, `send_push_notification`, `create_kyc_validation`                                                                           |
| `run_risk_matrix`                                                                                                                | `set_entity_status`, `create_alert`, `send_webhook`, `send_push_notification`, `create_kyc_validation`                                                                                              |
| `set_entity_status`                                                                                                              | `run_risk_matrix`, `create_alert`, `send_webhook`, `send_push_notification`, `create_kyc_validation`                                                                                                |
| `create_alert`                                                                                                                   | `send_webhook`, `send_push_notification`, `create_investigation`                                                                                                                                    |
| `create_kyc_validation`                                                                                                          | `set_entity_status`, `create_alert`, `send_webhook`, `send_push_notification`, `run_risk_matrix`                                                                                                    |
| `create_investigation`                                                                                                           | `assign_to`, `add_note`, `change_status`, `change_priority`, `set_stage_role_access`, `send_webhook`, `send_push_notification`, `generate_checklist`, `start_investigation`                         |
| `set_stage_role_access`                                                                                                          | `assign_to`, `assign_load_balanced`, `add_note`, `change_status`, `change_priority`, `start_investigation`, `set_stage_role_access`, `send_webhook`, `send_push_notification`, `generate_checklist` |
| `start_investigation`, `change_status`, `change_priority`, `assign_to`, `assign_load_balanced`, `add_note`, `generate_checklist` | `assign_to`, `assign_load_balanced`, `add_note`, `change_status`, `change_priority`, `set_stage_role_access`, `send_webhook`, `send_push_notification`, `generate_checklist`                        |
| `request_transaction_approval`                                                                                                   | `set_transaction_status`, `send_webhook`, `send_push_notification`                                                                                                                                  |
| `set_transaction_status`                                                                                                         | `request_transaction_approval`, `send_webhook`, `send_push_notification`                                                                                                                            |

**Por defecto permisivo:** si una acción **no** está en la tabla, puede seguir **cualquier** acción.

## Cadenas típicas (ejemplos)

* **Onboarding:** `run_enrichment` → `run_risk_matrix` → `set_entity_status` → `create_alert` / `create_kyc_validation`.
* **Alerta:** `create_investigation` → `assign_to` → `change_status` → `send_webhook`.
* **Pagos:** `request_transaction_approval` → `set_transaction_status` → `send_webhook`.

Los errores al guardar suelen indicar **trigger ↔ acción** o **acción → siguiente** inválidos.

***

**Mantenimiento:** cambios de sinergia en código → primero `workflow-synergy.ts`, luego esta página.
