# Códigos de respuesta y error

Esta página resume cómo el SDK representa los resultados de las operaciones y las condiciones de error. Todas las llamadas al repositorio devuelven un wrapper `RepositoryResult<T>` que te obliga a gestionar el éxito y el fracaso de forma explícita.

## RepositoryResult&lt;T>

`RepositoryResult<T>` es una clase sellada (sealed class) de Kotlin con las siguientes ramas:

- **Success&lt;T>**: La llamada se completó correctamente.
  - Contiene un payload `data: T` (por ejemplo, `PaymentResult`, `RefundResult`, `TpvInfo`, `TotalsResult`, etc.).
- **ConnectionError**: Ocurrió un problema de comunicación.
  - Causas típicas: el Get Smart SDK Payment Service no se está ejecutando, el dispositivo está sin conexión (offline) o hay un problema de conectividad con el host.
- **Cancelled**: La operación fue cancelada.
  - A menudo indica que el usuario abortó un flujo interactivo en la interfaz (UI) del TPV. Incluye un `message` legible para humanos.
- **ProtocolError**: La petición no pudo ser procesada debido a un problema de integración o mapeo.
  - Incluye un `type: ProtocolErrorType` y una `description` opcional.

Para patrones de gestión idiomática y ejemplos, consulta **`Conceptos Principales / Gestionar Respuestas y Errores`**.

## ProtocolErrorType

Cuando recibes `RepositoryResult.ProtocolError`, el campo `type` es uno de los siguientes valores (consulta también el **Glosario de Modelos de Datos**):

- **`MAPPING_DATA`**: Error interno al mapear datos entre el SDK y el servicio en segundo plano (background service).
  - Acción: generalmente indica un estado inesperado; captura los logs y contacta con soporte si persiste.
- **`MAPPING_DOMAIN`**: Hay un problema con los datos que envió tu aplicación.
  - Acción: valida parámetros como importes, divisas e identificadores.
- **`TPV_NOT_INITIALIZED`**: Un error crítico de configuración.
  - Acción: asegúrate de que `InitializationRepository.initTpv()` se ha llamado correctamente antes de realizar operaciones como pagos, devoluciones o consultas de historial.

## Resultados a nivel de negocio

Muchas llamadas exitosas todavía requieren que compruebes un **resultado de negocio** (business result) dentro del payload:

- Las operaciones de pago, devolución y preautorización devuelven tipos de resultado sellados (sealed result types) como `PaymentResult`, `RefundResult` y `PreauthorizationResult`, que distinguen:
  - Operaciones **Accepted** (autorizadas por el host, con un payload `Transaction`).
  - Operaciones **Denied** (rechazadas por el host/banco, con un payload `Transaction` explicativo).
  - Errores de dominio específicos (por ejemplo, `RefundResult.ExceededAmount`).
- Las consultas de historial y totales devuelven estructuras como `GetTransactionsResult` o `TotalsResult` que indican si hay datos, más páginas o identificadores inválidos.

<Callout type="warning">

Inspecciona siempre tanto el `RepositoryResult<T>` externo como el resultado de dominio interno para decidir qué mostrar en tu interfaz (UI) y cuándo reintentar o escalar los errores.

</Callout>