Report
A paginated table with the columns, rows and totals you declare, in portrait or landscape, formatted but never calculated.
informe, with the premium design: a table with the columns you declare. It lets you export to PDF what your application already shows on screen —a summary by branch, the list of operations in a period— without this service needing to know anything about your business.
"informe": {
"titulo": "Consolidado por sucursal",
"subtitulo": "Operaciones completadas",
"alcance": "Todas las sucursales",
"periodo": { "desde": "2026-09-01", "hasta": "2026-09-15" },
"generadoEn": "2026-09-15T14:30:00-05:00",
"generadoPor": "Andrés Montoya",
"orientacion": "vertical"
},
"columnas": [
{ "clave": "grupo", "titulo": "Sucursal", "alineacion": "izquierda", "formato": "texto" },
{ "clave": "operaciones", "titulo": "Operaciones", "alineacion": "derecha", "formato": "numero" },
{ "clave": "totalCop", "titulo": "Total", "alineacion": "derecha", "formato": "moneda" }
],
"filas": [ { "grupo": "Aeropuerto", "operaciones": 12, "totalCop": 45000000 } ],
"totales": { "grupo": "Total", "operaciones": 20, "totalCop": 71000000 },
"moneda": "COP",
"notas": ""
- Required:
informe.titulo,columnas(a list with at least one column) andfilas(a list, which may be empty: the table then says «Sin registros», “No records”). If any is missing, the response is a 400 withfaltan, and nothing is composed. - Each column takes from each row the value of its
clave.alineacionisizquierda(left) —the default—,derecha(right) orcentro(center).ancho, optional, is a relative weight: a column with"ancho": 2is twice as wide as one with1. Without it, text weighs more than figures. formatoonly shapes the value, it never calculates:texto—the default—: as it arrives.numero: thousands separated with a dot and up to two decimals (1.200,75).moneda: with the symbol ofmoneda($ 45.000.000,US$ 1.500,25); decimals only if the figure has them.fecha: an ISO date comes out as15/09/2026, with the time if it has one (15/09/2026 14:30, the time as written, without converting its time zone). Anything that isn’t ISO comes out as it arrives.porcentaje: the number already computed, with%(12,5comes out as12,5 %; it is not multiplied by one hundred).- A value that already arrives as text comes out unchanged in any format, and one that doesn’t arrive leaves the cell empty.
totalesis drawn as it arrives, in a final row, column by column using the same keys. It is not the sum of the rows, and withouttotalesthere is no row.orientacion:vertical(portrait) —the default— orhorizontal, landscape A4, for lists with many columns. With seven or more columns, the font size and row spacing shrink a little.- It paginates. A list of thousands of rows continues over as many pages as needed, and each page repeats the table header, a line with the title, the scope and the period, and «Página x de y» (“Page x of y”).
- Optional data that doesn’t arrive —subtitle, scope, period, who and when, notes— takes up no row.
- The file is named
Informe_<titulo>_<periodo.desde>.pdf, without accents or spaces (Informe_Consolidado-por-sucursal_2026-09-01.pdf), withsin-fechaif the period doesn’t arrive.
Examples: informe.json (portrait) and informe-horizontal.json (landscape).
