Skip to main content
Comfaca Créditos en Línea genera el documento contractual de cada solicitud de crédito a través de un microservicio externo denominado FlaskPDF. Este servicio recibe un payload estructurado con todos los datos de la solicitud, el solicitante, información laboral, económica y referencias, y produce un PDF firmable con el formato contractual de Comfaca. El flujo de generación consta de dos pasos: primero se genera el PDF (POST /generar-pdf), que construye el payload, consulta catálogos de parámetros, llama al servicio FlaskPDF y almacena el resultado en storage/pdfs/{solicitud_id}/; luego se descarga (GET /descargar-pdf) el PDF ya generado.
El endpoint POST /generar-pdf depende del servicio externo FlaskPDF. Si este servicio no está disponible o responde con error, la generación fallará con un 500 y el PDF no quedará almacenado. Verifica el estado del servicio FlaskPDF antes de reintentar.

POST /api/solicitudes/:id/generar-pdf

Dispara el proceso de generación del contrato PDF para una solicitud. Internamente:
  1. Carga la solicitud desde Prisma (incluyendo solicitud_solicitante, firmantes_solicitud y solicitud_payload).
  2. Consulta catálogos de parámetros del API de Sisuweb (ciudades, países, tipos de documento, niveles educativos, etc.).
  3. Construye el payload estructurado con pdfPayloadService.
  4. Envía el payload al servicio FlaskPDF y obtiene el PDF en base64.
  5. Guarda el PDF en storage y registra el archivo en la tabla pdfs_generados.
Autenticación: Requiere sesión activa.

Path Parameters

string
required
El numero_solicitud de la solicitud para la que se generará el PDF contractual. Formato: "000001-202501-LI".

Respuestas

boolean
true cuando el PDF fue generado y guardado exitosamente.
string
"PDF generado exitosamente".
object
Información del PDF generado.

Tabla de errores

Ejemplo — cURL

Ejemplo — Respuesta exitosa 200

Ejemplo — Error 500 (FlaskPDF falló)

Si los catálogos de parámetros del API de Sisuweb no están disponibles, el sistema intentará continuar con la generación usando los códigos sin resolver (ej. código "CO" en lugar de "Colombia"). Los logs del servidor registrarán un warning en este caso. El PDF puede generarse con campos descriptivos como códigos en lugar de etiquetas legibles.

GET /api/solicitudes/:id/descargar-pdf

Descarga el PDF contractual previamente generado para una solicitud. El archivo es enviado como un buffer binario con los headers adecuados para descarga directa en el navegador. El endpoint busca primero el PDF en el storage de documentos (documentoStorage.obtenerPdf); si no lo encuentra, intenta leerlo directamente desde la ruta registrada en pdfs_generados.path. Autenticación: Requiere sesión activa.

Path Parameters

string
required
El numero_solicitud de la solicitud cuyo PDF contractual se desea descargar.

Headers de respuesta exitosa

Tabla de errores

Ejemplo — cURL

Usa la bandera -o contrato_solicitud.pdf para guardar el PDF recibido directamente en disco. El nombre real del archivo es el definido en el header Content-Disposition.

Ejemplo — Error 404 (PDF no generado aún)


Flujo Completo de Generación y Descarga

El proceso completo para obtener el PDF contractual de una solicitud es:

Diagrama del proceso de generación

La generación del PDF es síncrona — el endpoint POST /generar-pdf bloquea hasta que FlaskPDF responda. En solicitudes complejas, esto puede tomar entre 5 y 15 segundos. Asegúrate de configurar un timeout adecuado en tu cliente HTTP (mínimo 30 segundos recomendado).