Erreurs d'intégration
L'écran Erreurs d'intégration est l'outil d'analyse des échecs construit sur la table de validation (F564236). Il affiche chaque entrée enregistrée par le pipeline de validation — des échecs de règles XSD / Schematron jusqu'aux erreurs d'intégration de cycle de vie (PDF, PA, base, …) — au travers de deux vues complémentaires :
- par règle — cartes classées et regroupées par
(règle, source), qui indiquent chacune le nombre de factures touchées par la règle et les pastilles de sévérité associées. Le moyen le plus rapide pour repérer la règle qui pose le plus de problèmes en ce moment. - par événement — tableau plat de chaque événement d'erreur, avec sa sévérité, sa source, sa règle, son message, son triplet documentaire et le statut courant de la facture. L'endroit pour analyser une ligne précise.
La page s'applique quel que soit le système source — JD Edwards, SAP, NetSuite ou ERP personnalisé. Les erreurs proviennent du pipeline de validation, qui travaille sur l'UBL généré ; le format source est donc transparent à ce stade.
La page était limitée jusqu'ici à la vue des erreurs orphelines — un tableau plat des lignes F564236 sans en-tête de facture rattaché. Elle devient un vrai outil d'analyse des échecs : bascule par règle / par événement, filtre catégorie (UBL vs Intégration / cycle de vie), descriptions lisibles tirées des Schematron embarqués, et case Sans rattachement uniquement qui rétablit l'ancien comportement en un clic. La vue par défaut affiche désormais toutes les erreurs ; l'orphelin n'est plus le filtre principal.
Ouverture
- Barre latérale → Application → Erreurs d'intégration.
- Depuis le Tableau de bord : le lien Tout voir du widget Règles en échec ouvre la page sur l'onglet par règle ; un clic sur une règle précise ouvre l'onglet par événement avec cette règle pré-appliquée comme puce de filtre.
Vue d'ensemble
Les cartes de règles sont dimensionnées en CSS via auto-fill plutôt que auto-fit : une dernière rangée incomplète n'étire donc plus une carte unique sur toute la largeur.
Barre d'outils
La même barre d'outils pilote les deux vues.
| Contrôle | Comportement |
|---|---|
| Bascule de vue | Par règle (vue par défaut après un lien profond depuis le tableau de bord) ou Par événement. Les autres filtres sont conservés au changement de vue — la recherche, la sévérité et la catégorie restent appliquées. |
| Recherche | Correspondance par sous-chaîne sur DOC, DCT, KCO et le texte du message. Exécutée côté serveur, avec un délai (debounce). |
| Catégorie | Toutes sources (par défaut), Validation UBL (règles Schematron / XSD — UVSRCL IN ('EN16931', 'CIUSFR', 'FREXTIC', 'CPRO', 'XSD', 'UBL')), Intégration / cycle de vie (le reste — erreurs runtime émises par le dispatcher : PDF, PA, base, …). |
| Pastilles de sévérité | Toutes / FATAL / ERROR / WARNING / INFO. Une seule sévérité à la fois ; cliquer à nouveau sur la pastille active retire le filtre. |
Sans rattachement uniquement (par événement uniquement) | Rétablit le comportement « orphelin » de la version précédente — ne garde que les lignes sans en-tête de facture rattaché. Désactivé par défaut, accessible en un clic au besoin. |
| Rafraîchir | Relance la requête en cours. |
Filtres avancés (2026.05.10)
Un panneau Filtres avancés pliable sous la barre d'outils propose une ligne par colonne filtrable de la spec Vues de liste active (view.integration-errors) — avec des sélecteurs d'opérateurs par colonne (contains, equals, ≠, <, ≤, >, ≥, between, empty, not empty). Les modifications restent en brouillon tant que Exécuter ne les valide pas.
Le drill-through Erreurs récentes du Tech Dashboard remonte aussi ici : quand le tableau de bord transmet { doc, dct, kco }, une pastille indique le filtre actif et propose un × pour le retirer. Utile quand le panneau est replié et que le filtre serait sinon invisible.
Depuis 2026.05.12, la page fonctionne en mode hybride client-side — une tranche serveur capée par Exécuter (spec.maxRows, 5000 par défaut), puis TanStack gère filter / sort / paginate dans la tranche. Un message X / Y lignes à côté de Exécuter signale quand le cap est atteint. Depuis 2026.05.13, la colonne refList invoiceStatus reçoit un picker multi-sélection qui émet une clause IN (?,?,?) côté serveur — choisir plusieurs statuts renvoie l'union.
Vue par règle
Chaque carte regroupe tous les événements d'erreur qui partagent le même couple (règle, source) et affiche :
| Élément | Source | Signification |
|---|---|---|
| Code de règle (en haut à gauche) | UVY56RULE | Identifiant de la règle — par exemple BR-CL-23, BR-FR-12, UBL_CREATION. |
| Source (sous le code) | UVSRCL | Le moteur de validation — EN16931, CIUSFR, FREXTIC, CPRO, XSD, UBL, ou l'un des compartiments d'intégration (INTEG, PROCESS, XSL, PDF, PA, DB, …). |
| Description (ligne secondaire) | ValidationRuleCatalog | Description lisible, dans la langue de l'interface quand disponible. |
| Décompte (en haut à droite) | COUNT(DISTINCT doc, dct, kco) agrégé | Nombre de factures touchées par la règle pour les filtres actifs. |
| Pastilles de sévérité (en bas) | (level, count) agrégé | Répartition par sévérité — FATAL · n, ERROR · n, WARNING · n, INFO · n. |
Les cartes sont triées par décompte décroissant ; un clic bascule sur la vue par événement avec la règle pré-appliquée comme puce de filtre.
Provenance des descriptions
Depuis 2026.05.4, la page affiche pour chaque code de règle sa description lisible : un code comme BR-CL-23 n'a plus besoin d'être croisé avec un fichier Schematron externe.
Un nouveau ValidationRuleCatalog analyse les .sch embarqués au premier appel et extrait un dictionnaire {id de règle → description} en repérant les lignes [<id>]<séparateur><description> dans chaque bloc <assert>. Le séparateur est souple (- ou :, espaces autour optionnels) et couvre les trois formats des quatre Schematron embarqués :
| Schematron | Format | Exemple |
|---|---|---|
| EN 16931 | [<id>]-<description> (sans espaces) | [BR-CL-23]-Currency code must follow ISO 4217. |
| FREXT-IC | [<id>] - <description> (avec espaces) | [BR-FREXT-IC-08] - SIRET must be present on B2B. |
| CIUS-FR | [<id>] : <description> (deux-points, convention FNFE-MPE) | [BR-FR-23/BT-49] : Document is missing the order reference. |
Le catalogue ajoute aussi douze codes de cycle de vie / intégration avec une description française : UBL_CREATION, DB_INSERT, DB_UPDATE, PA_SEND, PA_TIMEOUT, PDF_RENDER, XSL_TRANSFORM, EMAIL_SEND, NOTIFY_DISPATCH, STATUS_TRANSITION, EXTRACT_BIP, EXTRACT_FTP — ce sont les codes émis par ErrorCatalog quand une étape runtime échoue.
Le catalogue fusionné est exposé sur GET /api/integration-errors/catalog ; le frontend le met en cache une fois par chargement de page via le hook useRuleCatalog.
Les 34 assert du Schematron BR-FR-CPRO n'ont pas d'attribut id. Le validateur enregistre donc un code de règle vide pour ces événements ; ils apparaissent dans la vue par événement avec une colonne Règle vide et n'apparaissent pas dans les cartes par règle. Le Schematron lui-même fonctionne ; seules les étiquettes de règle manquent.
Vue par événement
Tableau plat, une ligne par événement de validation. Le tri par défaut est la clé documentaire ascendante (les lignes d'une même facture restent ainsi groupées) et la pagination affiche 50 lignes par page par défaut.
Depuis 2026.05.10, la table passe par DataTableV2 en mode piloté par spec : la forme des colonnes vient de la spec view.integration-errors sur db-nomaubl et le défaut embarqué livre toutes les colonnes listées ci-dessous. Ajouter des colonnes depuis le catalogue ou retirer une colonne de la liste blanche de filtres se fait depuis l'éditeur Vues de liste.
| Colonne | Source | Description |
|---|---|---|
| Sévérité | UVY56LEVEL | Badge coloré — FATAL / ERROR / WARNING / INFO. |
| Date (2026.05.9) | UVUPMJ + UVUPMT | Date et heure d'enregistrement de l'événement. Même contexte temporel que la carte « erreurs récentes » du Tableau de bord IT — le triage n'a plus besoin d'ouvrir une ligne au préalable. |
| Doc | UVDOC | Numéro de document issu des données source. |
| Dct | UVDCT | Type de document. |
| Kco | UVKCO | Code société. |
| Seq | UVSEQN | Numéro de séquence — ordre dans lequel les règles de validation se sont déclenchées au cours du traitement défaillant. |
| Source | UVSRCL | Moteur de validation — EN16931, CIUSFR, FREXTIC, CPRO, XSD, UBL, ou un compartiment d'intégration. |
| Règle | UVY56RULE | Identifiant de règle. La cellule affiche le code accompagné de sa description en dessous (et en infobulle au survol). |
| Facture maintenant | jointure F564231 | Statut courant de la facture, récupéré en temps réel pour vérifier si l'échec a déjà été retraité. Vide quand il n'y a pas d'en-tête (erreur orpheline). |
| Client | F564231.UHALPH | Nom du client quand la facture existe. Utile pour trier par contrepartie. |
La colonne Message est retirée en 2026.05.9. Les messages Schematron / XPath étaient trop longs pour une cellule de grille (la colonne consommait ~720 px et continuait de tronquer le contexte), le message complet vit donc désormais dans une modale de détail ouverte par un clic sur la ligne. La modale sépare aussi le contexte de debug CTC-FR (Num Fact : …, Code : S, rate : 20, …) de l'explication française — l'explication devient la ligne principale, les champs de debug s'affichent dans une petite grille monospace en dessous.
Clic sur une ligne
Le clic sur une ligne est toujours cliquable depuis 2026.05.9 — les lignes appariées et les lignes orphelines ouvrent toutes les deux une modale :
- Lignes appariées (quand la facture existe dans
F564231) ouvrent la modale de détail complète E-Invoicing sur l'onglet Historique — la même modale que celle ouverte par un clic sur une ligne de la boîte Notifications. Le cycle de vie, les erreurs de validation et la charge utile PA restent à un seul onglet. - Lignes orphelines ouvrent la nouvelle
ErrorDetailModal— une vue ciblée dimensionnée pour un seul événement de validation sans facture autour. Elle affiche : le badge de niveau, l'identifiant de règle + sa description (résolue viauseRuleCatalog), la source, la date, le tripletdoc / dct / kco(avec la mention aucune facture correspondante dans F564231), le client quand il est connu, et le message complet rendu via le même helpersplitValidationMessageque la modale des lignes appariées.
Sans rattachement uniquement
Une petite case dans la barre d'outils — Sans rattachement uniquement — rétablit le comportement de la version précédente : seules les lignes sans en-tête de facture rattaché. Ce sont les erreurs orphelines, typiquement des échecs de transformation qui ont empêché l'enregistrement de la facture (le XSL a produit un document que le validateur UBL ne peut pas analyser, ou un FATAL a interrompu le pipeline avant l'insertion en base).
La vue par défaut affiche toutes les erreurs, rattachées ou non. Cocher la case se fait en un clic ; rien d'autre n'est nécessaire.
Démarche d'instruction
La page est en lecture seule — la correction se fait en amont (donnée source, template, XSL, connecteur) et un nouveau traitement vide la ligne. Démarche typique :
- Ouvrir la vue par règle en premier. Examiner les trois cartes de tête — une règle qui frappe des centaines de factures est le point de départ évident.
- Cadrer la catégorie. Validation UBL n'affiche que les événements Schematron / XSD ; Intégration / cycle de vie n'affiche que les erreurs runtime émises par le dispatcher. Mélanger les deux n'est utile que pour rechercher un document précis.
- Cliquer sur la règle pour basculer sur Par événement avec la puce de filtre pré-appliquée. La liste affiche alors chaque facture concernée par la règle.
- Cliquer sur une ligne pour ouvrir l'onglet Historique de la facture. Les erreurs de validation, le cycle de vie et la charge utile PA y sont rassemblés.
- Lire le message et la description de la règle. La description donne le quoi ; le message donne le où (champ concerné, ligne concernée). Pour les règles Schematron, recouper avec la page Codes motifs au besoin.
- Ouvrir le XML source dans Outils UBL → XML Viewer pour le triplet
(doc, dct, kco)— le fichier se trouve dansdirInput/<template>/. La lecture de la source confirme si l'échec vient des données (champ manquant) ou du template (bug du XSL). - Relancer le pipeline une fois la source corrigée. Utiliser Traitement de document sur le fichier corrigé. Une fois la facture enregistrée avec succès, Facture maintenant passe d'une cellule vide au nouveau statut, et la ligne n'est plus orpheline.
Conseils & bonnes pratiques
- Commencer par la vue par règle. Une seule règle qui frappe des centaines de factures indique un seul changement amont (champ renommé, code TVA périmé, liste de contreparties régénérée). Corriger la règle vide alors la majorité des lignes en une seule relance.
- Utiliser le filtre catégorie pour trier. Les échecs de validation UBL viennent en général de bugs template / XSL ; les erreurs Intégration / cycle de vie viennent plutôt de l'environnement / connecteur (PA indisponible, timeout SMTP, verrou base). Identifier la bonne catégorie divise par deux le temps d'analyse.
- Surveiller FATAL en priorité. Un FATAL non nul signifie que le pipeline s'est interrompu — la facture n'a jamais été enregistrée et seule la ligne orpheline existe. Les lignes ERROR signifient que la facture est passée partiellement et que la page E-Invoicing standard en garde aussi la trace.
Sans rattachement uniquementest la vue historique. La version précédente n'affichait que les orphelins. Cocher la case rétablit ce comportement pour la compatibilité — la vue par règle, le filtre catégorie et les descriptions de règle restent actifs.- Les erreurs disparaissent automatiquement après un ré-import réussi. Une fois l'en-tête de facture créé ou mis à jour, la colonne Facture maintenant de la ligne reflète le nouveau statut. Les lignes orphelines (sans en-tête du tout) n'apparaissent plus comme telles dès qu'un traitement aboutit. La ligne sous-jacente reste dans
F564236pour l'audit, mais sort de l'ensemble non rattaché. - Les liens profonds depuis le tableau de bord évitent une étape. Le widget Règles en échec du Tableau de bord ouvre cette page pré-filtrée — un seul clic entre la constatation « cette règle pose problème » et l'examen détaillé des événements.