Manual
eInvoice Viewer for PEPPOL & EN16931Install, work, configure
invoiceTools / Manuals / eInvoice Viewer for PEPPOL & EN16931

eInvoice Viewer for PEPPOL & EN16931 – Manual

Applies to version 3.0.0 (WordPress plugin and app). As of 28 October 2026.

1 · Overview

The eInvoice Viewer shows an XRechnung, ZUGFeRD, Factur-X or Peppol invoice as a structured, readable document. The file never leaves the browser. It comes in two delivery forms that are one product: as a WordPress plugin and as an app, that is, as a folder with an HTML file. Both show the same view, have the same toolbar and carry the same version number. The plugin is the app plus control: roles, daily limits, "available from role", the storage of the settings on the website and the connection to a validation engine. Chapters 1 to 11 of this manual describe both together. Where plugin and app differ, a short reference points to chapter 12 "As an app" or chapter 13 "As a WordPress plugin". The publisher is invoiceTools.

An e-invoice is an XML file. It is written for programs and barely readable for people. The eInvoice Viewer turns it into a structured document: you drag the file into the Viewer and see seller, buyer, line items, taxes and totals the way you are used to seeing an invoice.

Screenshot missingscreenshots/viewer-beleg.en.pngAn opened invoice: dark blue document header with the amount due, blue disclaimer, below it the blocks "Invoice data", "Buyer" and "Seller". BT numbers hidden.
An opened invoice: dark blue document header with the amount due, blue disclaimer, below it the blocks "Invoice data", "Buyer" and "Seller". BT numbers hidden.

Who it is for

Accounting departments, small businesses, law and tax firms and anyone who receives an e-invoice and wants to know what it contains; also operators of websites, intranets and portals who want to offer their visitors an invoice reader.

What it can do

  • It reads ZUGFeRD/Factur-X PDF, CII XML and UBL XML (XRechnung, Peppol BIS Billing 3.0, including credit notes).
  • It shows every field of EN 16931, including the empty ones; a switch hides the empty ones.
  • It shows the BT and BG numbers with name and description in the tooltip.
  • It shows code values with code and name, for example "380 - Invoice".
  • It recalculates line amounts, VAT breakdown and totals and marks deviations.
  • It marks fields that violate a rule derived from the invoice itself.
  • It shows the invoice's attachments for viewing and saving.
  • It adapts to the space it is placed in and looks the same in every theme and on every page.

What it cannot do

  • It does not check an invoice for validity. That is the job of a validator.
  • From a PDF it reads only the embedded XML, never the printed page. It cannot read a scan.
  • It does not store any invoice and keeps no list of opened invoices.
  • It shows the fields of the extending profiles only with the "Extended Profiles" add-on.

In which forms it is available

Delivery formPrice and sourceRequirementHow to use it
WordPress pluginfree, wordpress.orgWordPress 5.8 or later, PHP 8.2 or laterplace the shortcode [spev_einvoice_viewer] on a page
App as a folderfree, download from einvoicetools.dea current browserplace the folder and open einvoice-viewer-for-peppol-en16931.html
Demofree, in the browser on einvoicetools.dea current browsertry it out without downloading anything

2 · Installing

Neither delivery form needs a third-party service, an account or a key.

As a WordPress plugin

You need WordPress 5.8 or later and PHP 8.2 or later.

The attributes of the shortcode and the settings page are described in chapter 13.

As an app

You only need a current browser: Chrome, Edge, Firefox or Safari.

Note: The app runs the same everywhere. All paths in the folder are relative. It therefore makes no difference whether you open the file by double-clicking it on the hard disk, from a network drive or from a web server.

The structure of the folder, the file config.js and the embedding in an existing page are described in chapter 12.

3 · First steps

This is how you get to your first invoice in one minute.

Screenshot missingscreenshots/viewer-ablage.en.pngThe empty drop area with the text "Drag an e-invoice here or click to choose a file".
The empty drop area with the text "Drag an e-invoice here or click to choose a file".

Caution: An ordinary PDF is not enough. From a PDF the Viewer reads only the embedded XML. A scan or an ordinary invoice PDF contains none; the Viewer then says so instead of showing an empty view.

4 · Working with the Viewer

4.1 Reading the view

The colours named here apply to the standard design Kit H. With Kit A they look different (chapter 13).

