Invoice Pilot
Invoice Pilot rozszerza WooCommerce o świadome kraju fakturowanie dla wszystkich 27 państw członkowskich UE. Zbiera odpowiednie pola rozliczeniowe na checkoucie (włoskie kody SDI / PEC, francuski SIRET, niemiecki Leitweg-ID, polski NIP, rumuński CUI itd.), a następnie wystawia z zamówienia niezmienne faktury, noty kredytowe, proformy i oferty w PDF i XML. PDF jest renderowany przez mPDF; envelope XML jest dobierany automatycznie do kraju kupującego i pokrywa jedenaście profili narodowych, w tym FatturaPA (IT), XRechnung (DE), KSeF FA(2) (PL), Factur-X (FR), CIUS_RO (RO), Facturae (ES) oraz UBL 2.1 / PEPPOL BIS 3.0 jako uniwersalny fallback.
Poza silnikiem dokumentów Invoice Pilot dostarcza pierwszorzędne integracje z sześcioma dostawcami księgowymi — SmartBill (Rumunia), Fatture in Cloud (Włochy), Xero, QuickBooks Online, Fortnox (Szwecja) i Sage — walidator VAT konsultujący europejską usługę VIES z fallbackiem do formatu per kraj, dashboard z kartami KPI i wykresami trendów oraz opcjonalną warstwę AI od wielu dostawców (Anthropic Claude, OpenAI, Google Gemini, DeepSeek, Grok xAI) na potrzeby smart-fillu checkoutu, pre-flight compliance, tłumaczeń linii i wyszukiwania dokumentów językiem naturalnym. Wtyczka wspiera też WordPress Multisite z tabelami per witryna i sieciową stroną podsumowania.
Wyróżniki
- Sterowany WooCommerce cykl życia dokumentów dla faktur, not kredytowych, proform i ofert, z zarezerwowanymi seriami numeracji, czystym przepływem wystawianie / regeneracja / ponowne wystawienie / unieważnienie / nota kredytowa oraz stylowaniem per typ dokumentu (baner ostrzegawczy na dokumentach niefiskalnych, etykiety „Ważne do” na ofertach, „Łączna kwota zwrotu” na notach kredytowych, blok płatności ukryty na ofertach i notach kredytowych).
- Pola rozliczeniowe specyficzne dla UE-27 zarejestrowane zarówno wobec klasycznego checkoutu shortcode’owego, jak i checkoutu blokowego WooCommerce 8.6+ (przez API Additional Checkout Fields).
- Renderowanie PDF przez mPDF z użyciem jednego z trzech wbudowanych szablonów (Minimal, Classic, Modern), z selektorem koloru akcentu, koloru tekstu, rodziny fontu i logo sprzedawcy.
- Jedenastu writerów XML, dobieranych automatycznie do kraju kupującego: 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), z UBL 2.1 / PEPPOL BIS 3.0 jako uniwersalnym fallbackiem.
- Łańcuch walidacji VAT łączący europejską usługę SOAP VIES z offline’ową walidacją regexową per kraj, cache opartym o bazę i godzinowym cronem, który rewaliduje przeterminowane wpisy.
- Sześć integracji księgowych — SmartBill, Fatture in Cloud, Xero, QuickBooks Online, Fortnox i Sage — każda z zaszyfrowanymi danymi uwierzytelniającymi, operacjami push / status / void i kolejką ponawiania. Zakładka ustawień Integracje używa „lepkiego” selektora dostawcy, dzięki czemu panel, który właśnie konfigurujesz, pozostaje otwarty między zapisami.
- Opcjonalna warstwa AI z pięcioma dostawcami (Anthropic, OpenAI, Google Gemini, DeepSeek, Grok xAI) obsługującymi smart-fill, sprawdzanie compliance, tłumaczenie linii i wyszukiwanie językiem naturalnym; wtyczka w pełni działa bez klucza API.
- Dashboard z selektorem okresu, pięcioma kartami KPI i dwoma wykresami trendów; osobny Log integracji rejestruje każdy push i porażkę.
- Wsparcie WordPress Multisite — każda podwitryna ma własne tabele, ustawienia i liczniki numeracji, a strona w administracji sieci agreguje statystyki.
Wymagania
| Komponent | Minimum |
|---|---|
| WordPress | 5.8 (testowane do 7.0) |
| PHP | 8.0 |
| WooCommerce | 7.0 |
| Baza | MySQL 5.7 lub MariaDB 10.2 (SQL dashboardu używa JSON_EXTRACT / JSON_UNQUOTE na niezmiennej kolumnie snapshot) |
Integracja z checkoutem blokowym jest rejestrowana przez WooCommerce Additional Checkout Fields API (wprowadzone w WooCommerce 8.6). Na starszych wersjach WooCommerce klasyczny filtr woocommerce_billing_fields dalej dodaje VAT, kod podatkowy i pola specyficzne dla kraju do checkoutu shortcode’owego, więc wtyczka degraduje się gracjalnie.
Instalacja
- Pobierz najnowszy ZIP Invoice Pilota ze strony GitHubowych Releases .
- W WordPressie otwórz Wtyczki → Dodaj nową → Wyślij wtyczkę.
- Wybierz ZIP i kliknij Zainstaluj teraz.
- Kliknij Włącz wtyczkę.
- Otwórz Invoice Pilot → Ustawienia, by skonfigurować dane sprzedawcy, serie numeracji i opcjonalne integracje.
Aktywacja tworzy tabele bazy wtyczki, instaluje domyślne ustawienia i zasiewa pięć serii numeracji (jedna per typ dokumentu): INV (faktura, domyślna), REC (paragon), CN (nota kredytowa), PRO (proforma) i Q (oferta), wszystkie używające wzorca YYYY-NNNN z roczną resetacją. Zaplanowane są też cztery zadania cron: codzienne czyszczenie logu, ponawianie nieudanych pushy integracji co piętnaście minut, godzinowa rewalidacja VIES i codzienne odświeżanie tokenu Fatture in Cloud.
W WordPress Multisite ten sam bootstrap per witryna odpala się automatycznie, gdy tworzona jest nowa podwitryna (wp_initialize_site).
Konfiguracja
Wszystkie ekrany Invoice Pilota leżą pod głównym menu Invoice Pilot w bocznym pasku admina WordPressa:
- Dashboard — karty KPI i wykresy trendów.
- Dokumenty — nowoczesna data-grid listująca każdy wystawiony dokument (faktura, nota kredytowa, proforma, oferta, paragon), z jednolitym paskiem narzędzi (wyszukiwanie AI + filtr typu), kolorowymi pigułkami statusu (paid / void / converted / draft / issued), paginacją po 20 wierszy i akcjami inline PDF / XML / Usuń.
- Ustawienia — ośmiozakładkowa strona konfiguracji (udokumentowana poniżej).
- Log — wpisy logu integracji z retencją i ręczną akcją czyszczenia.
Strona Ustawień dzieli się na następujące zakładki, w kolejności pojawiania się w UI:
- Ogólne
- Serie
- Typy dokumentów
- Szablony
- Walidacja VAT
- Integracje
- AI
- Zaawansowane
Ogólne

