Analityk finansowy żyje z danych. Jeśli dane przychodzą na 15. dzień miesiąca z księgowego, raport dla CFO już jest spóźniony. Jeśli eksport z programu FK nie zawiera oddziału ani linii biznesowej, analityk wraca do faktury źródłowej i klika po niej przez kwadrans. KSeF zmienia to o tyle, że faktury są dostępne w dniu wystawienia — ale surowy KSeF nie ma MPK, oddziału ani projektu. Ten artykuł jest o tym, jak zbudować własny pipeline z KSeF do Excela i Power BI, żeby analityk nie czekał na nikogo.
Analityk pobiera faktury z KSeF w dniu wystawienia, wzbogaca je o wymiary (oddział, typ kosztu, linia biznesowa, kontrahent z kategorią) i eksportuje do CSV/XLSX albo do lokalnej bazy pod Power BI. Lokalnie, bez chmury. Dane pod maskowaniem przed wysłaniem do zewnętrznych narzędzi. Miesięczne zamknięcie analityczne z 15. dnia schodzi na 2.-3. dzień.
Dlaczego analityk nie może czekać na dane z księgowego
W typowym miesięcznym cyklu księgowy zamyka okres między 10. a 15. dniem następnego miesiąca. Dopiero wtedy zapisy są stabilne, konta dekretowane, VAT rozliczony. Analityk, który czeka na „zamknięty” bufor z FK, dostaje dane za luty w połowie marca. Raport dla zarządu za luty miał być na 5 marca. Różnica — 10 dni opóźnienia, które przekreślają wartość analizy.
Drugi problem to format. Eksport z programu księgowego (Comarch OPT!MA, Symfonia, enova, SAP, Oracle) ma standardowo kolumny: data księgowania, konto Wn, konto Ma, kwota, numer dokumentu, opis. Ten eksport jest dobry do kontroli ksiąg, ale do analizy jest za chudy. Brakuje:
- Oddziału i lokalizacji — program FK często nie zmusza do wpisania tego pola, a księgowy nie zawsze ma kontekst
- Linii biznesowej / segmentu — rzadko jest to wymiar księgowy, zwykle jest definiowany tylko w analityce
- Typu kosztu rodzajowego w formie czytelnej (kod konta „402-02-14” nic nie mówi, „usługi IT - consulting” już tak)
- Metadanych KSeF — NrKSeF, data wystawienia vs data otrzymania, dane z pól Podmiot2 i Podmiot3
- Kontrahenta w formie analitycznej — kategoria, kraj, rozmiar, relacja (klient, dostawca, pracownik)
Trzeci problem to pozycje faktury. Eksport z FK zwykle pokazuje fakturę jako jeden rekord z jedną kwotą. Tymczasem faktura za 50 tys. zł może mieć 40 pozycji, z których każda dotyczy innego oddziału i innego projektu. Bez rozbicia pozycji analiza jest niepełna — i wraca się po to do faktury źródłowej.
Jakie dane daje KSeF (i których brakuje)
KSeF w schemie FA(3) udostępnia zestaw pól, które są dostępne dla każdego odbiorcy faktury. Dla analityka przydatne są:
- NrKSeF — 36-znakowy identyfikator, unikalny na poziomie ogólnokrajowym, idealny klucz bazowy
- Data wystawienia (P_1) i data sprzedaży / wykonania (P_6)
- Data otrzymania — moment wprowadzenia faktury do KSeF (data systemowa)
- NIP sprzedawcy, nazwa, adres — dane Podmiot1
- NIP nabywcy, nazwa — dane Podmiot2
- Podmiot3 — opcjonalnie, przy refakturowaniu albo faktoringu
- Numer faktury (P_2)
- Kwoty — netto, VAT, brutto — per stawka VAT (23%, 8%, 5%, 0%, zw, np)
- Pozycje — lista linii, każda z nazwą, ilością, ceną jednostkową, stawką VAT
- GTU, procedury — oznaczenia podatkowe (SW, TP, MPP itd.)
Czego KSeF nie zawiera i nigdy nie będzie zawierał:
- Budżetu, planu, limitu kosztowego — to są dane wewnętrzne firmy
- MPK, centrum kosztów, centrum zysku — podział organizacyjny firmy (patrz: MPK w KSeF)
- Linii biznesowej, segmentu, produktu — również wewnętrzne
- Oddziału, lokalizacji wykonania usługi — tylko częściowo, jeśli dostawca wpisał to w opisie
- Projektu, zlecenia, kontraktu — tylko jeśli kontrahent oznaczył fakturę kodem projektu
Praca analityka polega na zestawieniu danych „realizacja” (KSeF) z danymi „plan i wymiar” (wewnętrzne słowniki firmy). Oficjalny opis schemy FA(3): ksef.podatki.gov.pl.
Minimum trzy raporty, które musisz umieć zrobić
Analityk obsługujący KSeF powinien mieć w stałym repertuarze trzy raporty. Są to szablony, z których da się wyprowadzić kolejne pytania ad-hoc.
Raport 1: Koszty per oddział, miesiąc do miesiąca
Tabela krzyżowa: w wierszach oddziały (np. Warszawa, Kraków, Poznań, Wrocław), w kolumnach miesiące (styczeń, luty, marzec). W komórkach suma kwot netto faktur kosztowych. Obok — kolumna „zmiana % m/m” i „odchylenie od budżetu”. Kluczem zestawienia jest przypisanie faktury do oddziału — coś, czego KSeF sam nie robi.
Przypisanie odbywa się przez słownik reguł: jeśli kontrahent = Tauron i adres PPE zawiera „Poznań” → oddział Poznań. Jeśli kontrahent = biuro rachunkowe X i opis zawiera numer umowy dotyczącej oddziału Warszawa → oddział Warszawa. Mechanika klasyfikacji po oddziałach opisuje to w detalu.
Raport 2: Top 20 kontrahentów vs poprzedni kwartał
Ranking dostawców po kwocie netto w bieżącym kwartale, z kolumną „zmiana vs poprzedni kwartał”. Ten raport wyłapuje:
- Kontrahentów, u których wydatki rosną nieproporcjonalnie (sygnał do renegocjacji)
- Nowych kontrahentów, którzy nagle wchodzą w top 20 (wymagają weryfikacji — czy umowa była zaplanowana?)
- Kontrahentów, u których wydatki spadają (może sygnał problemów w tamtej kategorii)
Klucz grupowania to NIP sprzedawcy, nie nazwa — bo nazwa bywa pisana różnie (z „Sp. z o.o.”, bez, wielkość liter).
Raport 3: Anomalie i faktury niestandardowe
Automatyczna detekcja odchyleń na trzech zasadach:
- Kwota odstająca — faktura od danego kontrahenta powyżej 2× mediany z ostatnich 6 miesięcy
- Nowy kontrahent — NIP niewidziany w historii, kwota powyżej progu (np. 5000 zł netto)
- Potencjalny duplikat — faktura o tym samym NIP sprzedawcy, numerze faktury i kwocie brutto, co istniejący rekord
Ten raport to nie kontrola wewnętrzna — to filtr, który analityk sprawdza ręcznie. Większość anomalii okaże się legitnymi fakturami (jednorazowy zakup środka trwałego, nowa umowa, korekta). Chodzi o to, żeby nic nie przeszło bez spojrzenia.
Format eksportu dla Excela i Power BI
Analityk pracuje w Excelu (tabele przestawne, Power Query, Power Pivot) albo w Power BI (model tabelaryczny, DAX). Oba narzędzia konsumują dane najsprawniej, gdy są ustrukturyzowane w tabeli „fact table” z nazwanymi kolumnami. Zalecany zestaw kolumn dla faktur kosztowych:
nr_ksef— 36 znaków, klucz bazowynr_faktury— numer nadany przez sprzedawcędata_wystawienia,data_sprzedazy,data_otrzymania— wszystkie trzy w formacie ISO (YYYY-MM-DD)nip_sprzedawcy,nazwa_sprzedawcykwota_netto,kwota_vat,kwota_brutto— w PLN, po 2 miejsca po przecinkuwaluta— zwykle PLN, ale może być EUR, USD (faktury wewnątrzwspólnotowe)oddzial,typ_kosztu,linia_biznesowa,projekt— wymiary wzbogacone lokalniestan_akceptacji— „do akceptacji”, „zaakceptowana”, „zakwestionowana”
Pianista eksportuje taki plik w formacie CSV (UTF-8, przecinek jako separator, kropka jako separator dziesiętny) albo XLSX z jednym arkuszem „faktury”. Dla Power BI alternatywą jest zapis do lokalnej bazy SQLite lub PostgreSQL — Power BI łączy się wtedy w trybie Import albo DirectQuery i odświeża model w cyklu dziennym. Cała komunikacja lokalna, bez wysyłania danych do chmury.
Anonimizacja przed wysłaniem danych poza firmę
Drugi scenariusz wykorzystania danych — analityk chce zadać pytanie zewnętrznemu narzędziu analitycznemu (ChatGPT, Claude, wyspecjalizowany dashboard w chmurze). W tej chwili bezpośrednie wysłanie pliku z nazwami kontrahentów może naruszać:
- Tajemnicę zawodową — w przypadku doradców podatkowych, radców prawnych (art. 37 ustawy o doradztwie podatkowym, art. 3 ustawy o radcach prawnych)
- Tajemnicę handlową — wynikającą z umów z kontrahentami
- Wymogi RODO — jeśli na fakturach są dane osób fizycznych prowadzących działalność
- Politykę wewnętrzną firmy — coraz częściej zabraniającą wysyłania danych klientów do zewnętrznych LLM-ów
Pianista ma opcję eksportu z maskowaniem. Włączenie tej opcji powoduje, że przy generowaniu pliku:
- Nazwa kontrahenta zostaje zastąpiona skrótem (SHA-256 po NIP, pierwsze 8 znaków heksa) — np. „TAURON POLSKA ENERGIA” staje się „SUP_5f3a2c71”
- NIP zastępuje się kodem kontrahenta (np. „KONTRAHENT_042”)
- Pola opisowe pozycji są zachowane albo oczyszczone (opcja) z potencjalnych danych osobowych
- Kwoty, daty, typ kosztu, oddział, linia biznesowa — wszystko pozostaje
Tak przygotowany plik można wgrać do zewnętrznego narzędzia bez ryzyka. Analityk zachowuje mapping „kod → nazwa” lokalnie i odwraca go dopiero, gdy przenosi wnioski do finalnego raportu wewnętrznego. Praktyka stosowana w pilotażach Pianisty m.in. w jednej kancelarii podatkowej obsługującej dużych klientów i w jednej instytucji publicznej, gdzie regulamin wewnętrzny zakazuje wysyłania danych beneficjentów poza sieć firmową.
Wymiary analityczne — jak je zdefiniować poza KSeF
Zanim analityk wyprodukuje pierwszy raport, trzeba zdefiniować wymiary, po których będzie raportował. KSeF nie dostarczy ich — to są dane wewnętrzne firmy. Rekomendowany zestaw słowników na start:
- Słownik Oddział — lista lokalizacji firmy (Warszawa, Kraków, Poznań, Wrocław, Gdańsk...) z kodami miejscowymi i opcjonalnie REGON-em (dla firm wielooddziałowych zarejestrowanych w GUS)
- Słownik Typ kosztu — rodzajowy (usługi IT, media, czynsze, materiały, transport, marketing, usługi doradcze, wynagrodzenia) z mapowaniem na konta zespołu 4
- Słownik Linia biznesowa — jeśli firma prowadzi rachunek analityczny per segment (np. SaaS, consulting, szkolenia, handel)
- Słownik Projekt / Zlecenie — jeśli firma pracuje projektowo
Do każdego słownika definiuje się reguły przypisania. Przykład reguły dla oddziału:
Jeśli (NIP sprzedawcy = 123-45-67-890 AND nazwa_zawiera „Warszawa”) OR (opis zawiera „Warsaw”) → oddzial = Warszawa
Reguły układa się raz i działają automatycznie dla nowych faktur od tego samego kontrahenta. Nowy kontrahent trafia do osobnej puli „do sklasyfikowania” — analityk przegląda ją raz w tygodniu. W miarę rozbudowy słowników współczynnik auto-klasyfikacji dochodzi do 85-95% po 2-3 miesiącach. Szczegóły o warstwach klasyfikacji.
Pięć błędów analityka pracującego z KSeF
Błędy, które regularnie powtarzają się w pierwszych miesiącach:
- Łączenie po dacie wystawienia zamiast dacie otrzymania. Dla raportu kosztowego i rozliczenia VAT naliczonego właściwa jest zwykle data otrzymania faktury, nie data jej wystawienia przez sprzedawcę. Faktura wystawiona 31 stycznia, otrzymana 2 lutego, jest kosztem lutego. Analityk, który agreguje po P_1 (data wystawienia), ryzykuje przesunięcie miesięcy.
- Ignorowanie faktur korygujących. W eksporcie z KSeF faktura oryginalna i korygująca to dwa rekordy. Jeśli sumujesz bez uwzględnienia korekt, masz zawyżone koszty. Model powinien mieć kolumnę „typ dokumentu” (FA, FK in minus, FK in plus) i odpowiedni DAX-owy filtr.
- Mylenie NrKSeF z numerem faktury. NrKSeF to 36-znakowy identyfikator nadany przez system (wyjaśnienie). Numer faktury to pole nadane przez sprzedawcę i może się powtarzać między sprzedawcami. W modelu kluczem głównym powinien być NrKSeF.
- Zwijanie pozycji faktury w jedną sumę bez kontroli. Faktura z 20 pozycjami, z których 15 dotyczy oddziału A, a 5 oddziału B, nie może być przypisana do jednego oddziału. Analityk powinien raportować z granularnością pozycji, nie faktury, jeśli wymiar jest rozłożony.
- Liczenie VAT-u naliczonego przed akceptacją faktury. VAT do odliczenia pojawia się dopiero po akceptacji faktury (albo po upływie terminu milczącej akceptacji). Analityk, który raportuje VAT naliczony z samego faktu pojawienia się faktury w KSeF, może dać CFO zawyżoną kwotę.
Workflow: od KSeF do raportu krok po kroku
Operacyjny cykl analityka wygląda tak:
- Pobranie faktur z KSeF. W Pianista to jedno kliknięcie — pobranie faktur za wybrany okres przez API. Dla 1000 faktur miesięcznie trwa to minuty.
- Klasyfikacja automatyczna. Reguły i słowniki zdefiniowane wcześniej aplikują się do nowych faktur. Analityk widzi, ile faktur wpadło do każdego oddziału i typu kosztu.
- Przegląd puli „do sklasyfikowania”. Faktury, których reguły nie rozstrzygnęły (zwykle 5-15%), są ręcznie przypisywane. Nowe reguły zapisują się na przyszłość.
- Eksport do CSV/XLSX albo do bazy. Wybór formatu zależy od narzędzia docelowego — Excel dla tabel przestawnych, baza dla Power BI.
- Zasilanie Power Query lub Power BI. Odświeżenie modelu w Excelu lub datasetu w Power BI, które pociąga za sobą odświeżenie dashboardów.
- Budowa tabel przestawnych albo wizualizacji. Typowe wymiary: oddział, miesiąc, typ kosztu, kontrahent. Miary: kwota netto, odchylenie od budżetu, zmiana m/m.
- Raport dla CFO / zarządu. Eksport z Excela lub Power BI do PDF-a albo PowerPointa. Alternatywnie osadzenie dashboardu w raporcie Power BI Report Server (lokalnym).
Przy zautomatyzowanej klasyfikacji i stabilnych słownikach pełny cykl zamyka się w 2-3 godzinach w pierwszym dniu roboczym po końcu miesiąca. Bez automatyzacji — 2-3 dni tygodniowo na samo porządkowanie danych. Patrz też: KSeF dla controllingu — gdzie proces opisany jest z perspektywy controllera finansowego.
Pytania i odpowiedzi
Czy analityk musi mieć własne uprawnienia w KSeF?
Tak, przynajmniej uprawnienie odczytu faktur. W praktyce w firmach nadaje się analitykowi uprawnienie „wgląd w faktury” (bez prawa wystawiania ani akceptacji) przez właściciela NIP lub osobę z pełnomocnictwem ZAW-FA. Alternatywnie analityk korzysta z eksportu przygotowanego przez inną osobę z dostępem — ale wtedy traci niezależność i czeka na kogoś innego. Zalecamy dostęp własny tylko do odczytu.
Jak połączyć dane z KSeF z danymi z ERP-a?
Najczęściej przez wspólny klucz — numer faktury lub NrKSeF — i Power Query w Excelu albo transformację w Power BI. ERP daje zapisy księgowe (konto, dekretacja, MPK), KSeF daje surowy obraz faktury (daty, pozycje, NIP). Analityk łączy je w jednym modelu tabelarycznym: tabela faktur z KSeF jako wymiar (dimension), tabela zapisów z ERP jako fakty (fact table). NrKSeF jest lepszym kluczem niż numer faktury, bo nie powtarza się między sprzedawcami.
Czy Pianista buduje dashboardy?
Nie. Pianista pobiera faktury z KSeF, wzbogaca je o wymiary analityczne (oddział, typ kosztu, linia biznesowa, projekt) i eksportuje do pliku CSV, XLSX albo do lokalnej bazy SQLite lub PostgreSQL. Dashboard budujesz w narzędziu analitycznym — Excel z tabelami przestawnymi, Power BI, Tableau, Metabase. Taka separacja oznacza, że narzędzie do klasyfikacji nie musi być też narzędziem do wizualizacji i odwrotnie.
Czy dane można anonimizować przy eksporcie?
Tak. Przy eksporcie z Pianisty można włączyć maskowanie kontrahentów — nazwa zostaje zastąpiona skrótem (hash SHA-256 po NIP), NIP zastępuje się kodem kontrahenta. W eksporcie pozostają kwoty, daty, typ kosztu, oddział — wszystko czego potrzebuje analiza trendów — ale nie ma nazwy i NIP-u. Tak przygotowany plik można wgrać do zewnętrznego narzędzia analitycznego bez ryzyka naruszenia tajemnicy zawodowej albo RODO.
Jakie jest typowe opóźnienie między datą wystawienia a datą otrzymania w KSeF?
Zwykle 0-3 dni. Faktura uzyskuje NrKSeF w momencie wystawienia przez sprzedawcę, ale data wpływu do systemu odbiorcy zależy od tego, kiedy jego program pobierze paczkę z API. Analityk powinien pamiętać, że dla celów raportu kosztowego (i dla rozliczenia VAT naliczonego) właściwa jest zwykle data otrzymania, nie wystawienia. Różnica bywa istotna na przełomie miesięcy — faktura wystawiona 31 stycznia, otrzymana 2 lutego, trafia do kosztów lutego.
Jak rozpoznać duplikat faktury w eksporcie z KSeF?
Na trzech kluczach jednocześnie: NIP sprzedawcy, numer faktury i kwota brutto. Jeśli wszystkie trzy pola są identyczne, to prawie na pewno duplikat — sprzedawca wysłał tę samą fakturę drugi raz (np. po korekcie anulowanej). Dodatkową kontrolą jest NrKSeF — jeśli NrKSeF jest różny, ale pozostałe trzy pola zgodne, trzeba to zbadać. W ramach kontroli analitycznej warto raportować takie przypadki jako anomalie, nawet jeśli to pojedyncze zdarzenia.
Czy analityk ma dostęp do pełnego XML FA(3)?
Tak. Pianista pobiera z KSeF kompletny plik XML dla każdej faktury i przechowuje go lokalnie. Analityk ma wgląd w pełną strukturę — wszystkie pola nagłówka, pozycje faktury, dane podmiotów, daty, kwoty netto i brutto per stawka VAT, pola opisowe. Jeśli raport wymaga informacji z pola, którego domyślny eksport nie zawiera (np. pole Podmiot3 przy refakturowaniu albo GTU), można dopisać własny kwerendy na bazie XML-a.
Dalej w temacie
Artykuły, które warto przeczytać obok tego:
- KSeF dla controllingu — ten sam pipeline widziany oczami controllera finansowego
- Klasyfikacja faktur po oddziałach — szczegółowo o warstwach reguł i słowników
- MPK w KSeF — centra kosztów w schemacie FA(3) i poza nim
- Automatyczna kategoryzacja faktur — techniki klasyfikacji rodzajowej
- Faktura ustrukturyzowana FA(3) — struktura, która zasila eksport
- KSeF a bezpieczeństwo danych — dlaczego dane nie powinny trafiać do chmury bez anonimizacji
Źródła: ksef.podatki.gov.pl — oficjalny portal KSeF (dokumentacja schemy FA(3), specyfikacja API), podatki.gov.pl/ksef — komunikaty Ministerstwa Finansów, gov.pl/web/kas — zestaw usterek schemy FA(3) — aktualizowana lista walidacji dla budujących integracje.