# Referência da API

Esta página fornece uma referência técnica para os repositórios da `redsys-tpv-business-lib`. Aqui você encontrará a lista de métodos disponíveis, parâmetros e tipos de retorno para cada funcionalidade.

## Tipos Comuns

`RepositoryResult<T>`

Um wrapper genérico (`sealed class`) para todas as respostas assíncronas dos repositórios.

* **`Success<T>`**: Contém os dados do resultado (`val data: T`).
* **`ConnectionError`**: Indica uma falha de rede ou de conexão com o serviço.
* **`Cancelled`**: Indica que a operação foi cancelada pelo usuário (`val message: String`).
* **`ProtocolError`**: Indica um erro de integração ou mapeamento de dados (`val type: ProtocolErrorType`, `val description: String?`).

---

## 1. InitializationRepository
**Objetivo**: Gerenciar a inicialização e configuração do TPV.

| Método | Descrição | Parâmetros | Tipo de Retorno |
| :--- | :--- | :--- | :--- |
| `initTpv` | Inicializa o TPV com o host. | Nenhum | `RepositoryResult<TpvInfo>` |
| `getTpvInfoRepositoryResult` | Recupera informações do TPV em cache. | Nenhum | `RepositoryResult<TpvInfo>` |
| `saveTerminalInformation` | Atualiza as informações locais do terminal. | `tpvInfo: TpvInfo` | `Unit` (Suspend) |

---

## 2. PaymentRepository
**Objetivo**: Processar pagamentos com cartão.

| Método | Descrição | Parâmetros | Tipo de Retorno |
| :--- | :--- | :--- | :--- |
| `makePayment` | Realiza um pagamento padrão. | `amount: Money`<br />`tip: Money?`<br />`shiftInfo: ShiftInfo?`<br />`financialConditions: FinancialConditions?`<br />`proprietaryExtraData: ProprietaryExtraData?`<br />`language: LanguageIso6391?` | `RepositoryResult<PaymentResult>` |

**`PaymentResult` (Interface Selada)**: `Accepted`, `Denied`, `CardNotFound`.

---

## 3. RefundRepository
**Objetivo**: Processar estornos (reembolsos).

| Método | Descrição | Parâmetros | Tipo de Retorno |
| :--- | :--- | :--- | :--- |
| `makeRefund` | Estorno por ID de operação original. | `operationId: String`, `amount: Money`, `proprietaryExtraData?`, `language?` | `RepositoryResult<RefundResult>` |
| `makeRefundReadingCard` | Estorno por ID, forçando leitura do cartão. | `operationId: String`, `amount: Money`, `proprietaryExtraData?`, `language?` | `RepositoryResult<RefundResult>` |
| `makeRefundWithoutOriginal` | Estorno sem ID anterior (Adhoc). | `amount: Money`, `proprietaryExtraData?`, `language?` | `RepositoryResult<RefundResult>` |

---

## 4. PreauthorizationRepository
**Objetivo**: Gerenciar reservas de fundos.

| Método | Descrição | Parâmetros | Tipo de Retorno |
| :--- | :--- | :--- | :--- |
| `makePreauthorization` | Cria uma nova pré-autorização. | `amount: Money`, `shiftInfo?`, `proprietaryExtraData?`, `language?` | `RepositoryResult<PreauthorizationResult>` |
| `confirmPreauthorization` | Confirma/Captura uma pré-autorização. | `amount`, `operationId`, `shiftInfo?`, `proprietaryExtraData?`, `language?` | `RepositoryResult<PreauthorizationResult>` |
| `replacePreauthorization` | Atualiza o valor da reserva. | `amount`, `operationId`, `shiftInfo?`, `proprietaryExtraData?`, `language?` | `RepositoryResult<PreauthorizationResult>` |
| `annulPreauthorization` | Cancela a reserva. | `operationId: String`, `language?` | `RepositoryResult<PreauthorizationResult>` |

---

## 5. TransactionRepository
**Objetivo**: Buscar transações históricas.

| Método | Descrição | Parâmetros | Tipo de Retorno |
| :--- | :--- | :--- | :--- |
| `getTransactions` | Busca transações por intervalo de datas. | `initDate`, `endDate`, `filter?`, `resultsFilter?` | `RepositoryResult<GetTransactionsResult>` |
| `getTransactionsBySession` | Busca transações por sessão. | `initDate`, `endDate`, `sessionDate`, `sessionId?`, `filter?`, `resultsFilter?` | `RepositoryResult<GetTransactionsResult>` |

---

## 6. TotalsRepository
**Objetivo**: Consultar totais acumulados.

| Método | Descrição | Parâmetros | Tipo de Retorno |
| :--- | :--- | :--- | :--- |
| `getSessions` | Totais de todas as sessões de uma data. | `date`, `wantBrandDetails` | `RepositoryResult<TotalsResult>` |
| `getSession` | Totais de um ID de sessão específico. | `date`, `sessionId`, `wantBrandDetails` | `RepositoryResult<TotalsResult>` |
| `getLastSession` | Totais da última sessão fechada. | Nenhum | `RepositoryResult<GetLastSessionResult>` |
| `getShifts` | Totais de todos os turnos de uma data. | `date`, `wantBrandDetails` | `RepositoryResult<TotalsResult>` |
| `getShift` | Totais de um ID de turno específico. | `date`, `shiftId`, `wantBrandDetails` | `RepositoryResult<TotalsResult>` |

---

## 7. Turnos e Sessões
**Objetivo**: Gerenciar períodos operacionais.

| Repositório | Método | Parâmetros | Tipo de Retorno |
| :--- | :--- | :--- | :--- |
| `ShiftRepository` | `openShift` | `number: Int`, `date: Date` | `RepositoryResult<Boolean>` |
| `SessionRepository` | `closeSession` | `enableBrandDetails: Boolean` | `RepositoryResult<CloseSessionResult>` |

---

## 8. Periféricos e Configurações

| Repositório | Método | Descrição | Tipo de Retorno |
| :--- | :--- | :--- | :--- |
| `PrinterRepository` | `checkPaper` | Verifica status do papel. | `RepositoryResult<Boolean>` |
| `PrinterRepository` | `printDefaultTicket` | Imprime comprovante padrão. | `RepositoryResult<Boolean>` |
| `SettingsRepository` | `updateLanguage` | Altera o idioma do serviço. | `RepositoryResult<Boolean>` |
| `AuthRepository` | `getToken` | Gera token de autenticação. | `RepositoryResult<AuthResult>` |

---

## 9. Métodos de Pagamento Alternativos (APMs)

| Repositório | Método | Parâmetros Principais | Tipo de Retorno |
| :--- | :--- | :--- | :--- |
| `BizumRepository` | `sendBizum` | `amount`, `phoneNumber`, `shiftInfo?` | `RepositoryResult<SendBizumResult>` |
| `AlipayRepository` | `makePayment` | `amount`, `qrId`, `qrIdType`, `transactionName` | `RepositoryResult<AlipayResult>` |
| `WeChatRepository` | `makePayment` | `amount`, `qrId`, `transactionName?` | `RepositoryResult<WeChatResult>` |