Invoice Pilot
Invoice Pilot udvider WooCommerce med landebevidst fakturering til EU’s 27 medlemslande. Det opfanger de rigtige fakturafelter ved checkout (italienske SDI-/PEC-koder, fransk SIRET, tysk Leitweg-ID, polsk NIP, rumænsk CUI osv.) og udsteder uforanderlige PDF- og XML-fakturaer, kreditnotaer, proformaer og tilbud direkte fra ordren. PDF’en renderes med mPDF; XML-konvolutten vælges automatisk ud fra køberens land og dækker elleve nationale profiler, heriblandt FatturaPA (IT), XRechnung (DE), KSeF FA(2) (PL), Factur-X (FR), CIUS_RO (RO), Facturae (ES) og UBL 2.1 / PEPPOL BIS 3.0 som generisk fallback.
Ud over selve dokumentmotoren leverer Invoice Pilot førsteklasses integrationer med seks regnskabsudbydere — SmartBill (Rumænien), Fatture in Cloud (Italien), Xero, QuickBooks Online, Fortnox (Sverige) og Sage — en VAT-validator, der slår op i den europæiske VIES-tjeneste med en fallback til format-tjek pr. land, et dashboard med KPI-kort og trendgrafer samt et valgfrit multi-provider AI-lag (Anthropic Claude, OpenAI, Google Gemini, DeepSeek, Grok xAI) til smart-fill ved checkout, pre-flight compliance-tjek, oversættelse af linjer og natursprog-dokumentsøgning. Pluginet understøtter også WordPress Multisite med tabeller pr. site og en oversigtsside for hele netværket.
Højdepunkter
- WooCommerce-drevet dokumentlivscyklus for fakturaer, kreditnotaer, proformaer og tilbud, med reserverede nummerserier, et rent flow for udsted / regenerér / genudsted / annullér / kreditnota og styling pr. dokumenttype (disclaimer-banner på ikke-fiskale dokumenter, “Gyldig til”-mærkater på tilbud, “Refunderet total” på kreditnotaer, betalingsblok skjult på tilbud og kreditnota).
- Landespecifikke fakturafelter for EU-27, registreret både mod den klassiske shortcode-checkout og WooCommerce 8.6+ blok-checkout (via Additional Checkout Fields API).
- PDF-rendering via mPDF med en af tre medfølgende skabeloner (Minimal, Classic, Modern) og vælgere til accentfarve, tekstfarve, skrifttype og sælgerlogo.
- Elleve XML-writere, valgt automatisk ud fra køberlandet: 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) — med UBL 2.1 / PEPPOL BIS 3.0 som universel fallback.
- VAT-valideringskæde, der kombinerer den europæiske VIES-SOAP-tjeneste med offline regex-validering pr. land, en DB-baseret cache og en timeligt cron, der revaliderer forældede poster.
- Seks regnskabsintegrationer — SmartBill, Fatture in Cloud, Xero, QuickBooks Online, Fortnox og Sage — hver med krypterede credentials, push-/status-/annullér-operationer og en retry-kø. Fanen Integrationer bruger en sticky provider-vælger, så det panel, du var i gang med at konfigurere, forbliver åbent på tværs af gem.
- Valgfrit AI-lag med fem providere (Anthropic, OpenAI, Google Gemini, DeepSeek, Grok xAI), der dækker smart-fill, compliance-tjek, linjeoversættelse og natursprogssøgning; pluginet virker fuldt uden en API-nøgle.
- Dashboard med periodevælger, fem KPI-kort og to trendgrafer; en separat integrations-log registrerer hvert push og hver fejl.
- WordPress Multisite-understøttelse — hvert under-site har sine egne tabeller, indstillinger og nummerings-tællere, og en netværks-admin-side aggregerer statistik.
Krav
| Komponent | Minimum |
|---|---|
| WordPress | 5.8 (testet op til 7.0) |
| PHP | 8.0 |
| WooCommerce | 7.0 |
| Database | MySQL 5.7 eller MariaDB 10.2 (dashboardets SQL bruger JSON_EXTRACT / JSON_UNQUOTE mod den uforanderlige snapshot-kolonne) |
Blok-checkout-integrationen er registreret mod WooCommerce’ Additional
Checkout Fields API (introduceret i WooCommerce 8.6). På ældre
WooCommerce-versioner tilføjer det klassiske filter
woocommerce_billing_fields stadig VAT-, tax-code- og landespecifikke
felter til shortcode-checkout, så pluginet degraderer pænt.
Installation
- Hent den seneste Invoice Pilot-ZIP fra GitHub-siden Releases .
- Åbn i WordPress Plugins → Tilføj nyt → Upload plugin.
- Vælg ZIP-filen, og klik på Installer nu.
- Klik på Aktiver plugin.
- Åbn Invoice Pilot → Indstillinger for at konfigurere sælger, nummerserier og valgfri integrationer.
Aktivering opretter pluginets databasetabeller, installerer
standardindstillingerne og seeder fem nummerserier (én pr.
dokumenttype): INV (faktura, standard), REC (kvittering), CN
(kreditnota), PRO (proforma) og Q (tilbud), alle med mønsteret
YYYY-NNNN og årlig nulstilling. Fire cron-jobs planlægges også:
daglig log-oprydning, retry hvert kvarter for fejlede
integrations-pushes, timeligt VIES-revalidering og daglig refresh af
Fatture in Cloud-token.
På WordPress Multisite kører samme per-site-bootstrap automatisk, når
et nyt under-site oprettes (wp_initialize_site).
Konfiguration
Alle Invoice Pilot-skærme ligger under topmenuen Invoice Pilot i WordPress’ admin-sidebar:
- Dashboard — KPI-kort og trendgrafer.
- Dokumenter — moderne data-grid med hvert udstedt dokument (faktura, kreditnota, proforma, tilbud, kvittering), en samlet værktøjslinje (AI-søgning + typefilter), farvede status-pills (betalt / annulleret / konverteret / kladde / udstedt), paginering med 20 rækker og PDF- / XML- / Slet-handlinger inline.
- Indstillinger — konfigurationsside med otte faner (dokumenteret nedenfor).
- Log — integrations-log-poster med opbevaring og en manuel oprydningshandling.
Indstillingssiden er opdelt i følgende faner i den rækkefølge, de optræder:
- Generelt
- Serier
- Dokumenttyper
- Skabeloner
- VAT-validering
- Integrationer
- AI
- Avanceret
Generelt

