Aplicatie Web Pentru Gestionarea Serviciilor Pacientilor Intr Un Spital

Cuprins

1. Considerații

1.1. Rezumat

1.2. Descrierea aplicației

1.2.1. Tipurile de utilizatori și rolul lor

1.2.2. Secții, saloane și pacienți

1.2.3. Structura site-ului

1.3. Alegerea tehnologiilor

1.3.1. PHP

1.3.2. Drupal 7

1.3.3. Tehnologii auxiliare

2. Dezvoltarea aplicației folosind resurse existente

2.1. Introducere în Drupal

2.1.1. Sistemul de hook-uri

2.1.2. Utilizatori, roluri și permisiuni

2.1.3. Modalități de traducere

2.1.4. Sistemul de formulare

2.1.5. Adăugarea de pagini

2.1.6. Interacțiuni cu baza de date

2.1.7. Personalizarea site-ului

2.2. Alegerea modulelor

2.3. Alegerea unui design

3. Dezvoltarea unui modul pentru gestionarea spitalului

3.1. Structura bazei de date

3.2. Structura modulului

3.2.1. Fișierul hospital.info

3.2.2. Fișierul hospital.install

3.2.2. Fișierul hospital.module

3.3. Implementarea secțiilor

3.3.1. Adăugarea unei secții

3.3.2. Listarea secțiilor

3.4. Implementarea saloanelor

3.4.1. Adăugarea unui salon

3.4.2. Listarea saloanelor

3.5. Implementarea pacienților

3.5.1. Adăugarea unui pacient

3.5.2. Afișarea pacienților

3.5.3. Căutarea unui pacient

3.5.4. Foaia de observație

4. Modul de utilizare al aplicației

4.1. Prima pagină

4.2. Adăugarea unei secții

4.3. Adăugarea unui salon

4.4. Adăugarea unui pacient

4.5. Listarea paturilor ocupate

4.6. Detalii pacient, foaie de observație, diagnostic

4.7. Adăugarea foii de observație și a diagnosticului

4.8. Căutare pacient

4.9. Pagina pacientului

5. Finalizarea și publicarea produsului

1. Considerații

1.1. Rezumat

Lucrarea este structurată pe cinci capitole:

prezintă tehnologiile folosite precum și informații generale despre aplicație

cuprinde modulele existente și aspectul aplicației

demonstrează crearea unui modul în Drupal

explică modul de utilizare al aplicației

prezintă modul de publicare și folosire al produsului final

1.2. Descrierea aplicației

Proiectul constă în realizarea unei aplicații pentru gestionarea pacienților internați într-un spital. Se dorește ca prin această aplicație să fie mai ușor accesul la datele pacienților, renunțându-se la folosirea foilor de hârtie.

Soluționarea acestei probleme constă în centralizarea informațiilor într-o bază de date și administrarea lor folosind o interfață grafică.

1.2.1. Tipurile de utilizatori și rolul lor

Înainte de a schița structura aplicației trebuie să luăm în considerare funcțiile persoanelor ce o vor utiliza. Astfel, distingem trei tipuri de utilizatori:

administratorul – se ocupă cu administrarea secțiilor, saloanelor și mentenanța aplicației (rezolvând eventualele probleme tehnice)

operatorul – se ocupă cu înregistrarea pacienților

doctorul – completează foile de observație ale pacienților

1.2.2. Secții, saloane și pacienți

Secțiile delimitează în mod clar o ramură a medicinei care studiază sau tratează afecțiuni specifice. Pentru a defini o secție în cadrul aplicației avem nevoie doar de un nume: Cardiologie, Neurologie, Pediatrie, etc. Ele pot fi adăugate doar de către administrator.

Saloanele sunt folosite pentru internarea pacienților într-o anumită secție a spitalului. Fiecare salon dispune de un număr limitat de paturi, astfel pentru a defini un salon avem nevoie de secția corespunzătoare, numărul de paturi disponibile precum și un identificator al acestuia, în cazul de față un număr unic. Ca și în cazul secțiilor, saloanele pot fi create doar de către administrator.

