CLI tool for generating, managing, and downloading KSeF (Polish National e-Invoice System) invoices
Project description
KSeF CLI - Generator Faktur
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
pip install -r requirements.txt
pip install -e .
Spis komend
POBIERANIE Z API KSeF:
list-invoices— Pobierz listę faktur z filtramiget-invoice— Pobierz konkretną fakturę XML
GENEROWANIE FAKTUR:
generate— Wygeneruj XML z pliku JSONinteractive— Wygeneruj XML interaktywnie (pytania)
WALIDACJA I WIZUALIZACJA:
validate— Waliduj plik XML KSeFvisualize— 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:
- Produkcja: https://ap.ksef.mf.gov.pl/web/tokens/generate-token
- Test: https://api-test.ksef.mf.gov.pl (dla flagi
--test)
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
ksef-cli interactive
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):
- Token autoryzacyjny generujesz w portalu KSeF
- Aplikacja szyfruje token przy użyciu RSA-OAEP (klucz publiczny z API)
- Wykonuje 6-krokowy proces autentykacji
- 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
Instalacja dla deweloperów
# Sklonuj repozytorium
git clone https://github.com/krzysbaranski/ksef-cli.git
cd ksef-cli
# Stwórz wirtualne środowisko
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Zainstaluj zależności deweloperskie
pip install -r requirements-dev.txt
pip install -e .
Uruchamianie testów
# Uruchom wszystkie testy
pytest
# Uruchom testy z pokryciem kodu
pytest --cov=ksef_cli --cov-report=term-missing
# Uruchom konkretny test
pytest tests/test_models.py
Sprawdzanie jakości kodu
# Formatowanie kodu
black ksef_cli/ tests/
# Sortowanie importów
isort ksef_cli/ tests/
# Linting
flake8 ksef_cli/ tests/
# Type checking
mypy ksef_cli/ --ignore-missing-imports
# Security scanning
bandit -r ksef_cli/
Standardy kodu
- Python: 3.14+
- 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
Projekt używa GitHub Actions do automatycznego:
- Testowania na Python 3.14
- Sprawdzania jakości kodu (Black, Flake8, isort, mypy)
- Skanowania bezpieczeństwa (Bandit, Safety)
- Weryfikacji pokrycia kodu (minimum 80%)
Status pipeline'u można sprawdzić w zakładce Actions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ksef_cli-1.0.0rc4.tar.gz.
File metadata
- Download URL: ksef_cli-1.0.0rc4.tar.gz
- Upload date:
- Size: 129.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41179f629ec3ec7a4e3c94d0446d3f584bfcf8af175cb247d30d5847faf9d60d
|
|
| MD5 |
685f366e9ae86f96c157a66c5f6731f7
|
|
| BLAKE2b-256 |
10d6445e7adfbfacde8b479446b5e16091773256aa4b986fd473d5ad6a9d21b5
|
Provenance
The following attestation bundles were made for ksef_cli-1.0.0rc4.tar.gz:
Publisher:
python-publish.yml on krzysbaranski/ksef-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ksef_cli-1.0.0rc4.tar.gz -
Subject digest:
41179f629ec3ec7a4e3c94d0446d3f584bfcf8af175cb247d30d5847faf9d60d - Sigstore transparency entry: 1259203972
- Sigstore integration time:
-
Permalink:
krzysbaranski/ksef-cli@b7a4082c51ade02c97bb3380e3ab2587e0dadb1d -
Branch / Tag:
refs/tags/1.0.0rc4 - Owner: https://github.com/krzysbaranski
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@b7a4082c51ade02c97bb3380e3ab2587e0dadb1d -
Trigger Event:
release
-
Statement type:
File details
Details for the file ksef_cli-1.0.0rc4-py3-none-any.whl.
File metadata
- Download URL: ksef_cli-1.0.0rc4-py3-none-any.whl
- Upload date:
- Size: 31.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56dd5911bdcb140a5c44241016d068aa5ff389732502a658dd6d599187ea845a
|
|
| MD5 |
dc427ab330cb94c9f58b8178ceaa9597
|
|
| BLAKE2b-256 |
d9dffed2e2e94d4328fe8964a07604be2368e51d59b8e4779f86c9de4dd1de68
|
Provenance
The following attestation bundles were made for ksef_cli-1.0.0rc4-py3-none-any.whl:
Publisher:
python-publish.yml on krzysbaranski/ksef-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ksef_cli-1.0.0rc4-py3-none-any.whl -
Subject digest:
56dd5911bdcb140a5c44241016d068aa5ff389732502a658dd6d599187ea845a - Sigstore transparency entry: 1259204095
- Sigstore integration time:
-
Permalink:
krzysbaranski/ksef-cli@b7a4082c51ade02c97bb3380e3ab2587e0dadb1d -
Branch / Tag:
refs/tags/1.0.0rc4 - Owner: https://github.com/krzysbaranski
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@b7a4082c51ade02c97bb3380e3ab2587e0dadb1d -
Trigger Event:
release
-
Statement type: