# Referencia de API

Esta página proporciona una referencia técnica para los repositorios `redsys-tpv-business-lib`. Incluye los métodos disponibles, parámetros y tipos de retorno para cada funcionalidad.

## Tipos Comunes

`RepositoryResult<T>`

Una clase sellada genérica que envuelve todas las respuestas asíncronas de los repositorios.

* `Success<T>`: Contiene los datos del resultado (`val data: T`).
* `ConnectionError`: Indica un fallo de red o de conexión con el servicio.
* `Cancelled`: Indica que la operación fue cancelada por el usuario (`val message: String`).
* `ProtocolError`: Indica un error de integración o de mapeo de datos (`val type: ProtocolErrorType`, `val description: String?`).

## 1. InitializationRepository

**Propósito**: Gestionar la inicialización y configuración del TPV.

### Métodos

| Método                       | Descripción                                  | Parámetros         | Tipo de retorno             |
| :--------------------------- | :------------------------------------------- | :----------------- | :-------------------------- |
| `initTpv`                    | Inicializa el TPV con el host.               | Ninguno            | `RepositoryResult<TpvInfo>` |
| `getTpvInfoRepositoryResult` | Recupera la información en caché del TPV.    | Ninguno            | `RepositoryResult<TpvInfo>` |
| `saveTerminalInformation`    | Actualiza la información local del terminal. | `tpvInfo: TpvInfo` | `Unit` (Suspend)            |

## 2. PaymentRepository

**Propósito**: Procesar pagos con tarjeta.

### Métodos

| Método        | Descripción               | Parámetros                                                                                                                                                                                                                          | Tipo de retorno                   |
| :------------ | :------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------- |
| `makePayment` | Realiza un pago estándar. | `amount: Money`<br />`tip: Money?`<br />`shiftInfo: ShiftInfo?`<br />`financialConditions: FinancialConditions?`<br />`proprietaryExtraData: ProprietaryExtraData?`<br />`language: LanguageIso6391?` | `RepositoryResult<PaymentResult>` |

`PaymentResult` (Interfaz Sellada)

* `Accepted(val data: Transaction)`
* `Denied(val data: Transaction)`
* `CardNotFound`

## 3. RefundRepository

**Propósito**: Procesar devoluciones.

### Métodos

| Método                      | Descripción                                        | Parámetros                                                                                                                                                        | Tipo de retorno                  |
| :-------------------------- | :------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------- |
| `makeRefund`                | Devolución por ID de operación original.           | `operationId: String`<br />`amount: Money`<br />`proprietaryExtraData: ProprietaryExtraData?`<br />`language: LanguageIso6391?` | `RepositoryResult<RefundResult>` |
| `makeRefundReadingCard`     | Devolución por ID, forzando la lectura de tarjeta. | `operationId: String`<br />`amount: Money`<br />`proprietaryExtraData: ProprietaryExtraData?`<br />`language: LanguageIso6391?` | `RepositoryResult<RefundResult>` |
| `makeRefundWithoutOriginal` | Devolución sin ID previo.                          | `amount: Money`<br />`proprietaryExtraData: ProprietaryExtraData?`<br />`language: LanguageIso6391?`                           | `RepositoryResult<RefundResult>` |

`RefundResult` (Interfaz Sellada)

* `Accepted(val data: Transaction)`
* `Denied(val data: Transaction)`
* `ExceededAmount`

## 4. PreauthorizationRepository

**Propósito**: Gestionar reservas de fondos.

### Métodos

