Skip to main content

CLI tool for generating, managing, and downloading KSeF (Polish National e-Invoice System) invoices

Project description

KSeF CLI - Generator Faktur

PyPI version CI/CD Pipeline Python Version Code style: black License: MIT

Aplikacja CLI do generacji i zarządzania fakturami w formacie KSeF (Krajowy System e-Faktur) zgodnie ze schematem FA (3) wersja 1-0E. Obsługuje tworzenie faktur, pobieranie z API KSeF oraz wizualizację do PDF.

Instalacja

Z PyPI (rekomendowane)

pip install ksef-cli

Instalacja dla deweloperów

git clone https://github.com/krzysbaranski/ksef-cli.git
cd ksef-cli
poetry install

Spis komend

POBIERANIE Z API KSeF:

  • list-invoices — Pobierz listę faktur z filtrami
  • get-invoice — Pobierz konkretną fakturę XML

GENEROWANIE FAKTUR:

  • generate — Wygeneruj XML z pliku JSON
  • interactive — Wygeneruj XML interaktywnie (pytania)

WALIDACJA I WIZUALIZACJA:

  • validate — Waliduj plik XML KSeF
  • visualize — Konwertuj XML na PDF

Użycie

Pobieranie listy faktur z KSeF

Pobierz faktury z API KSeF przy użyciu tokenu autoryzacyjnego:

ksef-cli list-invoices \
  -n 1234567890 \
  -t <token> \
  --date-from "2026-01-01T00:00:00.000Z" \
  --date-to "2026-12-31T23:59:59.999Z"

Opcje filtrowania

# Jako nabywca (zamiast sprzedawcy)
ksef-cli list-invoices -n 1234567890 -t <token> \
  --date-from "2026-01-01T00:00:00.000Z" \
  --date-to "2026-12-31T23:59:59.999Z" \
  --subject-type Subject2

# Filtr po kwocie (brutto)
ksef-cli list-invoices -n 1234567890 -t <token> \
  --date-from "2026-01-01T00:00:00.000Z" \
  --date-to "2026-12-31T23:59:59.999Z" \
  --amount-type Brutto --amount-from 100 --amount-to 1000

# Filtr po walucie (można podać wiele)
ksef-cli list-invoices -n 1234567890 -t <token> \
  --date-from "2026-01-01T00:00:00.000Z" \
  --date-to "2026-12-31T23:59:59.999Z" \
  --currency PLN --currency EUR

# Filtr po typie faktury
ksef-cli list-invoices -n 1234567890 -t <token> \
  --date-from "2026-01-01T00:00:00.000Z" \
  --date-to "2026-12-31T23:59:59.999Z" \
  --invoice-type Vat

# Tylko faktury z załącznikami
ksef-cli list-invoices -n 1234567890 -t <token> \
  --date-from "2026-01-01T00:00:00.000Z" \
  --date-to "2026-12-31T23:59:59.999Z" \
  --has-attachment

# Zapis do pliku JSON
ksef-cli list-invoices -n 1234567890 -t <token> \
  --date-from "2026-01-01T00:00:00.000Z" \
  --date-to "2026-12-31T23:59:59.999Z" \
  --output faktury.json

Token KSeF

Token autoryzacyjny generujesz w portalu KSeF:

Debugowanie

Użyj flagi --debug aby zobaczyć szczegóły żądań i odpowiedzi:

ksef-cli list-invoices -n 1234567890 -t $TOKEN \
  --date-from "2026-01-01T00:00:00.000Z" \
  --date-to "2026-12-31T23:59:59.999Z" \
  --debug

Pobieranie konkretnej faktury z KSeF

Pobierz pełny dokument XML faktury po numerze KSeF:

ksef-cli get-invoice \
  -n 1234567890 \
  -t <token> \
  -k 123-456-789-10-2026-0000001

Zapisz do pliku:

ksef-cli get-invoice \
  -n 1234567890 \
  -t <token> \
  -k 123-456-789-10-2026-0000001 \
  -o faktura.xml

Generowanie faktury z pliku JSON

ksef-cli generate -i invoice_data.json -o faktura.xml

Generowanie faktury interaktywnie

Tryb interaktywny z obsługą szablonów:

ksef-cli interactive

Aplikacja zapyta się, czy chcesz użyć szablonu istniejącej faktury:

Czy masz plik szablonu faktury? [y/N]: y
Ścieżka do pliku szablonu (XML): moje_faktury/poprzednia.xml
✓ Szablon załadowany z: moje_faktury/poprzednia.xml

Workflow szablonu

