# Gestión de recibos de transacciones

El Get Mini Android SDK proporciona todos los datos de transacción necesarios y cadenas de formato (literales) para generar recibos legales. Si bien el SDK no incluye un servicio directo de entrega por correo electrónico/SMS, ofrece una funcionalidad de consulta para recuperar duplicados de recibos siempre que permanezcan disponibles en el host de autorización.

## Requisitos

Para gestionar recibos, asegúrate de:
1.  El SDK está inicializado y el comercio ha iniciado sesión.
2.  Tienes los **Datos del Terminal** (`RedCLSTerminalData`) del proceso de inicio de sesión.
3.  Para recibos históricos, necesitas el **Identificador de Transacción** original (`identifierRTS`).

---

## Paso 1: Acceder a los datos del recibo en tiempo real

Cuando una transacción (Venta, Devolución o Preautorización) se completa exitosamente, el objeto `RedCLSTransactionData` resultante contiene una lista de **literales**. Estas son cadenas preformateadas proporcionadas por el host que tu aplicación debe usar para construir el recibo.

```kotlin
// En tu manejador de resultados de transacción
val txData = response.transactionData

if (txData != null) {
    // Recopilar literales para el recibo
    val receiptLines: List<String> = txData.literals

    // Iterar y mostrar/imprimir
    receiptLines.forEach { line ->
        println("Línea de Recibo: $line")
    }
}
```

<Callout type="note">

Para transacciones que involucran Conversión de Moneda (DCC), los literales adicionales se encuentran en `txData.dccSelectionData.literals`.

</Callout>

---

## Paso 2: Recuperar boleta histórica (duplicado)

Si necesitas generar un recibo después de que la transacción haya concluido (por ejemplo, desde una pantalla de historial de transacciones), usa el `RedCLSQueryManager` para obtener los datos.

<Callout type="warning">

Los recibos históricos se pueden recuperar siempre que el recibo aún esté disponible en el host de autorización. El SDK no garantiza la retención indefinida de datos de recibo en el lado del host.

</Callout>

```kotlin
import redcls.itpvpc.managers.RedCLSQueryManager
import redcls.itpvpc.data.RedCLSQueryTicketCloudData

val queryData = RedCLSQueryTicketCloudData(terminalData, "IDENTIFICADOR_RTS_ORIGINAL")

Thread {
    val response = RedCLSQueryManager.queryTicket(context, queryData)

    if (response.status == 0) {
        val historicalTx = response.transactionData
        val historicalLiterals = historicalTx.literals
        // Genera tu duplicado de recibo usando estos literales
    }
}.start()
```

---

## Paso 3: Manejar la entrega digital (SMS/Email)

Dado que el SDK es agnóstico al método de entrega, tu aplicación es responsable de enviar los datos del recibo al cliente.

### Flujo de trabajo recomendado:
1.  **Generar Texto Plano**: Construye una representación de texto plano del recibo uniendo los `literals` con saltos de línea.
2.  **Integrar Distribución**: Envía este texto (o una versión formateada en HTML/PDF) usando los proveedores de servicios de correo electrónico o SMS de tu backend.
3.  **Consentimiento del Cliente**: Captura el correo electrónico o número de teléfono en tu interfaz de usuario antes de activar la entrega desde tu infraestructura.

---

## Mejores prácticas

- **Impresión Térmica**: Los literales están diseñados para imprimirse en impresoras térmicas estándar de POS.
- **Autenticación PIN**: Si `txData.pinAuthenticatedLiteral` está presente, debes mostrarlo y típicamente **omitir** el cuadro de firma en el recibo.
- **Persistencia**: Almacena el `identifierRTS` en tu base de datos local para que siempre puedas consultar el histórico de recibos para un duplicado sin almacenar todas las líneas del recibo localmente.

## Próximos pasos

* [Crear una venta](/es/get-mini/android-sdk/guides/process-single-step-payments): Revisa el flujo de venta que genera los literales iniciales.
* [Devolver un pago](/es/get-mini/android-sdk/guides/refund-payment): Aprende cómo revertir transacciones.
* [Crear un pago con plazos](/es/get-mini/android-sdk/guides/process-installments-payment): Aprende sobre cuotas.
* [Gestionar la conectividad Bluetooth](/es/get-mini/android-sdk/guides/manage-bluetooth-connectivity): Asegúrate de que tu impresora y PIN pad estén conectados.