# Fluxos de integração

O SDK expõe quatro flows públicos. Eles cobrem os cenários principais de sincronização e transferência de dados.

## Tabela rápida

| Flow                          | Quando usar                                  | Métodos centrais                                                                                                                            |
| ----------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `NoDeltaIntegrationFlow`      | envio unidirecional sem comparação de estado | `loadSourceSystemData()`, `sendData()`, `defineMetadata()`                                                                                  |
| `NoDeltaBatchIntegrationFlow` | envio unidirecional em lote                  | `loadSourceSystemData()`, `sendDataInBatch()`, `defineMetadata()`                                                                           |
| `DeltaIntegrationFlow`        | reconciliação com insert, update e delete    | `loadSourceSystemData()`, `loadTargetSystemData()`, `insertAction()`, `updateAction()`, `deleteAction()`, `defineMetadata()`                |
| `BatchDeltaIntegrationFlow`   | reconciliação em lote                        | `loadSourceSystemData()`, `loadTargetSystemData()`, `batchInsertAction()`, `batchUpdateAction()`, `batchDeleteAction()`, `defineMetadata()` |

## 1. NoDeltaIntegrationFlow

Use quando a automação apenas coleta dados de uma origem e envia para um destino, sem comparar estado anterior.

Métodos centrais:

* `loadSourceSystemData()`
* `sendData()`
* `defineMetadata()`

## 2. NoDeltaBatchIntegrationFlow

Use quando o comportamento continua sendo no-delta, mas o volume pede agrupamento.

Métodos centrais:

* `loadSourceSystemData()`
* `sendDataInBatch()`
* `defineMetadata()`

## 3. DeltaIntegrationFlow

Use quando você precisa comparar origem e destino para identificar:

* inserts;
* updates;
* deletes.

Métodos centrais:

* `loadSourceSystemData()`
* `loadTargetSystemData()`
* `insertAction()`
* `updateAction()`
* `deleteAction()`
* `defineMetadata()`

## 4. BatchDeltaIntegrationFlow

Use quando o modelo delta precisa operar com maior volume e chamadas em lote.

Métodos centrais:

* `loadSourceSystemData()`
* `loadTargetSystemData()`
* `batchInsertAction()`
* `batchUpdateAction()`
* `batchDeleteAction()`
* `defineMetadata()`

## Key fields e delta fields

Nos flows delta, você define:

* **key fields** para identificar unicamente um registro;
* **delta fields** para detectar alterações relevantes.

Na prática, `keyFields` define identidade e `deltaFields` define o que conta como mudança relevante.

## Persistência de estado

Os flows delta usam os recursos internos do SDK para persistir o estado anterior da execução. Isso permite comparar snapshots e reduzir lógica manual dentro da integração.

## Metadados

`defineMetadata()` controla como os dados aparecerão no monitoramento.

Boas práticas:

* use labels compreensíveis para operação;
* não use `Action`, `Status` ou `Message` como `fieldLabel`;
* escolha o `fieldType` correto para melhorar filtros e visualização.

## 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.

Para uma visão mais orientada a cenários, consulte [Como escolher um flow](/sdk/choosing-a-flow.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/integration-flows.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.