PartWhat you see
Document headerA dark blue area shows invoice type, number, date and currency on the left and the amount due on the right.
DisclaimerA blue notice says: "We accept no liability for the correctness of the data."
Check noticeA yellow box says what the Viewer checks and that this is not a complete validation (section 4.4).
BlockEach group of the standard is in a block. Its name sits as a flag at the top left: dark blue if the group carries values, light blue if it is empty.
Field rowThe label on the left, the value on the right. An empty field appears as "—".
Line itemsEach invoice line is on a light grey area with its own blocks.
TotalsEach total has its own row; the grand total and the amount due are highlighted.

In an invoice in CII, that is an XRechnung or a ZUGFeRD invoice, the viewer also shows the department at the contact of the seller and of the buyer, with the field number BT-41-0 or BT-56-0. When such an invoice names a national account number instead of an IBAN, it stands in the card "Credit transfer" as "Account number" with the field number BT-84-0. No transfer code is made from such an account number.

4.2 The toolbar

Below the drop area, the switches stand on the left. Below them come the buttons, right-aligned across the width of the invoice: first the buttons of the add-ons and the validation buttons, then the field browser and the rule browser. The first button stands on the far right, each further one to its left; when the row is full, a new one begins above it. At the very bottom, Reset stands alone. Above the drop area is the Settings button, as soon as an add-on brings its own settings; it opens the settings dialog (chapter 5). In version 2.36.0 no add-on brings its own settings yet, so the button does not appear yet.

Screenshot missingscreenshots/viewer-werkzeugleiste.en.pngThe toolbar above the invoice with the switches "Show BT codes" and "Only filled fields" the "Reset" button and below it the tabs "INVOICE" and "XML".
The toolbar above the invoice with the switches "Show BT codes" and "Only filled fields" the "Reset" button and below it the tabs "INVOICE" and "XML".

The tabs. Below the toolbar stand the tabs. INVOICE shows the invoice and is open after loading. XML shows the invoice the way the validators do: one row per element with its position, its name, its BT number and its value. The search field above it keeps only the rows whose name, value or BT number contains the term, and the switch BT numbers hides the numbers. PDF appears for a PDF invoice and for an XML invoice with an embedded PDF. It shows the pages as pictures, with a button to save the file. If there are several PDFs, a list above the pages chooses which one you see; the PDF the invoice came in stands first. Every add-on that shows a result gets a tab of its own, for example a validation report or the Inbound Check. The tab opens when you click the add-on's button; a second click opens it again without running the add-on a second time. A new invoice and Reset close the tabs of the add-ons.

Screenshot missingscreenshots/viewer-reiter-xml.en.pngThe tab "XML": the search, the switch "BT numbers" and the first rows of the invoice, each with its position, element name, BT number and value.
The tab "XML": the search, the switch "BT numbers" and the first rows of the invoice, each with its position, element name, BT number and value.

4.3 Showing and hiding BT numbers

Each field of the standard has a number, for example BT-1 for the invoice number. The switch Show BT codes shows and hides the numbers immediately. Whether the numbers are already visible when an invoice is opened is set in the plugin by the settings page or the shortcode (chapter 13).

Screenshot missingscreenshots/viewer-bt-nummern.en.pngThe same invoice with BT and BG numbers shown.
The same invoice with BT and BG numbers shown.

When you move the mouse over a number, you see the name and a short description of the field in the wording of the specification, in German, English or French. An add-on can place a second small badge next to the number, for example the name of the code list a code comes from.

Screenshot missingscreenshots/viewer-tooltip.en.pngThe mouse pointer rests on a BT number; the tooltip shows name and description.
The mouse pointer rests on a BT number; the tooltip shows name and description.

4.4 Showing only filled fields

By default the Viewer shows every field the standard provides. This way you see what this invoice has left out. The switch Only filled fields hides the empty ones; an empty subgroup disappears together with its heading. A marked field always remains visible. If the Extended Profiles add-on is installed, the switch Only filled BT-X fields is added; it is switched on in advance and hides empty fields of the extension.

4.5 Understanding notices

The Viewer gives two kinds of notices. Both are marked red and carry a line with the explanation. The value from the invoice always remains unchanged.

NoticeWhat is checkedExample
Amount does not add upthe net amount of each line, the taxable amount and tax amount of each VAT category and the totals up to the amount due"Stated 39.62 EUR, calculated 37.62 EUR."
Rule from the invoice violatedmissing mandatory fields, the rules of the VAT categories, the order of datesa due date before the invoice date or a period that ends before its start
Screenshot missingscreenshots/viewer-rechenhinweis.en.pngThe VAT breakdown with a red-marked amount and the line "Stated …, calculated …".
The VAT breakdown with a red-marked amount and the line "Stated …, calculated …".
Screenshot missingscreenshots/viewer-hinweis-pflichtfeld.en.pngA red-marked field with the line "Missing, although EN 16931 requires this field here".
A red-marked field with the line "Missing, although EN 16931 requires this field here".

