KSeF - Národný systém e-faktúr
KSeF je platforma poľského Ministerstva financií pre štruktúrované faktúry. Doplnok pripravuje obchod na integráciu s KSeF - rozpoznáva objednávky vyžadujúce faktúru s DPH, pridáva stĺpec stavu a hooky na prepojenie so systémami fakturácie.
Právny stav KSeF
Section titled “Právny stav KSeF”KSeF je vo fáze zavádzania. Doplnok nevystavuje faktúry v KSeF, ale uľahčuje integráciu so systémami, ktoré to robia (napr. Fakturownia, iFirma, wFirma, InFakt).
Hlavné funkcie modulu KSeF:
- Automatické rozpoznávanie objednávok s číslom NIP
- Stĺpec stavu KSeF v zozname objednávok
- Hooky na integráciu s externými systémami fakturácie
- Meta-údaje objednávky pripravené na odovzdanie do systému KSeF
Rozpoznávanie objednávok s NIP
Section titled “Rozpoznávanie objednávok s NIP”Keď zákazník zadá NIP pri podaní objednávky (pole NIP je súčasťou modulu Checkout), doplnok automaticky:
- Validuje formát NIP (10 číslic, kontrola kontrolného súčtu)
- Označí objednávku ako vyžadujúcu faktúru s DPH
- Uloží NIP do meta-údajov objednávky
- Voliteľne načíta údaje firmy z API GUS/CEIDG
Validácia NIP
Section titled “Validácia NIP”Doplnok kontroluje správnosť NIP na dvoch úrovniach:
- Formát - 10 číslic, správny kontrolný súčet (váhy: 6, 5, 7, 2, 3, 4, 5, 6, 7)
- Online overenie - voliteľná kontrola v databáze VIES (pre EU NIP) alebo API GUS
Stĺpec stavu KSeF
Section titled “Stĺpec stavu KSeF”V zozname objednávok (WooCommerce > Objednávky) sa zobrazuje stĺpec KSeF s ikonami stavu:
| Ikona | Stav | Popis |
|---|---|---|
| Sivá | Netýka sa | Objednávka bez NIP, faktúra sa nevyžaduje |
| Modrá | Čaká | Objednávka s NIP, faktúra na vystavenie |
| Zelená | Vystavená | Faktúra bola vystavená (stav nastavený hookom) |
| Červená | Chyba | Vyskytol sa problém s vystavením faktúry |
Objednávky môžete filtrovať podľa stavu KSeF, napr. zobraziť iba tie čakajúce na faktúru.
Hromadné akcie
Section titled “Hromadné akcie”V zozname objednávok môžete hromadne označiť viacero objednávok ako “vystavené v KSeF”.
polski/ksef/invoice_ready
Section titled “polski/ksef/invoice_ready”Volaný, keď je objednávka s NIP zaplatená a pripravená na vystavenie faktúry. Hlavný hook na integráciu so systémami fakturácie.
/** * @param int $order_id ID zamówienia WooCommerce. * @param WC_Order $order Obiekt zamówienia. * @param string $nip Numer NIP klienta. * @param array $invoice_data Dane do faktury (nazwa firmy, adres, NIP). */add_action('polski/ksef/invoice_ready', function (int $order_id, WC_Order $order, string $nip, array $invoice_data): void { // Przykład: wyślij dane do API Fakturowni $api_token = get_option('fakturownia_api_token'); $account = get_option('fakturownia_account');
$invoice_payload = [ 'invoice' => [ 'kind' => 'vat', 'number' => null, // auto-numeracja 'sell_date' => $order->get_date_paid()->format('Y-m-d'), 'issue_date' => current_time('Y-m-d'), 'payment_type' => 'transfer', 'seller_name' => get_option('woocommerce_store_name'), 'buyer_name' => $invoice_data['company_name'], 'buyer_tax_no' => $nip, 'buyer_street' => $invoice_data['address'], 'buyer_city' => $invoice_data['city'], 'buyer_post_code' => $invoice_data['postcode'], 'positions' => [], ], ];
foreach ($order->get_items() as $item) { $invoice_payload['invoice']['positions'][] = [ 'name' => $item->get_name(), 'quantity' => $item->get_quantity(), 'total_price_gross' => $item->get_total() + $item->get_total_tax(), 'tax' => round(($item->get_total_tax() / $item->get_total()) * 100), ]; }
$response = wp_remote_post("https://{$account}.fakturownia.pl/invoices.json", [ 'body' => wp_json_encode($invoice_payload), 'headers' => [ 'Content-Type' => 'application/json', 'Authorization' => 'Token token=' . $api_token, ], ]);
if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 201) { $body = json_decode(wp_remote_retrieve_body($response), true); update_post_meta($order_id, '_ksef_status', 'issued'); update_post_meta($order_id, '_ksef_invoice_id', $body['id'] ?? ''); } else { update_post_meta($order_id, '_ksef_status', 'error'); }}, 10, 4);polski/ksef/is_required
Section titled “polski/ksef/is_required”Filter umožňujúci programovo určiť, či objednávka vyžaduje faktúru KSeF.
/** * @param bool $is_required Czy faktura KSeF jest wymagana. * @param WC_Order $order Obiekt zamówienia. * @return bool */add_filter('polski/ksef/is_required', function (bool $is_required, WC_Order $order): bool { // Przykład: wymagaj faktury KSeF dla zamówień powyżej 450 PLN if ($order->get_total() > 450) { return true; }
return $is_required;}, 10, 2);Príklad - automatické označovanie stavu po integrácii
Section titled “Príklad - automatické označovanie stavu po integrácii”/** * Aktualizuj status KSeF po otrzymaniu odpowiedzi z systemu fakturowania. */add_action('my_invoicing/invoice_created', function (int $order_id, string $ksef_number): void { $order = wc_get_order($order_id); if (!$order) { return; }
$order->update_meta_data('_ksef_status', 'issued'); $order->update_meta_data('_ksef_number', $ksef_number); $order->add_order_note( sprintf('Faktura wystawiona w KSeF. Numer KSeF: %s', $ksef_number) ); $order->save();}, 10, 2);Meta-údaje objednávky
Section titled “Meta-údaje objednávky”Modul KSeF ukladá nasledujúce meta-údaje v objednávke:
| Kľúč meta | Popis |
|---|---|
_billing_nip | Číslo NIP zákazníka |
_billing_company | Názov firmy |
_ksef_required | Či objednávka vyžaduje faktúru (yes/no) |
_ksef_status | Stav faktúry (pending, issued, error) |
_ksef_number | Číslo KSeF faktúry (po vystavení) |
_ksef_invoice_id | ID faktúry v externom systéme |
Konfigurácia
Section titled “Konfigurácia”Nastavenia modulu KSeF: WooCommerce > Nastavenia > Polski > KSeF.
| Možnosť | Popis | Predvolená hodnota |
|---|---|---|
| Zapnúť modul KSeF | Aktivuje rozpoznávanie a sledovanie | Áno |
| Online validácia NIP | Kontroluj NIP v API GUS/VIES | Nie |
| Auto-načítanie údajov firmy | Načítaj údaje z GUS po zadaní NIP | Nie |
| Stav spúšťajúci hook | Stav objednávky, pri ktorom volať invoice_ready | processing |
Riešenie problémov
Section titled “Riešenie problémov”Stĺpec KSeF sa nezobrazuje v zozname objednávok Kliknite na “Možnosti obrazovky” a zaškrtnite stĺpec KSeF. Uistite sa, že je modul zapnutý v nastaveniach.
NIP sa neukladá v objednávke Skontrolujte, či je pole NIP zapnuté v WooCommerce > Nastavenia > Polski > Pokladňa. Pole musí byť aktívne, aby ho zákazník mohol vyplniť.
Hook invoice_ready sa nevolá Skontrolujte “Stav spúšťajúci hook”. Predvolene hook funguje pri stave “Prebieha spracovanie”. Pri vlastných stavoch zmeňte túto možnosť.
Ďalšie kroky
Section titled “Ďalšie kroky”- Nahlasujte problémy: GitHub Issues
- Diskusie a otázky: GitHub Discussions