Skip to main content

Database Tables

NomaUBL persists every artefact of the e-invoicing pipeline — the original ERP source, the generated UBL document, the per-line and per-VAT-rate breakdown, the lifecycle events, the validation errors, the runtime processing log, the e-reporting submissions and the user / role / session triplet.

The schema is identical on Oracle and PostgreSQL — the DDL is dialect-aware (BLOBBYTEA, NUMBERINTEGER, VARCHAR2VARCHAR) but the column names, primary keys and semantics are the same. Every table name is configurable in the db-nomaubl system template and created by the Initialize Database action of the Settings → Database Connectors screen.

The schema applies regardless of source system — JD Edwards, SAP, NetSuite or a custom ERP. Tables follow the JDE F564XXX naming convention because the platform was built around JDE first; the conventions are functional, not source-specific.

Schema changes — 2026.05.5

Release 2026.05.5 introduces several structural changes:

  • E-reporting tables renumbered: F564240 / F564241 / F564242 become F564260 / F564261 / F564262. The RGTXFT column type moves from CLOB / TEXT to BLOB / BYTEA. Child-table FK columns shift from RGUKID to RHUKID (lifecycle) and RIUKID (mapping).
  • Runtime log F564237: new FEUKID PK, columns renamed (FEMODEFERMK, FEMETHODFERMK2, FEMESSAGEFEK74MSG1).
  • Authentication overhauled: F564252 (sessions) renamed to SSLSID / SSSTDTIM / SSETDTIM. F564251 (roles) now holds identity only — grants moved to the new F564254 table (PMROLE / PMCRAPPID / PMCRAPPVAL). User columns (F564250) now follow JDE conventions (USLDAPPSWD, USENABL, USSECF3, audit USUPMJ / USTDAY).
  • Notifications F564253 (introduced in 2026.05.3) is now documented in this reference page.

Naming conventions

ConventionDetail
Table identifierF564XXX — JDE-style file prefix. Configurable per environment.
Column prefixTwo-letter prefix tied to the table (FE for archive, UH for UBL header, UL for lines, UV for VAT / validation, US for status / users, RG/RH/RI for e-reporting…).
DatesJDE Julian — integer in CYYDDD format where C = 1 for 2000–2099, YY is the last two digits of the year, DDD is the day of the year. Example: 125108 → 2025-04-18. Converted on the fly for the UI.
TimesInteger in HHMMSS format. Example: 143052 → 14:30:52.
Scaled numericsSome amounts and rates are stored as integers scaled by a fixed factor — divide on read: ATXA × 100 (2 decimals), QNTY × 10000 (4 decimals), UPRC × 10000 (4 decimals), TXR1 × 1000 (3 decimals).
XML payloadsStored as BLOB (Oracle) / BYTEA (Postgres) for JDE source XML, generated UBL and e-reporting XML (since 2026.05.5). UTF-8 bytes throughout.
Auto-incremented sequencesSEQN columns use COALESCE(MAX(SEQN), 0) + 1 on insert — no Oracle sequence or Postgres serial required.

Schema overview

📋 INVOICE DOMAINF564230Source archiveF564237Processing logFEWDS1F564231UBL header (BT-*)DOC/DCT/KCOF564233LinesF564234VAT summaryF564235LifecycleF564236Validation errors+ LNID / SEQN📊 E-REPORTING DOMAINF564260Report logF564261Report lifecycleF564262Invoice mapping⇢ F564231 (cross-domain FK)RHUKIDRIUKID🔐 AUTHENTICATION + NOTIFICATIONS DOMAINF564250UsersF564251RolesF564254Permissions (rows)F564252SessionsF564253NotificationsUSROLESSUSER + PMROLE + NTUSER
solid arrow — hard FK relationshipdashed arrow — soft / cross-domain linkhighlighted card — domain anchor

Invoice domain

The seven tables that carry an invoice through its complete life — from the raw ERP payload to its definitive lifecycle status.

F564230 — Source archive & PA submission log

Stores the original ERP XML alongside the routing flags and the PA transaction UUID returned after submission. One row per source document.

  • Primary key: FEDOC + FEDCT + FEKCO
  • Notable: FETXFT carries the source XML payload (UTF-8 bytes); FEUKIDSZ holds the UUID returned by the Plateforme Agréée after successful import; FEEV10 is the send to PA flag (1 = yes, 2 = no).