Caution: This is not a complete validation. The yellow box above the invoice says what the Viewer checks: the mandatory fields, the rules of the VAT categories, the order of dates and whether the totals add up. Only a validator checks all rules of the specification. An invoice without a red mark is therefore not automatically valid. The check digit of an IBAN is not checked by the Viewer but by the Identifier Check add-on.

4.6 Viewing and saving attachments

Below the invoice is the section Attachments with identifier, description, file name, type and size of each attachment. You can view a PDF or an image in place. PDF, PNG, JPEG, CSV, XLSX and ODS can be saved; the Viewer first checks whether the content matches the stated type. An attachment that the invoice only refers to appears as a link.

Screenshot missingscreenshots/viewer-anlagen.en.pngThe totals and below them the section "Attachments" with an opened PDF attachment.
The totals and below them the section "Attachments" with an opened PDF attachment.

4.7 Language

The Viewer speaks German, English and French. In the plugin the view follows the language of the page: the language of the logged-in user, otherwise the language of the website; any other language falls back to English. There is deliberately no language switch on a WordPress page. In the app the language of the browser applies; at the top right there are three boxes DE · EN · FR for switching (chapter 12).

Numbers and dates follow the language: German writes 5.900,00 EUR and 01.12.2017, English 5,900.00 EUR and 2017-12-01, French 5 900,00 EUR. If a translation is missing, the English text appears throughout.

5 · Settings

There are three levels of settings.

The switches of the toolbar apply to the opened invoice and are the same in plugin and app: Show BT codes, Only filled fields and, with Extended Profiles, Only filled BT-X fields (chapter 4).

The settings dialog opens via the Settings button above the drop area. It appears as soon as an add-on with its own settings is present, and each add-on can have its own section in it. The tabs stand in groups: under eInvoice Company the details of your business, then the sections of the viewer, and under eInvoice Extensions those of the add-ons. At the bottom of the dialog are the buttons Save and Close, in the app also Save as file and Load from file. What a section contains is described in the manual of the respective add-on. Where the settings are stored differs: in the app they are kept at the data source entered, or in the browser (chapter 12). In the plugin they are stored on the website, with permissions per section (chapter 13).

Screenshot missingscreenshots/viewer-einstellungen.en.pngThe settings dialog of the Viewer with a section of an add-on and the buttons for saving and loading.
The settings dialog of the Viewer with a section of an add-on and the buttons for saving and loading.

The operator's settings determine how the Viewer runs on a website or in a folder: in the app the file config.js (chapter 12), in the plugin the settings page and the attributes of the shortcode (chapter 13).

6 · Special cases

6.1 The Viewer in a narrow column

The Viewer follows the space it is placed in, not the window. Below 720 pixels of width the two columns become one; below 420 the label moves above its value. In a sidebar it therefore behaves as on a phone.

6.2 An invoice with an extended profile

The Viewer opens an invoice according to ZUGFeRD/Factur-X EXTENDED, XRechnung Extension or EXTENDED-CTC-FR like any other and shows its core fields completely. Below the invoice is a notice that it uses an extension. The additional fields are shown by the "Extended Profiles" add-on.

6.3 Operation without internet or behind a firewall

You do not have to configure anything for this. Fonts, field catalogue, language texts and PDF library are part of the package. The plugin loads them from your own website; the app loads them from its folder and, with the default fontsLocal: true, makes not a single request to the outside, not even a failing one.

6.4 The shortcode appears as text

The shortcode is called [spev_einvoice_viewer]. A page that still contains the former name [einvoice_viewer] shows the square brackets as text. Edit the page once and insert the new name.

7 · Working with other packages

Each add-on works through its presence: if it is installed, its function appears in the same view and in the same toolbar. If it is removed, it is gone again. The file is not read a second time for this. If an add-on has its own settings, it gets a section in the settings dialog (chapter 5).

