# Códigos de resultado y errores

Esta referencia enumera **todos los códigos de resultado y error** devueltos por el TPVPC Get Central. TpvpcImplantado usa los mismos códigos.

Esta guía se aplica a **Slim Pack**.

La integración de Get Central expone **dos capas distintas de información de resultados**, que nunca deben confundirse:

1. **Códigos de retorno de la biblioteca** – devueltos directamente por la llamada a la función (`int`)
2. **Códigos de respuesta financiera** – devueltos dentro de la respuesta XML

Ambas capas son obligatorias para el correcto manejo de errores.

## Códigos de retorno del sistema

Cada función del TPVPC devuelve un código numérico de inmediato, antes de cualquier respuesta XML. Un `0` significa que la llamada terminó; no dice nada sobre si el pago fue autorizado.

**El mismo número significa cosas distintas según la función que lo devuelve.** Lee el
código contra la función que llamaste, no contra una lista global.

### Inicialización — `fnDllIniTpvpcLatente` y `fnDllIniTpvpcLatenteExt`

| Código | Descripción |
| ---: | :--- |
| `-1` | Error interno del sistema. Hay que reiniciar la carga de la biblioteca dinámica; si persiste, notificar a la entidad. |
| `-2` | Error al cargar el XML con los datos de configuración. |
| `-3` | Falta el valor de `datosConf/datosComercio/comercio`. |
| `-4` | Falta el valor de `datosConf/datosComercio/terminal`. |
| `-5` | Falta el valor de `datosConf/datosComercio/clave`. |
| `-6` | Falta el valor de `datosConf/accesoUsuario/usuario`. |
| `-7` | Falta el valor de `datosConf/accesoUsuario/clave`. |
| `-8` | Falta el valor de `datosConf/modo`. |
| `-9` | No se ha especificado ni acceso con datos de comercio ni de usuario. Es obligatorio especificar uno de los dos. |
| `-10` | Falta el valor de `datosConf/confDispositivo/puerto`. Si no vas a usar un PIN pad, omite el elemento `confDispositivo` por completo; si lo incluyes, debes configurar todos sus elementos. |
| `-11` | Falta el valor de `datosConf/confDispositivo/version`. |
| `-12` | Error interno del sistema. |
| `-13` | Error al descubrir el PIN pad. Se superó el TimeOut máximo de espera. |
| `-14` | No se pudo iniciar la interfaz gráfica del TPVPC Latente. |
| `-16` | Problema en la comunicación con el Servicio Web del TPVPC. Revisa la conexión a Internet e intenta una nueva inicialización cuando el servicio esté restablecido. |
| `-18` | La petición llega al TPVPC, pero alguno de los datos no es correcto. Revisa el código de comercio, el terminal y la clave de firma. |
| `-19` | El PIN pad no está configurado correctamente. Contacta con la entidad. |
| `-20` | El puerto de comunicación especificado no es correcto. |
| `-21` | La versión especificada es incompatible con el PIN pad instalado. Consulta el valor correcto con la entidad. |
| `-40` | La versión de la biblioteca ha caducado y debe actualizarse. |

### Operaciones de transacción — `fnDllOperPinPad`, `fnDllOperManualExt`, `fnDllOperPinPadDCC`

| Código | Descripción |
| ---: | :--- |
| `-1` | No se han establecido correctamente los datos de configuración. Vuelve a llamar a `fnDllIniTpvpcLatente`; si persiste, contacta con la entidad. |
| `-2` | Se ha sobrepasado el TimeOut especificado por la aplicación. |
| `-3` | Error del sistema. Es necesario reiniciar la aplicación. |
| `-4` | Los datos de entrada no tienen un formato correcto. Revisa la lista de parámetros. |
| `-13` | Alguno de los parámetros no es válido. Revisa la lista de parámetros. (Solo `fnDllOperPinPad`.) |
| `-17` | El tamaño del buffer de respuesta no es suficiente. Usa el valor indicado en la documentación. |
| `-18` | El formato de algún parámetro es incorrecto. Por ejemplo, `cImporte` debe tener formato `#000.00`: 3000 euros son `3000.00`. |

