Skip to Content

Invoice Pilot

Invoice Pilot breidt WooCommerce uit met country-aware facturatie voor de 27 EU-lidstaten. Het vangt de juiste billing-velden af bij de checkout (Italiaanse SDI / PEC-codes, Franse SIRET, Duitse Leitweg-ID, Poolse NIP, Roemeense CUI, enzovoort) en geeft vervolgens immutable PDF- en XML-facturen, creditnota’s, proforma’s en offertes uit vanuit de order. De PDF wordt gerenderd met mPDF; de XML-envelope wordt automatisch gekozen op basis van het land van de koper en dekt elf nationale profielen waaronder FatturaPA (IT), XRechnung (DE), KSeF FA(2) (PL), Factur-X (FR), CIUS_RO (RO), Facturae (ES) en UBL 2.1 / PEPPOL BIS 3.0 als de generieke fallback.

Naast de document-engine levert Invoice Pilot first-class integraties met zes accounting-providers — SmartBill (Roemenië), Fatture in Cloud (Italië), Xero, QuickBooks Online, Fortnox (Zweden) en Sage — een BTW-validator die de Europese VIES-service raadpleegt met een per-land formaat-fallback, een dashboard met KPI-kaarten en trend-charts, en een optionele multi-provider AI-laag (Anthropic Claude, OpenAI, Google Gemini, DeepSeek, Grok xAI) voor checkout smart-fill, compliance pre-flight, line translation en natural-language document search. De plugin ondersteunt ook WordPress Multisite met tabellen per site en een network-wide overview-pagina.

Voordelen

  • WooCommerce-gedreven document-lifecycle voor facturen, creditnota’s, proforma’s en offertes, met reserved numbering series, een clean issue / regenerate / reissue / void / credit-note flow, en per-document-type styling (disclaimer banner op niet-fiscale documenten, “Valid until”-labels op offertes, “Refund total” op creditnota’s, betalingsblok verborgen op offerte en creditnota).
  • EU-27 country-specifieke billing-velden geregistreerd tegen zowel de legacy shortcode-checkout als de WooCommerce 8.6+ block-checkout (via de Additional Checkout Fields API).
  • PDF-rendering via mPDF met één van drie meegeleverde templates (Minimal, Classic, Modern), met picker voor accent-kleur, tekstkleur, font family en seller logo.
  • Elf XML-writers, automatisch gedispatcht op basis van het land van de koper: FatturaPA (IT), Factur-X / CII (FR), XRechnung 3.0 (DE), KSeF FA(2) (PL), CIUS_RO 1.0.0 (RO), Facturae 3.2.2 (ES), SAF-T PT (PT), OIOUBL (DK), Finvoice 3.0 (FI), ebInterface 6.1 (AT), myDATA InvoicesDoc (GR / EL), met UBL 2.1 / PEPPOL BIS 3.0 als universele fallback.
  • BTW-validation-chain die de Europese VIES SOAP-service combineert met offline regex-validatie per land, een DB-backed cache en een hourly cron die stale entries opnieuw valideert.
  • Zes accounting-integraties — SmartBill, Fatture in Cloud, Xero, QuickBooks Online, Fortnox en Sage — elk met encrypted credentials, push / status / void operations en een retry-queue. De Integrations settings-tab gebruikt een sticky provider selector zodat het paneel dat je aan het configureren was open blijft over saves heen.
  • Optionele AI-laag met vijf providers (Anthropic, OpenAI, Google Gemini, DeepSeek, Grok xAI) die smart-fill, compliance check, line translation en natural-language search dekken; de plugin werkt volledig zonder API key.
  • Dashboard met period selector, vijf KPI-kaarten en twee trend- charts; een aparte Integration Log registreert elke push en failure.
  • WordPress Multisite-support — elke sub-site heeft zijn eigen tabellen, settings en numbering counters, met een network admin page die statistieken aggregeert.

Vereisten

ComponentMinimum
WordPress5.8 (getest tot 7.0)
PHP8.0
WooCommerce7.0
DatabaseMySQL 5.7 of MariaDB 10.2 (de dashboard SQL gebruikt JSON_EXTRACT / JSON_UNQUOTE tegen de immutable snapshot-kolom)

De block-checkout-integratie is geregistreerd tegen de WooCommerce Additional Checkout Fields API (geïntroduceerd in WooCommerce 8.6). Op oudere WooCommerce-versies voegt de legacy woocommerce_billing_fields- filter nog steeds BTW-, fiscale-code- en country-specifieke velden toe aan de shortcode-checkout, dus de plugin degradeert gracieus.

Installatie

  1. Download de laatste Invoice Pilot ZIP van de GitHub Releases  pagina.
  2. Open in WordPress Plugins → Nieuwe plugin → Plugin uploaden.
  3. Kies de ZIP en klik op Nu installeren.
  4. Klik op Plugin activeren.
  5. Open Invoice Pilot → Settings om de seller, numbering series en optionele integraties te configureren.

Activatie maakt de database-tabellen van de plugin aan, installeert de default settings en seedt vijf numbering series (één per document type): INV (invoice, default), REC (receipt), CN (credit note), PRO (proforma) en Q (quote), allemaal met het patroon YYYY-NNNN en een jaarlijkse reset. Vier cron-jobs worden ook ingepland: daily log cleanup, vijftien-minuten retry van failed integration pushes, hourly VIES-revalidatie en daily Fatture in Cloud token refresh.

Op WordPress Multisite draait dezelfde per-site bootstrap automatisch wanneer een nieuwe sub-site wordt aangemaakt (wp_initialize_site).

Configuratie

Alle Invoice Pilot-schermen staan onder het hoofdmenu Invoice Pilot in de WordPress admin-sidebar:

  • Dashboard — KPI-kaarten en trend-charts.
  • Documents — moderne data-grid die elk uitgegeven document toont (factuur, creditnota, proforma, offerte, kassabon) met een unified toolbar (AI search + type-filter), kleurgecodeerde status-pills (paid / void / converted / draft / issued), 20-rij paginering en inline PDF- / XML- / Delete-acties.
  • Settings — configuratiepagina met acht tabs (hieronder gedocumenteerd).
  • Log — integratie-log-entries met retentie en een handmatige cleanup-actie.

De Settings-pagina is verdeeld over de volgende tabs, in de volgorde waarin ze in de UI verschijnen:

  1. General
  2. Series
  3. Document types
  4. Templates
  5. VAT validation
  6. Integrations
  7. AI
  8. Advanced

General

Invoice Pilot — Settings, General-tab
Settings → General — License-key, seller-identiteit en document-defaults.

De General-tab is verdeeld in drie kaarten: License, Seller details en Document defaults.

License

VeldNotities
License KeyPlak de PILOT-XXXX-XXXX-XXXX-XXXX-key uit je orderbevestigingsmail en druk op Verify & Save om automatische plugin-updates vanaf de GitHub release feed te activeren. De plugin geeft ook zonder key documenten uit; alleen het auto-update-kanaal is gated.

Seller details bevat de identiteit die op elk uitgegeven document geprint wordt; Document defaults bevat een klein aantal WooCommerce-level defaults.

