Un psiholog marchează Crăciunul ca zi liberă. Un client deschide pagina lui de programări și vede locuri libere în ziua aceea. Rezervarea trece. Asta ni s-a raportat la începutul lui septembrie 2026 și am reparat-o pe 6 octombrie.
Regula pe care o voiam
Ne așteptam ca o sărbătoare legală marcată de cabinet să nu mai poată fi rezervată. Cabinetul alege din setări ce sărbători sunt zile libere, deci regula nu este „toate zilele libere sunt blocate”, ci „cele alese de cabinet sunt blocate”.
Ce s-a întâmplat
Pagina publică lăsa clienții să rezerve și în zilele marcate. Verificarea lipsea în două locuri: în selectorul de ore libere și la rezervarea propriu-zisă. Un client putea alege o oră într-o zi pe care cabinetul o marcase liberă.
Reparația a venit în trei bucăți:
- selectorul de ore nu mai oferă locuri în zilele de sărbătoare;
- la rezervare, dacă ziua este sărbătoare, serverul refuză cu un mesaj în română;
- dacă programul cabinetului nu poate fi citit, rezervarea nu trece. Preferăm să refuzăm o rezervare decât să acceptăm una într-o zi liberă.
Lista de sărbători există acum în trei exemplare: în aplicație, în funcțiile de pe server și într-un tabel din baza de date. Trei copii ale aceleiași liste ajung să difere, așa că am scris teste care le compară între ele.
Ce a mers prost
La citirea programului de lucru, rezervarea folosea o interogare care dă eroare dacă pentru același cabinet există două rânduri active. Nimic din baza de date nu împiedică asta. Rezultatul ar fi fost că fiecare rezervare la acel cabinet ar fi dat eroare de server. Selectorul de ore citea deja doar primul rând, așa că am aliniat rezervarea cu el.
Apoi a venit descoperirea mai importantă. Când am comparat lista noastră cu textul legii, ea avea 15 zile. Codul muncii, la articolul 139 alineatul (1), numește 17 zile fără lucru. Lipseau 7 ianuarie (Soborul Sfântului Ioan Botezătorul) și 24 ianuarie (Ziua Unirii Principatelor Române). În producție, funcția care spune dacă o zi este sărbătoare nu returna nimic pentru ambele date.
Un test nou are datele din lege scrise de mână, pentru 2026 și 2027, nu derivate din tabel. Înainte de reparație, trei teste picau. Altfel, un test care citește lista pe care o verifică ar fi trecut mereu, cu 15 zile sau cu 17.
Mai era un detaliu tăcut: testul care compara tabelul din baza de date cu lista din cod citea migrarea inițială. L-am schimbat să citească ultima migrare care definește tabelul, ca să nu mai poată fi de acord cu o listă veche.
Cum arată acum pentru client
Cabinetul vede cele 17 zile în opțiunile de sărbători și poate alege ce respectă. Clientul nu mai vede locuri în zilele alese, iar o rezervare forțată pe o astfel de zi primește un refuz clar.
Ce rămâne neverificat
Nu am făcut o rezervare reală într-o zi de sărbătoare în producție, ca să nu creăm programări și plăți de test. Verificarea s-a făcut pe teste și pe funcția din baza de date.
Pagina publică de rezervare este prezentată pe pagina principală.
PsySign este construit de BetterQA, companie de testare software din Cluj-Napoca, certificată ISO 27001 și ISO 13485.