Generelt-fanen er delt i tre kort: Licens, Sælgerdetaljer og Dokument-standarder.
Licens
| Felt | Bemærkninger |
|---|---|
| Licensnøgle | Indsæt din PILOT-XXXX-XXXX-XXXX-XXXX-nøgle fra ordrebekræftelsen, og tryk på Verificer og gem for at slå automatiske plugin-opdateringer fra GitHub-release-feedet til. Pluginet udsteder fortsat dokumenter uden en nøgle; kun den automatiske opdateringskanal er låst. |
Sælgerdetaljer rummer identiteten, der trykkes på hvert udstedt dokument; Dokument-standarder rummer et lille antal WooCommerce-niveau-defaults.
| Felt | Standard | Bemærkninger |
|---|---|---|
| Sælgers navn | tomt | Fri tekst. |
| VAT | tomt | Sælgers VAT-identifier. |
| Skattekode | tomt | Italiensk codice fiscale eller tilsvarende. |
| Adresse | tomt | Vej. |
| Postnummer / CAP | tomt | Postnummer. |
| By | tomt | |
| Provins (2 bogstaver, kun IT) | tomt | Tvinges til store bogstaver ved gem. |
| Land (ISO, 2 bogstaver) | IT | ISO-3166-1 alpha-2; tvinges til store bogstaver. |
| tomt | Valideres som en mailadresse. | |
| Logo | tomt | Vælges fra WordPress’ mediebibliotek. PNG eller SVG med gennemsigtig baggrund virker bedst; anbefalet højde 64–128px. Logoet trykkes øverst til højre på fakturaen. |
| IBAN | tomt | Bruges af writere, der udsender betalingsinstruktioner. Trykkes i fakturaens footer og indlejres i <DatiPagamento> i FatturaPA. |
| Banknavn | tomt | Fri tekst — trykkes under IBAN i fakturaens footer og udsendes som <IstitutoFinanziario> inde i <DettaglioPagamento>-blokken i FatturaPA. |
| SWIFT / BIC | tomt | 8 eller 11 alfanumeriske tegn; tvinges til store bogstaver og strippes for whitespace ved gem. Trykkes ved siden af IBAN og udsendes som <BIC> i FatturaPA. |
| Trigger-status | processing | WooCommerce-ordrestatus, der udløser automatisk fakturering. Tilladte værdier: processing, completed, on-hold, pending. |
| Standardserie | INV | Slug for den nummerserie, nye fakturaer bruger. |
| VAT-nummerformat på PDF | Med præfiks — VAT IT04032690614 (VIES-stil, anbefalet) | Hvordan sælgerens VAT-nummer trykkes på den renderede faktura og PDF-preview. Værdier: Med præfiks (landekoden foran nummeret, der spejler VIES-stilen), Bare (kun nummeret, som indtastet under Sælgerdetaljer → VAT). Standard er Med præfiks. |
| Landespecifikke faktureringsfelter | Kun Italien (SDI / PEC / fiscal regime) | Tri-state-vælger, der styrer, hvilke landespecifikke felter der vises ved checkout. Værdier: Fra — kun de universelle VAT- og skattekode-felter vises, Kun Italien (SDI / PEC / fiscal regime), Alle EU-27 landespecifikke felter. Gælder både blok-checkout og den klassiske shortcode-checkout. Hvert felt har en oversættelig label (fx SDI recipient code, Certified email (PEC), SIRET, Steuernummer) — de gamle rå snake_case-navne er væk. |
Serier

Serier-fanen er en CRUD-tabel over nummerserier, som ligger i
pluginets egen series-tabel. Hver række styrer, hvordan dokumenter
af en given type nummereres.
Kolonner: Slug, Mønster, Tæller, Reset, Standard, Aktiv, Handlinger (Rediger / Slet).
Tilføj-/Rediger-formularen viser:
| Felt | Tilladte værdier | Standard |
|---|---|---|
| Slug | Identifier i små bogstaver. Skal være unik. | tomt |
| Dokumenttype | invoice, receipt, credit_note, proforma, quote. | invoice |
| Mønster | Fri tekst; placeholders {YYYY} (år) og {NNNN} (tæller) udvides ved udstedelse. | INV-{YYYY}-{NNNN} |
| Tæller | Heltal, ét eller højere. Næste nummer der tildeles — det allerførste dokument udstedt fra denne serie bruger præcis denne værdi (så Tæller = 47 udsteder næste faktura som INV-2026-0047, ikke INV-2026-0048). | 1 |
| Reset-strategi | never, yearly. | never |
| Standard | Boolean — markér denne serie som standard for nye dokumenter af denne type. | fra |
| Aktiv | Boolean — tillad, at serien bruges. | til |
At omdøbe en slug opdaterer serie-rækken på plads (det interne id og
referencer bevares) og migrerer indstillingen default_series
automatisk, hvis den pegede på den gamle slug. At slette en serie
fjerner ikke eksisterende dokumenter; de beholder deres numre.
Dokumenttyper

Fanen Dokumenttyper slår valgfri dokumenttyper til og fra og viser de FatturaPA-specifikke bollo- og ritenuta-indstillinger.
Dokumenttyper-kort
| Kontakt | Standard | Beskrivelse |
|---|---|---|
| Auto-udsted kreditnota ved WC-refusion | til | Når en WooCommerce-refusion oprettes, udsted automatisk en kreditnota knyttet til den oprindelige faktura. |
| Aktivér proforma-dokumenter | til | Vis en “Opret proforma”-knap på WC-ordreskærmen, og tillad konvertering til faktura. |
| Aktivér tilbud (preventivo) | til | Vis en “Opret tilbud”-knap på WC-ordreskærmen. Tilbud er ikke-fiskale: en PDF produceres, men ingen XML. |
FatturaPA — italiensk B2B-kort
| Felt | Standard | Beskrivelse |
|---|---|---|
| Bollo virtuale assolto | fra | Udsend DatiBollo (2,00 EUR virtuelt stempel) på fakturaer over 77,47 EUR, når forpligtelsen er anmeldt til Agenzia delle Entrate. |
| Anvend Ritenuta d’acconto | fra | Beregn og udsend DatiRitenuta på fakturaer til italienske B2B-købere. |
| Standardsats | 20.00 % | 0–100, trin 0,01. |
| Tipo ritenuta | RT02 | RT01 (persone fisiche) eller RT02 (persone giuridiche). |
| Causale pagamento | A | Enkelt stort bogstav fra SDI-tabellen 1.1.5.2 (f.eks. A = professionelle ydelser). |
Skabeloner

Vælg én af tre medfølgende PDF-skabeloner, og tilpas dens farver og typografi.
| Skabelon | Beskrivelse |
|---|---|
| Minimal | Rent sans-serif-layout med teal-accent. Standard. |
| Classic | Serif-typografi med et farvet header-bånd. Klassisk look til professionelle services. |
| Modern | Tospaltet header og afrundede kort. Velegnet til design-tunge brands. |
Yderligere felter:
| Felt | Standard | Bemærkninger |
|---|---|---|
| Primærfarve | #1e8a8a | Native HTML5-farvevælger; accent til overskrifter, dividere og tabel-headers. |
| Skrifttype | Site theme font (system stack) | En af: default, dejavusans, dejavuserif, dejavusansmono, helvetica, times, courier. Værdien default bruger sitets systemfont-stack med DejaVuSans som PDF-fallback. |
| Tekstfarve | #222222 | Standardfarve på brødtekst. Dæmpede billedtekster og footers beholder deres lysere tone. |
Fanen indlejrer også en live PDF-preview (renderet mod REST-endpointet
/wp-json/invoice-pilot/v1/preview-template), så du kan sammenligne
skabeloner side om side, før du gemmer. Et skift af radio udveksler
iframen straks; valget gemmes først, når du klikker på Gem skabelon.