Pacienții reprezintă persoanele internate sau externate din spital. Internarea se face de către un operator al spitalului, care va completa detaliile pacientului: nume complet, vârstă, sex, C.N.P., adresă, număr de telefon, precum și un medic care îl va trata. La internare, pacientului îi este asignat un pat într-un anumit salon.

Pentru monitorizarea stării de sănătate a pacientului se folosesc foile de observație completate de către medici. O astfel de foaie de observație conține tratamentele la care a fost supus un pacient, data și evoluția stării de sănătate a acestuia. De asemenea, dacă este cazul, doctorul poate adăuga un diagnostic.

Odată externați, pacienții vor fi păstrați încă în baza de date a aplicației pentru a avea un istoric medical cât mai detaliat în cazul unei internări viitoare.

1.2.3. Structura site-ului

Luând în calcul cele trei tipuri de utilizatori prezentate mai sus, structura site-ului va fi diferită în funcție de rolul fiecăruia. Mai exact, unele pagini ale site-ului nu vor fi accesibile pentru unii utilizatori. Următoarea diagramă (fig. 1.2.1) prezintă o vedere de ansamblu pentru fiecare tip de utilizator:

fig. 1.2.1 – Rolurile utilizatorilor

1.3. Alegerea tehnologiilor

Deoarece acest proiect va fi o aplicație web, tehnologiile folosite vor fi specifice dezvoltării aplicațiilor de acest tip.

1.3.1. PHP

Limbajul PHP[1] a fost creat ȋn 1994 de catre Rasmus Lerdorf pentru a afla numărul de persoane care ȋi vizitau siteul. El a denumit scripturile create PHP (Personal Home Page). Limbajul a fost refăcut si îmbunătățit, utilitatea și caracteristicile sale au fost dezvoltate treptat, ajungȃnd sǎ aibǎ semnificația Hypertext Preprprocesor (PHP).

Este un limbaj open-source și beneficiazǎ de suport activ din partea comunitǎții online, acesta fiind motivul care a generat o creștere semnificativă privind numǎrul site-urilor care au la baza limbajul PHP.

Ceea ce diferențiază PHP fațǎ de alte limbaje de scripting (JavaScript) este faptul cǎ PHP este un interpretor server-side (operațiile sunt executate de cǎtre server iar clientul va primi rezultatele rulării scriptului, fără a cunoaște codul sursă ce stă la baza acestuia).

Scripturile PHP se pot clasifica în trei mari categorii:

scripting de partea serverului – este nevoie de analizatorul PHP (în calitate de CGI, sau modul pentru server), un server web și un navigator web

scripting în linia de comandă – scriptul PHP rulează fără a fi nevoie un server sau navigator web

scrierea aplicațiilor de birou – se poate utiliza PHP-GTK pentru a scrie asemenea aplicații. Se pot scrie astfel și aplicații ce vor rula pe mai multe platforme.

PHP poate fi utilizat pe toate sistemele de operare și este integrat cu majoritatea serverelor web existente (Apache, IIS, lighttpd, nginx, etc.), precum și cu o gamă largă de baza de date (MySQL, MSSQL, PostgreSQL, etc.). Poate, de asemenea, să comunice cu alte servicii folosind protocoalele LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (pe Windows) și multe altele.

1.3.2. Drupal 7

Drupal[2] este un CMS (Content Management System) scris în PHP care permite crearea, administrarea și personalizarea conținutului unui website. A luat naștere în 1999 ca un forum open-source, iar cu trecerea timpului comunitatea Drupal l-a dezvoltat până în punctul în care poate fi folosit pentru orice tip de site (grație structurii sale modularizate). În prezent este unul dintre cele mai folosite software-uri pentru site-uri, fiind folosit de companii sau instituții mari, cum ar fi: Twitter, AOL, Examiner.com, Harvard, White House, MIT, etc.

1.3.3. Tehnologii auxiliare

Design site

HTML

CSS

Bootstrap[3] – folosit pentru sistemul de grid, tipografie și elemente ale paginii

