diff --git a/app/web/routes.py b/app/web/routes.py index 8d9c469..db0cb6d 100644 --- a/app/web/routes.py +++ b/app/web/routes.py @@ -837,6 +837,32 @@ def dashboard(request: Request, tab: str = "acasa", status: str | None = None, s conn.close() +# Pagini statice publice cu antet/footer comune cu landing-ul. +_PAGINI_STATICE = { + "termeni": "termeni.html", + "confidentialitate": "confidentialitate.html", +} + + +@router.get("/termeni", response_class=HTMLResponse) +@router.get("/confidentialitate", response_class=HTMLResponse) +def pagina_statica(request: Request) -> HTMLResponse: + nume = request.url.path.strip("/") + return templates.TemplateResponse(_PAGINI_STATICE[nume], {"request": request}) + + +@router.get("/documentatie-api", response_class=HTMLResponse) +def pagina_documentatie_api(request: Request) -> HTMLResponse: + """Documentatie API publica (varianta scurta a tab-ului Integrare, fara login).""" + from .integrare_examples import exemplu_json + + return templates.TemplateResponse("documentatie_api.html", { + "request": request, + "base_url": str(request.base_url).rstrip("/"), + "exemplu_json": exemplu_json(), + }) + + @router.get("/_fragments/acasa", response_class=HTMLResponse) def fragment_acasa(request: Request) -> HTMLResponse: """Fragment HTMX pentru tab-ul Acasa.""" diff --git a/app/web/templates/_lp_footer.html b/app/web/templates/_lp_footer.html new file mode 100644 index 0000000..e8f6949 --- /dev/null +++ b/app/web/templates/_lp_footer.html @@ -0,0 +1,8 @@ +{# Footer comun landing + pagini statice publice. #} +
+
ROMFAST
+
+ TermeniConfidențialitate / GDPRDocumentație APIContact +
+
© 2026 ROMFAST
+
diff --git a/app/web/templates/_lp_header.html b/app/web/templates/_lp_header.html new file mode 100644 index 0000000..1bb3014 --- /dev/null +++ b/app/web/templates/_lp_header.html @@ -0,0 +1,27 @@ +{# Antet comun landing + pagini statice. `lp_root` = '' pe landing, '/' pe paginile statice + (ancorele si butoanele de auth duc inapoi pe landing). #} +{% set lp_root = lp_root | default('') %} +
+
+ + ROMFAST +
+ ROA AUTOPASS + Gateway RAR +
+
+
+
+ +
+ + + +
+
+
diff --git a/app/web/templates/_lp_style.html b/app/web/templates/_lp_style.html new file mode 100644 index 0000000..aa7eac3 --- /dev/null +++ b/app/web/templates/_lp_style.html @@ -0,0 +1,51 @@ +{# Stiluri comune landing + pagini statice publice (termeni, confidentialitate, contact, documentatie API). #} + diff --git a/app/web/templates/confidentialitate.html b/app/web/templates/confidentialitate.html new file mode 100644 index 0000000..a6eb157 --- /dev/null +++ b/app/web/templates/confidentialitate.html @@ -0,0 +1,69 @@ +{% extends "landing_static.html" %} +{% block titlu %}Confidențialitate / GDPR{% endblock %} +{% block descriere %}Politica de confidențialitate și protecția datelor (GDPR) pentru ROA AUTOPASS.{% endblock %} +{% block continut %} +

Politica de confidențialitate / GDPR

+

Ultima actualizare: 9 iulie 2026

+ +

1. Cine prelucrează datele

+

Operatorul datelor este ROMFAST, furnizorul serviciului ROA AUTOPASS. + Ne poți contacta oricând la contact@romfast.ro.

+ +

2. Ce date prelucrăm și de ce

+ + + + + + + + + + + + + + + + + + + + + + + + +
DateScopTemei
Date de cont: denumire firmă, CUI, email, parolă (criptată)Crearea și administrarea contului, facturareExecutarea contractului
Date din prezentări: VIN, număr de înmatriculare, kilometraj, data prestației, operațiile efectuateTransmiterea prestațiilor la RAR Auto-Pass în numele tăuObligația legală a service-ului (Legea 142/2023, OMTI 210/2024) + contractul cu tine
Credențialele tale RAR Auto-PassAutentificarea la RAR pentru trimitereExecutarea contractului; stocate criptat
Jurnal tehnic (evenimente de trimitere, erori)Funcționarea serviciului, suport, dovada transmiteriiInteres legitim
+

Nu colectăm date suplimentare față de cele necesare trimiterii la RAR — nici pe conturile gratuite — + și nu folosim datele clienților tăi în scop de marketing.

+ +

3. Cui le transmitem

+

Exclusiv Registrului Auto Român (RAR), prin API-ul oficial Auto-Pass, în scopul declarat. + Nu vindem și nu cedăm datele către alte părți. Datele sunt găzduite pe infrastructura noastră.

+ +

4. Cât le păstrăm

+ + +

5. Cum le protejăm

+ + +

6. Drepturile tale

+

Conform GDPR ai dreptul de acces, rectificare, ștergere, restricționare, portabilitate și opoziție, + precum și dreptul de a depune o plângere la ANSPDCP (dataprotection.ro). + Pentru exercitarea drepturilor scrie-ne la contact@romfast.ro — + răspundem în cel mult 30 de zile.

+ +

7. Cookies

+

Folosim doar cookie-uri strict necesare (sesiunea de autentificare și protecția CSRF). + Nu folosim cookie-uri de tracking sau de marketing.

+{% endblock %} diff --git a/app/web/templates/documentatie_api.html b/app/web/templates/documentatie_api.html new file mode 100644 index 0000000..3bd6d36 --- /dev/null +++ b/app/web/templates/documentatie_api.html @@ -0,0 +1,52 @@ +{% extends "landing_static.html" %} +{% block titlu %}Documentație API{% endblock %} +{% block descriere %}Documentația API ROA AUTOPASS: autentificare, endpoint-uri, exemple de cerere și răspuns.{% endblock %} +{% block continut %} +

Documentație API

+

Conectează softul tău de service direct la ROA AUTOPASS (plan Pro).

+ +

Cum funcționează

+

Softul tău trimite prezentările printr-un singur apel HTTP; noi validăm datele, mapăm operațiile pe coduri RAR, + oprim duplicatele și transmitem la RAR Auto-Pass. Autentificarea se face cu o cheie API + (antetul X-API-Key), generată din contul tău. Credențialele RAR le configurezi o singură dată în cont.

+ +

Endpoint-uri principale

+ + + + + + + + + +
EndpointCe face
POST /v1/prezentariTrimite una sau mai multe prezentări spre declarare
POST /v1/prezentari/valideazaDry-run: validare fără trimitere
GET /v1/prezentari/{id}Starea unei trimiteri
POST /v1/importImport fișier xlsx/csv prin API
GET /v1/nomenclatorNomenclatorul de coduri RAR (public)
+ +

Exemplu: cerere

+
curl -X POST "{{ base_url }}/v1/prezentari" \
+  -H "Content-Type: application/json" \
+  -H "X-API-Key: rfak_..." \
+  -d '{{ exemplu_json["cerere"] }}'
+

Fiecare prestație are fie cod_prestatie (cod RAR din nomenclator), fie + cod_op_service + denumire — codurile tale interne le mapăm noi pe coduri RAR, + iar maparea rămâne salvată pentru trimiterile următoare.

+ +

Exemplu: răspuns

+
{{ exemplu_json["raspuns"] }}
+

Un rezultat per prezentare, în aceeași ordine ca cererea. status poate fi + queued (în coadă spre RAR) sau, dacă ceva blochează trimiterea, + needs_mapping / needs_data / error — cu explicația în motiv.

+ +

Referință completă

+ +

După autentificare găsești în aplicație, la Integrare, exemple gata de copiat pentru + curl, Python, PHP, C#, Node și Visual FoxPro, plus testarea cheii API și a credențialelor RAR.

+ +
+

Nu ai încă un cont? Creează unul gratuit — primești 30 de zile + de Pro, cu acces API inclus. Întrebări de integrare: contact@romfast.ro.

+
+{% endblock %} diff --git a/app/web/templates/landing.html b/app/web/templates/landing.html index 78e5ae0..870ceb8 100644 --- a/app/web/templates/landing.html +++ b/app/web/templates/landing.html @@ -5,83 +5,13 @@ ROA AUTOPASS — declari prestațiile la RAR din câteva click-uri - + {% include "_lp_style.html" %}
- -
-
- ROMFAST -
- ROA AUTOPASS - Gateway RAR -
-
-
- -
- - - -
-
-
+ +{% include "_lp_header.html" %}
@@ -93,7 +23,7 @@
- + Vezi cum funcționează
Conform Legii 142/2023 @@ -304,7 +234,7 @@
Pentru service-uri cu soft propriu

Ai deja un soft de service? Conectează-l automat

Softul tău se poate conecta și direct la API-ul RAR Auto-Pass. Cu ROMFAST primești în plus asistență la maparea automată a operațiilor tale (prin mai multe metode) și salvarea mapărilor pentru trimiterile viitoare — totul printr-un singur apel, cu cheie API per cont.

- + Vezi documentația API
@@ -435,7 +365,7 @@ - +
Ai deja cont? Autentifică-te
@@ -451,14 +381,8 @@
- -
-
ROMFAST
-
- TermeniConfidențialitate / GDPRDocumentație APIContact -
-
© 2026 ROMFAST
-
+ +{% include "_lp_footer.html" %}
+
+{% with lp_root = "/" %}{% include "_lp_header.html" %}{% endwith %} + +
+{% block continut %}{% endblock %} +
+ +{% include "_lp_footer.html" %} +
+ + + diff --git a/app/web/templates/termeni.html b/app/web/templates/termeni.html new file mode 100644 index 0000000..ff3f470 --- /dev/null +++ b/app/web/templates/termeni.html @@ -0,0 +1,53 @@ +{% extends "landing_static.html" %} +{% block titlu %}Termeni și condiții{% endblock %} +{% block descriere %}Termenii și condițiile de utilizare a serviciului ROA AUTOPASS.{% endblock %} +{% block continut %} +

Termeni și condiții

+

Ultima actualizare: 9 iulie 2026

+ +

1. Serviciul

+

ROA AUTOPASS este un serviciu operat de ROMFAST care preia prezentările + (prestațiile) din service-ul tău auto — prin import de fișier sau prin API — și le transmite în numele tău + către sistemul RAR Auto-Pass, conform Legii nr. 142/2023 și OMTI nr. 210/2024.

+

Serviciul nu înlocuiește obligațiile legale ale service-ului: tu rămâi responsabil de corectitudinea + datelor declarate (VIN, kilometraj, data prestației, operațiile efectuate).

+ +

2. Contul

+ + +

3. Planuri și prețuri

+ +

Fiecare cont nou primește 30 de zile de Pro gratuit; la final trece automat pe planul Gratuit, fără plată. + Poți schimba sau anula planul oricând; prețurile pot fi actualizate cu notificare prealabilă.

+ +

4. Ce garantăm și ce nu

+ + +

5. Utilizare acceptabilă

+

Este interzisă folosirea serviciului pentru declararea de date false, pentru conturi ale altor firme fără + acordul acestora sau în orice mod care afectează funcționarea platformei ori a sistemului RAR. + Conturile care încalcă aceste reguli pot fi suspendate.

+ +

6. Datele tale

+

Prelucrarea datelor cu caracter personal este descrisă în + Politica de confidențialitate / GDPR. Pe scurt: reținem doar strictul necesar, + datele sunt criptate, iar trimiterile se șterg automat după 90 de zile.

+ +

7. Contact

+

Pentru orice întrebare legată de acești termeni: contact@romfast.ro + sau pagina de Contact.

+{% endblock %} diff --git a/tests/test_web_responsive.py b/tests/test_web_responsive.py index c90d769..0f2e32f 100644 --- a/tests/test_web_responsive.py +++ b/tests/test_web_responsive.py @@ -791,12 +791,17 @@ def test_login_branded_nu_schelet(client): # ============================================================ def _citeste_landing() -> str: - """Returneaza continutul landing.html (template static; variabilele Jinja2 nu + """Returneaza landing.html + partial-urile comune (antet/footer/stil sunt + include-uri partajate cu paginile statice publice; variabilele Jinja2 nu afecteaza copy-ul de limita/plan/buton verificat mai jos).""" from pathlib import Path - p = Path(__file__).parent.parent / "app" / "web" / "templates" / "landing.html" - assert p.exists(), f"landing.html negasit la {p}" - return p.read_text(encoding="utf-8") + tdir = Path(__file__).parent.parent / "app" / "web" / "templates" + parts = [] + for nume in ("landing.html", "_lp_header.html", "_lp_footer.html", "_lp_style.html"): + p = tdir / nume + assert p.exists(), f"{nume} negasit la {p}" + parts.append(p.read_text(encoding="utf-8")) + return "\n".join(parts) def test_landing_limita_60():