Co ja robię tu?

Piszę moduł do importu plików z Krakowskiego Banku Spółdzielczego.

Zaczytuję CSV z danymi przelewów. Rozdzielenie pól tabulatorem najwyraźniej przerosło ichniejszych Panów Informatyków, bo wpadli na pomysł, żeby pola przelewu rozdzielać zwykłym przecinkiem. Nie no, serio! A ty, misiu kanterpartyjny, weź pisz ify albo obsługuj wyjątki i sprawdzaj każdorazowo, czy to coś, co odseparowałeś przecinkami, jest kwotą przelewu, politykiem ONR, nóżką dziecka, czy fragmentem adresu [bo przecież adresy formatowane przez obsługę na dziko albo kwiatki typu „Fundacja Rozwoju, Rozboju i Rozstroju” albo ‚ul. Tadeusza „Grota” Roweckiego’ zdarzają się tylko teoretycznie i na pewno nie w Naszym Wiodącym Banku, Będącym Liderem Rynku w Obszarze, prawda?].

[Z tą kwotą przelewu co prawda przesadziłem, bo w podwójnych cudzychlapkach jest, ale za to nazwa beneficjenta jest w poczwórnych. A ja dziwię się, że przy parsowaniu tego czegoś algorytm zaczyna uprawiać mi dziki seks.]

[Zresztą… „cieszmy się z małych rzeczy”. Taki np. HSBC nie udostępniał dla planktonu żadnych plików pośrednich, przynajmniej jeszcze do niedawna.]

Panowie programiści stłukli za to coś ciężką kasę. Aż strach pomyśleć, na ile opiewałaby faktura, gdyby przyszło im do głowy porozdzielanie pól zwyczajnym tabulatorem. Przygodne wróbelki donoszą o fakturach na przygotowanie tu i ówdzie JPK na pięciocyfrowe kwoty.

W euro.

Co ja tutaj robię, na styku ochnastu dyscyplin, ze swoją interdyscyplinarną wiedzą może i połebkową, ale za to sięgającą DOSa? Albo też: może i sięgającą DOSa, ale połebkową?

Co ja robię ze swoim życiem?

12 myśli w temacie “Co ja robię tu?

  1. A to nie jest po prostu PLI (http://www.bph.pl/repo/bph/korporacje/bankowosc_elektroniczna/BusinessNet/Formaty_plikow/opis_formatu_pliku_platnosci_krajowych_pli.pdf)? Swego czasu robiłem eksport przelewów do formatu, który sobie życzył Raiffeisen i też odsądzałem ich pod nosem od czci i wiary (a to że kodowanie przedpotopowe, a to że dzielenie separatorem w ramach jednego pola, a to że przecinki właśnie, itp.), a okazało się, że to po prostu stary bankowy standard i większość banków się na nim opiera przy wymianie danych o przelewach.

    Polubienie

  2. Z głowy piszę, ale CSV _chyba_ przewiduje opakowanie pól w „ciapki”, jeśli zawierają separator. Zresztą coś o ciapkach piszesz… A wtedy nie jest źle.

    W jednej z firm spotkałem coś podobnego. Dane klientów były eksportowane do dziwnego formatu. Trudność była podobna, bo kupy się to nie trzymało, ale wynikało z tego, że kolumna e-mail zamiast jednego potrafiła zawierać wiele maili. Albo była pusta, a email leżał w kolumnie adres. Ogólnie: wprowadzający dostawał pola do wypełnienia i robił co chciał. 😉

    IIRC sprawdziło się skrzyżowanie splita na separatorach, sprawdzenia ilości otrzymanych pól, i na tej podstawie ify i parsowanie regexpem. Przy czym miałem ten komfort, że potrzebowałem tylko maili, @ jest dość unikatowym znakiem i w skrajnie niepasujących przypadkach mogłem zlecić poprawienie danych w bazie.

    Polubienie

  3. @rozie: nie napisałem, że sobie z tym nie poradziłem 🙂 Tylko, że wyjściem praktykowanym już przez większość cywilizowanych banków są po prostu tabulatory, nawet jeśli nie jest to do końca zgodne z RFC. Bo po tabulatorze możesz zrobić split i już, a przy ograniczaniu pól choćby przecinkami tak czy siak trzeba kombinować, tutaj wywalić podwójny cudzysłów, tam zignorować przecinek, bo leży pomiędzy cusłowami, a wszystko na końcu i tak zwalidować.

    Ewentualnie mt940, który też jest już dziadowskim standardem, ale pomimo swojej dowolności – w zasadniczych sprawach udokumentowanym jednak dość dobrze.

    Szczęście w nieszczęściu, że to wciąż banki, a nie import czyjejś ręcznej klepaniny z arkusza…

    Polubienie

    1. Ojtam ojtam, w moich okolicach CSV używa się ogólnie po prostu na określenie pliku tekstowego o [z grubsza] stałej strukturze rekordu. Co to znaczy expressis verbis, to ja wiem.

      A istnienie specu to jeszcze nie powód, żeby nie zastosować rozwiązania po prostu praktyczniejszego. Nikt mi nie wmówi, że eskejpowanie np. przecinków w jakiejkolwiek formie [if any…] jest łatwiejsze w obsłudze od obsługi separacji niewspieranym w żadnym RFC tabulatorem.

      Polubienie

  4. @rozie: to, co piszesz, miałoby sens, gdyby istniał jeden ogólnie przyjęty format eksportu danych z wyciągów bankowych. A tak nawet samo najbliższe standardowi, czyli mt940, ma w praktycznej implementacji ochnaście odmian, do tego dochodzi jeszcze wspomniane [pseudo]CSV i chyba jeszcze parę formatów autorskich, więc standardu brak. A jeśli faktycznego standardu brak, dev z głową mógłby zakodować to tak, żeby było lekko, miło i przyjemnie. Nie jest.

    @kronikaparanoika: Owszem, jest różnica. Plik bankowy przenosi pozycje wyciągu bankowego, gdzie tabulatory w naturze nie występują, natomiast przecinki i cudzysłowy w nazwach – i owszem.

    Polubienie

    1. Nie no, do tego banku jest – jak rozumiem – jeden format. Ja bym pewnie po prostu robił biblioteki per bank (ew. bank + format, jeśli mają więcej niż jeden). Ale nie jestem programistą. 😉

      Polubienie

Dodaj komentarz