> ## Documentation Index
> Fetch the complete documentation index at: https://developers.insuranceboosters.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Agente de IA: PDFs de recibos pendientes en GNP

> Descarga los PDF de los recibos pendientes de una lista de pólizas en GNP.

El paso `gnp.receipt-documents` recibe números de póliza, consulta cuáles
aparecen en el reporte vigente de **Pólizas pendientes** y publica el PDF de
cada recibo pendiente encontrado.

GNP reporta los números de póliza con ceros a la izquierda. Puedes enviar
`623588738`; el paso lo relaciona con `00000623588738`.

## Campos

| Campo           | Requerido | Descripción                                                     |
| --------------- | --------- | --------------------------------------------------------------- |
| `actionKey`     | Sí        | Debe ser `gnp.receipt-documents`.                               |
| `credentialId`  | Sí        | Credencial `gnp.portal` del mismo tenant.                       |
| `policyNumbers` | No        | Números de póliza. Sin valor o `[]`, termina con cero archivos. |
| `name`          | No        | Nombre legible del paso.                                        |

## Ejemplo

```json theme={null}
{
  "name": "Descargar recibos pendientes",
  "actionKey": "gnp.receipt-documents",
  "credentialId": "cred_0123456789ab",
  "policyNumbers": [
    "623588738",
    "378312037"
  ]
}
```

## Output

El output contiene únicamente el resumen y los problemas encontrados. Los PDF
se publican como archivos del paso.

```json theme={null}
{
  "summary": {
    "requestedPolicies": 2,
    "matchedPolicies": 2,
    "receiptsFound": 2,
    "downloaded": 2,
    "failed": 0
  },
  "issues": []
}
```

Los archivos quedan disponibles en los pasos posteriores:

```javascript theme={null}
const pdfs = files.fromStep(0);

const resumen = pdfs.map((pdf) => ({
  nombre: pdf.name,
  poliza: pdf.metadata.policyNumber,
  recibo: pdf.metadata.receiptNumber,
  ramo: pdf.metadata.lineOfBusiness,
  vence: pdf.metadata.dueAt,
  monto: pdf.metadata.amount,
  moneda: pdf.metadata.currency,
  tamañoBytes: pdf.size,
  sha256: pdf.sha256,
}));

console.table(resumen);

output = {
  totalPdfs: pdfs.length,
  archivos: resumen,
};
```

La relación no depende del formato del nombre: `metadata.policyNumber` y
`metadata.receiptNumber` son campos estables. El nombre también queda legible:

```text theme={null}
Poliza_00000623588738_Recibo_000000000001.pdf
```

## Comportamiento

* Descarga todos los recibos pendientes de cada póliza solicitada.
* Si `policyNumbers` falta o es `[]`, no abre GNP: termina exitosamente con cero
  archivos y agrega `GNP_POLICY_NUMBERS_EMPTY` a `issues`.
* Si una póliza no aparece en el reporte pendiente, continúa con las demás y
  agrega `GNP_POLICY_NOT_IN_PENDING_REPORT` a `issues`.
* Si falla un PDF, continúa con los demás y lo registra como
  `GNP_RECEIPT_DOCUMENT_DOWNLOAD_FAILED`.
* Procesa los recibos del lote en una misma ejecución; una lista grande puede
  tardar varios minutos.
* No elige documentos por aproximación: descarga únicamente la fila exacta
  `REC: <número de recibo>`.

<Warning>
  Los PDF contienen datos personales. Limita el acceso a usuarios autorizados
  del tenant.
</Warning>

## Relacionado

* [Reporte de pólizas y recibos pendientes en GNP](/automatizaciones/paso-gnp-recibos-vencidos)
* [Archivos entre pasos](/automatizaciones/archivos-entre-pasos)
* [Paso JavaScript](/automatizaciones/paso-javascript)