En Dokumenttype-vælger sidder over iframen, så du kan se, hvordan
hver af de fire dokumenttyper renderes — invoice, credit_note,
proforma, quote — med samme skabelon, eksempel-sælger og
eksempel-køber. Forskellene pr. type er:
| Type | Titel | Nummerpræfiks | Status-pille | Disclaimer-banner | Betaling / IBAN |
|---|---|---|---|---|---|
invoice | Faktura | INV- | ISSUED | — | vises |
credit_note | Kreditnota | CN- | CREDIT NOTE | Refund of INV-… | skjules |
proforma | Proforma | PRO- | PROFORMA | Proforma — not a fiscal document. | vises |
quote | Tilbud | Q- | QUOTE | Quote — not a fiscal document, subject to acceptance. | skjules |
Tilbud omdøber desuden de fremtrædende “Issued”-/“Due date”-celler
til Valid until og hero-totalen til Estimated total;
kreditnotaer omdøber den til Refund total. Forskellene kommer
fra en label-overstyringskort pr. type og en doc_type_context()-helper,
der fødes ind i template-engine, så de tre medfølgende designs
(Minimal / Classic / Modern) bevarer en konsistent visuel identitet på
tværs af dokumenttyper uden at duplikere skabelonfiler.
Footeren skriver altid køberens land på sin fulde engelske form
(f.eks. Germany, ikke DE) — ISO-koden fra ordren bliver oversat
via PHP’s Locale::getDisplayRegion() før rendering, hvilket holder
den renderede faktura læsbar for både menneskelige købere og
skatterevisorer. Selve sælgerens VAT trykkes ifølge VAT-nummerformat
på PDF under Generelt → Dokument-standarder — standardværdien er
den VIES-stil-præfikserede form (VAT IT04032690614), med en
Bare-mulighed for jurisdiktioner, der foretrækker nummeret uden
præfiks.
Dispatcheren, der vælger den rigtige XML-konvolut pr. køberland, er
filteret invoice_pilot_xml_writer_for_country, så host-kode kan
overstyre pr. ISO (se Hooks og filtre).
VAT-validering

VAT-identifiers indtastet ved checkout (og på enhver adresseskærm, der viser feltet) køres gennem en kæde af validatorer. Hver validator slås til af en uafhængig kontakt og kører i rækkefølge, indtil én returnerer et positivt svar; både positive og negative svar caches i den konfigurerede TTL.
| Validator | Standard | Beskrivelse |
|---|---|---|
| VIES (EU SOAP) | til | Krydstjekker EU-VAT-numre mod den europæiske VIES-tjeneste. |
| Format pr. land | til | Offline regex-validering pr. land. Anbefales altid som fallback. |
| Felt | Standard | Område / Bemærkning |
|---|---|---|
| Cache-TTL (timer) | 24 | 1 – 720. Fejlede VIES-opslag ældre end 6 timer revalideres af det timelige cron. |
| Intra-EU B2B reverse charge | til | Når køberen er i en anden EU-medlemsstat end sælgeren og indtaster et VAT-nummer, kæden bekræfter som gyldigt, nulstiller WooCommerce momsen i kurven automatisk (køberen selv-bogfører momsen i sit eget land). VAT-feltet får også et live-badge — grønt ✓ ved succes, rødt ✕ ved fejl. |
| Fradrag VAT hvis kunden er i basislandet | fra | De fleste jurisdiktioner tillader IKKE dette — lad det stå slået fra, medmindre du har et specifikt skatteråd, der siger, det gælder din virksomhed. Når slået til, udløser en gyldig indenlandsk B2B-VAT også reverse-charge-fradraget på indenlandske salg. |
En read-only Cache-state-række rapporterer antal cachede poster, og hvor mange der er udløbet og afventer udsmidning.
Test VAT-validering — et lille tester-kort under indstillingerne kører hver provider direkte mod et enkelt VAT-nummer, springer kædens rækkefølge og cachen over, så du kan se, om VIES faktisk bekræftede nummeret, eller om det kun var offline-formattjekket, der gjorde det.
Seed EU-27 standard-momssatser — kortet i bunden udfylder WooCommerce → Indstillinger → Skat → Standardsatser med den aktuelle standard-momssats for hvert EU-27-medlemsland (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%). Som standard indsættes kun manglende lande; sæt flueben i Overskriv eksisterende satser for at tvinge hver række til den kanoniske værdi (nyttigt efter EU justerer en national sats). Kortet lister også hvert (ISO, sats)-par, så du ser præcist, hvad der skrives, før du trykker på knappen.
Integrationer
Fanen Integrationer renderer ét panel pr. registreret
integrations-provider bag en enkelt Provider-vælger øverst — vælg
den provider, du vil konfigurere, og kun dens kort er synligt, de
øvrige bliver i DOM’en, blot skjult. Vælgeren er sticky på tværs af
formular-gem: når du gemmer en providers formular (eller lander på
fanen med ?integration=<id> i URL’en), beholder næste render den
provider valgt, så du ikke kastes tilbage til den, der står først i
registreringsrækkefølgen.
Som standard leverer Invoice Pilot seks providere; tredjeparts-kode kan
registrere flere via filteret invoice_pilot_integration_providers.
Hvert provider-panel afsluttes med et Connection Status-kort med en Test Connection-knap. Knappen sender et let kald mod de gemte credentials og udskriver upstream-svaret — gem formularen først, hvis du lige har indsat nye tokens.
SmartBill

Rumænsk faktureringsudbyder. Credentials krypteres at rest via pluginets symmetriske krypto-lag.
| Felt | Standard | Bemærkninger |
|---|---|---|
| Aktivér SmartBill | fra | Push udstedte fakturaer til SmartBill, så snart de er udstedt. |
| API-brugernavn | tomt | Det brugernavn, du logger ind på SmartBill med. |
| Token | tomt | Indsæt din SmartBill-API-token. Den gemte værdi er krypteret; lad feltet være tomt ved efterfølgende gem for at beholde den. |
| CIF (firma) | tomt | Rumænsk firma-VAT-kode. |
| Serie | tomt | SmartBill-serien, pushede fakturaer bruger. |
Når slået til, kalder Invoice Pilot POST /SBORO/api/v2/invoice ved
udstedelse, derefter pull_status til afstemning og void, når en
faktura annulleres.
Fatture in Cloud

Italiensk faktureringsudbyder. OAuth-tokens opbevares krypteret. Det
daglige cron invoice_pilot_refresh_fic_token opdaterer access-tokenet
automatisk, når integrationen er slået til.
| Felt | Standard | Bemærkninger |
|---|---|---|
| Aktivér Fatture in Cloud | fra | Push udstedte dokumenter (fakturaer, kreditnotaer, proforma, tilbud) til Fatture in Cloud, så snart de er udstedt. |
| Client ID | tomt | OAuth-klient-identifier. |
| Access token | tomt | Indsæt OAuth-access-tokenet. Den gemte værdi er krypteret; lad feltet være tomt ved efterfølgende gem for at beholde den. |
| Refresh token | tomt | Samme håndtering som access-tokenet. |
| Company ID | 0 | Numerisk firma-identifier i din Fatture in Cloud-konto. |
| Opret kunder | til | Opret automatisk en kunde-post på FIC, når en ny køber faktureres. |
I henhold til Fatture in Clouds produktpolitik sender Invoice Pilot ikke FatturaPA til SDI for dig. SDI-indsendelse er overladt til et separat manuelt trin inde fra din FIC-konto.
Xero