Add-onWhat is added in the ViewerPriceDelivery form
Extended Profilesthe fields of ZUGFeRD/Factur-X EXTENDED, XRechnung Extension and EXTENDED-CTC-FRpaid productplugin and app
Technical Detailscardinality, data type and path in the tooltip; field, rule and reference browserpaid productplugin
Visualizerthe invoice as a document in five layouts, in the plugin as PDF on request, in the app through the print dialogpaid productplugin and app
Identifier Checkchecks identifiers such as VAT ID, IBAN, BIC and GLNpaid productplugin and app
Inbound Checkplausibility questions of accounts payablepaid productplugin and app
EPC QR Codethe payment code to scan with a banking apppaid productplugin and app
Hybrid Checkcompares the visible document of a ZUGFeRD invoice with the invoice datapaid productplugin and app
Editoredit the displayed invoice and save it as XMLpaid productplugin and app
Exportertransfers the invoice into an Excel filepaid productplugin
eInvoice Validator for KoSITa button validates the displayed invoice with your own KoSIT Validatorfreeplugin
eInvoice Validator for Mustangits own validation button next to the KoSIT buttonfreeplugin
eInvoice Validator for VAMPIREits own validation button next to the KoSIT buttonfreeplugin

In the app an add-on is a separate package from the shop. You place its content in the folder of the app; there is no key. The app has the add-ons marked "plugin and app" in the table. Technical Details, the Exporter and the validation buttons of the validators exist only for the WordPress plugin (chapters 12 and 13).

8 · If something does not work

What you seeWhy it happensWhat to do
The Viewer reports: "This PDF contains no invoice XML. A scanned or ordinary invoice PDF carries no data that can be evaluated."The PDF is a scan or an ordinary PDF without embedded XML.Ask the sender for a ZUGFeRD PDF or the XML file.
The Viewer reports: "The file is too large." (plugin)It is larger than the configured limit (default 8 MB).Increase the setting "Maximum file size (MB)" (chapter 13).
The Viewer reports: "You have reached the daily limit of invoices. Please try again tomorrow." (plugin)The limit "Invoices per day" for your role or for guests is reached.Continue the next day, or the operator raises the limit (section 13.3).
The page shows [einvoice_viewer] as text. (plugin)The former name of the shortcode.Replace it with [spev_einvoice_viewer] (chapter 6.4).
The Viewer reports: "This invoice uses the extension %s. All core fields are shown; the additional fields of the extension come with the Extended Profiles add-on."The fields of the extensions are shown only by the "Extended Profiles" add-on.Install the add-on or work with the core fields.
The embedded view has no colours or no field texts. (app)The attribute data-base on the element does not point to the package folder, or the folder is incomplete.Point data-base to the folder of the app (chapter 12).
The view appears in a different font. (app)The file assets/css/fonts.css is missing from the head of the page, or the folder with the fonts is missing.This is not an error; if you want the fonts of the kit, include fonts.css.
After an update the app looks as before. (app)The browser shows the version from its cache.Reload with Ctrl + F5.

9 · Privacy and security

  • The invoice does not leave the device. It is read in the browser. There is no temporary file, no entry in the media library and no row in the database.
  • Fonts, field catalogue and PDF library are part of the package and are loaded from your own website or from the app's own folder.
  • A link from the invoice only leads to another server when someone clicks it, and appears only if it begins with http: or https:.
  • Every value from the invoice is escaped before it appears on the page.
  • In the plugin, before each invoice the Viewer briefly asks the website whether access is still granted; it sends no invoice data in doing so (chapter 13).
  • The one-file app ( einvoice-viewer-for-peppol-en16931-one-file.html ) is one single file without a folder. It carries English and design kit H. German and French, the code lists, kits A and S, the fonts, the PDF reader and this manual are loaded from einvoicetools.de when needed. No invoice goes to the server, only the request for the file with your IP address. Without internet the app shows English, uses a similar system font, shows only the number for some codes and shows no PDF pages; it still reads the invoice itself. You choose the kit with designKit in the settings, which in the one-file app stand as a block at the top of the HTML file; a text editor is enough for that.
  • The add-ons as a single file carry English only as well. When their folder from the ZIP does not lie next to them, they fetch the texts of the chosen language from einvoicetools.de. VAMPIRE JS and Extended Profiles also fetch their rule and data packages from there. No invoice goes to the server, only the request for the file with your IP address. Whoever wants to work without internet takes the folder app and unpacks the add-ons completely.

Caution: Some add-ons change this. The eInvoice Validators for KoSIT, Mustang and VAMPIRE send the invoice to the validator you configure. Exporter, Visualizer, Identifier Check and Inbound Check send the invoice or data read from it to your own WordPress website. Each add-on says so in its own manual.

10 · For developers

