
Plik wsadowy to najszybszy sposób, by przekazać do TFG wiele umów naraz - bez ręcznego przeklikiwania formularza. Trzeba go tylko zbudować zgodnie ze ściśle określoną strukturą. W tym przewodniku pokazujemy, czym różni się plik CSV od JSON, jakie pola wypełnić, jak wygląda gotowy plik na konkretnym przykładzie i dlaczego wykaz bywa odrzucany przez UFG.
CSV czy JSON - który format wybrać
System TFG przyjmuje pliki w dwóch formatach. Możesz korzystać z obu zamiennie - różnią się głównie tym, jak złożone umowy potrafią pomieścić:
| CSV | JSON | |
|---|---|---|
| Warianty podróży | tylko 1 wariant na umowę | do 50 wariantów na umowę |
| Kiedy się sprawdza | proste umowy, eksport prosto z Excela | umowy złożone: różne terminy, transport, miejsca realizacji |
| Struktura | płaska (wiersz = umowa) | zagnieżdżona (obiekty i tablice) |
| Limit umów w pliku | 5000 | 5000 |
W skrócie: jeśli każda Twoja umowa to jeden wyjazd dla grupy podróżnych i dane masz w arkuszu - wybierz CSV. Jeśli w ramach jednej umowy występują różne warianty (np. część osób leci, część jedzie autokarem, albo są dwa różne terminy) - potrzebujesz JSON, bo CSV takiej umowy nie obsłuży.
To uzupełnienie, nie zamiennik
Plik wsadowy to jeden z trzech sposobów zasilania wykazu - obok interaktywnego formularza i integracji API. Pełne porównanie metod oraz zakres wymaganych danych opisaliśmy w artykule Wykaz umów TFG od 1 lipca 2026.
Zanim zaczniesz: co przygotować
UFG udostępnia w Portalu TFG komplet materiałów, które warto pobrać przed pierwszą wysyłką:
- szablon i instrukcję przygotowania pliku CSV z Excela,
- przykładowe pliki wsadowe (wzorcowe CSV i JSON),
- słowniki kodów - kraje, lotniska (ICAO), zakres terytorialny, przedmiot umowy, sposób płatności, waluty,
- plik z regułami walidacji - lista warunków, które musi spełnić każda umowa.
Do tego potrzebujesz eksportu z własnego systemu rezerwacji lub arkusza, w którym prowadzisz umowy. To z niego przeniesiesz dane do struktury wymaganej przez TFG - i to właśnie tutaj pojawia się najwięcej pracy, bo część pól (kody ICAO, zakres terytorialny, przedmiot umowy) typowy system rezerwacyjny nigdy nie zapisywał.
Jakie pola musi zawierać każda umowa
Wykaz prowadzi się dla każdej umowy (nie dla każdego uczestnika). Dla nowej umowy (zasilenie typu „nowe dane”) plik musi zawierać co najmniej poniższe pola. Zwróć uwagę na wymagane formaty - to przez nie najczęściej „wykłada się” walidacja:
| Pole | Format / słownik | Przykład |
|---|---|---|
| nrUmowyRezerwacji | tekst, maks. 50 znaków, unikatowy | REZ-2026-0042 |
| dataZawarciaUmowy | data RRRR-MM-DD | 2026-07-05 |
| przedmiotUmowy | słownik przedmiotów umów | impreza turystyczna |
| sposobPrzyjmowaniaWplat | słownik sposobów płatności | przelew |
| liczbaPodroznych | liczba dodatnia | 2 |
| terminRealizacjiOd / Do | data RRRR-MM-DD | 2026-09-10 / 2026-09-17 |
| zakresTerytorialny | słownik zakresów terytorialnych | Europa |
| kraj | słownik krajów | Grecja |
| miejscowoscTrasa | tekst, maks. 100 znaków | Heraklion |
| rodzajSrodkaTransportu | słownik rodzajów transportu | lotniczy czarterowy |
| kodLotniskaDocelowego | słownik lotnisk (ICAO), gdy jest przelot | LGIR |
| lacznaCenaUslug | liczba w formacie #.## (> 0) | 7400.00 |
| walutaUslug | słownik walut | PLN |
Opcjonalnie dodajesz tablice wplaty (terminy i kwoty faktycznych przedpłat) oraz zwroty (jeśli zwrot został dokonany) - każda do 286 pozycji.
Przykład: jedna umowa krok po kroku
Weźmy konkretną umowę: wycieczkę czarterową dla 2 osób na Kretę, zawartą 5 lipca 2026, z wylotem 10 września i powrotem 17 września. Cena 7400 zł, dwie wpłaty. Najpierw przenosimy dane do pól TFG:
- 1Nagłówek umowy - numer rezerwacji, data zawarcia, przedmiot umowy (impreza turystyczna) i sposób przyjmowania wpłat.
- 2Wariant podróży - liczba podróżnych i terminy realizacji „od/do”.
- 3Miejsce realizacji - zakres terytorialny, kraj i miejscowość/trasa.
- 4Transport - rodzaj środka transportu, a przy przelocie również kod lotniska ICAO.
- 5Cena i wpłaty - łączna cena z walutą oraz faktycznie dokonane przedpłaty.
W formacie JSON ta sama umowa wygląda tak:
{
"umowy": [
{
"nrUmowyRezerwacji": "REZ-2026-0042",
"dataZawarciaUmowy": "2026-07-05",
"przedmiotUmowy": "IMPREZA_TURYSTYCZNA",
"sposobPrzyjmowaniaWplat": "PRZELEW",
"warianty": [
{
"liczbaPodroznych": 2,
"terminRealizacjiOd": "2026-09-10",
"terminRealizacjiDo": "2026-09-17",
"miejsceRealizacjiUmowy": [
{
"zakresTerytorialny": "EUROPA",
"kraj": "GR",
"miejscowoscTrasa": "Heraklion"
}
],
"rodzajeSrodkaTransportu": [
{
"rodzajSrodkaTransportu": "LOTNICZY_CZARTER",
"kodLotniskaDocelowego": "LGIR"
}
]
}
],
"cenyUslug": [
{ "lacznaCenaUslug": "7400.00", "walutaUslug": "PLN" }
],
"wplaty": [
{ "dataWplaty": "2026-07-05", "kwotaWplaty": "2000.00", "walutaWplaty": "PLN" },
{ "dataWplaty": "2026-08-01", "kwotaWplaty": "5400.00", "walutaWplaty": "PLN" }
],
"zwroty": []
}
]
}Ta sama umowa (ma tylko jeden wariant, więc zmieści się w CSV) w formacie CSV to jeden wiersz danych pod wierszem nagłówków:
nrUmowyRezerwacji;dataZawarciaUmowy;przedmiotUmowy;sposobPrzyjmowaniaWplat;liczbaPodroznych;terminRealizacjiOd;terminRealizacjiDo;zakresTerytorialny;kraj;miejscowoscTrasa;rodzajSrodkaTransportu;kodLotniskaDocelowego;lacznaCenaUslug;walutaUslug
REZ-2026-0042;2026-07-05;IMPREZA_TURYSTYCZNA;PRZELEW;2;2026-09-10;2026-09-17;EUROPA;GR;Heraklion;LOTNICZY_CZARTER;LGIR;7400.00;PLNWartości słownikowe podstaw z oficjalnych słowników
Kody użyte wyżej (np. IMPREZA_TURYSTYCZNA, EUROPA, GR, LOTNICZY_CZARTER) są przykładowe i mają pokazać układ pliku. Wiążące wartości - dla przedmiotu umowy, zakresu terytorialnego, krajów, lotnisk, sposobu płatności i walut - bierzesz zawsze z aktualnych słowników kodów z Portalu TFG. Dokładny zestaw kolumn i separator pliku CSV przyjmij według oficjalnego szablonu. Kod LGIR to z kolei prawdziwy kod ICAO lotniska w Heraklionie.
Jeden plik = jeden typ zasilenia
Pliku nie da się „wymieszać”. Każdy plik wsadowy musi zawierać pozycje tylko jednego typu zasilenia. Dla różnych operacji przygotowujesz osobne pliki:
| Typ zasilenia | Do czego służy |
|---|---|
| Nowe dane | nowe umowy, jeszcze niewprowadzone do systemu |
| Korekta | zmiana lub uzupełnienie umowy już w systemie (np. kolejna wpłata, zwrot, korekta błędu) |
| Rozwiązanie | umowy wcześniej wprowadzone, które zostały rozwiązane |
| Usunięcie | umowy wprowadzone do systemu omyłkowo |
Obowiązuje też kolejność: korekta, rozwiązanie czy usunięcie zadziałają dopiero wtedy, gdy wcześniejsze zasilenie „nowe dane” dla tej umowy uzyskało status „Przyjęte”. Jeśli wyślesz korektę umowy, której system jeszcze nie przyjął, zostanie ona odrzucona.
Limity i wymagania pliku
Zanim plik trafi do dalszego przetwarzania, system sprawdza jego format i strukturę. Te limity musi spełnić każdy plik wsadowy:
| Parametr | Wymaganie |
|---|---|
| Format | CSV albo JSON, zgodny ze strukturą |
| Kodowanie | UTF-8 |
| Maksymalny rozmiar | 10 MB |
| Maksymalna liczba umów | 5000 (przez API: 1000) |
| Warianty na umowę | CSV - 1, JSON - do 50 |
| Wpłaty / zwroty na umowę | po maks. 286 |
| Numery umów | uzupełnione i unikatowe w pliku |
| Kody danych | zgodne ze słownikami |
Plik przez API ma własne reguły
Jeśli wysyłasz wykaz przez integrację API, plik musi być w formacie JSON, mieć rozszerzenie .json, nazwę do 49 znaków i zawierać maksymalnie 1000 umów w jednym zasileniu. Czego wymaga sama integracja (konto techniczne, certyfikat, stały adres IP) opisaliśmy w sekcji „Co jest potrzebne do uruchomienia integracji API”.
Najczęstsze błędy, przez które plik zostaje odrzucony
System TFG waliduje zasilenie w dwóch etapach: synchronicznie (od razu - format i struktura pliku, puste lub powtórzone numery umów) oraz asynchronicznie (reguły biznesowe, których wynik sprawdzasz, odpytując o status). Oto pułapki, które najczęściej wywracają plik:
- data w złym formacie - wymagany jest zawsze
RRRR-MM-DD(np. 2026-09-10, nie 10.09.2026), - kwota jako tekst zamiast liczby albo bez formatu #.## (np. „7400 zł” zamiast 7400.00),
- kod spoza słownika - błędny kraj, lotnisko, waluta, sposób płatności czy przedmiot umowy,
- puste lub powtórzone numery umów w obrębie jednego pliku,
- przekroczone limity - więcej niż 50 wariantów, 286 wpłat/zwrotów albo 5000 umów,
- zła kolejność zasileń - korekta przed przyjęciem umowy pierwotnej,
Pełną listę przyczyn odrzucenia i sposób ich uniknięcia zebraliśmy w sekcji „Najczęstsze powody odrzucenia wykazu”. W praktyce bezpieczna wysyłka wymaga sprawdzenia danych zanim trafią do TFG.
Jak Prosty TFG przygotowuje plik za Ciebie
Ręczne budowanie pliku co miesiąc - przepisywanie kodów ze słowników, pilnowanie formatów dat i kwot, sprawdzanie limitów - to żmudna i ryzykowna robota. Prosty TFG robi to za Ciebie:
- Wczytuje eksport z Twojego systemu rezerwacji lub Excela - niezależnie od układu kolumn.
- Mapuje kolumny na strukturę TFG i zapamiętuje mapowanie jako profil Twojego biura.
- Uzupełnia kody słownikowe - kraj, zakres terytorialny, kody lotnisk ICAO i przedmiot umowy.
- Waliduje plik pod kątem wszystkich reguł TFG przed wysyłką, żeby nie został odrzucony.
- Generuje gotowy plik CSV/JSON albo wysyła wykaz przez API w Twoim imieniu, z właściwym typem i kolejnością zasileń.
Podsumowanie
Plik wsadowy oszczędza czas przy większej liczbie umów, ale wymaga precyzji: właściwy format (CSV dla prostych umów, JSON dla złożonych), poprawne formaty dat i kwot, kody zgodne ze słownikami i jeden typ zasilenia na plik. Co zrobić teraz:
- 1Pobierz z Portalu TFG szablon CSV, przykładowe pliki, słowniki kodów i plik z walidacjami.
- 2Sprawdź, których wymaganych pól (ICAO, zakres terytorialny, przedmiot umowy) brakuje w Twoim eksporcie.
- 3Zdecyduj o formacie: CSV, gdy umowy mają jeden wariant, JSON - gdy wariantów jest więcej.
- 4Zapisz się na listę oczekujących Prosty TFG, żeby przygotować i wysłać plik bez ręcznego mapowania kodów.
Masz pytania o przygotowanie pliku? Napisz do nas na kontakt@prostytfg.pl.
Najczęstsze pytania
- Co wybrać: plik CSV czy JSON?
- CSV jest prostszy i wygodny, gdy eksportujesz dane z Excela, ale obsługuje wyłącznie umowy z jednym wariantem podróży. JSON obsługuje do 50 wariantów na umowę, więc sprawdza się przy umowach złożonych - różne terminy, środki transportu czy miejsca realizacji.
- Ile umów może zawierać jeden plik wsadowy?
- Plik wsadowy wgrywany w Portalu TFG może zawierać do 5000 umów, przy maksymalnym rozmiarze 10 MB i kodowaniu UTF-8. Przy wysyłce przez API limit wynosi 1000 umów w jednym zasileniu.
- Czy w jednym pliku mogę umieścić nowe umowy i korekty?
- Nie. Jeden plik wsadowy musi zawierać pozycje tylko jednego typu zasilenia: nowe dane, korekta, rozwiązanie albo usunięcie. Dla różnych operacji przygotowujesz osobne pliki.
- Skąd wziąć szablon pliku i słowniki kodów?
- Portal TFG udostępnia materiały do przygotowania plików wsadowych: szablon i instrukcję przygotowania pliku CSV z Excela, przykładowe pliki, słowniki kodów (m.in. kraje, lotniska ICAO, zakres terytorialny, sposób płatności, waluty) oraz plik z regułami walidacji.
- Dlaczego mój plik wsadowy został odrzucony?
- Najczęstsze przyczyny to: data w złym formacie (wymagany RRRR-MM-DD), kwota zapisana jako tekst zamiast liczby, kod spoza słownika (np. kraj, lotnisko, sposób płatności), puste lub powtórzone numery umów oraz przekroczone limity (50 wariantów, 286 wpłat/zwrotów, 5000 umów).
Artykuł ma charakter informacyjny i nie stanowi porady prawnej. Prosty TFG to niezależne narzędzie i nie jest powiązane z UFG ani Turystycznym Funduszem Gwarancyjnym. Wiążące są przepisy ustawy oraz oficjalne materiały i dokumentacja UFG.
