Règles de Transformation
Vue d'ensemble
Les règles de transformation nettoient ou réécrivent les données extraites automatiquement — un champ dans l’en-tête, une colonne dans un tableau, des lignes entières d’un tableau, ou un attribut du document — à chaque fois qu’un document est traité et à chaque fois qu’il est enregistré. Elles remplacent les petits scripts que de nombreuses organisations écrivaient pour « toujours tronquer ce champ », « par défaut cette colonne à 1 », « mapper les codes unités de ce fournisseur » ou « regrouper les lignes de cet fournisseur en une seule ligne totale ».
Une règle est définie par type de document et s’exécute sur chaque document de ce type. Les règles s’exécutent avant la validation, les scripts et la correspondance des bons de commande, de sorte que tout ce qui suit voit déjà les valeurs transformées.
Comment y accéder
Naviguez vers Paramètres → Paramètres globaux → Types de documents.
Ouvrez le type de document et choisissez Règles de transformation. La liste affiche chaque règle du type avec sa portée, sa cible, sa priorité et si elle est active.
Cliquez sur Nouvelle règle pour ouvrir le générateur de règles, ou ouvrez une règle existante pour la modifier.
Anatomie d’une règle
Nom / clé
Le nom affiché dans les listes, messages et l’historique des correspondances, et une clé technique qui reste stable lorsque vous renommez la règle.
Portée
Où la règle écrit : un champ d’en-tête, une colonne de tableau, un tableau (lignes entières) ou un attribut du document. Voir ci-dessous.
Cible
Le champ, la colonne (avec son tableau) ou le tableau sur lequel la règle écrit.
Source
Optionnel. D’où la règle lit son entrée au lieu de la cible elle-même : header.<field> pour un champ d’en-tête, doc.<attribute> pour un attribut du document, row.<column> pour une autre colonne de la même ligne (portée colonne uniquement).
Quand
Toujours, ou seulement lorsque une condition est vraie (voir Conditions).
Actions
La liste des transformations, appliquées dans l’ordre ; la sortie d’une action est l’entrée de la suivante.
Priorité
Les règles de même portée s’exécutent par priorité croissante (puis par clé). Utilisez-la lorsqu’une règle doit voir le résultat d’une autre.
Exécuter une fois
La règle s’applique à un document au plus une fois. Nécessaire pour les actions qui changeraient la valeur à chaque enregistrement (sous-chaîne, remplacement regex, extraction regex) et pour les règles de tableau qui ne doivent pas reconstruire les lignes à chaque fois.
Journaliser l’exécution
Écrit une ligne de journal par application — utile lors de l’ajustement d’une nouvelle règle.
Portées
Champ d’en-tête
un champ d’en-tête extrait (numéro de facture, devise, …)
tronquer et mettre en majuscules le numéro de facture ; mapper « EUR€ » en « EUR »
Colonne de tableau
une colonne dans chaque ligne d’un tableau
par défaut UNIT_PRICE_PER à 1 ; supprimer le préfixe « Art.-Nr. » du numéro d’article
Tableau
les lignes d’un tableau
vider les lignes et ajouter une ligne totale pour un fournisseur qui est apparié sur le total
Attribut du document
un attribut du document lui-même (actuellement la sous-organisation)
diriger les documents d’un fournisseur vers une sous-organisation
Les règles s’exécutent portée par portée dans cet ordre : en-tête → document → tableau → colonne. Une règle de colonne voit donc déjà les lignes qu’une règle de tableau a ajoutées.
Conditions (« seulement lorsque »)
Une condition compare une valeur du document avec une constante. La valeur provient d’un champ d’en-tête (header.<field>), d’un attribut du document (doc.<attribute>) ou, pour les règles de colonne, d’une colonne de la ligne courante (row.<column>).
est / n’est pas
comparaison exacte
est l’un de / n’est pas l’un de
valeur dans une liste
contient, commence par, finit par
comparaison de texte
est vide / n’est pas vide
aucune valeur nécessaire
supérieur à, inférieur à, au moins, au plus
comparaison numérique
correspond
expression régulière
Les conditions peuvent être regroupées avec toutes (et) et n’importe laquelle (ou) et niées avec pas. Exemple : seulement lorsque header.supplier_id est 20723 — la règle s’exécute pour un seul fournisseur.
Actions
Actions pour les champs d’en-tête et les colonnes de tableau (elles forment un pipeline ; la valeur entre en haut et sort en bas) :
trim
supprimer les espaces (ou caractères donnés) à gauche, à droite ou des deux côtés
case
majuscule, minuscule, titre ou capitaliser
pad
compléter jusqu’à une longueur avec un caractère, à gauche ou à droite
truncate
couper à une longueur maximale
affix
ajouter un préfixe ou suffixe, ou en supprimer un
sanitize
ne garder qu’une classe de caractères (alphanumérique, alpha, numérique, alphanumérique + espace) ou supprimer un ensemble de caractères
substring
prendre une partie de la valeur par début et longueur ou fin
regex_replace
remplacer ce qu’une expression régulière correspond
regex_extract
garder ce qu’une expression régulière capture
value_map
mapper des valeurs vers d’autres valeurs (optionnellement insensible à la casse, avec une valeur par défaut)
date_format
reformater une date (l’entrée doit être la date ISO que DocBits stocke dans value)
number_format
reformater un nombre
default
définir une valeur uniquement lorsque le champ est vide
set_value
définir une valeur fixe, quel que soit le contenu du champ
clear
vider le champ
Actions pour la portée tableau (elles agissent sur les lignes, pas sur les valeurs, et ne peuvent pas être mélangées avec les actions ci-dessus) :
clear_rows
supprimer toutes les lignes du tableau
add_row
ajouter une ligne à la fin ou au début ; chaque colonne reçoit soit une valeur fixe soit une valeur lue depuis l’en-tête (header.<field>) ou le document (doc.<attribute>)
Quand les règles s’exécutent
Pendant le traitement, après l’extraction et avant la validation, les scripts et la correspondance des bons de commande.
À chaque enregistrement du document dans lequel les données extraites ont changé. Les règles sans Exécuter une fois sont appliquées à nouveau à chaque enregistrement ; parce que chaque action sauf les trois ci-dessus est idempotente, une valeur déjà sous la forme cible reste telle quelle.
Règles de transformation et correspondance des bons de commande
Les règles de tableau et de colonne modifient ce que le moteur de correspondance des BC voit :
Une règle de tableau qui reconstruit les lignes (par exemple vider toutes les lignes et ajouter une ligne totale) conserve une correspondance de bon de commande existante tant qu’elle produit les mêmes lignes à nouveau — les valeurs sont comparées par leur sens, donc
1.0et1.00sont la même ligne. Les lignes gardent leur identité et la correspondance survit à chaque enregistrement.Si une règle remplace ou supprime des lignes qui étaient appariées, la correspondance ne peut pas être conservée. Le document enregistre alors quelle règle l’a supprimée, l’écran de correspondance des bons de commande affiche cela comme raison (« La correspondance du BC n’a pas pu être enregistrée : la règle de transformation "…" a reconstruit le tableau ») et les administrateurs reçoivent un lien vers la règle. L’historique des correspondances du document affiche une étape Règles de transformation avant la première étape de correspondance avec les règles qui ont été exécutées.
Le nombre de lignes après les règles est ce que comptent les conditions d’activation des règles de correspondance. Une règle qui condense une facture en une ligne n’a de sens qu’avec une règle de correspondance sur total active pour les documents à une ligne (
[[count(table_lines)]] >= 1).
Exemples
Nettoyer le numéro de facture — champ d’en-tête invoice_id, toujours : trim → case majuscule.
Définir par défaut la base de prix — colonne de tableau UNIT_PRICE_PER du tableau des lignes, toujours : default 1.
Mapper les codes unités d’un fournisseur — colonne de tableau UNIT du tableau des lignes, seulement lorsque header.supplier_id est 10040 : value_map { "STK": "PCE", "KG": "KGM" }.
Une ligne totale pour un fournisseur apparié sur le total — portée tableau sur le tableau des lignes, seulement lorsque header.supplier_id est 20723 : clear_rows, puis add_row avec POSITION = 001, UNIT_PRICE = 1.0, QUANTITY = header.total_net_amount, NET_AMOUNT = header.total_net_amount. À associer avec une règle de correspondance sur total dont la condition d’activation accepte un document à une ligne.
Diriger un fournisseur vers une sous-organisation — attribut du document sub_org_id, seulement lorsque header.supplier_id est l’un de […] : set_value <id de la sous-organisation>.
Dépannage
La règle n’a rien changé
Est-elle active ? Le type de document correspond-il ? La condition est-elle vraie pour ce document (comparez la valeur exacte, espaces inclus) ? Une règle avec Exécuter une fois a-t-elle déjà été appliquée au document ?
La valeur change à nouveau à chaque enregistrement
Le pipeline contient substring, regex_replace ou regex_extract. Activez Exécuter une fois ou rendez l’expression idempotente.
La correspondance du bon de commande est perdue après enregistrement
Une règle de tableau a remplacé les lignes appariées. La raison sur le document nomme la règle ; faites en sorte que la règle reproduise les mêmes lignes, ou activez Exécuter une fois.
Une règle de correspondance ne s’exécute jamais après la transformation
La règle a changé le nombre de lignes ; ajustez la condition d’activation de la règle de correspondance.
Last updated