Preskočiť na obsah

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.

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:

  1. Automatické rozpoznávanie 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 zadá NIP pri podaní objednávky (pole NIP je súčasťou modulu Checkout), doplnok 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 načíta údaje firmy z API GUS/CEIDG

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

V zozname objednávok (WooCommerce > Objednávky) sa zobrazuje stĺpec KSeF s ikonami stavu:

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

V zozname objednávok môžete hromadne označiť viacero objednávok ako “vystavené v KSeF”.

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

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

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 rozpoznávanie a sledovanieÁno
Online validácia NIPKontroluj NIP v API GUS/VIESNie
Auto-načítanie údajov firmyNačítaj údaje z GUS po zadaní NIPNie
Stav spúšťajúci hookStav objednávky, pri ktorom volať 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 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ť.

Táto stránka má výlučne informačný charakter a nepredstavuje právne poradenstvo. Pred nasadením sa poraďte s právnikom. Polski for WooCommerce je open source softvér (GPLv2) poskytovaný bez záruky.