Przejdź do treści
Metafox
Wszystkie realizacje

DealerBit

Platformy i dane Migracja w toku Automotive dealer group

Przepisanie 10-letniej hurtowni danych BI/ETL — logika z 3-4 systemów zebrana w jeden silnik, zgodny ze starym co do komórki.

data-engineeringETLBIdata-warehousedigital-transformationPythonAI-assisted

Technologie

PythonFastAPIMariaDBpytestPHP (legacy)RabbitMQ
Projekt wewnętrzny / prywatny

DealerBit — modernizacja hurtowni danych

Przepisanie 10-letniej platformy BI bez zepsucia ani jednej liczby.

Czym jest

DealerBit to wielodostępowa (multi-tenant) hurtownia danych BI/raportowa dla grup dealerów motoryzacyjnych. Pobiera dane operacyjne — zlecenia serwisowe, faktury, stany magazynowe części, CRM sprzedażowy, księgowość, HR/płace — z wielu różnych systemów zarządzania dealerem (DMS) do centralnej hurtowni, a następnie materializuje raporty w podziale na organizacje i lokalizacje.

Wyzwanie

Starsza platforma rozwijała się przez około 10 lat i trzymała logikę biznesową jednocześnie w 3–4 różnych miejscach: w kodzie aplikacji PHP, w triggerach/funkcjach/widokach MySQL, w procedurach składowanych żyjących na serwerach DMS samego klienta (liczonych zdalnie, poza jakimkolwiek repozytorium) oraz w rozproszonych wartościach zakodowanych na sztywno — przy czym formuły raportów były wykonywane przez surowe PHP-owe eval(), a jeszcze więcej logiki było ukryte w JSON-ie. Czerpała z ~8 heterogenicznych źródeł danych (MS SQL, Firebird, MySQL, REST API, systemy księgowe), zasilających ~44 raporty dynamiczne i ~23 raporty listowe. Nikt nie potrafił w pełni wyjaśnić, jak powstają te liczby.

Co zbudowaliśmy

  • Silnik Python budowany od zera, który czyta tę samą produkcyjną bazę danych w trybie tylko do odczytu i porównuje swój wynik z wynikami starego systemu komórka po komórce — dokładna zgodność (decimal 15,5 / HALF_UP) jest kryterium sukcesu
  • Twarda reguła architektoniczna: cała logika żyje w kodzie — bez triggerów w bazie, bez eval, bez logiki w JSON-ie. Stary system jest referencją co do tego, co liczyć, a nie jak
  • Dyscyplina zakresu: odbudowaliśmy tylko to, czego rzeczywiście używa aktywny klient, odrzucając lata wielodostępowego balastu i niedeterminizmu
  • “Mapa pokrycia” w postaci UI opartego na FastAPI + Jinja, pokazująca raport po raporcie i komórka po komórce dokładnie, które wartości są odtworzone i zgodne (zielony/czerwony/niezaimplementowany)

Wyniki / wpływ

  • Udowodniona zgodność komórka po komórce na najtrudniejszych raportach: flagowa Analiza Działu Serwisu (obejmująca 6 rodzin DMS) osiągnęła 296/296 komórek (100%); inny kluczowy raport 361/361; budząca respekt starsza funkcja składowana zaimplementowana ponownie w Pythonie na poziomie 100/100
  • Zestaw testów na zielono (110 przechodzących); historyczne “niezgodności” prześledzone do nieaktualności snapshotów starego systemu, a nie do błędów logiki
  • Logika biznesowa skonsolidowana z 3–4 miejsc w jedną bazę kodu, usuwając martwy kod i eliminując niedeterminizm starego systemu
  • Przepisanie wspierane przez AI okazało się ~1,6–3× tańsze niż budowa czysto ludzka, co zweryfikowano mierzonymi w czasie próbami pokazującymi, że praca mechaniczna kompresuje się 10–50×

Stack

Przepisanie: Python (FastAPI, Jinja, pytest), czytający hurtownię MariaDB, orkiestrowany przez sterowalne workery. Stary system (referencja): PHP 8 z własnym frameworkiem + komponenty Symfony, RabbitMQ, MariaDB (282 tabele), Vue 2 SPA (~89 tys. LOC), dumpery PowerShell.

Status: Migracja w toku — zgodność udowodniona na raportach pilotażowych; stary system pozostaje nietknięty, dopóki przepisanie jest walidowane.