Emailul de reminder spunea duminică la 22:00, iar programarea era luni la 01:00

Un reminder de programare are o singură sarcină: să-i spună clientului când să vină. În septembrie 2026 am descoperit că emailurile PsySign spuneau uneori o oră greșită și, mai rău, uneori o zi greșită.

Ce credeam

Programările sunt salvate corect, cu fusul orar al cabinetului. Ne așteptam ca și textul din email să țină cont de el.

Ce se întâmpla de fapt

Funcțiile care trimit emailurile rulează pe un server care lucrează în UTC. Am verificat, nu am presupus: am pus pe server o probă mică, am citit fusul orar raportat și am șters proba. Răspunsul a fost UTC, cu decalaj zero.

Orice dată formatată fără un fus orar scris explicit ieșea deci în UTC. Psihologii și clienții lor sunt în Europa/București, adică la UTC+3 vara și UTC+2 iarna. Ora era mereu greșită. Ziua și data erau greșite pentru tot ce se întâmplă înainte de 03:00 ora locală.

Am rulat formatorul real al reminderului pe o programare de luni, 21 septembrie, la 01:00. Emailul scria „duminică, 20 septembrie 2026 la 22:00”.

Prima idee, respinsă

Prima idee a fost să punem fusul orar București peste tot. Toate rândurile din baza de date sunt în București, deci ar fi arătat corect, dar ar fi greșit în ziua în care cineva setează alt fus, fără nimic care să ne contrazică.

Am făcut în schimb un singur formatator comun. Fusul orar este un parametru obligatoriu, deci uitarea lui nu mai compilează. Dacă programarea sau cererea de rezervare are propriul fus, se folosește acela. Altfel se folosește fusul implicit al bazei de date, Europa/București, iar un test citește fișierele de migrare ca să confirme că cele două coincid.

Numărătoarea

Am căutat apoi toate locurile care formatau date. O căutare pe linii a dat 5. O analiză care înțelege parantezele a dat 12 locuri reale în 9 fișiere. Un apel care își pune fusul orar pe linia următoare scapă unei căutări pe linii.

Patru runde, și de fiecare dată defectul era în reparația rundei precedente

Cel mai instructiv a fost cel din runda a doua. Trei din patru apeluri pentru confirmarea rezervării trimit o dată simplă, fără oră. O dată simplă este citită ca miezul nopții UTC, deci afișarea ei „în fusul programării” arăta ziua precedentă pentru orice fus la vest de UTC. Reparația introducea exact eroarea pe care voiam s-o scoatem. Acum o dată simplă este tratată ca o dată de calendar.

Un comentariu din cod susținea că o dată fără oră „arată la fel în orice fus”. Am testat pe 418 fusuri orare: există două afișări diferite, iar una cade cu o zi mai devreme. Am corectat comentariul.

Am găsit și un loc care nu era pe lista nimănui. La emailurile de programare creată sau anulată, aplicația trimitea instantul complet, iar ora 01:00 ajungea în email cu data zilei precedente. Mai mult, ora de început venea formatată după fusul browserului, iar data după fusul programării. Un psiholog aflat în străinătate ar fi primit un email care se contrazice singur.

Ce primesc utilizatorii acum

Emailurile de programare arată data, ziua și ora în fusul programării. Suita a trecut sub șapte fusuri orare, între ele Los Angeles, Tokyo și Honolulu.

Ce rămâne neacoperit

Cinci dintre cele 12 locuri nu au test de comportament, pentru că funcțiile pornesc la import și nu pot fi încărcate într-un test. Pentru ele avem doar o verificare a formei codului, care arată că un fus orar este numit, nu că este cel corect.

Despre programările și memento-urile PsySign, vezi pagina principală.

PsySign este construit de BetterQA, companie de testare software din Cluj-Napoca, certificată ISO 27001 și ISO 13485.