Global regnskabsplatform. OAuth 2.0-tokens krypteres at rest. Indstillingsfanen er opdelt i Connection (status + knapperne Connect / Disconnect) øverst og Settings (app-credentials + push-adfærd) nedenunder.
Tilslutning
Invoice Pilot kommer med et indbygget OAuth-flow — du behøver ikke længere udføre dansen i Postman og indsætte fire strenge i formularen. End-to-end-opsætningen er:
- Opret en Web-app på developer.xero.com med den redirect-URI, der vises i Connection-panelet — kopiér den ordret, Xero matcher den tegn-for-tegn. Apps oprettet efter 2. marts 2026 kan kun anmode om det granulære scope-sæt; Invoice Pilot vælger det rigtige automatisk.
- Generér en Client secret på Xero-app-siden (Xero viser den kun én gang), indsæt derefter Client ID og Client secret i Settings-formularen og gem.
- Klik på Connect to Xero. Du sendes gennem den almindelige samtykkeskærm, og hvis din konto autoriserer mere end én organisation, omdirigeres du til en in-card-vælger, hvor du kan vælge målet tenant. Tokens udveksles + gemmes automatisk.
- Disconnect rydder access- og refresh-tokens samt tenant-id’et, men beholder app-credentials, så det er nemt at genoprette forbindelsen.
Pushes bruger POST /Invoices med standardheaderen Idempotency-Key,
der udledes af det lokale faktura-id + nummer, så et netværks-retry
falder sammen til samme Xero InvoiceID i stedet for at oprette en
dublet. Refresh-tokenet roteres automatisk ved 401; hvis det nogensinde
udløber (Xero invaliderer refresh-tokens efter 60 dages
inaktivitet), så klik blot Connect igen.
Felter
| Felt | Standard | Bemærkninger |
|---|---|---|
| Enable Xero | fra | Push udstedte dokumenter til Xero, så snart de er udstedt. |
| Client ID / Client secret | tomt | OAuth 2.0-app-credentials fra Xero Developer Portal. Påkrævet, før Connect kan bruges. |
| Access token / Refresh token (advanced) | tomt | Auto-udfyldes af Connect-knappen. Indsæt kun manuelt, hvis du har hentet tokens uden for denne UI. |
| Tenant ID | tomt | UUID for Xero-organisationen. Auto-udfyldes af Connect (enkelt organisation) eller angives via in-card tenant-vælgeren (flere organisationer). |
| Default account code | 200 | Omsætningskontokode stemplet på hver pushet linje. Regionale standarder: UK/NZ 200, US 400, AU 200. Find din under Accounting → Chart of accounts i Xero. |
| Default tax type | OUTPUT | Xero TaxType anvendt på beskattede linjer. Almindelige værdier: OUTPUT (standard moms på salg), OUTPUT2 (reduceret sats), EXEMPTOUTPUT, NONE. Linjer med 0 % VAT falder automatisk tilbage til NONE. |
| Invoice status on push | AUTHORISED | Én af DRAFT (redigerbar i Xero, ikke endnu en rigtig faktura), SUBMITTED (afventer godkendelse), AUTHORISED (færdiggjort). Alt andet saneres tilbage til AUTHORISED. |
| Payment account UUID | tomt | Xero bank/cash AccountID brugt ved registrering af betalinger. Find det via GET /api.xro/2.0/Accounts?where=Type=="BANK" eller Xero-UI’en (Chart of accounts → click the bank account → URL contains the UUID). Lad være tomt for at deaktivere registrering af betalinger. |
QuickBooks Online

Intuit QuickBooks Online — US / CA / UK / globalt. OAuth 2.0-tokens krypteres at rest. Settings-fanen er opdelt med Connection (status + Connect/Disconnect-knapper) øverst og Settings (app-credentials + push-adfærd) nedenunder.
Forbindelse
Invoice Pilot leveres med et indbygget OAuth-flow — du skal ikke længere danse rundt i Postman og indsætte fem strenge i formularen. End-to-end-opsætningen er:
- Opret en app på developer.intuit.com
med QuickBooks Online and Payments som platform og scope
com.intuit.quickbooks.accounting. Åbn fanen Keys & OAuth og skift mellem Development og Production afhængigt af hvilket miljø du sigter mod — hvert miljø har sit eget par af client_id + secret. - Tilføj den redirect-URI, der vises i Connection-panelet, til listen
Redirect URIs og klik Save — Intuit accepterer
http://localhostfor Development-apps. - Indsæt Client ID og Client secret i Settings-formularen, vælg det matchende Environment (Sandbox / Production) og gem.
- Klik på Connect to QuickBooks. Intuits samtykkeskærm lader dig
vælge den virksomhed, som integrationen skal skrive imod; det
valgte
realmIdreturneres i callback-URL’en og gemmes automatisk — der er ingen separat tenant-vælger. - Disconnect rydder access- og refresh-tokens samt realm-id’et, men beholder app-credentials, så det er nemt at genoprette forbindelsen.
Hvert push bruger POST /v3/company/{realmId}/invoice med
query-parameteren requestid sat til en stabil per-faktura-værdi —
QBO kollapser POST-retries til det oprindelige svar, så et
netværks-retry vil aldrig oprette en dublet. Pushes medfører også
minorversion=75, så QBO returnerer aktuelle entity-former (uden den
nedgraderer API’et stille til sin 2017-kontrakt). Refresh-tokens
varer 100 dage fra udstedelse og roteres ved hver brug; pluginnet
håndterer rotationen transparent ved 401.
Felter
| Felt | Standard | Bemærkninger |
|---|---|---|
| Enable QuickBooks Online | fra | Push udstedte dokumenter, så snart de er udstedt. |
| Environment | sandbox | sandbox (standard) rammer sandbox-quickbooks.api.intuit.com; production rammer quickbooks.api.intuit.com. Hvert environment har sit eget par af Client ID + secret på Intuit-app-siden. |
| Client ID / Client secret | tomt | OAuth 2.0-app-credentials fra fanen Keys & OAuth i din Intuit Developer-app. Påkrævet, før Connect kan bruges. |
| Access token / Refresh token (advanced) | tomt | Auto-udfyldes af Connect-knappen. QBO-access-tokens varer omkring 60 minutter og roteres via refresh-tokenet; refresh-tokens varer 100 dage fra udstedelse og roteres ved hver brug. Indsæt kun manuelt, hvis du har hentet tokens uden for denne UI. |
| Realm ID | tomt | QuickBooks-firma-id. Auto-udfyldes af Connect — QBO sender det som realmId i OAuth-callbacket. Sandbox-virksomheder ser ud som 9341457147734811; production-realms er tilsvarende. |
| Default customer ID | tomt | QBO Customer.Id, som hver pushet faktura tilknyttes. Påkrævet — QBO afviser fakturaer uden en CustomerRef. Find det under Sales → Customers i QBO-UI’en eller via GET /v3/company/{realmId}/query?query=select * from Customer. |
| Default item ID | 1 | QBO Item.Id brugt på hver linje. 1 er det forudvalgte “Services”-item i en frisk sandbox; find dit under Sales → Products and services. |
| Default tax code | NON | QBO TaxCodeRef anvendt på hver linje. NON = ikke-skattepligtigt (standard), TAX = standard sales tax på US/CA-konti. Tilsidesæt pr. jurisdiktion ved at opsætte tax-koden i QBO og indsætte dens navn her. |
Fortnox

Svensk regnskabsplatform. OAuth 2.0-credentials krypteres at rest.
| Felt | Standard | Bemærkninger |
|---|---|---|
| Aktivér Fortnox | fra | Push udstedte dokumenter, så snart de er udstedt. |
| Client ID / Client secret | tomt | OAuth 2.0-credentials fra Fortnox’ developerportal. |
| Access token / Refresh token | tomt | Krypteret at rest. |
| Default customer number | tomt | Bruges, når køberen ikke har et resolveret Fortnox-kundenummer. |
| Default VAT | 25 | Standard svensk VAT-sats (i %) anvendt, når ingen sats er mappet. |
| Bookkeep on push | fra | Opret også bookkeeping-bilaget, når fakturaen pushes. |
Sage

