Ta propozycja stanowi formę publicznych konsultacji dotyczących dalszego rozwoju API KSeF. Na tym etapie celem jest zebranie szerokiego feedbacku od rynku. Po zakończeniu konsultacji i analizie uwag zostanie zaproponowany ostateczny kierunek dalszych prac oraz zakres implementacji.
Propozycja obejmuje dwa odrębne zagadnienia.
1. Zagadnienie techniczne
Celem jest wypracowanie docelowego mechanizmu wymiany informacji o zmianach, tj. sposobu synchronizacji dokumentów oraz powiązanych z nimi zdarzeń biznesowych. Przykłady zdarzeń użyte w opisie służą przede wszystkim zobrazowaniu samego zjawiska i potrzeb integracyjnych.
2. Katalog zdarzeń biznesowych
Drugi obszar dotyczy samego katalogu możliwych zdarzeń biznesowych. Jest to temat szerszy, wielowątkowy i wymagający osobnej dyskusji z uwzględnieniem różnych perspektyw biznesowych. Z tego względu warto, aby bardziej szczegółowe rozmowy dotyczące poszczególnych typów zdarzeń były prowadzone w odrębnych wątkach, tak aby nie zdominowały dyskusji o głównym celu tej propozycji, którym jest kierunek architektury i integracji.
Propozycja: Model zdarzeń biznesowych powiązanych z fakturami
Cel
Celem propozycji jest wprowadzenie modelu zdarzeń biznesowych powiązanych z fakturami w KSeF oraz powiązanego z nim mechanizmu pobierania zmian.
Model ten mógłby obejmować zarówno zdarzenia generowane w wyniku operacji wykonywanych na fakturze przez podmiot działający w dopuszczalnym kontekście, jak i inne zdarzenia biznesowe powiązane z fakturą.
Przykładowe scenariusze obejmują m.in. kwalifikację faktury, rejestrowanie zdarzeń płatniczych, dodawanie notatek i atrybutów biznesowych, oznaczanie pozycji faktury, zgłaszanie nadużyć, a także inne zdarzenia związane z obiegiem i obsługą faktury.
Założenie podstawowe
Rozszerzenie nie zmienia danych faktury ustrukturyzowanej zapisanej w KSeF.
Propozycja dotyczy wyłącznie zapisu i odczytu dodatkowych danych biznesowych prezentowanych w formie zdarzeń, w określonym kontekście, tak aby mogły służyć do ciągłej synchronizacji stanu faktur w systemach zewnętrznych.
Ograniczenia obecnego podejścia
Obecny model pobierania w KSeF został zaprojektowany jako mechanizm synchronizacji dokumentów pomiędzy centralnym repozytorium a lokalną bazą danych systemu zewnętrznego. Operacje biznesowe, takie jak filtrowanie, wyszukiwanie czy raportowanie, są wykonywane lokalnie.
Podejście to dobrze odpowiada na potrzeby związane z synchronizacją statycznych dokumentów. Pojawiają się jednak scenariusze, w których sama synchronizacja faktur nie jest wystarczająca, zwłaszcza gdy dodatkowe dane biznesowe zmieniają się w czasie, mogą być wielokrotnie aktualizowane i zależą od kontekstu podmiotu.
Proponowane podejście
W odpowiedzi na powyższe potrzeby proponowany jest model oparty na zdarzeniach biznesowych powiązanych z fakturą.
Każda zmiana dotycząca danych biznesowych faktury byłaby zapisywana jako osobne zdarzenie. Oznacza to, że zamiast nadpisywać jeden stan, system rejestrowałby kolejne zdarzenia opisujące dalszą obsługę faktury.
Każde zdarzenie powinno posiadać unikalny identyfikator oraz podstawowe metadane (np. datę utworzenia, autora), co umożliwia jego śledzenie oraz audyt.
Takie podejście umożliwiałoby aktualizowanie danych biznesowych faktury z zachowaniem historii zmian, zgodnie z rzeczywistym przebiegiem procesów biznesowych a aktualny stan faktury wynikałby z sekwencji zdarzeń.
Widoczność i zakres zdarzeń
Na etapie koncepcji można wyróżnić trzy podstawowe grupy zdarzeń:
- Zdarzenia widoczne dla wszystkich podmiotów powiązanych z fakturą, np.:
- Zdarzenia widoczne wyłącznie dla podmiotu, który je wprowadził, np.:
- kwalifikację faktury wraz z opisem, np.:
- do zaksięgowania,
- wymaga wyjaśnienia,
- wyłączona z księgowania;
- opis faktury,
- zdarzenia dotyczące pozycji faktury wraz z opisem, np.:
- do zaksięgowania,
- wymaga wyjaśnienia,
- wyłączona z księgowania;
- opis pozycji,
- zgłoszenia dotyczące nadużycia, np.:
- próba wyłudzenia nienależnej zapłaty,
- faktura zawiera wyłącznie niechciane treści reklamowe,
- faktura zawiera podejrzane linki,
- masowa wysyłka faktur,
- podszywanie się pod zaufaną instytucję,
- inny powód.
- własne dane w postaci atrybutów, np. w modelu klucz–wartość.
- Zdarzenia widoczne dla podmiotów, który je wprowadził, oraz dla innego wskazanego podmiotu, np.:
- powiązanie faktury z identyfikatorem wewnętrznym nabywcy - zdarzenie opisujące przypisanie do faktury własnego identyfikatora wewnętrznego przez nabywcę.
Ostateczny katalog i klasyfikacja wymaga osobnej dyskusji z uczestnikami rynku, w szczególności z producentami oprogramowania i integratorom. W niniejszym dokumencie skupiono się na koncepcji i ogólnym kierunku rozwiązania.
Przykłady
Poniżej przedstawiono przykładowe zdarzenia ilustrujące sposób działania proponowanego modelu. Przykłady mają charakter poglądowy i nie stanowią docelowej specyfikacji technicznej.
[
{
"eventId": 100001,
"createdDate": "2026-04-10T08:15:12.0000000+00:00",
"createdBy": {
"context": {
"identifier": "5356751957",
"type": "Nip"
},
"subject": {
"identifier": "5356751957",
"type": "Nip"
}
},
"type": "InvoiceCreated",
"ksefNumber": "5356751957-20260410-1A2B3C4D5E6F-7A",
"data": {
"invoiceNumber": "FV/04/2026/001"
}
},
{
"eventId": 100002,
"createdDate": "2026-04-10T09:02:44.0000000+00:00",
"createdBy": {
"context": {
"identifier": "9523838080",
"type": "Nip"
},
"subject": {
"identifier": "9523838080",
"type": "Nip"
}
},
"type": "InvoiceLineExcludedFromSettlement",
"ksefNumber": "5356751957-20260410-1A2B3C4D5E6F-7A",
"data": {
"invoiceLineNumber": 2,
"reasonCode": "PrivateExpense",
"reasonDescription": "Zakup prywatny"
}
}
]
[
{
"eventId": 200001,
"createdDate": "2026-04-11T07:45:03.0000000+00:00",
"createdBy": {
"context": {
"identifier": "1220718651",
"type": "Nip"
},
"subject": {
"identifier": "1220718651",
"type": "Nip"
}
},
"type": "InvoiceCreated",
"ksefNumber": "1220718651-20260411-ABCDEF123456-9F",
"data": {
"invoiceNumber": "FV/04/2026/145"
}
},
{
"eventId": 200002,
"createdDate": "2026-04-11T10:11:28.0000000+00:00",
"createdBy": {
"context": {
"identifier": "9123456789",
"type": "Nip"
},
"subject": {
"identifier": "9123456789",
"type": "Nip"
}
},
"type": "AbuseReported",
"ksefNumber": "1220718651-20260411-ABCDEF123456-9F",
"data": {
"abuseReportNumber": "RPT-20260411-000002",
"reasonCode": "SuspiciousLinks",
"reasonDescription": "Faktura zawiera podejrzane linki",
"comment": "Link w stopce prowadzi do zewnętrznej strony logowania."
}
},
{
"eventId": 200003,
"createdDate": "2026-04-11T10:39:54.0000000+00:00",
"createdBy": {
"context": {
"identifier": "9123456789",
"type": "Nip"
},
"subject": {
"identifier": "9123456789",
"type": "Nip"
}
},
"type": "AbuseReportWithdrawn",
"ksefNumber": "1220718651-20260411-ABCDEF123456-9F",
"data": {
"abuseReportNumber": "RPT-20260411-000002",
"comment": "Zgłoszenie wycofano po dodatkowej weryfikacji."
}
},
{
"eventId": 200004,
"createdDate": "2026-04-11T11:02:17.0000000+00:00",
"createdBy": {
"context": {
"identifier": "9123456789",
"type": "Nip"
},
"subject": {
"identifier": "9123456789",
"type": "Nip"
}
},
"type": "AbuseReported",
"ksefNumber": "1220718651-20260411-ABCDEF123456-9F",
"data": {
"abuseReportNumber": "RPT-20260411-000003",
"reasonCode": "Impersonation",
"reasonDescription": "Podszywanie się pod zaufaną instytucję",
"comment": "Treść faktury sugeruje powiązanie z innym podmiotem."
}
}
]
Pobieranie zmian
Aktualny mechanizm przyrostowego pobierania faktur opiera się na synchronizacji w oknach czasowych z wykorzystaniem daty PermanentStorage oraz mechanizmu stabilnego High Water Mark (HWM). Takie podejście, przy obecnej funkcjonalności, jest wystarczające do wiarygodnego pobierania dokumentów i utrzymania synchronizacji zintegrowanych systemów.
Wraz z wprowadzeniem zdarzeń biznesowych podejście to wymaga rozszerzenia o mechanizm pobierania strumienia zdarzeń biznesowych dla wszystkich faktur widocznych w danym kontekście.
Mechanizm ten byłby oparty na stabilnym strumieniu zdarzeń oraz technicznym identyfikatorze każdego zdarzenia. Identyfikator oparty na monotonicznie rosnącej wartości numerycznej (np. eventId) pozwalałby w prosty i jednoznaczny sposób wyznaczać zakresy przyrostów. W ramach danego kontekstu możliwe byłoby jednoczesne pobieranie zdarzeń dla różnych kategorii podmiotu występujących na fakturze (Subject1, Subject2, Subject3, SubjectAuthorized), zgodnie z warunkami określonymi w zapytaniu.
Aktualny kontrakt pobierania, oparty na datach biznesowych i służący do odczytu bieżących stanów faktur, zostałby utrzymany oraz rozszerzony tak, aby uwzględniał bieżący stan dokumentu wynikający zarówno z danych faktury, jak i z późniejszych zdarzeń biznesowych.
Dodatkowo rozważane jest udostępnienie mechanizmów wspierających podstawową weryfikację kompletności i jakości danych po stronie systemów zintegrowanych.
Rozszerzenie API
Na poziomie koncepcji rozszerzenie API obejmowałoby następujące grupy operacji:
Odczyt
- pobranie lub eksport listy zdarzeń,
- pobranie aktualnego stanu faktury wynikającego ze zdarzeń,
- rozszerzenie obecnych metod pobierania metadanych o dodatkowe zdarzenia biznesowe (aktualny stan faktury).
Zapis
- wykonywanie operacji na fakturach skutkujących utworzeniem nowych zdarzeń biznesowych
Kwestie pozostające do dalszej dyskusji
Na obecnym etapie celem jest potwierdzenie kierunku przedstawionej propozycji, tj. samego podejścia opartego na zdarzeniach biznesowych oraz powiązanego z nim modelu pobierania zmian.
Dopiero w kolejnym kroku zasadne będzie przejście do bardziej szczegółowych rozstrzygnięć technicznych, takich jak:
- dokładny model danych zdarzeń,
- sposób reprezentacji "aktualnego stanu",
- zakres słowników i enumów,
- zasady uprawnień do odczytu i zapisu zdarzeń biznesowych,
- limity zapytań.
Ta propozycja stanowi formę publicznych konsultacji dotyczących dalszego rozwoju API KSeF. Na tym etapie celem jest zebranie szerokiego feedbacku od rynku. Po zakończeniu konsultacji i analizie uwag zostanie zaproponowany ostateczny kierunek dalszych prac oraz zakres implementacji.
Propozycja obejmuje dwa odrębne zagadnienia.
1. Zagadnienie techniczne
Celem jest wypracowanie docelowego mechanizmu wymiany informacji o zmianach, tj. sposobu synchronizacji dokumentów oraz powiązanych z nimi zdarzeń biznesowych. Przykłady zdarzeń użyte w opisie służą przede wszystkim zobrazowaniu samego zjawiska i potrzeb integracyjnych.
2. Katalog zdarzeń biznesowych
Drugi obszar dotyczy samego katalogu możliwych zdarzeń biznesowych. Jest to temat szerszy, wielowątkowy i wymagający osobnej dyskusji z uwzględnieniem różnych perspektyw biznesowych. Z tego względu warto, aby bardziej szczegółowe rozmowy dotyczące poszczególnych typów zdarzeń były prowadzone w odrębnych wątkach, tak aby nie zdominowały dyskusji o głównym celu tej propozycji, którym jest kierunek architektury i integracji.
Propozycja: Model zdarzeń biznesowych powiązanych z fakturami
Cel
Celem propozycji jest wprowadzenie modelu zdarzeń biznesowych powiązanych z fakturami w KSeF oraz powiązanego z nim mechanizmu pobierania zmian.
Model ten mógłby obejmować zarówno zdarzenia generowane w wyniku operacji wykonywanych na fakturze przez podmiot działający w dopuszczalnym kontekście, jak i inne zdarzenia biznesowe powiązane z fakturą.
Przykładowe scenariusze obejmują m.in. kwalifikację faktury, rejestrowanie zdarzeń płatniczych, dodawanie notatek i atrybutów biznesowych, oznaczanie pozycji faktury, zgłaszanie nadużyć, a także inne zdarzenia związane z obiegiem i obsługą faktury.
Założenie podstawowe
Rozszerzenie nie zmienia danych faktury ustrukturyzowanej zapisanej w KSeF.
Propozycja dotyczy wyłącznie zapisu i odczytu dodatkowych danych biznesowych prezentowanych w formie zdarzeń, w określonym kontekście, tak aby mogły służyć do ciągłej synchronizacji stanu faktur w systemach zewnętrznych.
Ograniczenia obecnego podejścia
Obecny model pobierania w KSeF został zaprojektowany jako mechanizm synchronizacji dokumentów pomiędzy centralnym repozytorium a lokalną bazą danych systemu zewnętrznego. Operacje biznesowe, takie jak filtrowanie, wyszukiwanie czy raportowanie, są wykonywane lokalnie.
Podejście to dobrze odpowiada na potrzeby związane z synchronizacją statycznych dokumentów. Pojawiają się jednak scenariusze, w których sama synchronizacja faktur nie jest wystarczająca, zwłaszcza gdy dodatkowe dane biznesowe zmieniają się w czasie, mogą być wielokrotnie aktualizowane i zależą od kontekstu podmiotu.
Proponowane podejście
W odpowiedzi na powyższe potrzeby proponowany jest model oparty na zdarzeniach biznesowych powiązanych z fakturą.
Każda zmiana dotycząca danych biznesowych faktury byłaby zapisywana jako osobne zdarzenie. Oznacza to, że zamiast nadpisywać jeden stan, system rejestrowałby kolejne zdarzenia opisujące dalszą obsługę faktury.
Każde zdarzenie powinno posiadać unikalny identyfikator oraz podstawowe metadane (np. datę utworzenia, autora), co umożliwia jego śledzenie oraz audyt.
Takie podejście umożliwiałoby aktualizowanie danych biznesowych faktury z zachowaniem historii zmian, zgodnie z rzeczywistym przebiegiem procesów biznesowych a aktualny stan faktury wynikałby z sekwencji zdarzeń.
Widoczność i zakres zdarzeń
Na etapie koncepcji można wyróżnić trzy podstawowe grupy zdarzeń:
Ostateczny katalog i klasyfikacja wymaga osobnej dyskusji z uczestnikami rynku, w szczególności z producentami oprogramowania i integratorom. W niniejszym dokumencie skupiono się na koncepcji i ogólnym kierunku rozwiązania.
Przykłady
Poniżej przedstawiono przykładowe zdarzenia ilustrujące sposób działania proponowanego modelu. Przykłady mają charakter poglądowy i nie stanowią docelowej specyfikacji technicznej.
[ { "eventId": 100001, "createdDate": "2026-04-10T08:15:12.0000000+00:00", "createdBy": { "context": { "identifier": "5356751957", "type": "Nip" }, "subject": { "identifier": "5356751957", "type": "Nip" } }, "type": "InvoiceCreated", "ksefNumber": "5356751957-20260410-1A2B3C4D5E6F-7A", "data": { "invoiceNumber": "FV/04/2026/001" } }, { "eventId": 100002, "createdDate": "2026-04-10T09:02:44.0000000+00:00", "createdBy": { "context": { "identifier": "9523838080", "type": "Nip" }, "subject": { "identifier": "9523838080", "type": "Nip" } }, "type": "InvoiceLineExcludedFromSettlement", "ksefNumber": "5356751957-20260410-1A2B3C4D5E6F-7A", "data": { "invoiceLineNumber": 2, "reasonCode": "PrivateExpense", "reasonDescription": "Zakup prywatny" } } ][ { "eventId": 200001, "createdDate": "2026-04-11T07:45:03.0000000+00:00", "createdBy": { "context": { "identifier": "1220718651", "type": "Nip" }, "subject": { "identifier": "1220718651", "type": "Nip" } }, "type": "InvoiceCreated", "ksefNumber": "1220718651-20260411-ABCDEF123456-9F", "data": { "invoiceNumber": "FV/04/2026/145" } }, { "eventId": 200002, "createdDate": "2026-04-11T10:11:28.0000000+00:00", "createdBy": { "context": { "identifier": "9123456789", "type": "Nip" }, "subject": { "identifier": "9123456789", "type": "Nip" } }, "type": "AbuseReported", "ksefNumber": "1220718651-20260411-ABCDEF123456-9F", "data": { "abuseReportNumber": "RPT-20260411-000002", "reasonCode": "SuspiciousLinks", "reasonDescription": "Faktura zawiera podejrzane linki", "comment": "Link w stopce prowadzi do zewnętrznej strony logowania." } }, { "eventId": 200003, "createdDate": "2026-04-11T10:39:54.0000000+00:00", "createdBy": { "context": { "identifier": "9123456789", "type": "Nip" }, "subject": { "identifier": "9123456789", "type": "Nip" } }, "type": "AbuseReportWithdrawn", "ksefNumber": "1220718651-20260411-ABCDEF123456-9F", "data": { "abuseReportNumber": "RPT-20260411-000002", "comment": "Zgłoszenie wycofano po dodatkowej weryfikacji." } }, { "eventId": 200004, "createdDate": "2026-04-11T11:02:17.0000000+00:00", "createdBy": { "context": { "identifier": "9123456789", "type": "Nip" }, "subject": { "identifier": "9123456789", "type": "Nip" } }, "type": "AbuseReported", "ksefNumber": "1220718651-20260411-ABCDEF123456-9F", "data": { "abuseReportNumber": "RPT-20260411-000003", "reasonCode": "Impersonation", "reasonDescription": "Podszywanie się pod zaufaną instytucję", "comment": "Treść faktury sugeruje powiązanie z innym podmiotem." } } ]Pobieranie zmian
Aktualny mechanizm przyrostowego pobierania faktur opiera się na synchronizacji w oknach czasowych z wykorzystaniem daty
PermanentStorageoraz mechanizmu stabilnegoHigh Water Mark (HWM). Takie podejście, przy obecnej funkcjonalności, jest wystarczające do wiarygodnego pobierania dokumentów i utrzymania synchronizacji zintegrowanych systemów.Wraz z wprowadzeniem zdarzeń biznesowych podejście to wymaga rozszerzenia o mechanizm pobierania strumienia zdarzeń biznesowych dla wszystkich faktur widocznych w danym kontekście.
Mechanizm ten byłby oparty na stabilnym strumieniu zdarzeń oraz technicznym identyfikatorze każdego zdarzenia. Identyfikator oparty na monotonicznie rosnącej wartości numerycznej (np.
eventId) pozwalałby w prosty i jednoznaczny sposób wyznaczać zakresy przyrostów. W ramach danego kontekstu możliwe byłoby jednoczesne pobieranie zdarzeń dla różnych kategorii podmiotu występujących na fakturze (Subject1,Subject2,Subject3,SubjectAuthorized), zgodnie z warunkami określonymi w zapytaniu.Aktualny kontrakt pobierania, oparty na datach biznesowych i służący do odczytu bieżących stanów faktur, zostałby utrzymany oraz rozszerzony tak, aby uwzględniał bieżący stan dokumentu wynikający zarówno z danych faktury, jak i z późniejszych zdarzeń biznesowych.
Dodatkowo rozważane jest udostępnienie mechanizmów wspierających podstawową weryfikację kompletności i jakości danych po stronie systemów zintegrowanych.
Rozszerzenie API
Na poziomie koncepcji rozszerzenie API obejmowałoby następujące grupy operacji:
Odczyt
Zapis
Kwestie pozostające do dalszej dyskusji
Na obecnym etapie celem jest potwierdzenie kierunku przedstawionej propozycji, tj. samego podejścia opartego na zdarzeniach biznesowych oraz powiązanego z nim modelu pobierania zmian.
Dopiero w kolejnym kroku zasadne będzie przejście do bardziej szczegółowych rozstrzygnięć technicznych, takich jak: