Problemy Polskiej Branży IT 🥟🇵🇱

💬 "Każdego specjalistę da się zastąpić skończoną liczbą stażystów." – czyli pierwszy nolife-stylowy portal, którego nikt nie potrzebuje.

Krew, POT i wdrożenie czyli co się w ZUSie odassecowało.

Ustawa z dnia 15 lipca o Polskim Bonie Turystycznym postawiła przed ZUS i POT (Polską Organizacją Turystyczną) nie lada wyzwanie, jakim jak zawsze jest tzw “system teleinformatyczny”. W Art. 27 wspomnianej ustawy możemy przeczytać:

Art. 27.

  1. Obsługa bonu odbywa się w systemie teleinformatycznym.
  2. System teleinformatyczny rozbudowuje, dostosowuje i utrzymuje ZUS.
  3. System teleinformatyczny spełnia minimalne wymagania dla systemów teleinformatycznych oraz zapewnia interoperacyjność systemu na zasadach określonych w Krajowych Ramach Interoperacyjności.
  4. System teleinformatyczny zapewnia bezpieczeństwo przetwarzanych danych osobowych oraz środki określone w art. 32 rozporządzenia Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (ogólne rozporządzenie o ochronie danych) (Dz. Urz. UE L 119 z 04.05.2016, str. 1, z późn. zm.).
  5. ZUS udostępnia POT system teleinformatyczny w celu i w zakresie niezbędnym do realizacji zadań POT określonych w ustawie.

Jak powszechnie wiemy aktualnie (Profesorze, pamiętamy [*]) wykonawcą systemu teleinformatycznego dla ZUS jest Asseco. POT w całej tej układance stał się podmiotem zależnym od ZUS, czyli konsumentem treści, które system teleinformatyczny ZUS miał zbierać i udostępniać. Warto podkreślić, że POT jest małą organizacją, posiadającą do dyspozycji kilka firm IT świadczących na ich rzecz podwykonawstwo. W samym POT specjalistów IT zatrudnionych bezpośrednio jest dosłownie kilku. Albo i mniej niż nam się wydaje, gdyż w ostatnim czasie docierały do nas sygnały, że z niektórymi pożegnano się gdy zaczęli zbyt głośno opowiadać o pewnych absurdach implementacji Bonu Turystycznego. Co z tego wszystkiego wynikło i jak wygląda soft, którego specyfikacją jest ustawa? Zapraszamy na krótką wycieczkę do tego świata gdzie akt prawny determinuje decyzje projektowe jakie podjęto podczas tworzenia tego rozwiązania. Decyzje, które w innym świecie i kontekście mogłyby wydawać się całkowicie irracjonalne. PS. Zerknij na wszystkie linki umieszczone w tekście. Przyda się do lepszego złapania kontekstu.

🔴 17:00 i fajrant.

Zgodnie z ustawą, POT zostało zobowiązane do udostępnienia obywatelom podmiotów biorących udział w programie Polski Bon Turystyczny. POT wywiązała się z tego obowiązku i takową listę udostępnia na stronie https://bonturystyczny.gov.pl/.

Art. 9.

  1. Prawo do przyjmowania płatności dokonywanych za pomocą bonu przysługuje przedsiębiorcy turystycznemu oraz organizacji pożytku publicznego znajdującym się na liście przedsiębiorców turystycznych oraz organizacji pożytku publicznego mających prawo do przyjmowania płatności dokonywanych za pomocą bonu.
  2. Listę, o której mowa w ust. 1, POT udostępnia na swojej stronie internetowej.

Wchodząc na wspomnianą stronę zauważymy komunikat o następującej treści:

“Lista podmiotów aktualizowana jest o godz. 17.00 w dni robocze.”

