Jak zautomatyzować import odczytów liczników do systemu Weles – Case Study Nieruchomości

łączenie danych import odczytów

Każdego miesiąca firma zarządzająca nieruchomościami stała przed frustrującym wyzwaniem: koniecznością przetworzenia i zaimportowania dziesiątek różnorodnych plików z odczytami liczników od spółdzielni i wspólnot mieszkaniowych. Ręczne łączenie nieustandaryzowanych danych z wewnętrznym systemem to nie tylko potężny pożeracz czasu, ale i proces podatny na błędy ludzkie, które mogą skutkować nieprawidłowymi rozliczeniami mieszkańców.

W niniejszym artykule pokazujemy, jak dzięki precyzyjnie zaprojektowanej automatyzacji całkowicie wyeliminowaliśmy ten problem. Zbudowaliśmy system, który bez pomocy AI, opierając się na niezawodnych skryptach i sprytnej heurystyce, samodzielnie wykrywa strukturę plików, dopasowuje dane do systemu Weles i natychmiastowo przygotowuje gotowe pakiety importowe. Efekt? Całkowity brak pomyłek i odzyskane kilkadziesiąt roboczogodzin w każdym cyklu rozliczeniowym.

Spis treści

Wyzwanie, z którym mierzył się klient: Chaos w danych i ukryte koszty ręcznej pracy

Zarządzanie nieruchomościami na dużą skalę to praca na ogromnych zbiorach danych, które niemal zawsze charakteryzują się brakiem jakiejkolwiek spójności. Nasz klient, dynamicznie rozwijająca się firma z branży zarządzania i administrowania nieruchomościami, obsługująca liczne wspólnoty i spółdzielnie, co miesiąc przechodził przez prawdziwą drogę przez mękę.

Rdzeń problemu
Każdego miesiąca do firmy spływało ponad 50 różnych plików arkuszy kalkulacyjnych z odczytami liczników (wody, prądu, ciepła). Pliki te pochodziły od różnych dostawców, co w praktyce oznaczało jeden fundamentalny problem: każdy plik miał zupełnie inną strukturę. W jednym arkuszu numer licznika znajdował się w kolumnie „A”, a wartość w „D”. W innym, wartości były porozrzucane, nazwy nagłówków całkowicie się różniły (np. „Nr_urz”, „Licznik”, „ID”, a czasem brakowało ich wcale), a w jeszcze innym dostawca dołączał historyczne odczyty z kilku poprzednich miesięcy, przez co wiersze pękały w szwach od nadmiaru liczb.

Wąskie gardło operacyjne
Dane z tych zróżnicowanych plików musiały zostać precyzyjnie połączone z głównym plikiem źródłowym wygenerowanym z wewnętrznego systemu Weles (popularnego oprogramowania dla zarządców nieruchomości). Dopiero taki zintegrowany plik mógł zostać zaimportowany z powrotem do systemu, by zaktualizować kartoteki mieszkańców i wystawić rachunki.

Proces ten był realizowany ręcznie. Pracownik musiał:

  1. Otwierać każdy z 50 plików z osobna.
  2. Rozszyfrowywać, co autor miał na myśli i która kolumna zawiera aktualny odczyt.
  3. Wyszukiwać numery liczników w systemie lub głównym pliku Weles (tzw. VLOOKUP-y, które często się „wywalały” przez formatowanie tekstu).
  4. Kopiować, wklejać, czyścić dane i formatować je pod rygorystyczne wymagania importowe.

Koszty ukryte i frustracja
Takie podejście generowało olbrzymie koszty ukryte. Szacunkowo, na przepracowanie tej partii materiału zespół tracił kilkanaście godzin miesięcznie. Co więcej, ręczne łącznie danych czasem prowadziło do błędów.

Rozwiązanie: Heurystyczny proces mapowania danych bez użycia AI

Mogłoby się wydawać, że do interpretacji zmiennej struktury danych (nieznane nazwy kolumn, losowa kolejność) idealnie nadaje się sztuczna inteligencja (np. modele językowe LLM). My jednak przyjęliśmy inne, znacznie bardziej inżynierskie i optymalne biznesowo podejście: tam, gdzie to możliwe, unikamy AI. Dlaczego?

Sztuczna inteligencja nie jest do końca przewidywalna. Czasem wywołanie konkretnego API zawodzi po stronie dostawcy. Dochodzą do tego koszty tokenów. Zamiast tego zastosowaliśmy zaawansowaną automatyzację opartą na platformie Make.com oraz autorskich, heurystycznych skryptach w języku Python. Zbudowaliśmy system, który sam „rozumie” plik na podstawie prawideł matematycznych i częstotliwości występowania ciągów znaków.

Proces automatyzacji przebiega następująco, krok po kroku:

