KSeF - Národný systém e-faktúr
KSeF je platforma Ministerstva financií na štrukturované faktúry. Plugin pripravuje obchod na integráciu s KSeF - detekuje objednávky vyžadujúce faktúru s DPH, pridáva stĺpec stavu a hooky na pripojenie k systémom fakturácie.
Právny stav KSeF
Section titled “Právny stav KSeF”KSeF je vo fáze implementácie. Plugin 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á detekcia 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
Detekcia objednávok s NIP
Section titled “Detekcia objednávok s NIP”Keď zákazník uvedie číslo NIP pri zadávaní objednávky (pole NIP je súčasťou modulu Checkout pluginu), systém 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 stiahne firemné údaje z API GUS/CEIDG
Validácia NIP
Section titled “Validácia NIP”Plugin 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 EÚ NIP) alebo API GUS
Stĺpec stavu KSeF
Section titled “Stĺpec stavu KSeF”V zozname objednávok (WooCommerce > Objednávky) plugin pridáva stĺpec KSeF s ikonami stavu:
| Ikona | Stav | Popis |
|---|---|---|
| Šedá | Netýka sa | Objednávka bez NIP, faktúra nie je vyžadovaná |
| 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 |
Stav je možné filtrovať - použite filter v zozname objednávok na zobrazenie napr. len objednávok čakajúcich na faktúru.
Hromadné akcie
Section titled “Hromadné akcie”V zozname objednávok je dostupná hromadná akcia “Označiť ako vystavené v KSeF”, umožňujúca aktualizovať stav viacerých objednávok súčasne.
polski/ksef/invoice_ready
Section titled “polski/ksef/invoice_ready”Volaný, keď je objednávka s NIP zaplatená a pripravená na vystavenie faktúry. Toto je hlavný hook na integráciu s externými 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čenie stavu po integrácii
Section titled “Príklad - automatické označenie 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 detekciu a sledovanie | Áno |
| Online validácia NIP | Kontrolovať NIP v API GUS/VIES | Nie |
| Auto-sťahovanie firemných údajov | Sťahovať údaje z GUS po zadaní NIP | Nie |
| Stav spúšťajúci hook | Stav objednávky, pri ktorom vyvolať 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 modul je zapnutý v nastaveniach.
NIP sa neukladá do objednávky Skontrolujte, či pole NIP je zapnuté v module Checkout (WooCommerce > Nastavenia > Polski > Pokladňa). Pole NIP musí byť aktívne, aby ho zákazník mohol vyplniť.
Hook invoice_ready sa nevolá Skontrolujte nastavenie “Stav spúšťajúci hook”. Štandardne je hook volaný pri zmene stavu objednávky na “Spracovávaná”. Ak používate neštandardné stavy, zmeňte túto možnosť.
Ďalšie kroky
Section titled “Ďalšie kroky”- Nahlasovanie problémov: GitHub Issues
- Diskusie a otázky: GitHub Discussions