Zakładka Ogólne jest podzielona na trzy karty: Licencja, Dane sprzedawcy i Domyślne dokumentu.
Licencja
| Pole | Uwagi |
|---|---|
| Klucz licencyjny | Wklej klucz PILOT-XXXX-XXXX-XXXX-XXXX z maila potwierdzającego zamówienie i wciśnij Zweryfikuj i zapisz, by włączyć automatyczne aktualizacje wtyczki z kanału release GitHub. Wtyczka dalej wystawia dokumenty bez klucza; bramkowany jest tylko kanał auto-update. |
Dane sprzedawcy zawierają tożsamość drukowaną na każdym wystawionym dokumencie; Domyślne dokumentu zawierają parę domyślnych ustawień na poziomie WooCommerce.
| Pole | Domyślne | Uwagi |
|---|---|---|
| Nazwa sprzedawcy | puste | Tekst dowolny. |
| VAT | puste | Identyfikator VAT sprzedawcy. |
| Kod podatkowy | puste | Włoski codice fiscale lub odpowiednik. |
| Adres | puste | Ulica. |
| Kod pocztowy / CAP | puste | Kod pocztowy. |
| Miasto | puste | |
| Prowincja (2 litery, tylko IT) | puste | Wymuszone do wielkich liter przy zapisie. |
| Kraj (ISO, 2 litery) | IT | ISO-3166-1 alpha-2; wymuszone do wielkich liter. |
| puste | Walidowane jako adres e-mail. | |
| Logo | puste | Wybrane z biblioteki mediów WordPressa. PNG albo SVG z przezroczystym tłem działa najlepiej; zalecana wysokość 64–128 px. Logo jest drukowane w prawym górnym rogu faktury. |
| IBAN | puste | Używany przez writery, które emitują instrukcje płatności. Drukowany w stopce faktury i osadzany w FatturaPA <DatiPagamento>. |
| Bank name | puste | Tekst dowolny — drukowany pod IBAN-em w stopce faktury i emitowany jako <IstitutoFinanziario> w bloku FatturaPA <DettaglioPagamento>. |
| SWIFT / BIC | puste | 8 lub 11 znaków alfanumerycznych; przy zapisie wymuszane do wielkich liter i pozbawiane białych znaków. Drukowany obok IBAN-u i emitowany jako <BIC> w FatturaPA. |
| Status wyzwalający | processing | Status zamówienia WooCommerce wyzwalający automatyczne wystawienie faktury. Dozwolone wartości: processing, completed, on-hold, pending. |
| Domyślna seria | INV | Slug serii numeracji używanej dla nowych faktur. |
| VAT number format on PDF | Prefixed — VAT IT04032690614 (styl VIES, zalecane) | Jak numer VAT sprzedawcy jest drukowany na wyrenderowanej fakturze i podglądzie PDF. Wartości: Prefixed (kod kraju przed numerem, w stylu VIES), Bare (sam numer, tak jak wpisany w Dane sprzedawcy → VAT). Domyślnie Prefixed. |
| Pola fakturowania specyficzne dla kraju | Tylko Włochy (SDI / PEC / reżim fiskalny) | Selektor tri-state, który kontroluje, które pola specyficzne dla kraju są pokazywane na checkoucie. Wartości: Wyłączone — pokazywane są tylko uniwersalne pola VAT i kodu fiskalnego, Tylko Włochy (SDI / PEC / reżim fiskalny), Wszystkie pola UE-27 specyficzne dla kraju. Działa zarówno na checkoucie blokowym, jak i klasycznym checkoucie shortcode’owym. Każde pole ma tłumaczalną etykietę (np. SDI recipient code, Certified email (PEC), SIRET, Steuernummer) — stare surowe nazwy snake_case zniknęły. |
Serie

Zakładka Serie to tabela CRUD nad seriami numeracji trzymanymi we własnej tabeli series wtyczki. Każdy wiersz kontroluje, jak numerowane są dokumenty danego typu.
Kolumny: Slug, Wzorzec, Licznik, Reset, Domyślna, Włączona, Akcje (Edytuj / Usuń).
Formularz Dodaj / Edytuj wystawia:
| Pole | Dozwolone wartości | Domyślne |
|---|---|---|
| Slug | Identyfikator małymi literami. Musi być unikalny. | puste |
| Typ dokumentu | invoice, receipt, credit_note, proforma, quote. | invoice |
| Wzorzec | Tekst dowolny; placeholdery {YYYY} (rok) i {NNNN} (licznik) są rozwijane w czasie wystawiania. | INV-{YYYY}-{NNNN} |
| Licznik | Liczba całkowita, jeden lub większa. Następny numer do przypisania — najbliższy dokument wystawiony z tej serii dostanie dokładnie tę wartość (więc Licznik = 47 da następnym razem INV-2026-0047, a nie INV-2026-0048). | 1 |
| Strategia resetowania | never, yearly. | never |
| Domyślna | Boolean — oznacz tę serię jako domyślną dla nowych dokumentów tego typu. | wyłączone |
| Włączona | Boolean — pozwala używać tej serii. | włączone |
Zmiana sluga aktualizuje wiersz serii w miejscu (zachowując ID i wszystkie referencje) i automatycznie migruje ustawienie default_series, jeśli wskazywało na stary slug. Usunięcie serii nie kasuje istniejących dokumentów; zachowują swoje numery.
Typy dokumentów

Zakładka Typy dokumentów przełącza opcjonalne typy dokumentów i wystawia ustawienia bollo i ritenuta specyficzne dla FatturaPA.
Karta Typy dokumentów
| Przełącznik | Domyślne | Opis |
|---|---|---|
| Automatycznie wystawiaj notę kredytową przy zwrocie WC | włączone | Gdy w WooCommerce zostaje utworzony zwrot, automatycznie wystaw notę kredytową powiązaną z oryginalną fakturą. |
| Włącz dokumenty proforma | włączone | Pokaż przycisk „Utwórz proformę” na ekranie zamówienia WC i pozwól konwertować do faktury. |
| Włącz dokumenty oferty (preventivo) | włączone | Pokaż przycisk „Utwórz ofertę” na ekranie zamówienia WC. Oferty są niefiskalne: powstaje PDF, ale bez XML. |
Karta FatturaPA — włoskie B2B
| Pole | Domyślne | Opis |
|---|---|---|
| Bollo virtuale assolto | wyłączone | Emituj DatiBollo (2,00 EUR znaczek wirtualny) na fakturach powyżej 77,47 EUR, gdy obowiązek został zadeklarowany w Agenzia delle Entrate. |
| Zastosuj Ritenuta d’acconto | wyłączone | Wylicz i emituj DatiRitenuta na fakturach do włoskich kupujących B2B. |
| Domyślna stawka | 20.00 % | 0–100, krok 0.01. |
| Tipo ritenuta | RT02 | RT01 (persone fisiche) albo RT02 (persone giuridiche). |
| Causale pagamento | A | Jedna wielka litera z tabeli SDI 1.1.5.2 (np. A = usługi profesjonalne). |
Szablony

Wybierz jeden z trzech wbudowanych szablonów PDF i dostosuj jego kolory oraz typografię.
| Szablon | Opis |
|---|---|
| Minimal | Czysty układ bezszeryfowy z akcentem teal. Domyślny. |
| Classic | Typografia szeryfowa z kolorową belką nagłówka. Tradycyjny wygląd dla usług profesjonalnych. |
| Modern | Dwukolumnowy nagłówek i zaokrąglone karty. Pasuje markom z mocnym designem. |
Dodatkowe pola:
| Pole | Domyślne | Uwagi |
|---|---|---|
| Kolor główny | #1e8a8a | Natywny selektor koloru HTML5; akcent dla nagłówków, separatorów i nagłówków tabel. |
| Font | Site theme font (system stack) | Jedno z: default, dejavusans, dejavuserif, dejavusansmono, helvetica, times, courier. Wartość default używa systemowego stacka fontów witryny z DejaVuSans jako fallbackiem PDF. |
| Kolor tekstu | #222222 | Domyślny kolor treści. Wyciszone podpisy i stopki zachowują swój jaśniejszy ton. |
Zakładka osadza też podgląd PDF na żywo (renderowany przez endpoint REST /wp-json/invoice-pilot/v1/preview-template), dzięki czemu możesz porównywać szablony obok siebie przed zapisem. Zmiana radio przełącza iframe od razu; wybór utrwala się dopiero po wciśnięciu Zapisz szablon.

