BTSO
Platformă Vue 3 + Laravel pentru pacienți, anamneză, teste optometrice configurabile, scoring, evaluare vizuală, consimțământ documentat și rapoarte PDF, într-un model multi-companie cu roluri și localizare.

Stack principal
Provocarea
Provocarea a fost extinderea unui produs clinic existent în care fiecare evaluare combină date sensibile, întrebări condiționale, metode configurabile, proprietăți dependente de metodă, formule și praguri clinice, ordine personalizată a testelor, documentație contextuală și un raport final coerent, cu separarea datelor între companii.
Soluția
Soluția păstrează domeniul clinic într-un model relațional Laravel și separă accesul API, logica de business și persistența prin controllere, servicii, repositories, resources și policies. Tratamentele atașează întrebările și testele configurate, metodele pot regenera proprietățile în tranzacții, iar valorile introduse sunt transformate în indicatori Z și date de evaluare. SPA-ul Vue orchestrează parcursul clinic prin Vuex și Router, iar raportarea combină graficul Chart.js capturat din frontend cu PDF-ul generat server-side prin mPDF.
Complexitate notabilă
BTSO este o aplicație web B2B pentru organizarea și executarea unui flux de screening și evaluare optometrică. Domeniul leagă pacientul de sesiuni de evaluare (Treatment), întrebări de anamneză și strabism, o baterie ordonată de teste, metode de măsurare și proprietăți măsurabile. Interfața oferă atât un parcurs ghidat pe pași, cât și o secvență rapidă care concentrează anamneza, datele de refracție și testele principale într-o singură suprafață de lucru.
Testele clinice sunt configurate în baza de date și acoperă acuitatea vizuală la distanță, stereopsis, amplitudinea de acomodare, punctul proximal de convergență, foria la distanță/aproape și flexibilitatea acomodativă monoculară. Metodele pot schimba setul de proprietăți atașat unui test; utilizatorul își poate memora metoda și ordinea preferată a testelor, iar o evaluare nouă poate reutiliza date optometrice de bază din sesiunea precedentă.
Evaluarea finală agregă mult mai mult decât răspunsurile brute. Backend-ul calculează valori Z pe baza formulelor configurate, diferența dintre foria la distanță și aproape și, pentru metodele compatibile, raportul AC/A. API-ul construiește un profil al anamnezei cu stări ok/suspicious/skipped, pregătește seriile pentru grafic și adaugă note de sistem pentru metodele unde valorile nu sunt tratate ca evidence-based. Frontend-ul redă rezultatul într-un grafic Chart.js cu zone normative și într-un tabel al valorilor măsurate.
Raportarea este hibridă. Frontend-ul captează vizualizarea graficului și o trimite ca PNG, iar Laravel/mPDF generează raportul final pe server cu datele pacientului, parametrii optometrici pentru ochiul drept și stâng, graficul evaluării, documentație contextuală, valorile de intrare și observațiile clinicianului.
Consimțământul pentru prelucrarea datelor are un flux separat: backend-ul generează un template PDF cu QR legat de UUID-ul pacientului, iar documentul semnat poate fi încărcat ca JPG, PNG sau PDF. Fișierul este normalizat cu Imagick când este necesar, QR-ul este citit și verificat față de pacient, iar statusul și utilizatorul care a procesat documentul sunt persistate.
Backend-ul folosește Laravel 10 / PHP 8.2, controllere REST, Form Requests, Resources, Services, Repositories, Eloquent și Policies. Izolarea resurselor clinice se face pe company_id, modelul principal este Patient → Treatment → TreatmentTest/TreatmentQuestion → Property, iar operațiile de creare a tratamentului și de schimbare a metodei sunt tranzacționale. MySQL păstrează datele operaționale, iar o conexiune MySQL secundară primește periodic un set pseudonimizat.
Frontend-ul este o SPA Vue 3 în JavaScript, construită cu Vite, Vue Router, Vuex, Axios și Tailwind CSS. Autentificarea folosește sesiuni Laravel Sanctum și cookie CSRF, cu 2FA opțional prin email la nivel de companie. UI-ul include registru de pacienți, navigație laterală colapsabilă, ecrane dedicate etapelor clinice, secvență rapidă, documentație PDF embedded, administrarea utilizatorilor, setări și localizare în mai multe limbi.
Operațional, Laravel Scheduler pornește joburi pentru curățarea evaluărilor neterminate, notificarea și ștergerea trial-urilor expirate și sincronizarea setului pseudonimizat. Joburile de sincronizare procesează datele în chunk-uri, însă configurația implicită a repository-ului rămâne queue=sync dacă mediul nu o suprascrie.
Istoricul Git arată clar că aplicația nu a fost construită integral de la zero în repository-ul HthePaul2: commiturile inițiale din 2022 sunt ale unui alt dezvoltator, iar ulterior există merge-uri și migrări din GitLab/FLZSFL. Contribuția HthePaul2 verificabilă în 2024–2025 include actualizări de branding în PDF, corecții în flowchart-ul documentației clinice, localizarea raportului final și a claselor/metodelor/proprietăților, precum și o modificare amplă a TestEvaluationView orientată spre problema de performanță a evaluării finale.
Auditul snapshot-ului evidențiază și datorie tehnică de hardening: rute web legacy pentru rularea și afișarea datelor de anonimizare nu au middleware de autentificare în fișierul analizat, logging-ul poate captura headere, body-uri, query-uri SQL și date de autentificare, iar formulele persistate sunt evaluate prin eval. Repository-urile analizate nu conțin GitHub Actions sau Docker și au doar testele Laravel exemplu, astfel că securizarea acestor zone și introducerea unei suite de teste/CI sunt următorii pași firești.
Rezultate cheie
- Flux Patient → Treatment → anamneză/strabism → teste → evaluare → raport PDF implementat end-to-end
- Șase categorii principale de teste optometrice configurabile, cu metode și proprietăți asociate
- Scoring prin valori Z, diferență forie distanță-aproape și calcul AC/A pentru metode compatibile
- Două moduri de lucru: secvență clinică ghidată și fast test sequence
- Ordinea testelor și metoda preferată pot fi memorate per utilizator
- Evaluările noi pot reutiliza parametri optometrici dintr-o evaluare anterioară
- Raport PDF server-side cu date clinice, grafic, documentație contextuală, valori de intrare și observații
- Flux de consimțământ cu template PDF, QR per pacient, upload și verificarea documentului
- Izolare per companie pentru resursele clinice prin Laravel Policies
- Autentificare Sanctum, resetare parolă și 2FA opțional prin email
- Localizare în germană, engleză, franceză, italiană și spaniolă pentru UI/raportare
- Joburi programate pentru evaluări neterminate, trial-uri și sincronizarea setului pseudonimizat
- Contribuții HthePaul2 verificate în Git pentru flowchart clinic, traduceri/label-uri, branding PDF și pagina de evaluare finală
Proiecte asemănătoare
- CreativeSys AutoMagazin online personalizat cu produse simple și variabile, catalog și filtre dinamice, checkout, plăți EuPlătesc, documente comerciale, administrare completă și un flux separat de ofertare pentru vopsea auto.
- Ghici CineJoc de petrecere multiplayer în browser, cu camere private, cuvinte propuse de participanți, ture sincronizate în timp real, stare filtrată pentru fiecare jucător și reconectare la sesiunea activă.
- Vedete & InițialeAplicație web multiplayer pentru runde TOMAPAN în camere private, cu cod de acces, categorii configurabile, literă comună, timer, scor pentru răspunsuri unice sau duplicate și sincronizare real-time între jucători.
Vrei ceva similar?
Începe cu wizard-ul de estimare — răspunzi la câteva întrebări și primești un range de preț + timeline realist.