diff --git a/docs/plans/plan.md b/docs/plans/plan.md index 74c1913..461eb90 100644 --- a/docs/plans/plan.md +++ b/docs/plans/plan.md @@ -186,14 +186,15 @@ necunoscute în nomenclator. Confirmi, apoi scrie în SQLite. Surse: `mapare_pre Nimic din cod nu e scris încă (`app/`, `tools/` nu există). Ordine recomandată: -- [ ] **T1 (P1, BLOCANT) — verificare contract live.** Un singur `POST /prezentari/postPrezentare` real pe **test** - cu o prezentare minimă validă (status FINALIZATA, sistemReparat `"null"`, fără b64Image/odometruInitial). Capturează: - mesajele de eroare exacte pe constrângeri (VIN cu O/I/Q, dată < 2024-12-01), forma exactă a răspunsului, `data.id`, - acceptarea `sistemReparat:"null"`. **Fă-l ÎNAINTE de a construi suprafața** — poate invalida design-ul validării/erorilor. - Verify: 200 + record vizibil în `getAllPrezentariFinalizate`. +- [x] **T1 (P1, BLOCANT) — verificare contract live.** ✅ 2026-06-15. `postPrezentare` real pe test (record `data.id=68514`). + Capturate: format eroare `data:[{field,message}]` + 3 mesaje exacte (VIN O/I/Q, dată veche, dată viitoare), + forma răspuns success, `idPrezentare==id`, `idAgent` server-side, `sistemReparat:"null"` acceptat, `b64Image`/`odometruInitial` omise OK. + **Descoperire: WAF cere `User-Agent` (altfel 403).** Toate detaliile în `docs/api-rar-contract.md`. - [ ] **T5 (P1) — `tools/import_dbf.py`** dry-run + raport pe `mapare_prestatii.DBF` / `prestatii_rar.DBF`, apoi import în SQLite. - Verify: raport rânduri valide/orfane/coduri necunoscute; import idempotent. -- [ ] **Schelet repo** — `app/api/v1`, `app/rar_client.py`, `app/worker`, `app/web`, SQLite (WAL), `docker compose up`, `/healthz` verde. + Verify: raport rânduri valide/orfane/coduri necunoscute; import idempotent. (Stub creat — neimplementat.) +- [x] **Schelet repo** — ✅ 2026-06-15. `app/api/v1`, `app/rar_client.py` (cu User-Agent), `app/worker`, `app/web`, SQLite (WAL), + `Dockerfile` + `docker compose`, `/healthz` verde. Verificat: login prin client OK, nomenclator 18 coduri, + worker heartbeat → `worker_alive=True`, enqueue + dedup idempotency funcționale. - [ ] **T3 (P1) — validare Pydantic completă** (VIN `^[A-HJ-NPR-Z0-9]{17}$`, nrInm, dată ∈ [2024-12-01,azi] TZ Bucharest, R-ODO/I-ODO→odometruInitial, `odometruInitial<=odometruFinal`, normalize strip/upper). Verify: unit tests per regulă. - [ ] **T4 (P1) — payload builder** cu `status:"FINALIZATA"`, `sistemReparat:"null"`, fără `tipPrestatie`, `odometruFinal` string.