eInvoice Viewer — Inbound Check – Manual
1 · Overview
The Inbound Check is an add-on for the WordPress plugin "eInvoice Viewer for PEPPOL & EN16931". It adds the button Inbound Check to the viewer's result view. The viewer answers the question whether an invoice can be read. The Inbound Check answers a different question: does this invoice fit you? It compares the invoice with your own company data and with a supplier list that you keep on your own site.
The add-on is meant for everyone who looks at incoming invoices before payment, such as accounts payable or the management of a small business.
What the Inbound Check does:
- It compares the buyer's name, VAT ID and address on the invoice with your company.
- It checks whether the mandatory details under VAT law are present, according to EU law and, depending on the setting, additionally according to the German or Austrian VAT act.
- It looks for the seller in your supplier list and checks whether the invoice's bank account is already known there.
- It reports when the invoice names a different payee than the seller.
- It compares the purchase order reference and the contract reference with the patterns you have stored.
- It compares currency, due date and the seller's country with what you have stored about the supplier.
- It lets an administrator adopt a new bank account into the supplier list with one click.
- It reads and writes the supplier list as a CSV file.
What the Inbound Check does not do:
- It does not read the invoice itself. It works with the invoice data the viewer has already read.
- It calls no outside service. So it does not check whether a VAT ID or an IBAN actually exists, only whether it fits your stored data.
- It stores no invoice and keeps no record of the checks.
- It does not compare the bank account of a separate payee. For a payee of its own, only the name is compared.
- The check of the mandatory details is a formal check and not tax advice.
Requirements:
| Requirement | Detail |
|---|---|
| WordPress | required |
| PHP | 8.2 or newer |
| eInvoice Viewer for PEPPOL & EN16931 | must be installed and active |
| Outside services, Java, a validator of your own | not needed |
| Interface languages | German and English |
| In the viewer app | instead of WordPress and the plugin: the viewer app from version 2.36.0 and the add-on "Inbound Check" for the app |
screenshots/ib-befunde.en.pngThe viewer's result view with an open sample invoice; below it the list of Inbound Check findings with heading, explanation and colour marking2 · Installation
The Inbound Check is a paid product. You receive it as a ZIP file from the shop on invoicePress.de. It is not on wordpress.org.
Option A: upload the ZIP file
Option B: copy the folder
Caution: After installation, every visitor of the page with the viewer can use the button "Inbound Check". The findings name your company name, your patterns for references and the names and usual terms of your suppliers. Tick Logged-in users only if visitors who are not logged in should not see the button.
Option C: in the viewer app
For the viewer app the Inbound Check comes as a ZIP file of its own from the shop. There it works entirely in the browser, without WordPress and without a server.
The add-on needs the viewer app from version 2.36.0.
Updating
You get the new version as a ZIP file from the shop and install it over the old one. WordPress does not announce a new version by itself, because the plugin brings no update check of its own. Your settings, your company data and your supplier list are stored in the database and not in the plugin folder. Anyone coming from a version before 1.2.0 keeps the previous behaviour: the check stays open to visitors until you tick Logged-in users only.
In the viewer app you unzip the new ZIP file into the same place and let it replace the existing files.
Removing
You deactivate the plugin under Plugins and delete it there. The button "Inbound Check" then disappears from the viewer. The plugin cleans up nothing on deletion. The two settings, your company data and the supplier list remain in the WordPress database. For the supplier list that is intended, because it does not belong to the Inbound Check alone: the plugin "eInvoice Inbound" reads the same list (see chapter 7). Anyone wanting to remove all traces deletes every supplier in the table beforehand and empties the company data fields.
Tip: Export the supplier list as a CSV file before removing the plugin. That way you have a copy outside the site.
In the viewer app you delete the file einvoice-viewer-inbound-check.js and the folder addons/inbound-check/. Your entries stay stored in the browser until you empty them in the settings dialog.
3 · First steps
screenshots/ib-einstellungen-unternehmen.en.pngSettings page "E-Invoice Inbound Check" with the section "Your company ( role "Inbound" )" and the completed fields of a sample companyscreenshots/ib-knopf.en.pngToolbar of the viewer's result view with the highlighted button "Inbound Check"4 · Working with Inbound Check
Starting the Inbound Check
You open an invoice in the viewer and click Inbound Check. The check runs in the browser. Your site only supplies your company data and says which supplier the invoice belongs to and whether its bank account is known; the invoice itself does not go to the server.
The findings appear as a list in the tab "Inbound Check", which opens after the check ( from version 2.38.0 of the viewer; with an older viewer the list stands next to the invoice ). A second click on the button opens the tab again. With button_spiv_inbound="no" in the shortcode of the viewer the button does not appear on that page. Red findings and warnings also stand directly at the affected field of the invoice, and above the invoice it says how many fields are marked.
Reading the findings
Every finding carries an explanation in full sentences. There are four levels:
| Level | Meaning |
|---|---|
| Red finding | Must be clarified before payment. |
| Warning | Conspicuous, but no proof of an error. |
| Note | There was nothing to compare, or a detail is missing on the invoice. |
| OK | The detail fits your data. |
The findings always stand in the same order: buyer, mandatory details, bank account, payee, references, supplier profile.
Buyer: is the invoice addressed to you?
The buyer's name (BT-44) and VAT ID (BT-48) are compared with your company data. Differences in upper and lower case and in spaces are ignored. If the name or the VAT ID differs, you get a red finding naming both details side by side. In this case the address is no longer checked.
If name and VAT ID match, the address is compared: address line 1 (BT-50), address line 2 (BT-51), postcode (BT-53), city (BT-52), region or state (BT-54) and country (BT-55). The house number belongs to address line 1, because an invoice writes street and house number into the same field. A differing address is a warning, because a wrong address can put your input tax deduction at risk.
If you have entered a Leitweg-ID, it is compared with the buyer reference of the invoice (BT-10). If the buyer reference is missing or differs, you get a warning, because the invoice may then be meant for another office. Without a Leitweg-ID on file, BT-10 is not checked.
Caution: Only what is present on both sides is compared. As long as you have entered neither the name nor the VAT ID of your company, you only get a note that your data is missing.
Mandatory details under VAT law
The check looks at whether the details VAT law requires are present in the invoice. Which provisions apply you set in the section "Mandatory details under VAT law" of the settings page; by default the check follows the buyer's country on the invoice. It is a formal check and not tax advice.
Every missing detail appears as a finding of its own whose heading names the missing detail. If there is nothing to object to, a single finding "Mandatory details under VAT law" appears with the sentence that the invoice carries all mandatory details.
Rules of the VAT Directive (Art. 226). They apply with every setting except "Do not check the mandatory details". Some rules only apply in particular cases, for example the note on the exemption only for an exempt line.
| Finding | Level | Fields checked |
|---|---|---|
| Date of issue | Red finding | BT-2 |
| Sequential invoice number | Red finding | BT-1 |
| Supplier's VAT identification number | Red finding | BT-31, BT-63 |
| Customer's VAT identification number | Red finding | BT-48 |
| Supplier's name | Red finding | BT-27 |
| Supplier's city and country | Red finding | BT-37, BT-40 |
| Supplier's street and postcode | Warning | BT-35, BT-38 |
| Customer's name | Red finding | BT-44 |
| Customer's city and country | Red finding | BT-52, BT-55 |
| Customer's street and postcode | Warning | BT-50, BT-53 |
| Nature of the goods or services | Red finding | BT-153 |
| Quantity and unit | Red finding | BT-129, BT-130 |
| Date of supply | Warning | BT-72, BT-73, BT-74, BT-134, BT-135 |
| Mention "Cash accounting" | Warning | BT-22 |
| Taxable amount per rate or exemption | Red finding | BT-116 |
| Unit price exclusive of VAT | Red finding | BT-146 |
| VAT rate applied | Red finding | BT-119 |
| VAT amount payable | Red finding | BT-117 |
| Mention "Self-billing" | Warning | BT-22 |
| Reference to the exemption | Red finding | BT-120, BT-121 |
| Mention "Reverse charge" | Red finding | BT-120, BT-121 |
| Details of a new means of transport | Warning | BT-154 |
| Mention of the margin scheme | Warning | BT-22 |
| Tax representative's VAT identification number | Red finding | BT-63 |
Additionally under German law (§ 14 UStG). Three of the four rules take the place of an EU rule.
| Finding | Level | replaces |
|---|---|---|
| Seller's tax number or VAT identification number | Red finding | Supplier's VAT identification number |
| Buyer's VAT identification number | Red finding | Customer's VAT identification number |
| Mention of the buyer's tax liability | Red finding | Mention "Reverse charge" |
| Notice of the retention obligation | Warning | — |
For a total up to 250 euros the relief for small-amount invoices under § 33 UStDV applies. Then only the issuer's name and address, the date of issue, quantity and nature of the service, the tax rate and, where applicable, the note on an exemption are required. The relief appears as a finding of its own, "Small-amount invoice up to EUR 250". It does not apply if the invoice contains an intra-Community supply or a reverse charge.
Additionally under Austrian law (§ 11 UStG 1994).
| Finding | Level | replaces |
|---|---|---|
| Buyer's VAT number above EUR 10,000 | Red finding | — |
| Designation as "Gutschrift" | Warning | Mention "Self-billing" |
For a total up to 400 euros the Austrian relief for small-amount invoices under § 11 (6) UStG 1994 applies, which also appears as a finding of its own.
When there is no check at all. If the setting is "Automatic" and the invoice names no buyer's country, or if this country is outside the EU, you get a note that the mandatory details were not checked.
Bank account: does the money go to a known account?
The seller is looked for in your supplier list, first by their VAT ID (BT-31) and the identifier VAT, then by their name (BT-27). Then the invoice's IBAN (BT-84) is compared with the accounts on file.
| Situation | Finding |
|---|---|
| The invoice carries no IBAN. | Note: the account cannot be checked. |
| The seller is not on the list. | Note: first invoice from this seller, with the button "Adopt this account". |
| The supplier is known, and so is the IBAN. | OK. |
| The supplier is known, the IBAN is not. | Red finding, with the button "Adopt this account". |
A known supplier who suddenly names a different account is a classic pattern of invoice fraud. Clarify the new account directly with the supplier, by a route other than this invoice.
screenshots/ib-konto-unbekannt.en.pngRed finding "Unrecognized bank account for a known supplier" with explanation and the button "Adopt this account"Adopting a bank account
For a first invoice and for an unknown bank account the finding carries the button Adopt this account. For a known supplier the account is added to their accounts. For a new seller a supplier with their name and this account is created; today's date is entered as the date. Only administrators can use the button. The check itself never changes the supplier list.
Payee
If the invoice names no payee of its own (BT-59), the seller is the recipient, and the finding is OK. If it names a payee whose name differs from the seller, you get a red finding with both names. A third party as recipient can be legitimate, for example a factoring company, but it is also a common fraud pattern.
References: purchase order number and contract number
The purchase order reference (BT-13) and the contract reference (BT-12) are compared with your patterns. The check takes the fixed beginning of the pattern, that is everything before the first digit or the first #, and looks for it in the invoice's reference. From the pattern PO-2026-#####, PO- is looked for, regardless of upper and lower case. If this beginning is missing, you get a warning, never a red finding. If you have stored no pattern or the invoice does not carry the reference, you get a note.
Supplier profile
This check only runs for a supplier found by their VAT ID. It compares three things:
- Currency: the invoice currency (BT-5) with the supplier's usual currency.
- Due date: the due date (BT-9) with the invoice date (BT-2) plus the usual payment term. If it differs by more than three days, you get a warning.
- Country: the seller's country (BT-40) with the countries of the accounts on file, recognised by the first two letters of the IBAN.
If the supplier is not known by their VAT ID, a note says that there is no supplier profile yet.
Maintaining the supplier list
On the page with the viewer. As an administrator you see the buttons Supplier list and Settings above the drop area as soon as viewer 2.37.1 or later is active. Settings opens the section Inbound Check with your company and the mandatory details; Supplier list opens the same dialog right with the window of the list, which is no longer shown inside the section. In the window you add, edit and delete suppliers and read in a CSV file. Nothing is stored until Save in the dialog. It is the same data as on the settings page in the wp-admin; what you save in one place stands in the other. If somebody saved the data while your dialog was open, the dialog says so instead of overwriting their change. Other visitors see neither button.
From a bookkeeping program. Instead of a file of your own you can read in the export of your bookkeeping program. Recognised are the DATEV export of debtor and creditor master data ( a file whose first line starts with EXTF and names "Debitoren/Kreditoren" ) and lists with the usual column names, such as "Firma" or "Organisation", "USt-IdNr.", "Steuernummer", "IBAN" and "BIC", as Lexware and sevdesk write them. The file may be separated by semicolon, comma or tab and may end in .csv or .txt. From a DATEV file only the creditors are taken, that is the personal accounts starting with 7, 8 or 9; customer accounts are left out and counted in the message. An entry without VAT identifier and without tax number cannot be matched to any invoice and is skipped. A supplier already on the list is recognised by its VAT identifier or tax number; its known accounts stay, and new ones are added.
In the wp-admin. Under eInvoice Viewer → Inbound Check, the section Supplier list has a table of all suppliers with the columns Name, Identifiers, Accounts, Currency, Payment terms and Actions. The column "Accounts" only shows the number of bank accounts on file. In every row you can open the supplier with Edit or remove it with Delete; you have to confirm deleting at the question "Remove this supplier?". Below the table is the form "Add a supplier" with the button Add supplier; when editing, it is called "Edit supplier" and the button Save supplier.
On saving, the plugin normalises some details. The IBAN is stored in upper case and without spaces, and the invoice's IBAN is rewritten the same way before the comparison; so an IBAN with spaces is still recognised. BIC, currency and an identifier's scheme are stored in upper case. An identifier's value, on the other hand, stays exactly as you enter it: VAT:de123456789 does not find an invoice with DE123456789.
screenshots/ib-lieferantenliste.en.pngSection "Supplier list" of the settings page with the table of some sample suppliers and below it the form for creating a supplierReading in and writing out suppliers as a CSV file
Under CSV import / export you choose a CSV file and read it in with Import CSV, or you download the whole list as the file suppliers.csv with Export CSV.
The file is comma-separated and begins with a header row. The file written out has these columns:
| Column | Content |
|---|---|
id | The supplier's internal ID. If a known id stands there on import, this supplier is overwritten instead of created twice. If it stays empty, the plugin creates a new supplier. |
name | The name. A row without a name is skipped. |
identifiers | The identifiers as in the form, that is VAT:DE123456789;GLN:4012345000009. |
accounts | The bank accounts as in the form, IBAN, BIC and date per account separated by vertical bars, several accounts separated by semicolons. |
currency | The usual currency, for example EUR. |
payment_terms_days | The usual payment term in days. |
created | The creation date in the form 2026-01-15. For a supplier that already exists, the old date stays. |
updated | The date of the last change. On import this column is not read but set to today. |
The order of the columns does not matter on import, because the plugin reads them by the header row. If the file lacks a column, such as accounts, the stored value stays for a supplier that already exists. So you can, for example, add only the currencies with a file of id, name and currency. A column that is present but empty, on the other hand, clears the field.
After reading in, the page reports "Suppliers imported: … Rows skipped: …". Every row without a name is skipped. If the file cannot be read at all, "The file could not be read. Please choose a CSV file." appears.
Caution: The file written out contains IBAN and BIC in plain text, although they are stored encrypted in the database. Keep the file as carefully as a bank statement.
screenshots/ib-csv.en.pngArea "CSV import / export" with file selection, button for reading in and button for writing outTip: Write the list out once first. The file written out shows the structure the import expects.
Switching it off on one page
In the shortcode of the viewer you switch off on a single page what this add-on shows, for example [spev_einvoice_viewer button_spiv_inbound="no"]. Without the attribute everything stays on.
| Switch | What the page leaves out |
|---|---|
button_spiv_inbound | the button "Inbound Check" and the button "Supplier list" next to "Settings"; the section in the settings dialog stays |
tab_inbound_check | the tab "Inbound Check"; the marks at the fields stay |
A switch only takes something off this page. Who may use the add-on at all is set with "Available from role" in the settings of the viewer. The viewer app uses the same names in config.js, for example features: { button_spiv_inbound: false }. Only the value false without quotes switches off.
5 · Settings
All settings are on one page: eInvoice Viewer → Inbound Check. The page is only visible to administrators. Every section has its own save button and is saved on its own. From viewer 2.37.1 on, an administrator also keeps company, mandatory details and supplier list in the settings dialog on the page with the viewer (chapter 4, "Maintaining the supplier list").
Section "Access"
| Setting | Default | Effect |
|---|---|---|
| Logged-in users only | not ticked | Not ticked: every visitor of the page with the viewer can check and sees the findings. Ticked: only logged-in users can check; visitors see the viewer without the button. |
screenshots/ib-einstellungen-zugriff.en.pngSection "Access" of the settings page with the box "Logged-in users only" and the explanatory text below itSection "Your company ( role "Inbound" )"
All fields are empty by default.
| Setting | Default | Effect |
|---|---|---|
| Your company name ( BT-44 ) | empty | The name the buyer must carry on an incoming invoice. |
| Address line 1 ( BT-50 ), Address line 2 ( BT-51 ), Postcode ( BT-53 ), City ( BT-52 ) | empty | Compared with the buyer's address. |
| House number | empty | Compared together with address line 1. |
| Region or state ( BT-54 ) | empty | Compared with the buyer's region. |
| Country ( BT-55 ) | empty | A selection list of all countries; the country chosen is compared with the buyer's country. |
| VAT identifier ( BT-48 ) | empty | Compared with the buyer's VAT ID. |
| Leitweg-ID / buyer reference ( BT-10 ) | empty | Compared with the buyer reference of the invoice. |
| Purchase order number pattern ( for BT-13 ) | empty | Pattern of your purchase order numbers, for example PO-2026-#####. |
| Contract number pattern ( for BT-12 ) | empty | Pattern of your contract numbers. |
Section "Mandatory details under VAT law"
| Setting | Default | Effect |
|---|---|---|
| Rules to apply | Automatic, by the buyer's country on the invoice | Sets under which law the mandatory details are checked. It is saved with Save setting. |
There are five values to choose from:
| Value | Meaning |
|---|---|
| Automatic, by the buyer's country on the invoice | For Germany the EU rules and the German rules apply, for Austria the EU rules and the Austrian ones, for every other EU country only the EU rules. If the country is outside the EU or missing on the invoice, there is no check, and you get a note. |
| VAT Directive only (Art. 226) | Only the EU law rules apply, whichever country stands on the invoice. |
| VAT Directive and Germany (§14 UStG) | The EU rules and the German rules apply, whichever country stands on the invoice. |
| VAT Directive and Austria (§11 UStG 1994) | The EU rules and the Austrian rules apply, whichever country stands on the invoice. |
| Do not check the mandatory details | The mandatory details are not checked, and no finding about them appears. |
screenshots/ib-pflichtangaben.en.pngSection "Mandatory details under VAT law" of the settings page with the opened list of the five rule setsSection "Supplier list"
| Setting | Default | Effect |
|---|---|---|
| Name | empty, required | The supplier's name. |
| Identifiers | empty | Identifiers, separated by semicolons, each as scheme and value with a colon. |
| Accounts | empty | Bank accounts, separated by semicolons, each as IBAN, BIC and date with vertical bars. |
| Usual currency | empty | The currency in which the supplier usually invoices, for example EUR. |
| Usual payment terms ( days ) | empty | The usual payment term in days. |
Example for the field "Identifiers":
VAT:DE123456789; GLN:4012345000009Structure of the field "Accounts":
IBAN|BIC|2026-01-15Note: An entry in the identifiers without a colon is skipped on saving. For the search by VAT ID, only the identifier with the scheme VAT counts.
Shortcodes
The Inbound Check has no shortcode of its own. It shows itself solely through the button in the viewer's result view. How to put the viewer on a page is in the viewer's manual.
6 · Special cases
You want to offer the viewer publicly, but the check only in-house. Tick Logged-in users only. The viewer stays usable for everyone; visitors who are not logged in see it without the button. If the check is to be restricted to users with a particular capability, this can be set up through the filter spiv_capability, see chapter 10.
You want to record a new supplier completely after the first invoice. First make sure the invoice is genuine. Then click Adopt this account as an administrator. The new supplier is created with name and account. Afterwards open it in the supplier list and add the identifier VAT: with their VAT ID, the usual currency and the payment term. Only with the VAT ID does the supplier profile check also run on the next invoice.
Your supplier has changed their account. The next invoice leads to a red finding. Have the account confirmed at a telephone number you already know. Afterwards an administrator adopts the account with the button in the finding.
Your service is taxed in a different country from the country of your address. In the section "Mandatory details under VAT law", set the matching rule set instead of "Automatic".
Your purchase order numbers begin with a digit. A pattern beginning with a digit or with # has no fixed beginning the check could look for. Every reference then counts as plausible. The check is only meaningful for patterns with a fixed beginning of letters or characters, such as PO-.
7 · Working with other packages
| Package | Relationship | What is added |
|---|---|---|
| eInvoice Viewer for PEPPOL & EN16931 | requirement | The viewer reads and shows the invoice. The Inbound Check puts its button in the viewer's toolbar and shows the findings in its result view. |
| eInvoice Viewer — Identifier Check | complementary add-on | Checks whether VAT ID, IBAN, BIC and GLN are correctly formed. The Inbound Check, on the other hand, checks whether identifier and account fit your stored data. |
| eInvoice Inbound | shares the supplier list | The back-end plugin for incoming invoices reads the same supplier list. A supplier you create here is known there too. It does not read your company data. |
Without the viewer, the Inbound Check has no interface of its own apart from its settings page.
8 · Troubleshooting
| Sign | Cause | Remedy |
|---|---|---|
| The button "Inbound Check" is missing. | The add-on is not active, or Logged-in users only is ticked and you are not logged in. | Activate the plugin or log in. |
| The button is missing although you are logged in. | The filter spiv_capability requires a capability your user does not have. | Grant the capability or adjust the filter. |
| Message that the security check failed. | The page was open too long or comes from a cache. | Reload the page and open the invoice again. |
| Message that you are not allowed to do this when adopting an account. | Only administrators may adopt an account. | Ask an administrator. |
| The buyer "matches" although the invoice goes to another company. | No company data are entered, so nothing was compared. | Enter name and VAT ID and save. |
| A known supplier is reported as "first invoice". | The VAT ID in the list is written differently from the invoice, the scheme is not called VAT, and the name differs as well. | Enter the identifier as VAT: and exactly as on the invoice, without spaces. |
| Note "No supplier profile yet" although the bank account counts as known. | The supplier was only found by name. The profile is only checked by VAT ID. | Add the identifier VAT: to the supplier. |
| A known IBAN is reported as unknown, and when editing the supplier the field "Accounts" no longer holds an IBAN. | IBAN and BIC are encrypted with a key from wp-config.php. If these keys were changed, for example when moving the site, the stored accounts can no longer be read. | Read the accounts in again from a CSV file written out earlier, or adopt them again. |
| "Suppliers imported: … Rows skipped: …" with skipped rows | These rows had no name. | Compare the file with a freshly written file and complete the rows. |
| "The file could not be read. Please choose a CSV file." | No file was chosen, the file is empty, or it did not reach the server. | Choose the CSV file again and read it in. |
| After the CSV import, accounts or identifiers are missing for a supplier. | The file had the column accounts or identifiers, but empty for this supplier. A column that is present but empty clears the field. | Leave the column out or fill it, and read the file in again. |
| The plugin cannot be activated. | The eInvoice Viewer is missing or not active. | First install and activate the viewer. |
9 · Privacy and security
What stays in the browser. The invoice file itself. The viewer reads it in the browser; the Inbound Check does not upload it.
What goes to the server. The check itself runs in the browser. On a click on "Inbound Check" the browser sends only the details that identify the supplier to the server of your own WordPress site: the seller's name, GLN, VAT ID and tax number, the country, postcode and city of the seller's address, and the IBAN of the invoice. The server answers with your company data and the matching entry of the supplier list; it does not receive the rest of the invoice data. On a click on "Adopt this account" the supplier's name, identifiers and address, the IBAN and the BIC go to the same server, which writes them into the supplier list. When an administrator opens the settings dialog on the page with the viewer, the browser loads your company data and the supplier list with its bank accounts from your site, and Save sends them back there; other visitors receive none of it.
What does not happen. No outside service is called. The details used to find the supplier are discarded after the answer and not stored.
What is stored. The WordPress database of your site holds the access setting, the setting for the mandatory details, your company data and the supplier list with names, identifiers, bank accounts, usual currency and usual payment term. The suppliers' IBAN and BIC are stored encrypted in the database; the key is formed from the security keys in wp-config.php. The CSV file you write out, on the other hand, contains them in plain text. On deleting the plugin, everything stays in the database (see chapter 2).
What users of the check see. The findings can name your company name, your reference patterns and the names, usual currencies and payment terms of your suppliers. Without the restriction to logged-in users, anyone who opens and checks an invoice on your page sees this.
How it is protected. Settings page, import, export and adopting an account are reserved for administrators. Every request carries a security token, which the server checks.
In the viewer app. There the check runs entirely in the browser. Your company data and the supplier list lie in the storage of this browser, and no server gets to see them. The backup file of the settings dialog contains them, bank details included, in plain text; keep it like a bank statement.
10 · For developers
| Kind | Name | Meaning |
|---|---|---|
| Filter | spiv_capability | Returns the capability a logged-in user needs for the check. The default is the empty string, that is any logged-in user. The filter is only asked when "Logged-in users only" is ticked, and it can never open the check to visitors who are not logged in. |
| Option | spiv_logged_in_only | 1 or 0; if the option is missing, 0 applies. |
| Option | spiv_mandatory_rules | auto, eu, de, at or off; if the option is missing or holds another value, auto applies. |
| Option | einvoice_masterdata | Your company data, shared with other packages of the series that read master data. |
| Option | einvoice_masterdata_suppliers | The supplier list; IBAN and BIC encrypted. The plugin "eInvoice Inbound" reads the same option. |
| Option | einvoice_masterdata_supplier_sites | The site per supplier: country, postcode and city. |
| REST route | einvoice-viewer/v1/settings/inbound-check | The section of the settings dialog; only administrators may read and write it. The route belongs to the viewer and reads and writes, through this plugin, the same options as the settings page. |
| AJAX action | spiv_nonce | Returns a fresh security token so that a cached page works too. |
| AJAX action | spiv_check | Accepts the viewer's invoice model as JSON in the field model and returns the list checks. |
| AJAX action | spiv_adopt | Adopts an account; requires the capability manage_options. Fields: supplier_id, name, iban, bic. |
| Constant | SPIV_VERSION | Version of the plugin, here 1.2.1. |
| Constants | SPIV_FILE, SPIV_DIR, SPIV_URL | Main file, folder and URL of the plugin. |
| Class | SPIV_Plugin | Only loaded for users who may check. The viewer shows the button exactly when this class exists. |
| Text domain | einvoice-viewer-inbound-check | Translations are in the folder /languages. |
The filter must be registered before the hook init with priority 1, that is in a plugin or in the theme's functions.php, not in an init callback of your own:
add_filter( 'spiv_capability', function () {
return 'edit_posts';
} );If access is blocked, the three AJAX actions answer with 401 (not logged in) or 403 (no capability).
Every finding is an array with code, level (fatal, warning, info, ok), title, explanation and usually bt. Findings that can be adopted additionally carry adoptable, supplier_id, iban and bic. The finding codes are: buyer-identity-mismatch, buyer-address-mismatch, buyer-identity-ok, bank-account-missing, bank-account-first-seen, bank-account-known, bank-account-unknown, payee-is-seller, payee-differs-from-seller, purchase-order-reference-… and contract-reference-… (each with -no-pattern, -missing, -ok, -implausible), supplier-profile-none, supplier-currency-unusual, supplier-due-date-unusual, supplier-country-unusual and supplier-profile-ok. The check of the mandatory details returns mandatory-complete, mandatory-scope for a skipped check and, per missing detail, mandatory- with the rule number in lower case, such as mandatory-eu-05c or mandatory-de-01.
11 · Versions
| Version | Change |
|---|---|
| 1.5.0 | An error or a warning stands at its field as the whole card from the list of findings. In the plugin an administrator also keeps company, mandatory details and supplier list in the viewer's settings dialog, and the button "Supplier list" stands next to "Settings"; the same in the app. |
| 1.4.0 | Red findings and warnings also stand at the affected field of the invoice. House number, region and Leitweg-ID are part of the check, the country is chosen from a list, and the list of findings looks like the report of the validators. In the app the supplier list has a window of its own. |
| 1.3.0 | The check runs in the browser, and there is an add-on for the viewer app. The findings look like the reports of the validators. |
| 1.2.1 | The bundled translations now also appear when network-activated and on older WordPress versions. |
| 1.2.0 | New setting "Logged-in users only"; it is off by default. New: check of the mandatory details under VAT law according to EU law and, depending on the buyer's country, according to the German or Austrian VAT act. |
| 1.1.1 – 1.1.4 | Maintenance releases; since 1.1.3 the settings page is called "E-Invoice Inbound Check", and the plugin is in German and English. |
| 1.1.0 | The check no longer uploads the invoice a second time; it uses the invoice data the viewer has already read. |
| 1.0.0 | First version: button "Inbound Check" with the checks of buyer, bank account, payee, references and supplier profile, settings page and button for adopting a bank account. |
12 · 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 ib-befunde.en.png. The images show sample data only.
| Status | File | What it shows |
|---|---|---|
| – | ib-befunde.en.png | The viewer's result view with an open sample invoice; below it the list of Inbound Check findings with heading, explanation and colour marking |
| – | ib-einstellungen-unternehmen.en.png | Settings page "E-Invoice Inbound Check" with the section "Your company ( role "Inbound" )" and the completed fields of a sample company |
| – | ib-knopf.en.png | Toolbar of the viewer's result view with the highlighted button "Inbound Check" |
| – | ib-konto-unbekannt.en.png | Red finding "Unrecognized bank account for a known supplier" with explanation and the button "Adopt this account" |
| – | ib-lieferantenliste.en.png | Section "Supplier list" of the settings page with the table of some sample suppliers and below it the form for creating a supplier |
| – | ib-csv.en.png | Area "CSV import / export" with file selection, button for reading in and button for writing out |
| – | ib-einstellungen-zugriff.en.png | Section "Access" of the settings page with the box "Logged-in users only" and the explanatory text below it |
| – | ib-pflichtangaben.en.png | Section "Mandatory details under VAT law" of the settings page with the opened list of the five rule sets |