FieldTypeDescription
FEDOCIntegerDocument number (PK).
FEDCTText(2)Document type (PK).
FEKCOText(5)Company code (PK).
FEAA10Text(10)Activity / routing code.
FEAA20Text(25)Document sub-type.
FEALKYText(25)Customer alpha key.
FEAEXPDecimal × 100Document amount (scaled).
FEIVDDate (Julian)Invoice date.
FEARDUDate (Julian)Due date.
FEUPMJDate (Julian)Last update date.
FEPIDText(10)Program ID.
FEVERSText(5)Version.
FEUSERText(10)User who created the row.
FEJOBNText(10)Job name.
FEUPMTTime (HHMMSS)Last update time.
FEWDS1Text(80)Source file name.
FEEV01Text(25)Routing code.
FEAC04Text(5)Business unit / office.
FEEV10IntegerSend to PA flag — 1 = yes, 2 = no.
FETXFTBLOBOriginal ERP XML (UTF-8 bytes).
FEUKIDSZText(100)PA platform transaction UUID returned on import.

F564231 — UBL invoice header

The EN 16931 view of the invoice plus the generated UBL 2.1 document. One row per invoice; same primary key as F564230.

  • Primary key: UHDOC + UHDCT + UHKCO
  • Notable: UHTXFT stores the generated UBL document (UTF-8 bytes); UHK74RSCD is the current lifecycle status code from the statuses reference list; UHY56BAR is the BAR routing code (B2B / B2G / B2C / B2BINT / OUTOFSCOPE / …).
FieldTypeDescription
UHDOCIntegerDocument number (PK · FK → F564230).
UHDCTText(2)Document type (PK).
UHKCOText(5)Company code (PK).
UHODOC / UHODCT / UHOKCOInteger / Text(2) / Text(5)Original (referenced) document — non-empty for credit notes pointing at a prior invoice.
UHK74FLENText(25)UBL invoice number — BT-1.
UHK74XMLVText(50)Profile ID — BT-23.
UHK74LDDJDate (Julian)Issue date — BT-2.
UHDDJDate (Julian)Due date — BT-9.
UHK74LEDTText(3)Invoice type code — BT-3.
UHATXADecimal × 100Tax-exclusive amount — BT-109.
UHSTAMDecimal × 100Tax amount — BT-110.
UHAGDecimal × 100Tax-inclusive amount — BT-112.
UHAAPDecimal × 100Amount due — BT-115.
UHCRCDText(3)Currency code — BT-5.
UH55RSFText(40)Order reference — BT-13.
UHY74CTIDIntegerContract reference — BT-12.
UHAN8IntegerCustomer AN8 (JDE address book).
UHALKYText(25)Customer alpha key.
UHALPHText(40)Customer name — BT-44.
UHTXFTBLOBGenerated UBL 2.1 XML (UTF-8 bytes).
UHK74RSCDText(4)Current lifecycle status code (see Status Reference).
UHK74MSG1Text(500)Status message.
UHY56EPID / UHY56EPSCText(100) / Text(25)Customer endpoint ID + scheme — BT-49 / BT-49-1.
UHY56PYINText(3)Payment means code — BT-81.
UHY56BARText(10)BAR routing code (B2B, B2G, B2C, B2BINT, OUTOFSCOPE, …).
UHY56RSRC / UHY56RSRCLText(50) / Text(250)Rejection reason code + label.
UHY56ACTN / UHY56ACTNLText(10) / Text(250)Expected action code + label.
UHY56ACTNDText(1000)Status note (raw JSON returned by the PA).
UHUSER / UHPID / UHJOBN / UHUPMJ / UHTDAYAudit columns — created by, program, job, last-update date and time.

F564233 — UBL invoice lines

One row per UBL line. Stored values for quantity, price and tax rate are scaled — divide on read.

  • Primary key: ULDOC + ULDCT + ULKCO + ULLNID
  • Notable: ULLNID is the JDE line ID × 1000 (BT-126). ULY56QNTY ÷ 10000, ULUPRC ÷ 10000, ULATXA ÷ 100, ULTXR1 ÷ 1000.
FieldTypeDescription
ULDOC / ULDCT / ULKCODocument number / type / company (PK · FK → F564231).
ULLNIDInteger × 1000Line ID — BT-126.
ULDSC1Text(40)Item description — BT-153.
ULLITMText(35)Seller item ID — BT-155.
ULY56QNTYDecimal × 10000Invoiced quantity — BT-129.
ULY56UMText(3)Unit of measure code — BT-130.
ULUPRCDecimal × 10000Unit price — BT-146.
ULATXADecimal × 100Line extension amount — BT-131.
ULREBLDecimal × 10000Allowance / charge — BT-136.
ULCRCDText(3)Currency code.
ULK74TVCCText(2)Tax category code — BT-151.
ULTXR1Decimal × 1000Tax rate — BT-152.
ULK74EXRCText(100)Tax exemption reason — BT-121.
ULUSER / ULPID / ULJOBN / ULUPMJ / ULTDAYAudit columns.

