Hauer of Power. Podcast o sprzedaży, automatyzacji i optymalizacji procesów B2B Mateusz Hauer
Strona główna
Rozwiązania
Systemy CRM szyte na miarę Automatyzacja procesów Modernizacja systemów Integracje i workflow Strony i systemy webowe AI i systemy dla medycyny
Szybkie wdrożenia
Prototyp w 3 dni Gotowy system w 4 tygodnie Nadzór senior developera
Case studies
Wszystkie projektyCRM i automatyzacjaWeb & ExperienceDigital Commerce
Case studies według branży
ProdukcjaNieruchomościEnergetykaUsługi profesjonalneMedycynaTechnologieHandel
Więcej
Wiedza Kontakt
Język
PLENDE
Migracja systemu medycznego — odcięcie od zewnętrznej platformy i własny model danych
Hauer Power/Case studies/Migracja systemu medycznego
Case StudyMigracjaWłasny model danych

Odcięcie od zewnętrznej platformy: własny model danych dla sieci placówek

Skala
~150 placówek
Zakres
Rejestracja · grafik · wyszukiwarka · raporty
Punkt wyjścia
Logika po stronie cudzej platformy
Rezultat
Własne tabele, bez przestoju

Zanim system dla sieci około 150 placówek stał się samodzielny, jego rdzeń nie należał do niego. Rejestracja, dostępność lekarzy i praca gabinetu opierały się na zewnętrznej platformie. Ten case opisuje najmniej efektowną, a najważniejszą część projektu: odcięcie się od cudzego źródła danych i zbudowanie własnego modelu — bez zatrzymywania działającej sieci.

To osobny wątek tego samego wdrożenia. Jeśli szukasz historii integracji z e-zdrowiem (P1, ZUS, NIL) i walki z e-ZLA, opisaliśmy ją w głównym case study system dla sieci placówek. Tutaj skupiamy się na tym, co było pod integracjami — na fundamencie danych.

Punkt wyjścia: cudza platforma jako rdzeń

Na starcie system nie był samodzielny. Kluczowe dane — o lekarzach, dostępności, wizytach i terminach — pochodziły z zewnętrznej platformy. Do cudzego źródła sięgały elementy, które użytkownik uznałby za „swoje": wyszukiwarka lekarzy, kalendarz, zamawianie wizyty, panel administratora i raporty.

Dla właściciela sieci placówek to wygodne na starcie i ryzykowne na dłuższą metę. Każda zmiana po stronie zewnętrznej platformy — w danych, w API, w zasadach — mogła odbić się na codziennej pracy rejestracji. A każda nowa funkcja, którą chcieliśmy dołożyć, musiała najpierw zapytać cudzy system „czy mogę".

Ukryty problem: dane opisane cudzymi identyfikatorami

Największa niespodzianka nie leżała w interfejsie, tylko głęboko w danych. Usługi i gabinety identyfikowane były po identyfikatorach z zewnętrznej platformy, a nie po własnych rekordach w naszej bazie. Innymi słowy: to nie był nasz model danych, tylko cień cudzego.

Konsekwencja jest poważniejsza, niż brzmi. Dopóki gabinet czy usługa „istnieje" tylko jako numer w obcym systemie, nie da się na niej bezpiecznie zbudować recepty, zwolnienia, karty pacjenta ani raportu — bo wszystko odwołuje się do znaczenia, które definiuje ktoś inny. To klasyczny vendor lock-in na poziomie danych, a nie tylko umowy.

Dlatego pierwszą realną decyzją projektową nie było „dodajmy funkcję", tylko: przenieśmy znaczenie do siebie. Zbudujmy własne tabele placówek, gabinetów i usług, i dopiero na nich stawiajmy resztę.

Panel systemu po odcięciu od zewnętrznej platformy
Przed
Gabinet
Usługa
Wizyta
ExternalID
Zewnętrzna platforma

Każda funkcja pyta cudzy system o tożsamość własnych danych.

Po
Gabinet
Usługa
Wizyta
InternalID
Własny model danych

Tożsamość danych jest nasza. Nowa funkcja nie pyta nikogo o zgodę.