OAuth 2.0-regnskabsplatform (Sage Accounting / Business Cloud).
| Felt | Standard | Bemærkninger |
|---|---|---|
| Aktivér Sage | fra | Push udstedte dokumenter, så snart de er udstedt. |
| Client ID / Client secret | tomt | OAuth 2.0-credentials fra Sage Developer. |
| Access token / Refresh token | tomt | Krypteret at rest. |
| Business ID | tomt | Identifier for den Sage-business, integrationen skriver til. |
| Default contact id / ledger id / tax rate id | tomt | Fallbacks anvendt, når snapshottet ikke bærer den tilsvarende mapping. |
AI

AI-fanen er delt i to kort: Provider Configuration og Features. Pluginet virker fuldt uden en API-nøgle; denne fane tilføjer valgfri AI-funktioner.
Provider Configuration
| Felt | Bemærkninger |
|---|---|
| Provider | Anthropic (standard), OpenAI, Google Gemini, DeepSeek eller Grok (xAI). Hver provider holder sin egen krypterede API-nøgle, så du kan skifte frem og tilbage uden at indsætte credentials igen. |
| API Key | Gemmes krypteret. Kortet viser et grønt Configured-mærkat, når en nøgle allerede er lagt på. Linket “Get your API key from …” peger på den valgte providers konsol. |
| Model | Liste pr. provider (se tabel nedenfor). Den første model i listen bruges som standard, når ingen model er konfigureret. |
| Test Connection | Kalder providerens messages-/chat/completions-endpoint med en 1-token-prompt og rapporterer succes eller upstream-fejlen. |
Modeller pr. provider:
| Provider | Modeller |
|---|---|
| Anthropic | Claude Opus 4.7 (bedste kvalitet, standard), Claude Sonnet 4.6 (anbefalet), Claude Haiku 4.5 (hurtig, billig) |
| OpenAI | GPT-5 (bedste kvalitet), GPT-5 mini (hurtig), GPT-4o, GPT-4o mini (billigst) |
| Google Gemini | Gemini 2.5 Pro, Gemini 2.5 Flash (bedst pris/ydelse), Gemini 2.5 Flash Lite (billigst) |
| DeepSeek | DeepSeek V3.2 Chat, DeepSeek V3.2 Reasoner |
| Grok (xAI) | Grok 4.1 Fast, Grok 4, Grok 3, Grok 3 Mini |
Features
| Kontakt | Standard | Beskrivelse |
|---|---|---|
| Smart-fill billing | fra | Kunder indsætter en fri faktureringsblok ved checkout; modellen udfylder den strukturerede formular. |
| Smart-fill-kald pr. time | 5 | Rate limit pr. session. |
| Compliance pre-flight-tjek | fra | Lad AI’en scanne hver faktura før udstedelse og markere potentielle problemer. |
| Blokér udstedelse ved fejl-niveau-findings | fra | Når et kritisk problem findes, så forhindr fakturaen i at blive udstedt. |
| Compliance-kald pr. time | 10 | |
| Oversæt linjebeskrivelser | fra | Brug AI til at oversætte fakturalinjer til køberens sprog. Polyglot-bevidst, når søster-pluginet er installeret. |
| Natursprog-dokumentsøgning | fra | Fritekst-forespørgsler på Dokumenter-admin-siden. |
| Søgekald pr. time | 10 |
Avanceret

Opbevaring og afinstallation
| Felt | Standard | Område |
|---|---|---|
| Log-opbevaring (dage) | 90 | 1 – 3650. Integrations-log-poster ældre end dette ryddes af det daglige cron. |
| Slet data ved afinstallation | fra | Drop alle Invoice Pilot-tabeller og -valg, når pluginet afinstalleres. Destruktivt. Slået fra som standard. |
Vedligeholdelseshandlinger
- Kør log-oprydning nu — fyrer handlingen
invoice_pilot_cleanup_logsmed det samme i stedet for at vente på det daglige cron. - Ryd valideringscache — sletter hver række fra VAT-valideringscachens tabel.
En lille Versions-række nederst trykker den aktuelle plugin-version og databaseskema-version.
Brug
Auto-udstedelse af faktura fra en WooCommerce-ordre
Standardflowet kræver ingen manuel handling.
- En kunde lægger en ordre på WooCommerce. Checkout viser felterne
VAT-nummer og Skattekode plus eventuelle landespecifikke
felter registreret for faktura-landet (f.eks. SDI recipient code
og Certified email (PEC) på
IT-ordrer). VAT-feltet valideres live, mens kunden skriver — et grønt ✓-badge vises i inputtet, når kæden bekræfter nummeret, et rødt ✕ når det fejler. Hvis køberen er i en anden EU-medlemsstat og VAT’en er gyldig, nulstiller WooCommerce momsen i kurven automatisk (intra-EU B2B reverse charge — se Indstillinger → VAT-validering). - Når ordren rammer trigger-statussen defineret under
Indstillinger → Generelt → Trigger-status (
processingsom standard), udsteder Invoice Pilot en faktura ved hjælp af Standardserien (INVsom standard), gemmer et uforanderligt JSON-snapshot af ordren, renderer PDF’en, genererer XML-konvolutten for køberlandet og pusher til enhver aktiv integration. - Ordreskærmen får en Invoice Pilot-meta-boks, der lister de udstedte dokumenter med links til PDF og XML samt action-knapper til Regenerér, Genudsted, Annullér, Opret kreditnota, Opret proforma, Opret tilbud og Push til provider.

Invoice Pilot-meta-boksen viser, for det seneste ikke-annullerede
dokument på ordren: dokument-nummeret (f.eks. INV-2026-0063),
status-pillen (Udstedt / Betalt / Annulleret), download-knapperne
PDF og XML (token-signerede REST-links), en
Regenerér dokument-handling, der re-renderer artefakterne mod den
aktuelle skabelon og sælgerindstillinger uden at ændre
dokumentnummeret, og et Andre dokumenter-afsnit, der eksponerer
ét-klik-knapperne Opret proforma og Opret tilbud. Når en
integration er slået til, dukker en Push til provider-knap op ved
siden af PDF- / XML-links og replayer integrations-kaldet mod det
konfigurerede mål.
Manuel udstedelse
Hvis automatisk udstedelse er slået fra, eller ordren endnu ikke har nået trigger-statussen, har ordrens meta-boks en Udsted nu-knap. Samme flow gælder — snapshot, PDF, XML, integrations-push — men det kører på efterspørgsel.
Kreditnotaer fra refusioner
Når Auto-udsted kreditnota ved WC-refusion er slået til (standard),
udløser enhver WooCommerce-refusion oprettet mod en ordre med en
eksisterende faktura en kreditnota i CN-serien. Kreditnotaen
peger tilbage på den forrige faktura og refererer den i XML’en. Den
renderede PDF har en “Refund of INV-…”-disclaimer-banner øverst, en
CREDIT NOTE-status-pille, Refund total i hero-cellen, og IBAN-/
betalingsmetode-footeren skjules (det oprindelige betalingsflow
gælder ikke længere). Du kan også udstede en kreditnota manuelt —
fuld eller delvis — fra Handlinger-kortet på fakturaens
redigeringsside, så længe forrige faktura er i status issued.
Proformaer og tilbud
Når de tilsvarende kontakter er slået til, viser ordreskærmen også knapperne Opret proforma og Opret tilbud. Begge producerer ikke-fiskale dokumenter — en PDF renderes, men ingen XML genereres for tilbud. Den renderede PDF har en visuel behandling specifik for sin type: en disclaimer-banner øverst (“Proforma — not a fiscal document.” / “Quote — not a fiscal document, subject to acceptance.”), en “QUOTE”-/“PROFORMA”-status-pille i stedet for “ISSUED”, og på tilbud skifter den fremtrædende datolabel til Valid until, og hero-totalen til Estimated total. Tilbud skjuler IBAN-/ betalingsmetode-blokken, da der endnu ikke er nogen betaling.
En proforma kan konverteres til en faktura med handlingen Konverter, der renummererer dokumentet under den konfigurerede faktura-serie.
Send en faktura til kunden
Pluginet registrerer en ordre-handling Send Invoice Pilot invoice
to customer under WooCommerce’ standard ordre-handlinger-dropdown,
der mailer PDF’en til køberen via WordPress’ wp_mail().
Hent dokumenter
PDF’er og XML-konvolutter serveres fra et offentligt adresserbart, men token-signeret REST-endpoint:
GET /wp-json/invoice-pilot/v1/download/{id}/{format}?token=…{format} er pdf eller xml. Tokenet genereres, når dokumentet
udstedes, og trykkes ind i ordrens meta-boks og fakturatabellen.
Dashboard

