ITP booking for drivers, a platform for the stations Programări ITP pentru șoferi, platformă pentru stații
ArvITP gathers every RAR-authorized inspection station in the covered counties into one place and connects the two sides that each needed it. The driver finds a station that fits their vehicle, sees live slots and books online — then keeps every legal deadline in a digital garage. The station gets a free tool to run its day: bookings, the inspection report, team, invoices, reports. Built end to end by Arverion — domain and law, design, web app, API, mobile apps, infrastructure.
ArvITP adună într-un singur loc toate stațiile ITP autorizate RAR din județele acoperite și leagă cele două părți care aveau nevoie de asta. Șoferul găsește o stație potrivită mașinii lui, vede orele libere și rezervă online — apoi își ține toate termenele legale într-un garaj digital. Stația primește gratuit un program cu care își conduce ziua: programări, raportul de inspecție, echipă, facturi, rapoarte. Construit cap-coadă de Arverion — domeniul și legislația, designul, aplicația web, API-ul, aplicațiile mobile, infrastructura.
Calls, uncertain waits, and public data nobody can useTelefoane, așteptări incerte și date publice pe care nu le poți folosi
For the driver, ITP is a rare chore — once every two years on a normal car, just long enough to forget. When the deadline nears, it's calls to several stations, "try tomorrow", and sometimes a wasted trip because the station won't inspect an LPG car or the insurance lapsed on the day.
Pentru șofer, ITP-ul e o corvoadă rară — o dată la doi ani la un autoturism obișnuit, exact cât să-l uiți. Când se apropie termenul, urmează telefoane la mai multe stații, „sunați mâine", și uneori un drum degeaba: stația nu inspectează mașini cu GPL sau RCA-ul nu mai era valabil în ziua inspecției.
The station runs its day on a paper diary and Excel. The phone interrupts the inspection in progress. And although RAR publishes the list of authorized stations, it's built for reading, not searching — no map, no hours, no link to the person's car.
Stația își ține ziua pe agendă de hârtie și în Excel. Telefonul întrerupe inspecția în curs. Iar deși RAR publică lista stațiilor autorizate, e gândită pentru consultare, nu pentru căutare — fără hartă, fără ore, fără legătură cu mașina omului.
One product, two sides, built on the same dataUn produs, două părți, pe aceleași date
We built a 2-in-1 product on one data model. The driver gets a single place to find the right station, compare and book — free, with instant confirmation — and a digital garage with reminders. The station gets a complete management tool: the work day, the inspection report, team, real capacity, invoicing and reports.
Am construit un produs 2-în-1 pe un singur model de date. Șoferul primește un singur loc în care să găsească stația potrivită, să compare și să rezerve — gratuit, cu confirmare imediată — plus un garaj digital cu mementouri. Stația primește un program de gestiune complet: ziua de lucru, raportul de inspecție, echipă, capacitatea reală, facturarea și rapoartele.
Free for the driver. The tool is free for the station too — commission applies only to the bookings the platform brings in. Behind them sit an admin console for the platform operator and a field tool for the sales agents who enroll the stations.
Gratuit pentru șofer. Unealta e gratuită și pentru stație — comisionul se aplică doar rezervărilor aduse de platformă. În spatele lor stau o consolă de administrare pentru operatorul platformei și un instrument de teren pentru agenții care înrolează stațiile.
DriverȘofer
Find, compare and book a station; keep every vehicle, document and deadline in a digital garage.
Găsește, compară și rezervă o stație; ține fiecare mașină, document și termen într-un garaj digital.
StationStație
A full management platform: work day, RNTR-1 inspection report, team, capacity, invoicing and reports.
O platformă de management completă: ziua de lucru, raport RNTR-1, echipă, capacitate, facturare și rapoarte.
Platform operatorOperator platformă
An admin console: enroll stations, contracts generated from data and signed on screen, settlements, audit log.
O consolă de administrare: înrolarea stațiilor, contracte generate din date și semnate pe ecran, decontări, jurnal de audit.
Field agentAgent de teren
A phone-first tool: a work list by city, the visit sheet, GPS position, and the contract generated and signed on the spot.
Un instrument gândit pentru telefon: listă de lucru pe oraș, fișa de vizită, poziția GPS și contractul generat și semnat pe loc.
The right station, live slots, and a price that's the price paidStația potrivită, ore libere reale și un preț care e prețul plătit
Search starts from the person, not the county border: from the phone's location or a locality, the radius grows until there are enough stations. It's a match, not just proximity — the restrictions in the RAR register ("doesn't inspect LPG vehicles" and others) become simple questions, asked only when they'd change the result. Slots are real-time, computed from the station's schedule, lanes and inspectors on duty.
Căutarea pornește de la om, nu de la granița administrativă: din poziția telefonului sau dintr-o localitate, raza crește până se adună suficiente stații. E o potrivire, nu doar proximitate — restricțiile din registrul RAR („nu inspectează vehicule cu GPL" și altele) devin întrebări simple, puse doar când schimbă rezultatul. Orele libere sunt în timp real, calculate din programul stației, bancurile ei și inspectorii de serviciu.
"My Garage" keeps every deadline — and reads the registration for you„Garajul meu" ține fiecare termen — și îți citește talonul
A car is added by photographing its registration document: from one to three photos, AI reads the plate, the VIN, make, model and technical data by the harmonized European field codes — and nothing is saved without the person's confirmation. The garage then tracks inspection, insurance, road-tax vignette, first-aid kit, extinguisher, service and tyres, with automatic reminders before each deadline.
O mașină se adaugă fotografiind talonul: din una până la trei fotografii, AI citește numărul, seria de șasiu (VIN), marca, modelul și datele tehnice după codurile europene armonizate ale câmpurilor — iar nimic nu se salvează fără confirmarea omului. Garajul ține apoi ITP, RCA, rovinietă, trusă, extinctor, revizie și anvelope, cu mementouri automate înainte de fiecare termen.
The public site also carries an ITP guide built from the RNTR-1 order: what gets checked, the grounds for rejection by deficiency group and severity, and how long an inspection is valid for each vehicle type and use — each rule shown next to the article of law it comes from.
Site-ul public are și un ghid ITP construit după ordinul RNTR-1: ce se verifică, motivele de respingere pe grupe de deficiențe și gravitate, și cât e valabil ITP-ul pe fiecare tip de vehicul și regim — fiecare regulă alături de articolul de lege din care vine.
A platform the station actually runs its day onO platformă pe care stația chiar își conduce ziua
The work day is the screen the inspector lives on: who's next, at what time, which car, which person. Online bookings and walk-ins sit in the same grid, and bookings left unclosed from earlier days appear on top so nothing is lost.
Ziua de lucru e ecranul pe care stă inspectorul: cine urmează, la ce oră, ce mașină, ce persoană. Programările online și cele de la ghișeu sunt în aceeași grilă, iar cele rămase neînchise din zilele trecute apar deasupra, ca să nu se piardă nimic.
The inspection report, exactly as RNTR-1 requiresRaportul de inspecție, exact cum cere RNTR-1
- The three results in the orderCele trei rezultate din ordin — good; good with minor deficiencies recorded; rejected. Not a plain "pass/fail", because the third exists and means something else. — bun tehnic; bun tehnic cu deficiențe minore; respins. Nu un simplu „admis/respins", pentru că varianta a treia există și înseamnă altceva.
- 31 deficiency types31 de tipuri de deficiențe — by the groups in the operations plan, with severity (minor, major, dangerous) and search by code or name. — pe grupele din Planul operațiunilor, cu gravitate (minoră, majoră, periculoasă) și căutare după cod sau denumire.
- The next ITP date computes itselfUrmătorul termen ITP se calculează singur — from 23 validity rules, by vehicle type, use and age at the inspection date. The inspector sees it proposed and can correct it; on a pass it lands in the driver's garage. — din 23 de reguli de valabilitate, după tipul vehiculului, regim și vechime la data inspecției. Inspectorul îl vede propus și îl poate corecta; la o trecere ajunge în garajul șoferului.
The rest fits the same logic: real capacity is computed, not declared — from lanes, inspectors on duty and the limit per vehicle type, so a station can't sell slots it can't honour. Blocking a time range shows a preview of how many bookings are affected and how many customers can be told, before confirming. And customers brought in by the platform are protected — their phone numbers are masked and they're excluded from win-back campaigns.
Restul urmează aceeași logică: capacitatea reală se calculează, nu se declară — din bancuri, inspectorii de serviciu și limita pe tip de vehicul, deci o stație nu poate vinde locuri pe care nu le poate onora. Blocarea unui interval arată întâi câte programări sunt afectate și câți clienți pot fi anunțați, înainte de confirmare. Iar clienții aduși de platformă sunt protejați — telefoanele le sunt mascate și sunt excluși din campaniile de reactivare.
An admin console and a field toolO consolă de administrare și un instrument de teren
The platform operator enrolls stations and companies (details pulled from ANAF by tax code), and contracts are generated from data: the commission clause is written from the real parameters and carries a worked numeric example, computed by the very same function that computes the money at booking. The partner signs on screen, and a contract can only be activated once signed.
Operatorul platformei înrolează stații și firme (datele preluate de la ANAF după CUI), iar contractele sunt generate din date: clauza de comision e scrisă din parametrii reali și are alături un exemplu numeric, calculat cu exact aceeași funcție care calculează banii la rezervare. Partenerul semnează pe ecran, iar un contract poate fi activat doar semnat.
There's an activation gate: a station can take bookings only when it has a contract, active RAR authorization, a schedule, prices, lanes, a map position and a settlement model — a half-configured station never sells slots it can't honour. And for the sales agents, a separate phone-first field tool: a work list by city, the visit sheet, the station's GPS position captured on the spot, the company linked by tax code, and the contract generated, sent, signed and activated right there. The agent never has access to other stations' real data, and a built-in demo station (with invented customers) is kept out of settlements, reports and the public AI feed.
Există o poartă de activare: o stație poate primi rezervări doar când are contract, autorizație RAR activă, program, prețuri, bancuri, poziție pe hartă și model de decontare — o stație configurată pe jumătate nu vinde locuri pe care nu le poate onora. Iar pentru agenți, un instrument de teren gândit pentru telefon: listă de lucru pe oraș, fișa de vizită, poziția GPS a stației luată pe loc, firma legată după CUI, și contractul generat, trimis, semnat și activat pe loc. Agentul nu are acces la datele reale ale altor stații, iar o stație demo (cu clienți inventați) e exclusă din decontări, rapoarte și fluxul public pentru asistenți AI.
Interesting problems, solved properlyProbleme interesante, rezolvate ca la carte
Competing companies share one database, money has to be correct to the ban, and the law changes by vehicle type. A few of the pieces we're proud of:
Firme concurente lucrează în aceeași bază de date, banii trebuie să fie corecți la ban, iar legea se schimbă în funcție de tipul vehiculului. Câteva dintre piesele cu care ne mândrim:
Data isolation enforced by the databaseIzolarea datelor, garantată de baza de date
No station can see another's bookings or customers. The rule lives in PostgreSQL Row-Level Security, not in a filter the code might forget — and with no context, queries return zero rows: the system fails closed.
Nicio stație nu vede programările sau clienții alteia. Regula stă în PostgreSQL Row-Level Security, nu într-un filtru pe care codul l-ar putea uita — iar fără context, interogările întorc zero rânduri: sistemul eșuează închis.
Commission with VAT, computed once and rightComisionul cu TVA, calculat o dată și corect
Over a quarter of stations aren't VAT-payers, so one percentage would mean two contracts. The base is the price without VAT; everything is computed in bani, as integers, in one tested function — and a DB constraint checks each booking splits exactly three ways.
Peste un sfert dintre stații nu sunt plătitoare de TVA, deci un singur procent ar însemna două contracte. Baza e prețul fără TVA; totul se calculează în bani, ca numere întregi, într-o singură funcție testată — iar o constrângere verifică la fiecare rezervare că suma se împarte exact în trei.
ITP validity, computed from the lawValabilitatea ITP, calculată din lege
The RNTR-1 rules are data, not code: 23 rules, each with its article, ordered most-specific first. The same table feeds the public page, the inspector's report and the garage reminders — one rule, three places.
Regulile RNTR-1 sunt date, nu cod: 23 de reguli, fiecare cu articolul ei, ordonate de la cea mai specifică. Același tabel alimentează pagina publică, raportul inspectorului și mementourile din garaj — o regulă, trei locuri.
AI reads the registration — nothing trusted blindlyAI citește talonul — nimic crezut pe cuvânt
A wrong VIN looks exactly like a good one, so every field goes through the same validation as typed input. The read make is cross-checked against the manufacturer decoded from the VIN by our own offline decoder; what doesn't match is flagged. Photos are shrunk before sending and aren't kept.
Un VIN greșit arată exact ca unul bun, așa că fiecare câmp trece prin aceleași validări ca o valoare tastată. Marca citită se încrucișează cu producătorul decodat din VIN de un decodor propriu, offline; ce nu se potrivește e marcat. Fotografiile sunt micșorate înainte de trimitere și nu sunt păstrate.
Share cards generated per stationCartonașe generate per stație
A 1200×630 image rendered on demand with the station's name, locality and photo, so a shared link previews the station itself — paired with schema.org structured data for search engines.
O imagine de 1200×630 generată la cerere cu numele, localitatea și fotografia stației, ca un link distribuit să arate chiar stația — alături de date structurate schema.org pentru motoarele de căutare.
A role matrix a test keeps honestO matrice de roluri pe care un test o ține onestă
Six roles across the consoles. A test reads both halves from the source — the roles declared on each API route and every call the screens make — and fails if a role could see a call to a route that would refuse it. No button that leads to "access denied".
Șase roluri în console. Un test citește ambele jumătăți din sursă — rolurile declarate pe fiecare rută și fiecare apel făcut din ecrane — și pică dacă un rol ar vedea un apel către o rută care l-ar refuza. Niciun buton care duce la „acces interzis".
And the small things: reminder SMS are sent without diacritics on purpose (a single "ș" would triple the cost by switching character sets); geocoding is checked and coordinates are rejected if they fall in the wrong county; and there's an AI-ready public feed (llms.txt plus a JSON endpoint) for stations that take online bookings.
Și lucrurile mici: SMS-urile de memento se trimit fără diacritice intenționat (un singur „ș" ar tripla costul schimbând setul de caractere); geocodarea e verificată și coordonatele sunt respinse dacă nimeresc în alt județ; și există un flux public pregătit pentru AI (llms.txt plus un endpoint JSON) pentru stațiile care primesc programări online.
A catalog built to book fromUn catalog gândit ca să rezervi din el
Catalog figures are served live from arvitp.ro and can change over time — a snapshot as of October 2026, not fixed metrics. Cifrele din catalog sunt servite live de pe arvitp.ro și se pot schimba în timp — un instantaneu din octombrie 2026, nu metrici fixe.
Native iOS and Android, the same accountiOS și Android native, același cont
ArvITP ships as a web app plus native iOS and Android apps, published in the App Store and Google Play. They carry map search and booking, the garage with camera reading of the registration and trip logs, push notifications for reminders, deep links that open the right screen, a few screens for station staff, and light/dark/auto themes. We say this in words rather than showing store badges, which are third-party marks with their own brand guidelines.
ArvITP este livrat ca web app plus aplicații native iOS și Android, publicate în App Store și Google Play. Au căutare cu hartă și programare, garajul cu citirea talonului din cameră și foile de parcurs, notificări push pentru mementouri, deep links care deschid ecranul potrivit, câteva ecrane pentru personalul stației și temă deschisă/închisă/automată. Spunem asta în cuvinte, nu prin badge-uri de store, care sunt mărci terțe cu propriile ghiduri de brand.
What this case study does and doesn't claimCe afirmă și ce nu afirmă acest studiu de caz
RAR is a state authority, not a partnerRAR e autoritate de stat, nu partener
The product refers to "RAR-authorized stations" and uses authorization data published by the Romanian Auto Register. That's about authorization data only — nothing here implies an official partnership or affiliation with RAR.
Produsul se referă la „stații autorizate RAR" și folosește date de autorizare publicate de Registrul Auto Român. E vorba doar despre date de autorizare — nimic de aici nu sugerează un parteneriat sau o afiliere oficială cu RAR.
Catalog figures are a live snapshotCifrele sunt un instantaneu live
709 stations, 108 localities and the other catalog numbers are what arvitp.ro showed as of October 2026, served live. They change, so treat them as a snapshot, not fixed metrics.
709 stații, 108 localități și celelalte cifre din catalog sunt ce afișa arvitp.ro în octombrie 2026, servite live. Se schimbă, deci sunt un instantaneu, nu metrici fixe.
The console screens use demo dataEcranele de consolă folosesc date demo
The public-site screenshots are from production (read-only, public company data). The station, admin and garage screens are from a local instance with a demo station and invented accounts — plate numbers and phones are made up.
Capturile de pe site-ul public sunt din producție (doar citire, date publice de firmă). Ecranele de stație, admin și garaj sunt dintr-o instanță locală cu o stație demo și conturi fictive — numerele de înmatriculare și telefoanele sunt inventate.
Turn a tedious errand into a tapTransformă o corvoadă într-un singur tap
If your service runs on phone calls and paper schedules, we can turn it into a product — web and native, booking and back office included, built end to end. Dacă serviciul tău merge pe telefoane și planificări pe hârtie, îl putem transforma într-un produs — web și native, cu rezervare și back office incluse, construit cap-coadă.
