Statuts
L'éditeur Statuts définit les statuts de cycle de vie qu'une facture peut prendre dans NomaUBL — codes tels que 200 Déposée, 205 Paiement reçu, 9906 En cours de traitement. Les mêmes codes apparaissent dans E-Invoicing → Actions, dans la modale de détail facture et dans tous les widgets du tableau de bord.
Chaque ligne associe un code réglementaire à :
- le Tag interne référencé par les fabriques
InvoiceStatusCatalogdu code Java ; - les libellés bilingues affichés dans l'interface ;
- le PA Code envoyé à l'API de la Plateforme Agréée ;
- un indicateur Collect qui détermine si le statut est interrogé depuis la PA ;
- les Groupes qui rattachent le statut aux compteurs du tableau de bord et aux filtres SQL.
La page fonctionne quel que soit le système source — JD Edwards, SAP, NetSuite ou ERP personnalisé — tant que la source est mappée vers UBL.
Deux évolutions livrées en 2026.05.5 :
- Champ Groupes — chaque statut déclare désormais le compteur de niveau supérieur auquel il appartient (
inflight,errorTech,errorBusiness,terminal) et l'étape funnel sur laquelle il se positionne (created,sent,pending,transmission,approved,rejected). Les compteurs du tableau de bord et les filtres SQL deDashboardApisont alimentés par cette source unique au lieu de listesIN ('9904','9905',…)codées en dur. Ajouter un nouveau statut PA tient en une ligne dans le template. - Tag en lecture seule — les valeurs de
Tagsont référencées par les fabriquesInvoiceStatusCatalogen Java ; un renommage casserait silencieusement les appelants, l'éditeur les protège donc. - Édition en ligne — chaque ligne est une carte qui se déplie en un formulaire à 4 colonnes (Code, Tag, PA Code, Polling sur la 1re ligne ; libellés FR + EN sur deux colonnes chacun sur la 2e ; multi-sélection des Groupes sur la 3e). La barre d'outils embarque un champ de recherche qui couvre Code, Tag, libellés, PA Code et libellés de groupes.
Accès à l'éditeur
- Barre latérale → Configuration → Système → Statuts (ou
/settings/statusesdirectement). - La liste s'ouvre sur l'ensemble des statuts déclarés, triés par code. Le champ de recherche filtre la liste ; un clic sur une ligne la déplie.
Vue d'ensemble
Champs par ligne
| Colonne | Exemple | Description |
|---|---|---|
| Code | 200 | Code de statut réglementaire enregistré en base (tableHeader). Identifiant canonique du statut dans NomaUBL. |
| Tag (lecture seule) | STATUS_DEPOSITED | Nom interne référencé par les fabriques InvoiceStatusCatalog du code Java. L'éditeur l'affiche en lecture seule — un renommage casserait silencieusement les appelants Java. |
| Libellé · Français | Déposée | Libellé français affiché dans l'interface quand la locale active est le français. |
| Libellé · Anglais | Deposited | Libellé anglais affiché dans l'interface quand la locale active est l'anglais. |
| PA Code | fr_e_invoicing_200 | Nom d'événement transmis à l'API de la Plateforme Agréée — placé dans le tableau names[] des appels de statut. Doit correspondre exactement à ce qu'attend la PA. |
| Polling — Interroger via la PA | case à cocher | Quand cochée, NomaUBL interroge ce statut auprès de l'API de la PA à chaque exécution de Synchronisation → Récupérer les statuts. Décocher pour exclure un statut du polling. |
| Groupes | multi-sélection | Compteur de niveau supérieur et étape funnel auxquels le statut est rattaché — alimente les widgets du tableau de bord et les filtres SQL de DashboardApi. Voir Groupes ci-dessous. |
Le bouton + Ajouter crée une ligne. La nouvelle ligne s'ouvre directement avec des champs vides. Cliquer sur l'en-tête d'une ligne la déplie ou la replie ; cliquer sur l'icône × à droite de l'en-tête supprime la ligne.
Groupes
Le champ Groupes remplace les anciennes colonnes CSV et les listes IN ('9904','9905',…) codées en dur dans le backend du tableau de bord. Il propose dix valeurs prédéfinies sur deux axes :
Niveau supérieur — compteurs et filtres SQL
| Valeur | Libellé | Utilisé par |
|---|---|---|
inflight | En cours | Carte hero En cours du tableau de bord ; filtres SQL qui dénombrent les factures « encore en mouvement ». |
errorTech | Erreur · Tech | Carte hero Rejetée — IT du tableau de bord ; remonte les échecs techniques / pipeline (XSL, PDF, HTTP PA, base). |
errorBusiness | Erreur · Métier | Carte hero Rejetée — Métier du tableau de bord ; remonte les échecs de validation / réglementaires émis par l'acheteur ou la PA. |
terminal | Terminal | Drill-down Total du tableau de bord pour les factures en fin de vie (déposée, payée, archivée, refusée). |
Étapes funnel — graphes du pipeline
| Valeur | Libellé | Utilisé par |
|---|---|---|
created | Étape · Créée | Funnel pipeline — créée localement, pas encore envoyée. |
sent | Étape · Envoi | Funnel pipeline — envoyée à la PA, en attente d'acquittement. |
pending | Étape · Attente PA | Funnel pipeline — PA a acquitté, en attente du traitement aval. |
transmission | Étape · Transmission | Funnel pipeline — transmise à la PA de l'acheteur. |
approved | Étape · Acceptée | Funnel pipeline / Couverture e-Reporting — acceptée à chaque étape. |
rejected | Étape · Rejetée | Funnel pipeline / Couverture e-Reporting — rejetée à une étape quelconque. |
Un statut déclare autant de groupes que nécessaire — typiquement une valeur de niveau supérieur plus une étape. La palette des pastilles de l'en-tête de ligne reprend celle de la multi-sélection : l'affectation se vérifie d'un coup d'œil.
L'endpoint /api/status-codes/groups sert la carte fusionnée, et le store React statusGroupsStore la met en cache une fois au démarrage de l'application. Ajouter un nouveau code de statut PA devient une modification d'une ligne dans le template — aucune intervention Java requise.
Articulation des champs entre eux
- Code est la source de vérité en base (
tableHeader). - Tag est consommé par le code applicatif via les fabriques
InvoiceStatusCatalog. L'éditeur le protège. - Libellé · Français / Anglais alimentent les textes d'interface. Les deux doivent être renseignés — quand un libellé est vide, l'interface se replie sur le Code.
- PA Code définit le contrat avec la Plateforme Agréée. Si la PA renomme un événement, seul
paCodedoit changer ici — le Tag reste stable, donc le code Java n'est pas impacté. - Collect pilote la boucle de polling déclenchée par Synchronisation → Récupérer les statuts. Les statuts positionnés uniquement en local (résultats de validation interne par exemple) ont en général Collect désactivé.
- Groupes alimente les compteurs du tableau de bord via
/api/status-codes/groups. Un statut sans groupe est invisible au tableau de bord.
Conseils & bonnes pratiques
- Aligner les Codes sur la réglementation. C'est le langage commun entre NomaUBL, la PA et les outils aval — éviter les codes personnalisés.
- Traiter le Tag comme un contrat interne stable. Il est en lecture seule à dessein ; un renommage doit modifier
InvoiceStatusCataloget ce template dans le même commit. - Faire correspondre les PA Codes exactement au catalogue de la PA. Une faute de frappe dans
fr_e_invoicing_xxxproduit des échecs d'intégration silencieux (la PA rejette les noms d'événements inconnus). - Cocher Collect uniquement sur les statuts effectivement émis par la PA. Interroger des statuts non supportés gaspille des appels API et pollue les journaux par des résultats vides.
- Affecter au moins un groupe de niveau supérieur à chaque statut actif. Faute de quoi les cartes hero En cours / Rejetée — IT / Rejetée — Métier du tableau de bord sous-comptent.
- Un statut peut appartenir à deux groupes de niveau supérieur. Une validation rejetée localement que la PA ne voit jamais peut être à la fois
errorTechetterminal— le tableau de bord la compte une fois par axe. - Utiliser le champ de recherche. Une recherche sur un fragment de libellé ou de PA Code va plus vite que le défilement de la liste, surtout après une mise à jour réglementaire qui ajoute cinq ou six codes.
- Les libellés bilingues ne sont pas optionnels. Renseigner Libellé · Français et Libellé · Anglais — l'interface se replie sur le Code quand le libellé de la locale active est vide, ce qui est peu lisible.