👥 Dla twojej firmy

KSeF dla analityka finansowego — dane do Excela i Power BI

Redakcja Pianista 2026-04-22 Aktualizacja: 2026-04-22

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.

W skrócie

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 bazowy
  • nr_faktury — numer nadany przez sprzedawcę
  • data_wystawienia, data_sprzedazy, data_otrzymania — wszystkie trzy w formacie ISO (YYYY-MM-DD)
  • nip_sprzedawcy, nazwa_sprzedawcy
  • kwota_netto, kwota_vat, kwota_brutto — w PLN, po 2 miejsca po przecinku
  • waluta — zwykle PLN, ale może być EUR, USD (faktury wewnątrzwspólnotowe)
  • oddzial, typ_kosztu, linia_biznesowa, projekt — wymiary wzbogacone lokalnie
  • stan_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:

  1. Łą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.
  2. 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.
  3. 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.
  4. 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.
  5. 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:

  1. 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.
  2. 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.
  3. 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ść.
  4. Eksport do CSV/XLSX albo do bazy. Wybór formatu zależy od narzędzia docelowego — Excel dla tabel przestawnych, baza dla Power BI.
  5. 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.
  6. Budowa tabel przestawnych albo wizualizacji. Typowe wymiary: oddział, miesiąc, typ kosztu, kontrahent. Miary: kwota netto, odchylenie od budżetu, zmiana m/m.
  7. 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:

Ź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.

Setki faktur z KSeF, rozdzielone po oddziałach

Pianista pobiera faktury z KSeF i klasyfikuje je — po oddziałach, liniach biznesowych, typach kosztów. Lokalnie, bez chmury.

Umów 20-minutowe demo