VeldDefaultNotities
Seller nameleegFree text.
VATleegBTW-identifier van de seller.
Tax codeleegItaliaanse codice fiscale of equivalent.
AddressleegStraat.
ZIP / CAPleegPostcode.
Cityleeg
Province (2 letters, alleen IT)leegWordt bij save force-uppercased.
Country (ISO, 2 letters)ITISO-3166-1 alpha-2; force-uppercased.
EmailleegGevalideerd als e-mailadres.
LogoleegGekozen uit de WordPress Media Library. PNG of SVG met transparante achtergrond werkt het best; aanbevolen hoogte 64–128px. Het logo wordt rechtsboven op de factuur geprint.
IBANleegGebruikt door writers die betalingsinstructies emitteren. Geprint in de footer van de factuur en ingebed in FatturaPA <DatiPagamento>.
Bank nameleegVrije tekst — geprint onder de IBAN in de factuur-footer en geëmitteerd als <IstitutoFinanziario> in het FatturaPA-blok <DettaglioPagamento>.
SWIFT / BICleeg8 of 11 alfanumerieke tekens; bij save uppercased en gestript van whitespace. Geprint naast de IBAN en geëmitteerd als <BIC> in FatturaPA.
Trigger statusprocessingWooCommerce-orderstatus die automatische factuuruitgifte triggert. Toegestane waarden: processing, completed, on-hold, pending.
Default seriesINVSlug van de numbering series die voor nieuwe facturen gebruikt wordt.
VAT number format on PDFPrefixed — VAT IT04032690614 (VIES-stijl, aanbevolen)Hoe het BTW-nummer van de seller op de gerenderde factuur en de PDF-preview wordt geprint. Waarden: Prefixed (landcode vóór het nummer, volgens het VIES-stijl format), Bare (alleen het nummer, zoals ingevoerd in Seller details → VAT). Default is Prefixed.
Landspecifieke factuurveldenAlleen Italië (SDI / PEC / fiscaal regime)Tri-state selector die bepaalt welke landspecifieke velden bij checkout getoond worden. Waarden: Uit — alleen de universele BTW- en fiscaal-code-velden worden getoond, Alleen Italië (SDI / PEC / fiscaal regime), Alle EU-27 landspecifieke velden. Geldt voor zowel de block-checkout als de legacy shortcode-checkout. Elk veld heeft een vertaalbare label (bv. SDI recipient code, Certified email (PEC), SIRET, Steuernummer) — de oude ruwe snake_case-namen zijn verdwenen.

Series

Invoice Pilot — Settings, Series-tab
Settings → Series — CRUD-tabel over numbering series met per-type pattern, counter en reset-strategie.

De Series-tab is een CRUD-tabel over de numbering series die zijn opgeslagen in de eigen series-tabel van de plugin. Elke rij regelt hoe documenten van een bepaald type genummerd worden.

Kolommen: Slug, Pattern, Counter, Reset, Default, Enabled, Actions (Edit / Delete).

Het Add- / Edit-formulier toont:

VeldToegestane waardenDefault
SlugLowercase identifier. Moet uniek zijn.leeg
Document typeinvoice, receipt, credit_note, proforma, quote.invoice
PatternFree text; placeholders {YYYY} (jaar) en {NNNN} (counter) worden bij issue-time uitgebreid.INV-{YYYY}-{NNNN}
CounterInteger, één of hoger. Volgende nummer dat wordt toegewezen — het eerstvolgende document dat uit deze series wordt uitgegeven, krijgt exact deze waarde (dus Counter = 47 geeft de volgende keer INV-2026-0047, niet INV-2026-0048).1
Reset strategynever, yearly.never
DefaultBoolean — markeer deze series als default voor nieuwe documenten van dit type.uit
EnabledBoolean — sta deze series toe om gebruikt te worden.aan

Het hernoemen van een slug update de series-rij in place (met behoud van het integer id en eventuele referenties) en migreert de setting default_series automatisch als die naar de oude slug wees. Een series verwijderen verwijdert niet bestaande documenten; die behouden hun nummers.

Document types

Invoice Pilot — Settings, Document types-tab
Settings → Document types — optionele document types en FatturaPA bollo/ritenuta defaults.

De Document types-tab toggelt optionele document types en toont de FatturaPA-specifieke bollo- en ritenuta-instellingen.

Kaart Document types

ToggleDefaultBeschrijving
Auto-issue credit note on WC refundaanWanneer een WooCommerce-refund wordt aangemaakt, automatisch een creditnota uitgeven die aan de originele factuur is gekoppeld.
Enable proforma documentsaanToon een knop “Create proforma” op het WC-orderscherm en sta conversie naar factuur toe.
Enable quote (preventivo) documentsaanToon een knop “Create quote” op het WC-orderscherm. Offertes zijn non-fiscaal: er wordt een PDF geproduceerd maar geen XML.

Kaart FatturaPA — Italian B2B

VeldDefaultBeschrijving
Bollo virtuale assoltouitEmitteer DatiBollo (2,00 EUR virtuele stamp) op facturen boven EUR 77,47 wanneer de verplichting bij de Agenzia delle Entrate is aangegeven.
Apply Ritenuta d’accontouitBereken en emitteer DatiRitenuta op facturen aan Italiaanse B2B-kopers.
Default rate20.00 %0–100, stap 0.01.
Tipo ritenutaRT02RT01 (persone fisiche) of RT02 (persone giuridiche).
Causale pagamentoAEén uppercase letter uit de SDI 1.1.5.2-tabel (bijv. A = professional services).

Templates

Invoice Pilot — Settings, Templates-tab
Settings → Templates — radio picker voor Minimal / Classic / Modern, color- en typography-pickers, en een live PDF-preview eronder (de preview-iframe wordt apart gecaptured, zie hieronder).

Kies één van drie meegeleverde PDF-templates en pas zijn kleuren en typografie aan.

TemplateBeschrijving
MinimalClean sans-serif layout met een teal accent. Default.
ClassicSerif-typografie met een gekleurde header band. Traditionele look voor professional services.
ModernTwee-koloms header en rounded cards. Geschikt voor design-led brands.

Aanvullende velden:

VeldDefaultNotities
Primary colour#1e8a8aNative HTML5 color picker; accent voor headings, dividers en table headers.
FontSite theme font (system stack)Eén van: default, dejavusans, dejavuserif, dejavusansmono, helvetica, times, courier. De waarde default gebruikt de system font stack van de site met DejaVuSans als PDF-fallback.
Text colour#222222Default body-text-kleur. Muted captions en footers behouden hun lichtere tone.

De tab embedt ook een live PDF-preview (gerenderd tegen het REST- endpoint /wp-json/invoice-pilot/v1/preview-template), zodat je templates side-by-side kunt vergelijken voor het opslaan. Het wisselen van de radio swapt de iframe direct; de keuze blijft pas bewaard wanneer je op Save template drukt.

Invoice Pilot — live PDF-preview (Modern template, invoice)
Live preview gerenderd via mPDF — Modern template, invoice document type, je echte seller-details (logo, primary colour, IBAN) en een sample-koper / line items.

Een Document type-selector staat boven de iframe, zodat je kunt previewen hoe elk van de vier document types gerenderd wordt — invoice, credit_note, proforma, quote — met hetzelfde template, dezelfde sample seller en dezelfde sample buyer. De per-type verschillen:

TypeTitleNumber prefixStatus pillDisclaimer bannerPayment / IBAN
invoiceInvoiceINV-ISSUEDgetoond
credit_noteCredit noteCN-CREDIT NOTERefund of INV-…verborgen
proformaProformaPRO-PROFORMAProforma — not a fiscal document.getoond
quoteQuoteQ-QUOTEQuote — not a fiscal document, subject to acceptance.verborgen

Offertes herlabelen daarnaast de prominente “Issued” / “Due date”-cellen naar Valid until en hernoemen de hero total naar Estimated total; creditnota’s hernoemen het naar Refund total. Deze verschillen komen uit een per-type label override map en een doc_type_context() helper die in de template engine wordt gevoed, zodat de drie meegeleverde designs (Minimal / Classic / Modern) een consistente visuele identiteit behouden over document types heen zonder template-bestanden te dupliceren.

De footer toont het land van de koper altijd in zijn volledige Engelse vorm (bv. Germany, niet DE) — de ISO-code uit de order wordt voor het renderen opgelost via PHP’s Locale::getDisplayRegion(), wat de gerenderde factuur leesbaar houdt voor menselijke kopers en belastingauditors. Het BTW-nummer van de seller zelf wordt geprint volgens VAT number format on PDF in General → Document defaults — default is het VIES-stijl prefixed format (VAT IT04032690614), met een Bare-optie voor jurisdicties die het kale nummer prefereren.

