Aller au contenu principal

Tables de base de données

NomaUBL persiste chaque artefact du pipeline e-invoicing — la source ERP originale, le document UBL généré, la décomposition par ligne et par taux de TVA, les événements de cycle de vie, les erreurs de validation, le journal de traitement runtime, les soumissions e-reporting et le triplet utilisateur / rôle / session.

Le schéma est identique sur Oracle et PostgreSQL — la DDL s'adapte au dialecte (BLOBBYTEA, NUMBERINTEGER, VARCHAR2VARCHAR) mais les noms de colonnes, les clés primaires et la sémantique restent les mêmes. Chaque nom de table est configurable dans le template système db-nomaubl et créé par l'action Initialize Database de l'écran Settings → Database Connectors.

Le schéma fonctionne quel que soit le système source — JD Edwards, SAP, NetSuite ou un ERP personnalisé. Les tables suivent la convention de nommage JDE F564XXX car la plateforme a d'abord été construite autour de JDE ; les conventions sont fonctionnelles, pas spécifiques à la source.


Conventions de nommage

ConventionDétail
Identifiant de tableF564XXX — préfixe de fichier de style JDE. Configurable par environnement.
Préfixe de colonnePréfixe à deux lettres rattaché à la table (FE pour l'archive, UH pour l'en-tête UBL, UL pour les lignes, UV pour la TVA / la validation, US pour le statut / les utilisateurs, RG/RH/RI pour l'e-reporting…).
DatesJulian JDE — entier au format CYYDDDC = 1 pour 2000–2099, YY correspond aux deux derniers chiffres de l'année et DDD au jour de l'année. Exemple : 125108 → 2025-04-18. Conversion à la volée pour l'IHM.
HeuresEntier au format HHMMSS. Exemple : 143052 → 14:30:52.
Numériques mis à l'échelleCertains montants et taux sont stockés en entiers multipliés par un facteur fixe — diviser à la lecture : ATXA × 100 (2 décimales), QNTY × 10000 (4 décimales), UPRC × 10000 (4 décimales), TXR1 × 1000 (3 décimales).
Charges utiles XMLStockées en BLOB (Oracle) / BYTEA (Postgres) pour le XML source ERP et l'UBL généré ; en CLOB (Oracle) / TEXT (Postgres) pour le XML d'e-reporting. UTF-8 partout.
Séquences auto-incrémentéesLes colonnes SEQN utilisent COALESCE(MAX(SEQN), 0) + 1 à l'insertion — pas besoin de séquence Oracle ni de serial Postgres.

Vue d'ensemble du schéma

📋 DOMAINE FACTUREF564230Archive sourceF564237Journal de traitementFEWDS1F564231En-tête UBL (BT-*)DOC/DCT/KCOF564233LignesF564234Synthèse TVAF564235Cycle de vieF564236Erreurs de validation+ LNID / SEQN📊 DOMAINE E-REPORTINGF564240Journal des rapportsF564241Cycle de vie rapportF564242Mapping factures⇢ F564231 (FK inter-domaine)RGUKID🔐 DOMAINE AUTHENTIFICATIONF564250UtilisateursF564251RôlesF564252SessionsUSROLESSUSER
flèche pleine — relation FK fermeflèche pointillée — lien souple / inter-domainecarte mise en avant — pivot du domaine

Domaine facture

Les sept tables qui transportent une facture sur l'intégralité de son cycle de vie — du flux ERP brut au statut définitif.

F564230 — Archive source & journal de soumission PA

Stocke le XML ERP original ainsi que les drapeaux de routage et l'UUID de transaction PA renvoyé après soumission. Une ligne par document source.

  • Clé primaire : FEDOC + FEDCT + FEKCO
  • Notable : FETXFT porte la charge utile XML source (octets UTF-8) ; FEUKIDSZ contient l'UUID renvoyé par la Plateforme Agréée après import réussi ; FEEV10 est l'option envoi PA (1 = oui, 2 = non).
ChampTypeDescription
FEDOCEntierNuméro de document (PK).
FEDCTTexte(2)Type de document (PK).
FEKCOTexte(5)Code société (PK).
FEAA10Texte(10)Code activité / routage.
FEAA20Texte(25)Sous-type de document.
FEALKYTexte(25)Clé alpha client.
FEAEXPDécimal × 100Montant du document (mis à l'échelle).
FEIVDDate (Julian)Date de facture.
FEARDUDate (Julian)Date d'échéance.
FEUPMJDate (Julian)Date de dernière mise à jour.
FEPIDTexte(10)Identifiant programme.
FEVERSTexte(5)Version.
FEUSERTexte(10)Utilisateur créateur.
FEJOBNTexte(10)Nom du job.
FEUPMTHeure (HHMMSS)Heure de dernière mise à jour.
FEWDS1Texte(80)Nom du fichier source.
FEEV01Texte(25)Code de routage.
FEAC04Texte(5)Unité opérationnelle / agence.
FEEV10EntierOption envoi PA1 = oui, 2 = non.
FETXFTBLOBXML ERP original (octets UTF-8).
FEUKIDSZTexte(100)UUID de transaction renvoyé par la PA à l'import.

F564231 — En-tête UBL de la facture

La vue EN 16931 de la facture plus le document UBL 2.1 généré. Une ligne par facture ; même clé primaire que F564230.

  • Clé primaire : UHDOC + UHDCT + UHKCO
  • Notable : UHTXFT stocke le document UBL généré (octets UTF-8) ; UHK74RSCD est le code de statut courant issu de la liste de référence statuses ; UHY56BAR est le code de routage BAR (B2B / B2G / B2C / B2BINT / OUTOFSCOPE / …).
ChampTypeDescription
UHDOCEntierNuméro de document (PK · FK → F564230).
UHDCTTexte(2)Type de document (PK).
UHKCOTexte(5)Code société (PK).
UHODOC / UHODCT / UHOKCOEntier / Texte(2) / Texte(5)Document de référence (renseigné pour un avoir pointant vers une facture antérieure).
UHK74FLENTexte(25)Numéro de facture UBL — BT-1.
UHK74XMLVTexte(50)Profile ID — BT-23.
UHK74LDDJDate (Julian)Date d'émission — BT-2.
UHDDJDate (Julian)Date d'échéance — BT-9.
UHK74LEDTTexte(3)Code de type de facture — BT-3.
UHATXADécimal × 100Montant hors taxes — BT-109.
UHSTAMDécimal × 100Montant de TVA — BT-110.
UHAGDécimal × 100Montant TTC — BT-112.
UHAAPDécimal × 100Montant à payer — BT-115.
UHCRCDTexte(3)Code devise — BT-5.
UH55RSFTexte(40)Référence commande — BT-13.
UHY74CTIDEntierRéférence contrat — BT-12.
UHAN8EntierAN8 client (carnet d'adresses JDE).
UHALKYTexte(25)Clé alpha client.
UHALPHTexte(40)Nom du client — BT-44.
UHTXFTBLOBXML UBL 2.1 généré (octets UTF-8).
UHK74RSCDTexte(4)Code de statut courant (voir Référentiel des statuts).
UHK74MSG1Texte(500)Message de statut.
UHY56EPID / UHY56EPSCTexte(100) / Texte(25)Identifiant + schéma de l'endpoint client — BT-49 / BT-49-1.
UHY56PYINTexte(3)Code moyen de paiement — BT-81.
UHY56BARTexte(10)Code de routage BAR (B2B, B2G, B2C, B2BINT, OUTOFSCOPE, …).
UHY56RSRC / UHY56RSRCLTexte(50) / Texte(250)Code et libellé du motif de rejet.
UHY56ACTN / UHY56ACTNLTexte(10) / Texte(250)Code et libellé de l'action attendue.
UHY56ACTNDTexte(1000)Note de statut (JSON brut renvoyé par la PA).
UHUSER / UHPID / UHJOBN / UHUPMJ / UHTDAYColonnes d'audit — utilisateur, programme, job, date et heure de dernière mise à jour.

F564233 — Lignes de la facture UBL

Une ligne par ligne UBL. Les valeurs de quantité, prix et taux de taxe sont mises à l'échelle — diviser à la lecture.

  • Clé primaire : ULDOC + ULDCT + ULKCO + ULLNID
  • Notable : ULLNID est l'identifiant de ligne JDE × 1000 (BT-126). ULY56QNTY ÷ 10000, ULUPRC ÷ 10000, ULATXA ÷ 100, ULTXR1 ÷ 1000.
ChampTypeDescription
ULDOC / ULDCT / ULKCODocument / type / société (PK · FK → F564231).
ULLNIDEntier × 1000Identifiant de ligne — BT-126.
ULDSC1Texte(40)Description article — BT-153.
ULLITMTexte(35)Identifiant article vendeur — BT-155.
ULY56QNTYDécimal × 10000Quantité facturée — BT-129.
ULY56UMTexte(3)Code unité de mesure — BT-130.
ULUPRCDécimal × 10000Prix unitaire — BT-146.
ULATXADécimal × 100Montant ligne — BT-131.
ULREBLDécimal × 10000Remise / charge — BT-136.
ULCRCDTexte(3)Code devise.
ULK74TVCCTexte(2)Code de catégorie de taxe — BT-151.
ULTXR1Décimal × 1000Taux de taxe — BT-152.
ULK74EXRCTexte(100)Motif d'exonération — BT-121.
ULUSER / ULPID / ULJOBN / ULUPMJ / ULTDAYColonnes d'audit.

F564234 — Synthèse TVA UBL

Une ligne par décomposition (catégorie de taxe, taux, devise) portée par la facture — le groupe BG-23 d'EN 16931.

  • Clé primaire : UVDOC + UVDCT + UVKCO + UVSEQN
  • Notable : UVSEQN est auto-incrémenté via COALESCE(MAX(UVSEQN), 0) + 1 à l'insertion.
ChampTypeDescription
UVDOC / UVDCT / UVKCODocument / type / société (PK · FK → F564231).
UVSEQNEntierNuméro de séquence (PK).
UVK74TVCCTexte(2)Code de catégorie de taxe — BT-118.
UVTXR1Décimal × 1000Taux de taxe — BT-119.
UVATXADécimal × 100Base imposable — BT-116.
UVSTAMDécimal × 100Montant de TVA — BT-117.
UVCRCDTexte(3)Code devise.
UVK74EXRCTexte(500)Motif d'exonération — BT-120.
UVUSER / UVPID / UVJOBN / UVUPMJ / UVTDAYColonnes d'audit.

F564235 — Événements de cycle de vie

L'historique en ajout uniquement de chaque statut traversé par la facture. Une ligne par événement, dans l'ordre de soumission. C'est la source de l'onglet History de la modale de détail.

  • Clé primaire : USDOC + USDCT + USKCO + USSEQN
  • Notable : USSEQN est auto-incrémenté ; les événements sont écrits par StatusTransition.apply() en même temps que la mise à jour correspondante de F564231.UHK74RSCD.
ChampTypeDescription
USDOC / USDCT / USKCODocument / type / société (PK · FK → F564231).
USSEQNEntierNuméro de séquence d'événement (PK).
USK74RSCDTexte(4)Code de statut à cet événement.
USK74MSG1Texte(500)Message de statut.
USTRDJDate (Julian)Date de l'événement.
USY56RSRC / USY56RSRCLTexte(50) / Texte(250)Code et libellé du motif de rejet.
USY56ACTN / USY56ACTNLTexte(10) / Texte(250)Code et libellé de l'action attendue.
USY56ACTNDTexte(1000)Note de statut (JSON brut de la PA).
USUSER / USPID / USJOBN / USUPMJ / USTDAYColonnes d'audit.

F564236 — Erreurs de validation UBL

Erreurs XSD et Schematron enregistrées pour une facture. Une ligne par erreur / avertissement — alimente le groupe History → Validation errors de la modale de détail et la page Integration Errors lorsqu'aucune ligne F564231 correspondante n'existe.

  • Clé primaire : UVDOC + UVDCT + UVKCO + UVSEQN
  • Notable : UVY56LEVEL vaut ERROR / WARNING / INFO. UVSRCL indique le validateur : XSD, SCH (Schematron) ou DB.
ChampTypeDescription
UVDOC / UVDCT / UVKCODocument / type / société (PK ; orpheline lorsqu'il n'existe pas de ligne F564231).
UVSEQNEntierNuméro de séquence d'erreur (PK).
UVY56LEVELTexte(10)Sévérité — ERROR, WARNING, INFO.
UVSRCLTexte(25)Source — XSD / SCH / DB.
UVY56RULETexte(50)Identifiant de règle (par ex. BR-01, PEPPOL-EN16931-R001).
UVK74MSG1Texte(2000)Message d'erreur / avertissement.
UVUSER / UVPID / UVJOBN / UVUPMJ / UVTDAYColonnes d'audit.

F564237 — Journal de traitement runtime

Chaque événement écrit par RuntimeLogHandler durant le traitement XML / UBL / BIP / FTP — START, END et toute méthode intermédiaire. Alimente la page Processing Log (menu Management).

  • Clé primaire : aucune — plusieurs événements par fichier sont attendus.
  • Notable : FEMODE est le type de traitement (SINGLE, BURST, UBL, BOTH, UBL_VALIDATE, PROCESS) ; FETMPL est le nom du template (vide pour le traitement UBL) ; FEMETHOD est START / END ou le nom de la méthode fautive en cas d'erreur.
ChampTypeDescription
FEWDS1Texte(80)Nom du fichier source — fait le lien avec F564230.FEWDS1.
FEUPMJDate (Julian)Date de l'événement.
FEUPMTHeure (HHMMSS)Heure de l'événement.
FEMODETexte(20)Type de traitement.
FETMPLTexte(50)Nom du template.
FEMETHODTexte(100)Opération — START / END / nom de la méthode fautive.
FEMESSAGETexte(500)Message de statut ou détail d'erreur.

Domaine e-reporting

Trois tables qui consignent les déclarations (période, flux, société) déposées sur la Plateforme Agréée — flux 10.1 (détail B2C) et 10.3 (B2BINT agrégé).

F564240 — Journal des rapports

Une ligne par rapport généré. Stocke le XML <ReportDocument> et le dernier statut connu.

  • Clé primaire : RGUKID (séquence globalement unique — pas de composante flux / société).
  • Notable : RGY56BAR vaut 10.1 ou 10.3 ; RGDCT est le type de document (IN initial, RE remplacement, CO annulation, MO modification) ; RGTXFT porte le XML généré.
ChampTypeDescription
RGUKIDEntierIdentifiant de séquence du rapport (PK).
RGY56BARTexte(10)Code de flux — 10.1 / 10.3.
RGKCOTexte(5)Code société émettrice.
RGDCTTexte(2)Type de document — IN / RE / CO / MO.
RGEFTJDate (Julian)Début de période.
RGEFDJDate (Julian)Fin de période.
RGY56EPIDTexte(60)SIREN émetteur (schéma 0002).
RGK74RSCDTexte(4)Code de statut courant.
RGK74MSG1Texte(2000)Dernier message de statut.
RGNINVEntierNombre de factures incluses.
RGTXFTCLOB / TEXTXML <ReportDocument> généré.
RGUSER / RGPID / RGJOBN / RGUPMJ / RGTDAYColonnes d'audit.

F564241 — Cycle de vie des rapports

L'historique en ajout uniquement des statuts d'un rapport — même structure que F564235 pour les factures.

  • Clé primaire : RGUKID + RHSEQN
  • Notable : RHSEQN est auto-incrémenté. La colonne RGUKID (préfixée RG) est la FK vers le rapport parent (conservée telle quelle, sans alias RH).
ChampTypeDescription
RGUKIDEntierIdentifiant de rapport (PK · FK → F564240).
RHY56BARTexte(10)Code de flux (dénormalisé pour faciliter les requêtes).
RHSEQNEntierNuméro de séquence d'événement (PK).
RHK74RSCDTexte(4)Code de statut à cet événement.
RHK74MSG1Texte(500)Message de statut.
RHUSER / RHPID / RHJOBN / RHUPMJ / RHTDAYColonnes d'audit.

F564242 — Mapping rapport / facture

Trace les factures incluses dans chaque rapport — la PK composite empêche d'inclure deux fois une facture déjà déclarée.

  • Clé primaire : RGUKID + RIDOC + RIDCT + RIKCO
  • Notable : Un index secondaire sur (RIDOC, RIDCT, RIKCO, RIY56BAR) répond efficacement à « dans quel rapport cette facture a-t-elle été déclarée ? ».
ChampTypeDescription
RGUKIDEntierIdentifiant de rapport (PK · FK → F564240).
RIY56BARTexte(10)Code de flux.
RIDOC / RIDCT / RIKCOTriplet facture (PK · FK → F564231).

Domaine authentification

Trois tables pour la gestion intégrée utilisateur / rôle / session — utilisée lorsque authEnabled = Y dans le template global.

F564250 — Utilisateurs

Une ligne par utilisateur. Les mots de passe sont stockés sous forme de hashs PBKDF2-HMAC-SHA256 — jamais en clair.

  • Clé primaire : USUSER
  • Notable : Le format de USPASSWD est iterations:base64(salt):base64(hash). USFORCEPASSWD = 'Y' force un changement de mot de passe à la prochaine connexion (par défaut sur les nouveaux comptes).
ChampTypeDescription
USUSERTexte(50)Identifiant utilisateur (PK).
USPASSWDTexte(200)Hash PBKDF2-HMAC-SHA256 — iterations:salt:hash.
USROLETexte(50)Nom de rôle (FK → F564251.RLNAME).
USFULLNAMETexte(100)Nom affiché.
USEMAILTexte(200)Adresse e-mail.
USACTIVETexte(1)Y = actif, N = désactivé.
USFORCEPASSWDTexte(1)Y = doit changer son mot de passe à la prochaine connexion.
USCREATEDTimestampDate de création du compte.

F564251 — Rôles

Une ligne par rôle. Définit la liste blanche de pages, le filtre société, et les options lecture seule / accès paramètres.

  • Clé primaire : RLNAME
  • Notable : RLPAGES et RLCOMPANIES sont des listes séparées par des virgules ; une valeur vide signifie non restreint (toutes les pages / toutes les sociétés). RLSETTINGS = 'Y' autorise l'accès au gestionnaire de configuration Settings.
ChampTypeDescription
RLNAMETexte(50)Identifiant de rôle (PK).
RLDESCTexte(200)Description lisible.
RLPAGESTexte(2000)Identifiants de pages autorisés — séparés par des virgules (vide = toutes).
RLCOMPANIESTexte(500)Codes société autorisés — séparés par des virgules (vide = toutes).
RLSETTINGSTexte(1)Y = le rôle accorde l'accès au gestionnaire de configuration.
RLREADONLYTexte(1)Y = lecture seule, pas d'édition / suppression / redépôt.

F564252 — Sessions

Une ligne par session active. Les sessions sont validées à chaque appel API ; les lignes expirées sont purgées par le handler d'authentification.

  • Clé primaire : SSTOKEN (UUID)
  • Notable : Le token est envoyé en Authorization: Bearer <SSTOKEN> à chaque appel API. Deux index sur SSUSER et SSEXPIRES maintiennent les recherches et la purge efficaces.
ChampTypeDescription
SSTOKENTexte(100)Token / UUID de session (PK).
SSUSERTexte(50)Identifiant utilisateur (FK → F564250.USUSER).
SSCREATEDTimestampDate de création de la session.
SSEXPIRESTimestampDate d'expiration de la session.

Index recommandés

La DDL embarque un petit ensemble d'index que tout déploiement en production a intérêt à conserver — ils servent les requêtes les plus fréquentes de l'IHM :

IndexTableColonnesUtilisé par
F564231_STATUS_IXF564231UHK74RSCDCompteurs du Dashboard et filtres de statut sur E-Invoicing.
F564231_DATE_IXF564231UHK74LDDJRecherches par plage de dates sur la liste des factures.
F564231_CUST_IXF564231UHAN8Vues client.
F564230_UUID_IXF564230FEUKIDSZRecherche d'UUID PA après import.
F564240_PERIOD_IXF564240RGKCO, RGY56BAR, RGEFDJFiltres de la liste E-Reporting.
F564242_INV_IXF564242RIDOC, RIDCT, RIKCO, RIY56BARRecherche « dans quel rapport cette facture a-t-elle été déclarée ? ».
F564250_ROLE_IXF564250USROLEJointure utilisateur → rôle.
F564252_USER_IXF564252SSUSERDéconnexion / liste de sessions par utilisateur.
F564252_EXP_IXF564252SSEXPIRESPurge des sessions expirées.

La DDL complète — incluant les variantes adaptées au dialecte pour Oracle et PostgreSQL — est embarquée dans le JAR sous sql/oracle/ddl.sql et sql/postgres/ddl.sql, et matérialisée sur disque par Initialize Database.