Wpis z mikrobloga

Wkurzył mnie #mbank niemiłosiernie, bo przez 1.5 miesiąca załatwiałem dopisanie współposiadacza do konta (w końcu się udało), więc w związku z tym ponarzekam na... ich pliki #csv.

Takiego bajzlu w CSV to ja jeszcze w życiu nie widziałem. Przede wszystkim mBank w tej chwili generuje CSV w dwóch różnych formatach - zestawienie transakcji (czyli transakcje zaksięgowane) mają zupełnie inny format niż lista transakcji (czyli transakcje zaksięgowane + blokady na koncie). Oba formaty są oczywiście niekompatybilne między sobą i co więcej każdy z nich zawiera różne informacje. Oba formaty gwałcą jakiekolwiek standardy. Część danych jest normalnie oddzielona średnikami, ale część jest dodatkowo "zakodowana" w którymś z pól (zazwyczaj w polu odpowiadającym tytułowi transakcji). Kod polega oczywiście na oddzieleniu pod-pól odpowiednią ilością spacji: zazwyczaj jest to pierdyliard (np. 43), ale nie zawsze. Czasami jest pokazana data oryginalnej transakcji (np. w przypadku zakupów przy pomocy karty), a czasem nie.

Oczywiście nie ma nawet co podchodzić do parsowania całego pliku. Musimy sobie wybrać fragment od mniej-więcej 39. linii i odrzucić dwie ostatnie, bo mBank wrzuca tam luźnym tekstem np. swoje dane teleadresowe. Zdawałoby się, że ktoś starał się zakomentowywać nadmiarowe linie hashami na początku linii, ale nie wszędzie, bo na przykład ich adres to jakiś ASCII-art. :D Generalnie idea była chyba taka, żeby w jednym pliku CSV zmieścić kilka różnych (np. lista transakcji + suma podsumowań obrotów na rachunku), ale chyba nie wyszło, bo czasem gubią się znaki nowej linii i wiersze z danymi zlewają się z nagłówkami.

Aha, no i jeszcze trzeba pamiętać o jednym - mBank najwyraźniej o czymś takim jak Unikod nie słyszał i uważa, że w XXI wieku CP1250 to jest najlepsze kodowanie znaków. No więc nie jest i aż się boję pomyśleć jak skończyłoby się otrzymanie przelewu opisanego cyrylicą. Albo alfabetem japońskim.

No ale żeby było weselej to na przykład CSV wygenerowany z listy transakcji jest w odwrotnej kolejności niż zestawienie operacji zaksięgowanych - tzn. najnowsze transakcje na górze, więc nie można sobie tego przeparsować jak człowiek linijka po linijce, tylko trzeba zebrać w listę i ją odwrócić. Albo informacja o tym czy transakcja jest rozliczona czy nie... Po co zrobić dodatkową kolumnę, skoro można dodać na końcu kolumny z tytułem przelewu przypis "transakcja nierozliczona".

Takich umilaczy jest znacznie więcej - na przykład w jednym raporcie jest napisana waluta transakcji, w drugim nie; w jednym jest saldo, w drugim nie; mimo że mBank nadaje transakcjom unikalne numery dostępne z poziomu serwisu, to nie dorzuca ich do CSV, więc trzeba wymyślać algorytmy umożliwiające rozróżnienie transakcji (checksumy ze stringów + numer transakcji z danego dnia, licząc przy tym, że kolejność się nie zmieni między dwoma różnymi plikami CSV, bo jak wiadomo, kolejność transakcji ma znaczenie).

Z ciekawości testowałem CSV w kilku innych bankach (Nest, i Credit Agricole) i takich jaj jak w mBanku to nigdzie nie uświadczyłem.
  • 3