De dispatcher die de juiste XML-envelope per land van de koper kiest is de filter invoice_pilot_xml_writer_for_country, zodat host-code per ISO kan overschrijven (zie Hooks en filters).

BTW-validatie

Invoice Pilot — Settings, VAT validation-tab
Settings → VAT validation — validatorketen (VIES + per-country format), cache TTL en state, reverse-charge toggles, live tester en EU-27 standard-rate seeder.

BTW-identifiers die bij de checkout (en op elk adresscherm waarop het veld getoond wordt) worden ingevoerd, worden door een keten van validators gehaald. Elke validator wordt door een onafhankelijke toggle geactiveerd en draait in volgorde totdat er één een positief resultaat teruggeeft; zowel positieve als negatieve antwoorden worden gecached voor de geconfigureerde TTL.

ValidatorDefaultBeschrijving
VIES (EU SOAP)aanCross-checkt EU BTW-ID’s tegen de VIES-service van de Europese Commissie.
Per-country formataanOffline regex-validatie per land. Altijd aanbevolen als fallback.
VeldDefaultRange / Notes
Cache TTL (uren)241720. Failed VIES-lookups ouder dan 6 uur worden door de hourly cron opnieuw gevalideerd.
Intra-EU B2B reverse chargeaanWanneer de koper in een andere EU-lidstaat zit dan de verkoper en een BTW-nummer levert dat de keten als geldig bevestigt, zet WooCommerce de BTW in het winkelmandje automatisch op nul (de koper voldoet de BTW zelf in zijn eigen land). Het BTW-veld krijgt ook een live-badge — groen ✓ bij succes, rood ✕ bij fout.
BTW aftrekken als klant in basisland zituitDe meeste jurisdicties staan dit NIET toe — laat uit, tenzij je specifiek fiscaal advies hebt dat het op jouw bedrijf van toepassing is. Wanneer aan, triggert een geldige binnenlandse B2B-BTW ook bij binnenlandse verkopen de reverse-charge-aftrek.

Een read-only rij Cache state rapporteert het aantal gecachte entries en hoeveel daarvan verlopen zijn en op eviction wachten.

Test BTW-validatie — een kleine tester-kaart onder de instellingen draait elke provider rechtstreeks tegen één enkel BTW-nummer, omzeilt de keten-volgorde en de cache, zodat je kunt zien of VIES het nummer daadwerkelijk heeft bevestigd of dat alleen de offline-formatcheck dat heeft gedaan.

Seed EU-27 standaard BTW-tarieven — de kaart onderaan vult WooCommerce → Settings → Tax → Standard rates met het actuele standaard-BTW-tarief voor elke EU-27-lidstaat (AT 20% BE 21% BG 20% HR 25% CY 19% CZ 21% DK 25% EE 22% FI 25.5% FR 20% DE 19% GR 24% HU 27% IE 23% IT 22% LV 21% LT 21% LU 17% MT 18% NL 21% PL 23% PT 23% RO 21% SK 23% SI 22% ES 21% SE 25%). Standaard worden alleen ontbrekende landen ingevoegd; vink Overwrite existing rates aan om elke regel naar de canonieke waarde te forceren (handig nadat de EU een nationaal tarief heeft aangepast). De kaart toont ook elk (ISO, tarief)-paar zodat je precies ziet wat geschreven wordt voordat je op de knop drukt.

Integrations

De Integrations-tab rendert één paneel per geregistreerde integration- provider achter één enkele Provider-selector bovenaan — kies de provider die je wilt configureren, en alleen zijn kaart is zichtbaar; de anderen blijven verborgen in de DOM. De selector is sticky over form-saves: wanneer je het formulier van een provider opslaat (of de tab opent met ?integration=<id> in de URL), houdt de volgende render die provider geselecteerd, zodat je niet terug gestuurd wordt naar welke provider dan ook die als eerste is geregistreerd.

Standaard levert Invoice Pilot zes providers; third-party code kan via de filter invoice_pilot_integration_providers extra registreren.

Elk providerpaneel wordt afgesloten door een Connection Status-kaart met een knop Test Connection. De knop stuurt een lightweight request tegen de opgeslagen credentials en print de upstream response — sla het formulier eerst op als je net nieuwe tokens hebt geplakt.

SmartBill

Invoice Pilot — Integrations, SmartBill-paneel
Integrations → SmartBill — enable-toggle, API-username, encrypted token, CIF en series.

Roemeense facturatieprovider. Credentials worden at rest encrypted met de symmetric crypto-laag van de plugin.

VeldDefaultNotities
Enable SmartBilluitPush uitgegeven facturen naar SmartBill zodra ze worden uitgegeven.
API usernameleegDe username die je gebruikt om in te loggen op SmartBill.
TokenleegPlak je SmartBill API-token. De opgeslagen waarde is encrypted; laat het veld bij vervolgsaves leeg om hem te behouden.
CIF (company)leegRoemeense bedrijfs-BTW-code.
SeriesleegSmartBill-series gebruikt voor gepushte facturen.

Indien ingeschakeld roept Invoice Pilot bij uitgifte POST /SBORO/api/v2/invoice aan, daarna pull_status om te reconciliëren en void wanneer een factuur wordt geannuleerd.

Fatture in Cloud

Invoice Pilot — Integrations, Fatture in Cloud-paneel
Integrations → Fatture in Cloud — OAuth-tokens, company id en de toggle Create customers.

Italiaanse facturatieprovider. OAuth-tokens worden at rest encrypted opgeslagen. De daily cron invoice_pilot_refresh_fic_token ververst de access token automatisch wanneer de integratie is ingeschakeld.

VeldDefaultNotities
Enable Fatture in ClouduitPush uitgegeven documenten (facturen, creditnota’s, proforma, offertes) naar Fatture in Cloud zodra ze worden uitgegeven.
Client IDleegOAuth client identifier.
Access tokenleegPlak de OAuth access token. De opgeslagen waarde is encrypted; laat het veld bij vervolgsaves leeg om hem te behouden.
Refresh tokenleegZelfde handling als de access token.
Company ID0Numerieke company identifier in je Fatture in Cloud-account.
Create customersaanMaak automatisch een customer record op FIC aan wanneer een nieuwe koper wordt gefactureerd.

Conform het product-policy van Fatture in Cloud submit Invoice Pilot geen FatturaPA naar de SDI namens jou. SDI-submission blijft een aparte manuele stap vanuit je FIC-account.

Xero

Invoice Pilot — Integrations, Xero panel
Integrations → Xero — bovenaan: one-click verbindingspaneel met de redirect URI die u op developer.xero.com moet registreren. Onderaan: app-credentials en gedragsdefaults. Daaronder: een sectie Connection Status met een live Test Connection-knop.

Globaal accounting-platform. OAuth 2.0-tokens worden at rest encrypted. De settings-tab is opgebouwd als Connection (status + Connect / Disconnect-knoppen) bovenaan en Settings (app-credentials + push-gedrag) eronder.

Verbinden

Invoice Pilot levert een ingebouwde OAuth-flow — u hoeft de dans in Postman niet meer te doen en geen vier strings meer in het formulier te plakken. De end-to-end setup is:

  1. Maak een Web app aan op developer.xero.com  met de redirect URI die in het Connection-paneel wordt afgedrukt — kopieer hem woordelijk, Xero matcht karakter voor karakter. Apps die na 2 maart 2026 worden aangemaakt kunnen alleen de granulaire scope-set aanvragen; Invoice Pilot kiest automatisch de juiste.
  2. Genereer een Client secret op de Xero app-pagina (Xero toont hem slechts één keer), plak vervolgens Client ID en Client secret in het Settings-formulier en sla op.
  3. Klik op Connect to Xero. U wordt door het standaard consent-scherm geleid en, als uw account voor meer dan één organisatie is geautoriseerd, wordt u doorgestuurd naar een in-card picker om de doel-tenant te kiezen. Tokens worden automatisch uitgewisseld en bewaard.
  4. Disconnect wist de access- en refresh-tokens en de tenant id, terwijl de app-credentials behouden blijven voor een eenvoudige herverbinding.