Dość szybko w naszej głowie pojawi się myśl (hehe, ktoś to ręcznie przenosi i już po 17:00 nie pracuje, he-he, pewnie robi to jakaś armia stażystów, he-he, ale amatorzy…) Jak natomiast jest naprawdę? Instytucje publiczne takie jak wspomniany POT nie mogą zgodnie z prawem angażować środków do realizacji projektu związanego z ustawą dopóki rzeczona ustawa nie wejdzie w życie. Ustawa weszła w życie 15 lipca a systemy miały zacząć działać produkcyjnie 24 lipca wieczorem, czyli czasu było mało, termin “na wczoraj”. W związku z tym podejmowano takie decyzje, aby wszystko jakoś DOPCHNĄĆ KOLANEM i dowieźć na proda zgodnie z deadlinem. (mmmhhhh, 24 lipca, wdrożonko w piąteczek, dziękuję Pan ustawodawca). I nie chodziło tutaj tylko o decyzje związane wyłącznie z IT a o dużo szerszy kontekst. Czyli np. zgodnie z ustawą POT ma weryfikować te podmioty, które znajdą się na tej liście, ale przed 15 lipca POT nie mógł powołać właściwego zespołu weryfikacyjnego, bo nie mógł nikogo zatrudnić ani przeszkolić, gdyż nie miał podstawy prawnej. Ufff. Zdanie wielokrotnie złożone, jak zagnieżdżone ify w Twoim kodzie. Zamówienia i nabory można było rozpisywać po wejściu ustawy i departament zajmujący się weryfikacją ruszy przy dobrych wiatrach prawdopodobnie pod koniec sierpnia. Archiwalne ogłoszenia wiszą jeszcze na pracuj.pl. Próżno natomiast szukać gdziekolwiek tych ogłoszeń o przetargach…

Art. 17. Do zamówień na usługi lub dostawy udzielanych przez POT w celu realizacji zadań POT określonych w ustawie nie stosuje się przepisów ustawy z dnia 29 stycznia 2004 r. – Prawo zamówień publicznych (Dz. U. z 2019 r. poz. 1843 oraz z 2020 r. poz. 288).

Bug czy Ficzer? Czy to backdoor na zrobienie milionowych zamówień poza przepisami PZP. Niektórzy Prezesi Software Houseów lubią to. ( ͡ ° ͜ ʖ ͡ °)

Ale wracając, dane, które trafiają do tej wyszukiwarki są brane prosto z ZUS-u a ZUS je przekazuje tak jak obywatele je wpisali. A jak myślicie, jest tam jakaś sensowna walidacja? Gdy lista ruszyła, wyszukać można było bardzo dziwne wpisy. Stąd też zorganizowano naprędce grupę ludzi do tego, aby każdego dnia przeglądała listę i dzwoniła do ludzi, którzy wpisali coś niemądrego (np. ujawnili własny numer PESEL), aby zmodyfikowali lub wycofali swoje wpisy i na koniec dnia o 17:00 wrzucić dane chociaż trochę lepsze. I tak, godzina 17:00 bierze się stąd, że ci ludzie o 17:00 kończą dzień roboczy, nie są natomiast armią stażystów. Skąd i w jaki sposób pobierają te dane z ZUS powiemy później. STAY TUNED. Warto.

🔴 Jak to dane które ludzie wpisali? To nie mamy CEIDG czy REGON?

YOLO! ZUS mógłby (ekhem.. Asseco XD), ale się nie zintegrowali z publicznymi rejestrami takimi jak CEIDG czy REGON. Pozwoliłoby to na prosty dostęp do danych o podmiotach i znacznie uprościłoby weryfikację. Niestety tak nie zrobiono. Iintegrować się? Fuuuuujj, zrobimy to lepiej i damy wiele otwartych pól tekstowych. No i dali a obywatele jak to obywatele wpisują tam wszystko. Niektórzy potrafią w pojedynczym tekstowym polu input w 255 znakach zawrzeć dramatyczną historię swojego życia..

🔴 UrzędnikWalidator.js

W ustawie czytamy:

