Arhitectura Aplicației
Principii Arhitecturale Fundamentale
Un singur nucleu de cod Laravel bine structurat pe module de business, eliminând complexitatea și latențele inutile ale microserviciilor.
Fără consum redundant de API-uri pentru interfața web: Laravel servește paginile Vue 3, oferind navigare instantă fără reîncărcare de pagină.
Monitorizarea live a celor 6 vehicule, actualizarea indicatorilor din dashboard și notificările de escaladare se transmit instant prin WebSockets.
Rapoartele complexe, trimiterile de campanii de e-mail și recalculările de scoruri sunt procesate în fundal de către job-workers Redis.
Tehnologiile din Stack și Rolul Fiecăreia
| Tehnologie & Versiune | Rol în Aplicație | Beneficii Tehnice Cheie |
|---|---|---|
|
●
Laravel 13
PHP 8.4 Engine
|
Backend complet: rutare, ORM (Eloquent), migrări, autentificare, cozi, cron scheduling, politici de acces, evenimente și securitate. | Performanță maximă cu PHP 8.4, ORM robust, securitate integrată nativ (CSRF, SQL Injection, XSS) și ecosistem matur. |
|
●
Inertia.js v2
SPA Bridge
|
Punte de legătură între Laravel și Vue 3: navigare SPA fără router client separat, partajare props, lazy loading și formulare reactive. | Elimină nevoia construirii unui API REST dublu; randare rapidă a componentelor, suport pentru prefetching și deferred props. |
|
●
Vue 3
Composition API + TS
|
Toată interfața cu utilizatorul: dashboard-uri interactive, tabele de date, hărți GPS, grafice de KPIs și componente reutilizabile. | Sistem de tipizare strict cu TypeScript, modularitate ridicată, mentenanță facilă și viteză optimă de randare DOM. |
|
●
PostgreSQL 16
PostGIS + JSONB
|
Baza de date relațională principală: date structurate, date geografice (PostGIS), atribute flexibile (JSONB) și căutare full-text. | Conformitate ACID strictă pentru date de raportare oficială, interogări geografice ultrarapide pentru vehicule și recipiente. |
|
●
Redis 7
Cache & Queues
|
Cache de înaltă performanță, stocare rapidă de sesiuni, cozi de job-uri asincrone, rate limiting și canal Pub/Sub pentru WebSockets. | Timp de răspuns în microsecunde, descărcarea bazei de date relaționale și procesare paralelă fiabilă cu politică de retry. |
|
●
Laravel Reverb
WebSocket Server
|
Server WebSocket nativ Laravel: transmiterea în timp real a pozițiilor GPS ale mașinilor, notificări instant și actualizări KPIs. | Compatibilitate 100% cu ecosistemul Laravel, latență sub-secundă, consum redus de resurse și scalabilitate orizontală prin Redis. |
|
●
LiteSpeed (LSWS)
Web Server & LSAPI
|
Server web de producție: servire rapidă de fișiere statice, protocoale HTTP/2 și HTTP/3 (QUIC), TLS automat și execuție PHP prin LSAPI. | Randament semnificativ superior față de Nginx/Apache la încărcări concurente, integrare perfectă cu infrastructura cPanel existentă. |
- Eloquent ORM & Migrări: Relații de date stricte (Localitate → Recipiente → Colectări) cu istoric versionat.
- Queues (Cozi de Job-uri): Procesare asincronă pentru rapoarte, importuri mobile și campanii de informare.
- Scheduler (Cron): Raport zilnic automat la 23:59, escaladare omisiuni peste 48h, recalculare săptămânală clasamente.
- Politici & Permisiuni: Control granular prin Spatie Permission (izolare totală per localitate / rol).
- Navigare Instantă (SPA): Încărcare o singură dată; tranzițiile între ecrane se fac instantaneu fără refresh.
- Deferred Props & Lazy Load: Datele voluminoase (harta live, istoricul extins) se încarcă asincron după primul frame.
- Prefetch pe Hover: Paginile probabile sunt preîncărcate în fundal când utilizatorul atinge linkurile din listă.
- Design System Tailwind: Interfață modernă, conformă cu brandul ADI, complet optimizată mobil/desktop.
- Extensia PostGIS: Coordonate GPS pentru ~4.912 recipiente și calculul geometric al rutelor direct în baza de date.
- JSONB Semistructurat: Stocarea flexibilă a metadatelor de la scanările NFC de teren și a configurărilor de campanii.
- Full-Text Search (tsvector): Căutare instantă în localități, sesizări, rapoarte oficiale și documente.
- Partiționare Tabele: Tabelul colectărilor este pregătit pentru sute de mii de înregistrări anuale fără pierderi de viteză.
Module Funcționale pe Portaluri
Indicatori cheie (KPIs) în timp real: vehicule active pe traseu, număr colectări confirmate azi, rute în desfășurare, colectări omise raportate pe UAT-uri.
Urmărirea pe hartă prin coordonate GPS trimise de echipaje în timp real pentru cele 6 vehicule, cu starea motorului, viteza de deplasare și rutele urmate.
Inventarul complet al celor ~4.912 recipiente și platforme georeferențiate, cu filtrare pe localitate, tip de fracție (plastic, hârtie, rezidual) și stare de uzură.
Liste filtrate pe confirmate complet (scanare NFC + poză dovadă + coordonate GPS), în curs sau omise, cu alertare automată dacă o colectare întârzie peste 48 de ore.
Registru de administrare a cipurilor NFC montate pe recipiente: mapare ID tag, alocare la pubele, istoric de scanare, operațiuni de înlocuire la deteriorare.
Calculul automat al scorului de conformitate pe bază de reguli ponderate (semafor: Verde / Portocaliu / Roșu), generând o competiție pozitivă între comune.
Generare automată de rapoarte zilnice și lunare pentru autoritățile de mediu (APM/Garda de Mediu), descărcabile în format PDF/Excel și trimise pe e-mail.
Modul avansat bazat pe modele de învățare automată pentru analiza fotografiilor încărcate (grad de umplere, contaminare fracții) și optimizarea rutelor de colectare.
Modul de construire și transmitere a notificărilor țintite pe UAT-uri sau la nivel județean, combinând e-mailuri automate, SMS și alerte în aplicația publică.
Vedere concentrată pe starea celor 6 utilaje, echipajele asignate pe trasee, orele de plecare/sosire și procentul de realizare a sarcinilor zilei curente.
Recepționarea și verificarea pachetelor de date trimise de aplicația mobilă: codul unic al recipientului scanat, fotografia de confirmare și timpul de execuție.
Primirea directă a incidentelor semnalate de primării sau cetățeni (ex: recipiente deteriorate, acces blocat), schimbarea stării și atașarea dovezilor de remediere.
Procedură simplificată pentru tehnicienii de teren de a înlocui un tag defect cu unul nou direct din aplicație, păstrând continuitatea istoricului pubelei.
Starea semaforului de conformitate (Verde/Galben/Roșu), grafice privind frecvența colectărilor, numărul de recipiente golite și colectările restante din comună.
Transmiterea cererilor formale pentru suplimentarea recipientelor, goliri speciale sau igienizarea punctelor de colectare, cu urmărirea termenului de răspuns.
Indicatori de reciclare ai comunității, comparație anonimizată cu media județeană și descărcarea rapoartelor pentru consiliul local.
Administrarea conturilor funcționarilor din primărie (primar, viceprimar, inspector mediu) cu permisiuni ajustabile de vizualizare sau inițiere sesizări.
Sistem de puncte, niveluri și ecusoane (Eco Starter, Colector Activ, Oraș Curat, Quiz Master) care recompensează cunoștințele și reciclarea responsabilă.
Informații clare, căutare pe tipuri de deșeuri (ce se pune și ce NU se pune în fiecare pubelă), tutoriale video și calendar de colectare pe străzi.
Orice cetățean poate raporta o problemă (depozit ilegal, container plin, deșeuri abandonate) direct din telefon, atașând poza și poziția GPS exactă.
Chestionare interactive cu întrebări despre protecția mediului și clasamente în timp real între cetățenii aceleiași comune sau din județ.
Funcționalități în Timp Real
Platforma elimină necesitatea reîncărcării paginilor (F5) pentru recepționarea evenimentelor critice. Folosind serverul WebSocket oficial Laravel Reverb în tandem cu magistrala de mesaje Redis Pub/Sub, toate modificările din teren sunt proiectate în câteva milisecunde în interfața dispeceratului și a primăriilor.
Aplicația mobilă a echipajului transmite periodic coordonatele GPS.
Fiecare confirmare de colectare crește contorul central fără refresh.
Sesizările noi sau escaladările automate apar instant în bara de stare.
Primăriile ascultă doar pe canalul dedicat localității lor.
Securitate & Controlul Accesului
Autentificare Sigură & 2FA
Sesiuni securizate, parole criptate prin algoritmi moderni (Argon2id/Bcrypt) și opțiune integrată de autentificare în doi factori (2FA).
Roluri Spatie & Izolare UAT
Ierarhie bine definită: SuperAdmin, ADI, Operator, Primărie, Cetățean. Un cont de primărie este constrâns strict la UAT-ul său.
API Mobil cu Token Sanctum
Aplicația echipajelor comunică exclusiv prin token-uri Sanctum revocate ușor, având capabilități strict limitate la operațiunile de colectare.
Protecție Nativă la Nivel de Framework
Filtrare automată anti-CSRF, sanitizare XSS în Vue/Inertia, interogări ORM complet parametrizate (anti-SQL Injection) și Rate Limiting Redis.
Jurnal de Audit Imutabil
Fiecare acțiune critică (modificări manuale de scor, ștergeri, descărcări masive de date, trimitere campanii) este înregistrată complet cu autor și IP.
Stocare Privată a Fișierelor
Dovezile foto de colectare și documentele oficiale sunt stocate în discuri private și servite doar prin linkuri securizate cu semnătură temporară (signed URLs).
Performanță & Scalabilitate
| Zona de Optimizare | Strategia Implementată | Efect Direct asupra Utilizatorului |
|---|---|---|
| Memorie Cache (Redis) | Păstrarea în RAM a configurațiilor de sistem, listelor de localități, scorurilor agregate și KPIs de județ cu invalidare automată la update. | Timp de răspuns sub 15ms la afișarea dashboard-ului și navigarea în tabele. |
| Cozi Asincrone (Job Queues) | Delegarea generării PDF-urilor masive, procesării imaginilor și trimiterii campaniilor de e-mail către procese secundare (workers). | Interfața nu se blochează niciodată; salvarea formularelor este instantanee. |
| Partiționare & Indexare SQL | Tabelul masiv de colectări este indexat compozit (pe UAT, dată și fracție) și partiționat lunar pentru a gestiona milioane de rânduri. | Interogările istorice și rapoartele anuale rulează la fel de rapid ca în prima zi. |
| Deferred Props (Inertia) | Componentele grele (hartă cu 5000 de puncte) își descarcă datele asincron, după ce scheletul paginii este deja vizibil. | First Contentful Paint aproape instantaneu, fără senzația de pagină „înghețată”. |
Infrastructură & Implementare (Deploy)
| Componentă Server | Configurație Tehnică de Producție | Mod de Rulare / Supraveghere |
|---|---|---|
| Web Server | LiteSpeed Web Server (LSWS) + PHP 8.4 via LSAPI, suport complet HTTP/2 + HTTP/3 (QUIC), TLS automat Let's Encrypt. | Proces nativ cPanel / Server Dedicat, performanță înaltă la concurență mare. |
| Bază de Date | PostgreSQL 16 cu extensia PostGIS activată, backup automat zilnic și conexiuni persistente. | Instanță optimizată cu setări de memorie ajustate pentru operațiuni GIS. |
| Cache & Cozi | Redis 7 cu persistență AOF activată pentru a preveni pierderea job-urilor aflate în coadă la restart. | Serviciu local securizat, accesibil doar de către procesele interne Laravel. |
| WebSocket Server | Laravel Reverb pornit ca demon de sistem, reverse-proxy securizat prin LiteSpeed (wss://). | Supervizat automat via systemd / supervisor cu restart la crash. |
| Job Workers | 2–4 instanțe de php artisan queue:work --queue=high,default,low pentru procesare asincronă continuă. |
Supervizate continuu cu politică de repornire automată și canal de dead-letter jobs. |
| Scheduler Cron | Comandă sistem * * * * * php /cale/artisan schedule:run >> /dev/null 2>&1. |
Cron standard cPanel ce orchestrează rapoartele nocturne și verificările de escaladare. |
Integrări Externe & Aplicația de Teren
Sursa esențială de date de teren: citire NFC prin cipul telefonului, captură foto cu geolocație automată și funcționare în mod offline cu sincronizare automată la recăpătarea semnalului.
Cipuri robuste, rezistente la intemperii și spălare sub presiune, montate pe fiecare recipient din cele ~4.912 unități pentru garantarea prezenței fizice a utilajului la locație.
Integrare cu OpenStreetMap (OpenLayers/Leaflet) pentru vizualizarea vehiculelor și a platformelor fără costuri de licențiere, cu posibilitate de comutare pe Google Maps API.
Analiză vizuală automată pentru stabilirea procentului de umplere a containerelor și detecția contaminării materialelor reciclabile (ex: deșeu menajer aruncat la plastic/hârtie).
Sinteză — De ce acest Stack Tehnologic?
Matricea Deciziilor Arhitecturale
Alegerea componentelor a fost ghidată de trei principii cardinale: viteza de operare în dispecerat, fiabilitatea raportării oficiale către autorități și costul optim de găzduire pe infrastructura existentă.