# Ce s-a schimbat față de prototip

## Problemele din analiza prototipului și rezolvarea lor

| Problema din prototip | Rezolvarea |
|---|---|
| Datele se ștergeau zilnic (`s.day === TODAY`) și stăteau doar în navigator | Datele sunt în SQLite pe server, comune tuturor utilizatorilor și dispozitivelor, cu copie de siguranță zilnică |
| Comparația „săptămâna trecută” greșea după schimbarea orei (`Math.floor` pe milisecunde) | Calculul se face pe date calendaristice în UTC, pe server și în navigator. Testat chiar pe 26.10.2026 |
| Text introdus de utilizator inserat direct în pagină (XSS) | Escapare automată pentru tot HTML-ul, CSP strictă, validare pe server |
| Fotografiile și semnăturile umpleau stocarea navigatorului (~5 MB), fără avertisment | Fișierele sunt pe server; erorile de salvare sunt afișate |
| Fotografiile erau micșorate la 480 px | 2048 px, fără metadate GPS, suficient ca dovadă |
| „Încasări luna aceasta” afișa cifre diferite în Panou și în Încasări | O singură definiție, plățile efectiv primite, aceeași cifră peste tot (verificată în teste) |
| Numerele certificatelor de garanție se schimbau la fiecare garanție nouă | Contor pe server; numărul se alocă la predare și rămâne fix |
| Numerele de factură generate în CRM, deși factura se emite în SmartBill | CRM-ul nu mai generează serie; se trece numărul facturii din SmartBill, iar plățile fără număr sunt semnalate |
| Fișa lucrării permitea suprapuneri în boxă (doar avertiza) | Suprapunerile sunt blocate pe server, la programare, la mutare și pentru cursuri |
| Clic pe o zi liberă din calendar programa mereu prima cerere | Se alege cererea dintr-o listă |
| Reamintirile nu se puteau închide; clientul revenit primea în continuare reamintiri | Reamintirile au stări (de trimis, trimisă, rezolvată, anulată) și se închid automat când mașina revine |
| Căutarea din bara de sus nu ignora diacriticele | Căutarea ignoră diacriticele peste tot și găsește numerele de înmatriculare scrise fără spații |
| Adresa atelierului era scrisă direct în mesaje | Se ia din Setări |
| „Costul produselor intră în profit” era promis, dar nu exista | Rapoarte → „Marja pe lucrare, după materiale”, din consumul real scăzut din stoc |
| Consumul din stoc era scris în cod | Rețetele de consum se editează pe fiecare serviciu, în Setări |
| Fonturile se încărcau de la Google | Fonturi locale din kitul de brand (SIL OFL); aplicația merge și fără internet extern |
| Conturul cercului din mini-graficele indicatorilor nu se afișa (atribut `style` duplicat) | Corectat |

## Funcții noi, necesare pentru folosirea reală

- Conturi cu trei roluri (administrator, recepție, tehnician), parole temporare, jurnal de audit
- Instalare ghidată, cu verificarea serverului
- Primirea automată a cererilor din configuratorul de pe site (`intake.php`)
- Formulare reale pentru cereri, clienți, mașini, produse, servicii, echipă, utilizatori, vânzări, cursuri, plăți
- Predare cu ecran dedicat: rest de plată calculat după avansuri, metodă, număr de factură, apoi garanții, reamintire și consum din stoc într-o singură operație
- Anularea predării (doar administratorul, pentru greșeli), cu refacerea stocului
- Prețuri negociate pe o lucrare (doar administratorul), cu urmă în jurnal
- Procese-verbale atât la preluare, cât și la predare, blocate după semnare
- Inventar fizic, intrări în stoc și istoricul mișcărilor pe fiecare produs
- Fișa clientului cu toate mașinile, lucrările, garanțiile și reamintirile; export și anonimizare GDPR
- Jurnalul mesajelor per client: mesajul se deschide gata scris în WhatsApp și se salvează automat
- Lista de așteptare cu condiția clientului, cereri anulate cu motiv și istoricul cererilor
- Cursuri cu cursanți, plata participării și blocarea boxei în calendar
- Rapoarte pe 30, 90 sau 365 de zile
- Copie de siguranță automată (Python) și descărcare manuală din aplicație
