Pagina repo-ului arăta README-ul generic roa2web și nu explica ce e diferit / ce se urmărea. README-ul nou pune scopul pe prima pagină: prototip de probă „web (Python/Vue) conduce business logic Oracle prin PL/SQL", driver-ul de risc-talent VFP, cele 6 ipoteze, scope wall, relația cu roa2web, stare WIP. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
93 lines
4.8 KiB
Markdown
93 lines
4.8 KiB
Markdown
# roa2web-service-auto
|
|
|
|
> **Prototip de învățare + hedge de risc de talent.** NU un produs, NU un MVP, NU un
|
|
> angajament de livrare către clienți.
|
|
|
|
Acest repo explorează o singură întrebare strategică:
|
|
|
|
**Poate stack-ul web (Python / FastAPI async / Vue 3 / PrimeVue) să conducă logica de
|
|
business Oracle end-to-end prin proceduri PL/SQL — păstrând PL/SQL ca strat durabil?**
|
|
|
|
Domeniul ales pentru probă: **gestiune comenzi service auto** (atelier reparații auto) —
|
|
cel mai sigur teren de testare, pe o schemă Oracle dedicată de test (`MARIUSM_AUTO`), fără
|
|
nicio atingere a producției.
|
|
|
|
## De ce există (driver-ul strategic)
|
|
|
|
Visual FoxPro (VFP) e o limbă moartă. ERP-ul care alimentează 4 clienți de lungă durată e
|
|
scris în VFP + Oracle, iar **nu se mai pot angaja programatori dispuși să învețe VFP** →
|
|
risc de talent care se acumulează an de an.
|
|
|
|
Migrarea la Postgres nu e 1:1 (25 de ani de PL/SQL, sinonime cross-schema, arhitectură
|
|
tenant-per-schemă). Deci calea realistă de hedge este:
|
|
|
|
> **Rămâi pe Oracle, mută stratul de UI + business logic pe Python/Vue, păstrează PL/SQL
|
|
> ca strat durabil.**
|
|
|
|
Service auto e locul cu cel mai mic risc unde se poate proba dacă această cale funcționează.
|
|
Hedge-ul rezolvă jumătatea de stack unde **există** forță de muncă (Python+Vue+integrare),
|
|
NU problema angajării de specialiști PL/SQL.
|
|
|
|
## Ce probează concret (învățarea reală)
|
|
|
|
Prototipul confirmă sau infirmă 6 ipoteze. Dacă oricare eșuează cu un răspuns **clar**,
|
|
prototipul s-a încheiat cu succes — learning obținut, decizie clară, zero cod irosit.
|
|
|
|
| # | Ipoteză | Status / referință |
|
|
|---|---------|--------------------|
|
|
| 1 | `python-oracledb` async apelează curat PL/SQL cu params IN+OUT | `poc/`, `week1-notes.md` |
|
|
| 2 | `session_callback` pentru `CURRENT_SCHEMA` nu leak-uiește între requests concurente | `week5-session-callback.md` |
|
|
| 3 | Grants „EXECUTE pe SP, zero acces direct la tabele" țin în practică | `grants-audit.md`, `week3-auth-audit.md` |
|
|
| 4 | `RAISE_APPLICATION_ERROR` cu diacritice ajunge în Vue ca eroare user-friendly (encoding corect) | mapare ORA→HTTP în `backend/modules/service_auto/` |
|
|
| 5 | DX (FastAPI hot-reload + Vite + SSH tunnel Oracle) e acceptabil pt side-work 2-4h/săpt | `week1-notes.md` |
|
|
| 6 | Auth-ul multi-server existent suportă un server nou **fără modificări la shared code** | `week3-auth-audit.md` |
|
|
|
|
**Livrabilul real NU e ecranul de comandă** — e un **template reutilizabil pentru module
|
|
Oracle** (`docs/service-auto/template-modul-oracle.md`) + un **decision log**
|
|
(`docs/service-auto/decision-log.md`). Dacă dovezile sunt pozitive, același pattern se
|
|
aplică modulului următor.
|
|
|
|
## Ce e în scope vs NU
|
|
|
|
**În scope** (prototip): 1 ecran (`ComandaNoua.vue`) → 1 SP de scriere → insert într-un
|
|
tabel dedicat de comenzi pe `MARIUSM_AUTO` → return ID + număr → Toast.
|
|
|
|
**NU în scope** (zid de scop explicit): cei 4 clienți existenți (rămân pe VFP, zero
|
|
atingere), migrare scheme, eFactura/ANAF, insert în ACT (registrul jurnal — doar la
|
|
facturare), facturare, mobile/responsive, e2e Playwright, multi-tenant complet. Detalii în
|
|
`docs/service-auto/claude-main-design-20260411-rethink.md` (secțiunea „Scope wall").
|
|
|
|
## Relația cu roa2web
|
|
|
|
Acest repo e un **fork complet** din [`romfast/roa2web`](https://gitea.romfast.ro/romfast/roa2web)
|
|
(strămoș comun: commit `b0f4800`). Conține tot codul comun roa2web (auth/JWT, pool Oracle
|
|
multi-tenant, shell-ul Vue SPA, design tokens, `AsyncAutoComplete`) PLUS modulul service-auto,
|
|
deci **rulează standalone**. Fix-urile se pot face `cherry-pick` în ambele sensuri.
|
|
|
|
Detalii de proveniență: [`PROVENANCE.md`](PROVENANCE.md).
|
|
|
|
## Cod specific service-auto
|
|
|
|
| Zonă | Cale |
|
|
|------|------|
|
|
| Backend | `backend/modules/service_auto/` (router / service / schemas / tests) |
|
|
| Frontend | `src/modules/service-auto/` + `src/shared/components/AsyncAutoComplete.vue` |
|
|
| Oracle (pack-uri, DDL, migrări) | `docs/service-auto/` (`pack_auto.pck`, `pack_sesiune.pck`, `migrations/`) |
|
|
| POC-uri | `poc/` |
|
|
| Design, decizii, learnings | `docs/service-auto/` |
|
|
|
|
## ⚠️ Stare curentă
|
|
|
|
**WIP.** Ultimul commit de dezvoltare moștenit era „modificari in curs nu stiu care este
|
|
faza" (2026-06-05) — proiectul **nu era la un checkpoint curat** când a fost desprins din
|
|
roa2web (2026-06-13). Înainte de orice reluare: citește `docs/service-auto/decision-log.md`
|
|
și notele săptămânale (`week*-notes.md`) ca să reconstruiești faza.
|
|
|
|
Teste auto-raportate la desprindere: 62 passed / 3 skipped (dependente de Oracle live).
|
|
|
|
## Setup
|
|
|
|
Bază de cod identică cu roa2web — vezi instrucțiunile de pornire din scripturile
|
|
`start.sh` / `start-backend.sh` / `start-frontend.sh` și `docs/`. Necesită acces la
|
|
serverul Oracle de test (`MARIUSM_AUTO`) prin user-ul tehnic `ROA_WEB`.
|