Fogászati praxismenedzsment rendszer
Fogászati rendelők teljes napi működését kezelő rendszer: időpontok, kezelési karton, betegek, pénztár, számlázás és hatósági jelentések. A régi rendszert fokozatosan írom újra Laravelre, működés közben.
Fejlesztem a rendszert, és részt veszek a régi változat funkciónkénti újraírásában.
Egy fogászati rendelő működése sok, egymástól függő dologból áll: időpont, a kezelés dokumentálása, számla, pénztár, hatósági jelentés, betegkommunikáció. Ha ezek külön eszközökben vannak, az idő az adminisztrációra megy el.
A feladat az, hogy a sok éven át épült rendszert modernre cseréljem úgy, hogy közben a rendelők dolgozhassanak. Egészségügyi adatról van szó, ezért az adatok szétválasztása és a naplózás nem lehet utólagos ötlet.
Időpontnaptár és online foglalás
Berendelési napló rendelőkkel és erőforrásokkal, online időpontfoglalás, szinkron külső naptárral és automatikus emlékeztetők.
Kezelési karton
Kezelések dokumentálása, parodontális státusz, laborlapok, sablonok, képek és dokumentumok a páciens kartonjában.
Betegnyilvántartás és betegportál
Törzsadatok, duplikált betegek összevonása, import és export, és egy betegportál, ahol a páciens a saját adataival és feladataival dolgozhat.
Pénztár és számlázás
Pénztár napi zárással és több pénznemmel, páciens egyenleg, és összekötés a számlázó szolgáltatással.
Hatósági integrációk
Kapcsolat az országos egészségügyi adatrendszerrel (e-recept), és a finanszírozói jelentések automatikus elkészítése.
Kommunikáció és belső munka
Hírlevél, kérdőívek, értesítések, belső chat és feladatkezelő, riportokkal Excelben és PDF-ben.
A rendelő rendszerbeállításai: naplószínek, figyelmeztetések, számlázás, felhasználók és munkarend.
Rendelőszékenkénti napi nézet, színkódolt kezelések. A betegek nevei a képen elmosva.
Márka- és ügyfélnevek, valamint személyes adatok nélkül (kivéve az alkalmazás áruházi képeit).
Több rendelő, egy adatbázis
Sok rendelő használja ugyanazt az adatbázist, és minden lekérdezés a saját rendelőjére szűr.
Mezőszintű változásnapló
Minden módosítás naplózódik, hogy az érzékeny adatok kezelése bármikor ellenőrizhető legyen.
Betegportál és online időpont
A páciens a saját adataival és feladataival dolgozhat, az időpontot pedig online is le lehet foglalni.
A régi viselkedést pontosan át kell venni
Újraírásnál az a cél, hogy a rendszer ugyanúgy működjön, mint régen, mert a rendelők ehhez szoktak. Ezért funkciónként viszem át a régi kódot, és listát vezetek arról, hol tér el az új a régitől.
Napló, ami nem lassít
A naplózás az eredeti sort a memóriából veszi, így nem kell hozzá plusz lekérdezés, havi bontású táblába ír, és sorban fut, hogy ne lassítsa a rendszert.
Az adatok nem keveredhetnek
Mivel minden rendelő ugyanabban az adatbázisban van, szinte minden lekérdezés a rendelő azonosítójára szűr. A rendszergazda válthat rendelők között, de ezt külön kérnie kell.
Több rendelő, egy rendszer
Többbérlős felépítés: sok rendelő használja ugyanazt az adatbázist, de minden lekérdezés a saját rendelőjére szűr, így az adatok nem keveredhetnek.
Fokozatos újraírás
A régi rendszert funkciónként váltja ki az új, a viselkedést egy az egyben átvéve. A rendelők a váltás közben is dolgozhatnak, és nincs egyetlen kockázatos átállási nap.
Minden módosítás visszakövethető
Mezőszintű változásnapló minden módosításról, havi bontású tárolással és sorban futó írással, hogy az érzékeny adatok kezelése bármikor visszaellenőrizhető legyen.
Valós idejű frissítés
WebSocket alapú frissítés, háttérfeldolgozás Redis sorokkal, PostgreSQL adatbázis, és ütemezett szinkron a külső rendszerekkel.
Változásnapló extra lekérdezés nélkül
Az érzékeny adatokon minden módosítás mezőszinten naplózódik. Az eredeti sort a memóriából veszi, így a naplózás nem terheli az adatbázist, és tömeges műveletnél biztonságosan szüneteltethető.
/** Temporarily disable logging, e.g. during a bulk import or seeding. */
public static function withoutLogging(callable $callback): mixed
{
$previous = self::$paused;
self::$paused = true;
try {
return $callback();
} finally {
self::$paused = $previous;
}
}
/** On `updating`, keep the original row in memory, so no extra SELECT is needed. */
public function captureOriginal(Model $model): void
{
if (! $this->enabled($model)) {
return;
}
$this->originals[spl_object_id($model)] = $model->getOriginal();
}
Egy rendszer, ami a rendelő teljes működését lefedi, a naptártól a pénztárig és a hatósági jelentésekig. A bevezetés egynapos oktatás és a meglévő adatok átvétele, a rendszer pedig a rendelők megszakítása nélkül újul meg.
Időszerű lenne a régi rendszered újraírása vagy átvilágítása?
Működés közben, fokozatosan, a viselkedés megtartásával is megoldható.
További projektek
Autós és outdoor webáruház
Méretpontos termékkereső, akciók és kedvezménykódok, több mint 15 000 kiszolgált rendeléssel.
Hogyan készült → Webalkalmazás és APIJegyértékesítő platform
Jegyvásárlástól a beléptetésig és az utókommunikációig: webes rendszer fizetéssel, számlázással, mobil API-val és közösségi réteggel.
Hogyan készült → iOS és AndroidRendezvény-beléptető app
Telefonos app, amivel a rendezvényeken gyorsan és ellenőrzötten lehet beléptetni a vendégeket.
Hogyan készült →