# Crear un pago a plazos

El **Get Smart SDK** admite pagos fraccionados. Esta función permite a los titulares de tarjetas dividir el importe de la transacción en cuotas directamente en el Punto de Venta (TPV).

## Prerrequisitos

Antes de intentar un pago a plazos, debes verificar que el terminal esté configurado para admitir esta función.

### Comprobación de disponibilidad

Puedes comprobar si la función de pago fraccionado está habilitada en la configuración actual inspeccionando el objeto `TpvInfo` obtenido durante la inicialización.

```kotlin
suspend fun checkInstallmentSupport() {
    val result = initializationRepository.getTpvInfoRepositoryResult()

    if (result is RepositoryResult.Success) {
        val config = result.data.config

        // Check the 'showPlazox' flag
        if (config.showPlazox) {
            println("✅ Installments (Plazox) are enabled on this device.")
        } else {
            println("❌ Installments are disabled.")
        }
    }
}
```

## Realización del pago

Para iniciar un pago a plazos, se utiliza la función estándar `makePayment` pero proporcionando el parámetro opcional `financialConditions`.

**Función**: `makePayment`  
**Parámetro**: `financialConditions` (Tipo: `FinancialConditions?`).

### Implementación

```kotlin
suspend fun payWithInstallments(amount: BigDecimal) {
    // 1. Define the amount
    val money = Money(amount, Currency.getInstance("EUR"))

    // 2. Define Financial Conditions
    // Pass the specific conditions required (or an empty object depending on specific bank logic)
    // Note: The specific structure of FinancialConditions depends on the library version
    val conditions = FinancialConditions(/* ... configuration parameters ... */)

    // 3. Call makePayment with the conditions
    val result = paymentRepository.makePayment(
        amount = money,
        financialConditions = conditions // Trigger the financial flow
    )

    handlePaymentResult(result)
}
```

<Callout type="note">

Si la tarjeta admite plazos y la función está habilitada (`showPlazox`), el Get Smart SDK Payment Service puede solicitar automáticamente al usuario que elija las cuotas en la pantalla del dispositivo, incluso sin parámetros estrictos, dependiendo de la configuración del host.

</Callout>

## Gestión del resultado

Si el pago se acepta y se procesa como una transacción a plazos, el objeto `Transaction` resultante contendrá un bloque `financialInfo` con los detalles del pago aplazado.

### El objeto FinancialInfo

La data class `Transaction` incluye un campo opcional `financialInfo`. Si este campo no es nulo, la transacción implicó condiciones de pago aplazado.

**Ejemplo de gestión:**

```kotlin
fun handlePaymentResult(result: RepositoryResult<PaymentResult>) {
    if (result is RepositoryResult.Success && result.data is PaymentResult.Accepted) {
        val transaction = (result.data as PaymentResult.Accepted).data

        // Check for Financial Info
        val finance = transaction.financialInfo

        if (finance != null) {
            println("💰 Deferred Payment Confirmed")
            // Access specific financial details if available in the FinancialInfo model
            // (Refer to the Javadoc in the ZIP for specific fields of FinancialInfo)
        } else {
            println("✅ Standard Payment (One-off)")
        }
    }
}
```

## Resumen

Para implementar pagos a plazos:
1.  **Verifica** `TpvConfig.showPlazox` para asegurarte de que la función está activa.
2.  **Llama** a `makePayment` pasando el parámetro `financialConditions`.
3.  **Valida** el `Transaction.financialInfo` en la respuesta para confirmar las condiciones.