Intégration data warehouse
Vos documents en lignes BigQuery, prêtes à joindre
Holofin lit PDF et scans et écrit chaque champ dans une table BigQuery de votre projet, dans la région européenne de votre choix.
| 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 champs chargés
!1 à vérifier
Comment ça marche
- 1
Connectez BigQuery une seule fois
Créez un rôle avec des droits d'insertion sur un seul schéma et collez ses identifiants dans Holofin. Holofin crée la table au premier chargement ; il ne voit rien d'autre dans BigQuery.
- 2
Envoyez vos documents comme d'habitude
Dépôt dans l'application, transfert par e-mail ou appel à l'API. Holofin classe chaque fichier, découpe les liasses en documents et lit les champs propres à chaque type.
- 3
Interrogez les lignes
Chaque champ arrive sous forme d'une ligne, avec sa confiance, la page dont il provient et un indicateur needs_review. Joignez-le à vos propres tables dans BigQuery comme n'importe quelle autre source.
Comment le connecteur BigQuery écrit les données
Holofin écrit via la BigQuery Storage Write API en mode committed : chaque ligne est interrogeable dès son écriture et n'est jamais chargée deux fois. Il utilise un compte de service doté du rôle BigQuery Data Editor sur un seul dataset, dans l'emplacement de votre choix (EU par défaut).
Le seul droit dont Holofin a besoin :
-- Service account: [email protected] GRANT `roles/bigquery.dataEditor` ON SCHEMA `holofin-analytics.extracted` TO "serviceAccount:[email protected]";
La table écrite par Holofin
Une ligne par champ : un nouveau type de document ne modifie jamais la table. Les colonnes sont identiques d'une plateforme à l'autre ; les types suivent la nomenclature de BigQuery.
| document_id | STRING | Identifiant Holofin du document, stable d'un chargement à l'autre. |
|---|---|---|
| document_type | STRING | La classe attribuée au document par Holofin : supplier_invoice, payslip, bank_statement, etc. |
| field | STRING | Le nom du champ, en snake_case, tel que défini dans votre schéma d'extraction. |
| value | STRING | La valeur en texte normalisé : dates ISO, point décimal, IBAN sans espaces. |
| confidence | FLOAT | Entre 0 et 1. Le degré de certitude de Holofin sur la valeur. |
| page | INTEGER | La page du fichier source sur laquelle la valeur a été lue. |
| bbox | ARRAY<FLOAT> | L'emplacement sur cette page : x, y, largeur, hauteur, en fractions de la page. |
| needs_review | BOOLEAN | Vrai quand la confiance est faible ou qu'une règle échoue, par exemple un solde qui ne tombe pas juste. |
| reviewed_by | STRING | La personne qui a confirmé ou corrigé la valeur dans Holofin, le cas échéant. |
| loaded_at | TIMESTAMP | L'heure d'écriture de la ligne. Une correction écrit une nouvelle ligne ; la plus récente fait foi. |
Interroger les données dans BigQuery
Salaire net moyen par employeur sur les bulletins de la semaine, hors valeurs encore en attente de revue :
-- 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
Sécurité
- Les documents sont traités en Europe, sur des serveurs OVHcloud situés en France et certifiés ISO 27001.
- Holofin écrit uniquement dans le schéma que vous lui ouvrez. Il ne peut pas lire vos autres tables.
- La durée de conservation des fichiers sources dans Holofin se règle par organisation, de zéro rétention des données à une conservation illimitée. Les lignes de votre entrepôt suivent vos propres règles.
- RGPD : Holofin agit en tant que sous-traitant. Aucun document ne quitte l'Union européenne.
Questions fréquentes
La table est-elle partitionnée ?
Oui. Holofin la crée partitionnée par jour sur loaded_at et clusterisée sur document_type et field : les requêtes filtrées sur les documents récents scannent peu de données.
Les données peuvent-elles rester dans l'UE ?
Oui. Le dataset se trouve dans votre projet et dans l'emplacement choisi à sa création, par exemple EU ou europe-west9 (Paris). Holofin traite lui-même les documents en France.
En combien de temps les champs apparaissent-ils dans BigQuery ?
Quelques secondes après la lecture du document. La plupart des documents sont lus en moins d'une minute : un fichier envoyé par e-mail est en général interrogeable dans BigQuery une minute plus tard.
Que se passe-t-il quand un relecteur corrige une valeur ?
Holofin écrit une nouvelle ligne pour ce champ avec la valeur corrigée, needs_review à false et reviewed_by renseigné. Gardez la dernière ligne par document et par champ pour obtenir l'état courant, ou conservez toutes les lignes pour une piste d'audit complète.
Puis-je choisir les champs chargés ?
Oui. Chaque type de document a son schéma d'extraction dans Holofin. Ajoutez, renommez ou supprimez des champs : les documents suivants arrivent avec les nouveaux noms. La structure de la table ne change pas.
Quels documents Holofin sait-il lire ?
Tout document d'entreprise envoyé en PDF, en scan ou en photo : factures, bulletins de paie, relevés bancaires, avis d'imposition, extraits Kbis, pièces d'identité, attestations. Holofin vérifie aussi que chaque fichier n'a pas été falsifié et peut signaler un document suspect avant qu'on se fie à ses champs.
Testez Holofin sur vos propres documents.
Chaque valeur reliée à sa position sur la page, chaque PDF analysé pour détecter les falsifications, des règles appliquées à l'ensemble du dossier.