Slavko Babić
Svi projekti

Zdravstvo / zakazivanje

Platforma za zakazivanje pacijenata

Full-stack platforma za zakazivanje za terapeutsku ordinaciju — zakazivanje pacijenata na preseku raspoloživosti terapeuta, prostorije, aparata i slobodnih dana, sa pristupom po ulogama od recepcije do terapeuta.

Status U aktivnom razvoju

Pregled

Platforma za zakazivanje za terapeutsku ordinaciju. Na površini zakazuje pacijente na termine; ispod, svako zakazivanje je mali problem zadovoljenja ograničenja — pravi terapeut, slobodna prostorija, ponekad određeni aparat, i nikada na nečiji slobodan dan. To je proizvod koji gradim od početka do kraja, od Prisma šeme do responzivnog UI-ja.

Problem

Zakazivanje u ordinaciji izgleda trivijalno dok ne nabrojiš šta validan termin zapravo zahteva. Treba mu raspoloživ terapeut koji već nije zauzet i nije na odsustvu. Treba mu prostorija koja nije prekapacitirana — a ako je terapeut označen da radi sam, prostorija koju niko drugi ne koristi. Može mu trebati određeni aparat koji živi u toj prostoriji. Papirni rokovnik ili deljena tabela ne mogu da nametnu ništa od toga, pa su otkazi one skupe vrste: dvostruko zakazano osoblje, prepune prostorije, odbijeni pacijenti, resursi koji stoje neiskorišćeni.

Rešenje

Full-stack aplikacija u kojoj je zakazivanje dozvoljeno samo ako zadovoljava svako ograničenje odjednom. Recepcija i menadžeri zakazuju; terapeuti vide svoj dan; svaka uloga vidi tačno ono što treba. Oko kalendara sede CRUD površine od kojih raspored zavisi — zaposleni i njihovo radno vreme, prostorije i njihov kapacitet, aparati u svakoj prostoriji, i kalendar slobodnih dana sa uključivanjem klikom. Sve je responzivno od telefona na recepciji do desktopa u pozadinskoj kancelariji.

Arhitektura

TypeScript monorepo: Express + Prisma backend nad PostgreSQL-om, i React (Vite) frontend na Material UI. Prisma šema je jedini izvor istine za domen — Employee, Room, Device, DayOff, Appointment, i EmployeeRoom veza između osoblja i prostorija u kojima može da radi — tako da je model izražen jednom, a tipovi teku ka oba kraja.

Autentikacija je JWT sa hijerarhijom uloga (root, admin, manager, therapist, client). Jedan detalj koji mi je čudno drag: nasleđena uloga EMPLOYEE se čuva kao alias dok svaki red migrira na THERAPIST, tako da se preimenovanje isporuči bez dana velikog prelaska. Ceo stack radi na Docker Compose-u sa četiri režima vođena env promenljivima — lokalni razvoj sa hot reload-om i hvatačem mejlova, staging, i dva produkciona oblika (eksterna ili upakovana baza) — tako da „kako ovo da pokrenem” ima jedan pošten odgovor za svako okruženje.

Tehnički izazovi

Validator zakazivanja je srce svega, i tu žive zanimljivi bagovi. Jedna provera „mogu li ovo da zakažem?” mora da pokrene četiri nezavisna čuvara zajedno — kalendar slobodnih dana terapeuta, proveru vremenskog konflikta sa njegovim postojećim terminima, granicu popunjenosti prostorije, i zastavicu ekskluzivnosti prostorije za osoblje koje mora da radi samo — i to mora da uradi atomično, jer dve recepcionerke koje zakazuju poslednji slobodan termin u istom trenutku jeste stvarna trka, a ne hipotetička. Naterati ta pravila da žive na jednom mestu, na strani servera i autoritativno, umesto razmazana po UI-ju, bio je posao koji je značio.

Naučene lekcije

Modeliraj resurse i njihova ograničenja pre nego što nacrtaš i jedan kalendar. Kada je „termin je presek raspoloživog terapeuta, prostorije, aparata i vremena” zapisano kao eksplicitan skup pravila, UI je postao tanka stvar povrh toga i svako novo ograničenje je imalo očigledno mesto. Mreža za zakazivanje je deo koji korisnici vide; validator je deo koji je čini vrednom poverenja.

Tehnologije

  • TypeScript
  • Express
  • Prisma
  • PostgreSQL
  • React
  • Material UI
  • Docker