Pushes gebruiken POST /Invoices met de standaard Idempotency-Key-header afgeleid van het lokale invoice-id + nummer, zodat een netwerk-retry samenvalt op hetzelfde Xero InvoiceID in plaats van een duplicaat te creëren. De refresh token roteert automatisch bij een 401; mocht hij ooit verlopen (Xero invalideert refresh tokens na 60 dagen inactiviteit), druk dan gewoon opnieuw op Connect.

Velden
VeldDefaultNotities
Enable XerouitPush uitgegeven documenten naar Xero zodra ze worden uitgegeven.
Client ID / Client secretleegOAuth 2.0 app-credentials uit het Xero Developer Portal. Vereist voordat Connect gebruikt kan worden.
Access token / Refresh token (advanced)leegAutomatisch ingevuld door de Connect-knop. Plak alleen handmatig in als u de tokens buiten deze UI heeft verkregen.
Tenant IDleegUUID van de Xero-organisatie. Automatisch ingevuld door Connect (één organisatie) of ingesteld via de in-card tenant picker (meerdere organisaties).
Default account code200Revenue account code die op elke gepushte regel wordt gestempeld. Regio-defaults: UK/NZ 200, US 400, AU 200. Vind de uwe onder Accounting → Chart of accounts in Xero.
Default tax typeOUTPUTXero TaxType toegepast op belaste regels. Veelvoorkomende waarden: OUTPUT (standaard BTW op verkoop), OUTPUT2 (verlaagd tarief), EXEMPTOUTPUT, NONE. Regels met BTW van nul vallen automatisch terug op NONE.
Invoice status on pushAUTHORISEDEén van DRAFT (bewerkbaar in Xero, nog geen echte factuur), SUBMITTED (wacht op goedkeuring), AUTHORISED (gefinaliseerd). Alles anders wordt teruggesaniteerd naar AUTHORISED.
Payment account UUIDleegXero bank- / kas-AccountID gebruikt bij het registreren van betalingen. Vind hem via GET /api.xro/2.0/Accounts?where=Type=="BANK" of in de Xero UI (Chart of accounts → click the bank account → URL contains the UUID). Laat leeg om het registreren van betalingen uit te schakelen.

QuickBooks Online

Invoice Pilot — Integrations, QuickBooks Online-paneel
Integrations → QuickBooks Online — bovenaan: one-click verbindingspaneel met de redirect URI die u op developer.intuit.com moet registreren. Onderaan: app-credentials, environment-switch en gedragsdefaults. Daaronder: een sectie Connection Status met een live Test Connection-knop.

Intuit QuickBooks Online — US / CA / UK / globaal. OAuth 2.0-tokens worden at rest encrypted. De settings-tab is opgebouwd als Connection (status + Connect / Disconnect-knoppen) bovenaan en Settings (app-credentials + push-gedrag) eronder.

Verbinden

Invoice Pilot levert een ingebouwde OAuth-flow — u hoeft de dans in Postman niet meer te doen en geen vijf strings meer in het formulier te plakken. De end-to-end setup is:

  1. Maak een app aan op developer.intuit.com  met QuickBooks Online and Payments als platform en de scope com.intuit.quickbooks.accounting. Open de tab Keys & OAuth en wissel tussen Development en Production afhankelijk van welke environment u target — elk heeft zijn eigen client_id + secret-paar.
  2. Voeg de redirect URI die in het Connection-paneel wordt afgedrukt toe aan de lijst Redirect URIs en klik op Save — Intuit accepteert http://localhost voor Development-apps.
  3. Plak Client ID en Client secret in het Settings-formulier, kies de bijpassende Environment (Sandbox / Production) en sla op.
  4. Klik op Connect to QuickBooks. Het consent-scherm van Intuit laat u kiezen tegen welke company de integratie moet schrijven; het gekozen realmId wordt teruggegeven in de callback-URL en automatisch opgeslagen — er is geen aparte tenant picker.
  5. Disconnect wist de access- en refresh-tokens en de realm id, terwijl de app-credentials behouden blijven voor een eenvoudige herverbinding.

Elke push gebruikt POST /v3/company/{realmId}/invoice met de query-parameter requestid ingesteld op een stabiele waarde per factuur — QBO laat herhaalde POSTs samenvallen op de oorspronkelijke response, zodat een netwerk-retry nooit een duplicaat zal aanmaken. Pushes dragen ook minorversion=75 zodat QBO de actuele entity-shapes teruggeeft (zonder deze waarde downgradet de API stilzwijgend naar het contract uit 2017). Refresh tokens hebben een levensduur van 100 dagen vanaf uitgifte en roteren bij elk gebruik; de plugin handelt de rotatie transparant af bij een 401.

Velden
VeldDefaultNotities
Enable QuickBooks OnlineuitPush uitgegeven documenten zodra ze worden uitgegeven.
Environmentsandboxsandbox (default) bereikt sandbox-quickbooks.api.intuit.com; production bereikt quickbooks.api.intuit.com. Elke environment heeft zijn eigen Client ID + secret op de Intuit app-pagina.
Client ID / Client secretleegOAuth 2.0 app-credentials uit de tab Keys & OAuth van uw Intuit Developer-app. Vereist voordat Connect gebruikt kan worden.
Access token / Refresh token (advanced)leegAutomatisch ingevuld door de Connect-knop. QBO access tokens duren ongeveer 60 minuten en roteren via de refresh token; refresh tokens duren 100 dagen vanaf uitgifte en roteren bij elk gebruik. Plak alleen handmatig in als u de tokens buiten deze UI heeft verkregen.
Realm IDleegQuickBooks company-ID. Automatisch ingevuld door Connect — QBO geeft hem mee als realmId in de OAuth-callback. Sandbox-companies zien er bijvoorbeeld uit als 9341457147734811; production-realms zijn vergelijkbaar.
Default customer IDleegQBO Customer.Id waaraan elke gepushte factuur wordt gehangen. Vereist — QBO weigert facturen zonder een CustomerRef. Vind hem onder Sales → Customers in de QBO-UI of via GET /v3/company/{realmId}/query?query=select * from Customer.
Default item ID1QBO Item.Id gebruikt voor elke regel. 1 is het standaard “Services”-item in een vers sandbox; vind het uwe onder Sales → Products and services.
Default tax codeNONQBO TaxCodeRef toegepast op elke regel. NON = niet-belastbaar (default), TAX = standaard sales tax in US/CA-accounts. Override per jurisdictie door de tax code in QBO aan te maken en de naam ervan hier in te plakken.

Fortnox

Invoice Pilot — Integrations, Fortnox-paneel
Integrations → Fortnox — OAuth-credentials, default customer number, default VAT en de toggle Bookkeep on push.

Zweeds accounting-platform. OAuth 2.0-credentials at rest encrypted.

VeldDefaultNotities
Enable FortnoxuitPush uitgegeven documenten zodra ze worden uitgegeven.
Client ID / Client secretleegOAuth 2.0-credentials uit het Fortnox developer portal.
Access token / Refresh tokenleegAt rest encrypted.
Default customer numberleegGebruikt wanneer de koper geen resolved Fortnox customer number heeft.
Default VAT25Default Zweedse BTW-tarief (in %) toegepast wanneer geen tarief gemapt is.
Bookkeep on pushuitMaak ook de bookkeeping voucher aan bij het pushen van de factuur.

