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:

  • 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 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

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

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

3. 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.0rc6.tar.gz (136.1 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.0rc6-py3-none-any.whl (36.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ksef_cli-1.0.0rc6.tar.gz
  • Upload date:
  • Size: 136.1 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.0rc6.tar.gz
Algorithm Hash digest
SHA256 a8649a564bc7c259ac484cf862c2baf79d370d0e1c8245320379d71dbe7468d1
MD5 4533e5a69ab37747b253bc483f734bc1
BLAKE2b-256 74ad40370d3dd957d962510230024f66dd04fb79b85cdf46dd94d8cce2ba2d0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ksef_cli-1.0.0rc6.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.0rc6-py3-none-any.whl.

File metadata

  • Download URL: ksef_cli-1.0.0rc6-py3-none-any.whl
  • Upload date:
  • Size: 36.8 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.0rc6-py3-none-any.whl
Algorithm Hash digest
SHA256 cf3ef3c2c87acb9fb5d649d963cb23629113361150a829824b93f553310dd5bc
MD5 77d1619e01fdf93601a256c7add3a088
BLAKE2b-256 1aa13095bfe2ac7024e03eb6815180ff443ced20f9c20ddcb731739e71473d26

See more details on using hashes here.

Provenance

The following attestation bundles were made for ksef_cli-1.0.0rc6-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