Hooky KSeF: registrácia a príjem faktúr v poľskom KSeF

Konfigurácia outbound hooku KSeF na automatickú registráciu faktúr v poľskom systéme elektronickej fakturácie.

PSB má dva hooky KSeF: outbound hook pre odchádzajúce faktúry (predávajúca strana / Podmiot1) a inbound hook pre prichádzajúce faktúry (kupujúca strana / Podmiot2). Oba automatizujú výmenu s Krajowym Systeme e-Faktur (KSeF), poľským národným systémom elektronickej fakturácie. Outbound hook je opísaný nižšie ako prvý; inbound hook sa nachádza na konci tejto stránky.

Outbound hook KSeF (odchádzajúci, Podmiot1)

Outbound hook KSeF automatizuje registráciu odchádzajúcich faktúr v KSeF. Faktúry sa transformujú z formátu Peppol BIS Billing 3.0 / UBL (interne aj BisV3) do poľského formátu FA(3) a registrujú ako dávka (batch). Zákazník môže FA(3) dodať aj sám, vtedy sa krok transformácie preskočí. Po úspešnom spracovaní hook vráti UPO (Urzędowe Poswiadczenie Odbioru, oficiálne potvrdenie o prijatí) a PDF dôkaz cez platformu PSB.

Prostredia KSeF (štátna správa)

Na testovanie a akceptáciu ponúka poľská štátna správa okrem produkčného prostredia ešte dve ďalšie:

ProstredieURLDemohttps://ksef-demo.mf.gov.pl/Testhttps://ksef-test.mf.gov.pl/

Hook podporuje online tok (priama registrácia) aj offline tok (keď KSeF je dočasne nedostupný, napríklad počas denného výpadku). V offline toku sa vygeneruje offline PDF na základe offline certifikátu.

Predpoklady
  • Platný online certifikát pre KSeF (.key + .crt; autentifikácia počas online toku)
  • Platný offline certifikát pre KSeF (.key + .crt; QR kódy vo výstupnom PDF, pri online aj offline spracovaní)
  • Príslušné heslá oboch certifikátov
  • Hook musí byť aktivovaný v konfigurácii
Pracovný tok

Po prijatí upozornenia na faktúru hook prejde siedmimi krokmi:

KrokAkciaPopis1UploadNahrá balík faktúr ako dávku do KSeF (POST /v2/sessions/batch)2StatusDopytuje sa na stav dávky, kým sa spracovanie neskončí (GET /v2/sessions/{referenceNumber}/status)3RetrieveInvoicesZíska výsledky spracovaných faktúr po stránkach (GET /v2/sessions/{referenceNumber}/invoices)4RetrieveUpoZíska dokument UPO pre danú reláciu (GET /v2/sessions/{referenceNumber}/upo)5PrintVygeneruje PDF pre každý dokument na základe údajov UPO a verifikačného odkazu a zaregistruje ho ako prílohu6DispatchOdošle všetky uložené udalosti v jednej dávke do Ingestora7FinalizeVyčistí stav a uzavrie reláciu

Keď KSeF nie je dostupný (denný výpadok alebo porucha), offline tok sa spustí automaticky: vygeneruje sa offline PDF cez offline certifikát, potom sa faktúra odošle bežným kanálom.

Konfigurácia

Zaregistrujte hook cez API Hooks:

{
  "id": "ksef-sender",
  "action": "ksef",
  "name": "KSeF Hook Sender",
  "topics": [
    "ClearInvoiceBatched"
  ],
  "output": [
    {
      "when": "200",
      "topic": "SendInvoice"
    },
    {
      "when": "410",
      "topic": "SendInvoice"
    }
  ],
  "init": {
    "onlineCertificate": "{{cesta-k-online-certifikatu}}",
    "onlineCertificatePassword": "{{heslo}}",
    "offlineCertificate": "{{cesta-k-offline-certifikatu}}",
    "offlineCertificatePassword": "{{heslo}}"
  },
  "isActive": true
}
Parametre
ParameterPopisonlineCertificateCesta k súboru online certifikátu na autentifikáciu v KSeF počas online tokuonlineCertificatePasswordHeslo k online certifikátuofflineCertificateCesta k súboru offline certifikátu, používaného na generovanie QR kódov v PDF výstupeofflineCertificatePasswordHeslo k offline certifikátutopicsTémy, na ktoré hook počúva. Použite ClearInvoiceBatched pre odchádzajúce faktúryoutputDefinuje, ktorá téma sa odošle pre daný stavový kódisActiveMusí byť nastavené na true na aktiváciu hooku

Dôležité: Všetky štyri polia certifikátu sú povinné. Online certifikát je potrebný na autentifikáciu počas online toku. Offline certifikát je potrebný na generovanie QR kódov v PDF, pri online aj offline spracovaní.

