Praca z aplikacją
Układ pliku
Jak bank układa swój plik CSV — kodowanie, znak rozdzielający kolumny, opis nad tabelą, która kolumna jest którą — aplikacja odczytuje z samego pliku. Nie ma na to zakładki ani kroku konfiguracji: upuszczasz wyciąg na zakładce Import, aplikacja rozpoznaje układ, pokazuje Ci każdy odczytany wiersz na ekranie przeglądu, a gdy zatwierdzisz import, zapamiętuje układ. Każdy późniejszy eksport o tym samym kształcie wczyta się dokładnie tak samo.
Dwóch rzeczy aplikacja celowo nie zgaduje za każdym razem od nowa:
- Duplikaty muszą dalej działać. Sygnatura wiersza powstaje z odczytanej daty, tytułu i konta kontrahenta. Gdyby mądrzejszy odczyt wybrał kiedyś inną kolumnę dla tego samego banku, te same wiersze dostałyby inne sygnatury i ponowny import miesiąca przestałby odsiewać duplikaty. Zapamiętany układ stoi w miejscu: raz potwierdzonego kształtu aplikacja już nie rozpoznaje od zera.
- Brak kolumny ma być widoczny. „Bank przestał podawać kolumnę salda” to zdanie o tym, co w pliku bywało — wypowie je tylko układ, który aplikacja pamięta. Nagłówek przeglądu robi to wprost:
nie ma w tym pliku: ….
Ustawienia układu#
Układ trzyma dwie rzeczy: postać samego pliku i to, która kolumna zasila które pole transakcji.
| Ustawienie | Co to jest |
|---|---|
| Kodowanie | UTF-8 albo windows-1250. To dwa sposoby zapisu polskich znaków. Aplikacja obsługuje oba i sama zdejmuje znacznik BOM z początku pliku. |
| Separator | Znak, który rozdziela kolumny — ;, ,, tabulator albo |. |
| Pominięte wiersze | Śmieciowe linie nad nagłówkiem. Niektóre banki piszą ich ponad dwadzieścia. |
| Wiersz nagłówka | Wiersz z nazwami kolumn. Gdy go nie ma, kolumny mają numery: #1…#N. |
| Odrzuć pierwsze wiersze | Ile wierszy z danymi zawsze pominąć na górze. Niektóre pliki zaczynają się podsumowaniem salda, które wygląda dokładnie jak transakcja. |
| Format daty | DD.MM.YYYY, DD-MM-YYYY, YYYY-MM-DD albo data z godziną. Godzinę aplikacja pomija. |
| Separator dziesiętny | , albo .. Odstępy w tysiącach nie przeszkadzają, także spacje nierozdzielające. |
| Kierunek kwoty | Skąd wiadomo, czy pieniądze weszły, czy wyszły — patrz niżej. |
| Filtr wierszy | Zostawia tylko wiersze, w których dana kolumna ma jedną z podanych wartości, na przykład State = COMPLETED. |
| Kolumna prowizji | Osobna prowizja. Aplikacja odejmie ją od kwoty. |
| Kolumna salda | Saldo po każdej transakcji, jeśli bank je podaje. Na nim opiera się sprawdzenie ciągłości. |
| Mapowanie pól | Która kolumna to data, tytuł, kontrahent, jego konto i waluta. Data jest jedna: data transakcji. Drugą kolumnę z datą aplikacja po prostu zostawia niepodpiętą. |
Kolumny konieczne#
Cztery rzeczy zatrzymują import, gdy ich zabraknie: kolumna z datą, kolumna z tytułem, kolumna (albo dwie) z kwotą oraz ta kolumna, po której filtrowane są wiersze. Pierwsze trzy budują wiersz i bez nich nie ma czego zapisać.
Filtr wierszy wygląda na dodatek i nim nie jest. Gdy w pliku zabraknie kolumny, po której filtrujesz, filtr nie odsieje niczego, a do bazy wejdą właśnie te wiersze, które miał zatrzymać.
Przykład. Revolut trzyma stan operacji w kolumnie State, a filtr State = COMPLETED zostawia tylko te zakończone. Gdyby bank przestał tę kolumnę podawać, a plik mimo to się wczytał, w Transakcjach wylądowałyby też płatności cofnięte. Dlatego brak kolumny filtra zatrzymuje import tak samo jak brak daty.
Kolumny opcjonalne#
Kontrahent, jego konto, waluta, prowizja i saldo mogą w pliku nie wystąpić, a wyciąg i tak wejdzie w całości. Brakującą kolumnę aplikacja czyta jak pustą komórkę, bo pusta komórka zawsze coś znaczy: po prostu nic tam nie ma. Banki usuwają takie kolumny między jednym eksportem a drugim i nikogo o tym nie uprzedzają.
Aplikacja nie ukrywa przy tym, czego nie sprawdziła. W nagłówku przeglądu importu dopisuje · nie ma w tym pliku: i wylicza brakujące kolumny. Ciągłości salda też nie pomija po cichu: bez kolumny salda w przeglądzie stoi saldo niesprawdzone.
Przykład. ING nie wstawia kolumny Saldo po transakcji do wyciągu wygenerowanego z ukrytym saldem bieżącym, a reszta nagłówka zostaje bez zmian. Taki wyciąg wczytasz normalnie, a przegląd napisze, czego w nim nie było.
Kierunek kwoty#
Banki zapisują kierunek pieniędzy na cztery sposoby, a odczyt musi wiedzieć, na który z nich trafił.
- Jedna kolumna ze znakiem. Kwota ujemna to pieniądze wychodzące. Tak robi większość banków.
- Osobne kolumny obciążeń i uznań. Są dwie kolumny, a w każdym wierszu wypełniona jest jedna.
- Kwota + kolumna kierunku. Kwota jest zawsze dodatnia, a obok stoi
WnalboMa, czasemDEBITalboCREDIT. - Pierwsza niepusta z kilku kolumn. Niektóre banki wpisują kwotę przelewu do jednej kolumny, a płatność kartą do innej, a z nazw w nagłówku nic nie wynika.
Jak aplikacja czyta upuszczony plik#
Najpierw rozpoznaje postać pliku: kodowanie, separator, opis nad tabelą, nagłówek, format daty i separator dziesiętny. Potem przypisuje kolumny do pól. Propozycję dla każdego pola składają trzy rzeczy: nazwa w nagłówku, kształt wartości w komórkach i liczba wierszy, które przy takim odczycie by przepadły.
Nazwy aplikacja czyta po polsku i po angielsku: Data transakcji, Started Date, Kwota, Obciążenia/*Uznania*, Saldo. Przy dacie woli kolumnę z datą transakcji albo operacji, po angielsku started i trade. Kolumnę z datą księgowania, rozliczenia albo z datą waluty (booking, completed, posted) weźmie dopiero wtedy, gdy tamtej nie ma. W bazie ma stanąć dzień, w którym pieniądze się ruszyły, a nie ten, w którym bank zaksięgował to u siebie.
Gdy plik w ogóle nie ma nagłówka, zostaje kształt komórek: która kolumna zawiera daty, która numery kont, a w której suma rośnie i maleje dokładnie o kwotę obok. Gdy kolumny z datami są dwie i żadna nie ma nazwy, aplikacja bierze tę z wcześniejszą datą: pieniądze ruszają się, zanim bank je zaksięguje.
Na koniec liczą się wiersze, które każdy z odczytów by zgubił, i wygrywa układ, przy którym odczyta się ich najwięcej. Żeby przebić to, co podpowiedziały nazwy, układ musi uratować co najmniej dwa wiersze więcej. Jedna nieczytelna linia niczego więc nie przestawia. Straty muszą się powtarzać, a nie zdarzyć raz.
Przykład. ING zostawia puste Data księgowania przy każdej blokadzie kartowej, więc odczyt oparty na tej kolumnie traci cały taki blok. Data transakcji obok niej zachowuje wszystkie wiersze i to ona dostaje pole. Bez tego liczenia w bazie zabrakłoby dziesiątej części wyciągu, i to bez żadnego ostrzeżenia.
Zanim wiersze trafią na ekran przeglądu, odczyt musi się jeszcze obronić na całym pliku. Gdy data, tytuł i kwota są przypisane, a przepada najwyżej jedna czy dwie linie — stopka prawna, uszkodzony wiersz — plik od razu staje do przeglądu, a nagłówek wypisuje wybrane kolumny. Gdy odczyt tego o sobie powiedzieć nie może, zamiast przeglądu otwiera się ekran mapowania, wypełniony wszystkim, co udało się ustalić.
Zapamiętany układ#
Dopiero zatwierdzenie importu utrwala odczyt. Aplikacja zapisuje go razem z pełnym nagłówkiem pliku, a każdy następny upuszczony plik najpierw porównuje z zapamiętanymi kształtami — zgadywanie zaczyna się tylko tam, gdzie żaden nie pasuje:
- Ten sam kształt — układ wchodzi bez zmian, a nagłówek przeglądu mówi
znany układ. Opis nad tabelą bywa raz dłuższy, raz krótszy; na to wystarczą Pominięte wiersze ustawiane dla jednego pliku, bez ruszania układu. - Ten sam kształt bez kolumny opcjonalnej — nadal ten układ. O braku przegląd mówi wprost:
nie ma w tym pliku: Saldo po transakcji, a plakietka salda pokazujesaldo niesprawdzone. - Ten sam kształt bez kolumny koniecznej — aplikacja czyta plik od nowa, a baner wyjaśnia, co zaszło: ten plik wygląda jak „…”, ale brakuje w nim kolumny Kwota, więc układ został odczytany od nowa. Zatwierdzenie zapamiętuje nowy układ; stary zostaje przy importach, które przez niego weszły.
Jeden nawyk wart poznania: gdy eksport nowego banku zaczyna się wierszem podsumowania — erste otwiera plik saldem, które wygląda dokładnie jak transakcja na 0,00 — po prostu pomiń ten wiersz na przeglądzie, zanim zatwierdzisz. Nowy układ nauczy się z tego pominięcia i od następnego importu odrzuci taki wiersz samodzielnie.
A gdy odczyt kiedyś się pomyli, popraw w nagłówku przeglądu otwiera ekran mapowania na tym samym pliku. Zapis poprawek przygotowuje wiersze od nowa, a zatwierdzenie nanosi je na zapamiętany układ — poprawka obowiązuje więc także każdy późniejszy eksport.
Ekran mapowania#
To wyjście awaryjne, nie krok importu: otwiera się, gdy aplikacja nie ręczy za własny odczyt, albo gdy naciśniesz popraw na ekranie przeglądu.
Ekran przychodzi wypełniony wszystkim, co odczyt zdążył ustalić, i układa się według tego, co naprawdę masz zdecydować. Na górze stoi Mapowanie pól, czyli jedna lista sześciu pozycji razem z kwotą. Sposób zapisu kwoty wybierasz z rzędu przycisków w samym polu kwoty, a nie w osobnej sekcji. Format pliku i Dodatki są zwinięte do jednej linii z obecnymi ustawieniami; rozwiniesz je jednym kliknięciem.
Liczniki stoją w pasku pod tytułem: ile pól zmapowano, ile wierszy odczytano i w ilu wartość ma zły format. Z paska trafisz wprost do wiersza z błędem. Podgląd zaznaczy go w tabeli i wypisze pod nią to, co powiedział czytnik.
Gdy nic nie pasuje pewnie, aplikacja zostawia pole puste, zamiast wstawić w nie cokolwiek. Puste pole widzisz od razu i wypełniasz je samodzielnie. Pole podpięte do złej kolumny wygląda dokładnie tak samo jak podpięte dobrze, więc łatwo je przeoczyć.
Przycisk rozpoznaj kolumny przypisuje wszystko od nowa. Naciskaj go po poprawieniu separatora albo liczby pomijanych wierszy, bo od nich zależy, co odczyt w ogóle widzi jako kolumny. Sam z siebie nigdy nie ruszy mapowania, które poprawiasz ręcznie.
Plik, na którym poprawiasz układ, zostaje zapisany razem z nim i nigdy nie opuszcza Twojej bazy. Dzięki temu ekran mapowania otwarty po miesiącach wciąż ma działający podgląd.
Podgląd#
Podgląd pokazuje, co z Twoich ustawień wychodzi, jeszcze zanim je zapiszesz. Pod każdym polem widzisz pierwszą wartość z wybranej kolumny, więc sprawdzasz przypisanie na miejscu. Obok stoi tabela kolumn źródłowych, w której te zmapowane są podświetlone i podpisane polem, które zasilają. Przycisk Podgląd po odczycie przełącza tę tabelę na wiersze w takiej postaci, w jakiej trafią do bazy, razem z błędami w poszczególnych komórkach.
Obie tabele pokazują każdą linię pliku, po sto na stronę. Linia, z której nie powstanie transakcja, jest przygaszona i podpisana powodem: przed nagłówkiem, nagłówek, pusta, odrzucona (przez odrzuć pierwsze wiersze) albo odfiltrowana (przez filtr wierszy). Nic nie znika po cichu, a numery linii biegną bez dziur.
Przy wierszu z błędem stoi odnośnik pokaż go. Kliknij, a podgląd otworzy stronę, na której ten wiersz leży. Ten sam odnośnik zmienia się wtedy we wróć i odsyła Cię na poprzednią stronę, do widoku sprzed kliknięcia.
Tabela otwiera się na pierwszym wierszu z danymi. Dwadzieścia śmieciowych linii, którymi bank zaczyna plik, zostaje nad nim i zobaczysz je po przewinięciu w górę.
Przycisk pomiń 1…N#
Najedź na dowolną linię podglądu, a pojawi się przy niej pomiń 1…N. Kliknięcie sprawia, że wszystko do tej linii włącznie przestaje być danymi: pole Pominięte wiersze dostaje jej numer.
Nie musisz przy tym liczyć linii i wpisywać wyniku do pola z liczbą: tniesz na wierszu, który masz przed oczami.
Przycisk podaje cały zakres, bo cięcie nie dotyczy jednego wiersza. Samo „pomiń” obok wiersza z błędem czytałoby się jak „pomiń ten wiersz”, a klik ucina cały plik nad linią, na którą patrzysz.
Przykład. Przy sto piątej linii przycisk pokazuje pomiń 1…105.
Co zmienił Twój klik, widzisz nad tabelą: Pominięte wiersze: 0 → 105, a obok stoi cofnij, czyli stara wartość o jedno kliknięcie stąd. Ten komunikat stoi nad tabelą, a nie pod nią. W obu tabelach przewijasz same wiersze, a strony zmieniasz na ich dole, więc tego, co stoi pod tabelą, najłatwiej nie zauważyć.
Aplikacja nie utnie pliku tak, żeby nie został w nim ani jeden wiersz z danymi. Odczyt straciłby wtedy wszystkie kolumny, a mapowanie wskazywałoby nazwy, których w pliku już nie ma. To samo ograniczenie obowiązuje pole Pominięte wiersze wpisywane ręcznie.
Nie musisz zresztą wycinać wiersza tylko dlatego, że się nie odczytał. Import go pomija i mówi o tym na ekranie przeglądu, więc stopka prawna na końcu wyciągu nic nie kosztuje.
Komunikat o brakujących kolumnach#
Komunikat „Plik nie ma kolumn, bez których nie da się zbudować wiersza: …” znaczy, że aplikacja nie znalazła spodziewanego nagłówka. Najczęściej opis nad tabelą zmienił długość i śmieciowa linia trafiła w miejsce nagłówka. Zacznij od Pominiętych wierszy ustawionych dla tego jednego pliku.
Kolumna opcjonalna, której w pliku po prostu nie ma, tego komunikatu nie wywoła. Przegląd importu napisze o niej osobno.
Nowy bank#
Przy nowym banku sprawdź dwie rzeczy, których po pierwszym imporcie nie widać:
- czy kolumna kwoty znaczy to samo w każdym wierszu. W niektórych bankach nie znaczy, a wychodzi to dopiero wtedy, gdy przy płatności kartą kwota jest pusta;
- czy plik podaje konto kontrahenta. Bez niego aplikacja nie rozpozna przelewów między Twoimi własnymi kontami i takie wiersze zostaną bez kategorii.