Aplicație pentru clinici · România

Planificare Clinică

< 5sun program generat
Dashboard interactiv cu programul săptămânal al asistentelor medicale

Provocarea

O clinică dentară cu mai multe cabinete, doctori cu programe diferite și asistente medicale care trebuie planificate săptămânal pierdea ore întregi pe planificarea manuală în Excel. Apăreau depășiri de ore nemarcate, cu risc legal pentru că limita era de 40 de ore pe săptămână. Recepția rămânea descoperită din greșeală, iar doctorii ajungeau fără asistentă atunci când aveau nevoie de una. Asistentele nu știau programul din timp, iar absențele și înlocuirile se gestionau haotic, pe hârtie sau la telefon. Nimeni nu avea vizibilitate în timp real asupra stării planificării.

Cum am procedat, pas cu pas

Roadmap-ul de execuție pe care l-am parcurs, de la primul audit până la operare zilnică.

  1. Pasul 1

    Configurare date master

    Se adaugă doctorii, asistentele interne și externe, cabinetele și disponibilitățile săptămânale. Fiecare doctor poate fi marcat dacă are nevoie de asistentă lângă el.

    Rezultat: Toate regulile fixe ale clinicii sunt introduse o singură dată și rămân ca temelie pentru fiecare generare.

  2. Pasul 2

    Înregistrare absențe

    Concediile și zilele libere se marchează pe zile întregi sau pe intervale orare. Sistemul blochează automat planificarea pentru persoanele absente.

    Rezultat: Nimeni nu mai poate fi programat când lipsește, fără verificări manuale și fără greșeli de scăpare din vedere.

  3. Pasul 3

    Generare automată

    Cu un singur click, algoritmul construiește programul săptămânal: maximum 40 de ore, recepție acoperită, asistente lângă doctori, fără suprapuneri.

    Rezultat: Programul care înainte cerea ore de muncă apare în mai puțin de cinci secunde, cu toate regulile respectate.

  4. Pasul 4

    Ajustări manuale

    Administratorul poate modifica orice asignare după generare. Sistemul afișează în timp real un avertisment dacă o schimbare încalcă o regulă.

    Rezultat: Controlul rămâne la om, dar omul nu mai poate strica liniștit echilibrul orelor sau acoperirea recepției.

Soluția

Am construit de la zero o aplicație web care generează automat programul săptămânal al asistentelor, în câteva secunde, respectând simultan toate regulile clinicii. Algoritmul ține cont de limita de 40 de ore, acoperă recepția permanent în timpul programului, pune asistentele lângă doctorii care au nevoie de ele și evită orice suprapunere. Orele lucrate se urmăresc în timp real, cu alerte la apropierea limitei. Absențele se înregistrează pe zile întregi sau pe intervale orare, iar sloturile respective se blochează automat. Administratorul vede totul într-un dashboard interactiv, cu vedere săptămânală, vedere pe ore între 8:00 și 20:00 și program personal pentru fiecare asistentă. Poate ajusta manual orice asignare, iar sistemul avertizează pe loc dacă o modificare încalcă o regulă.

Cum a fost, de fapt

Am ajuns la acest proiect printr-o frază aruncată într-o discuție despre altceva. O clinică dentară ne spunea cât de greu îi este să facă programul asistentelor în fiecare săptămână. Nu părea o problemă de software. Părea o problemă de organizare. Ne-am înșelat, și bine că ne-am înșelat.

Un Excel pe care îl ținea o singură persoană

Programul săptămânal al asistentelor stătea într-un fișier Excel. Un singur fișier, completat manual de administratorul clinicii, de obicei vineri după-amiaza, când restul echipei pleca acasă. Dura ore. Trebuia să țină minte cine e disponibil, cine e în concediu, care doctor lucrează în care zi și care dintre ei nu poate sta singur la cabinet.

Ne-am așezat lângă persoana care făcea programul și am urmărit-o cum lucrează. Nu a fost nevoie de prea multe întrebări. Vedeai pe ecran cum mută o asistentă dintr-o zi în alta, apoi se întoarce să verifice dacă nu a lăsat recepția goală, apoi numără în cap orele și își dă seama că una dintre fete sărise de 40. Atunci o lua de la capăt.

Regulile pe care nimeni nu le scrisese vreodată

Înainte să scriem o linie de cod, am vrut să înțelegem regulile. Problema era că nimeni nu le formulase explicit. Trăiau în capul administratorului și ieșeau la suprafață doar când erau încălcate. Maximum 40 de ore pe săptămână pentru o asistentă internă. Recepția acoperită cât timp clinica e deschisă. Un doctor anume nu poate lucra fără asistentă lângă el. Fără suprapuneri pe același cabinet.

Am petrecut două sesiuni întregi doar listând constrângerile, una câte una, până când persoana din fața noastră a zis: stați, mai e una. Asta a fost partea grea a proiectului, nu codul. Codul a venit după ce am avut regulile clare. Un sistem care planifică greșit pentru că nu cunoaște o regulă e mai periculos decât un Excel, fiindcă oamenii ajung să aibă încredere în el.