Sage

Invoice Pilot — Integrations, Sage-paneel
Integrations → Sage Business Cloud — OAuth-credentials, business id, default contact/ledger/tax-rate ids.

OAuth 2.0 accounting-platform (Sage Accounting / Business Cloud).

VeldDefaultNotities
Enable SageuitPush uitgegeven documenten zodra ze worden uitgegeven.
Client ID / Client secretleegOAuth 2.0-credentials van Sage Developer.
Access token / Refresh tokenleegAt rest encrypted.
Business IDleegIdentifier van de Sage-business waar de integratie naar schrijft.
Default contact id / ledger id / tax rate idleegFallbacks toegepast wanneer de snapshot de bijbehorende mapping niet bevat.

AI

Invoice Pilot — Settings, AI-tab
Settings → AI — provider-picker (Anthropic / OpenAI / Google Gemini / DeepSeek / Grok), encrypted API key, Test Connection en vier feature-toggles met rate-limits per uur.

De AI-tab is verdeeld in twee kaarten: Provider Configuration en Features. De plugin werkt volledig zonder API key; deze tab voegt optionele AI-gestuurde capabilities toe.

Provider Configuration

VeldNotities
ProviderAnthropic (default), OpenAI, Google Gemini, DeepSeek of Grok (xAI). Elke provider houdt zijn eigen encrypted API key bij, zodat je kunt switchen zonder credentials opnieuw te plakken.
API KeyEncrypted opgeslagen. De kaart toont een groene Configured-badge wanneer er al een key in file zit. De link “Get your API key from …” wijst naar de console van de gekozen provider.
ModelLijst per provider (zie tabel hieronder). Het eerste model in de lijst wordt als default gebruikt wanneer geen model is geconfigureerd.
Test ConnectionRoept het endpoint messages / chat/completions van de provider aan met een one-token prompt en rapporteert success of de upstream error.

Modellen aangeboden per provider:

ProviderModellen
AnthropicClaude Opus 4.7 (beste kwaliteit, default), Claude Sonnet 4.6 (aanbevolen), Claude Haiku 4.5 (snel, goedkoop)
OpenAIGPT-5 (beste kwaliteit), GPT-5 mini (snel), GPT-4o, GPT-4o mini (goedkoopst)
Google GeminiGemini 2.5 Pro, Gemini 2.5 Flash (beste value), Gemini 2.5 Flash Lite (goedkoopst)
DeepSeekDeepSeek V3.2 Chat, DeepSeek V3.2 Reasoner
Grok (xAI)Grok 4.1 Fast, Grok 4, Grok 3, Grok 3 Mini

Features

ToggleDefaultBeschrijving
Smart-fill billinguitKlanten plakken een free-form billing block bij de checkout; het model vult het gestructureerde formulier.
Smart-fill calls per uur5Per-session rate limit.
Compliance pre-flight checkuitLaat de AI elke factuur scannen voor uitgifte en mogelijke issues flaggen.
Block issuance on error-level findingsuitWanneer een kritisch issue gevonden wordt, voorkom dat de factuur wordt uitgegeven.
Compliance calls per uur10
Translate line descriptionsuitGebruik AI om factuur-lines naar de taal van de koper te vertalen. Polyglot-aware wanneer de sibling-plugin geïnstalleerd is.
Natural-language document searchuitFree-text queries op de Documents admin-pagina.
Search calls per uur10

Advanced

Invoice Pilot — Settings, Advanced-tab
Settings → Advanced — log-retentie, uninstall-gedrag, manual maintenance acties en versie-footer.

Retentie & uninstall

VeldDefaultRange
Log retention (days)9013650. Integration-log-entries ouder dan dit worden door de daily cron gepurged.
Wipe data on uninstalluitDrop alle Invoice Pilot-tabellen en options wanneer de plugin gedeïnstalleerd wordt. Destructief. Standaard uit.

Maintenance acties

  • Run log cleanup now — vuurt de actie invoice_pilot_cleanup_logs direct af in plaats van te wachten op de daily cron.
  • Purge validation cache — verwijdert elke rij uit de BTW-validation cache-tabel.

Een kleine rij Versions onderaan print de huidige plugin-versie en database schema-versie.

Gebruik

Een factuur automatisch uitgeven vanuit een WooCommerce-order

De default workflow vereist geen manuele actie.

  1. Een klant plaatst een order op WooCommerce. De checkout toont de velden VAT number en Tax code plus eventuele landspecifieke velden geregistreerd voor het billing country (bijvoorbeeld SDI recipient code en Certified email (PEC) op IT-orders). Het VAT-veld wordt live gevalideerd terwijl de klant typt — een groene ✓-badge verschijnt in het input wanneer de keten het nummer bevestigt, een rode ✕ wanneer het faalt. Als de koper in een andere EU-lidstaat zit en het VAT-nummer geldig is, zet WooCommerce de BTW in het winkelmandje automatisch op nul (intra-EU B2B reverse charge — zie Settings → VAT validation).
  2. Wanneer de order de trigger-status bereikt die gedefinieerd is onder Settings → General → Trigger status (processing is de default), geeft Invoice Pilot een factuur uit met de Default series (INV is de default), persisteert een immutable JSON-snapshot van de order, rendert de PDF, genereert de XML-envelope voor het land van de koper en pusht naar elke ingeschakelde integratie.
  3. Het orderscherm krijgt een meta box Invoice Pilot die de uitgegeven documenten oplijst met links naar de PDF en XML, plus actieknoppen voor Regenerate, Reissue, Void, Create credit note, Create proforma, Create quote en Push to provider.
Invoice Pilot — WooCommerce order edit-scherm met de landspecifieke billing-velden en de Invoice Pilot meta box
WooCommerce → Orders → Edit — de kaart Billing bevat de landspecifieke velden die voor de buyer-ISO geregistreerd zijn (hier de Italiaanse SDI recipient code, Certified email / PEC en fiscaal regime), en de meta box Invoice Pilot rechts toont het uitgegeven documentnummer met PDF- / XML-links, een actie Regenerate document en Other documents-shortcuts voor proforma en offerte.

De Invoice Pilot meta box toont voor het meest recente niet-geannuleerde document op de order: het nummer van het document (bv. INV-2026-0063), de status-pill (Issued / Paid / Void), de download-knoppen PDF en XML (token-signed REST-links), een actie Regenerate document die de artefacten opnieuw rendert tegen de huidige template en seller-instellingen zonder het documentnummer te wijzigen, en een sectie Other documents met één-kliks-knoppen Create proforma en Create quote. Wanneer een integratie is ingeschakeld, verschijnt naast de PDF- / XML-links een knop Push to provider die de integratie-call opnieuw afvuurt tegen het geconfigureerde target.

Handmatig uitgeven

Is automatische uitgifte uitgeschakeld of heeft de order de trigger-status nog niet bereikt, dan toont de order meta box een knop Issue now. Dezelfde flow geldt — snapshot, PDF, XML, integration push — maar hij draait on demand.

Creditnota’s uit refunds

Wanneer Auto-issue credit note on WC refund aanstaat (de default), triggert elke WooCommerce-refund die wordt aangemaakt tegen een order met een bestaande factuur, een creditnota in de CN-series. De creditnota linkt terug naar de parent-factuur en refereert ernaar in de XML. De gerenderde PDF draagt bovenaan een disclaimer-banner “Refund of INV-…”, een CREDIT NOTE-status-pill, Refund total in de hero-cel, en verbergt de IBAN- / payment-method-footer (de originele payment-flow geldt niet langer). Je kunt ook handmatig een creditnota uitgeven — volledig of partial — vanuit de kaart Actions op het edit-scherm van de factuur, zolang de parent-factuur in status issued staat.

Proforma’s en offertes