| Método                    | Descripción                           | Parámetros                                                                                                                                                                           | Tipo de retorno                            |
| :------------------------ | :------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------- |
| `makePreauthorization`    | Crear una nueva preautorización.      | `amount: Money`<br />`shiftInfo: ShiftInfo?`<br />`proprietaryExtraData: ProprietaryExtraData?`<br />`language: LanguageIso6391?`                                  | `RepositoryResult<PreauthorizationResult>` |
| `confirmPreauthorization` | Confirmar/Cobrar una preautorización. | `amount: Money`<br />`operationId: String`<br />`shiftInfo: ShiftInfo?`<br />`proprietaryExtraData: ProprietaryExtraData?`<br />`language: LanguageIso6391?` | `RepositoryResult<PreauthorizationResult>` |
| `replacePreauthorization` | Actualizar el importe.                | `amount: Money`<br />`operationId: String`<br />`shiftInfo: ShiftInfo?`<br />`proprietaryExtraData: ProprietaryExtraData?`<br />`language: LanguageIso6391?` | `RepositoryResult<PreauthorizationResult>` |
| `annulPreauthorization`   | Cancelar la reserva.                  | `operationId: String`<br />`language: LanguageIso6391?`                                                                                                                        | `RepositoryResult<PreauthorizationResult>` |

`PreauthorizationResult` (Interfaz Sellada)

* `Accepted(val data: Transaction)`
* `Denied(val data: Transaction)`

## 5. TransactionRepository

**Propósito**: Consultar transacciones históricas.

### Métodos

| Método                     | Descripción                               | Parámetros                                                                                                                                                                                            | Tipo de retorno                           |
| :------------------------- | :---------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------- |
| `getTransactions`          | Buscar transacciones por rango de fechas. | `initDate: Date`<br />`endDate: Date`<br />`filter: TransactionFilter?`<br />`resultsFilter: TransactionResultsFilter?`                                                             | `RepositoryResult<GetTransactionsResult>` |
| `getTransactionsBySession` | Buscar por sesión.                        | `initDate: Date`<br />`endDate: Date`<br />`sessionDate: Date`<br />`sessionId: Int?`<br />`filter: TransactionFilter?`<br />`resultsFilter: TransactionResultsFilter?` | `RepositoryResult<GetTransactionsResult>` |

## 6. TotalsRepository

**Propósito**: Consultar totales acumulados.

### Métodos

| Método                    | Descripción                                 | Parámetros                                                                         | Tipo de retorno                          |
| :------------------------ | :------------------------------------------ | :--------------------------------------------------------------------------------- | :--------------------------------------- |
| `getSessions`             | Totales de todas las sesiones en una fecha. | `date: Date`<br />`wantBrandDetails: Boolean`                                | `RepositoryResult<TotalsResult>`         |
| `getSession`              | Totales de una sesión específica por ID.    | `date: Date`<br />`sessionId: Int`<br />`wantBrandDetails: Boolean`    | `RepositoryResult<TotalsResult>`         |
| `getSessionsBetweenDates` | Totales de sesiones en un rango.            | `initDate: Date`<br />`endDate: Date`<br />`wantBrandDetails: Boolean` | `RepositoryResult<TotalsResult>`         |
| `getLastSession`          | Totales de la última sesión cerrada.        | Ninguno                                                                            | `RepositoryResult<GetLastSessionResult>` |
| `getShifts`               | Totales de todos los turnos en una fecha.   | `date: Date`<br />`wantBrandDetails: Boolean`                                | `RepositoryResult<TotalsResult>`         |
| `getShift`                | Totales de un turno específico por ID.      | `date: Date`<br />`shiftId: String`<br />`wantBrandDetails: Boolean`   | `RepositoryResult<TotalsResult>`         |
| `getShiftBetweenDates`    | Totales de turnos en un rango.              | `initDate: Date`<br />`endDate: Date`<br />`wantBrandDetails: Boolean` | `RepositoryResult<TotalsResult>`         |

`TotalsResult` (Interfaz Sellada)

* `IncomingData(val data: TotalsModel)`
* `EmptyData`
* `WrongIdentifierError`

## 7. ShiftRepository y SessionRepository

**Propósito**: Gestionar períodos operacionales.

### Métodos