From version 3.0.0 the viewer takes extensions through an interface of its own, now in its eighth version; it is no general standard but belongs to the eInvoice family. An extension registers with one entry and gets exactly one object ctx from the viewer, through which it reaches everything it may use: the invoice that was read, places for buttons, areas and tabs, events such as document-opened, and its part of the shared data store.

( globalThis.einvoiceExtensions = globalThis.einvoiceExtensions || [] ).push( {
	manifest: { id: 'my-extension', name: 'My Extension', version: '1.0.0', api: 8,
		hosts: [ 'viewer' ], requires: [ 'document', 'tabs' ] },
	setup( ctx ) {
		ctx.on( 'document-opened', ( doc ) => {
			const tab = ctx.place( 'tab', { title: 'My Extension' } );
			if ( tab ) tab.el.textContent = doc && doc.model ? 'Invoice read' : '';
		} );
	},
} );

When the viewer lacks a capability an extension requires, it does not start the extension and names it in one sentence above the invoice. An error in one extension stops neither the viewer nor another extension. Extensions built for versions 2.x do not run on viewer 3.0.0.

Filter or route in PHPPurpose
einvoice_extensionsAn extension plugin registers its script when the visitor may use the extension.
einvoice_viewer_sourcesA validator plugin registers its validation source for the viewer.
einvoice_store_capsDecides who may read and write a store of the shared data store.
spev_force_enqueueLoads the viewer's scripts and styles also on a page without the shortcode.
spev_register_settingsLets an add-on add a section of its own to the settings page.
einvoice_design_kitSets the design kit of all eInvoice tools in code.
/wp-json/einvoice/v1/…The shared service of the eInvoice plugins: info, the stores under data/… and validation under validate/…. A write based on an outdated state is refused with 409.

The full description of the interface is in the developer documentation.

11 · Versions

Delivery formVersionLicence
WordPress plugin3.0.0GPL-2.0-or-later
App3.0.0GPL-2.0-or-later

Since 2.36.0 plugin and app carry the same version number; the app therefore jumps from 1.11.0 to 2.36.0. The plugin is tested up to WordPress 7.1.

In 3.0.0 the add-ons load through the new version of this interface; update all eInvoice add-ons together with the viewer. The settings are kept in a shared store.

In 2.39.2 the viewer shows the department at the contact and an account number that is not an IBAN in CII invoices. In 2.39.1 the free validator apps for KoSIT and Mustang bring their check buttons into the app, and a Validation Explorer next to the app brings the button Open validation report. In 2.39.0 every tab of an add-on can be switched off in the shortcode with tab_ and its name, and so can the extended tooltips of Technical Details and the fields of the Extended Profiles. In 2.38.1 the tab XML shows the invoice the way the validators do, and the tab PDF also shows a PDF embedded in the XML. New in 2.38.0 are the tabs Invoice, XML and PDF with one tab per add-on, and switches in the shortcode for single buttons. New in 2.36.0 were the Settings button with the settings dialog, the version of the format in the line above the invoice, the embedding of the app in three lines, the loading of the app's add-ons from a list, the common folder name and the manual in the package.

Included is the library Mozilla pdf.js under the Apache License 2.0. The fonts Inter, JetBrains Mono and Space Grotesk are under the SIL Open Font License. The changes per version are listed in the file readme.txt of the plugin and in the file CHANGELOG.md of the app. The manual is in the package in the folder manual.

12 · As an app

12.1 Folder and start file

The app is the folder einvoice-viewer-for-peppol-en16931. It contains the start page einvoice-viewer-for-peppol-en16931.html, the script einvoice-viewer.js, the file config.js, the folders assets/ (fonts, stylesheets, pdf.js), data/ (field catalogues), i18n/ (language texts), addons/ (add-ons), examples/ (examples for embedding) and manual/ (this manual).

Note: The start page einvoice-viewer-for-peppol-en16931.html carries the catalogue files embedded so that it works when double-clicked from the hard disk, where a browser may not load neighbouring files. Embedding in a page on a web server does not need these embedded files; it loads everything from the folder.

The language follows the browser. At the top right there are three boxes DE · EN · FR for switching. The browser remembers the choice under the key einvoice-viewer-lang; it applies again the next time the app is opened.

12.2 The file config.js

The operator's settings are in a single file in the folder: config.js. Open it with a text editor. Data always comes from the folder data/ and never from the network.

