# 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](https://docs.tunnelhub.io/sdk/choosing-a-flow).
