# Referencia de tablas de códigos

Este documento actúa como repositorio central de todos los códigos estandarizados que se usan como variables en los Requerimientos del Sistema Host y en las Respuestas del Pinpad. Estos identificadores son esenciales para interpretar los datos, identificar errores y configurar el comportamiento de las transacciones.

## Códigos de tipo de transacción (TTY)

Se define en el campo `[TTY]` durante la inicialización (**Y19**). Determina la naturaleza financiera de la operación.

| Código | Valor      | Descripción                                             |
| ------ | ---------- | ------------------------------------------------------- |
| **00** | Compra     | Compra estándar de bienes o servicios.                  |
| **01** | Débito     | Transacción de débito estándar.                         |
| **02** | Crédito    | Transacción de crédito estándar.                        |
| **09** | Cashback   | Compra con retiro de efectivo (Compra con Vuelto).      |
| **20** | Devolución | Reversión o devolución de fondos (Anulación/Devolución). |

## Códigos de tipo de cuenta (TDC)

Se usan en el campo `[TDC]` del comando **Y15** para sugerir un tipo de cuenta de destino al kernel EMV.

| Código | Valor            | Descripción                                          |
| ------ | ---------------- | ---------------------------------------------------- |
| **N**  | No especificado  | Valor por defecto que indica que no hay preferencia. |
| **1**  | Cuenta corriente | Cuenta corriente estándar (Cuenta Corriente).        |
| **2**  | Cuenta de ahorro | Cuenta de ahorro estándar (Cuenta de Ahorro).        |

## Códigos de error de comunicación (Y0E)

El Pinpad los devuelve en el campo `[COE]` de una respuesta **Y0E** cuando una transacción falla o se interrumpe.

| Código | Mensaje              | Causa / Significado                                                     |
| ------ | -------------------- | ----------------------------------------------------------------------- |
| **01** | **CANCELADO**        | El usuario presionó el botón rojo "Cancelar" o el Host envió `Y06`.     |
| **02** | **FALLA LECTURA**    | Falla de lectura del chip o de la banda, o restricción de fallback activada. |
| **03** | **TARJETA INVÁLIDA** | Aplicación de tarjeta no soportada o tarjeta bloqueada.                 |
| **04** | **ERROR EMV**        | Falla de protocolo durante el flujo EMV Nivel 3.                        |
| **05** | **ERROR PIN**        | La entrada segura falló o el usuario la canceló.                        |
| **06** | **MONTO INVÁLIDO**   | El monto informado tiene un formato inválido o excede los parámetros máximos. |
| **07** | **TIMEOUT**          | Se agotó el tiempo de espera de la acción del usuario o del comando.    |
| **08** | **SIN LLAVES**       | Falta la inyección DUKPT en la ranura 3/4 o faltan las claves RSA.      |
| **99** | **ERROR GRAL**       | Excepción interna no controlada o falla general del sistema.            |

## Etiquetas EMV comunes (CPG - TLV)

En una respuesta **Y02**, el campo `[CPG]` contiene una cadena de datos codificados en formato Tag-Length-Value (TLV). Estas etiquetas son fundamentales para construir los mensajes de autorización.

| Etiqueta | Nombre                        | Descripción                                                        |
| -------- | ----------------------------- | ------------------------------------------------------------------ |
| **9F26** | Application Cryptogram        | Criptograma principal (ARQC o TC) generado por la tarjeta.         |
| **9F10** | Issuer Application Data       | Datos propietarios que el emisor requiere para la validación.      |
| **9F37** | Unpredictable Number          | Número aleatorio generado por el terminal para dar unicidad a la transacción. |
| **95**   | Terminal Verification Results | Resultados de las validaciones offline que realiza el terminal.    |
| **9B**   | Transaction Status Info       | Indica las funciones ejecutadas durante el flujo de la transacción. |
| **9C**   | Transaction Type              | Código EMV interno (por ejemplo, `00` para bienes, `09` para cashback). |

> Necesitará un parser TLV estándar en el Sistema Host para extraer estos valores específicos para sus mensajes de autorización ISO 8583.

## Modo de entrada (MDI)

Identifica la interfaz física de hardware que se usa para presentar la tarjeta.

| Carácter | Modo            | Interfaz de hardware              |
| -------- | --------------- | --------------------------------- |
| **C**    | **Chip**        | Ranura de contacto EMV.           |
| **B**    | **Banda**       | Lector de banda magnética (Swipe). |
| **L**    | **Contactless** | Antena NFC (Tap).                 |
| **M**    | **Manual**      | Ingreso manual de la tarjeta.     |
| **E**    | **Error**       | No se pudo leer la tarjeta.       |

## Control de cifrado del PAN (ENC)

Se define en el campo `[ENC]` de `Y19` e `Y02` para controlar el cifrado DUKPT del PAN.

| Código | Comportamiento                                                          |
| ------ | ----------------------------------------------------------------------- |
| **0**  | Cifrado DUKPT del PAN desactivado.                                      |
| **1**  | Cifrado DUKPT del PAN activado.                                         |
| **2**  | PAN cifrado con la ranura 3, con DUKPT activado (fuerza el modo de clave única). |

## Posición de la clave maestra (PMK)

Se define en el campo `[PMK]` de `Y19` e `Y02`. Solo se informa la PMK del PIN; la PMK del PAN es siempre la PMK del PIN más uno.

| Valor   | PMK del PIN | PMK del PAN   |
| ------- | ----------- | ------------- |
| **0–9** | El valor    | El valor + 1  |
| **N**   | —           | —             |

Un valor de `N` significa que no se solicita PIN y que no se informa ninguna PMK. En ese caso, el firmware usa por defecto la ranura 3 para el PIN y la ranura 4 para el PAN cuando hay una clave presente. La posición de la clave maestra por defecto (POSMK) es `3`.

## Números de serie de clave (KSN)

DUKPT devuelve un Key Serial Number junto con cada elemento cifrado.

| Campo     | Longitud              | Descripción                             |
| --------- | --------------------- | --------------------------------------- |
| `KSN-PAN` | 20 dígitos (10 bytes) | KSN del PAN cifrado con DUKPT.          |
| `KSN`     | 20 dígitos (10 bytes) | KSN del PIN DUKPT.                      |

> Las ranuras de claves, los contadores independientes y el enmascaramiento del PAN se explican en [Cifrado del Pinpad](https://docs.globalgetnet.com/es/products/in-store-payments/host-to-host?doc=h2h-pinpad-encryption).