Wanneer de bijbehorende toggles aanstaan, toont het orderscherm ook knoppen Create proforma en Create quote. Beide produceren non-fiscale documenten — er wordt een PDF gerenderd maar voor offertes geen XML gegenereerd. De gerenderde PDF draagt een visuele behandeling specifiek voor zijn type: een disclaimer-banner bovenaan (“Proforma — not a fiscal document.” / “Quote — not a fiscal document, subject to acceptance.”), een “QUOTE”- / “PROFORMA”-status- pill in plaats van “ISSUED”, en op offertes wisselt het prominente date-label naar Valid until en de hero total naar Estimated total. Offertes verbergen het IBAN- / payment-method-blok aangezien er nog geen betaling verschuldigd is.

Een proforma kan met de actie Convert worden omgezet naar een factuur, die het document hernummert onder de geconfigureerde invoice-series.

Een factuur naar de klant sturen

De plugin registreert een order-actie Send Invoice Pilot invoice to customer onder de standaard order-actions-dropdown van WooCommerce, die de PDF naar de koper mailt via WordPress’ wp_mail().

Documenten downloaden

PDFs en XML-envelopes worden geserveerd vanuit een publiek bereikbaar maar token-signed REST-endpoint:

GET /wp-json/invoice-pilot/v1/download/{id}/{format}?token=…

{format} is pdf of xml. De token wordt gegenereerd wanneer het document wordt uitgegeven en geprint in de order meta box en de Invoices list-tabel.

Dashboard

Invoice Pilot — Dashboard
Dashboard — kaart Activity overview met period selector en vijf KPI-kaarten, kaart Trends met twee time-series-charts eronder.

Invoice Pilot → Dashboard opent een kaart Activity overview boven een kaart Trends. De Activity overview toont een period-bar met vier windows — 7 days, 14 days, 30 days (default) en 90 days — en vijf KPI-kaarten:

  • Invoices — totaal aantal documenten uitgegeven in de periode.
  • Net revenue — som van de netto-totalen in de winkelvaluta, gerenderd met het valutasymbool van de locale en twee decimalen (bv. €3,876.09 of 3.876,09 € afhankelijk van de locale van de admin).
  • VAT collected — som van de BTW-totalen uit de immutable snapshot. Dezelfde locale-aware valutaformattering als Net revenue. Een aparte schema-migratie vult deze waarde achteraf aan voor facturen die zijn uitgegeven vóór schema-versie 1.3.1, toen de kolom bij het schrijven niet werd gevuld.
  • Avg value — net revenue gedeeld door het aantal facturen, ook als valuta geformatteerd.
  • B2B / B2C — verdeling van B2B-facturen (koper heeft een BTW-nummer) tegenover B2C-facturen in dezelfde periode.

Onder de KPI’s rendert de kaart Trends twee charts naast elkaar — Invoices over time (een dual-axis lijn- + area-chart met het aantal facturen op de linkeras en het verloop van de net revenue als gevulde area op de rechteras) en By buyer country (een donut-chart van de top buyer ISO-codes, met de kleur-legenda eronder). Alle cijfers worden gehydrateerd vanuit /wp-json/invoice-pilot/v1/dashboard?days=N.

Documents-lijst

Invoice Pilot — Documents-lijst
Documents — unified toolbar (AI search + type-filter + running count) en de data-grid met de kolommen NUMBER, TYPE, STATUS, ORDER, ISSUED, TOTAL, COMPLIANCE, FILES en ACTIONS.

Invoice Pilot → Documents lijst elk uitgegeven document met status- pills (paid / void / converted / draft / issued — kleur-gecodeerd op lifecycle-state), een kolom Compliance met de kleur-gecodeerde badge die door de AI pre-flight check geproduceerd wordt, en inline PDF- / XML- / Delete-acties per rij. De pagina pagineert 20 rijen per keer en toont een unified toolbar die de AI free-text search combineert met een document-type-filter (invoice / credit_note / proforma / quote / receipt) plus een running count rechts. Wanneer AI search aanstaat, accepteert de search-box free-text queries (bijvoorbeeld “Duitse facturen vorige maand boven 1.000 EUR”) die de geconfigureerde provider in een list-query vertaalt; de resolved filter-chips verschijnen boven de tabel zodat je precies kunt zien hoe het model je zin geparsed heeft.

WooCommerce Orders-lijst

Invoice Pilot — Invoice-nummerkolom op het WC Orders-scherm
WooCommerce → Orders — een kolom Invoice toont per order het toegewezen documentnummer, met een klein preview-icoontje dat naar de gerenderde PDF linkt.

Invoice Pilot voegt één kolom Invoice toe aan de standaard WooCommerce Orders-lijst (/wp-admin/admin.php?page=wc-orders) zodat de shop-eigenaar in één oogopslag ziet welke orders al gedocumenteerd zijn en welke niet, zonder het Orders-scherm te verlaten. De kolom zit tussen Order en Date en toont het documentnummer dat door de geconfigureerde series is toegekend (bijvoorbeeld INV-2026-0063), woordelijk gelezen uit de immutable number-kolom, met een klein oog-preview-icoontje naast het nummer dat de gerenderde PDF inline in een nieuw tabblad opent.

Orders zonder uitgegeven document renderen een liggend streepje — handig bij het debuggen van trigger-status mismatches of bij het filteren op orders die een handmatige wp invoice-pilot issue-run nodig hebben. Dezelfde renderer wired zowel de legacy posts-table-kolom (manage_edit-shop_order_columns) als de HPOS-kolom (manage_woocommerce_page_wc-orders_columns), zodat de ervaring identiek is ongeacht welke orders-storage je shop gebruikt.

Integration log

Invoice Pilot — Integration log
Log — chronologisch integration-push-log met provider/action-filters en een per-rij Delete-actie; payload-velden worden bij write geredacteerd door Core\Logger.

Invoice Pilot → Log registreert elke integration-push, response en failure. De toolbar bovenaan combineert een selector Bulk actions

  • knop Apply (op dit moment een single-action bulk-delete), een provider-dropdown en een action-dropdown — beide gevuld met de waarden die daadwerkelijk in het log voorkomen, zodat alleen filters getoond worden die met een echte rij overeenkomen — plus een lopende teller met aantal entries rechts.

Het datagrid bevat acht kolommen:

KolomNotities
DATE (UTC)Timestamp-pill, UTC. Standaard aflopend gesorteerd.
PROVIDERLowercase provider-slug (fattureincloud, smartbill, xero, …).
ACTIONOperatie die de entry heeft geproduceerd (push, pull_status, refresh_token, void).
INVOICE#<id>-link terug naar het document, of een liggend streepje voor entries die niet met één specifieke factuur te maken hebben (token-refreshes, handmatig onderhoud).
HTTPGekleurde pill met de upstream status-code — groen voor 2xx, oranje voor 4xx, rood voor 5xx (of elke entry met een niet-lege error-kolom).
ERRORUpstream-foutmelding in rode tekst wanneer de call gefaald is; liggend streepje bij succes.
MSWall-clock-duur van de call in milliseconden.
ACTIONSEen rode actie Delete per rij voor one-off cleanup.

Gevoelige payload-velden worden bij write geredacteerd door de Core\Logger van de plugin, zodat request- en response-bodies veilig in het log bewaard kunnen blijven. Oude entries worden gepurged door de daily cron invoice_pilot_cleanup_logs volgens de instelling Log retention (days) in de Advanced-tab.

Network admin (Multisite)

Op een Multisite-netwerk verschijnt een extra pagina Invoice Pilot Network in de network admin-sidebar. Hij aggregeert invoice-counts en totalen over elke sub-site die Invoice Pilot actief heeft.

EU-27-facturatie

Invoice Pilot levert een registry van country-specifieke billing-velden voor elke EU-27-lidstaat. Elk veld is optioneel bij de checkout (de plugin forceert geen B2B-only data op een B2C-order); validatie vuurt alleen wanneer het land van de koper matcht met de ISO van het veld.

