# Generar e imprimir recibos

Toda operación financiera procesada por Get Central puede dar lugar a la generación de uno o más recibos (boletas), dependiendo del tipo de operación, la configuración del terminal y las reglas de certificación. El propio TPVPC administra en gran medida los recibos, sujetos a estrictas restricciones técnicas y regulatorias.

Esta guía se aplica a **TpvpcImplantado**.

Get Central soporta **dos modelos de manejo de recibos**:

* **Generación e impresión automática de recibos**, gestionada íntegramente por el TPVPC
* **Manejo manual de recibos**, mediante la lectura de los campos relacionados con recibos en la respuesta XML

## Requisitos

Antes de trabajar con recibos, asegúrate de que:

* Una transacción se haya completado y haya devuelto una **respuesta XML final**
* La máquina host tenga una **impresora predeterminada** configurada correctamente
* El tipo de impresora (impresora de tickets o A4) coincida con la certificación del terminal

<Callout type="warning">

El TPVPC controla el diseño, el contenido y el comportamiento de impresión del recibo. La aplicación cliente no puede alterar los formatos de los recibos certificados.

</Callout>

## Proceso de generación de recibos

El manejo de recibos depende del **modo de funcionamiento** y de la **configuración del terminal**.

### Paso 1: Generación automática de recibos (controlada por el TPVPC)

Cuando el terminal está configurado para ello, el TPVPC genera e imprime los recibos **automáticamente** tras una operación exitosa (PAGO, DEVOLUCION, CONFIRMACION, etc.).

Características principales:

* La aplicación **no llama a una función de generación de recibos**
* El contenido del recibo se deriva del resultado de la transacción
* La impresión se envía a la **impresora predeterminada del sistema**
* La aplicación **no puede suprimir, personalizar ni reformatear** el recibo

Dependiendo de la operación y la configuración, el TPVPC puede imprimir:

* Recibo del cliente
* Recibo del comercio
* Ambos recibos

### Paso 2: Datos del recibo en la respuesta XML

Incluso cuando la impresión es automática, la respuesta XML devuelta por Get Central puede incluir elementos relacionados con el recibo que se pueden utilizar para:

* Visualización en pantalla
* Almacenamiento para fines de auditoría
* Lógica de reimpresión (si lo soporta el entorno)

Los elementos comunes relacionados con recibos incluyen:

| Elemento de Datos                      | Etiqueta XML               | Descripción                                            |
| -------------------------------------- | -------------------------- | ------------------------------------------------------ |
| Líneas del recibo                      | `<linea>`                  | Líneas formateadas individuales del recibo             |
| Recibo solo para el cliente            | `<ReciboSoloCliente>`      | Indica flujo de recibo solo para el cliente            |
| Número de tarjeta enmascarado          | `<tarjetaClienteRecibo>`   | PAN enmascarado adecuado para impresión                |
| Identificador del terminal             | `<terminal>`               | Terminal que procesó la operación                      |
| Fecha y hora                           | `<fechaOperacion>`         | Timestamp de la operación                              |

<Callout type="note">

La presencia de etiquetas relacionadas con recibos depende del tipo de operación y del comportamiento del terminal.

</Callout>

### Paso 3: Construir el recibo con `fnDllGenerateReceipt`

TPVPC Implantado genera los recibos de comercio y de cliente desde la propia biblioteca. La función devuelve un código de resultado entero; cuando tiene éxito, `base64Receipt` contiene el **PDF codificado en base64**, que decodificas para obtener el fichero PDF correctamente formateado que se imprimirá o se mostrará.

**Firma de la función:**

`int fnDllGenerateReceipt(LPCTSTR cXMLResp, LPTSTR base64Receipt, int iTamMaxbase64Receipt, LPCTSTR nombreComercio, bool bIsClient);`

| Parámetro | Tipo | Descripción |
| :--- | :--- | :--- |
| `cXMLResp` | String | XML que contiene los datos necesarios para la generación del recibo. Debe ser un XML devuelto por una de las funciones de operación. |
| `base64Receipt` | Buffer | Una vez terminada la llamada, contiene el recibo en formato PDF en base64. |
| `iTamMaxbase64Receipt` | Integer | Tamaño del parámetro `base64Receipt`. |
| `nombreComercio` | String | Nombre del comercio que se pondrá en el recibo. |
| `bIsClient` | Boolean | `true` si el recibo es para el cliente, `false` si es para el comercio. |

Valores de retorno:

| Código | Significado |
| :--- | :--- |
| `0` | Recibo generado correctamente. `base64Receipt` contiene el PDF en base64. |
| `-1` | XML de entrada o tamaño de `base64Receipt` no válido. |
| `-2` | Error al analizar el XML, o error al generar el recibo. |

```csharp
StringBuilder receipt = new StringBuilder(65536);

int result = fnDllGenerateReceipt(
    xmlResponse.ToString(),   // cXMLResp — returned by the operation
    receipt,                  // base64Receipt
    receipt.Capacity,         // iTamMaxbase64Receipt
    "MY STORE",               // nombreComercio
    true                      // bIsClient — cardholder copy
);

if (result == 0)
{
    byte[] pdf = Convert.FromBase64String(receipt.ToString());
}
```

Llámala dos veces para obtener las dos copias: una con `bIsClient` en `true` y otra en `false`.

> **Regla de seguridad**: El PAN completo, el CVV, el PIN o los datos criptográficos **nunca** deben imprimirse ni almacenarse. Solo pueden utilizarse los valores enmascarados devueltos por el TPVPC.

### Paso 4: Cumplimiento y retención

Independientemente de la estrategia de recibos:

* Los recibos solo deben emitirse una vez que la transacción se haya autorizado
* Los recibos almacenados deben coincidir con el resultado final de la transacción
* Las políticas de retención deben seguir las normativas fiscales y contables locales