> For the complete documentation index, see [llms.txt](https://docs.skail.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.skail.dev/construir/padroes-e-antipadroes.md).

# Padrões e antipadrões

O que fazer e o que não fazer em código skail, com o motivo de cada regra. Comece pelos padrões recomendados e pela tabela de antipadrões; os demais são receitas prontas para situações recorrentes.

* [Padrões recomendados](/construir/padroes-e-antipadroes/padroes-recomendados.md). Onze regras que fazem um fluxo skail ser previsível em produção. Cada uma existe por causa de um mecanismo do produto (replay, memoização, retry, correlação de eventos), e a razão está escrita ao lado.
* [Antipadrões: o que não fazer e por quê](/construir/padroes-e-antipadroes/antipadroes-o-que-nao-fazer-e-por-que.md). Os erros mais comuns em código skail, agrupados pelo mecanismo que eles quebram. Cada item traz o sintoma, a causa e a correção. Se você chegou aqui por uma `SkailNonDeterministicException`, comece pelo primeiro grupo.
* [Saga](/construir/padroes-e-antipadroes/saga.md). Como coordenar várias operações em sistemas diferentes, cada uma com sua compensação, usando uma `[SkailFunction]` como orquestrador e `[SkailCommand]`s memoizados como etapas: se uma etapa falha, as anteriores são desfeitas em ordem inversa, mesmo que o fluxo tenha ficado dias hibernado no meio.
* [Fan-out / Fan-in](/construir/padroes-e-antipadroes/fan-out-fan-in.md). Disparar N operações ao mesmo tempo (fan-out) e juntar o resultado quando todas terminarem (fan-in). No skail, cada operação é uma `[SkailFunction]` ou um `[SkailCommand]` chamado dentro de um `WhenAll`, com a própria vida durável.
* [Human-in-the-loop](/construir/padroes-e-antipadroes/human-in-the-loop.md). Processos que precisam de uma pessoa no meio do caminho: o reembolso aprovado pelo gerente, o documento revisado pelo jurídico, a transação acima do limite liberada pelo compliance. O tempo de resposta de uma pessoa é o oposto do tempo de um sistema, e no skail isso é um `WaitForEvent` com prazo no meio da function.
* [Debounce / Aggregator](/construir/padroes-e-antipadroes/debounce-aggregator.md). Acumular eventos por uma janela e agir uma vez, em vez de reagir a cada um. No skail, o mecanismo inteiro é um laço de `WhenAny` entre um `WaitForEvent` e um `Delay`, e o estado da acumulação é uma variável local da function.
* [Timeout e prazo](/construir/padroes-e-antipadroes/timeout-e-prazo.md). Toda espera tem um prazo, e o que acontece quando ele vence é decisão de negócio escrita na function. Este padrão reúne as variações: prazo fixo, prazo em data, prazo que já venceu na retomada, lembrete antes de vencer, e prazo para um command lento.
* [Polling de sistema externo](/construir/padroes-e-antipadroes/polling-de-sistema-externo.md). Consultar um sistema que não avisa quando termina: sem webhook, sem evento, só uma API de status. O padrão é um laço com um command que consulta, um `Delay` crescente entre consultas e um limite de tentativas, tudo durável.
* [Régua de lembretes](/construir/padroes-e-antipadroes/regua-de-lembretes.md). Uma sequência de mensagens em datas definidas (três dias antes do vencimento, no dia, três dias depois), cancelada assim que o que se espera acontece (o pagamento). No skail é uma function com uma espera e vários prazos.
* [Checklist de revisão de código skail](/construir/padroes-e-antipadroes/checklist-de-revisao-de-codigo-skail.md). Para colar no template de pull request. Cada item aponta para a página que explica o porquê. Marque tudo antes de aprovar um fluxo que vai para produção.
