docs: contract RAR verificat live + plan unic consolidat
Verificat contractul RAR AUTOPASS pe endpoint-ul de test si compilat sursa de adevar `docs/api-rar-contract.md`. Corectii majore fata de planurile vechi: - JWT TTL = 30h (nu scurt); worker se re-logheaza, retry neplafonat - b64Image optional; tipPrestatie generat de server (nu se trimite) - anulare/corectie prin API inexistente pentru FINALIZATA - needs_data determinist pe R-ODO/I-ODO; reguli validare exacte (VIN/data/nrInm) Rulat plan-eng-review + plan-design-review, apoi consolidat ambele intr-un singur plan executabil `docs/plans/plan.md` (design ca anexa). Outside voice a prins lost-ack double-submit (P1) -> reconciliere inainte de re-send. Re-push din ROAAUTO scos din v1 (durabilitate = SQLite persistent + restart). - mutat fisierele spec oficiale RAR in docs/ - adaugat raspunsul oficial al programatorilor RAR (api-rar-documentatie-oficiala.md) - sterse plan-eng-review.md + plan-design-review.md (consolidate in plan.md) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
# Context proiect — Gateway RAR AutoPass (migrare ROAAUTO din VFP în Web API)
|
||||
|
||||
> Fișier de continuitate între sesiuni. Citește-l înainte de a relua lucrul.
|
||||
> Ultima actualizare: 2026-06-14.
|
||||
> Ultima actualizare: 2026-06-15.
|
||||
>
|
||||
> ⚠️ **SURSA DE ADEVĂR pentru contractul RAR = `docs/api-rar-contract.md`** (verificat live).
|
||||
> Acolo unde planurile (`docs/plans/*`) diferă, contractul are dreptate. Vezi „Corecții față de planuri".
|
||||
|
||||
## Reluare pe alt calculator (portabil)
|
||||
|
||||
@@ -46,18 +49,20 @@ versiunea web. Nu se mai dezvoltă; se portează.
|
||||
| `rar_advanced.prg` | export Excel (oglindă pentru treapta 2) | referință import xlsx/csv |
|
||||
| `mapare_prestatii.DBF` | cod_op_service → codPrestatie | `operations_mapping` (via `tools/import_dbf.py`) |
|
||||
| `prestatii_rar.DBF` | nomenclator {codPrestatie, numePrestatie} | `nomenclator_rar` (via `tools/import_dbf.py`) |
|
||||
| `Documentatie Serviciu AutoPass_Final.txt`, `Document informativ RAR- Autopass.txt` | spec oficial RAR | contract API |
|
||||
| `Documentatie Serviciu AutoPass_Final.txt`, `Document informativ RAR- Autopass.txt` | spec oficial RAR (vechi, are typo-uri) | înlocuit de `docs/api-rar-contract.md` |
|
||||
| `docs/api-rar-documentatie-oficiala.md` | răspuns oficial programatori RAR | sintetizat în `docs/api-rar-contract.md` |
|
||||
| `docs/api-rar-contract.md` | **contract verificat live — sursa de adevăr** | referință pentru `app/` |
|
||||
|
||||
## Planurile (în `docs/plans/`)
|
||||
## Planul (în `docs/plans/`)
|
||||
|
||||
1. **`plan-design-review.md`** — designul produsului/arhitecturii (output `/office-hours`).
|
||||
Problemă ISV, topologie gateway central pass-through credențiale, zero stocare parole,
|
||||
privacy-first, teză SaaS pe trepte.
|
||||
2. **`plan-eng-review.md`** — planul de implementare (review CEO, SELECTIVE EXPANSION peste design).
|
||||
Decizii blocate, constatări din spec, mașina de stări submission, securitate, verificare E2E.
|
||||
**`plan.md`** — **planul unic executabil** (sursă unică). Consolidează designul de produs +
|
||||
implementarea, aliniat la contractul verificat live. Conține: arhitectură, reguli contract,
|
||||
validare, mașina de stări, componente, securitate, failure modes, **Roadmap de execuție (T1-T7 +
|
||||
pașii rămași)**, verificare E2E, NOT in scope, decizii blocate, și anexa de produs/SaaS.
|
||||
|
||||
> Continuă cu **plan-eng-review** și **plan-design-review** — acestea sunt cele două
|
||||
> documente de reluat în următoarea sesiune.
|
||||
> Continuă cu **`docs/plans/plan.md`** → secțiunea „Roadmap de execuție". Pasul blocant următor = **T1**
|
||||
> (un `postPrezentare` real pe test). Fostele `plan-eng-review.md` + `plan-design-review.md` au fost
|
||||
> consolidate în `plan.md` (review-urile eng + design au intervenit pe el).
|
||||
|
||||
## Arhitectura țintă (rezumat)
|
||||
|
||||
@@ -73,18 +78,20 @@ ROAAUTO (VFP, client subțire) ──HTTPS──▶ Gateway FastAPI (central, 1
|
||||
Stack: Python/FastAPI + SQLite (WAL) + httpx. Deploy: LXC Proxmox + Cloudflare Tunnel (start) → VPS (~5€/lună).
|
||||
Open-source pe github.com/romfast, AGPL-3.0 (⚠️ decide CLA din ziua 1 dacă vrei dual-license).
|
||||
|
||||
## ⚠️ Următorul pas BLOCANT — „The Assignment" (spike, ~1h, ÎNAINTE de cod)
|
||||
## „The Assignment" (spike) — REZOLVAT în mare parte (2026-06-15)
|
||||
|
||||
Pe endpoint-ul de **test RAR**, măsoară:
|
||||
1. **Durata de viață a JWT-ului** (`/public/login` → `postPrezentare` la intervale crescătoare până la 401)
|
||||
→ dimensionează fereastra de retry autonom din worker.
|
||||
2. **Dacă `postPrezentare` trece fără `b64Image`** (poză odometru) și fără `odometruInitial`
|
||||
→ decide dacă poza e obligatorie în prod și dacă ROAAUTO trebuie s-o atașeze.
|
||||
3. **Valorile acceptate pentru `tipPrestatie` / `sistemReparat`** (enum nedocumentat).
|
||||
Detalii complete în `docs/api-rar-contract.md`. Rezumat:
|
||||
1. **JWT TTL = 108000s = 30 ORE** (nu „scurt"). → worker-ul singur poate relua peste pene lungi;
|
||||
re-push ROAAUTO devine secundar. Reconsideră arhitectura de robustețe din planuri.
|
||||
2. **`b64Image` (poza) = OPȚIONALĂ** (confirmat oficial). Open question „sursa pozei" închisă.
|
||||
3. **`tipPrestatie` = generat de server** (`GENERIC`), nu se trimite. `sistemReparat` se trimite
|
||||
(poate fi `"null"`); valorile reale rămân de probat.
|
||||
4. **`needs_data` determinist:** `odometruInitial` obligatoriu doar dacă `prestatii` conține
|
||||
`R-ODO` sau `I-ODO`.
|
||||
|
||||
Rezultatul decide robustețea cozii și scopul real al ROAAUTO. Nu porni worker-ul înainte.
|
||||
Rămas: **un singur `postPrezentare` real pe test** (mesaje de eroare exacte + `data.id`). Vezi contract.
|
||||
|
||||
## De făcut după spike (din plan-eng-review, secțiunea Verificare)
|
||||
## De făcut după spike (din `plan.md`, Roadmap de execuție + Verificare)
|
||||
|
||||
1. `tools/import_dbf.py --dry-run` pe `mapare_prestatii.DBF` + `prestatii_rar.DBF` (raport întâi, apoi import).
|
||||
2. Schelet repo: `app/api/v1`, `app/rar_client.py`, `app/worker`, `app/web`, SQLite (WAL), `docker compose up`, `/healthz` verde.
|
||||
@@ -102,9 +109,12 @@ Rezultatul decide robustețea cozii și scopul real al ROAAUTO. Nu porni worker-
|
||||
- Cherry-picks în v1: alertă submission-uri blocate, `/healthz`+`/metrics`, sugestie fuzzy mapare, export audit CSV.
|
||||
- URL-urile RAR: **sursa de adevăr = VFP testat**, NU spec-ul (are typo-uri de copy/paste).
|
||||
|
||||
## Open questions rămase
|
||||
## Open questions rămase (actualizat 2026-06-15)
|
||||
|
||||
1. Sursa pozei odometrului în fluxul ROAAUTO (dacă spike confirmă `b64Image` obligatoriu).
|
||||
2. `tipPrestatie` — valori acceptate (de probat la spike).
|
||||
3. Un singur user RAR per agent economic sau mai mulți (afectează `idUser` / filtrare monitorizare).
|
||||
1. ~~Sursa pozei odometrului~~ — **închis** (poză opțională, vezi contract).
|
||||
2. ~~`tipPrestatie` valori~~ — **închis pentru request** (generat de server). Rămâne: ce valori
|
||||
reale acceptă `sistemReparat` (în afară de `"null"`).
|
||||
3. Un singur user RAR per agent economic sau mai mulți (afectează `idUser`/`idAgent` / filtrare monitorizare).
|
||||
4. Monetizare/direcție SaaS — de reluat după ce prima prezentare reală merge la primul client.
|
||||
5. Anulare/corecție: **nu există flux API** (records `FINALIZATA`); corecția = email suport RAR. De
|
||||
reflectat în UX dashboard (nu promite anulare).
|
||||
|
||||
Reference in New Issue
Block a user