# Referencia de protocolos y tipos

El framework Get Mini define una serie de Objetos de Transferencia de Datos (DTOs) y protocolos para gestionar el contexto del comercio, la inicialización del hardware y los resultados de las transacciones.

## Configuración y DTOs de comercio

Estos tipos se utilizan para establecer la identidad y el entorno del comercio.

### CommonUtils (configuración de entorno)

La configuración del entorno se maneja a través de métodos globales en lugar de un objeto de configuración.

| Identificador | Descripción |
| :---- | :---- |
| `"des"` | Entorno de desarrollo |
| `"int"` | Entorno de Integración/Pruebas |
| `"ccal"` | Entorno de certificación |
| `"real"` | Entorno de producción |

### MerchanDTO

Requerido para vincular un PIN pad físico a una cuenta de comercio durante la inicialización.

| Propiedad | Tipo | Descripción |
| :---- | :---- | :---- |
| `fuc` | String | Código de comercio de 9 dígitos |
| `terminal` | String | Número de terminal (ej., "1") |
| `claveComercio` | String | Clave de seguridad del comercio |
| `nombreComercio` | String | Nombre mostrado al usuario |

## Definiciones de protocolo

Implemente estos protocolos en sus delegados para recibir callbacks del SDK.

### RedsysBTPinpadPaymentDelegate

Maneja el ciclo de vida de una transacción de pago y la retroalimentación del usuario en tiempo real.

| Método | Cuándo se Llama | Parámetros |
| :---- | :---- | :---- |
| `onPaymentProcess` | Cambios de estado en el PIN pad | `id` (Resultado), `NSError` |
| `onPaymentFeedback` | Elección en tiempo real requerida (DCC/Plazos) | `RespuestaTransaccionDTO`, `NSError` |
| `onPaymentFinished` | Transacción completa (Aprobada/Denegada) | `RespuestaTransaccionDTO`, `NSError` |

### RedsysBTPinpadInitDelegate

Monitorea el proceso de conexión e inyección de claves de un PIN pad.

| Método | Cuándo se Llama | Parámetros |
| :---- | :---- | :---- |
| `onInitProcess` | Actualización de estado durante la Configuración | `id` (Cadena de estado) |
| `onInitFinished` | Configuración completa | `PinpadConfig`, `NSError` |

## Tipos de datos de transacción

### PagoDTO

Define los parámetros para un intento de pago específico.

| Propiedad | Tipo | Descripción |
| :---- | :---- | :---- |
| `valorCompra` | Int | Monto en céntimos (ej., 1050 para 10.50€) |
| `moneda` | Int | Código ISO 4217 (ej., 978 para EUR) |
| `tipoOper` | String | "Autorización" o "Preautorización" |
| `emailCliente` | String | (Opcional) Activa email de recibo automático |
| `tlfCliente` | String | (Opcional) Activa SMS de recibo automático |

### RespuestaTransaccionDTO

El objeto de resultado principal devuelto después de un intento de transacción.

| Propiedad | Tipo | Descripción |
| :---- | :---- | :---- |
| `estado` | String | "F" (Finalizada), "G" (Denegada), "T" (Error Técnico) |
| `resultado` | String | "Autorizada" o "Denegada" |
| `identificadorRTS` | String | Clave única de 24 caracteres para devoluciones y consultas |
| `literales` | Array | Array de cadenas requeridas para el recibo |
| `autenticadoPorPin` | Bool | Indica si se requiere una firma física |
| `token` | String | (Pago por Referencia) Token de tarjeta para pagos recurrentes |

## DTOs de consulta y gestión

### OperacionDTO

Representa una transacción pasada recuperada a través de la consulta de historial.

| Propiedad | Tipo | Descripción |
| :---- | :---- | :---- |
| `importe` | String | Monto formateado (ej., "10.50") |
| `fechaOperacion` | NSDate | Marca de tiempo de la transacción |
| `numAutorizacion` | String | Código de autorización de la pasarela |
| `factura` | String | Su ID interno de factura/pedido |

### PerfilComercioRespuesta

Devuelto por `peticionPerfilComercio` para verificar características activas del terminal.

| Propiedad | Tipo | Descripción |
| :---- | :---- | :---- |
| `permitePreauto` | Bool | El comercio puede realizar Preautorizaciones |
| `permiteDCC` | Bool | El comercio puede manejar plazos/conversión de moneda |
| `permiteEntradaManual` | Bool | El comercio puede escribir números de tarjeta manualmente |

## Enumeraciones

### PinpadTechnology

Especifica el protocolo de comunicación para el hardware.

| Valor | Descripción |
| :---- | :---- |
| `pinpadBluetooth` | Conexión Bluetooth estándar (Mayoría de dispositivos) |
| `pinpadBluetoothPan` | Bluetooth Personal Area Network (Dispositivos FlyPOS) |
| `pinpadBluetoothSMPP` | Comunicación Bluetooth segura |

| `pinpadWifi` | Conexión vía red local/Wi-Fi |

## Notas de implementación

1. **Formatos de Monto**: Siempre verifique si un método espera céntimos (Int) o cadenas formateadas (String). Los pagos usualmente usan céntimos; las devoluciones usan cadenas.
2. **Códigos de Resultado**: Un código de 117 en `error.code` indica específicamente una denegación por "PIN Incorrecto".
3. **Persistencia de Datos**: El SDK usa almacenamiento local SQLite para ciertos módulos; asegúrese de incluir el flag de linker `-lsqlite3`.