F564234 — UBL VAT summary

One row per (tax category, tax rate, currency) breakdown carried by the invoice — the EN 16931 BG-23 group.

  • Primary key: UVDOC + UVDCT + UVKCO + UVSEQN
  • Notable: UVSEQN is auto-incremented via COALESCE(MAX(UVSEQN), 0) + 1 on insert.
FieldTypeDescription
UVDOC / UVDCT / UVKCODocument number / type / company (PK · FK → F564231).
UVSEQNIntegerSequence number (PK).
UVK74TVCCText(2)Tax category code — BT-118.
UVTXR1Decimal × 1000Tax rate — BT-119.
UVATXADecimal × 100Taxable amount — BT-116.
UVSTAMDecimal × 100Tax amount — BT-117.
UVCRCDText(3)Currency code.
UVK74EXRCText(500)Tax exemption reason — BT-120.
UVUSER / UVPID / UVJOBN / UVUPMJ / UVTDAYAudit columns.

F564235 — Lifecycle events

The append-only history of every status the invoice has been in. One row per event, in submission order. This is the source of the History tab in the invoice detail modal.

  • Primary key: USDOC + USDCT + USKCO + USSEQN
  • Notable: USSEQN is auto-incremented; events are written by StatusTransition.apply() together with the corresponding update of F564231.UHK74RSCD.
FieldTypeDescription
USDOC / USDCT / USKCODocument number / type / company (PK · FK → F564231).
USSEQNIntegerEvent sequence (PK).
USK74RSCDText(4)Status code at this event.
USK74MSG1Text(500)Status message.
USTRDJDate (Julian)Event date.
USY56RSRC / USY56RSRCLText(50) / Text(250)Rejection reason code + label.
USY56ACTN / USY56ACTNLText(10) / Text(250)Expected action code + label.
USY56ACTNDText(1000)Status note (raw JSON from the PA).
USUSER / USPID / USJOBN / USUPMJ / USTDAYAudit columns.

F564236 — UBL validation errors

XSD and Schematron errors recorded for an invoice. One row per error / warning — feeds the History → Validation errors group of the invoice detail modal and the Integration Errors page when no matching F564231 row is found.

  • Primary key: UVDOC + UVDCT + UVKCO + UVSEQN
  • Notable: UVY56LEVEL is ERROR / WARNING / INFO. UVSRCL flags the validator: XSD, SCH (Schematron) or DB.
FieldTypeDescription
UVDOC / UVDCT / UVKCODocument number / type / company (PK; can be orphan when no F564231 row).
UVSEQNIntegerError sequence (PK).
UVY56LEVELText(10)Severity — ERROR, WARNING, INFO.
UVSRCLText(25)Source — XSD / SCH / DB.
UVY56RULEText(50)Rule ID (e.g. BR-01, PEPPOL-EN16931-R001).
UVK74MSG1Text(2000)Error / warning message.
UVUSER / UVPID / UVJOBN / UVUPMJ / UVTDAYAudit columns.

F564237 — Runtime processing log

Every event written by RuntimeLogHandler during XML / UBL / BIP / FTP processing — START, END and any intermediate method. Backs the Processing Log page (Management menu).

  • Primary key: FEUKID (sequence computed via COALESCE(MAX(FEUKID),0)+1 on insert — used as a tiebreaker for events sharing the same timestamp).
  • Notable: FERMK is the processing type (SINGLE, BURST, UBL, BOTH, UBL_VALIDATE, PROCESS, AUTO); FETMPL is the template name (empty for UBL processing); FERMK2 is START / END or the failing method name on errors.
FieldTypeDescription
FEUKIDInteger (BIGINT)Sequence id (PK · stable insert order).
FEWDS1Text(60)Source file name — links to F564230.FEWDS1.
FEUPMJDate (Julian)Event date.
FEUPMTTime (HHMMSS)Event time.
FERMKText(30)Processing type (renamed from FEMODE).
FETMPLText(40)Template name.
FERMK2Text(30)Operation — START / END / failing method name (renamed from FEMETHOD).
FEK74MSG1Text(1024)Status message or error detail (renamed from FEMESSAGE).

E-Reporting domain

Three tables that record the (period, flux, company) declarations submitted to the Plateforme Agréée — flux 10.1 (B2BINT detail) and 10.3 (B2C / OUTOFSCOPE aggregated).

