# Códigos de resultado y errores

El framework Get Mini reporta el estado de las transacciones y errores a través de objetos `NSError` estándar en los callbacks del delegado y propiedades de estado específicas dentro del resultado `RespuestaTransaccionDTO`.

## Códigos de error del SDK

Los errores se devuelven mediante el parámetro `NSError` en métodos como `onPaymentFinished` o `onInitFinished`. La propiedad `code` corresponde a la tabla de errores interna de la biblioteca.

### Errores comunes de biblioteca (NSError.code)

| Código | Constante de Estado | Descripción |
| :---- | :---- | :---- |
| 0 | `STATUS_OK` | Operación completada exitosamente. |
| 1 | `STATUS_KO_ACCESO_DATOS` | Error accediendo a la base de datos local (SQLite). |
| 11 | `STATUS_KO_DATOS_MAL_FIRMADOS` | La firma del mensaje es incorrecta. |
| 28 | `STATUS_KO_USER_BLOQUEADO` | La cuenta de usuario está bloqueada. |
| 78 | `STATUS_KO_OPERACION_FALLIDA` | La operación de Servicio Web falló. |
| 117 | — | **Denegada por pin online incorrecto** (PIN online incorrecto). |
| 999 | — | Error indeterminado. |
| 1040 | — | PIN pad no operativo. |

### Errores específicos TPV-PC

Estos códigos aparecen a menudo al procesar devoluciones u operaciones específicas del terminal.

| Código | Código TPV-PC | Descripción |
| :---- | :---- | :---- |
| 200 | TPV-PC0009 | El monto de la devolución excede el monto de la transacción original. |
| 232 | TPV-PC0058 | La moneda especificada no coincide con la moneda del terminal. |
| 241 | TPV-PC0071 | El comercio no tiene habilitadas las Preautorizaciones. |
| 250 | TPV-PC0084 | Error de lectura de tarjeta (Verifique lector o estado de la tarjeta). |
| 252 | TPV-PC0087 | Sistema ocupado. Reintente después de unos momentos. |
| 258 | TPV-PC0094 | No se permiten más confirmaciones para esta preautorización. |

## Valores de resultado de transacción

Para pagos finalizados, el resultado se entrega en un `RespuestaTransaccionDTO`. Debe evaluar los campos `estado` y `resultado` para determinar el desenlace.

### Estado (estado de transacción)

| Valor | Descripción |
| :---- | :---- |
| "F" | **Finalizada** (El proceso alcanzó el servidor y finalizó). |
| "P" | **En proceso** (Aún siendo procesado). |
| "G" | **Denegada** (La transacción fue rechazada). |
| "A" | **Anulada** (La transacción fue cancelada/anulada). |
| "T" | **Fallo técnico** (Ocurrió un error técnico durante el procesamiento). |

<Callout type="warning">

`Estado == "F"` NO significa que el pago fue aprobado. Solo significa que la pasarela respondió. Siempre verifique el campo `resultado`.

</Callout>

### Resultado (decisión)

| Valor | Descripción |
| :---- | :---- |
| "Autorizada" | La transacción fue aprobada por el emisor. |
| "Denegada" | La transacción fue rechazada por el emisor o la pasarela. |

## Códigos de respuesta de autorización

La propiedad `codigoRespuesta` en `RespuestaTransaccionDTO` (o `RespuestaBoletaDTO`) contiene el código de autorización del host (para ventas aprobadas) o el código de denegación específico.

Ramifica por `resultado`, que devuelve `"Autorizada"` o `"Denegada"`, en lugar de por el valor del código. Registra `codigoRespuesta` junto con la transacción para que soporte pueda rastrear una denegación.

## Monitoreo de progreso

El SDK proporciona actualizaciones en tiempo real a través de dos callbacks principales. Úselos para actualizar su UI durante la interacción con el hardware.

### onInitProcess (inicialización)

Reporta progreso durante `connectAndConfigureDevice`. Los mensajes son típicamente cadenas como:
- "Cargando claves..."
- "Configurando terminal..."

### onPaymentProcess (pago)

Reporta progreso durante `payWithPinpadBluetooth`. Notifica a la UI de cambios de estado tales como:
- Esperando inserción de tarjeta.
- Entrada de PIN solicitada.
- Conectando con el host para autorización.

## Mejores prácticas para el manejo de errores

1. **Evaluar NSError primero**: Si el parámetro `NSError` no es nil, la transacción falló antes de alcanzar la pasarela (ej., pérdida de Bluetooth o tiempo de espera de biblioteca).
2. **Manejar Código 117**: Siempre proporcione un mensaje específico para el código 117 ("PIN Incorrecto") ya que este es el error corregible por el usuario más común.
3. **Verificar Perfil del Comercio**: Si recibe errores 241 o 273 consistentemente, use `PerfilComercioManager` para verificar las características habilitadas de su terminal (Preautorizaciones, Entrada Manual).
4. **Registrar IdentificadorRTS**: Para cualquier error que ocurra después de la fase de "Autorización", registre el `identificadorRTS` para facilitar la solución de problemas de soporte con Get Mini.