# Enviar recibos digitales

El framework Get Mini te permite manejar recibos de dos formas: proporcionando detalles de contacto del cliente para que Get Mini envíe el recibo automáticamente, o accediendo a los "Literales" de la transacción para generar tu propio recibo digital o físico.

## Requisitos

Antes de enviar recibos, asegúrate de:

- **Resultado de transacción**: Debes tener un `RespuestaTransaccionDTO` devuelto del callback `onPaymentFinished`.

## Opción 1: Recibos digitales automáticos (Email/SMS)

La forma más fácil de enviar recibos es proporcionar la información de contacto del cliente durante la solicitud de pago inicial. Get Mini manejará la entrega automáticamente.

### Implementación

Al inicializar tu `PagoDTO`, incluye el `emailCliente` o `tlfCliente`. Si estos campos están poblados, la pasarela Get Mini envía el recibo sin más código de tu parte.

```
let pago = PagoDTO(
    valor: 1500,
    mMoneda: 978,
    nFactura: "INV-101",
    email: "cliente@ejemplo.com", // Get Mini envía email automáticamente
    tlfCliente: "600000000",      // Get Mini envía SMS automáticamente
    datosPropietarios: ""
)
```

## Opción 2: Recibos digitales personalizados

Si deseas mostrar un recibo en tu aplicación o usar la Hoja de Compartir de iOS, debes compilar manualmente los datos del resultado de la transacción.

### Paso 1: Acceder a literales de transacción

El `RespuestaTransaccionDTO` contiene una propiedad `Literal` (un array de cadenas) y un objeto `DatosDCC`. Estos contienen el texto legal requerido para el recibo.

```
func onPaymentFinished(_ result: RespuestaTransaccionDTO!, orError error: Error!) {
    guard let response = result, error == nil else { return }

    // El campo 'Literal' agrega todo el texto requerido del recibo
    if let receiptLines = response.Literal as? [String] {
        let fullReceiptText = receiptLines.joined(separator: "\n")
        self.showShareSheet(text: fullReceiptText)
    }
}
```

### Paso 2: Manejar requisitos de firma

Verifica la propiedad `ReciboSoloCliente`. Si es verdadera, solo necesitas proporcionar la copia del cliente (usualmente porque la firma fue capturada digitalmente en el dispositivo).

```
if response.ReciboSoloCliente {
    print("Solo copia del cliente requerida.")
} else {
    print("Copia de Firma o Comercio puede ser requerida.")
}
```

### Paso 3: Acceder al registro financiero completo (Boleta)

Si necesitas generar un recibo para una transacción pasada, usa el método `peticionConsultaBoleta` para obtener los datos financieros completos.

```
let consulta = ConsultaBoletaDTO(
    terminal: termTPVPC,
    withIdRTS: originalRTS,
    andUserInfo: userInfo
)

RedsysTransactionManager.peticionConsultaBoleta(consulta) { result, error in
    if let boleta = result {
        // Acceder a campos como boleta.tarjetaClienteRecibo, boleta.importe, etc.
        let receiptBody = """
        Terminal: \(boleta.terminal ?? "")
        Importe: \(boleta.importe ?? "")
        \(boleta.moneda ?? "")
        Autorización: \(boleta.codigoRespuesta ?? "")
        """
        self.printOrShare(receiptBody)
    }
}
```

## Mejores prácticas para recibos

- **Transacciones DCC**: Para tarjetas extranjeras, siempre incluye los `DatosDCC` (tasa de cambio, margen y moneda) en el texto del recibo para cumplir con las regulaciones.
- **Privacidad**: Al mostrar o compartir recibos, asegúrate de que el número de tarjeta esté enmascarado (el SDK lo proporciona como `************1234`).
- **Firma**: Si `AutenticadoPorPin` es falso, el recibo debe incluir una línea de firma a menos que se haya usado `envioFirmaDigitalizada`.

## Solución de problemas

**Faltan datos del recibo**
Verifica que el Estado sea "F". Los literales solo se generan una vez que la transacción alcanza un estado finalizado en el servidor.

**Emails no recibidos**
Asegúrate de que el campo de email en `PagoDTO` tenga un formato válido. Si el campo está vacío, no se activa ningún recibo automático.

## Próximos pasos

- [Crear una venta](/es/get-mini/ios-sdk/guides/single-step-payment-ios) - Transacciones de venta estándar
- [Devolver un pago](/es/get-mini/ios-sdk/guides/refund-payment-ios) - Aprender cómo devolver fondos
- [Gestionar lector Bluetooth](/es/get-mini/ios-sdk/guides/manage-bluetooth-reader) - Conectar tu hardware