Stavové kódy
KódPopisVýstupná téma200Faktúra úspešne zaregistrovaná v KSeF (online)SendInvoice201Faktúra úspešne zaregistrovaná po offline spracovaníInvoiceCleared410KSeF je offline; spustí sa offline tokSendInvoice429Dočasne nedostupný; automatické opakovanie je naplánovanéInvoiceClearedRetry500Interná chyba serveraInvoiceClearedError

Pri stavovom kóde 410 PSB automaticky spustí offline tok. Faktúra sa potom spracuje lokálne s offline certifikátom a odošle sa, keď bude KSeF opäť dostupný. Pri 429 PSB naplánuje automatické opakovanie.

Online vs. offline tok

KSeF má dennú odstávku, počas ktorej systém nie je dostupný na dávkovú registráciu. Približne po 23:00 poľského miestneho času sa spustí offline tok, hneď ako je KSeF nedosiahnuteľný (stavový kód 410):

  • Online: faktúra sa priamo zaregistruje v KSeF, stiahne sa UPO a vygeneruje sa PDF s QR kódmi
  • Offline: faktúra sa spracuje lokálne, vygeneruje sa offline PDF s offline QR kódom cez offline certifikát. Faktúra sa odošle príjemcovi bez toho, aby už bola zaregistrovaná v KSeF.

Po návrate KSeF sa offline spracované faktúry dodatočne zaregistrujú a faktúra dostane stavový kód 201 (InvoiceCleared). Faktúra sa potom znova neposiela príjemcovi; predtým odoslaný offline QR kód po tejto neskoršej registrácii odkazuje na potvrdenú registráciu KSeF.

Referenčné číslo KSeF (clearance)

Po online clearance vráti KSeF referenčné číslo. Toto číslo je uvedené v UPO a v podrobnostiach odchádzajúceho webhooku, napríklad:

"details": {
  "clearanceReference": "234563218-20260220-50683A000001-11",
  "clearanceSystem": "KSeF"
}

Uchovajte referenčné číslo v odosielajúcom ERP ako doklad o registrácii v KSeF.

Dávkový hook pred KSeF (obmedzenie rýchlosti)

Pri veľkých objemoch: umiestnite dávkový hook pred hook KSeF, aby faktúry odchádzali do KSeF periodicky (napríklad každých 15 sekúnd až 1 minútu, alebo maximálne 100 kusov naraz) ako dávka. Integrácia tak menej často naráža na rate limity KSeF. Preferovaný vzor tém: ClearInvoice → dávka → ClearInvoiceBatched → hook KSeF. Navyše je potrebný samostatný hook, ktorý publikuje odchádzajúce faktúry na tému ClearInvoice (v závislosti od toku).

Príklad dávkového hooku (preferovaný; parametre upraviť podľa zákazníka):

{
  "id": "batchClearInvoice",
  "name": "Batch Invoices for KSeF",
  "action": "batch://zip?period=00:01:00&maxBatchSize=100&excludePrimaryAttachment=false&includeAdditionalAttachments=true&hashAlgorithm=sha256&includeRefToMetaAttributes=true&targetDocumentTypeId=econnect-docid%3A%3Ahttp%3A%2F%2Fcrd.gov.pl%2Fwzor%2F2025%2F06%2F25%2F13775%3A%3AFaktura%23%23ksef%3A%3A3.0",
  "topics": ["ClearInvoice"],
  "isActive": true
}

Krátka forma akcie (rovnaký cieľ FA(3); period napríklad 00:00:15):

batch://zip?period=00:00:15&maxBatchSize=100&excludePrimaryAttachment=false&includeAdditionalAttachments=true&hashAlgorithm=sha256&includeRefToMetaAttributes=true&targetDocumentTypeId=econnect-docid%3A%3Ahttp%3A%2F%2Fcrd.gov.pl%2Fwzor%2F2025%2F06%2F25%2F13775%3A%3AFaktura%23%23ksef%3A%3A3.0
Alternatíva: bez témy ClearInvoice (napríklad Business Central)

Niektorí zákazníci nemôžu odosielať faktúry s témou ClearInvoice (napríklad Business Central). V takom prípade upravte dávkový hook tak, aby počúval na SendInvoice a napriek tomu publikoval ClearInvoiceBatched:

{
  "id": "batchClearInvoice",
  "name": "Batch Invoices for KSeF",
  "action": "batch://zip?period=00:01:00&maxBatchSize=100&excludePrimaryAttachment=false&includeAdditionalAttachments=true&hashAlgorithm=sha256&includeRefToMetaAttributes=true&targetDocumentTypeId=econnect-docid%3A%3Ahttp%3A%2F%2Fcrd.gov.pl%2Fwzor%2F2025%2F06%2F25%2F13775%3A%3AFaktura%23%23ksef%3A%3A3.0",
  "topics": ["SendInvoice"],
  "output": [
    { "when": "200", "topic": "ClearInvoiceBatched" },
    { "when": "500", "topic": "ClearInvoiceBatchedError" },
    { "when": "429", "topic": "ClearInvoiceBatchedRetry" }
  ],
  "isActive": true
}
Často kladené otázky
Prečo sú v init konfigurácii potrebné online aj offline certifikát?

