E-Invoicing
The E-Invoicing screen is the central operational page of NomaUBL — the official entry point for the Réforme de la Facturation Électronique (RFE) workflow. It lists every invoice the platform has processed, with rich filters, a status-driven detail view, and the actions a user needs day to day: edit, copy, delete, manually set a status, e-mail the PDF to the customer, resend to the Plateforme Agréée.
The page applies regardless of source system — JD Edwards, SAP, NetSuite or a custom ERP. Every record visible here was persisted in the local NomaUBL database after going through the processing pipeline.
At a glance
Toolbar
The toolbar above the table combines date filtering, free-text search, status chips and quick actions.
Date range
The date filter on the left applies to the last update date of each invoice. The default preset is Yesterday; other presets are Today, Last 7 days, This month, Last month and Custom range (manual From / To dates).
Free-text filters
Each input narrows the list as you type — the search updates after a brief pause:
| Field | What it matches |
|---|---|
| Doc | The internal document number (e.g. 12345). |
| Dct | The document type code (e.g. RI, RN). |
| Kco | The company code (e.g. 00070). |
| Contract | The contract reference carried by the invoice. |
| Customer name | The buyer party name. |
BAR routing dropdown
A separate dropdown filters by BAR routing code (B2B, B2G, B2BINT, B2C, OUTOFSCOPE, ARCHIVEONLY, DOCUMENT) — the channel classification documented in UBL Defaults → Document Type / BAR Routing.
Status chips
To the right, a row of status chips appears: one per status currently present in the date range. Each chip shows the status label, the count, and a colour matching its family. Clicking a chip toggles a status filter on the list — clicking it again clears it.
Clear filters
When at least one filter is active, an ✕ Clear filter chip appears at the end of the chip row. It clears every active filter except the date range.
Status chip overflow (2026.05.10)
The Status chip row caps at 5 inline chips; the rest fold into a +N more dropdown with a coloured dot per code. Multi-status drill-throughs from the dashboards (e.g. In flight = 5 codes) hoist the active value back into the inline group when it falls past the cap, so the active filter stays visible.
Advanced Filters (2026.05.10)
A collapsible Advanced Filters panel sits below the chip row. It exposes one row per filterable column from the active List Views spec — with a per-column operator picker (contains, equals, ≠, <, ≤, >, ≥, between, empty, not empty). Edits stay as a draft until Run commits them, so typing in the panel does not spam the back-end.
The set of columns that can be filtered is defined in the spec's filter: true allow-list — operators decide which columns they actually query and trim the rest from the panel without losing them from the grid. See List Views for the editor.
Since 2026.05.12 the page runs in hybrid client-side mode: each Run loads one capped slice from the server (spec.maxRows, default 5000) and TanStack handles filter / sort / paginate / group within that slice — no roundtrip while typing in the per-column filter row, filters survive pagination naturally. When the slice cap is hit, an X / Y rows notice next to Run tells the operator to narrow the date range or the Advanced Filters.
Since 2026.05.13, refList columns (Status, eReporting Status, custom lists) get a multi-select picker in both the Advanced Filters panel and the per-column filter row — pick any number of codes, the trigger shows N selected past the inline cap, and a ✕ on the right resets the selection in one click. The server applies an IN (?,?,?) clause so picking three statuses returns the union.
Refresh and New invoice
Two buttons sit at the right:
| Button | Behaviour |
|---|---|
| Refresh (circular arrow) | Re-runs the current query without changing the filters. |
| + New invoice | Opens the Create / Edit invoice modal. Hidden on read-only sessions. |
Invoice list
The table shows one row per invoice. Default sort: most recent document number first. Click any column header to sort by that column.
Since 2026.05.10 the grid renders through DataTableV2 in spec-driven mode: column shape, labels, format, alignment, width and the filter-row allow-list come from the view.invoices spec stored on db-nomaubl (with a bundled default in the JAR). Adding or removing columns is done from the List Views editor — no code change required when the column already lives in the catalog.
Default columns
| Column | Description |
|---|---|
| Doc | Internal document number. |
| Dct | Document type. |
| Kco | Company code. |
| UBL number | The invoice number as it appears in the generated UBL document. |
| Issue date | BT-2 from the UBL. |
| Customer | Buyer party name. |
| Total HT | Total amount excluding VAT. |
| Total TTC | Total amount including VAT. |
| Currency | ISO 4217 code. |
| Status | Status badge — code + label, coloured by family. |
| Review (2026.05.9) | Coloured review-flag badge sourced from UHALRTPSD. Lit up when the row needs operator attention — typically a status the dispatcher could not auto-resolve, a manual edit flagged on save, or a downstream system marking the row for re-check. Empty when the flag is clear. The column is a quick scan target: a few yellow badges in an otherwise green page tell you exactly where to start. |
A page-size selector at the bottom defaults to 50 rows per page; values up to 500 are accepted. The total count of matching invoices is shown next to the pagination controls.
Catalog columns (2026.05.10)
The Invoices view's SQL now joins F564231 (UH) and F564230 (FE) on doc / dct / kco via a LEFT JOIN, so the column catalog exposes 16 additional archive / log columns. Any of them can be added to the spec via the List Views editor's + Add column picker — the LEFT JOIN keeps invoice rows when no log entry exists.
| Catalog column | What it carries |
|---|---|
logSourceFile | Name of the source file that produced the invoice. |
logActivityCode / logSubType | Activity code and sub-type recorded at ingestion. |
logAlphaKey | Alpha-key alias used by some upstream systems. |
logAmount | Amount carried by the log row (raw, no currency rebase). |
logInvoiceDate / logDueDate | Invoice date and due date recorded at ingestion. |
logCreated | Creation timestamp (UPMJ + UPMT composite). |
logUser / logJobn / logPid / logVersion | JDE user, job, PID and version stamps. |
logBusinessUnit | Business unit recorded at ingestion. |
logRouting | BAR routing recorded at ingestion. |
logSendToPaFlag | Flag captured at ingestion telling whether the row was eligible for PA submission. |
logPaUuid | PA-side UUID assigned to the invoice at submission time. |
Click-through
Clicking any row opens the Detail modal for that invoice. Every action on this page is per-invoice — no multi-row selection.
Export
A small Export button in the toolbar exports the current view (filters applied) as a CSV file named invoices.csv.
Detail modal
Clicking a row opens a modal with seven tabs along the top: Summary, Parties, Lines, VAT, Notes, History, PDF. The modal title shows the invoice's DOC / DCT / KCO triplet. A fullscreen toggle in the header switches between a windowed and a full-screen view.
Summary tab (default)
The Summary tab shows a coloured status badge at the top, followed by action buttons (Edit UBL, Copy, Delete) on the right.
Below the status, when the invoice is in a status that requires a follow-up action by the seller (e.g. 205, 206, 207, 208, 210, 213, 9904, 9907), a blue Seller actions banner appears with the recommended actions:
Status-by-status mapping:
| Status | Suggested actions |
|---|---|
| 205 Paid | Mark payment received |
| 206 Partially approved / 207 Disputed | Issue credit note, Issue corrected invoice |
| 208 Suspended | Send completed |
| 210 Refused | Cancel accounting |
| 213 Rejected | Cancel accounting, Issue new invoice |
| 9904 Send error / 9907 PA rejected | Resend to PA |
Each action is bound to an API connector endpoint configured in Configuration → API Connectors — clicking the button executes the connector with the invoice's data. Greyed-out actions (faded) indicate the connector is not configured for this deployment.
Since 2026.05.15 a second group sits below the regulatory one — Custom actions. Always-visible buttons configured on the Actions page; each fires its own chain of connector calls and is independent of the invoice's current status. The result banner is anchored to the group whose button fired — a custom-action failure does not stomp on a regulatory-action banner shown at the same time, and stale banners are cleared automatically when the modal closes or switches invoice.
The rest of the Summary tab presents collapsible groups:
- Document — DOC / DCT / KCO, UBL number, invoice type, profile ID, contract / buyer / order / project references, accounting cost.
- Dates & Currency — issue date, due date, currency, period start / end.
- Amounts — total HT, total TTC, amount due.
- Payment — payment means code, IBAN, account name, BIC, payment ID, payment terms.
- Document allowances / charges — document-level discounts or charges with type, reason, amount, tax category.
Parties tab
Three collapsible groups, populated from the UBL document:
- Supplier — name, SIREN, SIRET, VAT identifier, electronic endpoint, postal address, contact (name, phone, e-mail).
- Customer — name, company ID, electronic endpoint, VAT, address, contact.
- Agent Party (optional) — for the French extension — name, address, country.
- Delivery (optional) — date, party name, location ID, address.
A group with no data on the invoice is not displayed.
123 456 789123 456 789 00012FR121234567890009:1234567890001275001 Paris · FR
987 654 321FR989876543210009:9876543210001569002 Lyon · FR
2026-04-260088:301234560000369800 Saint-Priest · FR
Lines tab
A table of the invoice line items, one main row per line plus sub-rows that surface the additional information carried by the UBL.
| Column | Description |
|---|---|
| Description | Free-text description of the line item. |
| Item | Item identifier (article code, SKU). |
| Quantity | Quantity invoiced. |
| Unit | Unit-of-measure code (e.g. EA piece, H87 unit, DAY day, KGM kilogram). |
| Unit price | Unit price excluding VAT. |
| Line amount | Quantity × unit price (excluding VAT). |
| Tax category | UBL VAT category code (S standard, AE reverse charge, E exempt, Z zero rate, O out of scope, K intra-EU, G export, L Canary Islands, M Ceuta/Melilla). |
| Tax rate | Applicable VAT rate as a percentage. |
Sub-rows appear under each main row for:
- Item description
- Period (start → end)
- Buyer / standard / classification item identifiers
- Line note (
BT-127) - Price-level allowance / charge (
BT-147) - Line-level allowances / charges (
BG-27/BG-28) - Additional item properties (
BG-32)
When several lines share the same delivery group or document references (BT-128), a delivery header or document-reference header appears once at the top of that group rather than repeating on every line.
VAT tab
A table of the VAT subtotals carried by the UBL: category code, rate, taxable base, VAT amount, currency, exemption code + label (when applicable).
Notes tab
Document-level notes (BT-22). Each note appears as a card with a prefix badge (e.g. PMD, PMT, REG) and the free-text body. The prefix label is resolved from the note-types reference list; hovering on the badge shows the label.
History tab
Three sections in this tab:
Action bar at the top
| Button | Behaviour |
|---|---|
| Validate UBL | Re-runs XSD + Schematron validation on the UBL stored in the database. The result is shown inline (valid / warning / error) with details when applicable. |
| Set status | Opens the Set Status modal — see below. |
| Resend | Submits the UBL to the Plateforme Agréée again. Confirms before running. |
Lifecycle group
The lifecycle is the audit trail of every status the invoice has been in. Each event shows:
- The status badge (code + colour-coded family).
- The status label and the message returned by the platform.
- Optional details for refusals: rejection reason code + label, expected action code + label, additional status note.
The lifecycle is append-only — events are added by the Sync → Retrieve Statuses sweep and never modified.
RR-016 — Quantity mismatch with deliveryAC-04 — Issue corrected invoiceValidation errors group
Lists the validation errors (XSD / Schematron) that were recorded for this invoice. Each row carries the severity, the rule identifier and the human-readable message. Empty when the invoice validates cleanly.
PDF tab
The PDF tab renders a generated PDF of the invoice inline (an <iframe> view). The bottom of the tab carries:
| Button | Behaviour |
|---|---|
| Opens the E-mail modal with the displayed PDF pre-attached. | |
| Download | Saves the PDF to the local computer. |
Action modals
Set Status modal
Opens from the History tab's Set status button. Lets the user move an invoice to a chosen status — useful for manual corrections or for triggering a transition the platform itself did not pick up.
| Field | Description |
|---|---|
| Target | PA (sends a status update to the Plateforme Agréée) or DB (writes the new status directly to the local database without notifying the PA). |
| Status | Drop-down listing every status from the statuses reference list, with code + label. |
| Status at (PA only) | Date / time of the status event. Default: now. |
| Reason | Free-text reason / message. Pre-populated with the status label; editable. |
| Rejection reason code + label (when applicable) | Code from the rejection-reason-codes reference list, plus its translation. |
| Action code + label (when applicable) | Code from the action-codes reference list, plus its translation. |
When Target = DB is selected, an orange notice reminds the user that the change is local-only and will not be propagated to the PA.
Click Submit to apply. A green banner confirms success; the modal closes after a short delay.
E-mail modal
Opens from the PDF tab. Lets the user send the invoice PDF to the customer via SMTP using the credentials configured in the global template.
| Field | Description |
|---|---|
| To (required) | Recipient e-mail address. |
| Cc | Optional carbon copy. |
| Subject | Pre-filled with Invoice <ublNumber>; editable. |
| Body | Pre-filled with a French / English template depending on the user's language: greeting, main line referencing the invoice number and total amount, contact line, signature. Fully editable. |
The PDF currently shown in the PDF tab is automatically attached. If the PDF was not pre-loaded, the server fetches it from the database before sending.
While the e-mail is sending, an overlay covers the modal until the SMTP server confirms the send. A green banner indicates success; the modal closes automatically after ~2 s.
Create / Edit invoice modal
Opens from + New invoice in the toolbar, or from the Edit UBL / Copy buttons in the Summary tab. Lets the user create a new invoice from scratch or adjust an existing one. The modal is laid out like a printable invoice — the user fills the form and NomaUBL produces the corresponding UBL document on Save.
Since 2026.05.10, editing an existing invoice no longer flips its cbc:CustomizationID back to the EN16931 default. The form now carries the customizationId value from the source UBL and writes it back verbatim — new invoices still default to urn:cen.eu:en16931:2017.
The modal is split into vertical sections:
- Document — invoice number, type, profile ID, contract / buyer / order references.
- Header — issue / due dates, currency, period start / end.
- Supplier — pre-populates from the supplier directory (UBL Defaults → Suppliers / Companies); editable per invoice.
- Customer — manual or via PPF directory lookup.
- Delivery — optional delivery group.
- Payment — payment means code, IBAN, BIC, mandate, terms.
- Allowances / charges — document-level discounts / charges.
- Notes — free-text notes per
BT-22prefix. - Lines — invoice lines with item, quantity, unit, price, allowances, item properties.
- VAT summary — auto-computed from the lines (read-only — line edits are reflected here).
- Totals — auto-computed (read-only).
The Save button at the bottom validates the input, writes to the database, generates the UBL document and submits it to the PA according to the e-invoicing template's settings. The modal closes after a successful save.
A fullscreen toggle in the header swaps between windowed and full-screen edit, useful for invoices with many lines.
Resend confirmation
The Resend button (in the History tab, or via Seller actions when status is 9904/9907) opens a confirmation dialog before re-submitting the UBL to the Plateforme Agréée. After confirmation, the invoice is re-submitted; an inline banner reports success or the error returned by the PA. The lifecycle is updated to reflect the new submission.
Tips & best practices
- Start with a date range. Yesterday (default) is the typical morning view; Custom range covers month-end reconciliation. Filters apply on top of the date range.
- Status chips are the fastest filter. A red chip with a non-zero count is usually the right place to start when chasing exceptions.
- The lifecycle (History tab) is the source of truth. It records every status the invoice has been in, with messages, rejection reasons and expected actions — the place to investigate disputes or PA-side decisions.
- Use the Seller actions banner. The actions surfaced for
205/206/207/208/210/213/9904/9907are the platform's recommended next step. They reduce a multi-step workflow (finding the customer, drafting the credit note, etc.) to a single click when the connector is configured. - Set status only when needed. Manual
Set status → DBdesynchronises the local record from the PA. Reserve it for clean-up after restoring backups or for statuses the lifecycle sweep cannot catch. - Edit UBL, then save is the canonical correction path — it rewrites the database record with the new UBL and re-submits to the PA. Avoid editing the source XML directly through UBL Tools → XML Viewer unless the data on disk is the authoritative one.
- Use Copy for recurring billing. It pre-fills every party / line / VAT field; only the document number, dates, and any specific changes need to be edited.