Prosty skrypt w Pythonie do konwersji klasycznych plików XML w formacie eform/order do struktury XML zgodnej z polskim standardem KSeF FA(3).
Skrypt:
- odczytuje wejściowy plik XML z fakturą / zamówieniem,
- wykrywa kodowanie pliku wejściowego,
- mapuje dane sprzedawcy, nabywcy, pozycji i płatności,
- buduje dokument XML w formacie KSeF FA(3),
- zapisuje wynik do pliku wyjściowego,
- potrafi walidować wygenerowany plik,
- obsługuje przetwarzanie pojedynczych plików i tryb wsadowy,
- umożliwia użycie pliku konfiguracyjnego JSON.
- Python 3.9 lub nowszy
- system z uruchomionym
python3
Skrypt korzysta wyłącznie ze standardowej biblioteki Pythona, więc nie wymaga instalowania dodatkowych pakietów.
invoice_converter.py— główny skrypt konwertujący (CLI)ksef_gui.py— interfejs graficzny (tkinter)Uruchom_KSeF.bat— launcher Windows — kliknij dwukrotnie, aby uruchomić GUIksef_config.json— przykładowa konfiguracja użytkownika
- Zainstaluj Python 3.9+ ze strony https://www.python.org/downloads/
- Podczas instalacji zaznacz:
Add Python to PATHoraztcl/tk and IDLE
- Podczas instalacji zaznacz:
- Skopiuj cały folder projektu na komputer
- Kliknij dwukrotnie plik
Uruchom_KSeF.bat - W oknie programu:
- Wybierz folder z fakturami XML (przycisk „Wybierz…")
- Wybierz folder wyjściowy
- Opcjonalnie wskaż plik konfiguracyjny
ksef_config.json - Kliknij Konwertuj
- Wyniki pojawią się w folderze wyjściowym, a logi w dolnej części okna
python3 invoice_converter.py input.xml output.xmlpython3 invoice_converter.py input.xml output.xml --config ksef_config.jsonpython3 invoice_converter.py --validate output_ksef.xmlpython3 invoice_converter.py --init-configpython3 invoice_converter.py --batch input_dir output_dir --config ksef_config.jsonSkrypt zakłada, że wejściowy XML zawiera strukturę podobną do:
<eform>
<order>
<document number="..." date="...">...</document>
<supplier>...</supplier>
<customer>...</customer>
<orderItem ...>...</orderItem>
<payment ...>...</payment>
</order>
</eform>W szczególności wykorzystywane są:
document/@numberdocument/@datesupplier/dicsupplier/companycustomer/diccustomer/companyorderItem/@priceorderItem/@quantityorderItem/@unitorderItem/@rateVATpayment/@payType
Plik konfiguracyjny pozwala nadpisywać dane sprzedawcy i ustawienia domyślne.
Dane sprzedawcy wpisywane do pliku wynikowego.
Przykładowe pola:
nipnazwaadres_l1adres_l2kod_krajuemailtelefon
Ustawienia domyślne dokumentu.
Przykładowe pola:
kod_walutymiejsce_wystawieniapayment_daysforma_platnoscisystem_info
Dane rachunku bankowego dodawane do sekcji płatności.
Przykładowe pola:
nr_rbnazwa_bankuopis
Domyślne wartości wybranych pól adnotacji KSeF.
Pozwala mapować niestandardowe oznaczenia VAT na konkretne stawki liczbowe.
Lista dodatkowych wpisów DodatkowyOpis dodawanych do faktury.
python3 invoice_converter.py --init-configUstaw przede wszystkim:
- NIP sprzedawcy
- nazwę firmy
- adres
- e-mail i telefon
- numer rachunku bankowego
python3 invoice_converter.py normalny.xml output_ksef.xml --config ksef_config.jsonpython3 invoice_converter.py --validate output_ksef.xmlDostępne są dwa przełączniki logowania:
python3 invoice_converter.py input.xml output.xml --verbose
python3 invoice_converter.py input.xml output.xml --quiet--verbose— szczegółowe logi diagnostyczne--quiet— wyświetlanie tylko błędów
Domyślne mapowanie stawek VAT:
high→23low→8reduced→5zero→0none→ zwolnienieexempt→ zwolnieniezw→ zwolnienie
Domyślne mapowanie typów płatności:
cash,gotowka→1card,karta→2voucher,bon→3cheque,check,czek→4credit,kredyt→5transfer,bank_transfer,bank,przelew→6mobile,blik→7
- Skrypt nie wykonuje pełnej walidacji XSD, tylko walidację logiczną wybranych pól.
- Poprawność końcowego XML należy zweryfikować w docelowym środowisku KSeF lub oficjalnym narzędziu walidującym.
- Dane wejściowe muszą mieć zgodną strukturę XML.
- W przypadku nieprawidłowego lub niespójnego kodowania znaki narodowe mogą zostać uszkodzone już na etapie odczytu pliku wejściowego.
- Szczegóły wykrytych błędów implementacyjnych opisano w pliku
CODE_REVIEW.md.
- konwersja eksportów XML z zewnętrznych systemów sprzedażowych,
- przygotowanie danych do dalszej integracji z KSeF,
- walidacja i testowanie mapowania danych faktur do struktury FA(3),
- przetwarzanie wielu dokumentów w trybie wsadowym.
python3 invoice_converter.py normalny.xml output_ksef.xml --config ksef_config.jsonPo wykonaniu polecenia wynik zostanie zapisany do output_ksef.xml.