Nad iframem siedzi selektor Typ dokumentu, dzięki czemu możesz podejrzeć, jak każdy z czterech typów dokumentów jest renderowany — invoice, credit_note, proforma, quote — z tym samym szablonem, przykładowym sprzedawcą i przykładowym kupującym. Różnice stosowane per typ to:
| Typ | Tytuł | Prefiks numeru | Pigułka statusu | Baner ostrzegawczy | Płatność / IBAN |
|---|---|---|---|---|---|
invoice | Faktura | INV- | ISSUED | — | pokazany |
credit_note | Nota kredytowa | CN- | CREDIT NOTE | Zwrot dla INV-… | ukryty |
proforma | Proforma | PRO- | PROFORMA | Proforma — dokument niefiskalny. | pokazany |
quote | Oferta | Q- | QUOTE | Oferta — dokument niefiskalny, podlega akceptacji. | ukryty |
Oferty dodatkowo zmieniają wyróżnione komórki „Wystawiono” / „Termin płatności” na Ważne do i przemianowują główny totalk na Szacunkowa kwota; noty kredytowe zmieniają go na Łączna kwota zwrotu. Te różnice biorą się z mapy nadpisań etykiet per typ i z helpera doc_type_context() podawanego do silnika szablonów, dzięki czemu trzy wbudowane projekty (Minimal / Classic / Modern) utrzymują spójną tożsamość wizualną w obrębie typów dokumentów bez dublowania plików szablonów.
Stopka zawsze pokazuje kraj kupującego w pełnej angielskiej formie (np. Germany, nie DE) — kod ISO z zamówienia jest przed renderem rozwiązywany przez PHP-owe Locale::getDisplayRegion(), dzięki czemu wyrenderowana faktura pozostaje czytelna dla ludzkich kupujących i audytorów podatkowych. Sam numer VAT sprzedawcy jest drukowany zgodnie z VAT number format on PDF w Ogólne → Domyślne dokumentu — domyślnie w stylu VIES z prefiksem (VAT IT04032690614), z opcją Bare dla jurysdykcji, które wolą sam numer.
Dispatcher dobierający właściwy envelope XML per kraj kupującego to filtr invoice_pilot_xml_writer_for_country, więc kod hosta może nadpisać per ISO (zobacz Hooks and filters).
Walidacja VAT

Identyfikatory VAT wpisane na checkoucie (i na każdym ekranie adresu, który wystawia to pole) są przepuszczane przez łańcuch walidatorów. Każdy walidator włącza się niezależnym przełącznikiem i odpala po kolei, aż któryś zwróci pozytywny wynik; zarówno udane, jak i negatywne odpowiedzi są cache’owane na skonfigurowany TTL.
| Walidator | Domyślne | Opis |
|---|---|---|
| VIES (EU SOAP) | włączone | Krzyżowo sprawdza unijne ID VAT wobec usługi VIES Komisji Europejskiej. |
| Format per kraj | włączone | Walidacja regexowa offline per kraj. Zawsze zalecana jako fallback. |
| Pole | Domyślne | Zakres / Uwagi |
|---|---|---|
| TTL cache (godziny) | 24 | 1 – 720. Nieudane lookupy VIES starsze niż 6 godzin są rewalidowane przez cron godzinowy. |
| Wewnątrzunijny reverse charge B2B | włączone | Gdy nabywca jest w innym państwie członkowskim UE niż sprzedawca i poda VAT, który łańcuch potwierdzi jako poprawny, WooCommerce automatycznie zeruje VAT w koszyku (nabywca rozlicza VAT we własnym kraju). Pole VAT zyskuje też live-badge — zielony ✓ przy sukcesie, czerwony ✕ przy błędzie. |
| Odlicz VAT, jeśli klient jest w kraju bazowym | wyłączone | Większość jurysdykcji tego NIE pozwala — zostaw wyłączone, chyba że masz konkretną poradę podatkową, że dotyczy to Twojego biznesu. Gdy włączone, ważny krajowy VAT B2B wyzwala odliczenie reverse charge także na sprzedaży krajowej. |
Tylko do odczytu wiersz Stan cache raportuje liczbę zacache’owanych wpisów i ile z nich wygasło i czeka na eviction.
Test walidacji VAT — mała karta testera pod ustawieniami odpala każdego providera bezpośrednio na jednym numerze VAT, omijając kolejność łańcucha i cache, dzięki czemu zobaczysz, czy VIES faktycznie potwierdził numer, czy zrobił to tylko offline’owy check formatu.
Zasiej standardowe stawki VAT UE-27 — karta na dole wypełnia WooCommerce → Ustawienia → Podatek → Stawki standardowe aktualną standardową stawką VAT dla każdego państwa członkowskiego UE-27 (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%). Domyślnie wstawiane są tylko brakujące kraje; zaznacz Nadpisz istniejące stawki, aby wymusić odświeżenie każdego wiersza do wartości kanonicznej (przydatne po krajowej podwyżce VAT). Karta listuje też każdą parę (ISO, stawka), więc widzisz dokładnie, co zostanie zapisane, zanim klikniesz przycisk.
Integracje
Zakładka Integracje renderuje jeden panel per zarejestrowany dostawca integracji za pojedynczym selektorem Dostawca u góry — wybierz dostawcę, którego chcesz skonfigurować, i widoczna jest tylko jego karta, pozostałe pozostają w DOM ukryte. Selektor jest lepki między zapisami: gdy zapisujesz formularz dostawcy (albo trafiasz na zakładkę z ?integration=<id> w URL-u), kolejny render utrzymuje tego dostawcę wybranym, dzięki czemu nie zostajesz odbity do tego, który jest pierwszy w kolejności rejestracji.
Domyślnie Invoice Pilot dostarcza sześciu dostawców; kod zewnętrzny może zarejestrować dodatkowych przez filtr invoice_pilot_integration_providers.
Każdy panel dostawcy zamyka karta Status połączenia z przyciskiem Testuj połączenie. Przycisk wystawia lekkie żądanie wobec zapisanych danych i drukuje odpowiedź upstreamu — najpierw zapisz formularz, jeśli właśnie wkleiłeś nowe tokeny.
SmartBill

Rumuński dostawca fakturowania. Dane uwierzytelniające są szyfrowane at rest w symetrycznej warstwie kryptograficznej wtyczki.
| Pole | Domyślne | Uwagi |
|---|---|---|
| Włącz SmartBill | wyłączone | Push wystawionych faktur do SmartBill od razu po ich wyemitowaniu. |
| Nazwa użytkownika API | puste | Nazwa użytkownika, którą logujesz się do SmartBill. |
| Token | puste | Wklej token API SmartBill. Wartość jest szyfrowana w bazie; przy kolejnych zapisach zostaw pole puste, by ją zachować. |
| CIF (firma) | puste | Rumuński kod VAT firmy. |
| Seria | puste | Seria SmartBill używana dla pushowanych faktur. |
Po włączeniu Invoice Pilot przy wystawieniu woła POST /SBORO/api/v2/invoice, potem pull_status na reconciliation i void, gdy faktura zostaje anulowana.
Fatture in Cloud

Włoski dostawca fakturowania. Tokeny OAuth są szyfrowane w bazie. Codzienny cron invoice_pilot_refresh_fic_token odświeża access token automatycznie, gdy integracja jest włączona.
| Pole | Domyślne | Uwagi |
|---|---|---|
| Włącz Fatture in Cloud | wyłączone | Push wystawionych dokumentów (faktur, not kredytowych, proform, ofert) do Fatture in Cloud od razu po wyemitowaniu. |
| Client ID | puste | Identyfikator klienta OAuth. |
| Access token | puste | Wklej access token OAuth. Wartość jest szyfrowana; przy kolejnych zapisach zostaw pole puste, by ją zachować. |
| Refresh token | puste | Obsługiwany tak samo jak access token. |
| ID firmy | 0 | Numeryczny identyfikator firmy na Twoim koncie Fatture in Cloud. |
| Twórz klientów | włączone | Automatycznie zakładaj rekord klienta w FIC przy pierwszej fakturze dla nowego kupującego. |
Zgodnie z polityką produktową Fatture in Cloud, Invoice Pilot nie wysyła FatturaPA do SDI w Twoim imieniu. Wysyłka do SDI pozostaje osobnym ręcznym krokiem z poziomu Twojego konta FIC.
Xero

Globalna platforma księgowa. Tokeny OAuth 2.0 są szyfrowane w bazie. Zakładka ustawień jest podzielona na Connection (status + przyciski Connect / Disconnect) u góry oraz Settings (dane uwierzytelniające aplikacji + zachowanie pushu) poniżej.
Łączenie
Invoice Pilot dostarcza wbudowany przepływ OAuth — nie musisz już robić tego tańca w Postmanie i wklejać czterech ciągów do formularza. Konfiguracja od początku do końca wygląda tak:
- Utwórz aplikację Web na developer.xero.com z URI przekierowania wydrukowanym w panelu Connection — skopiuj go dosłownie, Xero porównuje go znak po znaku. Aplikacje utworzone po 2 marca 2026 mogą żądać wyłącznie granularnego zestawu uprawnień; Invoice Pilot dobiera odpowiedni automatycznie.
- Wygeneruj Client secret na stronie aplikacji Xero (Xero pokazuje go tylko raz), następnie wklej Client ID i Client secret do formularza Settings i zapisz.
- Kliknij Connect to Xero. Zostaniesz przeprowadzony przez standardowy ekran zgody i, jeśli Twoje konto autoryzuje więcej niż jedną organizację, zostaniesz przekierowany do selektora wewnątrz karty, by wybrać docelowego tenanta. Tokeny są wymieniane i zapisywane automatycznie.
- Disconnect czyści access + refresh tokeny i tenant id, pozostawiając jednocześnie dane uwierzytelniające aplikacji, by ułatwić ponowne połączenie.
Pushe używają POST /Invoices ze standardowym nagłówkiem Idempotency-Key
wyprowadzonym z lokalnego id faktury + numeru, więc ponowienie
sieciowe zwija się do tego samego Xero InvoiceID zamiast tworzyć
duplikat. Refresh token rotuje automatycznie przy 401; jeśli
kiedykolwiek wygaśnie (Xero unieważnia refresh tokeny po 60 dniach
braku aktywności), wystarczy kliknąć Connect ponownie.
Pola
| Pole | Domyślne | Uwagi |
|---|---|---|
| Enable Xero | wyłączone | Push wystawionych dokumentów do Xero od razu po wyemitowaniu. |
| Client ID / Client secret | puste | Dane uwierzytelniające aplikacji OAuth 2.0 z Xero Developer Portal. Wymagane, zanim będzie można użyć Connect. |
| Access token / Refresh token (zaawansowane) | puste | Wypełniane automatycznie przez przycisk Connect. Wklejaj ręcznie tylko, jeśli tokeny pozyskałeś poza tym UI. |
| Tenant ID | puste | UUID organizacji Xero. Wypełniany automatycznie przez Connect (jedna organizacja) lub ustawiany przez selektor tenanta w karcie (wiele organizacji). |
| Default account code | 200 | Kod konta przychodowego stemplowany na każdej pushowanej linii. Domyślne regionalne: UK/NZ 200, US 400, AU 200. Swój znajdziesz w Accounting → Chart of accounts w Xero. |
| Default tax type | OUTPUT | Xero TaxType stosowany do linii opodatkowanych. Częste wartości: OUTPUT (standardowy podatek od sprzedaży), OUTPUT2 (stawka obniżona), EXEMPTOUTPUT, NONE. Linie z zerowym VAT-em wracają automatycznie do NONE. |
| Invoice status on push | AUTHORISED | Jedno z: DRAFT (edytowalne w Xero, jeszcze nie jest właściwą fakturą), SUBMITTED (oczekuje na zatwierdzenie), AUTHORISED (sfinalizowane). Cokolwiek innego jest sanityzowane z powrotem do AUTHORISED. |
| Payment account UUID | puste | Xero AccountID konta bankowego/kasowego używany przy rejestrowaniu płatności. Znajdź go przez GET /api.xro/2.0/Accounts?where=Type=="BANK" lub w UI Xero (Chart of accounts → click the bank account → URL contains the UUID). Zostaw puste, by wyłączyć rejestrowanie płatności. |
QuickBooks Online

Intuit QuickBooks Online — US / CA / UK / globalnie. Tokeny OAuth 2.0 są szyfrowane w bazie. Zakładka ustawień jest podzielona na Connection (status + przyciski Connect / Disconnect) u góry oraz Settings (dane uwierzytelniające aplikacji + zachowanie pushu) poniżej.
Łączenie
Invoice Pilot dostarcza wbudowany przepływ OAuth — nie musisz już robić tego tańca w Postmanie i wklejać pięciu ciągów do formularza. Konfiguracja od początku do końca wygląda tak:
- Utwórz aplikację na developer.intuit.com
z QuickBooks Online and Payments jako platformą oraz scope’em
com.intuit.quickbooks.accounting. Otwórz zakładkę Keys & OAuth i przełączaj się między Development a Production w zależności od środowiska, na które celujesz — każde ma własną parę client_id + secret. - Dodaj URI przekierowania wydrukowany w panelu Connection do listy
Redirect URIs i kliknij Save — Intuit akceptuje
http://localhostdla aplikacji Development. - Wklej Client ID i Client secret do formularza Settings, wybierz pasujące Environment (Sandbox / Production) i zapisz.
- Kliknij Connect to QuickBooks. Ekran zgody Intuit pozwala
wybrać firmę, do której integracja ma zapisywać; wybrany
realmIdjest zwracany w URL-u callbacku i zapisywany automatycznie — nie ma osobnego selektora tenanta. - Disconnect czyści access + refresh tokeny oraz realm id, pozostawiając jednocześnie dane uwierzytelniające aplikacji, by ułatwić ponowne połączenie.
Każdy push używa POST /v3/company/{realmId}/invoice z parametrem
zapytania requestid ustawionym na stabilną wartość per faktura —
QBO zwija ponawiane POST-y do oryginalnej odpowiedzi, więc ponowienie
sieciowe nigdy nie utworzy duplikatu. Pushe niosą też
minorversion=75, dzięki czemu QBO zwraca aktualne kształty encji
(bez tego API po cichu schodzi do kontraktu z 2017 roku). Refresh
tokeny żyją 100 dni od wystawienia i rotują przy każdym użyciu;
wtyczka obsługuje rotację transparentnie przy 401.
Pola
| Pole | Domyślne | Uwagi |
|---|---|---|
| Enable QuickBooks Online | wyłączone | Push wystawionych dokumentów od razu po wyemitowaniu. |
| Environment | sandbox | sandbox (domyślne) trafia na sandbox-quickbooks.api.intuit.com; production trafia na quickbooks.api.intuit.com. Każde środowisko ma własną parę Client ID + secret na stronie aplikacji Intuit. |
| Client ID / Client secret | puste | Dane uwierzytelniające aplikacji OAuth 2.0 z zakładki Keys & OAuth Twojej aplikacji Intuit Developer. Wymagane, zanim będzie można użyć Connect. |
| Access token / Refresh token (zaawansowane) | puste | Wypełniane automatycznie przez przycisk Connect. Access tokeny QBO żyją około 60 minut i rotują przez refresh token; refresh tokeny żyją 100 dni od wystawienia i rotują przy każdym użyciu. Wklejaj ręcznie tylko, jeśli tokeny pozyskałeś poza tym UI. |
| Realm ID | puste | Identyfikator firmy QuickBooks. Wypełniany automatycznie przez Connect — QBO przekazuje go jako realmId w callbacku OAuth. Firmy sandbox wyglądają jak 9341457147734811; realmy produkcyjne są podobne. |
| Default customer ID | puste | QBO Customer.Id, do którego dołączana jest każda pushowana faktura. Wymagane — QBO odrzuca faktury bez CustomerRef. Znajdziesz go w Sales → Customers w UI QBO lub przez GET /v3/company/{realmId}/query?query=select * from Customer. |
| Default item ID | 1 | QBO Item.Id używany dla każdej linii. 1 to domyślna pozycja “Services” w świeżym sandboxie; swój znajdziesz w Sales → Products and services. |
| Default tax code | NON | QBO TaxCodeRef stosowany do każdej linii. NON = nieopodatkowane (domyślne), TAX = domyślny sales tax na kontach US/CA. Nadpisz per jurysdykcję, konfigurując kod podatkowy w QBO i wklejając tu jego nazwę. |
Fortnox