| Repositorio         | Método         | Parámetros                      | Tipo de retorno                        |
| :------------------ | :------------- | :------------------------------ | :------------------------------------- |
| `ShiftRepository`   | `openShift`    | `number: Int`<br />`date: Date` | `RepositoryResult<Boolean>`            |
| `SessionRepository` | `closeSession` | `wantBrandDetails: Boolean`   | `RepositoryResult<CloseSessionResult>` |

## 8. PrinterRepository

**Propósito**: Controlar la impresora del dispositivo.

### Métodos

| Método               | Descripción                       | Parámetros                                                                               | Tipo de retorno             |
| :------------------- | :-------------------------------- | :--------------------------------------------------------------------------------------- | :-------------------------- |
| `checkPaper`         | Verificar el estado del papel.    | Ninguno                                                                                  | `RepositoryResult<Boolean>` |
| `printBitmap`        | Imprimir un bitmap personalizado. | `bitmap: Bitmap`                                                                         | `RepositoryResult<Boolean>` |
| `printDefaultTicket` | Imprimir recibo estándar.         | `context: Context`<br />`headerIcon: Bitmap`<br />`transaction: Transaction` | `RepositoryResult<Boolean>` |

## 9. TicketDigitalRepository

**Propósito**: Gestionar recibos digitales.

### Métodos

| Método                | Descripción                           | Parámetros                                  | Tipo de retorno                            |
| :-------------------- | :------------------------------------ | :------------------------------------------ | :----------------------------------------- |
| `sendTicketDigital`   | Enviar recibo por correo electrónico. | `operId: String`<br />`email: String` | `RepositoryResult<TicketDigitalResult>`    |
| `getTicketDigitalURL` | Obtener URL del recibo (para QR).     | `operId: String`                            | `RepositoryResult<TicketDigitalUrlResult>` |

## 10. SettingsRepository y AuthRepository

**Propósito**: Configuración y Autenticación.

### Métodos

| Repositorio          | Método                        | Parámetros                       | Tipo de retorno                |
| :------------------- | :---------------------------- | :------------------------------- | :----------------------------- |
| `SettingsRepository` | `updateShowTransactionResult` | `showTransactionResult: Boolean` | `RepositoryResult<Boolean>`    |
| `SettingsRepository` | `updateLanguage`              | `language: LanguageIso6391`      | `RepositoryResult<Boolean>`    |
| `AuthRepository`     | `getToken`                    | Ninguno                          | `RepositoryResult<AuthResult>` |

## 11. Repositorios APM (Bizum, Alipay, WeChat)

**Propósito**: Métodos de Pago Alternativos.

### Métodos

| Repositorio        | Método        | Parámetros                                                                                                                                                                           | Tipo de retorno                     |
| :----------------- | :------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------- |
| `BizumRepository`  | `sendBizum`   | `amount: Money`<br />`phoneNumber: String`<br />`shiftInfo: ShiftInfo?`<br />`language: LanguageIso6391?`                                                          | `RepositoryResult<SendBizumResult>` |
| `AlipayRepository` | `makePayment` | `amount: Money`<br />`tip: Money`<br />`qrId: String`<br />`transactionName: String`<br />`qrIdType: QrIdType`<br />`languageIso6391: LanguageIso6391` | `RepositoryResult<AlipayResult>`    |
| `AlipayRepository` | `makeRefund`  | `amount: Money`<br />`originalOperationId: String`<br />`languageIso6391: LanguageIso6391`                                                                               | `RepositoryResult<AlipayResult>`    |
| `WeChatRepository` | `makePayment` | `amount: Money`<br />`tip: Money`<br />`qrId: String`<br />`transactionName: String?`<br />`languageIso6391: LanguageIso6391`                                | `RepositoryResult<WeChatResult>`    |
| `WeChatRepository` | `makeRefund`  | `amount: Money`<br />`originalOperationId: String`<br />`languageIso6391: LanguageIso6391`                                                                               | `RepositoryResult<WeChatResult>`    |