Invoice Pilot → Dashboard åbner et Activity overview-kort oven på et Trends-kort. Activity overview viser en periodelinje med fire vinduer — 7 dage, 14 dage, 30 dage (standard) og 90 dage — og fem KPI-kort:
- Fakturaer — samlet antal dokumenter udstedt i perioden.
- Net revenue — sum af netto-totaler i shop-valutaen, gengivet
med locale’ens valutasymbol og to decimaler (f.eks.
€3,876.09eller3.876,09 €afhængigt af administratorens locale). - VAT collected — sum af VAT-totaler fra det uforanderlige snapshot. Samme locale-bevidste valutaformatering som Net revenue. En separat skema-migration backfiller denne værdi for fakturaer udstedt før skemaversion 1.3.1, hvor kolonnen ikke blev udfyldt på skrivetidspunktet.
- Avg value — nettoomsætning divideret med fakturaantal, også valutaformateret.
- B2B / B2C — split af B2B-fakturaer (køber har et VAT-nummer) vs. B2C-fakturaer i samme periode.
Under KPI’erne renderer Trends-kortet to grafer side om side
— Invoices over time (et dual-axis line + area-diagram med
fakturaantal på den venstre akse og nettoomsætningstrenden udfyldt på
den højre akse) og By buyer country (et donut-diagram over de
mest hyppige køber-ISO-koder med farve-legenden nedenunder). Alle tal
hydreres fra /wp-json/invoice-pilot/v1/dashboard?days=N.
Dokumentliste

Invoice Pilot → Dokumenter lister hvert udstedt dokument med
status-pills (betalt / annulleret / konverteret / kladde / udstedt —
farvekodet efter livscyklustilstand), en Compliance-kolonne med
det farvekodede badge fra AI-pre-flight-tjekket, og PDF-/XML-/Slet-handlinger
pr. række inline. Siden paginerer 20 rækker ad gangen og viser en
samlet værktøjslinje, der kombinerer AI-fritekstsøgning med et
dokumenttype-filter (invoice / credit_note / proforma / quote /
receipt) plus en løbende tæller til højre. Når AI-søgning er slået
til, accepterer søgefeltet fritekst-forespørgsler (for eksempel
“Tyske fakturaer sidste måned over 1.000 EUR”), som den valgte
provider oversætter til en list-query; de resolverede filter-chips
vises over tabellen, så du kan se præcis, hvordan modellen parsede
din sætning.
WooCommerce-ordreliste

Invoice Pilot tilføjer en enkelt Invoice-kolonne til
standard-WooCommerce-ordrelisten (/wp-admin/admin.php?page=wc-orders),
så shop-ejeren kan se på et øjeblik, hvilke ordrer der allerede er
dokumenteret, og hvilke ikke, uden at forlade Ordrer-skærmen.
Kolonnen sidder mellem Order og Date og viser det
dokumentnummer, den konfigurerede serie har tildelt (for eksempel
INV-2026-0063) læst ordret fra den uforanderlige number-kolonne,
med et lille eye-preview-ikon ved siden af nummeret, der åbner
den renderede PDF inline i en ny fane.
Ordrer uden et udstedt dokument renderer en tankestreg — nyttigt,
når man fejlsøger trigger-status-uoverensstemmelser eller filtrerer
ordrer, der har brug for en manuel wp invoice-pilot issue-kørsel.
Den samme renderer wirer både den gamle posts-tabelkolonne
(manage_edit-shop_order_columns) og HPOS-kolonnen
(manage_woocommerce_page_wc-orders_columns), så oplevelsen er
identisk uanset hvilken ordre-storage din shop kører på.
Integrations-log