F564260 — Report log

One row per generated report. Stores the <ReportDocument> XML and the latest known status.

  • Primary key: RGUKID (globally unique sequence — no flux / company component).
  • Notable: RGY56BAR is 10.1 or 10.3; RGDCT is the document type (IN initial, RE replacement, CO cancellation, MO modification); RGTXFT carries the generated XML as UTF-8 bytes (BLOB / BYTEA since 2026.05.5).
FieldTypeDescription
RGUKIDInteger (BIGINT)Report sequence id (PK).
RGY56BARText(10)Flux code — 10.1 / 10.3.
RGKCOText(5)Issuing company code.
RGDCTText(2)Document type — IN / RE / CO / MO.
RGEFTJDate (Julian)Period start.
RGEFDJDate (Julian)Period end.
RGY56EPIDText(125)Issuer SIREN (scheme 0002).
RGK74RSCDText(10)Current lifecycle status code.
RGK74MSG1Text(1024)Last status message.
RGNINVIntegerNumber of invoices included.
RGTXFTBLOBGenerated <ReportDocument> XML (UTF-8 bytes).
RGUSER / RGPID / RGJOBN / RGUPMJ / RGTDAYAudit columns.

F564261 — Report lifecycle events

The append-only history of statuses for a given report — same shape as F564235 for invoices.

  • Primary key: RHUKID + RHSEQN
  • Notable: RHSEQN is auto-incremented. RHUKID is the FK to the parent log (F564260.RGUKID).
FieldTypeDescription
RHUKIDInteger (BIGINT)Report sequence id (PK · FK → F564260.RGUKID).
RHY56BARText(10)Flux code (denormalised for query convenience).
RHSEQNIntegerEvent sequence (PK).
RHK74RSCDText(10)Status code at this event.
RHK74MSG1Text(1024)Status message.
RHUSER / RHPID / RHJOBN / RHUPMJ / RHTDAYAudit columns.

F564262 — Report / invoice mapping

Tracks which invoices were included in which report — composite PK avoids re-including invoices that were already declared on a prior run.

  • Primary key: RIUKID + RIDOC + RIDCT + RIKCO
  • Notable: A secondary index on (RIDOC, RIDCT, RIKCO, RIY56BAR) answers "in which report was this invoice declared?" efficiently.
FieldTypeDescription
RIUKIDInteger (BIGINT)Report sequence id (PK · FK → F564260.RGUKID).
RIY56BARText(10)Flux code.
RIDOC / RIDCT / RIKCOInvoice triplet (PK · FK → F564231).
RIUSER / RIPID / RIJOBN / RIUPMJ / RITDAYAudit columns.

Authentication + notifications domain

Five tables for built-in user / role / session / permissions management plus the notifications inbox. The auth block is active when authEnabled = Y in the global template.

F564250 — Users

One row per user. Passwords are stored as PBKDF2-HMAC-SHA256 hashes — never in clear text.

  • Primary key: USUSER
  • Notable: USLDAPPSWD format is iterations:base64(salt):base64(hash) (bytes). USSECF3 = 'Y' forces a password change on the next login (default for new accounts).
FieldTypeDescription
USUSERText(10)Username (PK).
USLDAPPSWDBLOBPBKDF2-HMAC-SHA256 hash — iterations:salt:hash (renamed from USPASSWD).
USROLEText(36)Role name (FK → F564251.RLROLE).
USFULLNAMEText(50)Display name.
USEMAILText(75)Email address.
USENABLText(1)Y = active, N = disabled (renamed from USACTIVE).
USSECF3Text(30)Y = must change password on next login (renamed from USFORCEPASSWD).
USUPMJDate (Julian)Account creation / last update date.
USTDAYTime (HHMMSS)Matching time.

F564251 — Roles (identity only)

One row per role. As of 2026.05.5, this table stores role identity only — the grants (pages, companies, read-only, settings access) live row-by-row in F564254.

  • Primary key: RLROLE
  • Notable: No schema change is needed to introduce a new permission dimension — just insert rows with a new PMCRAPPID in F564254.
FieldTypeDescription
RLROLEText(36)Role identifier (PK).
RLROLEDESCText(255)Human-readable description.
RLUSER / RLPID / RLJOBN / RLUPMJ / RLTDAYAudit columns.

F564252 — Sessions

One row per active session. Sessions are validated on every API request; expired rows are pruned by the auth handler.

  • Primary key: SSLSID (UUID, renamed from SSTOKEN)
  • Notable: The token is sent as Authorization: Bearer <SSLSID> on every API call. Two indexes on SSUSER and SSETDTIM keep lookups and cleanup efficient.