Note: Of the eight keys in this table, four have an effect in this version: fontsLocal for the start page einvoice-viewer-for-peppol-en16931.html, lang for the embedding in a page of your own (section 12.3), and bridgeUrl and bridgeKey for the check buttons of the validator apps (section 12.4). The other four are in the file and are described there, but are not evaluated.

KeyDefaultEffect
fontsLocaltrueApplies to the start page. true loads the fonts from the folder assets/fonts/. false loads them from Google Fonts; the IP address of the computer then goes to Google, but no invoice does. When embedding, your page includes the fonts itself.
langemptyApplies when embedding with data-base: de, en or fr sets the language, empty means the language of the browser. A choice the visitor made and an attribute data-lang on the element take precedence. The start page follows the remembered choice, otherwise the browser.
dataSourcelocalNo effect in this version; the app only ever reads the folder data/.
onlineUpdatesfalseNo effect in this version.
serviceUrlemptyNo effect in this version.
allowedProfilesemptyNo effect in this version.
bridgeUrlhttp://127.0.0.1:8090The address of the validation service for the buttons Validate with KoSIT and Validate with Mustang: a Validator Bridge or the eInvoice API of a website. The invoice goes to this address and nowhere else. Empty means that nothing is checked. Without the validator apps the key has no effect.
bridgeKeyemptyThe key for a bridge on a server or for the eInvoice API of a website. It is not secret in the browser, because anyone who opens the page can read it.

12.3 Embedding the Viewer in an existing page

If the folder of the app is on a web server, you embed the Viewer in an existing page with three lines. The file examples/embed.html in the folder shows this completely.

<!-- 1 of 3: the fonts, in the head of the page -->
<link rel="stylesheet" href="/path/to/package-folder/assets/css/fonts.css">

<!-- 2 of 3: the element, where the Viewer is to appear -->
<einvoice-viewer data-base="/path/to/package-folder/"></einvoice-viewer>

<!-- 3 of 3: the script -->
<script src="/path/to/package-folder/einvoice-viewer.js"></script>

The attribute data-base is the address of the package folder on your server. From it the element reads the file config.js, the data packages, the language texts, the stylesheets and pdf.js. An attribute on the element takes precedence over the value from config.js. The stylesheet of the fonts belongs in the head of the page, because a font rule only works in the document, never inside the element; without it the view appears in system fonts. The view grows with its content. The design of your page does not affect the Viewer, and its design does not affect your page.

Screenshot missingscreenshots/viewer-einbettung.en.pngThe Viewer as an element in a third-party page with its own design.
The Viewer as an element in a third-party page with its own design.

If your page does not allow its own script, show the start page in a frame. The file examples/embed-iframe.html shows this; the frame has a fixed height.

<iframe src="/path/to/package-folder/einvoice-viewer-for-peppol-en16931.html"
        style="width:100%;height:900px;border:0"
        title="eInvoice Viewer for PEPPOL &amp; EN16931"></iframe>

12.4 Add-ons

An add-on is a separate package from the shop. Unpack its content into the folder of the app; there is no key. The app loads its add-ons from a list in the folder addons. For the app, this version offers the Extended Profiles add-on.

The one-file app loads only the add-ons named under addons in the settings at its top. Put the file of the add-on next to the HTML file and enter its file name there, for example addons: [ 'einvoice-viewer-epc-qr.js' ],. An add-on not named there is not loaded, even when its file lies next to the app. In return the app starts without looking for add-ons that are not there.

The buttons Validate with KoSIT and Validate with Mustang do not come from the shop from version 2.39.1, but with the free apps "eInvoice Validator for KoSIT" and "eInvoice Validator for Mustang". Put their file einvoice-validator-for-kosit-viewer.js or einvoice-validator-for-mustang-viewer.js next to the app, or unpack the ZIP of the validator app into the folder of the app. The invoice then goes to the Validator Bridge whose address stands in config.js under bridgeUrl, and the report appears in a tab of its own. How the bridge is set up is described in the manual of the validator app.

Also from version 2.39.1, the folder of a Validation Explorer for KoSIT, Mustang or VAMPIRE next to the app brings the button Open validation report. A validation report you open with it appears in a tab of its own, and each of its messages stands as a card below the field of the invoice it concerns. This also holds for the reports of the buttons Validate with KoSIT, Validate with Mustang and Validate with VAMPIRE. When the report belongs to another invoice, the viewer says so.

12.5 Where the app keeps its settings