PSB používa online certifikát na autentifikáciu voči KSeF počas online registračného toku. Offline certifikát je potrebný na QR kódy vo výstupnom PDF, a to pri online aj offline spracovaní. Všetky štyri polia (obe cesty k certifikátom a heslá) musia byť preto vyplnené.

Čo robí PSB pri stavovom kóde 410 alebo 429 od KSeF?

Pri 410 je KSeF offline (napríklad počas odstávky); PSB spustí offline tok s offline PDF a následne odošle cez bežný kanál. Pri 429 dočasne nie je kapacita; PSB automaticky naplánuje opakovanie na InvoiceClearedRetry.

Aký topic mám nastaviť na hooku pre odchádzajúce faktúry do KSeF?

Použite ClearInvoiceBatched v topics, aby hook počúval na správne dávkové notifikácie. Objekt output mapuje HTTP stavové kódy na nadväzujúce témy ako SendInvoice alebo InvoiceCleared, v závislosti od výsledku registrácie.


Inbound hook KSeF (prichádzajúci, Podmiot2)

Inbound hook KSeF spracováva prichádzajúce faktúry pre kupujúcu stranu (Podmiot2). Hook periodicky dopytuje KSeF na nové faktúry, získava XML faktúry podľa čísla KSeF a doručuje ho cez platformu PSB.

Autentifikácia voči KSeF prebieha výhradne cez online certifikát (.key + .crt + heslo). Inbound tok nemá offline variantu, na rozdiel od outbound hooku. Pri dočasnej nedostupnosti KSeF sa dopytovanie opakuje podľa nakonfigurovanej retry politiky.

Pracovný tok v rámci cyklu dopytovania
KrokAkciaPopis1FetchDopytuje KSeF na metadáta nových faktúr v rámci časového okna (POST /v2/invoices/query/metadata). Stránkovanie cez HasMore / NextPageOffset (vnútorná slučka); skrátenie cez IsTruncated / HwmDate (vonkajšia slučka) pri viac ako 10 000 položkách.2ProcessZíska XML faktúry podľa čísla KSeF (GET /v2/invoices/ksef/{ksefNumber}) a nahrá ho do DocumentCarrier. Duplicitné faktúry (HTTP 409) sa preskočia. Po každom úspešnom nahratí sa odstráni pending kľúč, takže krok možno pri opakovaní úplne obnoviť.3CompleteUloží checkpoint (HwmDate ?? ToDate) a naplánuje ďalší cyklus dopytovania na nasledujúci pevný časový slot.

Ak sa počas Fetch nenájde žiadna faktúra, hook preskočí priamo na Complete: nič sa nespracuje ani nepublikuje.

Predpoklady inbound hooku
  • Platný online certifikát pre KSeF (.key + .crt) plus zodpovedajúce heslo.
  • Hook musí byť aktivovaný v konfigurácii.
  • Init polia onlineCertificate a onlineCertificatePassword sú povinné (žiadne polia offline certifikátu).

Inbound hook sa nastavuje cez TechSupport: spracovanie certifikátov je postup výhradne pre technickú podporu, nie je to self-service.

Konfigurácia inbound hooku

Parameter action určuje časové okno, do ktorého sa hook pozerá späť: ksef:inbound?lookbackWindow=<okno>. V init je uvedený iba online certifikát.

Štandardná (publikuje na tému ReceiveInvoice):

{
  "id": "ksef-inbound",
  "action": "ksef:inbound?lookbackWindow=08:00:00",
  "name": "KSeF Hook Inbound",
  "publishTopics": ["ReceiveInvoice"],
  "init": {
    "onlineCertificate": "{{cesta-k-online-certifikatu}}",
    "onlineCertificatePassword": "{{heslo}}"
  },
  "isActive": true
}

Po inbound hooku musí vždy nasledovať nadväzujúci hook, ktorý prijatú faktúru ďalej spracuje.

Variant platformy Collabrr: na platforme Collabrr hook počúva v tenante s publishTopics: ["InvoiceReceived"]. Organizácia musí byť na platforme registrovaná na príjem Peppol. Príklad akcie: ksef:inbound?lookbackWindow=08.00:00:00.

Parameter lookbackWindow

Parameter lookbackWindow určuje časové okno, do ktorého sa hook pozerá späť pri dopytovaní/vytváraní:

  • V hodinách, napríklad "08:00:00"
  • V dňoch, napríklad "60.00:00:00"

KSeF obmedzuje spätné hľadanie na maximálne 3 mesiace. Pri prekročení dôjde k chybe:

21405: Błąd walidacji danych wejściowych. - 'dateRange' must not exceed 3 months.

Okrem toho platí limit rýchlosti požiadaviek voči KSeF. Zohľadnite to pri aktivácii viacerých subjektov s (veľkým) lookbackWindow.


Chcete sa dozvedieť viac o elektronickej fakturácii v Poľsku? Prečítajte si stránku krajiny o poľskej povinnosti KSeF.

Zobraziť dokumentáciu API