Czy można zautomatyzować analizę faktur z KSeF

Krótka odpowiedź

Tak. KSeF udostępnia API umożliwiające automatyczne pobieranie faktur. W połączeniu z narzędziami analitycznymi można zbudować w dużym stopniu zautomatyzowany system weryfikacji i analizy faktur.

Co umożliwia automatyzację

API KSeF

Ministerstwo Finansów udostępnia oficjalne API pozwalające m.in. na:

OperacjaOpis
Pobieranie fakturPobieranie faktur na podstawie kryteriów (np. zakres dat, typ dokumentu)
Szczegóły fakturyPobranie pełnej treści XML
Status fakturSprawdzenie statusu przetwarzania wysłanych dokumentów
WystawianieWysyłanie nowych faktur do KSeF
UPOPobieranie urzędowego poświadczenia odbioru

Uwaga: KSeF nie udostępnia mechanizmu typu „webhook” (czyli automatycznego powiadomienia o nowej fakturze w czasie rzeczywistym). W praktyce oznacza to, że system musi cyklicznie odpytywać API o nowe dokumenty.

Standaryzacja danych

Faktury w KSeF mają jednolity format (XML zgodny ze schemą FA(3)):

  • Dane są uporządkowane i opisane (zamiast skanów lub PDF)
  • Pola mają jednoznaczne znaczenie
  • Dokument przechodzi walidację w KSeF przed przyjęciem

Dzięki temu nie ma potrzeby stosowania OCR ani ręcznego przepisywania danych.

Architektura automatycznej analizy

Przepływ danych


┌─────────────────┐     ┌─────────────────┐
│      KSeF       │────▶│   Connector     │
│   (API MF)      │     │   (pobieranie)  │
└─────────────────┘     └────────┬────────┘
│
▼
┌─────────────────┐
│  Parser XML     │
│  (ekstrakcja)   │
└────────┬────────┘
│
▼
┌─────────────────┐
│  Wzbogacanie    │
│  danych         │
└────────┬────────┘
│
▼
┌─────────────────┐
│  Analiza        │
│  ryzyka         │
└────────┬────────┘
│
▼
┌─────────────────┐
│  Wynik          │
│ (raport/alert)  │
└─────────────────┘

Komponenty systemu

1. Connector KSeF (pobieranie danych):

class KsefConnector:
    def __init__(self, token):
        self.base_url = "https://ksef.mf.gov.pl/api"
        self.session = self.authenticate(token)

    def get_invoices(self, date_from, date_to):
        endpoint = "/invoices/exports"
        payload = {
            'dateFrom': date_from,
            'dateTo': date_to
        }
        response = self.session.post(endpoint, json=payload)
        return response.json()

    def get_invoice_details(self, reference_number):
        endpoint = f"/invoices/{reference_number}"
        response = self.session.get(endpoint)
        return response.content  # XML

Uwaga: rzeczywiste API KSeF opiera się na bardziej złożonym mechanizmie eksportów i identyfikatorów (np. numer KSeF), dlatego implementacja musi być zgodna z aktualną dokumentacją MF.

2. Parser XML (odczyt danych):

class InvoiceParser:
    def parse(self, xml_content):
        root = ET.fromstring(xml_content)
        ns = {'fa': 'http://crd.gov.pl/wzor/2023/06/29/12648/'}

        return {
            'nip_seller': root.find('.//fa:Podmiot1//fa:NIP', ns).text,
            'name_seller': root.find('.//fa:Podmiot1//fa:Nazwa', ns).text,
            'nip_buyer': root.find('.//fa:Podmiot2//fa:NIP', ns).text,
            'number': root.find('.//fa:P_2', ns).text,
            'date': root.find('.//fa:P_1', ns).text,
            'amount_gross': Decimal(root.find('.//fa:P_15', ns).text),
        }

3. Wzbogacanie danych:

class DataEnricher:
    def enrich(self, invoice):
        # przykład: sprawdzenie rachunku na białej liście VAT
        result = self.check_whitelist(
            invoice['nip_seller'],
            invoice.get('bank_account')
        )

        invoice['whitelist_valid'] = result.account_in_list
        invoice['vat_status'] = result.vat_status

        return invoice

4. Analiza ryzyka:

class InvoiceAnalyzer:
    def analyze(self, invoice):
        alerts = []
        risk_score = 0

        if not invoice.get('whitelist_valid'):
            alerts.append(('WHITELIST_FAIL', 'wysokie ryzyko'))
            risk_score += 30

        if invoice.get('amount_gross', 0) > 50000:
            alerts.append(('HIGH_AMOUNT', 'średnie ryzyko'))
            risk_score += 15

        return {
            'alerts': alerts,
            'risk_score': risk_score
        }

Poziomy automatyzacji

Poziom 1: Automatyczne pobieranie

Zakres:

  • Cykliczne pobieranie faktur z KSeF
  • Zapisywanie w systemie (np. baza danych, pliki)
  • Powiadomienia o nowych dokumentach

Korzyści:

  • Brak ręcznego logowania do KSeF
  • Centralne archiwum faktur

Poziom 2: Automatyczna walidacja

Zakres:

  • Sprawdzenie rachunku na białej liście VAT
  • Proste kontrole matematyczne
  • Wykrywanie duplikatów

Korzyści:

  • Szybsze wykrywanie błędów
  • Ograniczenie ryzyka

Poziom 3: Automatyczna analiza ryzyka

Zakres:

  • Ocena wiarygodności faktury
  • Analiza historii kontrahenta
  • Wykrywanie nietypowych zdarzeń

Korzyści:

  • Lepsza kontrola nad płatnościami
  • Wczesne wykrywanie potencjalnych oszustw

Poziom 4: Automatyzacja procesu (workflow)

Zakres:

  • Automatyczne oznaczanie faktur niskiego ryzyka
  • Kierowanie trudniejszych przypadków do weryfikacji
  • Integracja z systemami księgowymi i płatnościami

Korzyści:

  • Mniej pracy ręcznej
  • Lepsza organizacja procesów

Dostępne narzędzia

Rozwiązania gotowe

TypPrzykładyDla kogo
Integracje KSeFComarch, Sage, SymfoniaFirmy i biura rachunkowe
Systemy ERPSAP, Microsoft DynamicsDuże organizacje

Własne rozwiązanie

Kiedy warto:

  • Duża liczba faktur
  • Specyficzne potrzeby biznesowe
  • Integracja z własnymi systemami

Przykład harmonogramu

Codzienny cykl

06:00 - Pobranie faktur z KSeF (np. z ostatniej doby)
06:05 - Przetworzenie danych
06:10 - Wzbogacenie danych (np. biała lista)
06:15 - Analiza ryzyka
06:20 - Generowanie raportu

W praktyce częstotliwość zależy od potrzeb – może to być kilka razy dziennie lub częściej.

ROI automatyzacji

Przykładowe wyliczenie

Przed automatyzacją:

  • 500 faktur/miesiąc
  • 5 min na fakturę
  • ≈ 42 godziny pracy

Po automatyzacji:

  • 80% bez ręcznej weryfikacji
  • 20% wymaga sprawdzenia

Efekt: znaczące ograniczenie czasu pracy i kosztów.

Dodatkowe korzyści

  • Mniejsze ryzyko oszustwa
  • Mniej błędów
  • Szybszy obieg dokumentów

FAQ

Czy potrzebuję programisty?

Nie zawsze. Do prostych zastosowań dostępne są gotowe narzędzia. Przy bardziej zaawansowanej automatyzacji – najczęściej tak.

Jak uzyskać dostęp do API KSeF?

Wymagane jest konto w KSeF oraz odpowiednie uwierzytelnienie (np. token, podpis kwalifikowany lub profil zaufany – zgodnie z aktualną dokumentacją MF).

Czy automatyzacja jest bezpieczna?

To zależy od rozwiązania. W praktyce stosuje się m.in.:

  • szyfrowanie danych
  • kontrolę dostępu
  • rejestrowanie operacji (tzw. ślad audytowy)

Od kiedy automatyzacja ma sens?

Zwykle już od kilkudziesięciu faktur miesięcznie, ale istotny jest też poziom ryzyka – nawet jedna błędna lub fałszywa faktura może generować duże straty.


Treść ma charakter informacyjny i edukacyjny. Nie stanowi porady prawnej ani podatkowej.

Przydatne serwisy

Darmowa walidacja faktury KSeF

Sprawdź plik XML względem schematu XSD — bez rejestracji.

Status KSeF

Pierwszy serwis prezentuje informacje o statusie samego KSeF, drugi – komunikaty techniczne Ministerstwa Finansów.

Dalsze korzystanie z tej witryny oznacza akceptację Polityki prywatności . Używamy plików cookie, aby zapewnić najlepszą jakość korzystania z naszej witryny internetowej. Przeczytaj naszą Politykę plików cookie .
Akceptuj Odrzuć