Szwedzka platforma księgowa. Dane OAuth 2.0 szyfrowane w bazie.
| Pole | Domyślne | Uwagi |
|---|---|---|
| Włącz Fortnox | wyłączone | Push wystawionych dokumentów od razu po wyemitowaniu. |
| Client ID / Client secret | puste | Dane OAuth 2.0 z portalu developerskiego Fortnox. |
| Access token / Refresh token | puste | Szyfrowane w bazie. |
| Domyślny numer klienta | puste | Używany, gdy kupujący nie ma rozwiązanego numeru klienta w Fortnox. |
| Domyślny VAT | 25 | Domyślna szwedzka stawka VAT (w %) stosowana, gdy nie ma zmapowanej. |
| Księguj przy pushu | wyłączone | Twórz też voucher księgowy przy pushowaniu faktury. |
Sage

Platforma księgowa OAuth 2.0 (Sage Accounting / Business Cloud).
| Pole | Domyślne | Uwagi |
|---|---|---|
| Włącz Sage | wyłączone | Push wystawionych dokumentów od razu po wyemitowaniu. |
| Client ID / Client secret | puste | Dane OAuth 2.0 z Sage Developer. |
| Access token / Refresh token | puste | Szyfrowane w bazie. |
| Business ID | puste | Identyfikator biznesu Sage, do którego zapisuje integracja. |
| Domyślny contact id / ledger id / tax rate id | puste | Fallbacki stosowane, gdy snapshot nie niesie odpowiedniego mapowania. |
AI

Zakładka AI jest podzielona na dwie karty: Konfiguracja dostawcy i Funkcje. Wtyczka w pełni działa bez klucza API; ta zakładka dodaje opcjonalne funkcje AI.
Konfiguracja dostawcy
| Pole | Uwagi |
|---|---|
| Dostawca | Anthropic (domyślnie), OpenAI, Google Gemini, DeepSeek albo Grok (xAI). Każdy dostawca trzyma własny zaszyfrowany klucz API, więc możesz się między nimi przełączać bez ponownego wklejania danych. |
| Klucz API | Trzymany zaszyfrowany. Karta pokazuje zieloną odznakę Configured, gdy klucz jest już w bazie. Link „Get your API key from …” prowadzi do konsoli wybranego dostawcy. |
| Model | Lista per dostawca (zobacz tabelę niżej). Pierwszy model z listy jest używany jako domyślny, gdy nie skonfigurowano modelu. |
| Testuj połączenie | Woła endpoint messages / chat/completions dostawcy promptem na jeden token i raportuje sukces albo błąd upstreamu. |
Modele oferowane per dostawca:
| Dostawca | Modele |
|---|---|
| Anthropic | Claude Opus 4.7 (najwyższa jakość, domyślny), Claude Sonnet 4.6 (zalecany), Claude Haiku 4.5 (szybki, tani) |
| OpenAI | GPT-5 (najwyższa jakość), GPT-5 mini (szybki), GPT-4o, GPT-4o mini (najtańszy) |
| Google Gemini | Gemini 2.5 Pro, Gemini 2.5 Flash (najlepszy stosunek wartości), Gemini 2.5 Flash Lite (najtańszy) |
| DeepSeek | DeepSeek V3.2 Chat, DeepSeek V3.2 Reasoner |
| Grok (xAI) | Grok 4.1 Fast, Grok 4, Grok 3, Grok 3 Mini |
Funkcje
| Przełącznik | Domyślne | Opis |
|---|---|---|
| Smart-fill billingu | wyłączone | Klienci wklejają wolny blok danych rozliczeniowych na checkoucie; model wypełnia formularz strukturalnie. |
| Wywołania smart-fill na godzinę | 5 | Limit rate per sesja. |
| Pre-flight check compliance | wyłączone | AI skanuje każdą fakturę przed wystawieniem i flaguje potencjalne problemy. |
| Blokuj wystawienie przy znaleziskach poziomu error | wyłączone | Gdy zostanie znaleziony krytyczny problem, zablokuj wystawienie faktury. |
| Wywołania compliance na godzinę | 10 | |
| Tłumacz opisy linii | wyłączone | Użyj AI do tłumaczenia linii faktur na język kupującego. Świadome Polyglota, gdy bratnia wtyczka jest zainstalowana. |
| Wyszukiwanie dokumentów językiem naturalnym | wyłączone | Zapytania wolnym tekstem na stronie admina Dokumenty. |
| Wywołania wyszukiwania na godzinę | 10 |
Zaawansowane

Retencja i odinstalowanie
| Pole | Domyślne | Zakres |
|---|---|---|
| Retencja logu (dni) | 90 | 1 – 3650. Wpisy logu integracji starsze niż to są kasowane przez codzienny cron. |
| Wyczyść dane przy odinstalowaniu | wyłączone | Usuń wszystkie tabele i opcje Invoice Pilota, gdy wtyczka jest odinstalowywana. Destrukcyjne. Domyślnie wyłączone. |
Akcje konserwacyjne
- Uruchom czyszczenie logu teraz — odpala akcję
invoice_pilot_cleanup_logsnatychmiast, zamiast czekać na codzienny cron. - Wyczyść cache walidacji — kasuje każdy wiersz z tabeli cache walidacji VAT.
Drobny wiersz Wersje na dole drukuje bieżącą wersję wtyczki i wersję schematu bazy.
Użytkowanie
Automatyczne wystawienie faktury z zamówienia WooCommerce
Domyślny przepływ nie wymaga żadnej ręcznej akcji.
- Klient składa zamówienie w WooCommerce. Checkout wystawia pola Numer VAT i Kod podatkowy plus pola specyficzne dla kraju zarejestrowane dla kraju rozliczeniowego (na przykład SDI recipient code i Certified email (PEC) na zamówieniach
IT). Pole VAT jest walidowane na żywo, gdy klient wpisuje — zielony badge ✓ pojawia się wewnątrz inputa, gdy łańcuch potwierdza numer, czerwony ✕ gdy zawodzi. Jeśli nabywca jest w innym państwie członkowskim UE i VAT jest poprawny, WooCommerce automatycznie zeruje VAT w koszyku (wewnątrzunijny reverse charge B2B — zob. Ustawienia → Walidacja VAT). - Gdy zamówienie osiąga status wyzwalający zdefiniowany w Ustawienia → Ogólne → Status wyzwalający (
processingdomyślnie), Invoice Pilot wystawia fakturę z użyciem Domyślnej serii (INVdomyślnie), zapisuje niezmienny snapshot JSON zamówienia, renderuje PDF, generuje envelope XML dla kraju kupującego i pushuje do każdej włączonej integracji. - Ekran zamówienia dostaje meta box Invoice Pilot wymieniający wystawione dokumenty z linkami do PDF i XML, plus przyciski akcji Regeneruj, Wystaw ponownie, Unieważnij, Utwórz notę kredytową, Utwórz proformę, Utwórz ofertę i Push do dostawcy.

