# Glosario de modelos de datos

Esta página sirve como referencia para las *data classes* y enumeraciones principales utilizadas en `redsys-tpv-business-lib`. Comprender estos modelos es esencial para interpretar los resultados de las transacciones y configurar el TPV.

## Data Classes Principales

### Transaction

El objeto `Transaction` es el modelo central que representa una operación financiera. Se devuelve en los estados Aceptado (Accepted) o Denegado (Denied) de pagos, devoluciones y consultas de historial.

| Propiedad | Tipo | Descripción |
| :--- | :--- | :--- |
| `type` | `OperationType` | El tipo de operación realizada (por ejemplo, PAYMENT, REFUND). |
| `result` | `OperationResult` | El resultado final de la operación (por ejemplo, AUTHORIZED, DENIED). |
| `amount` | `Money?` | El importe de la transacción. |
| `tip` | `Money?` | El importe de la propina, si procede. |
| `cardInfo` | `CardInfo` | Detalles sobre la tarjeta utilizada en la transacción. |
| `operationInfo` | `OperationInfo` | Identificadores específicos y datos de autorización del host. |
| `commerceInfo` | `CommerceInfo` | Información sobre el comercio (merchant) y el terminal. |
| `dccInfo` | `DccInfo?` | Detalles de Dynamic Currency Conversion (DCC) (solo presente si se aplicó DCC). |
| `digitalSignature` | `Bitmap?` | La firma capturada en pantalla (opcional). |
| `thirdDataInfo` | `ThirdDataInfo?` | Datos opcionales para integraciones de terceros (por ejemplo, números de factura). |
| `qrInfo` | `QrInfo?` | Información si la transacción se realizó mediante código QR. |
| `financialInfo` | `FinancialInfo?` | Datos de pagos aplazados (Plazox). |
| `prnReceipt` | `PrnReceiptInfo?` | Ajustes de configuración relacionados con la impresión del recibo. |
| `prnIssuer` | `String?` | Información adicional relacionada con la entidad de la tarjeta. |

### Money

Representa un valor monetario.

| Propiedad | Tipo | Descripción |
| :---- | :---- | :---- |
| `amount` | `BigDecimal` | El valor numérico. |
| `currency` | `Currency` | La instancia Java `Currency` (por ejemplo, `Currency.getInstance("EUR")`). |

### CardInfo

Encapsula los datos relativos a la tarjeta de pago.

| Propiedad | Tipo | Descripción |
| :--- | :--- | :--- |
| `card` | `String?` | Número de tarjeta enmascarado (por ejemplo, `************1234`). |
| `cardBrand` | `CardBrand?` | La marca de la tarjeta detectada (por ejemplo, `VISA`). |
| `cardBrandLabel` | `String?` | La etiqueta completa (label) de la marca de la tarjeta. |
| `aid` | `String?` | El Identificador de Aplicación EMV (Application Identifier). |

### OperationInfo

Contiene los detalles técnicos de la ejecución de la transacción.

| Propiedad | Tipo | Descripción |
| :--- | :--- | :--- |
| `identifier` | `String` | El identificador interno único para la operación. |
| `number` | `String?` | El número de operación secuencial (Número de ticket). |
| `date` | `Date?` | La fecha y hora en que ocurrió la operación. |
| `authorizationNumber` | `String?` | El código de autorización del banco. |
| `reference` | `String?` | La referencia de la transacción. |
| `failedReasonInfo` | `FailedReasonInfo?` | Contiene el código de error y la descripción si la operación falló. |
| `tvr` | `String?` | Resultado de Verificación del Terminal (Terminal Verification Result - etiqueta EMV). |
| `atc` | `String?` | Contador de Transacciones de la Aplicación (Application Transaction Counter). |
| `resp` | `String?` | Código de respuesta (ISO 8583). |

### CommerceInfo

Identifica la configuración del comercio utilizada para la transacción.

| Propiedad | Tipo | Descripción |
| :---- | :---- | :---- |
| `fucCode` | `String?` | El ID del Comercio (FUC). |
| `terminal` | `String?` | El Número de Terminal. |

### TpvInfo

El resultado de la llamada `initTpv`, que contiene la configuración del dispositivo y del comercio.

| Propiedad | Tipo | Descripción |
| :---- | :---- | :---- |
| `config` | `TpvConfig` | Flags de configuración y detalles del comercio. |
| `deviceInfo` | `TpvDeviceInfo` | Información específica del hardware. |
| `virtualTerminalList` | `List<TpvVirtualTerminal>?` | Lista de terminales virtuales disponibles (modo multiterminal). |

### TpvConfig

Detalla los flags de configuración específicos para el terminal.

| Propiedad | Tipo | Descripción |
| :--- | :--- | :--- |
| `merchantName` | `String` | El nombre comercial del comercio. |
| `fuc` | `String` | El ID del Comercio (Merchant ID). |
| `terminal` | `String` | El ID del Terminal. |
| `currency` | `Int` | Código numérico de la divisa (por ejemplo, 978). |
| `showPreauthorizations` | `Boolean` | `true` si las Preautorizaciones están habilitadas. |
| `noOriginal` | `Boolean` | `true` si la "Devolución sin Original" (Refund without Original) está habilitada. |

### DccInfo

Detalles relativos a Dynamic Currency Conversion (DCC) (si procede).

| Propiedad | Tipo | Descripción |
| :--- | :--- | :--- |
| `currencyChangeAmount` | `String?` | Importe en la divisa extranjera. |
| `currencyCode` | `String` | Código de la divisa extranjera (por ejemplo, "USD"). |
| `markup` | `Float?` | El porcentaje de margen (markup) aplicado. |
| `exchangeRate` | `String` | La cadena de la tasa de cambio aplicada. |

## Enumeraciones

### OperationType

Define la clasificación de una transacción.

* `PAYMENT`  
* `REFUND`  
* `PREAUTH`  
* `PREAUTH_CONFIRM`  
* `PREAUTH_REPLACE`  
* `PREAUTH_CANCEL`  
* `UNKNOWN`

### OperationResult

Define el estado final de una transacción.

* `AUTHORIZED`  
* `DENIED`  
* `ANNUL`  
* `PREAUTH_NO_CONFIRM`  
* `UNKNOWN`

### CardBrand

Marcas de tarjetas y métodos de pago compatibles.

* `VISA`  
* `MASTERCARD`  
* `AMERICAN_EXPRESS`  
* `JCB`  
* `DINERS` (Nota: a veces se mapea a través de otras marcas)  
* `BIZUM`  
* `ALIPAY`  
* `WECHAT`  
* `GOOGLE_PAY`  
* `APPLE_PAY` 
* `SAMSUNG_PAY`  
* `UNKNOWN`

### ProtocolErrorType

Categorías para errores de integración devueltos en `RepositoryResult.ProtocolError`.

* `MAPPING_DATA`: Error interno al mapear los datos del servicio.  
* `MAPPING_DOMAIN`: Error en el formato de los datos de la petición enviada por la aplicación.  
* `TPV_NOT_INITIALIZED`: Operación intentada antes de `initTpv()`.