KS[e]F: Wielka improwizacja rządu i biznesu

Narzekanie na KSeF jest w większości uzasadnione, ale część firm sama sobie „pomogła”. Zwlekali z pracami do ostatniej chwili, nie przygotowali środowiska, które umożliwiłoby zarówno zmianę procesów jak i pozwoliło na wprowadzenie nowego oprogramowania. Często proces fakturowania już wcześniej działał kulawo, a systemy były cyfrowymi makietami. Teraz miały nagle zastosować się do dość restrykcyjnych standardów - to nie mogło zadziałać. Firmy oczekiwały, że „księgowy" sobie poradzi a dostawca programu zrobi wszystko za darmo i bez ich udziału.

Ministerstwo dorzuciło do pieca, dając bardzo mało czasu firmom na przygotowanie oprogramowania - wersja API, która miała finalnie obowiązywać na produkcji została udostępniona ledwie cztery miesiące przed startem KSeF. Dokumentacja była chaotyczna, nieprecyzyjna, rozproszona. Były w niej błędy lub niedopowiedzenia, brakowało przykładów. To, co Ministerstwo Finansów nazywa „wsparciem dla podatnika”, w rzeczywistości było cyfrowym torem przeszkód. KSeF może być znakomitym przykładem tego, jak nie projektować systemów o krytycznym znaczeniu dla gospodarki.

Architektura

Data is a liability, not an asset. Zbieraj tylko to, co jest Ci naprawdę potrzebne do realizacji zadania i nie przechowuj tego, na czego utratę nie możesz sobie pozwolić. KSeF zbiera wchodzi w posiadanie zbyt dużej ilości wrażliwej informacji. To ryzyko nie tylko dla firm, ale i dla całego państwa. KSeF to największa inwigilacja gospodarcza w historii III RP – państwo w czasie niemal rzeczywistym zna każdy twój zakup i sprzedaż. Dostaje nie tylko kwoty VAT, ale szczegółowe dane o marżach, cenach, kluczowych dostawcach i kontrahentach – czyli o tajemnicy przedsiębiorstwa. To realne ryzyko politycznego wykorzystania informacji („sprawdzanie” niewygodnych firm), korupcji urzędników, administratorów oraz przyszłego rozszerzenia zakresu tego systemu. KSeF gromadzi znacznie więcej niż to jest uzasadnione do pełnienia swojej roli.

Architektura jest monolityczna – wszystko idzie przez serwery MF, co oznacza single point of failure: jeśli padnie (a zdarzały się awarie, np. w e-PIT), to cała gospodarka praktycznie staje, bo obieg faktury nie będzie funkcjonować właściwie. Mamy co prawda tryb 'offline' ale jego stosowanie jest dość złożone i to raczej krótkie przerwy, spowolnienia będą bardziej dokuczliwe niż całkowita niedostępność.

Autoryzacja

W KSeF wybrano metodę autoryzacji, która nadmiernie obciąża infrastrukturę. Profil Zaufany wywracał się już do góry nogami w przeszłości; start Polskiego Ładu (2022), Wnioski 500+ / 800+, Wprowadzenie e-recept, testy KSeF. System jest skomplikowany i uciążliwy: użytkownik musi logować się do banku, potem do PfZ, a na końcu potwierdzać podpis kwalifikowany sekwencją SMS-ów i kodów z aplikacji. Wymuszanie takiego procesu przy wysyłce nawet jednej faktury to w 2026 roku technologiczny absurd.

Zamiast nowoczesnych, lekkich i rozproszonych mechanizmów dostępu, wybrano model centralny i ciężki. W efekcie system jest bardziej obciążający, wolniejszy i podatniejszy na awarie, niż musiałby być

Formaty

Ministerstwo Finansów wybrało XML jako format do przechowywania danych faktur. Podobno wynika z jego zgodności z unijnymi standardami e-faktur, takimi jak EN 16931. Cieszyć się należy że nie wybrali EDIFACT (byliby wtedy jeszcze bardziej zgodni ze 'standardami unijnymi'). XML jest skrajnie nieefektywny objętościowo. Ten sam zestaw danych w formacie XML może być o 30-50% większy niż np. JSON. Wybór XML jest często podyktowany 'czytelnością' dokumentów. Finalny efekt jest jednak taki ze dla przeciętnej osoby są to nadal krzaczki a dla maszyny niepotrzebny syf.

XML jest znacznie wolniejszy w parsowaniu niż nowsze formaty, przetwarzanie XML zużywa zauważalnie więcej mocy obliczeniowej, pamięci. Przechowywane faktury w formacie XML zajmą zdecydowanie więcej miejsca, zabezpieczenie tych danych będzie trudniejsze. To wszystko będzie mieć wpływ na cenę funkcjonowania systemu - my wszyscy za to zapłacimy.

Często powtarzaną ,ą jest to że XSD (standard służący do definiowania struktury dokumentu XML) zapewnia bardzo szczegółowe reguły biznesowe (warunkowe pola, cross-field validation, sumy kontrolne itd.). Brzmi to bardzo ładnie w prezentacjach i pismach urzędowych, ale w praktyce jest to w bardzo dużym stopniu ściema/marketing techniczny. XSD nie bierze się z powietrza. Ktoś te reguły musi utworzyć. Równie dobrze mogłby napisać walidator który robi to z innymi formatami. XSD robi się nieczytelny i nieutrzymywalny już przy ~30–40 regułach warunkowych. Wydajność walidacji XSD na dużych dokumentach jest znacznie gorsza niż zwykły kod walidujący. Łatwiej zmienić logikę w kodzie niż w wielostronicowym schemacie XSD.

Zamiast tracić środki na filtry uzdatniające wodę, lepiej nie wlewać gnojówki do studni, z której ją pijemy. Miejscem w którym powinna następować walidacja dokumentów jest bramka (API, aplikacja web) Ministerstwa Finansów. Mimo publikacji struktury XSD, infrastruktura KSeF i tak musi walidować każdy z otrzymanych dokumentów.

Dokumentacja KSeF i wsparcie

Wszystko, co da się powiedzieć, da się powiedzieć jasno. Dokumentacja KSeF taka nie jest. Jest często niezrozumiała, nieprecyzyjna, zawiera braki, najczęściej nie posiada przykładów. Nie ma też wersji angielskiej (poza stroną tytułową z linkami do dokumentacji i opisem struktury faktury) a integracje z KSeF są często robione przez zespoły spoza Polski. Informacje dla integratorów znajdują się w kilku miejscach i niektóre z nich nie wyglądają na oficjalną dokumentację MF. Byłoby dobrym pomysłem powierzyć przygotowanie dokumentacji ekspertom w tym temacie a nie pozostawiać to zadanie programistom.

Wsparcie ze strony Ministerstwa Finansów, w praktyce okazało się niewystarczające i frustrujące. Zgłoszenia przez formularz na stronie KSeF długo pozostają bez żadnej odpowiedzi i najczęściej kończą się ogólnikowymi szablonami typu „sprawdź dokumentację”. Sam system Service Desk MF wymaga pilnej interwencji; okno wpisywania zgłoszenia to zwykły textarea HTML który uniemożliwia choćby podstawowe formatowanie tekstu, nie można tam wklejać linków a przy kontynuacji wątku... trzeba otworzyć nowe zgłoszenie, w którym wpiszemy numer poprzedniego zgłoszenia (wyobraźmy sobie obsługę tych zgłoszeń po stronie MF).