Dla każdej sekcji (sprzedawca, nabywca, dane faktury, pozycje, stopka):

  1. Zachować — Użyj danych z szablonu (domyślnie)
  2. Edytować — Zmień wybrany fragment
  3. Pozycje — Keep/Edit/Delete (k/e/u) dla każdej pozycji, dodaj nowe

Wieloliniowa stopka faktury

Stopka faktury obsługuje wiele linii. Przy pytaniu o stopkę:

  • Wpisz każdą linię oddzielnie (Enter między liniami)
  • Aby zakończyć edycję: wciśnij Enter na pustej linii LUB Ctrl+D
  • Aby anulować edycję: wciśnij Ctrl+C w dowolnym momencie

Przykład z Enter na pustej linii:

Stopka faktury (opcjonalnie)
: Dziękujemy za współpracę!
: Zapraszamy do ponownego kontaktu.
: 

Przykład z Ctrl+D:

Stopka faktury (opcjonalnie)
: Dziękujemy za współpracę!
: Zapraszamy do ponownego kontaktu.
<Ctrl+D>

Aby całkowicie pominąć stopkę, wciśnij Ctrl+D bez wpisywania żadnej treści.

Automatyczne tworzenie katalogów

Jeśli plik wyjściowy zawiera ścieżkę (np. moje_faktury/2025/faktura.xml), aplikacja automatycznie stworzy brakujące katalogi.

Wizualizacja PDF na koniec

Po wygenerowaniu faktury aplikacja zapyta, czy chcesz od razu wygenerować wizualizację PDF.

Walidacja faktury

ksef-cli validate -f faktura.xml

Wizualizacja faktury XML do PDF

Generowanie wizualizacji PDF z pliku XML faktury KSeF:

ksef-cli visualize -i faktura.xml -o faktura.pdf

Można również połączyć generowanie XML i PDF:

# Wygeneruj XML
ksef-cli generate -i invoice_data.json -o faktura.xml

# Wygeneruj PDF z XML
ksef-cli visualize -i faktura.xml -o faktura.pdf

Format danych wejściowych (JSON)

{
  "sprzedawca": {
    "nip": "5260250274",
    "nazwa": "test 1",
    "adres": {
      "kod_kraju": "PL",
      "adres_l1": "adres 1",
      "adres_l2": "test"
    }
  },
  "nabywca": {
    "nip": "9492107026",
    "nazwa": "X-Kom test ksef",
    "adres": {
      "kod_kraju": "PL",
      "adres_l1": "test 1ksef"
    }
  },
  "faktura": {
    "numer": "a123",
    "data_wystawienia": "2026-01-30",
    "miejsce_wystawienia": "Warszawa",
    "data_sprzedazy": "2026-01-31",
    "waluta": "PLN",
    "pozycje": [
      {
        "nr": 1,
        "nazwa": "Usasdf",
        "jm": "h",
        "ilosc": 1,
        "cena_netto": 100.00,
        "wartosc_netto": 100.00,
        "stawka_vat": 23
      }
    ],
    "forma_platnosci": "6"
  }
}

Autentykacja KSeF

Komenda list-invoices korzysta z token-based authentication (API v2 KSeF):

  1. Token autoryzacyjny generujesz w portalu KSeF
  2. Aplikacja szyfruje token przy użyciu RSA-OAEP (klucz publiczny z API)
  3. Wykonuje 6-krokowy proces autentykacji
  4. Otrzymuje JWT access token do zapytań o faktury

Ograniczenia API:

  • 20 żądań na godzinę per token
  • Wsparcie dla FA-3 (formularza FA)
  • Daty w formacie ISO-8601 z czasem UTC (np. 2026-01-01T00:00:00.000Z)

Dokumentacja KSeF:

Praktyczne workflow'i

1. Generowanie faktury, walidacja i wizualizacja

# 1. Przygotuj dane w pliku JSON
# 2. Wygeneruj XML
ksef-cli generate -i my_invoice.json -o faktura.xml

# 3. Waliduj format
ksef-cli validate -f faktura.xml

# 4. Utwórz PDF do wydruku/wysyłki
ksef-cli visualize -i faktura.xml -o faktura.pdf

2. Pobieranie faktury z KSeF

# Pobierz listę faktur z ostatniego miesiąca
ksef-cli list-invoices -n 1234567890 -t $TOKEN \
  --date-from "2026-03-01T00:00:00.000Z" \
  --date-to "2026-03-31T23:59:59.999Z" \
  --output faktury_marzec.json

# Z otrzymanego JSON weź ksefReferenceNumber
# Pobierz konkretną fakturę XML
ksef-cli get-invoice -n 1234567890 -t $TOKEN \
  -k "123-456-789-10-2026-0000001" \
  -o pobrana_faktura.xml