Adobe Photoshop – folosit pentru editarea de imagini

Module Drupal

PHP

JavaScript

jQuery[4] – pentru compatibilitatea pe multiple browsere și ușurința de a interacționa cu evenimente sau elemente din pagină

Baze de date

MySQL 5

phpMyAdmin pentru administrarea bazei de date

Server web

Apache 2

Editor cod

Komodo Edit 8

Sistem versionare

Git – folosit pentru a ține un istoric al modificărilor efectuate asupra codului sursă

2. Dezvoltarea aplicației folosind resurse existente

2.1. Introducere în Drupal

Înainte de a dezvolta efectiv aplicația trebuie să știm ce anume ne pun la dispoziție tehnologiile alese. Evident, o introducere în modul de utilizare a acestora ne ușurează, pe cât posibil, parcurgerea acestei lucrări.

2.1.1. Sistemul de hook-uri

Sistemul de hook-uri[5] permite integrarea modulelor cu nucleul Drupal sau cu alte module. Prin intermediul lor definim noi pagini (hook_menu), adăugăm blocuri de conținut (hook_block_*), definim noi tabele în baza de date (hook_schema), etc. Un hook nu este altceva decât o funcție în PHP care respectă un anumit standard în privința numelui și a listei de argumente ce o primește. Pentru a implementa un hook vom înlocui cuvântul “hook” din numele funcției cu numele modulului nostru. De exemplu, implementarea “hook_block_info” în modulul “test” va fi “test_block_info”.

Modulele pot oricând să creeze noi hook-uri folosind una din funcțiile: module_invoke, module_invoke_all sau drupal_alter.

2.1.2. Utilizatori, roluri și permisiuni

Accesul într-un site bazat pe Drupal se face pe baza rolului utilizatorului[6]. În mod implicit există trei roluri, dar adițional se pot crea si altele:

anonymous – utilizatorul neautentificat (identificatorul unic este 0)

administrator – utilizatorul ce are drepturi de administrare (identificatorul unic este 1)

authenticated – utilizatorul autentificat (identificatorul unic este mai mare decât 1)

Fiecărui rol i se pot aloca diferite permisiuni pentru o granularizare sporită a drepturilor de acces. Următorul tabel prezintă modul de utilizare al rolurilor și permisiunilor.

Adăugarea de permisiuni noi se face implementând “hook_permission”:

2.1.3. Modalități de traducere

Pentru a traduce un text în Drupal se folosește (în cele mai multe cazuri) funcția “t()”[7] cu diferiți parametri:

textul în limba engleză care se dorește tradus – în Drupal se presupune ca limba implicită este limba engleză

un array de valori care vor fi înlocuite în text (opțional) – acestea ne ajută pentru a avea o traducere cât mai generală

un array ce poate conține limba în care se dorește traducerea (opțional)

Exemplu:

Observăm în exemplul de mai sus că substituentul conține prefixul “@”. Acest prefix indică modul de formatare al textului:

@ – transformă textul HTML în text simplu (<b>Text</b> => &lt;b&gt;Text&lt;/b&gt;)

% – la fel ca și @ doar că va fi pus între etichete <em>

! – inserează textul așa cum este (folosit pentru a insera HTML)

Traducerile acestor texte se poate face apoi din interfața de traducere, cu condiția ca substituenții să nu fie traduși:

This is my text. => Acesta este textul meu.

This text was written by @name. => Acest text a fost scris de @name.

În cazul în care textul diferă din cauza unei “cantități” se va folosi funcția “format_plural()” pentru traducere.

Exemplu:

În exemplul de mai sus se va folosi prima variantă dacă valoarea $count este 1, altfel se va folosi a doua variantă. Substituentul care conține catitatea va fi @count, alți substituenți pot fi trimiși ca parametru la fel ca în cazul funcției “t()”.

2.1.4. Sistemul de formulare

Formularele sunt folosite pentru a trimite date de către un client (utilizator) la un server web. În Drupal sistemul ne permite crearea, modificarea și interceptarea formularelor în vederea validării sau procesării[8]. Pentru a crea un formular avem nevoie de o funcție oarecare ce trebuie să returneze un array cu elementele formularului. Această funcție trebuie “trecută” prin funcția drupal_get_form().