Het register dekt momenteel:

LandVelden
IT Italiëei_recipient_code (7 alphanumeric, default 0000000), ei_certified_email (PEC), fiscal_regime (RF01–RF19)
FR Frankrijksiren (9 digits), siret (14 digits), chorus_pro_service_code
DE Duitslandsteuernummer, ust_id, leitweg_id, hrb
ES Spanjenif, face_oficina_contable, face_organo_gestor, face_unidad_tramitadora
PT Portugalnif (9 digits), atcud
NL Nederlandkvk_number (8 digits), btw_id
BE Belgiëbce_number (10 digits)
LU Luxemburg
AT Oostenrijkuid_nummer, firmenbuchnummer, steuernummer
IE Ierland
DK Denemarkencvr_number (8 digits), ean_location_number
SE Zwedenorganisationsnummer
FI Finlandy_tunnus, ovt_code
PL Polennip (10 digits), regon, ksef_id
CZ Tsjechiëdic, ico (8 digits), data_box_id
SK Slowakijedic, ico (8 digits), data_box_id
HU Hongarijetax_number, group_member_id
SI Sloveniëvat_id, maticna_stevilka
HR Kroatiëoib (11 digits)
RO Roemeniëcui
BG Bulgarijeeik (9–13 digits), vat_id
GR Griekenlandafm (9 digits), dou_code
CY Cyprustic
MT Maltaid_number
LT Litouwencompany_code
LV Letlandregistration_number
EE Estlandregistry_code

De block-checkout-integratie registreert velden onder de namespace invoice-pilot/... via de Additional Checkout Fields API. Standaard worden alleen de Italiaanse velden in de block-checkout getoond om niet-Italiaanse shoppers niet te overweldigen; de toggle All EU-27 fields at checkout in General schakelt de volledige set in. De legacy shortcode-checkout rendert altijd het volledige register, gefilterd op het geselecteerde billing-country.

Country-velden worden gepersisteerd op de order, gekopieerd in de immutable invoice-snapshot en geconsumeerd door de XML-writers — zo wordt bijvoorbeeld de Italiaanse ei_recipient_code CodiceDestinatario / PECDestinatario in de FatturaPA-envelope, terwijl de Duitse leitweg_id BuyerReference / EndpointID 0204 wordt in XRechnung.

Integrations

SmartBill

SmartBill (Roemenië) is in de IntegrationManager van de plugin gewired via de filter invoice_pilot_integration_providers en toont het standaard provider-interface: push, pull_status, void en test_connection.

  • Push mapt de invoice-snapshot naar de SmartBill JSON-schema en roept POST /SBORO/api/v2/invoice aan met de geconfigureerde CIF en series.
  • Status sync reconciliëert draft / issued / paid state wanneer de vijftien-minuten retry-cron draait.
  • Void annuleert een eerder gepushte factuur op SmartBill wanneer de source-factuur in WordPress wordt geannuleerd.

Alle acties worden gelogd in het Integration log. Failures worden gequeued en opnieuw geprobeerd door de cron invoice_pilot_retry_integrations.

Fatture in Cloud

Fatture in Cloud (Italië) volgt hetzelfde provider-interface en mapt de invoice-snapshot naar de shape entity / items_list die door het issued-document-endpoint van FIC verwacht wordt. Italiaanse country- specifieke velden worden expliciet gemapt:

  • ei_recipient_codeei_code
  • ei_certified_emailcertified_email
  • BTW / fiscale-code / provincie / land van de koper → corresponding entity-keys

OAuth-credentials worden at rest encrypted. De daily cron invoice_pilot_refresh_fic_token ververst de access token wanneer de integratie is ingeschakeld. Create customers op aan zetten zorgt ervoor dat de integratie bij de eerste factuur voor een koper een nieuwe customer record in FIC aanmaakt.

Invoice Pilot submit geen FatturaPA naar de SDI namens jou. SDI- submission blijft een aparte manuele stap vanuit je Fatture in Cloud-account.

AI smart-fill

De AI-laag is volledig optioneel. Zonder geconfigureerde API key blijft de plugin facturen uitgeven, PDFs en XML renderen, BTW valideren en naar integraties pushen — alleen de vier AI-features hieronder zijn niet beschikbaar.

Vijf providers worden ondersteund:

ProviderDefault modelAPI key URL
Anthropicclaude-opus-4-7console.anthropic.com 
OpenAIgpt-5platform.openai.com 
Google Geminigemini-2.5-proaistudio.google.com 
DeepSeekdeepseek-chatplatform.deepseek.com 
Grok (xAI)grok-4-1-fast-non-reasoningconsole.x.ai 

De API key wordt at rest encrypted opgeslagen via de symmetric crypto- laag van de plugin. Een druk op Test Connection stuurt een minimaal request naar het gekozen endpoint en brengt de upstream error naar boven als de credentials fout zijn.

Vier features kunnen onafhankelijk geactiveerd worden zodra er een key in file zit:

  • Smart-fill bij de checkout — een textarea “Paste billing details” verschijnt bij de checkout. Het model parsed de free-form tekst en vult het gestructureerde WooCommerce billing-formulier, inclusief de country-specifieke velden. Rate-limited per session.
  • Compliance pre-flight check — elke factuur wordt vlak voor uitgifte door het model gehaald, met de optie om block issuance on error-level findings wanneer een kritisch issue gedetecteerd wordt (bijvoorbeeld een Italiaanse B2B-factuur waar de SDI-recipient- code ontbreekt).
  • Line auto-translate — beschrijvingen van factuur-lines worden vertaald naar de taal van de koper. Wanneer de sibling-plugin Polyglot  geïnstalleerd is, wordt de translation pipeline daaraan gedelegeerd.
  • Natural-language document search — de search-box op de Documents admin-pagina accepteert free-text queries die het model in een list-query vertaalt.

Elke feature heeft zijn eigen rate limit per uur.

Hooks en filters

Gecentraliseerde hook-namen leven in de class \InvoicePilot\Core\Hooks. De volledige lijst:

HookTypeDoel
invoice_pilot_redact_keysfilterExtra keys om te redacteren uit gelogde payloads.
invoice_pilot_xml_writer_for_countryfilterOverschrijf de XML-writer per ISO van de koper. Twee arguments: current writer, ISO.
invoice_pilot_validator_chainfilterOverschrijf of breid de BTW-validator-chain uit.
invoice_pilot_integration_providersfilterRegistreer aanvullende integration-providers.
invoice_pilot_country_fieldsfilterVoegt country-specifieke checkout-velden toe of verwijdert ze. Twee argumenten: huidige veld-array, ISO-code.
invoice_pilot_bootedactionVuurt nadat de plugin is gebooted. Geeft de singleton door.
invoice_pilot_register_modulesactionModule-registratie-hook.
invoice_pilot_invoice_issuedactionVuurt nadat een nieuwe factuur is uitgegeven.
invoice_pilot_invoice_renderedactionVuurt nadat de PDF of XML is gerenderd.
invoice_pilot_integration_pushedactionVuurt na een succesvolle integration-push.
invoice_pilot_integration_failedactionVuurt na een mislukte integration-push.
invoice_pilot_cleanup_logsactionDaily cron — purget oude integration-log-entries.
invoice_pilot_retry_integrationsactionVijftien-minuten cron — herprobeert failed pushes.
invoice_pilot_revalidate_viesactionHourly cron — hervalideert stale VIES cache-entries.
invoice_pilot_render_integration_tabactionWordt afgevuurd vanuit de Integrations settings-tab zodat providers hun eigen settings-cards kunnen renderen.
invoice_pilot_refresh_fic_tokenactionDaily cron — ververst de access token van Fatture in Cloud.