Meta box Invoice Pilot wystawia, dla najnowszego nieunieważnionego
dokumentu zamówienia: numer dokumentu (np. INV-2026-0063),
pigułkę statusu (Wystawiony / Opłacony / Unieważniony), przyciski
pobierania PDF i XML (linki REST podpisane tokenem), akcję
Regeneruj dokument, która re-renderuje artefakty wobec bieżącego
szablonu i ustawień sprzedawcy bez zmiany numeru dokumentu, oraz
sekcję Inne dokumenty wystawiającą przyciski jednym kliknięciem
Utwórz proformę i Utwórz ofertę. Gdy włączona jest jakaś
integracja, obok linków PDF / XML pojawia się przycisk Push do
dostawcy, który powtarza wywołanie integracji wobec skonfigurowanego
celu.
Wystawianie ręczne
Jeśli automatyczne wystawianie jest wyłączone albo zamówienie jeszcze nie osiągnęło statusu wyzwalającego, meta box zamówienia wystawia przycisk Wystaw teraz. Obowiązuje ten sam przepływ — snapshot, PDF, XML, push integracji — ale odpala się na żądanie.
Noty kredytowe ze zwrotów
Gdy Automatycznie wystawiaj notę kredytową przy zwrocie WC jest włączone (domyślnie), każdy zwrot WooCommerce utworzony wobec zamówienia z istniejącą fakturą wyzwala notę kredytową w serii CN. Nota kredytowa linkuje wstecz do faktury nadrzędnej i odnosi się do niej w XML. Wyrenderowany PDF niesie u góry baner „Zwrot dla INV-…”, pigułkę statusu CREDIT NOTE, Łączna kwota zwrotu w wyróżnionej komórce i ukrywa stopkę IBAN / metoda płatności (oryginalny przepływ płatności już nie obowiązuje). Notę kredytową możesz też wystawić ręcznie — pełną albo częściową — z karty Akcje na ekranie edycji faktury, dopóki faktura nadrzędna jest w statusie issued.
Proformy i oferty
Gdy odpowiednie przełączniki są włączone, ekran zamówienia wystawia też przyciski Utwórz proformę i Utwórz ofertę. Oba produkują dokumenty niefiskalne — PDF jest renderowany, ale dla ofert nie generuje się XML. Wyrenderowany PDF niesie wizualne potraktowanie specyficzne dla swojego typu: baner ostrzegawczy u góry („Proforma — dokument niefiskalny.” / „Oferta — dokument niefiskalny, podlega akceptacji.”), pigułkę statusu „QUOTE” / „PROFORMA” w miejsce „ISSUED”, a na ofertach wyróżniona etykieta daty zmienia się na Ważne do, a główny total na Szacunkowa kwota. Oferty ukrywają blok IBAN / metoda płatności, bo nie ma jeszcze należnej płatności.
Proformę można skonwertować na fakturę akcją Konwertuj, która przenumerowuje dokument pod skonfigurowaną serią faktur.
Wysłanie faktury klientowi
Wtyczka rejestruje akcję zamówienia Wyślij fakturę Invoice Pilot do klienta pod standardową listą akcji zamówienia WooCommerce, która e-mailuje PDF do kupującego przez wp_mail() WordPressa.
Pobieranie dokumentów
PDF-y i envelope’y XML są serwowane z publicznie adresowalnego, ale podpisanego tokenem endpointu REST:
GET /wp-json/invoice-pilot/v1/download/{id}/{format}?token=…{format} to pdf lub xml. Token jest generowany w momencie wystawienia dokumentu i drukowany w meta boksie zamówienia i tabeli listy faktur.
Dashboard

Invoice Pilot → Dashboard otwiera kartę Przegląd aktywności nad kartą Trendy. Przegląd aktywności wystawia pasek okresów z czterema oknami — 7 dni, 14 dni, 30 dni (domyślnie) i 90 dni — oraz pięć kart KPI:
- Faktury — łączna liczba dokumentów wystawionych w danym okresie.
- Przychód netto — suma totali netto w walucie sklepu, renderowana
z symbolem waluty zgodnym z locale i dwoma miejscami po przecinku
(np.
€3,876.09lub3.876,09 €w zależności od locale administratora). - Pobrany VAT — suma totali VAT z niezmiennej migawki. Takie samo formatowanie waluty zależne od locale jak Przychód netto. Osobna migracja schematu uzupełnia tę wartość dla faktur wystawionych przed wersją schematu 1.3.1, gdzie kolumna nie była zapełniana w momencie zapisu.
- Średnia wartość — przychód netto podzielony przez liczbę faktur, również sformatowany jako waluta.
- B2B / B2C — podział faktur B2B (kupujący ma numer VAT) wobec faktur B2C w tym samym okresie.
Pod KPI karta Trendy renderuje dwa wykresy obok siebie —
Invoices over time (wykres dwuosiowy line + area, z liczbą faktur
na lewej osi i trendem przychodu netto wypełnionym na prawej osi)
oraz By buyer country (wykres donut z najczęstszymi kodami ISO
kupujących i legendą kolorów pod spodem). Wszystkie liczby są
zasilane przez /wp-json/invoice-pilot/v1/dashboard?days=N.
Lista dokumentów

Invoice Pilot → Dokumenty pokazuje każdy wystawiony dokument z pigułkami statusu (paid / void / converted / draft / issued — kolorowane według stanu cyklu życia), kolumnę Compliance z kolorową odznaką produkowaną przez pre-flight check AI oraz akcje inline PDF / XML / Usuń per wiersz. Strona paginuje po 20 wierszy naraz i wystawia jednolity pasek narzędzi łączący wyszukiwanie AI wolnym tekstem z filtrem typu dokumentu (invoice / credit_note / proforma / quote / receipt) plus bieżący licznik po prawej. Gdy wyszukiwanie AI jest włączone, pole wyszukiwania przyjmuje zapytania wolnym tekstem (na przykład „niemieckie faktury w zeszłym miesiącu powyżej 1000 EUR”), które skonfigurowany dostawca tłumaczy na zapytanie listy; rozwiązane chipy filtra pojawiają się nad tabelą, dzięki czemu widzisz dokładnie, jak model rozparsował Twoje wyrażenie.
Lista zamówień WooCommerce

Invoice Pilot dodaje pojedynczą kolumnę Invoice do standardowej listy zamówień WooCommerce (/wp-admin/admin.php?page=wc-orders), dzięki czemu właściciel sklepu od razu widzi, które zamówienia mają już wystawiony dokument, a które nie, bez wychodzenia z ekranu zamówień. Kolumna siedzi między Order a Date i pokazuje numer dokumentu przypisany przez skonfigurowaną serię (na przykład INV-2026-0063) odczytany dosłownie z niezmiennej kolumny number, z małą ikonką podglądu eye obok numeru, która otwiera wyrenderowany PDF inline w nowej karcie.
Zamówienia bez wystawionego dokumentu renderują półpauzę — przydatne przy debugowaniu niezgodności statusu wyzwalającego albo filtrowaniu zamówień wymagających ręcznego uruchomienia wp invoice-pilot issue. Ten sam renderer podpina zarówno starą kolumnę tabeli postów (manage_edit-shop_order_columns), jak i kolumnę HPOS (manage_woocommerce_page_wc-orders_columns), więc doświadczenie jest identyczne niezależnie od tego, na której warstwie storage zamówień pracuje Twój sklep.
Log integracji