Generatorul care trebuie să nu greșească niciodată

Inima aplicației este algoritmul care produce programul. L-am gândit ca pe un rezolvitor de constrângeri: pornește de la disponibilități și absențe, apoi caută o combinație care le respectă pe toate în același timp. Nu e suficient ca soluția să fie aproape bună. Dacă o asistentă ajunge la 41 de ore, programul e greșit, indiferent cât de elegant arată restul.

Ne-a luat ceva să acceptăm că generarea trebuie să fie deterministă și verificabilă. Am separat clar partea care propune un program de partea care îl validează. Așa, chiar dacă generatorul ar fi avut o scăpare, validatorul prindea încălcarea înainte ca programul să ajungă la cineva. Rezultatul, văzut din afară, e banal: apeși un buton și în mai puțin de cinci secunde ai programul pe ecran. În spate, sunt zeci de verificări care rulează de fiecare dată.

Ce se întâmplă când omul vrea să schimbe ceva

Un sistem care generează perfect, dar nu te lasă să intervii, e inutilizabil într-o clinică reală. Apare un schimb între colege, un doctor cere pe cineva anume, intervine ceva ce algoritmul nu avea de unde să știe. Administratorul trebuie să poată muta o asistentă cu mâna lui.

Aici a fost o tensiune de proiectare. Dacă lași omul să modifice orice, se pierde garanția că regulile sunt respectate, exact problema de la care am plecat. Soluția pe care am ales-o: omul poate muta orice, dar nu în liniște. În clipa în care o schimbare scoate o asistentă peste limită sau lasă recepția descoperită, apare un avertisment în timp real, pe loc, lângă modificare. Libertatea rămâne, dar greșeala nu mai trece neobservată.

Cum vede fiecare doar ce trebuie să vadă

Am construit aplicația cu două roluri. Administratorul are control total: configurează datele, înregistrează absențe, generează și ajustează programul. Asistenta intră ca utilizator simplu și vede un singur lucru, programul ei personal, clar, fără să se piardă în planul întregii clinici.

Detaliul ăsta a contat mai mult decât ne așteptam. Dispăruseră întrebările de tipul: eu când lucrez săptămâna asta? Înainte, răspunsul venea pe un grup de mesaje sau printr-un telefon. Acum, fiecare deschide aplicația și are programul în față. Accesul e protejat cu autentificare pe bază de token, iar fiecare vede doar ce ține de el. Lucruri mărunte, dar care scot din zi zeci de mici fricțiuni.

Cum arată acum, după ce s-a așezat în rutină

Aplicația rulează în producția clinicii. Deploy-ul se face automat din GitLab, fără pauză de funcționare, așa că putem îmbunătăți lucruri fără să oprim clinica din folosit. Generarea programului, care odată însemna o după-amiază pierdută, e acum o operațiune de câteva secunde, repetabilă ori de câte ori se schimbă ceva.

Ce ne place cel mai mult nu e viteza, ci liniștea. Administratorul nu mai numără ore în cap și nu mai verifică de trei ori dacă recepția e acoperită. Sistemul o face. Iar când vrea să schimbe ceva, schimbă, și e avertizat dacă a stricat un echilibru. Următorul lucru pe care îl discutăm este o vedere pe mai multe săptămâni deodată, ca să se vadă tiparul orelor pe o lună întreagă. Nu e gata. Dar fundația suportă deja gândul.

Partea grea nu a fost codul. A fost să scoatem din capul unui singur om toate regulile pe care nu le scrisese nimeni vreodată.

Tehnologii folosite

  • React
  • TypeScript
  • Node.js
  • Express
  • Prisma ORM
  • SQL Server
  • Tailwind CSS
  • Shadcn/UI
  • JWT Auth
  • Roluri ADMIN și USER
  • CI/CD GitLab
  • Deploy zero downtime via PM2

Rezultate

< 5stimp de generare a programului
100%reguli respectate la fiecare rulare
0conflicte de program
40hlimita impusă automat per asistentă

Lecții

Cea mai mare valoare nu a venit din algoritm, ci din munca de a face explicite regulile care trăiau doar în mintea unei persoane. Odată scrise și verificate de sistem, clinica nu mai depindea de memoria sau prezența cuiva anume vineri după-amiaza. A doua lecție: un generator automat are nevoie obligatoriu de un loc unde omul poate interveni, altfel rămâne pe raft. Echilibrul corect a fost să dăm libertate completă de ajustare, dar însoțită de avertismente în timp real, ca greșeala să fie tot timpul vizibilă.

Proiectul a pornit de la o problemă care părea minoră, programul săptămânal al câtorva asistente, și a arătat cât de mult timp și nervi consumă o sarcină repetitivă lăsată pe seama unui fișier și a memoriei unui singur om. Acum clinica are un instrument care produce programul în câteva secunde, respectă de fiecare dată regulile pe care înainte le verifica manual și lasă recepția mereu acoperită. Fiecare asistentă își vede programul fără să întrebe pe nimeni, iar administratorul a câștigat înapoi după-amiezile pe care le pierdea săptămânal pe planificare.