# SDK Barte para maquininhas POS

## Visão Geral

O **Barte SDK** permite que aplicativos Android realizem transações em terminais POS de forma simples e segura.

\
Com ele, é possível iniciar, confirmar, listar, estornar e reimprimir pagamentos, além de acessar informações do terminal e configurar preferências de integração.

***

## 1. Instalação do SDK

### 1.1 Dependências necessárias

Antes de utilizar o SDK, é necessário seguir com a instalação dependências necessárias para que o projeto funcione:

```
implementation("com.jakewharton.threetenabp:threetenabp:1.0.5")
```

### 1.2 Instalação do SDK

A integração é feita via `.aar` disponibilizado pela Barte.\
Inclua o arquivo `barte_payment_pos-<versão>.aar` dentro da pasta `libs/` do seu módulo Android.

```
implementation(files("libs/barte_payment_pos-1.0.0.0.aar"))
```

**Atenção**:

* Substitua `1.0.0.0` pela versão correspondente do SDK.

***

## 2. Inicialização do SDK

Antes de usar qualquer funcionalidade, é necessário inicializar o SDK.

<table><thead><tr><th width="170.2987060546875">Nome</th><th width="121.337646484375">Tipo</th><th width="122.486083984375">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>context</code></td><td>Context</td><td>✅</td><td>Use <code>applicationContext</code>.</td></tr><tr><td><code>applicationId</code></td><td>String</td><td>✅</td><td>ID da aplicação fornecido pela Phoebus.</td></tr><tr><td><code>secretToken</code></td><td>String</td><td>✅</td><td>Token secreto associado ao <code>applicationId</code>.</td></tr><tr><td><code>softwareVersion</code></td><td>String</td><td>✅</td><td>Versão do seu app para identificação e auditoria.</td></tr></tbody></table>

```
// Exemplo de implementação

BarteSDK.initialize(
    applicationContext,
    applicationId = "SEU_APP_ID",
    secretToken = "SEU_SECRET_TOKEN",
    softwareVersion = "SEU_SOFTWARE_VERSION"
)
```

{% hint style="info" %}
Inicializa o SDK. Deve ser chamado **uma única vez** no ciclo de vida do app.
{% endhint %}

Para recuperar a instância em qualquer parte do app:

```
val barte = BarteSDK.getInstance()
```

***

## 3. Utilização do SDK

### 3.1 Configurações

### Definição de tema de aplicação

<table><thead><tr><th width="110.95306396484375">Nome</th><th width="270.9534912109375">Tipo</th><th width="123.2742919921875">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>theme</code></td><td><code>String</code></td><td>✅</td><td>Nome do tema a ser aplicado. Veja em <a href="#bartetheme"><code>BarteTheme</code></a></td></tr><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;Unit>) -> Unit</code></td><td>✅</td><td>Função de retorno que será chamada com o resultado da operação.</td></tr></tbody></table>

```
// Exemplo de implementação

barte.setTheme(BarteTheme.RED.themeName) { result ->
    when (result) {
        is BarteResult.Success -> {
            println("Tema aplicado com sucesso: ${BarteTheme.RED}")
        }
        is BarteResult.Error -> {
            val msg = buildString {
                append(result.message ?: "Falha ao aplicar tema")
                result.acquirerCode?.let { append(" • Adquirente: $it") }
                result.sdkCode?.let { append(" • Código: $it") }
            }
            println(msg)
        }
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="99.75">Caso</th><th>Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(Unit)</code></td><td>Indica que a configuração de tema do aplicativo foi aplicada com sucesso.</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

### Definição de aplicação principal

#### Descrição

Define o pacote principal do app que controlará a experincia no terminal.

<table><thead><tr><th width="135.3125">Nome</th><th width="274.33984375">Tipo</th><th width="126.0546875">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>packageName</code></td><td>String</td><td>✅</td><td>Nome do pacote Android do seu app.</td></tr><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;Unit>) -> Unit</code></td><td>✅</td><td>Retorno assíncrono do resultado.</td></tr></tbody></table>

```
// Exemplo de implementação