FieldTypeDescription
SSLSIDText(100)Session token / UUID (PK).
SSUSERText(10)Username (FK → F564250.USUSER).
SSSTDTIMTimestampSession creation timestamp (renamed from SSCREATED).
SSETDTIMTimestampSession expiry timestamp (renamed from SSEXPIRES).

F564253 — Notifications

One row per delivered notification. Backs the portal inbox and the bell in the utilities bar (see Notifications).

  • Primary key: NTUKID (globally unique sequence).
  • Notable: (NTDOC, NTDCT, NTKCO) is the FK back to F564231 when the notification relates to an invoice (nullable for system alerts). NTUSER is the recipient username, or * for a broadcast (auth-disabled mode). NTEV01 is the read flag (Y = read, N = unread) — drives the bell badge.
FieldTypeDescription
NTUKIDInteger (BIGINT)Sequence id (PK).
NTUSERText(10)Recipient username (* = broadcast).
NTY56RULEText(20)Name of the rule that fired the dispatch.
NTMSGPText(40)Short subject / title.
NTK74MSG2Text(1024)Full message body.
NTDOC / NTDCT / NTKCOmixedInvoice triplet (FK → F564231 when populated).
NTK74RSCDText(10)Status code that triggered the rule.
NTK74MSG1Text(1024)Status message.
NTY56RSRC / NTY56RSRCLText(50) / Text(250)PA rejection reason code + label.
NTY56ACTN / NTY56ACTNLText(10) / Text(250)Expected action code + label.
NTEV01Text(1)Read flag (Y / N).
NTUPMJ / NTTDAYDate / TimeCreation timestamp.

A daily sweep driven by global.notificationsRetentionDays (default 90, 0 = disabled) deletes rows older than the retention window.

F564254 — Role permission grants (row-based RBAC)

New table introduced in 2026.05.5. Replaces the CSV columns RLPAGES / RLCOMPANIES / RLSETTINGS / RLREADONLY formerly on F564251 with typed rows. One row per (role, permission type, value) triplet.

  • Primary key: (PMROLE, PMCRAPPID, PMCRAPPVAL)
  • Notable: An empty result set for a given (role, type) means unrestricted on that dimension. Adding a new permission dimension is an INSERT — not a DDL change. Drop + Init Database re-seeds the default grants without touching existing role rows.
FieldTypeDescription
PMROLEText(36)Role identifier (PK · FK → F564251.RLROLE).
PMCRAPPIDText(30)Permission type — page / company / feature.
PMCRAPPVALText(175)Value within the type — page id, company code, or feature name (settings, readonly, …).
PMENABLText(1)Y = grant, N = explicit deny.
PMUSER / PMPID / PMJOBN / PMUPMJ / PMTDAYAudit columns.

Currently used PMCRAPPID values:

TypePMCRAPPVALEffect
pagepage id (e.g. dashboard, invoices)Page allowed for the role.
companycompany code (KCO)Company allowed for the role.
featuresettingsRole can access the Configuration menus.
featurereadonlyRole is restricted to read-only (no edit / delete / resend).

The DDL bundles a small set of indexes that every production deployment should keep — they back the most common queries from the UI:

IndexTableColumnsUsed by
F564231_STATUS_IXF564231UHK74RSCDDashboard counters and E-Invoicing status filters.
F564231_DATE_IXF564231UHK74LDDJDate-range queries on the invoice list.
F564231_CUST_IXF564231UHAN8Customer-scoped views.
F564230_UUID_IXF564230FEUKIDSZPA UUID look-up after import.
F564260_PERIOD_IXF564260RGKCO, RGY56BAR, RGEFDJE-Reporting list filters.
F564262_INV_IXF564262RIDOC, RIDCT, RIKCO, RIY56BAR"In which report is this invoice?" lookup.
F564250_ROLE_IXF564250USROLEUser → role join.
F564252_USER_IXF564252SSUSERSign-out / list-sessions per user.
F564252_EXP_IXF564252SSETDTIMExpired-session pruning.
F564253_USR_IXF564253NTUSER, NTEV01, NTUPMJ DESCBell badge + inbox sort.
F564254_ROLE_IXF564254PMROLE, PMCRAPPIDFast per-role grant resolution.

The full DDL — including dialect-aware variants for Oracle and PostgreSQL — ships in the JAR under sql/oracle/ddl.sql and sql/postgres/ddl.sql, and is materialised on disk by Initialize Database.