Art. 11.

  1. POT może dokonywać czynności sprawdzających, mających na celu weryfikację zgodności ze stanem faktycznym danych, o których mowa w art. 8 ust. 2 pkt 1–7 i 10.
  2. Czynności sprawdzające są dokonywane przez pracowników POT, na podstawie imiennego upoważnienia wydanego przez Prezesa POT lub osobę przez niego upoważnioną.
  3. POT, w toku czynności sprawdzających, może żądać od przedsiębiorcy turystycznego lub organizacji pożytku publicznego przedstawienia:
    1. zaświadczenia potwierdzającego spełnienie obowiązku, o którym mowa w art. 38 ust. 1–3 ustawy z dnia 29 sierpnia 1997 r. o usługach hotelarskich oraz usługach pilotów wycieczek i przewodników turystycznych;
    2. umowy o prowadzenie rachunku, o którym mowa w art. 8 ust. 2 pkt 7;
    3. dokumentu potwierdzającego upoważnienie osoby, o której mowa w art. 8 ust. 2 pkt 10, do reprezentowania przedsiębiorcy turystycznego lub organizacji pożytku publicznego.

Ej, a to nie mamy sporej porcji tych informacji choćby w PKD? Znowu warto by było pomyśleć o integracji z CEIDG. Ale nie, zróbmy to ręcznie, trzeba na coś wydawać publiczne pieniądze. Co więcej POT nie ma dostępu do edycji tych danych. POT dzwoni do obywateli i prosi o zmianę danych przez portal ZUS PUE. No fajnie, nie Zazdrościmy. UrzędnikWalidator.js. Brzmi ambitnie. Może prościej i szybciej dzwonić chociaż bezpośrednio do kogoś w ZUS (ekhem Asseco). VoSQL, Voice over SQL, baza danych z możliwością updateów przez telefon. Technologia przyszłości, można podbijać kosmos. POT w systemie ZUS może jedynie zmieniać statusy podmiotów czyli czy podmiot jest zatwierdzony czy odrzucony, ale wspomnianej możliwości edycji danych brak.

 🔴 I cyk F12.

No to przyjrzyjmy się jeszcze co tam w środku. Z wypiekami szukamy godnego następcy słynnego isPies z PKP. Po chwili znajdujemy to:

function filterData(wedlug_wyszukiwarki, wedlug_liter, page_size, page_number) { … }

patrzymy dalej i widzimy: objectData,json

Mhmmm ciekawe, c’nie? Ustawodawca tak jakby przeoczył, że tak mała instytucja jaką jest POT może mieć problemy z wystartowaniem serwisu mającego przyjąć potencjalnie milionowy wolumen ludzi w bardzo krótkim czasie. Udało się zorganizować jakąś infrastrukturę, load balancery, CDNy i inne takie, ale “na wszelki wypadek” dla pewności, że kolokwialnie mówiąc “to nie klęknie”, postanowiono, że wyszukiwarka do listy podmiotów będzie zrealizowana client-side. Cała aktualna lista podmiotów (wygenerowana o 17:00 dnia tego lub poprzedniego) jest więc zaczytywana po wejściu na stronę wyszukiwarki jako plik JS. Powstaje tutaj pytanie, w jaki sposób ZUS (ekhem, Asseco) przekazuje do POT tę listę? Na dyskietce? Dlaczego ZUS (ekhem, Asseco) nie mógł wystawić jakiegoś endpointa w swojej infrastrukturze? STAY TUNED. Jak obiecaliśmy zdradzimy ową tajemnicę.

🔴 Jak ZUS przekazuje dane o podmiotach do POT?