Core\Logger.Invoice Pilot → Log zapisuje każdy push integracji, odpowiedź i porażkę. Pasek narzędzi u góry łączy selektor Bulk actions + przycisk Apply (obecnie jednoakcyjne bulk-delete), listę dostawca i listę akcja — obie wypełnione wartościami faktycznie obecnymi w logu, dzięki czemu pokazują wyłącznie filtry pasujące do realnego wiersza — oraz bieżący licznik wpisów po prawej.
Data-grid niesie osiem kolumn:
| Kolumna | Uwagi |
|---|---|
DATE (UTC) | Pigułka timestampu, UTC. Domyślnie sortowane malejąco. |
PROVIDER | Slug dostawcy małymi literami (fattureincloud, smartbill, xero, …). |
ACTION | Operacja, która wygenerowała wpis (push, pull_status, refresh_token, void). |
INVOICE | Link #<id> z powrotem do dokumentu albo półpauza dla wpisów niezwiązanych z pojedynczą fakturą (odświeżenia tokenu, ręczna konserwacja). |
HTTP | Kolorowa pigułka z kodem statusu upstreamu — zielona dla 2xx, bursztynowa dla 4xx, czerwona dla 5xx (albo dla każdego wpisu z niepustą kolumną error). |
ERROR | Komunikat błędu upstreamu w czerwonym tekście, gdy wywołanie zawiodło; półpauza przy sukcesie. |
MS | Czas trwania wywołania w milisekundach (wall-clock). |
ACTIONS | Czerwona akcja Delete per wiersz do jednorazowego czyszczenia. |
Wrażliwe pola payloadu są redagowane przy zapisie przez Core\Logger wtyczki, więc ciała żądań i odpowiedzi można bezpiecznie trzymać w logu. Stare wpisy są kasowane przez codzienny cron invoice_pilot_cleanup_logs zgodnie z ustawieniem Retencja logu (dni) w zakładce Zaawansowane.
Network admin (Multisite)
W sieci Multisite w bocznym pasku network admin pojawia się dodatkowa strona Invoice Pilot Network. Agreguje liczby faktur i totale we wszystkich podwitrynach, które mają aktywnego Invoice Pilota.
Fakturowanie UE-27
Invoice Pilot dostarcza rejestr pól rozliczeniowych specyficznych dla kraju dla każdego z 27 państw członkowskich UE. Każde pole jest na checkoucie opcjonalne (wtyczka nie wymusza danych B2B-only na zamówieniu B2C); walidacja odpala się tylko, gdy kraj kupującego pasuje do ISO pola.
Rejestr obecnie pokrywa:
| Kraj | Pola |
|---|---|
IT Włochy | ei_recipient_code (7 alfanumerycznych, domyślnie 0000000), ei_certified_email (PEC), fiscal_regime (RF01–RF19) |
FR Francja | siren (9 cyfr), siret (14 cyfr), chorus_pro_service_code |
DE Niemcy | steuernummer, ust_id, leitweg_id, hrb |
ES Hiszpania | nif, face_oficina_contable, face_organo_gestor, face_unidad_tramitadora |
PT Portugalia | nif (9 cyfr), atcud |
NL Holandia | kvk_number (8 cyfr), btw_id |
BE Belgia | bce_number (10 cyfr) |
LU Luksemburg | — |
AT Austria | uid_nummer, firmenbuchnummer, steuernummer |
IE Irlandia | — |
DK Dania | cvr_number (8 cyfr), ean_location_number |
SE Szwecja | organisationsnummer |
FI Finlandia | y_tunnus, ovt_code |
PL Polska | nip (10 cyfr), regon, ksef_id |
CZ Czechy | dic, ico (8 cyfr), data_box_id |
SK Słowacja | dic, ico (8 cyfr), data_box_id |
HU Węgry | tax_number, group_member_id |
SI Słowenia | vat_id, maticna_stevilka |
HR Chorwacja | oib (11 cyfr) |
RO Rumunia | cui |
BG Bułgaria | eik (9–13 cyfr), vat_id |
GR Grecja | afm (9 cyfr), dou_code |
CY Cypr | tic |
MT Malta | id_number |
LT Litwa | company_code |
LV Łotwa | registration_number |
EE Estonia | registry_code |
Integracja z checkoutem blokowym rejestruje pola w przestrzeni invoice-pilot/... przez Additional Checkout Fields API. Domyślnie na checkoucie blokowym wystawione są tylko pola włoskie, by nie zalewać kupujących spoza Włoch; przełącznik Wszystkie pola UE-27 na checkoucie w Ogólne włącza pełen zestaw. Klasyczny checkout shortcode’owy zawsze renderuje cały rejestr przefiltrowany przez wybrany kraj rozliczeniowy.
Pola krajów są utrwalane na zamówieniu, kopiowane do niezmiennego snapshotu faktury i konsumowane przez writery XML — na przykład włoski ei_recipient_code staje się CodiceDestinatario / PECDestinatario w envelopie FatturaPA, a niemiecki leitweg_id staje się BuyerReference / EndpointID 0204 w XRechnung.
Integracje
SmartBill
SmartBill (Rumunia) jest podpięty do IntegrationManager wtyczki przez filtr invoice_pilot_integration_providers i wystawia standardowy interfejs dostawcy: push, pull_status, void i test_connection.
- Push mapuje snapshot faktury na schemat JSON SmartBill i woła
POST /SBORO/api/v2/invoiceze skonfigurowanym CIF i serią. - Status sync uzgadnia stan draft / issued / paid, gdy odpala się piętnastominutowy cron ponawiania.
- Void anuluje wcześniej pushowaną fakturę w SmartBill, gdy faktura źródłowa jest unieważniana w WordPressie.
Wszystkie akcje są logowane do Logu integracji. Porażki są kolejkowane i ponawiane przez cron invoice_pilot_retry_integrations.
Fatture in Cloud
Fatture in Cloud (Włochy) trzyma się tego samego interfejsu dostawcy i mapuje snapshot faktury na kształt entity / items_list oczekiwany przez endpoint dokumentu wystawionego w FIC. Włoskie pola specyficzne dla kraju są mapowane jawnie:
ei_recipient_code→ei_codeei_certified_email→certified_email- VAT kupującego / kod podatkowy / prowincja / kraj → odpowiednie klucze
entity
Dane OAuth są szyfrowane w bazie. Codzienny cron invoice_pilot_refresh_fic_token odświeża access token, gdy integracja jest włączona. Ustawienie Twórz klientów na włączone powoduje, że integracja tworzy nowy rekord klienta w FIC przy pierwszej fakturze dla danego kupującego.
Invoice Pilot nie wysyła FatturaPA do SDI w Twoim imieniu. Wysyłka do SDI pozostaje osobnym ręcznym krokiem z poziomu Twojego konta Fatture in Cloud.
AI smart-fill
Warstwa AI jest w pełni opcjonalna. Bez skonfigurowanego klucza API wtyczka dalej wystawia faktury, renderuje PDF-y i XML, waliduje VAT i pushuje do integracji — niedostępne są tylko cztery funkcje AI niżej.
Wspieranych jest pięciu dostawców:
| Dostawca | Domyślny model | URL klucza API |
|---|---|---|
| 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 |
Klucz API jest trzymany zaszyfrowany w bazie w symetrycznej warstwie kryptograficznej wtyczki. Wciśnięcie Testuj połączenie wystawia minimalne żądanie do wybranego endpointu i powierzchowuje błąd upstreamu, jeśli dane są błędne.
Cztery funkcje da się przełączać niezależnie, gdy klucz jest w bazie:
- Smart-fill na checkoucie — na checkoucie pojawia się pole „Wklej dane rozliczeniowe”. Model parsuje wolny tekst i wypełnia formularz rozliczeniowy WooCommerce, łącznie z polami specyficznymi dla kraju. Limit rate per sesja.
- Pre-flight check compliance — każda faktura jest przepuszczana przez model tuż przed wystawieniem, z opcją blokowania wystawienia przy znaleziskach poziomu error, gdy wykryto krytyczny problem (na przykład włoska faktura B2B bez kodu odbiorcy SDI).
- Auto-tłumaczenie linii — opisy linii faktur są tłumaczone na język kupującego. Gdy bratnia wtyczka Polyglot jest zainstalowana, pipeline tłumaczenia jest delegowany do niej.
- Wyszukiwanie dokumentów językiem naturalnym — pole wyszukiwania na stronie admina Dokumenty przyjmuje zapytania wolnym tekstem, które model tłumaczy na zapytanie listy.
Każda funkcja ma własny limit rate per godzina.
Hooks and filters
Scentralizowane nazwy hooków leżą w klasie \InvoicePilot\Core\Hooks. Pełna lista:
| Hook | Typ | Cel |
|---|---|---|
invoice_pilot_redact_keys | filter | Dodatkowe klucze do redakcji w logowanych payloadach. |
invoice_pilot_xml_writer_for_country | filter | Nadpisz writer XML per ISO kupującego. Dwa argumenty: bieżący writer, ISO. |
invoice_pilot_validator_chain | filter | Nadpisz albo rozszerz łańcuch walidatorów VAT. |
invoice_pilot_integration_providers | filter | Zarejestruj dodatkowych dostawców integracji. |
invoice_pilot_country_fields | filter | Dodaje lub usuwa pola checkoutu specyficzne dla kraju. Dwa argumenty: tablica bieżących pól, kod ISO. |
invoice_pilot_booted | action | Odpala się po bootowaniu wtyczki. Przekazuje singletona. |
invoice_pilot_register_modules | action | Hook rejestracji modułów. |
invoice_pilot_invoice_issued | action | Odpala się po wystawieniu nowej faktury. |
invoice_pilot_invoice_rendered | action | Odpala się po wyrenderowaniu PDF albo XML. |
invoice_pilot_integration_pushed | action | Odpala się po udanym pushu integracji. |
invoice_pilot_integration_failed | action | Odpala się po nieudanym pushu integracji. |
invoice_pilot_cleanup_logs | action | Codzienny cron — kasuje stare wpisy logu integracji. |
invoice_pilot_retry_integrations | action | Piętnastominutowy cron — ponawia nieudane pushe. |
invoice_pilot_revalidate_vies | action | Godzinowy cron — rewaliduje stare wpisy cache VIES. |
invoice_pilot_render_integration_tab | action | Odpalany z zakładki ustawień Integracje, by dostawcy mogli wyrenderować własne karty ustawień. |
invoice_pilot_refresh_fic_token | action | Codzienny cron — odświeża access token Fatture in Cloud. |
Rejestracja własnego writera XML:
add_filter(
'invoice_pilot_xml_writer_for_country',
function ( $writer, $iso ) {
if ( 'NL' === $iso ) {
return new My_Custom_Nl_Writer();
}
return $writer;
},
20,
2
);Rejestracja własnego dostawcy integracji:
add_filter(
'invoice_pilot_integration_providers',
function ( array $providers ) {
$providers[] = new My_Custom_Provider();
return $providers;
}
);Ukrywanie lub rozszerzanie pól checkoutu specyficznych dla kraju (na
przykład aby usunąć monity ei_certified_email (PEC) i fiscal_regime
(kod RF) Włoch, gdy Twój sklep nigdy ich nie potrzebuje — bez forkowania
wtyczki):
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
);Filtr działa zarówno na ścieżce walidacji submitu PHP, jak i na snapshot JS dostarczanym do checkoutu WC Blocks, dzięki czemu obie warstwy pozostają zsynchronizowane. Nazwy maszynowe pól obecnie dostarczanych (użyj ich w filtrze):
| Kraj | Nazwy pól |
|---|---|
| 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 |
Pełny rejestr per kraj jest zdefiniowany w
CountryFieldRegistry::install_defaults() i obejmuje wszystkie ISO EU-27.
FAQ
Czy Invoice Pilot wysyła FatturaPA do SDI?
Nie. Invoice Pilot generuje XML FatturaPA i trzyma go na zamówieniu; wysyłka do SDI jest celowo zostawiona jako osobny ręczny krok (albo integracja Fatture in Cloud na Twoim koncie).
Czy mogę dodać writer dla kraju, którego nie ma w pakiecie?
Tak. Podepnij się pod invoice_pilot_xml_writer_for_country i zwróć własną implementację \InvoicePilot\Modules\Xml\XmlWriterInterface.
Czy działa na checkoucie blokowym WooCommerce?
Tak. Pola specyficzne dla kraju są rejestrowane przez Additional Checkout Fields API z WooCommerce 8.6+, więc pojawiają się i na checkoucie blokowym, i na klasycznym checkoucie shortcode’owym. Na wersjach WooCommerce starszych niż 8.6 używana jest tylko klasyczna ścieżka filtra.
Czy działa na WordPress Multisite?
Tak. Każda podwitryna ma własne tabele, ustawienia i liczniki numeracji. Strona network admin pod Network Admin → Invoice Pilot Network agreguje liczby faktur w sieci. Na nowych podwitrynach tabele i domyślne serie są tworzone automatycznie przez hook wp_initialize_site.
Czy dane uwierzytelniające są szyfrowane?
Tak. Tokeny SmartBill, tokeny OAuth Fatture in Cloud i klucz API AI są szyfrowane w bazie przez \InvoicePilot\Core\Crypto. Pozostawienie pola tokenu pustego przy kolejnym zapisie zachowuje istniejącą zapisaną wartość.
Co stanie się z moimi danymi, jeśli skasuję wtyczkę?
Nic, chyba że tego chcesz. Domyślne Zaawansowane → Wyczyść dane przy odinstalowaniu to wyłączone, więc tabele, opcje, logi integracji i cache walidacji są zachowywane między dezaktywacją i reaktywacją. Włącz tę opcję, jeśli chcesz, by rutyna uninstall.php skasowała wszystko, gdy WordPress kasuje wtyczkę.
Skąd wziąć klucz API do funkcji AI?
Każdy dostawca ma własną konsolę: Anthropic na console.anthropic.com , OpenAI na platform.openai.com , Google AI Studio na aistudio.google.com , DeepSeek na platform.deepseek.com i Grok na console.x.ai . Zakładka AI linkuje wprost do konsoli wybranego dostawcy.
Czy potrzebuję klucza AI, żeby wtyczka działała?
Nie. Funkcje AI (smart-fill, sprawdzanie compliance, tłumaczenie linii, wyszukiwanie językiem naturalnym) są opcjonalne. Główny silnik fakturowy — cykl życia dokumentów, generowanie PDF i XML, walidacja VAT, integracje, dashboard — działa bez klucza API.
Rozwiązywanie problemów
Faktura nie wystawia się, gdy zamówienie przechodzi w Processing
Sprawdź Ustawienia → Ogólne → Status wyzwalający. Domyślny to processing; jeśli go zmieniłeś (np. na completed), rutyna auto-issue odpala się tylko na skonfigurowanym statusie. Możesz też wystawić ręcznie przyciskiem Wystaw teraz z meta boksu zamówienia, niezależnie od wyzwalacza.
Checkout pokazuje za dużo (lub za mało) pól krajów
Domyślnie wystawione są tylko włoskie pola SDI. Otwórz Ustawienia → Ogólne → Document defaults → Pola fakturowania specyficzne dla kraju i wybierz zakres:
Wyłączone— pokazywane są tylko uniwersalne pola VAT i kodu fiskalnego.Tylko Włochy (SDI / PEC / reżim fiskalny)— domyślnie.Wszystkie pola UE-27 specyficzne dla kraju— każde ISO z rejestru.
Ustawienie działa zarówno na checkoucie blokowym, jak i klasycznym checkoucie shortcode’owym. Pola specyficzne dla kraju są nadal ukrywane po stronie klienta, gdy kraj rozliczeniowy nie pasuje.
Walidacja VAT wisi albo wpada w timeout
Usługa VIES bywa wolna albo niedostępna. Wtyczka trzyma cache per VAT na skonfigurowany TTL (24 godziny domyślnie) i rewaliduje stare wpisy co godzinę przez cron invoice_pilot_revalidate_vies. Gdy VIES jest offline, walidator Format per kraj dalej akceptuje poprawnie sformatowane numery. Możesz też podnieść TTL cache w Ustawienia → Walidacja VAT.
Dashboard nie pokazuje danych
SQL dashboardu polega na JSON_EXTRACT / JSON_UNQUOTE wobec niezmiennej kolumny snapshot faktury. Upewnij się, że Twój serwer bazodanowy to MySQL 5.7+ albo MariaDB 10.2+. Jeśli pasek okresu pokazuje właściwe okno, ale karty zostają na --, otwórz /wp-json/invoice-pilot/v1/dashboard?days=30 bezpośrednio i sprawdź odpowiedź — porażki uwierzytelnienia REST pojawiają się jako rest_forbidden.
Push integracji zawodzi
Otwórz Invoice Pilot → Log i znajdź nieudany wpis — kolumna HTTP flaguje odpowiedzi spoza 2xx kolorową odznaką, a kolumna Error pokazuje komunikat błędu upstreamu na czerwono. Nieudany wpis jest automatycznie ponawiany przez cron invoice_pilot_retry_integrations co piętnaście minut; możesz też wcisnąć Push do dostawcy w meta boksie zamówienia, by ponowić od razu. Akcji Usuń na wierszu używaj, by wyczyścić jednorazowy wpis bez czekania na cron retencji.
Testuj połączenie w zakładce AI raportuje błąd
Komunikat zwrócony na czerwono leci wprost z endpointu dostawcy. Typowe przyczyny:
- Nieprawidłowy albo unieważniony klucz API — wygeneruj nowy i wklej go w pole Klucz API, a potem zapisz.
- Nazwa modelu, do której konto nie ma dostępu — wybierz inny model z listy.
- Wychodzący ruch zablokowany przez hosting — sprawdź, czy wychodzące HTTPS do
api.anthropic.com,api.openai.com,generativelanguage.googleapis.com,api.deepseek.comlubapi.x.aijest dozwolone.
Maile do klienta nie docierają
Maile z fakturą do klienta są wysyłane przez funkcję wp_mail() WordPressa. Jeśli żaden mail nie dochodzi, problem prawie zawsze leży w konfiguracji poczty witryny, a nie w Invoice Pilocie. Zainstaluj wtyczkę poczty transakcyjnej (na przykład taką, która kieruje pocztę WordPressa przez SMTP) i ponownie wyzwól akcję zamówienia Wyślij fakturę Invoice Pilot do klienta z testowego zamówienia.