Etap 1: Nasłuch na wiadomości i standaryzacja plików (Gateway & Webhooks)
Proces zaczyna się całkowicie bezobsługowo. Wystarczy, że podwykonawca wyśle e-mail z załącznikiem (arkuszem z odczytami) na dedykowany adres. Działający w tle webhook pocztowy natychmiast wychwytuje wiadomość, izoluje z niej załącznik i przesyła go na bezpieczny, tymczasowy dysk w chmurze (Google Drive). Tutaj następuje pierwszy ważny krok normalizacyjny: niezależnie od tego, czy plik jest w przestarzałym formacie XLS, nowoczesnym XLSX, czy CSV, system chmurowy konwertuje go do ustandaryzowanego formatu tekstowego (CSV), co ułatwia jego parsowanie w kolejnych modułach. Równolegle z chmury pobierany jest aktualny, centralny plik bazy liczników („plik Weles”).

Etap 2: Dekodowanie i przygotowanie środowiska wykonawczego
Aby mieć pewność, że wszystkie polskie znaki diakrytyczne i specjalne formatowania zostaną zachowane, system przepuszcza surowe dane przez skrypt dekodujący bazę (z Base64 do czystego tekstu w odpowiednim kodowaniu znaków CP1250 / UTF-8). Gotowe łańcuchy znaków trafiają do wirtualnych „pojemników” zmiennych (Set Variables), by można było przetwarzać je równolegle.

Etap 3: Algorytm poszukujący wspólnego klucza (Znalezienie nr liczników)
To najbardziej fascynująca część mechanizmu. Jak program ma wiedzieć, która z nienazwanych kolumn z 50 różnych plików to ta zawierająca numery liczników?
Skrypt Pythona pobiera listę wszystkich numerów liczników, o jakich „wie” plik referencyjny Weles. Następnie z niezwykłą szybkością skanuje całą zawartość przesłanego pliku i sprawdza, w której z jego kolumn krzyżują się te wartości. Narzędzie wykorzystuje zbiory danych i funkcję zliczania wystąpień (Counter z biblioteki Pythona). Kolumna w nadesłanym pliku, która zgromadzi „najwięcej trafień” dopasowań do bazy głównej, zostaje z całą pewnością i matematyczną precyzją okrzyknięta kolumną „Numer Licznika”. Pojedyncze błędy w pliku (np. pusta komórka, dopisany komentarz) są całkowicie ignorowane, ponieważ decyduje wola większości.

Etap 4: Inteligentna ekstrakcja odczytów – Heurystyka wartości maksymalnej
Kiedy znamy już numer licznika, musimy odnaleźć sam pomiar. Dostawcy często wysyłają pliki, w których jest kilka kolumn z wartościami (np. pomiar sprzed roku, sprzed miesiąca i obecny).
System wie, że poprawne wartości muszą być liczbami dziesiętnymi (posiadają przecinek/kropkę). Skrypt sprawdza każdą zbadaną komórkę we wszystkich wierszach, i w każdym wierszu szuka największej wartości ułamkowej.
Logika biznesowa opiera się tu na silnym i sprawdzonym założeniu: stan licznika zawsze rośnie. Zatem największa wartość liczbowa w wierszu dla danego punktu poboru to z pewnością najnowszy, aktualny odczyt. Podobnie jak wcześniej, kolumna, w której algorytm najczęściej znajdował te największe wartości dla całego zbioru, zostaje uznana za ostateczną kolumnę z bieżącymi odczytami. Ominęliśmy w ten sposób chaos nazewnictwa i układu, polegając na nienaruszalnej matematycznej specyfice danych.

Etap 5: Fuzja i generowanie pliku wyjściowego
Posiadając klucz (nr licznika) oraz wartość (odczyt), kolejny skrypt izoluje odpowiednią sekcję administracyjną z wielopoziomowego pliku Weles, paruje rekordy i generuje zupełnie nowy, krystalicznie czysty plik wyjściowy (separowany tabulatorami), zachowujący w 100% narzuconą strukturę docelowego systemu. Program samodzielnie wylicza również odpowiednią datę raportowania na podstawie bieżącego okresu.

Etap 6: Sortowanie chmurowe, raportowanie i obsługa błędów
Wygenerowane wyniki nie są ot tak po prostu porzucane. System automatycznie sprawdza strukturę chmury. Tworzy wirtualne foldery podzielone na wyliczone daty rozliczeniowe. Wewnątrz każdego katalogu z danego okresu zakłada podfoldery: „Oryginalne” (by zachować tzw. audit trail i archiwum tego, co przysłał podwykonawca) oraz „Przetworzone”. Następnie skrypt zaciąga obiekty z linkami URL do obu plików i generuje estetyczną tabelę w języku HTML.
Na sam koniec automatyzacja wysyła przejrzystego, czytelnego e-maila do zespołu obsługi, w którym znajduje się tabela informacyjna – jednym kliknięciem można sprawdzić plik wejściowy i pobrać gotowy plik wyjściowy do systemu Weles.

Co się dzieje, jeśli ktoś wyśle na dedykowany adres maila z błędnym załącznikiem zamiast odczytów liczników?
Wbudowany tzw. „Router” wyłapuje brak jakichkolwiek powiązań między plikami. Zamiast przetwarzać uszkodzone dane i generować „śmieciowy plik”, proces idzie specjalną ścieżką ewaluacyjną i wysyła ostrzeżenie e-mailowe z informacją „Błędny plik odczytu – brak dopasowań” wraz z załączonym trefnym plikiem do ręcznej weryfikacji.

