# Códigos de Resposta e Erro

Esta página resume como o SDK representa os resultados das operações e as condições de erro. Todas as chamadas de repositório retornam um wrapper `RepositoryResult<T>` que obriga você a tratar o sucesso e a falha explicitamente.

## RepositoryResult&lt;T>

`RepositoryResult<T>` é uma sealed class Kotlin com as seguintes ramificações:

- **Success&lt;T>**: A chamada foi concluída com sucesso.
  - Contém um payload `data: T` (por exemplo, `PaymentResult`, `RefundResult`, `TpvInfo`, `TotalsResult`, etc.).
- **ConnectionError**: Ocorreu um problema de comunicação.
  - Causas típicas: o Get Smart SDK Payment Service não está em execução, o dispositivo está offline ou há um problema de conectividade com o host.
- **Cancelled**: A operação foi cancelada.
  - Geralmente indica que o usuário abortou um fluxo interativo na interface (UI) do TPV. Inclui uma `message` legível por humanos.
- **ProtocolError**: A requisição não pôde ser processada devido a um problema de integração ou mapeamento.
  - Inclui um `type: ProtocolErrorType` e uma `description` opcional.

Para padrões de tratamento idiomático e exemplos, consulte **`Conceitos Principais / Tratar Respostas e Erros`**.

## ProtocolErrorType

Quando você recebe `RepositoryResult.ProtocolError`, o campo `type` é um dos seguintes valores (veja também o **Glossário de Modelos de Dados**):

- **`MAPPING_DATA`**: Erro interno ao mapear os dados entre o SDK e o serviço em segundo plano (background service).
  - Ação: geralmente indica um estado inesperado; capture os logs e entre em contato com o suporte se o problema persistir.
- **`MAPPING_DOMAIN`**: Há algo de errado com os dados que seu aplicativo enviou.
  - Ação: valide parâmetros como valores, moedas e identificadores.
- **`TPV_NOT_INITIALIZED`**: Um erro crítico de configuração.
  - Ação: certifique-se de que `InitializationRepository.initTpv()` foi chamado com sucesso antes de realizar operações como pagamentos, estornos ou consultas de histórico.

## Resultados em Nível de Negócio

Muitas chamadas bem-sucedidas ainda exigem que você verifique um **resultado de negócio** (business result) dentro do payload:

- Operações de pagamento, estorno e pré-autorização retornam tipos de resultados selados (sealed result types) como `PaymentResult`, `RefundResult` e `PreauthorizationResult`, que distinguem:
  - Operações **Accepted** (autorizadas pelo host, com um payload `Transaction`).
  - Operações **Denied** (rejeitadas pelo host/banco, com um payload `Transaction` explicativo).
  - Erros de domínio específicos (por exemplo, `RefundResult.ExceededAmount`).
- Consultas de histórico e totais retornam estruturas como `GetTransactionsResult` ou `TotalsResult` que indicam se há dados, mais páginas ou identificadores inválidos.

<Callout type="warning">

Sempre inspecione tanto o `RepositoryResult<T>` externo quanto o resultado de domínio interno para decidir o que mostrar na sua interface (UI) e quando tentar novamente ou escalar erros.

</Callout>