Een custom XML-writer registreren:

add_filter( 'invoice_pilot_xml_writer_for_country', function ( $writer, $iso ) { if ( 'NL' === $iso ) { return new My_Custom_Nl_Writer(); } return $writer; }, 20, 2 );

Een custom integration-provider registreren:

add_filter( 'invoice_pilot_integration_providers', function ( array $providers ) { $providers[] = new My_Custom_Provider(); return $providers; } );

Country-specifieke checkout-velden verbergen of uitbreiden (bijvoorbeeld om de Italiaanse ei_certified_email (PEC)- en fiscal_regime (RF-code)-prompts te verwijderen wanneer je winkel deze nooit nodig heeft — geen plugin-fork vereist):

add_filter( 'invoice_pilot_country_fields', function ( array $fields, string $iso ) { if ( 'IT' === $iso ) { $fields = array_values( array_filter( $fields, fn ( $f ) => ! in_array( $f->name, [ 'ei_certified_email', 'fiscal_regime' ], true ) ) ); } return $fields; }, 10, 2 );

Het filter draait zowel op het PHP-submit-validatiepad als op de JS-snapshot die aan de WC Blocks-checkout wordt geserveerd, zodat de twee lagen gesynchroniseerd blijven. Machinenamen van velden die momenteel worden geleverd (gebruik deze in het filter):

LandVeldnamen
ITei_certified_email, fiscal_regime
FRsiren, siret, chorus_pro_service_code
DEsteuernummer, ust_id, leitweg_id, hrb
ESnif, face_oficina_contable, face_organo_gestor, face_unidad_tramitadora
PTnif, atcud
NLkvk_number, btw_id

De volledige registry per land is gedefinieerd in CountryFieldRegistry::install_defaults() en dekt alle EU-27 ISO’s.

FAQ

Submit Invoice Pilot FatturaPA naar de SDI?

Nee. Invoice Pilot genereert de FatturaPA-XML en bewaart hem op de order; SDI-submission is bewust een aparte manuele stap (of via de Fatture in Cloud-integratie op je account).

Kan ik een writer toevoegen voor een land dat niet ingebouwd is?

Ja. Hook in op invoice_pilot_xml_writer_for_country en geef je eigen implementatie van \InvoicePilot\Modules\Xml\XmlWriterInterface terug.

Werkt het op de WooCommerce block-checkout?

Ja. Country-specifieke velden zijn geregistreerd via de WooCommerce 8.6+ Additional Checkout Fields API, dus ze verschijnen in zowel de block-checkout als de legacy shortcode-checkout. Op WooCommerce-versies ouder dan 8.6 wordt alleen het legacy filter-pad gebruikt.

Werkt het op WordPress Multisite?

Ja. Elke sub-site heeft zijn eigen tabellen, settings en numbering counters. Een network admin-pagina onder Network Admin → Invoice Pilot Network aggregeert invoice-counts over het netwerk. Op nieuwe sub-sites worden tabellen en default-series automatisch aangemaakt via de hook wp_initialize_site.

Worden credentials encrypted?

Ja. SmartBill-tokens, Fatture in Cloud OAuth-tokens en de AI API key worden at rest encrypted via \InvoicePilot\Core\Crypto. Een token-veld leeg laten bij de volgende save behoudt de bestaande opgeslagen waarde.

Wat gebeurt er met mijn data als ik de plugin verwijder?

Niets, tenzij je dat zelf opt-int. De default voor Advanced → Wipe data on uninstall is uit, dus tabellen, options, integration logs en de validation cache blijven bewaard over deactivation / reactivation. Zet de optie aan als je wilt dat de routine uninstall.php alles drop wanneer WordPress de plugin verwijdert.

Waar krijg ik een API key voor de AI-features?

Elke provider heeft zijn eigen console: Anthropic op console.anthropic.com , OpenAI op platform.openai.com , Google AI Studio op aistudio.google.com , DeepSeek op platform.deepseek.com , en Grok op console.x.ai . De AI-tab linkt rechtstreeks naar de console van de gekozen provider.

Heb ik een AI key nodig om de plugin te laten werken?

Nee. De AI-features (smart-fill, compliance check, line translation, natural-language search) zijn optioneel. De core invoicing-engine — document-lifecycle, PDF- en XML-generatie, BTW-validatie, integraties, dashboard — draait zonder API key.

Troubleshooting

De factuur wordt niet uitgegeven wanneer de order naar Processing gaat

Check Settings → General → Trigger status. De default is processing; heb je hem aangepast (bijvoorbeeld naar completed), dan vuurt de auto-issue routine alleen op de geconfigureerde status. Je kunt ook Issue now indrukken vanuit de order meta box om handmatig uit te geven, ongeacht de trigger.

De checkout toont te veel (of te weinig) landvelden

De default toont alleen de Italiaanse SDI-velden. Open Settings → General → Document defaults → Landspecifieke factuurvelden en kies de scope:

  • Uit — alleen de universele BTW- en fiscaal-code-velden worden getoond.
  • Alleen Italië (SDI / PEC / fiscaal regime) — default.
  • Alle EU-27 landspecifieke velden — elke ISO in het register.

De instelling geldt voor zowel de block-checkout als de legacy shortcode-checkout. Landspecifieke velden worden nog steeds client-side verborgen wanneer het billing-country niet overeenkomt.

BTW-validatie hangt of timeout

De VIES-service is af en toe traag of niet beschikbaar. De plugin houdt een per-BTW cache bij voor de geconfigureerde TTL (24 uur is de default) en hervalideert stale entries uurlijks via de cron invoice_pilot_revalidate_vies. Is VIES offline, dan accepteert de validator Per-country format nog steeds well-formed nummers. Je kunt de cache TTL ook verhogen onder Settings → VAT validation.

Het dashboard toont geen data

De dashboard-SQL leunt op JSON_EXTRACT / JSON_UNQUOTE tegen de immutable invoice-snapshot-kolom. Zorg dat je database-server MySQL 5.7+ of MariaDB 10.2+ is. Toont de period-bar het juiste window maar blijven de kaarten op -- staan, open dan rechtstreeks /wp-json/invoice-pilot/v1/dashboard?days=30 en check de response — REST-authenticatie-failures verschijnen als rest_forbidden.

Integration push faalt

Open Invoice Pilot → Log en lokaliseer de failed entry — de HTTP- kolom flagt non-2xx-responses met een gekleurde badge en de Error- kolom toont het upstream errorbericht in rood. De failed entry wordt automatisch elke vijftien minuten opnieuw geprobeerd door de cron invoice_pilot_retry_integrations; je kunt ook Push to provider indrukken in de order meta box om direct opnieuw te proberen. Gebruik de Delete-actie op een rij om een one-off entry te wissen zonder op de retention-cron te wachten.

Test Connection op de AI-tab rapporteert een error

Het bericht in rood komt rechtstreeks van het endpoint van de provider. Veel voorkomende oorzaken:

  • Een invalid of ingetrokken API key — genereer een nieuwe en plak hem in het veld API Key, daarna opslaan.
  • Een modelnaam waar het account geen toegang toe heeft — kies een ander model in de dropdown.
  • Network egress geblokkeerd door de host — bevestig dat outbound HTTPS naar api.anthropic.com, api.openai.com, generativelanguage.googleapis.com, api.deepseek.com of api.x.ai is toegestaan.

Email alerts aan de klant arriveren niet

Customer invoice-mails worden verzonden via WordPress’ functie wp_mail(). Komt er geen e-mail aan, dan zit het probleem bijna altijd in de mail-configuratie van de site in plaats van bij Invoice Pilot. Installeer een transactionele mail-plugin (bijvoorbeeld eentje die WordPress-mail via SMTP routeert) en trigger de order-actie Send Invoice Pilot invoice to customer opnieuw vanuit een test-order.

Last updated on