“Pracownik POT musi się zalogować do systemu ZUS i RĘCZNIE kliknąć przycisk “Wyślij”, a lista w postaci pliku CSV zostaje wysłana MAILEM do POT. Nie ma żadnej integracji system-system, nie ma żadnej automatyzacji. Przez wiele tygodni Asseco nie potrafiło tego pliku CSV poprawnie wygenerować. Wiersze miały niewłaściwe ilości kolumn, nie potrafiono obsłużyć znaków specjalnych. W pewnym momencie ktoś z Asseco wymyślił nawet taki sposób, aby niewygodne znaki specjalne usuwać z danych, ale to miało krótkie nogi, bo usunięcie wszystkich średników, przecinków i cudzysłowów jeszcze dało się przeżyć, ale znaki nowej linii były potrzebne. Problemy z tymi plikami ciągnęły się długo nawet po tym gdy wszystko już ruszyło produkcyjnie, więc błędy w plikach poprawiano ręcznie.” Słyszymy w różnych kuluarach i przecieramy oczy ze zdumienia.

Jak to przeszło, skoro ZUS obowiązują Krajowe Ramy Interoperacyjności (co zresztą podkreśla ustawa o bonie). A w KRI jest m.in. zapisane, że powinno się stosować wymianę danych przez SOAP.

§8.

  1. Dla systemów teleinformatycznych służących do realizacji zadań publicznych stosuje się rozwiązania oparte na modelu usługowym.
  2. Do opisu protokołów i struktur wymiany danych usługi sieciowej wykorzystuje się Web Services Description Language (WSDL).
  3. Organ podmiotu udostępniającego usługę sieciową, w celu zapewnienia poprawnej współpracy systemów teleinformatycznych, przekazuje opis, o którym mowa w ust. 2, do repozytorium interoperacyjności.
  4. W przypadkach uzasadnionych specyfiką podmiotu publicznego lub świadczonych przez niego usług dopuszcza się inny model architektury.

Ano tak, że jest tutaj punkt czwarty, także wszytko zgodnie z prawem, można mailem, tylko trochę wstyd.

Zauważyliśmy też, że ZUS nie przekazuje wszystkich danych, o których mówi ustawa. Z ustawy wynika, że każdy podmiot na liście powinien mieć podane dwa adresy: adres działalności oraz adres zamieszkania lub siedziby. ZUS przekazuje jeden z nich chyba dobierając go przypadkowo. Dobry random() zawsze spoko. Fun, fun, fun. Sprawdź sam/sama, w objectData,json jest tyko jeden.

🔴 A ile to kosztuje?

Nie mniej niż 12,5 mln TYLKO w samym POT. W wywiadzie z prezesem POT możemy przeczytać o planach powołania nowego oddziału w Wieliczce dedykowanego do obsługi POT.

Merytorycznie największe będą dwa działy: ten, który będzie prowadził weryfikację podmiotów biorących udział w programie oraz ten, wyznaczony do obsługi beneficjentów. Na oba działy będzie składało się łącznie 36 osób. 

Prezes POT, Robert Andrzejczyk

Dzięki połączeniu sił POT i ZUS udało się stworzyć innowacyjny system informatyczny oraz zapewnić obsługę gigantycznego programu relatywnie małym kosztem.

Prezes POT, Robert Andrzejczyk

Przeczytaj powoli. 12,5 mln złotych na oddział, który będzie prowadził promocję programu oraz weryfikację podmiotów bo obywatele na ZUS PUE wpisują dane “z palca” a system CEIDG, z którym by się można zintegrować leży sobie tak jak leżał. Żeby było ciekawiej, powołanie w POT oddziału do spraw bonu prawnie zostało zatwierdzone dopiero kilka dni po wejściu ustawy. Dzień przez piąteczkowym wdrożeniem produkcyjnym. Kto sieje ASAP ten zbiera FUCKAP.

🔥 PSST… Wykorzystam to, że czytasz ten tekst i podrzucę Ci link do zbiórki dla Mikołaja, który choruje na SMA. Spokojnie, istnieje całkiem skuteczna terapia, problem w tym, że kosztuje 2️⃣💰💰💰💰💰💰 2 miliony dolarów.