Sedno migracji: dopóki gabinet i usługa były opisane identyfikatorem cudzego systemu, to nie były nasze dane — tylko ich kopia. Przeniesienie znaczenia do własnych tabel było całą robotą.

Jak przenieśliśmy logikę do siebie

Odcięcie zaplanowaliśmy jako etapy, a nie jeden ryzykowny „wielki przełącznik" (w backlogu to m.in. zadania oznaczone jako etapy przejścia oraz osobny „cleanup" starej integracji). Sieć placówek działała przez cały czas — pacjenci wciąż się rejestrowali, lekarze przyjmowali — więc migracja musiała odbywać się pod ruchem.

Własny model danych

Zbudowaliśmy tabele i panel do zarządzania placówkami, gabinetami i usługami lekarza: dodawanie, edycja, usuwanie. Usługę można przypisać do konkretnego gabinetu i oznaczyć jako online albo stacjonarną. Przenieśliśmy też statusy wizyt, żeby nic nie zgubiło się w trakcie przełączania.

Przepięcie zależności

Po kolei odpinaliśmy od zewnętrznego źródła te elementy, które użytkownik widzi na co dzień, i wskazywaliśmy je na własne tabele:

  • Rejestracja i dostępność — terminy i grafik czytane z naszej bazy, nie z cudzej.
  • Wyszukiwarka lekarzy — filtry i wyszukiwanie na własnych rekordach.
  • Kalendarz i zamawianie wizyty — pełny cykl umawiania po naszej stronie.
  • Raporty i panel administratora — dane operacyjne bez zaglądania do zewnętrznego portalu.

Na koniec przyszedł cleanup: refaktoryzacja kodu, uporządkowanie bazy i odpięcie starego API. To niewdzięczny etap — nie widać go w interfejsie — ale bez niego „odcięcie" zostaje tylko na papierze, a w kodzie wciąż wisi zależność, która kiedyś odezwie się w najmniej odpowiednim momencie.

Rezultat: lekarz i administrator zarządzają placówkami, gabinetami, usługami i wizytami w panelu systemu — bez zależności od zewnętrznej platformy. Dopiero na tym fundamencie dało się dołożyć integracje z P1, ZUS i NIL, kartę pacjentaportal pacjenta.

Czego uczy takie odcięcie

Świadomie nie podajemy tu wskaźników procentowych — projekt nie mierzył ich w sposób, który moglibyśmy uczciwie zacytować. Dowodem jest to, że sieć około 150 placówek działa dziś na własnym rdzeniu, a znaczenie danych należy do niej, nie do zewnętrznego dostawcy.

Własny model danych to nie luksus, to warunek

Dopóki usługi i gabinety były opisane cudzymi identyfikatorami, każda funkcja była zakładnikiem zewnętrznego systemu. Przeniesienie znaczenia do siebie było warunkiem wszystkiego, co przyszło potem. To pierwsze pytanie, jakie warto zadać przy migracji danych pacjentów ze starego systemu: czyje są tak naprawdę identyfikatory.

Migracja pod ruchem to kwestia etapów

Sieć placówek nie może „stanąć na weekend migracji". Dlatego odcięcie robi się etapami, z przenoszeniem statusów wizyt, a nie jednym przełącznikiem. Ryzyko rozkłada się wtedy na małe, kontrolowane kroki, a każdy z nich można spokojnie przetestować, zanim ruszy kolejny.

Cleanup jest częścią pracy, nie sprzątaniem po niej

Odpięcie starego API i uporządkowanie bazy to nie „miły dodatek na koniec". Pominięty, zostawia ukrytą zależność, która podważa cały sens odcięcia. Traktujemy go jako pełnoprawny etap projektu.

Najtrudniejsza część migracji nie była widoczna na ekranie. Chodziło o to, żeby dane wreszcie znaczyły coś w naszym systemie, a nie były cieniem cudzego. Dopiero wtedy można było budować dalej.
— Mateusz Hauer, Hauer Power

Twój system medyczny opiera się na zewnętrznej platformie i chcesz się uniezależnić — albo planujesz go od zera z własnym modelem danych? Podpowiemy, od czego zacząć i gdzie są największe pułapki. Umów bezpłatną konsultację, zobacz ofertę tworzenia systemów medycznych albo główny case system dla sieci placówek.