# PACK_SERII_NUMERE — Verificare live + unblock serii tipDoc=20 **Data verificare**: 2026-04-14 **Executat de**: teammate `pack-serii-verifier` (task #4, branch `feat/service-auto`) **Mediu**: Oracle `10.0.20.121:1521/ROA`, schema `MARIUSM_AUTO`, user `ROA_WEB` --- ## 1. AUTHID — DEFINER ✅ **verificat live** ```sql SELECT OBJECT_NAME, PROCEDURE_NAME, AUTHID FROM ALL_PROCEDURES WHERE OWNER = 'MARIUSM_AUTO' AND OBJECT_NAME = 'PACK_SERII_NUMERE'; ``` Rezultat: | OBJECT_NAME | PROCEDURE_NAME | AUTHID | |---|---|---| | `PACK_SERII_NUMERE` | *(null, package-level)* | **`DEFINER`** | **Concluzie**: HANDOFF-ul era corect. Pachetul rulează cu privilegiile owner-ului (`MARIUSM_AUTO`), deci `GRANT EXECUTE` pentru `ROA_WEB` este suficient. Nu sunt necesare granturi suplimentare pe `SERII` / `PLAJE_NUMERE` / `SERII_NUMERE`. Status obiect: `VALID`, created `2025-09-30`, last DDL `2026-04-13 19:11`. --- ## 2. DDL export `DBMS_METADATA.GET_DDL('PACKAGE', …)` → **ORA-31603**: ROA_WEB nu are `SELECT_CATALOG_ROLE`. Fallback la `ALL_SOURCE` a reușit pentru **PACKAGE SPEC** (12 825 caractere) dar nu și pentru **PACKAGE BODY** (0 caractere — ROA_WEB nu are SELECT pe source-ul body-ului). - Spec salvat: [`PACK_SERII_NUMERE.pck`](./PACK_SERII_NUMERE.pck) - Body-ul va trebui exportat manual de DBA (ex: de pe cont `MARIUSM_AUTO`) dacă e nevoie pentru audit complet. ### Tabele referite în spec (nume reale) Contrar denumirilor din HANDOFF (`SER_SERII`/`SER_PLAJE`), tabelele efective sunt: | Referit în spec ca | Rol | |---|---| | `SERII` | Master pentru serii (PREFIX, AN2CARACTERE, ISAUTOFACTURA, ISBENEFICIARI, ISTERTI, ISFURNIZORI) | | `PLAJE_NUMERE` | Plaje numere (ID_TIPDOC, ID_TIPENTITATE, ID_ENTITATE, ID_SERIE, ID_SUCURSALA, PL_INF, PL_SUP, DATAI, DATAS, INACTIV) | | `SERII_NUMERE` | Numere alocate (ID_NUMAR, NUMAR) — destinația lui `aloca_numar` | --- ## 3. TIP_DOC=20 — valid, dar **fără configurare** Testarea indirectă, prin pachet (ROA_WEB nu are SELECT pe tabele, dar poate apela procedurile pachetului via EXECUTE + DEFINER): ``` PACK_SERII_NUMERE.verifica_tipdoc(V_ID_TIPDOC=20, V_REZULTAT OUT) → 0 (OK) ``` → TIP_DOC=20 este **acceptat** de pachet (deși nu apare ca named constant `nTip…` în spec — există o „gaură" între `nTipNrDispPlata := 19` și `nTipNrOrdinPlata := 21`, dar array-urile interne `tabela_tipdoc` / `tabela_numere` au 26 elemente, deci indicele 20 e legal). ``` PACK_SERII_NUMERE.verifica_cursor_serii(V_ID_TIPDOC=20, V_ID_UTIL=1, V_ID_SUCURSALA=0, …) → ORA-20000: Nu exista plaje de serii comenzi auto pentru aceste configurari! at PACK_SERII_NUMERE line 1071 ``` **Aceasta este exact eroarea care blochează happy-path `POST /api/service-auto/comenzi`** (mapată la HTTP 422 „Nu s-au configurat valori…"). Cauza: nu există niciun rând în `SERII` + `PLAJE_NUMERE` pentru TIP_DOC=20 care să matchuiască user-ul 1. --- ## 4. Granturi efective ROA_WEB (live) ```sql SELECT TABLE_NAME, PRIVILEGE FROM USER_TAB_PRIVS WHERE GRANTEE='ROA_WEB' AND OWNER='MARIUSM_AUTO'; ``` | TABLE_NAME | PRIVILEGE | |---|---| | `AUTO_VMASINICLIENTI` | SELECT | | `CALENDAR` | SELECT | | `DEV_NOM_ASIGURATORI` | SELECT | | `DEV_NOM_INSPECTORI` | SELECT | | `DEV_NOM_NORME` | SELECT | | `DEV_ORDL` | SELECT | | `DEV_TIP_DEVIZ` | SELECT | | `NOM_LUCRARI` | SELECT | | `NOM_PARTENERI` | SELECT, INSERT | | `PACK_AUTO` | EXECUTE | | `PACK_SERII_NUMERE` | EXECUTE | | `SP_CREEAZA_COMANDA_PROTOTIP` | EXECUTE | Granturile sunt **aliniate** cu `docs/service-auto/onboarding_roa_web.sql`. `SERII` / `PLAJE_NUMERE` / `SERII_NUMERE` NU sunt în listă — nici nu trebuie să fie, deoarece pachetul e DEFINER. --- ## 5. Unblock plan — 3 pași ### Pasul 1 — DBA (MARIUSM_AUTO sau DBA) rulează migrația Fișierul [`migrations/ff_2026_04_14_01_AUTO.sql`](./migrations/ff_2026_04_14_01_AUTO.sql) conține un template cu placeholders pentru: - nume serie (ex. `DEV01`) - lungime numerică (ex. `6` → numere 1..999999) - user/grup alocat (`` — tipic admin MARIUSM_AUTO; pachetul îl transformă intern în grup via `IdUtil2IdGrupUtil`) - plaja `PL_INF`/`PL_SUP` (ex. 1..999999) - sucursală (`0` pentru toate sucursalele sau ID specific) Migrația folosește **procedurile publice ale pachetului** (`adauga_serie` + `adauga_plaja`) pentru a respecta validările interne — NU face INSERT direct în `SERII` / `PLAJE_NUMERE`. DBA-ul trebuie doar să înlocuiască placeholders și să ruleze. ### Pasul 2 — Verificare de regresie (re-rulare probe) După configurare, DBA sau teammate QA poate re-rula scriptul de probe și să confirme că: ``` PACK_SERII_NUMERE.verifica_cursor_serii(20, 1, 0, …) → rezultat=0 (fără ORA-20000) ``` ### Pasul 3 — Smoke test happy-path - `POST /api/service-auto/comenzi` cu payload valid (masina+tip deviz) pe tenant `mariusm_test`, user `MARIUS M`/pass `123`, firma `MARIUSM AUTO` - Așteptat: HTTP 200 + `pc_nr` generat (prefix + număr + `/` + nr. înmatriculare) --- ## 6. Decizie pe AUTHID-related grants **NU este necesar** niciun grant suplimentar pe `SERII`/`PLAJE_NUMERE`/`SERII_NUMERE`. DEFINER rights sunt suficiente. Dacă pe viitor observăm ORA-01031 la apel pachet, atunci revedem (dar acum happy-path dă 422 nu 500, deci privilege ≠ cauza).