Efekty i wynikowy ROI: Co zyskał klient?

Zastąpienie manualnej „przekładki” danych przez deterministyczną automatyzację z wykorzystaniem skryptów przyniósł rezultaty znacznie wykraczające poza samą oszczędność minut. System został uruchomiony i przetestowany w zaledwie kilka dni, gwarantując niemal natychmiastowy zwrot z inwestycji, widoczny już przy pierwszym cyklu miesięcznym.

Kluczowe metryki i liczby:

  • Kilkanaście godzin w skali miesiąca uratowane – Pracownicy zostali uwolnieni od niezwykle monotonnej i nielubianej czynności.
  • Redukcja błędów z tytułu kopiowania, błędnego formatowania i łączenia danych – heurystyka i kod Python eliminują ryzyko pomyłki
  • Czas przetwarzania 1 pliku obniżony z minut do sekund – cała „magia” (od otrzymania maila do odesłania pliku wyjściowego) dzieje się na serwerach w tle w ciągu zaledwie kilkunastu sekund.
  • Optymalizacja kosztów licencji API – dzięki zastąpieniu modeli sztucznej inteligencji (np. zapytań do OpenAI) twardą, stabilną logiką algorytmiczną, firma płaci tylko za abonament make

„Wcześniej początek miesiąca i spływające odczyty oznaczały dla naszej firmy monotonne łączenie odpowiednich danych oraz stały stres przed kosztowną pomyłką w rozliczeniach. Obecnie wszystko dzieje się całkowicie bez nas – system sam interpretuje najdziwniejsze pliki z odczytami i po paru sekundach podsyła nam na maila gotowy, perfekcyjny plik do systemu Weles. Odzyskaliśmy kilkadziesiąt godzin i święty spokój” – podsumowuje operacyjny menedżer ds. administracji klienta.

FAQ – Najczęściej zadawane pytania o automatyzację procesów

1. Czy dane moich klientów są bezpieczne, skoro wysyłamy je w chmurę?
Zdecydowanie tak. Platformy wykorzystane do przesyłania paczek danych (jak Make.com oraz autoryzowane połączenia dysków korporacyjnych typu Google Workspace) bazują na zaawansowanym szyfrowaniu (certyfikaty TLS, zabezpieczenia OAuth 2.0). Po poprawnym zaimportowaniu pliku, kopia tymczasowa nie „wisi” w otwartej sieci – jest przechowywana na chronionym dysku organizacyjnym. Warto zaznaczyć, że w odróżnieniu od analizy danych przez AI (np. darmowy ChatGPT), surowe dane biznesowe nigdy nie są w tym przypadku wysyłane poza kontrolowany obieg do zewnętrznych modeli językowych.

2. Ile czasu trwa wdrożenie tak zaawansowanego scenariusza?
Czas wdrożenia zależy zawsze od specyfiki pliku wyjściowego, jednak w przypadku opisanej powyżej heurystyki (Python + Make) jesteśmy w stanie postawić gotowe rozwiązanie, przetestować je z wariantami błędów i wdrożyć na produkcję w zaledwie od 5 do 10 dni roboczych.

3. Skąd program „wie”, co zrobić, jeśli dostawca wyśle dwa arkusze lub zmieni całkowicie schemat?
Właśnie na tym polega przewaga zaprogramowanej inteligencji (heurystyki poszukującej wartości max oraz częstości) nad tradycyjnym kodem lub sztuczną inteligencją. Kod nie patrzy, czy kolumna nazywa się „Licznik1”. Patrzy na wnętrze komórek. Dopóki w pliku istnieje zbiór numerów liczników i jakieś wartości dziesiętne odczytu – system złoży z nich spójną całość. Natomiast w skrajnych przypadkach (np. wysłanie całkowicie błędnego pliku) na scenę wkracza moduł powiadamiania o błędach, informujący obsługę o potrzebie ludzkiej weryfikacji.

4. Co jest potrzebne, by rozpocząć projekt?
Oczekujemy przede wszystkim próbek danych! Potrzebujemy zazwyczaj od 5 do 10 reprezentatywnych plików, które trafiały do Państwa zespołu do ręcznej edycji, a także przykładowy, docelowy plik, jakiego spodziewa się Wasz system biznesowy. To pozwala na natychmiastowe stworzenie Proof of Concept (PoC).

Koniec z ręcznym przetwarzaniem plików w Twojej firmie. Pora na rozmowę!

Każdy proces biznesowy, który wymusza na Twoich specjalistach bezmyślne kopiowanie danych między wieloma oknami arkusza kalkulacyjnego to palenie budżetu Twojej firmy. To również ukryty powód spadku motywacji pracowników i generator bardzo drogich w skutkach błędów księgowych czy operacyjnych.

Jeżeli historia nakreślona w tym Case Study brzmi dla Ciebie znajomo, a systemy w Twojej firmie również „nie gadają ze sobą” ze względu na chaos strukturalny spływających informacji – nie musisz się z tym pogodzić.


Przewijanie do góry