# Como escolher um flow

O SDK público expõe quatro classes base para automações. A escolha certa depende menos do sistema de origem e mais de como você quer comparar, agrupar e publicar dados.

## Visão rápida

| Flow                          | Quando usar                                                | Pergunta-chave                                        |
| ----------------------------- | ---------------------------------------------------------- | ----------------------------------------------------- |
| `NoDeltaIntegrationFlow`      | envio unidirecional sem comparação de estado               | "eu só preciso ler e enviar?"                         |
| `NoDeltaBatchIntegrationFlow` | envio unidirecional em alto volume                         | "eu preciso processar em lotes?"                      |
| `DeltaIntegrationFlow`        | comparação de origem e destino com insert, update e delete | "eu preciso reconciliar estados?"                     |
| `BatchDeltaIntegrationFlow`   | delta com processamento em lote                            | "eu preciso reconciliar estados e agrupar operações?" |

## `NoDeltaIntegrationFlow`

Use quando a automação apenas lê uma origem e executa uma ação de saída, sem comparar snapshots anteriores.

Cenários comuns:

* envio de eventos para API externa;
* exportação simples para data lake;
* processamento disparado por payload de webhook.

## `NoDeltaBatchIntegrationFlow`

Use quando o cenário continua sendo unidirecional, mas o volume pede agrupamento para reduzir custo, chamadas externas ou tempo de processamento.

Esse flow costuma fazer sentido quando:

* o destino aceita operações em lote;
* o custo por request é relevante;
* o volume por execução é alto.

## `DeltaIntegrationFlow`

Use quando a automação precisa comparar origem e destino para decidir entre:

* insert;
* update;
* delete.

Esse é o flow certo para sincronizações clássicas entre sistemas com reconciliação de estado.

Geralmente, ele pede uma modelagem clara de:

* `keyFields` para identidade do registro;
* `deltaFields` para comparação de mudança;
* ações de insert, update e delete.

## `BatchDeltaIntegrationFlow`

Use quando o cenário é delta, mas o volume exige batching.

Ele combina a lógica de reconciliação com operações agrupadas no destino, o que costuma ser útil em integrações com:

* APIs bulk;
* pipelines analíticos;
* sistemas com custo alto por operação individual.

## Regras práticas de decisão

* se não existe comparação entre origem e destino, comece por **No delta**;
* se existe comparação, comece por **Delta**;
* só vá para as versões **batch** quando houver ganho claro de volume, custo ou throughput;
* não escolha batch apenas por antecipação: a implementação e o troubleshooting tendem a ficar mais complexos.

## Exemplos de cenários

* **Webhook que recebe nota emitida e grava em banco**: `NoDeltaIntegrationFlow`
* **Exportação diária de pedidos para lake**: `NoDeltaBatchIntegrationFlow`
* **Sincronização de usuários entre HR e ERP**: `DeltaIntegrationFlow`
* **Sincronização massiva de catálogo entre duas bases**: `BatchDeltaIntegrationFlow`

## Depois da escolha

Depois de escolher o flow:

1. modele `defineMetadata()` com foco no monitoramento;
2. externalize parâmetros e sistemas no produto;
3. valide se precisa de Tabelas De/Para ou Sequências;
4. planeje build e deploy com `tunnelhub.yml`.

Consulte também [Fluxos de integração](/sdk/integration-flows.md) e [Helpers de plataforma](/sdk/platform-services.md).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.tunnelhub.io/sdk/choosing-a-flow.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