As soon as an add-on with its own settings is in the folder, the Settings button appears above the drop area. Where the values you confirm there with Save are kept is decided by the entry sources.data in config.js:

  • With a data source they are kept there: on a website with a plugin of the eInvoice family, for example https://example.com/wp-json/einvoice/v1, or at the Desktop Bridge on this computer, http://127.0.0.1:47801/v1. The address goes with the key the website or the bridge issued for this app.
  • Without a data source the browser on this computer stores them. They are lost when the browser deletes its data; a line above the buttons says so.

With Save as file the viewer writes the settings to a JSON file, with Load from file it reads such a file back in. This is how you take them to another computer, or keep them safe when no data source is entered.

Settings of an older version. When the viewer up to version 2.40.0 stored settings in this browser, the dialog names them in a line with the button Take over. Only this button writes them to the new store; the old values stay where they are. The settings file of version 2.40.0 for Chrome and Edge no longer exists. Its values were also kept in the browser and are taken over from there.

12.6 Printing

The folder contains assets/css/kit-print.css; it is not included by default. It sets up the page for paper: white background, no toolbar. To use it, add the following in the head of einvoice-viewer-for-peppol-en16931.html after the kit:

<link rel="stylesheet" href="assets/css/kit-print.css" media="print">

12.7 Updating

Note: Up to version 1.11.0 the folder was called einvoice-viewer and the start file einvoice-viewer.html. Since 2.36.0 both carry the name of the product: the folder einvoice-viewer-for-peppol-en16931 and the start file einvoice-viewer-for-peppol-en16931.html. If you update from there, place the new folder and adjust links, frames and data-base attributes.

12.8 SharePoint

SharePoint Online does not execute HTML files from document libraries but offers them for download. This is how it works anyway:

13 · As a WordPress plugin

13.1 The shortcode and its attributes

[spev_einvoice_viewer]
[spev_einvoice_viewer bt="1"]
[spev_einvoice_viewer bt="0" lite="1"]
AttributeValuesEffect
bt1 or 0Whether the BT numbers are visible from the start. For this page the attribute takes precedence over the setting.
lite1 or 0Whether the view starts with only the filled fields.

Instead of 1, true, yes and on are also accepted.

Switching single buttons off. Every button and the tabs XML and PDF can be switched off for one page with the value no:

[spev_einvoice_viewer button_spev_rulebrowser="no" tab_spev_pdf="no"]

Without the attribute every button stays. Instead of no, 0, false and off are also accepted. The name of a switch is the name of the button in the page code with underscores and button_ in front, so a later add-on brings its switch by the same rule.

A second rule applies to the tabs. Every tab of an add-on can be switched off with tab_ and its id, with hyphens turned into underscores. This also holds for a tab that a later add-on brings.

SwitchButton or tab
button_spev_kositValidate with KoSIT
button_spev_mustangValidate with Mustang
button_spev_vampireValidate with VAMPIRE
button_spev_exportExport to Excel
button_spev_identifier_checkCheck identifiers online
button_spev_fieldbrowserField Browser
button_spev_rulebrowserRule Browser
button_spev_visualizerVisualizer
button_spev_visualizer_pdfDownload as PDF
button_spiv_inboundInbound Check
button_speqthe tab "Transfer code" ( it has no button since the add-on 1.2.0 )
button_spedEdit invoice
tab_sphcHybrid Check ( it has no button and checks by itself )
tab_spev_xmlthe tab "XML"
tab_spev_pdfthe tab "PDF"
tab_kosit, tab_mustang, tab_vampirethe tabs of the validation reports; the report then stands above the invoice
tab_identifier_checkthe tab "Identifier Check"
button_spic_annotatethe red mark of the Identifier Check at the field; the tab stays
tab_transfer_codethe tab "Transfer code", like button_speq
tab_inbound_checkthe tab "Inbound Check"; the marks at the fields stay
tab_hybrid_checkthe tab "Hybrid Check", like tab_sphc
tab_editorthe tab "Edit invoice"; the editor then opens in a window over the page
button_svtd_tooltipsthe extended tooltips of Technical Details
button_svze_fieldsthe fields of the Extended Profiles; the invoice looks as in the free viewer

With button_spiv_inbound="no" the button "Supplier list" next to "Settings" goes as well.

Note: A switch only takes a button off this page. Who may use an add-on at all is set with "Available from role" (section 13.3).

13.2 The settings page

The settings are under eInvoice Viewer → Viewer. The menu entry has this name in every language. It gathers the viewer and the add-ons with a page of their own, such as the Inbound Check.