> **Regla crítica**: si una función de transacción devuelve `-2`, se agotó el TimeOut y el
> resultado final de la operación es **desconocido**. Ejecuta una consulta antes de
> reintentar, para no cobrar dos veces. Esta regla vale solo aquí: en la inicialización
> `-2` significa que no se pudo cargar el XML de configuración.

### Operaciones de consulta y cierre — `fnDllOperConsulta`, `fnDllOperTotales`, `fnDllOperComContable`

| Código | Descripción |
| ---: | :--- |
| `-1` | No se han establecido correctamente los datos de configuración. Vuelve a llamar a `fnDllIniTpvpcLatente`. |
| `-2` | Se produjo un error interno del sistema al realizar la operación. Si persiste, contacta con la entidad. |
| `-3` | Error en los parámetros de entrada. |
| `-12` | Error interno del sistema. |
| `-15` | Operación no soportada. (`fnDllOperConsulta` y `fnDllOperTotales`.) |

## Códigos de respuesta financiera (XML)

Los códigos de respuesta financiera se devuelven **dentro de la respuesta XML** y representan la decisión de autorización real tomada por la red del emisor.

El elemento `<estado>` indica el estado de procesamiento de la operación: `F` (finalizada), `P` (en proceso), `T` (fallo técnico) o `G` (denegada).

Una transacción está **AUTORIZADA solo si**:

```xml
<estado>F</estado>
<resultado>Autorizada</resultado>
```

Los códigos numéricos deben interpretarse solo después de esta validación.

---

### Códigos de aprobación

| Rango de Código | Significado        | Descripción                                      |
| --------------: | ------------------ | ------------------------------------------------ |
|   `0000`–`0099` | Aprobada           | Transacción autorizada.                          |
|          `0900` | Aprobación parcial | Aprobada por un importe inferior al solicitado.  |

---

### Códigos de denegación

| Código | Descripción                                  |
| -----: | -------------------------------------------- |
| `0101` | Tarjeta caducada.                            |
| `0102` | Sospecha de fraude.                          |
| `0104` | Tarjeta restringida.                         |
| `0116` | Fondos insuficientes.                        |
| `0118` | Tarjeta no permitida para esta operación.    |
| `0129` | Error de CVV.                                |
| `0180` | Se requiere introducción del PIN.            |
| `0181` | PIN incorrecto.                              |
| `0184` | Intentos de PIN excedidos.                   |
| `0190` | El emisor denegó la transacción sin detalles.|
| `0191` | Emisor no disponible.                        |
| `0200` | No honrar.                                   |
| `0202` | Tarjeta reportada como robada.               |
| `0204` | Tarjeta reportada como perdida.              |
| `0208` | Transacción no permitida.                    |
| `0211` | Número de tarjeta no válido.                 |
| `0212` | Transacción no válida.                       |
| `0222` | Violación de seguridad.                      |
| `0907` | Error de comunicación con el emisor.         |
| `0912` | El emisor no responde.                       |
| `0960` | Fallo del sistema.                           |

---

## Reglas de manejo de errores

1. Evalúa siempre **primero el código de retorno de la biblioteca**.
2. Si el código de retorno no es `0`, **no** asumas ningún resultado financiero.
3. Si el código de retorno es `0`, analiza la respuesta XML y valida `<estado>` y `<resultado>`.
4. Si el código de retorno es `-2`, realiza una **consulta de estado** antes de volver a intentarlo.
5. Nunca reintentes una operación financiera a ciegas.

---

## Mejores prácticas

* No asocies los códigos de respuesta numéricos directamente al éxito o al fracaso.
* Confía siempre en los campos de autorización XML como única fuente de verdad.
* Conserva los códigos de respuesta para fines de conciliación y auditoría.
* Maneja explícitamente los tiempos de espera (timeouts) y los errores de comunicación.

Esta página define el conjunto completo y oficial de códigos de resultado necesarios para una integración segura y conforme con Get Central.