barte.setMainApp("com.seu.app") { result ->
    when (result) {
        is BarteResult.Success -> println("MainApp definido.")
        is BarteResult.Error   -> println("Erro: ${result.message}")
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="101.91015625">Caso</th><th>Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(Unit)</code></td><td>Indica que a configuração do aplicativo principal foi aplicada com sucesso.</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

### Verificar tema da aplicação

#### Descrição

Obtém o tema atualmente configurado.

<table><thead><tr><th width="101.6640625">Nome</th><th width="305.51171875">Tipo</th><th width="122.1015625">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;String>) -> Unit</code></td><td>✅</td><td>Retorno assíncrono.</td></tr></tbody></table>

```
// Exemplo de implementação

barte.getTheme { result ->
    when (result) {
        is BarteResult.Success -> {
            val themeEnum = BarteTheme.fromName(result.data)
            if (themeEnum != null) {
                println("Tema atual: $themeEnum") // exibe "RedTheme"
            } else {
                println("Tema atual desconhecido: ${result.data}")
            }
        }
        is BarteResult.Error -> {
            println("Erro ao consultar tema: ${result.message}")
        }
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="111.671875">Caso</th><th>Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(String)</code></td><td>Nome do tema configurado no SDK (ex.: <code>"dark"</code>, <code>"light"</code>, <code>"default"</code>).</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

***

### 3.2 Terminal

### Verificar dados de terminal

#### Descrição

Retorna os dados do terminal como `TerminalInfo` .

<table><thead><tr><th width="100.86328125">Nome</th><th width="342.453125">Tipo</th><th width="121.61328125">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;</code><a href="#terminalinfo"><code>TerminalInfo</code></a><code>>) -> Unit</code></td><td>✅</td><td>Retorno assíncrono.</td></tr></tbody></table>

```
// Exemplo de implementação

barte.getTerminalInfo { result ->
    when (result) {
        is BarteResult.Success -> {
            val info = result.data
            println("Terminal: ${info.terminalId} • Merchant: ${info.merchantName}")
        }
        is BarteResult.Error -> println("Erro: ${result.message}")
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="93.37890625">Caso</th><th width="328.51171875">Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(TerminalInfo)</code></td><td>Objeto <a href="#terminalinfo"><code>TerminalInfo</code></a> contendo todos os dados do terminal (merchantId, terminalId, endereço, moeda, etc.).</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

***

### 3.3 Pagamentos - Escrita

### Iniciar uma transação

#### Descrição

Inicia uma transação com o status pendente, essa transação poderá ser confirmada com o método `confirmTransaction` .

<table><thead><tr><th width="94.3671875">Nome</th><th width="359.74609375">Tipo</th><th width="124.96484375">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>req</code></td><td><a href="#transactionrequest-request"><code>TransactionRequest</code></a></td><td>✅</td><td><strong>TransactionRequest</strong></td></tr><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;</code><a href="#bartepayment"><code>BartePayment</code></a><code>>) -> Unit</code></td><td>✅</td><td>Retorno assíncrono.</td></tr></tbody></table>

```
// Exemplo de implementação

val req = TransactionRequest(
    value = "100.00".toBigDecimal(),
    paymentTypes = listOf(BartePaymentType.CREDIT),
    installments = 1,
    appTransactionId = "ORDER-123"
)

barte.startTransaction(req) { result ->
    when (result) {
        is BarteResult.Success -> println("Iniciado: ${result.data.paymentId}")
        is BarteResult.Error   -> println("Erro: ${result.message}")
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="89.4765625">Caso</th><th>Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(</code><a href="#bartepayment"><code>BartePayment</code></a><code>)</code></td><td>Objeto <a href="#bartepayment"><code>BartePayment</code></a> com os dados completos da transação confirmada (valor, status, cartão, adquirente etc.).</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

### Confirmar uma transação

#### Descrição

Confirma uma transação gerada como pendente.

<table><thead><tr><th width="113.02734375">Nome</th><th>Tipo</th><th width="124.75390625">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>paymentId</code></td><td><code>String</code></td><td>✅</td><td>Id da transação</td></tr><tr><td><code>callback</code></td><td>(<a href="#barteresult-less-than-t-greater-than">BarteResult</a>&#x3C;Unit>) -> Unit</td><td>✅</td><td>Retorno assíncrono.</td></tr></tbody></table>

```
// Exemplo de implementação

val paymentId = SEU_PAYMENT_ID

barte.confirmTransaction(paymentId) { result ->
    when (result) {
        is BarteResult.Success -> println("Iniciado: ${result.data}")
        is BarteResult.Error   -> println("Erro: ${result.message}")
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="89.45703125">Caso</th><th>Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(</code><a href="#bartepayment"><code>BartePayment</code></a><code>)</code></td><td>Objeto <a href="#bartepayment"><code>BartePayment</code></a> com os dados completos da transação confirmada (valor, status, cartão, adquirente etc.).</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

### Iniciar uma transação ponta a ponta

#### Descrição

Inicia uma transação de ponta a ponta, essa transação não necessitará de uma confirmação após a tela de impressão de comprovantes.

<table><thead><tr><th width="100.1484375">Nome</th><th width="232.46484375">Tipo</th><th width="125.58984375">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>req</code></td><td><a href="#transactionrequest-request"><code>TransactionRequest</code></a></td><td>✅</td><td>Ver <strong>Tabela:</strong> <a href="#transactionrequest-request"><strong><code>TransactionRequest</code></strong></a></td></tr><tr><td><code>callback</code></td><td>(<a href="#barteresult-less-than-t-greater-than">BarteResult</a>&#x3C;Unit>) -> Unit</td><td>✅</td><td>Retorno assíncrono.</td></tr></tbody></table>

```
// Exemplo de implementação

val req = TransactionRequest(
    value = "100.00".toBigDecimal(),
    paymentTypes = listOf(BartePaymentType.CREDIT),
    installments = 1,
    appTransactionId = "ORDER-123"
)

barte.startTransactionEndToEnd(req) { result ->
    when (result) {
        is BarteResult.Success -> println("Iniciado: ${result.data}")
        is BarteResult.Error   -> println("Erro: ${result.message}")
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="91.1015625">Caso</th><th width="280.36328125">Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(Unit)</code></td><td>Indica que a transação foi iniciada e confirmada com sucesso. Não há payload adicional.</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

### Reimprimir comprovante de pagamento

#### Descrição

Método responsável por realizar a reimpressão de comprovante de pagamento.\
Ao executar a chamada do método, o mesmo abrirá a tela de reimpressão de comprovante.

<table><thead><tr><th width="211.6171875">Nome</th><th width="272.2421875">Tipo</th><th width="118.328125">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>paymentId</code></td><td><code>String</code></td><td>✅</td><td>ID do pagamento a reimprimir.</td></tr><tr><td><code>printMerchantReceipt</code></td><td><code>Boolean</code></td><td>—</td><td>Imprime a via do estabelecimento.</td></tr><tr><td><code>printCustomerReceipt</code></td><td><code>Boolean</code></td><td>—</td><td>Imprime a via do cliente.</td></tr><tr><td><code>previewMerchantReceipt</code></td><td><code>Boolean?</code></td><td>—</td><td>Pré-visualiza a via do estabelecimento (se suportado).</td></tr><tr><td><code>previewCustomerReceipt</code></td><td><code>Boolean?</code></td><td>—</td><td>Pré-visualiza a via do cliente (se suportado).</td></tr><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;Unit>) -> Unit</code></td><td>✅</td><td>Retorno assíncrono.</td></tr></tbody></table>

```
// Exemplo de implementação

paymentService.rePrintPayment(
    paymentId = "SEU_PAYMENT_ID",
    printMerchantReceipt = true,
    printCustomerReceipt = true
) { result ->
    when(result) {
        is BarteResult.Success -> {
            Log.d("PaymentDetailScreen", "Reimpressão do comprovante do cliente bem-sucedida")
        }
        is BarteResult.Error -> {
            Log.e("PaymentDetailScreen", "Erro ao reimprimir comprovante do cliente: ${result.message}")
        }
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="104.0703125">Caso</th><th width="262.6171875">Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(Unit)</code></td><td>Indica que a reimpressão ou pré-visualização dos comprovantes foi realizada com sucesso.</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

### Estornar pagamento

#### Descrição

Método responsável pela realização de estorno de uma transação. Será necessário disponibilizar o `paymentId`  da transação para que o estorno da transação possa ser realizado.

<table><thead><tr><th width="208.73046875">Nome</th><th width="269.265625">Tipo</th><th width="124.21875">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>paymentId</code></td><td><code>String</code></td><td>✅</td><td>ID do pagamento a ser estornado.</td></tr><tr><td><code>appTransactionId</code></td><td><code>String</code></td><td>✅</td><td>ID interno da sua ordem/pedido.</td></tr><tr><td><code>value</code></td><td><code>BigDecimal</code></td><td>✅</td><td>Valor do estorno.</td></tr><tr><td><code>printMerchantReceipt</code></td><td><code>Boolean</code></td><td>—</td><td>Imprimir via do estabelecimento.</td></tr><tr><td><code>printCustomerReceipt</code></td><td><code>Boolean</code></td><td>—</td><td>Imprimir via do cliente.</td></tr><tr><td><code>previewMerchantReceipt</code></td><td><code>Boolean</code></td><td>—</td><td>Pré-visualização via estabelecimento (se suportado).</td></tr><tr><td><code>previewCustomerReceipt</code></td><td><code>Boolean</code></td><td>—</td><td>Pré-visualização via cliente (se suportado).</td></tr><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;Unit>) -> Unit</code></td><td>✅</td><td>Retorno assíncrono.</td></tr></tbody></table>

```
// Exemplo de implementação

barte.reversePayment(
    paymentId = "PAY_ABC123",
    appTransactionId = "ORDER-123",
    value = "100.00".toBigDecimal()
) { result ->
    when (result) {
        is BarteResult.Success -> println("Estorno realizado com sucesso.")
        is BarteResult.Error -> {
            val msg = buildString {
                append(result.message ?: "Falha no estorno")
                result.acquirerCode?.let { append(" • Adquirente: $it") }
                result.sdkCode?.let { append(" • Código: $it") }
            }
            println(msg)
        }
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="91.73046875">Caso</th><th width="255.1328125">Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(Unit)</code></td><td>Indica que o estorno foi solicitado/executado com sucesso.</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

{% hint style="info" %}
O estorno é feito mediante aproximação ou inserção do cartão utilizado no pagamento original
{% endhint %}

### Cancelar estorno de pagamento

#### Descrição

Método responsável pelo cancelamento do estorno de uma transação

<table><thead><tr><th width="116.578125">Nome</th><th width="271.0703125">Tipo</th><th width="124.703125">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>paymentId</code></td><td><code>String</code></td><td>✅</td><td>ID do pagamento do estorno a ser cancelado.</td></tr><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;Unit>) -> Unit</code></td><td>✅</td><td>Retorno assíncrono.</td></tr></tbody></table>

```
// Exemplo de implementação

barte.cancelReversePayment("PAY_ABC123") { result ->
    when (result) {
        is BarteResult.Success -> println("Estorno cancelado com sucesso.")
        is BarteResult.Error -> {
            val msg = buildString {
                append(result.message ?: "Falha ao cancelar estorno")
                result.acquirerCode?.let { append(" • Adquirente: $it") }
                result.sdkCode?.let { append(" • Código: $it") }
            }
            println(msg)
        }
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="115.171875">Caso</th><th width="250.98046875">Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(Unit)</code></td><td>—</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

### 3.4 Pagamentos - Leitura

### Listar pagamentos por filtro

#### Descrição

Método responsável pela consulta dos pagamentos executados com filtragem.

<table><thead><tr><th width="88.23046875">Nome</th><th width="395.48828125">Tipo</th><th width="80.30859375">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>filter</code></td><td><a href="#listpaymentsrequest-request"><code>ListPaymentsRequest</code></a></td><td>✅</td><td>Objeto de filtro. Ver <a href="#listpaymentsrequest-request"><code>ListPaymentsRequest</code></a></td></tr><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;List&#x3C;</code><a href="#bartepayment"><code>BartePayment</code></a><code>>>) -> Unit</code></td><td>✅</td><td>Retorno assíncrono.</td></tr></tbody></table>

```
// Exemplo de implementação

val filter = ListPaymentsRequest(
    startDate = "01/09/2025 00:00:00",
    endDate   = "04/09/2025 23:59:59",
    statuses  = listOf(BartePaymentStatus.APPROVED, BartePaymentStatus.PENDING)
)

barte.listPayments(filter) { result ->
    when (result) {
        is BarteResult.Success -> {
            result.data.forEach { payment ->
                println("ID: ${payment.paymentId} • Status: ${payment.paymentStatus} • Valor: ${payment.value}")
            }
        }
        is BarteResult.Error -> {
            val msg = buildString {
                append(result.message ?: "Falha ao listar pagamentos")
                result.acquirerCode?.let { append(" • Adquirente: $it") }
                result.sdkCode?.let { append(" • Código: $it") }
            }
            println(msg)
        }
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="89.91796875">Caso</th><th width="381.8203125">Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(List&#x3C;</code><a href="#bartepayment"><code>BartePayment</code></a><code>>)</code></td><td>Cada item da lista é um objeto <a href="#bartepayment"><code>BartePayment</code></a> com todos os detalhes da transação (valor, status, cartão, adquirente etc.).</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

### Listar pagamentos pendentes

#### Descrição

Método responsável pela consulta dos pagamentos pendentes com filtragem.

<table><thead><tr><th width="97.83203125">Nome</th><th width="410.9296875">Tipo</th><th width="128.85546875">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>callback</code></td><td><code>(</code><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>&#x3C;List&#x3C;</code><a href="#bartepayment"><code>BartePayment</code></a><code>>>) -> Unit</code></td><td>✅</td><td>Retorno assíncrono com a lista de pagamentos.</td></tr></tbody></table>

```
// Exemplo de implementação

barte.listPendingPayments { result ->
    when (result) {
        is BarteResult.Success -> {
            println("Pagamentos pendentes encontrados: ${result.data.size}")
            result.data.forEach { payment ->
                println("ID: ${payment.paymentId} • Valor: ${payment.value} • Data: ${payment.paymentDate}")
            }
        }
        is BarteResult.Error -> {
            val msg = buildString {
                append(result.message ?: "Falha ao listar pagamentos pendentes")
                result.acquirerCode?.let { append(" • Adquirente: $it") }
                result.sdkCode?.let { append(" • Código: $it") }
            }
            println(msg)
        }
    }
}
```

#### Tabela de Retorno (callback)

<table><thead><tr><th width="88.70703125">Caso</th><th width="379.52734375">Tipo/Conteúdo</th><th>Campos</th></tr></thead><tbody><tr><td><strong>Sucesso</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Success(List&#x3C;</code><a href="#bartepayment"><code>BartePayment</code></a><code>>)</code></td><td>Cada item da lista é um objeto <a href="#bartepayment"><code>BartePayment</code></a>. Representa os pagamentos com <strong>status = PENDING</strong>, dentro da janela padrão (últimas 24h).</td></tr><tr><td><strong>Erro</strong></td><td><a href="#barteresult-less-than-t-greater-than"><code>BarteResult</code></a><code>.Error</code></td><td><code>message: String?</code> • <code>sdkCode: String?</code> • <code>acquirerCode: String?</code> • <code>cause: Throwable?</code></td></tr></tbody></table>

***

## Informações complementares de implementação

### 1. Retornos por método (BartePaymentService)

Todos os métodos retornam via callback um `BarteResult<T>`:

* `Success(data)` — operação concluída; `data` é o payload abaixo
* `Error(sdkCode, acquirerCode, message, cause)` — falha; campos de erro abaixo

### 1.1 Visão geral dos retornos

<table><thead><tr><th width="278.5">Método</th><th width="231.23046875">Success (tipo)</th><th>Error (sem alterações)</th></tr></thead><tbody><tr><td><code>setMainApp(packageName)</code></td><td><code>Unit</code></td><td><code>sdkCode</code>, <code>acquirerCode</code>, <code>message</code>, <code>cause</code></td></tr><tr><td><code>getMainApp()</code></td><td><code>String</code> (packageName)</td><td>idem</td></tr><tr><td><code>setTheme(theme)</code></td><td><code>Unit</code></td><td>idem</td></tr><tr><td><code>getTheme()</code></td><td><code>String</code> (themeName)</td><td>idem</td></tr><tr><td><code>getTerminalInfo()</code></td><td><a href="#terminalinfo"><code>TerminalInfo</code></a></td><td>idem</td></tr><tr><td><code>startTransaction(req)</code></td><td><a href="#bartepayment"><code>BartePayment</code></a></td><td>idem</td></tr><tr><td><code>startTransactionEndToEnd(req)</code></td><td><code>Unit</code></td><td>idem</td></tr><tr><td><code>confirmTransaction(paymentId)</code></td><td><code>Unit</code></td><td>idem</td></tr><tr><td><code>rePrintPayment(…)</code></td><td><code>Unit</code></td><td>idem</td></tr><tr><td><code>reversePayment(…)</code></td><td><code>Unit</code></td><td>idem</td></tr><tr><td><code>cancelReversePayment(paymentId)</code></td><td><code>Unit</code></td><td>idem</td></tr><tr><td><code>listPayments(filter)</code></td><td><code>List&#x3C;</code><a href="#bartepayment"><code>BartePayment</code></a><code>></code></td><td>idem</td></tr><tr><td><code>listPendingPayments()</code></td><td><code>List&#x3C;</code><a href="#bartepayment"><code>BartePayment</code></a><code>></code></td><td>idem</td></tr></tbody></table>

### Estrutura do `Error`&#x20;

<table><thead><tr><th width="168.54296875">Campo</th><th width="206.2578125">Tipo</th><th>Descrição</th></tr></thead><tbody><tr><td><code>sdkCode</code></td><td><code>String?</code></td><td>Código de erro padronizado do SDK.</td></tr><tr><td><code>acquirerCode</code></td><td><code>String?</code></td><td>Código específico da adquirente.</td></tr><tr><td><code>message</code></td><td><code>String?</code></td><td>Mensagem de erro legível.</td></tr><tr><td><code>cause</code></td><td><code>Throwable?</code></td><td>Exceção original para logs/diagnóstico.</td></tr></tbody></table>

### Objetos (esquemas)

### `TerminalInfo`

> **Retorno de**: `getTerminalInfo()`

<table><thead><tr><th width="217.484375">Campo</th><th width="109.59765625">Tipo</th><th width="122.9921875">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>merchantId</code></td><td><code>String</code></td><td>✅</td><td>Identificador do estabelecimento.</td></tr><tr><td><code>merchantName</code></td><td><code>String</code></td><td>✅</td><td>Razão social do estabelecimento.</td></tr><tr><td><code>merchantCommercialName</code></td><td><code>String</code></td><td>✅</td><td>Nome fantasia.</td></tr><tr><td><code>terminalId</code></td><td><code>String</code></td><td>✅</td><td>Identificador do terminal (TID).</td></tr><tr><td><code>nationalId</code></td><td><code>String</code></td><td>✅</td><td>Documento nacional (ex.: CNPJ).</td></tr><tr><td><code>postalCode</code></td><td><code>String</code></td><td>✅</td><td>CEP.</td></tr><tr><td><code>street</code></td><td><code>String</code></td><td>✅</td><td>Logradouro.</td></tr><tr><td><code>city</code></td><td><code>String</code></td><td>✅</td><td>Cidade.</td></tr><tr><td><code>state</code></td><td><code>String</code></td><td>✅</td><td>Estado (nome completo).</td></tr><tr><td><code>stateAbbreviation</code></td><td><code>String</code></td><td>✅</td><td>UF (ex.: “SP”).</td></tr><tr><td><code>country</code></td><td><code>String</code></td><td>✅</td><td>País.</td></tr><tr><td><code>complement</code></td><td><code>String</code></td><td>✅</td><td>Complemento do endereço.</td></tr><tr><td><code>neighbourhood</code></td><td><code>String</code></td><td>✅</td><td>Bairro.</td></tr><tr><td><code>addressNumber</code></td><td><code>String</code></td><td>✅</td><td>Número.</td></tr><tr><td><code>merchantWebsite</code></td><td><code>String</code></td><td>✅</td><td>Website do estabelecimento.</td></tr><tr><td><code>merchantEmail</code></td><td><code>String</code></td><td>✅</td><td>E-mail de contato.</td></tr><tr><td><code>merchantPhone</code></td><td><code>String</code></td><td>✅</td><td>Telefone de contato.</td></tr><tr><td><code>merchantCategoryCode</code></td><td><code>String</code></td><td>✅</td><td>MCC (Merchant Category Code).</td></tr><tr><td><code>merchantNationalType</code></td><td><code>String</code></td><td>✅</td><td>Tipo nacional (ex.: matriz/filial).</td></tr><tr><td><code>subAcquirerId</code></td><td><code>String</code></td><td>✅</td><td>Identificador do subadquirente (se aplicável).</td></tr><tr><td><code>terminalCurrencyCode</code></td><td><code>String</code></td><td>✅</td><td>Código de moeda numérico (ISO-4217 numérico).</td></tr><tr><td><code>terminalCurrencyIso4217</code></td><td><code>String</code></td><td>✅</td><td>Código de moeda alfabético (ISO-4217 alfabético).</td></tr></tbody></table>

{% hint style="info" %}
**Observação**: Se no seu modelo real alguns campos podem ser nulos, ajuste a coluna “Obrigatório” conforme a implementação.
{% endhint %}

### `BarteTheme`

> **Descrição**: opções de tema disponíveis no SDK.\
> **Usado em**: `setTheme(...)`, `getTheme()`.

<table><thead><tr><th width="309.78515625">Enum constante</th><th>themeName</th></tr></thead><tbody><tr><td><code>RED</code></td><td><code>RedTheme</code></td></tr><tr><td><code>PINK</code></td><td><code>PinkTheme</code></td></tr><tr><td><code>PURPLE</code></td><td><code>PurpleTheme</code></td></tr><tr><td><code>DEEP_PURPLE</code></td><td><code>DeepPurpleTheme</code></td></tr><tr><td><code>INDIGO</code></td><td><code>IndigoTheme</code></td></tr><tr><td><code>BLUE</code></td><td><code>BlueTheme</code></td></tr><tr><td><code>LIGHT_BLUE</code></td><td><code>LightBlueTheme</code></td></tr><tr><td><code>CYAN</code></td><td><code>CyanTheme</code></td></tr><tr><td><code>TEAL</code></td><td><code>TealTheme</code></td></tr><tr><td><code>GREEN</code></td><td><code>GreenTheme</code></td></tr><tr><td><code>LIGHT_GREEN</code></td><td><code>LightGreenTheme</code></td></tr><tr><td><code>LIME</code></td><td><code>LimeTheme</code></td></tr><tr><td><code>YELLOW</code></td><td><code>YellowTheme</code></td></tr><tr><td><code>AMBER</code></td><td><code>AmberTheme</code></td></tr><tr><td><code>ORANGE</code></td><td><code>OrangeTheme</code></td></tr><tr><td><code>DEEP_ORANGE</code></td><td><code>DeepOrangeTheme</code></td></tr><tr><td><code>BROWN</code></td><td><code>BrownTheme</code></td></tr><tr><td><code>GREY</code></td><td><code>GreyTheme</code></td></tr><tr><td><code>BLUE_GREY</code></td><td><code>BlueGreyTheme</code></td></tr></tbody></table>

### `BartePayment`

> **Retorno de**: `startTransaction`, `listPayments`, `listPendingPayments`\
> (estrutura consolidada a partir das mapeações enviadas)

<table><thead><tr><th width="146.25">Campo</th><th>Tipo</th><th width="122.7421875">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>value</code></td><td><code>BigDecimal</code></td><td>✅</td><td>Valor da transação.</td></tr><tr><td><code>paymentType</code></td><td><a href="#bartepaymenttype"><code>BartePaymentType</code></a></td><td>✅</td><td>Tipo (ex.: <code>CREDIT</code>, <code>DEBIT</code>).</td></tr><tr><td><code>installments</code></td><td><code>Int?</code></td><td>—</td><td>Número de parcelas (se aplicável).</td></tr><tr><td><code>acquirer</code></td><td><code>String</code></td><td>✅</td><td>Nome/ID da adquirente.</td></tr><tr><td><code>paymentId</code></td><td><code>String</code></td><td>✅</td><td>ID do pagamento.</td></tr><tr><td><code>card</code></td><td><a href="#bartecard"><code>BarteCard</code></a><code>?</code></td><td>—</td><td>Dados do cartão mascarados (marca, BIN, final).</td></tr><tr><td><code>captureType</code></td><td><a href="#bartecapturetype"><code>BarteCaptureType</code></a></td><td>✅</td><td>Modo de captura (ex.: <code>CHIP_CONTACTLESS</code>).</td></tr><tr><td><code>paymentStatus</code></td><td><a href="#bartepaymentstatus"><code>BartePaymentStatus</code></a></td><td>✅</td><td>Status (ex.: <code>APPROVED</code>, <code>PENDING</code>).</td></tr><tr><td><code>paymentDate</code></td><td><code>Date</code></td><td>✅</td><td>Data/hora do pagamento.</td></tr><tr><td><code>acquirerId</code></td><td><code>String</code></td><td>✅</td><td>ID interno da adquirente.</td></tr><tr><td><code>acquirerResponseCode</code></td><td><code>String</code></td><td>✅</td><td>Código de resposta da adquirente.</td></tr><tr><td><code>acquirerResponseDate</code></td><td><code>Date</code></td><td>✅</td><td>Data/hora da resposta da adquirente.</td></tr><tr><td><code>acquirerAuthorizationNumber</code></td><td><code>String</code></td><td>✅</td><td>Número de autorização (pode vir vazio).</td></tr><tr><td><code>receipt</code></td><td><a href="#bartereceipt"><code>BarteReceipt</code></a><code>?</code></td><td>—</td><td>Vias do comprovante (cliente/estabelecimento), quando disponível.</td></tr></tbody></table>

### `BartePaymentType`

> **Descrição**: tipos de transações suportados pelo SDK.\
> **Usado em**: `TransactionRequest.paymentTypes`, `BartePayment.paymentType`.

<table><thead><tr><th>Enum constante</th><th width="111.03515625">id</th><th>Descrição</th></tr></thead><tbody><tr><td><code>CREDIT</code></td><td>1</td><td>Crédito à vista.</td></tr><tr><td><code>DEBIT</code></td><td>2</td><td>Débito.</td></tr><tr><td><code>CREDIT_STORE</code></td><td>3</td><td>Crédito parcelado loja.</td></tr><tr><td><code>CREDIT_ADMIN</code></td><td>4</td><td>Crédito parcelado administradora.</td></tr><tr><td><code>PRE_AUTHORIZATION</code></td><td>5</td><td>Pré-autorização.</td></tr><tr><td><code>PRE_AUTHORIZATION_CONFIRMATION</code></td><td>6</td><td>Confirmação de pré-autorização.</td></tr><tr><td><code>PRE_AUTHORIZATION_CREDIT_STORE</code></td><td>7</td><td>Pré-autorização com parcelado loja.</td></tr><tr><td><code>PRE_AUTHORIZATION_CREDIT_ADMIN</code></td><td>8</td><td>Pré-autorização com parcelado administradora.</td></tr><tr><td><code>PRE_AUTHORIZATION_SUBSTITUTIVE</code></td><td>9</td><td>Pré-autorização substitutiva.</td></tr><tr><td><code>DEBIT_POSTDATED</code></td><td>10</td><td>Débito pré-datado.</td></tr><tr><td><code>VOUCHER</code></td><td>11</td><td>Voucher genérico.</td></tr><tr><td><code>VOUCHER_MEAL</code></td><td>12</td><td>Voucher refeição.</td></tr><tr><td><code>VOUCHER_FEED</code></td><td>13</td><td>Voucher alimentação.</td></tr><tr><td><code>VOUCHER_FLEET</code></td><td>14</td><td>Voucher frota.</td></tr><tr><td><code>PRIVATE_LABEL</code></td><td>15</td><td>Cartão private label (loja própria).</td></tr><tr><td><code>PRIVATE_LABEL_QUERY</code></td><td>16</td><td>Consulta de saldo private label.</td></tr><tr><td><code>PARCELED_CREDIT</code></td><td>17</td><td>Crédito parcelado genérico.</td></tr></tbody></table>

### `BartePaymentStatus`

> **Descrição**: estados possíveis de um pagamento.\
> **Usado em**: `BartePayment.paymentStatus`, filtros de `ListPaymentsRequest`.

| Enum constante        | id | Descrição                                                          |
| --------------------- | -- | ------------------------------------------------------------------ |
| `PENDING`             | 1  | Pagamento iniciado, aguardando processamento.                      |
| `CONFIRMED`           | 2  | Pagamento confirmado.                                              |
| `CANCELED`            | 3  | Pagamento cancelado.                                               |
| `REVERSED`            | 4  | Pagamento estornado.                                               |
| `PROCESSING`          | 5  | Pagamento em processamento.                                        |
| `DENIED`              | 6  | Pagamento negado.                                                  |
| `UNREACHABLE`         | 7  | Falha de comunicação, adquirente não alcançável.                   |
| `WAITING_VALIDATION`  | 8  | Pagamento aguardando validação.                                    |
| `WAITING_CAPTURE`     | 9  | Pagamento aguardando captura.                                      |
| `REFUNDED_DEVOLUTION` | 10 | Estorno/devolução registrado (normalizado para `REVERSED` no SDK). |
| `REFUNDED`            | 11 | Pagamento reembolsado.                                             |
| `APPROVED`            | 12 | Pagamento aprovado pela adquirente.                                |

### `BarteCaptureType`

> **Descrição**: métodos de captura suportados.\
> **Usado em**: `BartePayment.captureType`.

| Enum constante               | id | Descrição                          |
| ---------------------------- | -- | ---------------------------------- |
| `MANUAL`                     | 1  | Entrada manual de dados do cartão. |
| `MAGNETIC_STRIP`             | 2  | Tarja magnética.                   |
| `CHIP`                       | 3  | Chip com contato.                  |
| `FALLBACK_MANUAL`            | 4  | Fallback para entrada manual.      |
| `FALLBACK_MAGNETIC_STRIP`    | 5  | Fallback para tarja magnética.     |
| `CHIP_CONTACTLESS`           | 6  | Chip por aproximação (NFC).        |
| `MAGNETIC_STRIP_CONTACTLESS` | 7  | Tarja por aproximação.             |
| `QR_CODE`                    | 8  | Pagamento via QR Code.             |

### `BarteCard`

> **Descrição**: dados de cartão.\
> **Usado em**: `BartePayment.card`.

<table><thead><tr><th width="159.07421875">Campo</th><th width="112.35546875">Tipo</th><th>Descrição</th></tr></thead><tbody><tr><td><code>brand</code></td><td><code>String?</code></td><td>Bandeira do cartão (ex.: “VISA”, “MASTERCARD”).</td></tr><tr><td><code>bin</code></td><td><code>String?</code></td><td>BIN (6 primeiros dígitos).</td></tr><tr><td><code>panLast4Digits</code></td><td><code>String?</code></td><td>4 últimos dígitos do PAN.</td></tr></tbody></table>

### `BarteReceipt`

> **Descrição**: dados de comprovante de pagamento.\
> **Usado em**: `BartePayment.receipt`.

<table><thead><tr><th width="130.64453125">Campo</th><th width="100.27734375">Tipo</th><th>Descrição</th></tr></thead><tbody><tr><td><code>clientVia</code></td><td><code>String</code></td><td>Via do cliente (texto).</td></tr><tr><td><code>merchantVia</code></td><td><code>String</code></td><td>Via do estabelecimento (texto).</td></tr></tbody></table>

### &#x20;`TransactionRequest` (request)

> **Entrada de**: `startTransaction`, `startTransactionEndToEnd`

<table><thead><tr><th width="158.80859375">Campo</th><th width="225.87890625">Tipo</th><th width="122.3671875">Obrigatório</th><th width="94.68359375">Padrão</th><th>Descrição</th></tr></thead><tbody><tr><td><code>value</code></td><td><code>BigDecimal</code></td><td>✅</td><td>—</td><td>Valor da transação.</td></tr><tr><td><code>paymentTypes</code></td><td><code>List&#x3C;</code><a href="#bartepaymenttype"><code>BartePaymentType</code></a><code>></code></td><td>✅</td><td>—</td><td>Tipos aceitos (ex.: <code>CREDIT</code>, <code>DEBIT</code>).</td></tr><tr><td><code>installments</code></td><td><code>Int</code></td><td>✅</td><td>—</td><td>Número de parcelas. Use <code>1</code> para à vista.</td></tr><tr><td><code>appTransactionId</code></td><td><code>String</code></td><td>✅</td><td>—</td><td>ID interno da sua ordem/pedido.</td></tr><tr><td><code>tokenizeCard</code></td><td><code>Boolean</code></td><td>—</td><td><code>false</code></td><td>Solicita tokenização do cartão.</td></tr><tr><td><code>printMerchantReceipt</code></td><td><code>Boolean</code></td><td>—</td><td><code>true</code></td><td>Imprimir via do estabelecimento.</td></tr><tr><td><code>printCustomerReceipt</code></td><td><code>Boolean</code></td><td>—</td><td><code>true</code></td><td>Imprimir via do cliente.</td></tr><tr><td><code>tokenizeEmail</code></td><td><code>String?</code></td><td>—</td><td><code>null</code></td><td>E-mail para tokenização (se aplicável).</td></tr><tr><td><code>tokenizeNationalDocument</code></td><td><code>String?</code></td><td>—</td><td><code>null</code></td><td>Documento nacional para tokenização.</td></tr><tr><td><code>dni</code></td><td><code>String?</code></td><td>—</td><td><code>null</code></td><td>Identificador adicional (se aplicável).</td></tr></tbody></table>

### `ListPaymentsRequest` (request)

> **Entrada de**: `listPayments`\
> **Observação de data**: `startDate`/`endDate` são `String` e devem seguir o formato `dd/MM/yyyy HH:mm:ss`.

<table><thead><tr><th width="191.49609375">Campo</th><th width="248.69921875">Tipo</th><th width="123.2265625">Obrigatório</th><th>Descrição</th></tr></thead><tbody><tr><td><code>paymentId</code></td><td><code>String?</code></td><td>—</td><td>Filtra por ID do pagamento.</td></tr><tr><td><code>lastDigits</code></td><td><code>String?</code></td><td>—</td><td>Filtra por 4 últimos dígitos do cartão.</td></tr><tr><td><code>startDate</code></td><td><code>String?</code></td><td>—</td><td>Data/hora inicial no formato <code>dd/MM/yyyy HH:mm:ss</code>.</td></tr><tr><td><code>endDate</code></td><td><code>String?</code></td><td>—</td><td>Data/hora final no formato <code>dd/MM/yyyy HH:mm:ss</code>.</td></tr><tr><td><code>startValue</code></td><td><code>BigDecimal?</code></td><td>—</td><td>Valor mínimo.</td></tr><tr><td><code>endValue</code></td><td><code>BigDecimal?</code></td><td>—</td><td>Valor máximo.</td></tr><tr><td><code>qrId</code></td><td><code>String?</code></td><td>—</td><td>ID do QR (se aplicável).</td></tr><tr><td><code>dni</code></td><td><code>String?</code></td><td>—</td><td>Identificador adicional (se aplicável).</td></tr><tr><td><code>notes</code></td><td><code>String?</code></td><td>—</td><td>Observações.</td></tr><tr><td><code>ticketNumber</code></td><td><code>String?</code></td><td>—</td><td>Número de ticket.</td></tr><tr><td><code>batchNumber</code></td><td><code>String?</code></td><td>—</td><td>Número de lote.</td></tr><tr><td><code>acquirerResponseCode</code></td><td><code>String?</code></td><td>—</td><td>Código de resposta da adquirente.</td></tr><tr><td><code>statuses</code></td><td><code>List&#x3C;</code><a href="#bartepaymentstatus"><code>BartePaymentStatus</code></a><code>>?</code></td><td>—</td><td>Lista de status a filtrar (ex.: <code>PENDING</code>, <code>APPROVED</code>).</td></tr></tbody></table>

{% hint style="info" %}
Caso o request seja enviado vazio, todos os pagamentos serão retornados por essa chamada.
{% endhint %}

### `BarteResult<T>`

> **Descrição**: tipo genérico de retorno do SDK.\
> Todos os métodos assíncronos retornam um callback que recebe `BarteResult<T>`.\
> Pode ser **sucesso** com dados (`Success`) ou **erro** (`Error`).

<table><thead><tr><th width="110.09375">Variante</th><th width="238.32421875">Tipo/Conteúdo</th><th width="171.0234375">Campos</th><th>Descrição</th></tr></thead><tbody><tr><td><code>Success&#x3C;T></code></td><td><code>BarteResult.Success&#x3C;T></code></td><td><code>data: T</code></td><td>Representa uma operação concluída com sucesso. O campo <code>data</code> contém o resultado esperado (ex.: <code>Unit</code>, <code>String</code>, <code>TerminalInfo</code>, <code>BartePayment</code> ou <code>List&#x3C;BartePayment></code>).</td></tr><tr><td><code>Error</code></td><td><code>BarteResult.Error</code></td><td><code>sdkCode: String?acquirerCode: String?message: String?cause: Throwable?</code></td><td>Representa uma falha. Inclui código de erro do SDK, código da adquirente (quando aplicável), mensagem legível e exceção original para logs.</td></tr></tbody></table>

Sucesso — `startTransaction`

```
// Exemplo de implementação

barte.startTransaction(req) { result ->
    when (result) {
        is BarteResult.Success -> {
            val p = result.data
            println("paymentId=${p.paymentId}, status=${p.paymentStatus}")
        }
        is BarteResult.Error -> { 
            // TODO
        }
    }
}
```

Erro — qualquer chamada

```
// Exemplo de implementação

when (result) {
    is BarteResult.Error -> {
        val msg = buildString {
            append(result.message ?: "Erro desconhecido")
            result.acquirerCode?.let { append(" • Adquirente: $it") }
            result.sdkCode?.let { append(" • Código: $it") }
        }
        println(msg)
        result.cause?.printStackTrace()
    }
    is BarteResult.Success -> { 
        // TODO
    }
}
```


---

# 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.barte.com/sdks/sdk-pos-maquininhas/sdk-barte-para-maquininhas-pos.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.