# Wizualizuj pobraną fakturę
ksef-cli visualize -i pobrana_faktura.xml -o pobrana_faktura.pdf

3. Filtrowanie faktur przed poborem

# Pobierz tylko faktury VAT powyżej 1000 PLN
ksef-cli list-invoices -n 1234567890 -t $TOKEN \
  --date-from "2026-01-01T00:00:00.000Z" \
  --date-to "2026-12-31T23:59:59.999Z" \
  --subject-type Subject1 \
  --date-type Issue \
  --invoice-type Vat \
  --amount-type Brutto \
  --amount-from 1000 \
  --output high_value_invoices.json

4. Debugowanie problemów

# Włącz debug mode dla szczegółowych informacji
ksef-cli get-invoice -n 1234567890 -t $TOKEN \
  -k "123-456-789-10-2026-0000001" \
  --debug

# Debug info pojawia się na stderr (STDERR), 
# dane na stdout (STDOUT), możesz je oddzielić:
ksef-cli get-invoice -n 1234567890 -t $TOKEN \
  -k "123-456-789-10-2026-0000001" \
  --debug \
  -o faktura.xml 2> debug.log

Przykłady

Zobacz examples/example_invoice.json dla pełnego przykładu.

Rozwój

Uruchamianie testów

# Uruchom wszystkie testy
poetry run pytest

# Uruchom testy z pokryciem kodu
poetry run pytest --cov=ksef_cli --cov-report=term-missing

# Uruchom konkretny test
poetry run pytest tests/test_ksef_api.py -v

Sprawdzanie jakości kodu

# Formatowanie kodu
poetry run black ksef_cli/ tests/

# Sortowanie importów
poetry run isort ksef_cli/ tests/

# Linting
poetry run flake8 ksef_cli/ tests/

# Type checking
poetry run mypy ksef_cli/

# Security scanning
poetry run bandit -r ksef_cli/

Standardy kodu

  • Python: 3.13+
  • Formatowanie: Black (line length: 100)
  • Linting: Flake8
  • Type hints: Wymagane dla wszystkich funkcji publicznych
  • Pokrycie testami: Minimum 80%
  • Dokumentacja: Docstringi dla wszystkich klas i funkcji publicznych

Kontrybuowanie

Zapraszamy do współtworzenia projektu! Zobacz CONTRIBUTING.md dla szczegółowych informacji.

Licencja

MIT License - zobacz plik LICENSE dla szczegółów.

CI/CD i Publikacja

Projekt używa GitHub Actions do automatycznego:

  • Testowania na Python 3.13+
  • Sprawdzania jakości kodu (Black, Flake8, isort, mypy)
  • Skanowania bezpieczeństwa (Bandit, Safety)
  • Weryfikacji pokrycia kodu (minimum 80%)
  • Publikacji do TestPyPI (każde push na main)
  • Publikacji do PyPI (przy tworzeniu release'u)

Pakiet jest dostępny na PyPI.

Status pipeline'u można sprawdzić w zakładce Actions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ksef_cli-1.0.0rc5.tar.gz (137.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ksef_cli-1.0.0rc5-py3-none-any.whl (37.0 kB view details)

Uploaded Python 3

File details

Details for the file ksef_cli-1.0.0rc5.tar.gz.

File metadata

  • Download URL: ksef_cli-1.0.0rc5.tar.gz
  • Upload date:
  • Size: 137.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ksef_cli-1.0.0rc5.tar.gz
Algorithm Hash digest
SHA256 1cc36b8802ca58e1e90b0503d65e6b6d8e4a63bac4610bba4bddb20dd9741431
MD5 10f12b7be1692a26a69e41382b6fe345
BLAKE2b-256 c54b0312df294431019e5fcc8bf07276c302a4953d998efd475345fcd04cc22f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ksef_cli-1.0.0rc5.tar.gz:

Publisher: python-publish.yml on krzysbaranski/ksef-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ksef_cli-1.0.0rc5-py3-none-any.whl.

File metadata

  • Download URL: ksef_cli-1.0.0rc5-py3-none-any.whl
  • Upload date:
  • Size: 37.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ksef_cli-1.0.0rc5-py3-none-any.whl
Algorithm Hash digest
SHA256 30e78eadfd1a0a7ce1c69d765cba5a3bd23c1e72616ae7628e4b6252d11cb646
MD5 27705a1ef9bd94748828826398704f69
BLAKE2b-256 f27e50d849b154ce7b8ba527234b0da9c808b8a9b6dd3f2ba97b0a15e59c1405

See more details on using hashes here.

Provenance

The following attestation bundles were made for ksef_cli-1.0.0rc5-py3-none-any.whl:

Publisher: python-publish.yml on krzysbaranski/ksef-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page