Rezultatul final pentru codul de mai sus poate fi observat în imaginea de mai jos (fig. 2.1.1).

fig. 2.1.1 – Exemplu de formular creat în Drupal

2.1.5. Adăugarea de pagini

Pentru a adăuga noi pagini în Drupal se va implementa “hook_menu”[9]. Cele mai importante elemente care definesc o pagină, pe lângă calea către ea, sunt:

title – titlul paginii (acesta nu trebuie trecut prin funcția t())

page callback – funcția ce va fi apelată pentru a procesa conținutul paginii

page arguments – un array de argumente ce vor fi trimiși la funcția definită în page callback

acces arguments – un array ce conține permisiunile necesare pentru accesarea paginii

type – tipul paginii

MENU_NORMAL_ITEM – pagina va apărea în meniul principal

MENU_CALLBACK – pagina nu va apărea în niciun meniu

MENU_SUGGESTED_ITEM – meniu sugerat, care poate fi activat de către administrator

MENU_LOCAL_ACTION – meniul ce definește acțiunile unor elemente

MENU_LOCAL_TASK – meniu sub formă de tab-uri

MENU_DEFAULT_LOCAL_TASK – tab-ul implicit

menu_name – numele meniului (implicit acesta este Navigation)

Exemplu pentru definirea paginii path/to/page/*:

La accesarea paginii path/to/page/hello se va afișa o pagină cu titlul “Test page title” și conșinutul “Test page argument: hello”.

2.1.6. Interacțiuni cu baza de date

Drupal conține un set de funcții și clase specializate în lucrul cu bazele de date, eliminând pe cât posibil folosirea directă a interogărilor SQL[10]. Acesta este un lucru folositor deoarece:

permite folosirea a multiple dialecte SQL sau sisteme de gestiune a bazelor de date într-un singur mod

permite efectuarea de tranzacții într-un mod simplu

previne vulnerabilitățile în codul SQL (cum ar fi SQL-Injection)

oferă un mod simplu de a scrie și modifica interogările

Exemple de interogări SQL:

2.1.7. Personalizarea site-ului

Conceptul de teme[11] regăsit în Drupal ne oferă nenumărate opțiuni în a alege aspectul dorit al site-ului. Fiecare temă pune le dispoziție un set de regiuni (fig. 2.1.1) în care se pot plasa blocuri de conținut, prin urmare putem oricând să schimbăm poziționarea acestora. Crearea unei teme este asemănătoare cu modalitatea prin care se creează modulele, dar totuși, în cazul temelor putem să începem de la una există, mai exact, putem extinde temele și adăuga noi regiuni sau stiluri CSS. Tema folosită pentru administrarea site-ului este de obicei diferită față de tema care va fi afișată utilizatorilor.

fig. 2.1.1 – Regiunile temei Bootstrap

2.2. Alegerea modulelor

Comunitatea Drupal oferă numeroase module open-source care tratează probleme generale. Acest fapt ne permite concentrarea doar asupra problemelor specifice proiectului, deoarece restul au deja o soluție. Enumerăm în continuare modulele folosite în realizarea acestei aplicații:

module utile dezvoltatorilor / administratorilor

admin_menu – creează un meniu mai dinamic și mai ușor de folosit

module_filter – permite căutarea rapidă a modulelor disponibile în sistem

libraries – facilitează integrarea bibliotecilor externe cu Drupal

devel – instrumente pentru depanarea codului

features – oferă opțiuni de migrare a conținutului existent

module utilizate pentru traducerea textelor

i18n – permite definirea modurilor de alegere a limbii utilizate în site

l10n_client – oferă opțiunea de a traduce textul de pe pagina curentă, în acest mod traducerea nu este ambiguă deoarece putem vedea contextul frazei/propoziției în pagină

module pentru partea estetică a site-ului

bdtpicker – integrează un calendar pentru selectarea datei / orei într-un anumit câmp

fontawesome – adaugă un set de pictograme bazate pe fonturi

jquery_update – permite alegerea versiunii pentru renumita bibliotecă JavaScript jQuery (Drupal conține în mod implicit o versiune veche de jQuery)

2.3. Alegerea unui design

Pentru interfața acestui site am ales tema Bootstrap resposivă bazata pe sistemul de grid cu același nume. Un design responsiv permite vizualizarea site-ului de pe diferită dispozitive într-un mod optim în funcție de dimensiunea ecranului, deoarece elementele se rearanjează pentru a economisi spațiu. Astfel, se permite vizualizarea site-ului și de pe tablete sau telefoane inteligente, deci doctorul nu trebuie să aibă la dispoziție un calculator sau un laptop pentru a interacționa cu site-ul. Pe lângă sistemul de grid, Bootstrap ne mai pune la dispoziție: elemente de tipografie, controale pentru formulare, dialoguri modale, controale pentru navigarea pe site, etc., pentru fiecare dintre acestea putem adapta paleta de culori după bunul plac.

Deoarece site-ul este responsiv, imaginile trebuie și ele redimensionate atunci când sunt afișate pe un dispozitiv cu ecran mic, iar o redimensionare forțată a imaginilor le poate distorsiona deoarece ele sunt de tip raster. Soluția acestei probleme este una simplă: folosirea unui font (acesta este de tip vectorial) care în loc de litere și cifre conține pictograme, astfel putem schimba cu ușurință dimensiunile imaginilor fără a diminua calitatea lor, în plus putem schimba culoarea lor la fel cum schimbăm culoarea unui text folosind CSS. Singurul dezavantaj ar fi că aceste imagini / pictograme sunt monocolore, dar luând în considerare tendințele actuale în designul web acesta este un lucru bun. Fontawesome[12] este o bibliotecă open-source care ne oferă integrarea cu astfel de fonturi.

3. Dezvoltarea unui modul pentru gestionarea spitalului

3.1. Structura bazei de date

Dezvoltarea modulului pentru gestionarea spitalului nu poate începe fără a schița structura tabelelor din baza de date. Astfel, sunt necesare cinci noi tabele având structura prezentată în fig. 3.1.1 (tabelul users există deja în distribuția standard Drupal):

section – conține detalii despre secții

salon – conține detalii despre saloane și este într-o relație one-to-many cu tabelul section (salon.sid → section.sid)

patient – conține informații despre pacienți și este într-o relație one-to-many cu tabelul salon (patient.sad → salon.sad)

exam_patient – conține înregistrări utile foii de observație și are o relație one-to-many cu tabelul patient (exam_patient.pid → patient.pid)

diganostic – conține informații despre diagnosticele pacienților, având o relație one-to-many cu tabelul patient (diagnostic.pid → patient.pid)

fig. 3.1.1 – Structura tabelelor

3.2. Structura modulului

Modulul nostru va atinge următoarele obiective:

administrarea secțiilor

administrarea saloanelor pentru fiecare secție

distribuirea pacienților în saloane (internare, externare)

gestionarea foii de observație de către doctor (tratament, evoluție, dignostic)

Toate aceste aspecte pot fi create într-un singur modul[13] Drupal, în cazul nostru acesta vi fi numit “hospital”. De obicei modulele se pun în directorul sites/all/modules/nume_modul (calea este relativă la instalația de Drupal), iar numele directorului care conține fișierele modulului trebuie să fie chiar numele modulului, în cazul nostru vom crea directorul sites/all/modules/hospital.

3.2.1. Fișierul hospital.info

Fiecare modul trebuie să aibă în mod obligatoriu un fișier în care prezintă detalii despre el. Următoarele proprietăți se pot folosi în fișierul hospital.info:

name (obligatoriu)

numele modulului care dorești să apară în pagina de administrare a modulelor

fiecare cuvând din nume trebuie să înceapă cu majuscule

trebuie să fie cât mai sugestiv și să fie ușor de citit

description (obligatoriu)

o scurtă descriere de maximum 255 de caractere care explică utilitatea modulului

trebuie să fie pe o singură linie (poate conține legături externe)

core (obligatoriu)

versiunea de Drupal pentru care este acest modul (pentru Drupal 7 aceasta trebuie să fie 7.x)

package (opțional, implicit este Others)

categoria din care face parte modulul

modulele ce sunt în aceeași categorie servesc un scop comun

configure (opțional)

calea către pagina de configurare a modulului

dependencies (opțional)

modulele de care depinde acest modul

files (opțional)

fișiere PHP folosite cu auto-loading (se încarcă automat doar atunci când este nevoie de ele)

stylesheets (opțional)

fișiere CSS care trebuie încărcate pe fiecare pagină

scripts (opțional)

fișiere JavaScript care trebuie încărcate pe fiecare pagină

atât fișierele JavaScript cât și cele CSS pot fi agregate dacă se folosește această metodă

php (opțional)

versiunea minimă de PHP în care modulul funcționează corect

version (descurajat)

versiunea modulului – aceasta se poate obține automat folosind git deploy

Având aceste informații putem crea fișierul hospital.info în interiorul directorului hospital.

3.2.2. Fișierul hospital.install

Fișierele .install sunt folosite pentru a executa hook-uri pentru instalarea sau dezinstalarea modulului. De exemplu, aici putem să creăm tabelele SQL necesare modulului nostru sau să adăugăm noi roluri pentru utilizatori.

Hook-uri utile în fișierul .install:

hook_install() – apelat atunci când modulul se instalează

hook_uninstall() – apelat la dezinstalarea modulului

hook_schema() – apelat la instalarea modulului, trebuie să returneze o schemă ce definește tabelele SQL necesare modulului

hook_enable() – apelat la activarea modulului

hook_disable() – apelat la dezactivarea modulului

hook_update_N() – folosit pentru actualizarea modulelor

Pentru acest modul avem nevoie doar de hook-urile:

hook_install – crearea de noi roluri

hook_uninstall – stergerea rolurilor create în hook_install

hook_schema – definirea tabelelor conform capitolului 3.1. Structura bazei de date

Prezentăm în continuare o versiune trunchiată a fișierului .install:

3.2.2. Fișierul hospital.module

În fișierul .module va fi prezentă toată logica modulului implementată, evident, cu ajutorul hook-urilor. Vom prezenta în acest subcapitol doar o mică parte din codul care definește permisiunile utilizatorilor cu ajutorul “hook_permission” și încă o parte care generează paginile site-ului, adică funcția care implementează “hook_menu”.

Definirea permisiunilor:

Definirea paginilor:

3.3. Implementarea secțiilor

Implementarea secțiilor constă în implementarea unui formular de adăugare și a unui bloc de listare a acestora.

3.3.1. Adăugarea unei secții

Formularul de adăugare a unei secții va conține două câmpuri: numele și descrierea secției. Odată completate, se va crea o nouă înregistrare în tabelul “sections”.

3.3.2. Listarea secțiilor

Listarea secțiilor este implementată într-un bloc de conținut care conține numele secțiilor și un link spre formularul de adăugare pacient.

3.4. Implementarea saloanelor

Pentru gestionarea saloanelor avem nevoie de un bloc de listare și un formular de adăugare salon.

3.4.1. Adăugarea unui salon

Formularul prin care se adaugă salonul conține secția (var fi afișate toate secțiile existente), numărul salonului și numărul de paturi disponibile.

3.4.2. Listarea saloanelor

Odată adăugate, saloanele vor fi listate într-un bloc de conținut. Fiecare salon va fi listat în cadrul secției aferente, va afișa gradul de ocupare și va conține un link către pagina salonului.

3.5. Implementarea pacienților

Pacienții sunt partea centrală care necesită cel mai mult cod în acest proiect. Pentru simplitate, vom încerca să prezentăm doar aspectele importante legate de implementarea lor.

3.5.1. Adăugarea unui pacient

Adăugarea pacienților se face cu ajutorul unui simplu formular. Diferența între acest formular și restul formularelor prezentate este că va conține o cerere AJAX (Asynchronous JavaScript and XML) pentru a afișa paturile disponibile atunci când un salon este selectat.

3.5.2. Afișarea pacienților

Afișarea pacienților se face pe saloane. Pe pagina fiecărui salon vom afișa o listă cu paturile ocupate de pacienție. În momentul când facem click pe un pat oarecare, un dialog modal ne va prezenta detaliile pacientului.

3.5.3. Căutarea unui pacient

Căutarea pacienților se reduce la adăugarea unor condiții în interogarea SQL. Sortarea rezultatelor se poate face cu ajutorul metodei orderByHeader oferită de extensia TableSort pentru interogările SQL în Drupal. Funcția de mai jos se poate integra cu un formular.

3.5.4. Foaia de observație

Foaia de observație este un formular ce ne permite să specificăm evoluția stării de sănătate a pacientului precum și tratamentele aplicate la o anumită dată și oră. Pentru a putea specifica data și ora într-un mod cât mai ușor vom integra DateTime picker-ul oferit de modulul bdtpicker.

4. Modul de utilizare al aplicației

4.1. Prima pagină

Prima pagină, ilustrată în fig. 4.1.1, conține ultimii zece pacienți internați în spital. Numele pacientului este de fapt un link către pagina pacientului, medicul responsabil pentru pacientul respectiv, respectiv data internării.

fig. 4.1.1 – Prima pagină

4.2. Adăugarea unei secții

Doar administratorii pot crea secții pe care ulterior utilizatorii le vor putea folosi, utilizatorii nu vor putea vedea acestă opțiune în meniu. Adăugarea se face prin selectarea din meniul Adaugă -> Secție unde va apărea un formular ca și în fig. 4.2.1. Aici se va introduce numele secției și o descriere opțională. După adaugarea secției va apărea un mesaj care confirmă că secția respectivă a fost adaugată.

fig. 4.2.1 – Adăugare secție

4.3. Adăugarea unui salon

Asemenea adăugării unei secții (doar administratorii având drepturi de acces) adăugarea se face prin selectarea din meniul Adaugă -> Salon unde va apărea un formular ca și în fig. 4.3.1. Aici se poate completa numele secției corespunzătoare salonului respectiv, numărul salonului și numărul maxim de paturi în intervalul 1 – 20.

fig. 4.3.1 – Adăugare salon

4.4. Adăugarea unui pacient

Doar operatorii și administratorii pot avea acest drept de adăugare a pacienților și se realizează prin selectarea secției (din blocul Adaugă pacient) în care se dorește internarea pacientului.

Formularul se completează cu datele personale ale pacientului: numele întreg, CNP-ul, sexul, adresa și vârsta. Prin selectarea salonului se vor încărca dinamic numerele paturilor disponibile în salonul respectiv. Se va mai completa și doctorul responsabil.

Toate câmpurile sunt obligatorii, dacă nu se completează unul se va semnala printr-o eroare câmpul care trebuie completat, în caz contrar va apărea un mesaj care confirmă adăugarea cu succes a pacientului.

fig. 4.4.1 – Adăugare pacient

4.5. Listarea paturilor ocupate

În blocul Secții avem toate secțiile și saloanele acestora, dar și numărul de paturi ocupate / numărul total de paturi din salonul respectiv. Prin selectarea salonului dorit vor apărea paturile ocupate cu împreună cu numele pacienților.

fig. 4.5.1 – Listarea paturilor

4.6. Detalii pacient, foaie de observație, diagnostic

Pe pagina de listare a paturilor dintr-un salon dacă se face click pe un pat va apărea o fereastră de dialog modal care conține trei file: datele personale, foaia de observație și diagnosticul pacientului.

Datele personale conține datele care au fost introduse la internarea pacientului și un buton de externare a pacientului. Externarea se poate face doar de către doctor.

Foaia de observație este reprezentată printr-un tabel format din data la care doctorul a făcut constatarea, evoluția bolii și tratamentul prescris de el. Doctorul poate să mai adauge și alte observații prin apăsarea butonului Adaugă care îl va redirecționa pe pagina de adăugare a unei noi observații.

Diagnosticul este un text obligatoriu scris de către doctor la dorința de externare a pacientului, doctorul poate modifica diagnosticul prin apăsarea butonului Modifică care îl va redirecționa pe pagina de modificare a diagnosticului.

fig. 4.6.1 – Detalii pacient

4.7. Adăugarea foii de observație și a diagnosticului

Adăugarea unei foi de observație și a diagnosticului este reprezentată în fig. 4.7.1 și se realizează doar de către doctorul responsabil pentru pacientul respectiv. Formularul foii de observație permite selectarea datei și orei la care s-a făcut observația, evoluția pacientului în timpul spitalizării și tratamentul necesar. Diagnosticul se poate modifica prin înlocuirea textului curent, în cazul în care nu a fost adăugat niciun diagnostic acesta va fi necompletat.

fig. 4.7.1 – Foaia de observație

4.8. Căutare pacient

Căutarea pacienților se face după nume și opțional se poate filtra după starea lor: internați sau externați. Rezultatul va fi reprezentat într-un tabel ce va conține numele pacientului care este un link către pagina pacientului, CNP-ul, patul, doctorul responsabil, salonul respectiv secția în care a fost internat.

Se poate face sortare după coloanele de nume, CNP, pat, doctor sau salon.

fig. 4.8.1 – Căutare pacient

4.9. Pagina pacientului

Fiecare pacient are o pagină care conține toate informațiile acestuia de la spitalizare până în prezent: informațiile de la internare, foaia de observație și diagnosticul acestuia.

fig. 4.9.1 – Pagina pacientului

5. Finalizarea și publicarea produsului

Finalizarea proiectului constă în traducerea textelor și aplicarea ultimelor retușuri asupra codului sau designului. Pentru a traduce paginile din sistem vom folosi traducerea în limba română oferită de către comunitate[14], iar textele din modulul nostru le vom traduce cu ajutorul interfeței de traducere.

Următorul pas ar fi cel pentru setarea unui server web cum ar fi Apache, Nginx sau Microsoft IIS. De menționat este faptul că serverul trebuie să aibă integrare cu PHP versiunea minimă 5.4. Pentru baza de date se recomandă MySQL 5 sau echivalent. Având în vedere că proiectul conține date sensibile (nume pacient, C.N.P., boli, tratamente, etc.) nu este încurajată folosirea unui server web sau de baze de date accesibil public, ci doar în rețeaua internă.

Înglobarea tuturor modulelor necesare, a temelor, a setărilor și a traducerilor se poate face cu ajutorul unui profil de instalare[15]. Crearea unui profil de instalare este asemănătoare cu cea a unui modul:

fișierul .info conține toate dependințele

fișierul .install conține codul necesar pentru instalarea bazei de date a profilului

fișierul .profile conține codul specific profilului, mai exact pașii ce trebuie urmați în vederea instalării

Odată ce profilul a fost creat, mai rămâne doar să-l punem pe serverul nostru, iar la finalizarea instalării vom avea site-ul complet.

Bibliografie

Drupal 7 Module Development – Matt Butcher, Matt Farina, Ken Rickard, Greg Dunlap, Larry Garfield, John Albin Winkins – ISBN 1849511160

Drupal 7 Themes – Ric Shreves – ISBN 1849512760

Bootstrap Theme – https://www.drupal.org/project/bootstrap

[1] http://php.net

[2] https://www.drupal.org/

[3] http://getbootstrap.com/

[4] https://jquery.com/

[5] https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7

[6] https://www.drupal.org/documentation/modules/user

[7] https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/t/7

[8] https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7

[9] https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_menu/7

[10] https://www.drupal.org/developing/api/database

[11] https://www.drupal.org/documentation/theme

[12] http://fontawesome.io/

[13] https://www.drupal.org/developing/modules

[14] https://localize.drupal.org/

[15] https://www.drupal.org/developing/distributions

Similar Posts