# Manejo de errores

La aplicación Pinpad Getnet utiliza un sistema estructurado de notificación de errores para informar al Sistema Host sobre los problemas encontrados durante la ejecución de los comandos, las interacciones del usuario o los fallos de hardware.

## El informe de error Y0E

Cuando un proceso falla o se interrumpe, el Pinpad envía automáticamente un informe **Y0E**. Se trata de una respuesta asíncrona que sustituye a la respuesta de éxito esperada (como un `Y02`). La lógica de su Sistema Host debe estar preparada para capturar un `Y0E` en cualquier punto durante un flujo de transacción activa.

### Estructura de la respuesta Y0E [Pinpad]

El informe contiene identificadores específicos para ayudar a su software a diagnosticar el fallo:

| Campo      | Atributo | Descripción                                               |
| ---------- | --------- | --------------------------------------------------------- |
| **\[CID]** | 3 ANS     | Identificador de Comando ("Y0E").                         |
| **\[COE]** | 2 N       | **Código de Error**: Valor numérico identificativo de la causa original. |
| **\[MOE]** | 20 ANS    | **Mensaje de Error**: Texto descriptivo (ej., "CANCELADO"). |

## Códigos de error comunes

Comprender estos códigos es esencial para implementar una lógica de recuperación controlada y mensajes de usuario claros en su Sistema Host.

| Código | Mensaje              | Descripción/Causa                                                            |
| ------ | -------------------- | ---------------------------------------------------------------------------- |
| **01** | **CANCELADO**        | El usuario pulsó el botón rojo "Cancelar" o el Host envió un comando `Y06`. |
| **02** | **FALLA LECTURA**    | Fallo general de lectura de la tarjeta (ej., chip dañado o banda ilegible).  |
| **03** | **TARJETA INVALIDA** | La tarjeta no está admitida o está bloqueada.                              |
| **04** | **ERROR EMV**        | Se ha producido un error de protocolo durante el flujo EMV L3.               |
| **05** | **ERROR PIN**        | Se ha producido un error durante el proceso de introducción segura del PIN.  |
| **07** | **TIMEOUT**          | El tiempo de espera para una acción del usuario o comando ha expirado.       |
| **08** | **SIN LLAVES**       | El terminal no dispone de las claves DUKPT o RSA necesarias.                 |

## Gestión de los tiempos de espera (timeouts)

Para evitar que el dispositivo se bloquee indefinidamente si un usuario se marcha, el sistema emplea tiempos de espera dinámicos y respaldados por hardware.

### Tiempos de espera de sesión

El Sistema Host define el tiempo máximo de espera para la interacción del usuario al inicio de la transacción.

* **Campo**: `[TEC]` dentro del comando de inicialización (`Y19`).
* **Valor**: Se establece en segundos (ej., `060` para 60 segundos).
* **Comportamiento**: Si el usuario no presenta una tarjeta en este intervalo, el Pinpad aborta la operación y envía un **Y0E** con el código **07** (Timeout).

### Tiempos de espera internos del hardware

Determinados eventos criptográficos o de inicialización del hardware tienen tiempos de espera internos fijos. Si un proceso interno falla debido a un fallo del hardware, el terminal suele devolver un código de error general.

## Integridad de la comunicación (ACK/NAK)

Antes de que la lógica de la aplicación procese un comando, la capa de comunicación de bajo nivel (`SerialCom`) valida la integridad del mensaje.

* **`<ACK>` (06h)**: Se envía si la estructura del mensaje y el checksum LRC/CRC son correctos.
* **`<NAK>` (15h)**: Se envía si el mensaje está corrupto. Debe intentar reenviar inmediatamente el último comando enviado.

## Próximos pasos

Una vez implementada la lógica de manejo de errores, puede avanzar hacia las etapas finales de su integración:

1. [**Diccionario de Comandos de la API**](https://docs.globalgetnet.com/es/products/in-store-payments/host-to-host?doc=h2h-api-commands\&section=g7b851vgbt737kwul1fmgve2): Consulte la referencia técnica completa para cada comando y sus posibles estados de error.