Mikołaj to syn jednego z nas, backendowego programisty. Jednak w obliczu tej choroby nawet 15K na fakturze nie wystarczy. Dorzuć proszę parę groszy. 🙏 Dzięki za pomoc.

🔴 Ile jest zarejestrowanych podmiotów?

data.length w konsol ( ͡ ° ͜ ʖ ͡ °)

🔴 Weryfikacja pod Krakowem w Wieliczce. Może prezes z C wypożyczyłby armię stażystów?

Bawmy się dalej. Zobaczmy co tam na tym serwerze ciekawego można znaleźć. Pyk, słowniczek ze słowami i potestujmy URLe. 200 OK. Oh wait, a to co to? http://bonturystyczny.gov.pl/weryfikacja lista systemów, gdzie RĘCZNIE można zwalidować podmiot? A co to jest to tam na dole?

Narzędzie do przechwytywania numerów identyfikacyjnych (gdy nie działa schowek)

Narzędzie Capture2Text działa w ten sposób, że po wciśnięciu kombinacji klawiszy Win+Q rozpoczyna zaznaczanie obszaru ekranu, z którego odzyskuje tekst i zapisuje go jednocześnie do schowka i do okienka podglądu a dodatkowo wszystkie kiedykolwiek przechwycone teksty są składowane w pliku “przechwycone.txt”. Przy zaznaczeniu niewielkiego obszaru, narzędzie działa bardzo szybko. Przy zaznaczeniu dużego obszaru ekranu, trzeba trochę poczekać.

Eksperymentalnie sprawdziliśmy, że narzędzie radzi sobie najlepiej, gdy stosowane jest do identyfikatorów liczbowych, chociaż można je równiez stosować do zwykłego tekstu – wówczas należy wziąć pod uwagę możliwość błędnego odczytu niektórych znaków..

O co chodzi? Wysilmy wyobraźnię i pomyślmy o najbardziej “user friendly” procesie weryfikacji. Serio, dlaczego nie ma tej integracji z CEIDG? Wyobraźmy sobie teraz taką sytuację. Otóż pomimo tego, że według ustawy POT jest współadministratorem danych razem z ZUS (Art. 26. ust. 3 pkt 2), to ZUS (ekhem Asseco) ogranicza POT możliwość efektywnego dostępu do danych. Czy możliwe jest, że pracownicy POT muszą się łączyć przez kilka zdalnych pulpitów aby się do nich dostać a na końcu nie działa tak ważny element jak schowek? Co się czepiasz, dobrze, nikt nie skopiuje danych. Brzmi to fajnie od strony security, ale ludzie weryfikując podmioty muszą mieć możliwość sprawdzenia np. numeru NIP w CEIDG albo REGON, czego ZUS nie zapewnił. EJ CZEMU NIE MA TEJ INTEGRACJI Z CEIDG? ONI TO WSZYSTKO ROBIĄ RĘCZNIE! Są zatem zobowiązani na swoim komputerze poza pulpitem zdalnym otworzyć przeglądarkę i przepisywać ręcznie te numery i inne teksty w różnych innych rządowych wyszukiwarkach. Potrzeba matką wynalazków, ktoś w POT wpada na pomysł żeby ściągać dane OCRem ekranowym. XD Zawsze to trochę szybciej. Brzmi jak fikcja czy może być prawdą? Miejmy nadzieję że to tylko plotka a Ci ludzie nie popełnili jeszcze samobójstwa. Ja bym się w tej sytuacji zawiesił razem z Windowsem.

👏 POT, mimo wszystko szacuneczek.

Wszystko to wygląda bardzo ciekawie. Realnie na to patrząc, trzeba oddać szacunek ludziom z POT, że w całym tym galimatiasie wciśnięci między takie kolosy jak ZUS i Asseco jakkolwiek odnaleźli się w tej rzeczywistości. Śmiemy twierdzić, że opary absurdu które występują w tej konfiguracji już dawno przykryły ostry cień mgły. A Ty jakie masz problemy w swoich wdrożeniach?