Core\Logger.Invoice Pilot → Log registrerer hvert integrations-push, hvert svar og hver fejl. Værktøjslinjen øverst kombinerer en Bulk actions-vælger + Apply-knap (i øjeblikket en ét-handlings bulk-delete), en provider-dropdown og en action-dropdown — begge fyldt op fra de værdier, der reelt optræder i loggen, så de kun nogensinde viser filtre, der matcher en faktisk række — og en løbende tæller med antal poster til højre.
Data-griddet har otte kolonner:
| Kolonne | Bemærkninger |
|---|---|
DATE (UTC) | Timestamp-pille, UTC. Sorteret faldende som standard. |
PROVIDER | Lower-cased provider-slug (fattureincloud, smartbill, xero, …). |
ACTION | Operation, der producerede posten (push, pull_status, refresh_token, void). |
INVOICE | #<id>-link tilbage til dokumentet, eller en tankestreg for poster, der ikke relaterer sig til en enkelt faktura (token-refreshes, manuel vedligeholdelse). |
HTTP | Farvet pille med upstream-statuskoden — grøn for 2xx, gul for 4xx, rød for 5xx (eller enhver post med en ikke-null error-kolonne). |
ERROR | Upstream-fejlbesked i rød tekst, når kaldet fejlede; tankestreg ved succes. |
MS | Wall-clock-varighed af kaldet i millisekunder. |
ACTIONS | En rød Delete-handling pr. række til engangsoprydning. |
Følsomme payload-felter redactes ved skrivning af pluginets
Core\Logger, så request- og response-bodies er sikre at beholde i
loggen. Gamle poster ryddes af det daglige cron
invoice_pilot_cleanup_logs ud fra Log-opbevaring (dage)-indstillingen
på Avanceret-fanen.
Netværks-admin (Multisite)
På et Multisite-netværk dukker en ekstra side Invoice Pilot Network op i netværks-admin-sidebaren. Den aggregerer faktura-antal og totaler på tværs af hvert under-site, hvor Invoice Pilot er aktivt.
EU-27-fakturering
Invoice Pilot leverer et register over landespecifikke fakturafelter for hvert EU-27-medlemsland. Hvert felt er valgfrit ved checkout (pluginet tvinger ikke B2B-only-data på en B2C-ordre); validering fyrer kun, når køberlandet matcher feltets ISO.
Registret dækker i øjeblikket:
| Land | Felter |
|---|---|
IT Italien | ei_recipient_code (7 alfanumeriske, standard 0000000), ei_certified_email (PEC), fiscal_regime (RF01–RF19) |
FR Frankrig | siren (9 cifre), siret (14 cifre), chorus_pro_service_code |
DE Tyskland | steuernummer, ust_id, leitweg_id, hrb |
ES Spanien | nif, face_oficina_contable, face_organo_gestor, face_unidad_tramitadora |
PT Portugal | nif (9 cifre), atcud |
NL Holland | kvk_number (8 cifre), btw_id |
BE Belgien | bce_number (10 cifre) |
LU Luxembourg | — |
AT Østrig | uid_nummer, firmenbuchnummer, steuernummer |
IE Irland | — |
DK Danmark | cvr_number (8 cifre), ean_location_number |
SE Sverige | organisationsnummer |
FI Finland | y_tunnus, ovt_code |
PL Polen | nip (10 cifre), regon, ksef_id |
CZ Tjekkiet | dic, ico (8 cifre), data_box_id |
SK Slovakiet | dic, ico (8 cifre), data_box_id |
HU Ungarn | tax_number, group_member_id |
SI Slovenien | vat_id, maticna_stevilka |
HR Kroatien | oib (11 cifre) |
RO Rumænien | cui |
BG Bulgarien | eik (9–13 cifre), vat_id |
GR Grækenland | afm (9 cifre), dou_code |
CY Cypern | tic |
MT Malta | id_number |
LT Litauen | company_code |
LV Letland | registration_number |
EE Estland | registry_code |
Blok-checkout-integrationen registrerer felter under namespacet
invoice-pilot/... gennem Additional Checkout Fields API. Som
standard vises kun de italienske felter i blok-checkout for ikke at
overvælde ikke-italienske købere; kontakten Alle EU-27-felter ved
checkout under Generelt slår hele sættet til. Den klassiske
shortcode-checkout renderer altid hele registret filtreret af det
valgte faktura-land.
Landefelter gemmes på ordren, kopieres ind i det uforanderlige
faktura-snapshot og forbruges af XML-writerne — for eksempel bliver
det italienske ei_recipient_code til CodiceDestinatario /
PECDestinatario i FatturaPA-konvolutten, mens det tyske
leitweg_id bliver til BuyerReference / EndpointID 0204 i
XRechnung.
Integrationer
SmartBill
SmartBill (Rumænien) er koblet ind i pluginets IntegrationManager
via filteret invoice_pilot_integration_providers og udstiller den
standardiserede provider-grænseflade: push, pull_status, void
og test_connection.
- Push mapper faktura-snapshottet til SmartBill-JSON-skemaet og
kalder
POST /SBORO/api/v2/invoicemed den konfigurerede CIF og serie. - Status-sync afstemmer draft- / issued- / paid-state, når cron for retry hvert kvarter kører.
- Void annullerer en tidligere pushet faktura på SmartBill, når kilde-fakturaen annulleres i WordPress.
Alle handlinger logges til integrations-loggen. Fejl sættes i kø og
prøves igen af cronet invoice_pilot_retry_integrations.
Fatture in Cloud
Fatture in Cloud (Italien) følger samme provider-grænseflade og mapper
faktura-snapshottet til entity-/items_list-formen, FIC’s
udstedte-dokumenter-endpoint forventer. Italienske landespecifikke
felter mappes eksplicit:
ei_recipient_code→ei_codeei_certified_email→certified_email- køber-VAT / skattekode / provins / land → tilsvarende
entity-nøgler
OAuth-credentials krypteres at rest. Det daglige cron
invoice_pilot_refresh_fic_token opdaterer access-tokenet, når
integrationen er slået til. At sætte Opret kunder til til får
integrationen til at oprette en ny kunde-post i FIC ved den første
faktura for en køber.
Invoice Pilot indsender ikke FatturaPA til SDI for dig. SDI-indsendelse er overladt til et separat manuelt trin inde fra din Fatture in Cloud-konto.
AI smart-fill
AI-laget er fuldt valgfrit. Uden en konfigureret API-nøgle udsteder pluginet fortsat fakturaer, renderer PDF’er og XML, validerer VAT og pusher til integrationer — kun de fire AI-funktioner nedenfor er utilgængelige.
Fem providere understøttes:
| Provider | Standardmodel | URL til API-nøgle |
|---|---|---|
| Anthropic | claude-opus-4-7 | console.anthropic.com |
| OpenAI | gpt-5 | platform.openai.com |
| Google Gemini | gemini-2.5-pro | aistudio.google.com |
| DeepSeek | deepseek-chat | platform.deepseek.com |
| Grok (xAI) | grok-4-1-fast-non-reasoning | console.x.ai |
API-nøglen opbevares krypteret at rest via pluginets symmetriske krypto-lag. Et tryk på Test Connection sender et minimalt kald til det valgte endpoint og blotter upstream-fejlen, hvis credentials er forkerte.
Fire funktioner kan slås til og fra hver for sig, så snart en nøgle ligger på:
- Smart-fill ved checkout — et tekstfelt “Paste billing details” dukker op ved checkout. Modellen parser den fri tekst og udfylder den strukturerede WooCommerce-faktureringsformular, inklusive landespecifikke felter. Rate-limited pr. session.
- Compliance pre-flight-tjek — hver faktura køres gennem modellen lige inden udstedelse, med mulighed for at blokere udstedelse ved fejl-niveau-findings, når et kritisk problem findes (for eksempel en italiensk B2B-faktura uden SDI-modtagerkode).
- Auto-oversæt linjer — fakturalinjers beskrivelser oversættes til køberens sprog. Når søster-pluginet Polyglot er installeret, delegeres oversættelses-pipelinen til det.
- Natursprog-dokumentsøgning — søgefeltet på Dokumenter-admin-siden accepterer fritekst-forespørgsler, modellen oversætter til en list-query.
Hver funktion har sit eget rate limit pr. time.
Hooks og filtre
Centraliserede hook-navne lever i klassen \InvoicePilot\Core\Hooks.
Hele listen:
| Hook | Type | Formål |
|---|---|---|
invoice_pilot_redact_keys | filter | Ekstra nøgler, der skal redactes fra loggede payloads. |
invoice_pilot_xml_writer_for_country | filter | Overstyr XML-writeren pr. køber-ISO. To argumenter: aktuel writer, ISO. |
invoice_pilot_validator_chain | filter | Overstyr eller udvid VAT-valideringskæden. |
invoice_pilot_integration_providers | filter | Registrer flere integrations-providere. |
invoice_pilot_country_fields | filter | Tilføjer eller fjerner landespecifikke checkout-felter. To argumenter: nuværende felter-array, ISO-kode. |
invoice_pilot_booted | action | Fyrer, efter pluginet er bootet. Sender singletonen videre. |
invoice_pilot_register_modules | action | Hook til modulregistrering. |
invoice_pilot_invoice_issued | action | Fyrer, efter en ny faktura er udstedt. |
invoice_pilot_invoice_rendered | action | Fyrer, efter PDF eller XML er renderet. |
invoice_pilot_integration_pushed | action | Fyrer efter et vellykket integrations-push. |
invoice_pilot_integration_failed | action | Fyrer efter et fejlet integrations-push. |
invoice_pilot_cleanup_logs | action | Dagligt cron — fjerner gamle integrations-log-poster. |
invoice_pilot_retry_integrations | action | Cron hvert kvarter — prøver fejlede pushes igen. |
invoice_pilot_revalidate_vies | action | Timeligt cron — revaliderer forældede VIES-cache-poster. |
invoice_pilot_render_integration_tab | action | Fyres fra Integrationer-fanen, så providere kan rendere deres egne indstillingskort. |
invoice_pilot_refresh_fic_token | action | Dagligt cron — opdaterer Fatture in Cloud-access-tokenet. |
Registrer en custom XML-writer:
add_filter(
'invoice_pilot_xml_writer_for_country',
function ( $writer, $iso ) {
if ( 'NL' === $iso ) {
return new My_Custom_Nl_Writer();
}
return $writer;
},
20,
2
);Registrer en custom integrations-provider:
add_filter(
'invoice_pilot_integration_providers',
function ( array $providers ) {
$providers[] = new My_Custom_Provider();
return $providers;
}
);Skjul eller udvid landespecifikke checkout-felter (for eksempel for at fjerne
Italiens ei_certified_email (PEC) og fiscal_regime (RF-kode) prompts, når
din butik aldrig har brug for dem — ingen plugin-fork nødvendig):
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
);Filteret kører både på PHP-submit-valideringsstien og på JS-snapshottet serveret til WC Blocks-checkoutet, så de to lag forbliver synkroniserede. Felt-maskinnavne, der i øjeblikket leveres (brug disse i filteret):
| Land | Feltnavne |
|---|---|
| IT | ei_certified_email, fiscal_regime |
| FR | siren, siret, chorus_pro_service_code |
| DE | steuernummer, ust_id, leitweg_id, hrb |
| ES | nif, face_oficina_contable, face_organo_gestor, face_unidad_tramitadora |
| PT | nif, atcud |
| NL | kvk_number, btw_id |
Den fulde per-land registry er defineret i
CountryFieldRegistry::install_defaults() og dækker alle EU-27 ISO’er.
FAQ
Indsender Invoice Pilot FatturaPA til SDI?
Nej. Invoice Pilot genererer FatturaPA-XML’en og gemmer den på ordren; SDI-indsendelse er bevidst overladt til et separat manuelt trin (eller til Fatture in Cloud-integrationen på din konto).
Kan jeg tilføje en writer til et land, der ikke er bygget ind?
Ja. Hægt dig på invoice_pilot_xml_writer_for_country, og returner
din egen implementation af
\InvoicePilot\Modules\Xml\XmlWriterInterface.
Virker det med WooCommerce’ blok-checkout?
Ja. Landespecifikke felter er registreret via WooCommerce 8.6+ Additional Checkout Fields API, så de optræder både i blok-checkout og i den klassiske shortcode-checkout. På WooCommerce-versioner ældre end 8.6 bruges kun det klassiske filter-flow.
Virker det med WordPress Multisite?
Ja. Hvert under-site har sine egne tabeller, indstillinger og
nummerings-tællere. En netværks-admin-side under
Network Admin → Invoice Pilot Network aggregerer faktura-antal
på tværs af netværket. På nye under-sites oprettes tabeller og
standard-serier automatisk via hooken wp_initialize_site.
Er credentials krypteret?
Ja. SmartBill-tokens, Fatture in Cloud-OAuth-tokens og AI-API-nøglen
er krypteret at rest via \InvoicePilot\Core\Crypto. Et tomt
token-felt ved næste gem bevarer den eksisterende gemte værdi.
Hvad sker der med mine data, hvis jeg sletter pluginet?
Intet, medmindre du vælger det til. Standarden for Avanceret →
Slet data ved afinstallation er fra, så tabeller, valg,
integrations-logs og valideringscachen bevares på tværs af
deaktivering / genaktivering. Slå valget til, hvis du vil have
uninstall.php-rutinen til at fjerne alt, når WordPress sletter
pluginet.
Hvor får jeg en API-nøgle til AI-funktionerne?
Hver provider har sin egen konsol: Anthropic på console.anthropic.com , OpenAI på platform.openai.com , Google AI Studio på aistudio.google.com , DeepSeek på platform.deepseek.com og Grok på console.x.ai . AI-fanen linker direkte til den valgte providers konsol.
Skal jeg have en AI-nøgle for at pluginet virker?
Nej. AI-funktionerne (smart-fill, compliance-tjek, linjeoversættelse, natursprogssøgning) er valgfri. Kerne-faktureringsmotoren — dokumentlivscyklus, PDF- og XML-generering, VAT-validering, integrationer, dashboard — kører uden en API-nøgle.
Fejlfinding
Fakturaen udstedes ikke, når ordren skifter til Processing
Tjek Indstillinger → Generelt → Trigger-status. Standarden er
processing; har du tilpasset den (for eksempel til completed),
fyrer auto-udstedelse kun på den konfigurerede status. Du kan også
trykke på Udsted nu fra ordrens meta-boks for at udstede manuelt
uanset triggeren.
Checkout viser for mange (eller for få) landefelter
Standarden viser kun de italienske SDI-felter. Åbn Indstillinger → Generelt → Document defaults → Landespecifikke faktureringsfelter og vælg omfanget:
Fra— kun de universelle VAT- og skattekode-felter vises.Kun Italien (SDI / PEC / fiscal regime)— standard.Alle EU-27 landespecifikke felter— hver ISO i registret.
Indstillingen gælder både blok-checkout og den klassiske shortcode-checkout. Landespecifikke felter skjules stadig client-side, når faktura-landet ikke matcher.
VAT-validering hænger eller timer ud
VIES-tjenesten er nu og da langsom eller utilgængelig. Pluginet
holder en cache pr. VAT i den konfigurerede TTL (24 timer som
standard) og revaliderer forældede poster en gang i timen via
cronet invoice_pilot_revalidate_vies. Hvis VIES er nede, accepterer
Format pr. land-validatoren stadig velformede numre. Du kan også
hæve cache-TTL’en under Indstillinger → VAT-validering.
Dashboardet viser ingen data
Dashboardets SQL bruger JSON_EXTRACT / JSON_UNQUOTE mod den
uforanderlige snapshot-kolonne. Sørg for, at din databaseserver er
MySQL 5.7+ eller MariaDB 10.2+. Hvis periodelinjen viser det rigtige
vindue, men kortene bliver stående på --, så åbn
/wp-json/invoice-pilot/v1/dashboard?days=30 direkte og se svaret —
REST-autentificeringsfejl dukker op som rest_forbidden.
Integrations-push fejler
Åbn Invoice Pilot → Log og find den fejlede post — HTTP-kolonnen
markerer ikke-2xx-svar med et farvet badge, og Error-kolonnen viser
upstream-fejlbeskeden i rødt. Den fejlede post prøves automatisk
igen af cronet invoice_pilot_retry_integrations hvert kvarter; du
kan også trykke på Push til provider i ordrens meta-boks for at
prøve igen med det samme. Brug Slet-handlingen på en række for at
rydde en engangs-post uden at vente på opbevarings-cronet.
Test Connection på AI-fanen rapporterer en fejl
Beskeden i rødt kommer direkte fra providerens endpoint. Almindelige årsager:
- En ugyldig eller tilbagekaldt API-nøgle — generér en ny, indsæt den i feltet API Key, og gem.
- Et modelnavn, kontoen ikke har adgang til — vælg en anden model i dropdownen.
- Hosten blokerer udgående netværk — bekræft, at udgående HTTPS til
api.anthropic.com,api.openai.com,generativelanguage.googleapis.com,api.deepseek.comellerapi.x.aier tilladt.
Mail-alerts til kunden kommer ikke frem
Mail med fakturaer til kunder sendes via WordPress’ wp_mail().
Kommer ingen mail frem, ligger fejlen næsten altid i sitets
mailopsætning og ikke i Invoice Pilot. Installer et
transaktionsmail-plugin (for eksempel et, der sender WordPress-mail
via SMTP), og udløs ordre-handlingen Send Invoice Pilot invoice
to customer igen fra en test-ordre.