Preskočiť na obsah

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.

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:

  1. Automatická detekcia objednávok s číslom NIP
  2. Stĺpec stavu KSeF v zozname objednávok
  3. Hooky na integráciu s externými systémami fakturácie
  4. Meta-údaje objednávky pripravené na odovzdanie do systému KSeF

Keď zákazník uvedie číslo NIP pri zadávaní objednávky (pole NIP je súčasťou modulu Checkout pluginu), systém automaticky:

  1. Validuje formát NIP (10 číslic, kontrola kontrolného súčtu)
  2. Označí objednávku ako vyžadujúcu faktúru s DPH
  3. Uloží NIP do meta-údajov objednávky
  4. Voliteľne stiahne firemné údaje z API GUS/CEIDG

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

V zozname objednávok (WooCommerce > Objednávky) plugin pridáva stĺpec KSeF s ikonami stavu:

IkonaStavPopis
ŠedáNetýka saObjedná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áChybaVyskytol 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.

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.

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);

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);

Modul KSeF ukladá nasledujúce meta-údaje v objednávke:

Kľúč metaPopis
_billing_nipČíslo NIP zákazníka
_billing_companyNázov firmy
_ksef_requiredČi objednávka vyžaduje faktúru (yes/no)
_ksef_statusStav faktúry (pending, issued, error)
_ksef_numberČíslo KSeF faktúry (po vystavení)
_ksef_invoice_idID faktúry v externom systéme

Nastavenia modulu KSeF: WooCommerce > Nastavenia > Polski > KSeF.

MožnosťPopisPredvolená hodnota
Zapnúť modul KSeFAktivuje detekciu a sledovanieÁno
Online validácia NIPKontrolovať NIP v API GUS/VIESNie
Auto-sťahovanie firemných údajovSťahovať údaje z GUS po zadaní NIPNie
Stav spúšťajúci hookStav objednávky, pri ktorom vyvolať invoice_readyprocessing

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ť.

Táto stránka slúži len na informačné účely a nepredstavuje právne poradenstvo. Pred implementáciou sa poraďte s právnikom. Polski for WooCommerce je open source softvér (GPLv2) poskytovaný bez záruky.