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.
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.