SettingDefaultEffect
Maximum file size (MB)8The Viewer rejects a larger file before reading it. The check happens in the browser, because the file never reaches the server.
Show BT numbers by defaultoffWhether the numbers are visible when an invoice is opened. The visitor can switch them at any time.
Design kitKit HThe design. Kit H is the standard design; Kit A is plainer and uses the system fonts. The choice applies to all eInvoice tools of the website.

An add-on can create its own section on this page; what is in there is described in its manual.

13.3 Access and limits

The second section of the settings page determines who may use the Viewer how often and from which role each add-on is available. Administrators are never limited.

SettingDefaultEffect
Invoices per day, one row for guests and one for each role of the websiteemptyPer calendar day. Empty means unlimited, 0 means no access. Logged-in users are counted per user, guests per IP address; whoever has several roles gets the most generous value. The invoice is still read in the browser; before each invoice the Viewer only briefly asks the server whether access is still granted and sends no invoice data in doing so.
Count guests via X-Forwarded-ForoffSwitch on only behind a reverse proxy or CDN; otherwise a visitor could choose their own counter.
Available from role, per installed add-onEveryone, including guestsThe options are: Everyone, including guests; from Subscriber; from Contributor; from Author; from Editor; Administrators only. Below the chosen role the Viewer behaves as if the add-on were not installed: no button, no fields, no requests.

13.4 Settings on the website

In the plugin the values of the settings dialog are not stored in the visitor's browser but in the database of the website; all visitors see the same settings. Each section belongs to an add-on, and the add-on determines who may read it and who may change it. Guests can read but not write. Each save creates a new revision; if a save is based on an outdated state because someone else has saved in the meantime, the website rejects it. From version 3.0.0 the values are kept in the shared store of the eInvoice plugins. Values an older version stored are named once by the settings dialog with the button Take over; only then do they apply.

13.5 Validation buttons

If the eInvoice Validator for KoSIT, the eInvoice Validator for Mustang or the eInvoice Validator for VAMPIRE is installed on the website, the toolbar shows a separate validation button for each of them, for example Validate with KoSIT. The button sends the displayed invoice to the validation engine you have configured there; the validation report appears on the same page under a blue title bar "Validation report".

  • The report appears in a tab of its own, which opens by itself: KoSIT Validator, Mustang Validator or VAMPIRE Validator. The buttons Download report.xml and, for KoSIT and VAMPIRE, Download report.html stand at the top right of that tab.
  • A second click on the validation button opens the tab again without sending the invoice a second time.
  • Reset removes invoice and reports.

Whether and from which role a button appears is governed by "Available from role" (section 13.3).

13.6 Storage

The Viewer itself stores no invoice: it never reaches the server. Only the values of the settings page and the sections of the settings dialog are stored on the website. Add-ons that send an invoice to the website say so in their own manual.

13.7 Manual

The manual is in the package in the folder manual, in German as manual/manual.de.html and in English as manual/manual.en.html.

14 · List of images

This list shows which screenshots this manual expects and which were found in the folder screenshots/ of the package. An image is always named key.language.png, for example viewer-beleg.en.png. The images show sample data only.

StatusFileWhat it shows
–viewer-beleg.en.pngAn opened invoice: dark blue document header with the amount due, blue disclaimer, below it the blocks "Invoice data", "Buyer" and "Seller". BT numbers hidden.
–viewer-ablage.en.pngThe empty drop area with the text "Drag an e-invoice here or click to choose a file".
–viewer-werkzeugleiste.en.pngThe toolbar above the invoice with the switches "Show BT codes" and "Only filled fields" the "Reset" button and below it the tabs "INVOICE" and "XML".
–viewer-reiter-xml.en.pngThe tab "XML": the search, the switch "BT numbers" and the first rows of the invoice, each with its position, element name, BT number and value.
–viewer-bt-nummern.en.pngThe same invoice with BT and BG numbers shown.
–viewer-tooltip.en.pngThe mouse pointer rests on a BT number; the tooltip shows name and description.
–viewer-rechenhinweis.en.pngThe VAT breakdown with a red-marked amount and the line "Stated …, calculated …".
–viewer-hinweis-pflichtfeld.en.pngA red-marked field with the line "Missing, although EN 16931 requires this field here".
–viewer-anlagen.en.pngThe totals and below them the section "Attachments" with an opened PDF attachment.
–viewer-einstellungen.en.pngThe settings dialog of the Viewer with a section of an add-on and the buttons for saving and loading.
–viewer-einbettung.en.pngThe Viewer as an element in a third-party page with its own design.