Integración con data warehouse
Documentos a filas de BigQuery, listas para cruzar
Holofin lee PDF y escaneos y escribe cada campo en una tabla de BigQuery de su proyecto, en la región de la UE que elija.
| field | value | confidence | page | needs_review | |
|---|---|---|---|---|---|
| 1 | employer_name | Lumen Logistique SAS | 0.99 | 1 | false |
| 2 | employee_name | Camille Martin | 0.98 | 1 | false |
| 3 | pay_period | 2026-09 | 0.99 | 1 | false |
| 4 | contract_type | CDI | 0.95 | 1 | false |
| 5 | gross_salary | 3450.00 | 0.98 | 1 | false |
| 6 | net_before_tax | 2689.12 | 0.96 | 1 | false |
| 7 | net_paid | 2451.37 | 0.66 | 1 | true |
✓7 campos cargados
!1 marcados para revisión
Cómo funciona
- 1
Conecte BigQuery una sola vez
Cree un rol con permisos de inserción en un único esquema y pegue sus credenciales en Holofin. Holofin crea la tabla en la primera carga; nada más en BigQuery le resulta visible.
- 2
Envíe los documentos como ya lo hace
Súbalos en la aplicación, reenvíelos por correo electrónico o envíelos a la API. Holofin clasifica cada archivo, separa los lotes en documentos y lee los campos de cada tipo.
- 3
Consulte las filas
Cada campo llega como una fila con su confianza, la página de la que procede y un indicador needs_review. Crúcelo con sus propias tablas en BigQuery como cualquier otra fuente.
Cómo escribe el conector de BigQuery
Holofin escribe a través de la BigQuery Storage Write API en modo committed, de modo que cada fila puede consultarse en cuanto se escribe y nunca se carga dos veces. Utiliza una cuenta de servicio con el rol BigQuery Data Editor en un único dataset, en la ubicación que usted elija (EU por defecto).
El único permiso que necesita Holofin:
-- Service account: [email protected] GRANT `roles/bigquery.dataEditor` ON SCHEMA `holofin-analytics.extracted` TO "serviceAccount:[email protected]";
La tabla que escribe Holofin
Una fila por campo, de modo que un nuevo tipo de documento nunca cambia la tabla. Las columnas son las mismas en todas las plataformas; los tipos siguen la nomenclatura de BigQuery.
| document_id | STRING | Identificador del documento en Holofin, estable entre recargas. |
|---|---|---|
| document_type | STRING | La clase que Holofin asignó al documento: supplier_invoice, payslip, bank_statement, etc. |
| field | STRING | El nombre del campo, en snake_case, tal como se define en su esquema de extracción. |
| value | STRING | El valor como texto normalizado: fechas ISO, punto decimal, IBAN sin espacios. |
| confidence | FLOAT | Entre 0 y 1. El grado de certeza de Holofin sobre el valor. |
| page | INTEGER | La página del archivo de origen en la que se leyó el valor. |
| bbox | ARRAY<FLOAT> | La posición en esa página: x, y, ancho, alto, como fracciones de la página. |
| needs_review | BOOLEAN | True cuando la confianza es baja o falla una regla, como un saldo que no cuadra. |
| reviewed_by | STRING | Quién confirmó o corrigió el valor en Holofin, una vez revisado. |
| loaded_at | TIMESTAMP | Cuándo se escribió la fila. Las correcciones escriben una fila nueva; prevalece la más reciente. |
Consultar en BigQuery
Salario neto medio por empleador en las nóminas de esta semana, sin contar los valores pendientes de revisión:
-- Net pay declared on payslips this week, per employer, -- keeping only fields nobody needs to look at again SELECT employer.value AS employer, COUNT(*) AS payslips, ROUND(AVG(SAFE_CAST(net.value AS NUMERIC)), 2) AS avg_net_paid FROM `holofin-analytics.extracted.document_fields` AS net JOIN `holofin-analytics.extracted.document_fields` AS employer USING (document_id) WHERE net.field = 'net_paid' AND employer.field = 'employer_name' AND NOT net.needs_review AND net.loaded_at >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) GROUP BY employer ORDER BY payslips DESC
Seguridad
- Los documentos se procesan en Europa, en servidores de OVHcloud en Francia con certificación ISO 27001.
- Holofin solo escribe en el esquema que usted autoriza. No puede leer el resto de sus tablas.
- La conservación de los archivos de origen en Holofin se configura por organización, desde cero retención de datos hasta conservación indefinida. Las filas de su data warehouse siguen sus propias políticas.
- RGPD: Holofin actúa como encargado del tratamiento. Ningún documento sale de la Unión Europea.
Preguntas frecuentes
¿La tabla está particionada?
Sí. Holofin la crea particionada por día sobre loaded_at y con clustering por document_type y field, así que las consultas filtradas por documentos recientes escanean pocos datos.
¿Pueden quedarse los datos en la UE?
Sí. El dataset reside en su proyecto y en la ubicación que defina al crearlo, como EU o europe-west9 (París). Holofin, por su parte, procesa los documentos en Francia.
¿Cuánto tardan los campos en aparecer en BigQuery?
Unos segundos desde que se lee el documento. La mayoría de los documentos se leen en menos de un minuto, así que un archivo enviado por correo suele poder consultarse en BigQuery un minuto después.
¿Qué ocurre cuando un revisor corrige un valor?
Holofin escribe una fila nueva para ese campo con el valor corregido, needs_review a false y reviewed_by informado. Conserve la última fila por documento y campo para obtener el estado actual, o todas las filas para disponer de una pista de auditoría completa.
¿Se puede elegir qué campos se cargan?
Sí. Cada tipo de documento tiene un esquema de extracción en Holofin. Añada, renombre o elimine campos ahí y los siguientes documentos se cargarán con los nuevos nombres. La estructura de la tabla no cambia.
¿Qué documentos lee Holofin?
Cualquier documento empresarial enviado en PDF, escaneado o como foto: facturas, nóminas, extractos bancarios, notificaciones tributarias, extractos registrales, documentos de identidad, certificados. Holofin también comprueba si cada archivo ha sido manipulado y puede señalar un documento sospechoso antes de dar por buenos sus campos.
Pruebe Holofin con sus propios documentos.
Cada valor vinculado a la página de la que procede, cada PDF revisado contra manipulaciones, reglas comprobadas en todo el expediente.