Intégration data warehouse

Vos documents dans PostgreSQL, la base que vous utilisez déjà

Holofin lit PDF et scans et écrit chaque champ dans une table Postgres, à côté des données de votre application. Pas besoin de data warehouse.

Banca Esempio S.p.A.
COORDINATE BANCARIE
Filiale di Torino Centro
IntestatarioStudio Ferri e Associati S.r.l.
IBANIT60 X054 2811 1010 0000 0123 456
BIC / SWIFTBESPITTMXXX
ValutaEUR

✓5 champs chargés

!1 à vérifier

Document lu par Holofin et chargé dans PostgreSQL : relevé d'identité bancaire (RIB). Exemple fictif, tous les noms et les chiffres sont inventés.

Comment ça marche

  1. 1

    Connectez PostgreSQL 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 PostgreSQL.

  2. 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. 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 PostgreSQL comme n'importe quelle autre source.

Comment le connecteur PostgreSQL écrit les données

Holofin se connecte en TLS et écrit avec COPY par petits lots. Il fonctionne avec tout PostgreSQL 13 ou plus récent : vos propres serveurs, Amazon RDS et Aurora, Google Cloud SQL, Azure Database, Supabase ou Neon. Son rôle peut insérer dans une seule table, et rien d'autre.

Le seul droit dont Holofin a besoin :

CREATE ROLE holofin_loader LOGIN PASSWORD '...';
GRANT USAGE ON SCHEMA extracted TO holofin_loader;
GRANT INSERT, SELECT ON extracted.document_fields TO holofin_loader;

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 PostgreSQL.

extracted.document_fields
document_idSTRINGIdentifiant Holofin du document, stable d'un chargement à l'autre.
document_typeSTRINGLa classe attribuée au document par Holofin : supplier_invoice, payslip, bank_statement, etc.
fieldSTRINGLe nom du champ, en snake_case, tel que défini dans votre schéma d'extraction.
valueSTRINGLa valeur en texte normalisé : dates ISO, point décimal, IBAN sans espaces.
confidenceFLOATEntre 0 et 1. Le degré de certitude de Holofin sur la valeur.
pageINTEGERLa page du fichier source sur laquelle la valeur a été lue.
bboxARRAY<FLOAT>L'emplacement sur cette page : x, y, largeur, hauteur, en fractions de la page.
needs_reviewBOOLEANVrai quand la confiance est faible ou qu'une règle échoue, par exemple un solde qui ne tombe pas juste.
reviewed_bySTRINGLa personne qui a confirmé ou corrigé la valeur dans Holofin, le cas échéant.
loaded_atTIMESTAMPL'heure d'écriture de la ligne. Une correction écrit une nouvelle ligne ; la plus récente fait foi.

Interroger les données dans PostgreSQL

Les RIB encore en attente de relecture, une ligne par dossier client, avec FILTER et bool_or :

-- Bank details still waiting for a reviewer, per client file
SELECT
  document_id,
  max(value) FILTER (WHERE field = 'iban') AS iban,
  bool_or(needs_review AND reviewed_by IS NULL) AS pending_review
FROM extracted.document_fields
WHERE document_type = 'bank_details'
GROUP BY document_id
HAVING bool_or(needs_review AND reviewed_by IS NULL)
ORDER BY document_id;

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

Mon application peut-elle réagir au chargement d'un document ?

Oui. Ajoutez un trigger sur la table, ou faites un LISTEN sur un canal notifié par ce trigger : votre application voit chaque champ dès son écriture.

L'IBAN est-il vérifié avant le chargement ?

Holofin vérifie la clé de contrôle de l'IBAN. Une valeur invalide est chargée avec needs_review à true, pour que personne ne paie un compte mal lu.

En combien de temps les champs apparaissent-ils dans PostgreSQL ?

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 PostgreSQL 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.

Holofin