Files
roa2web-service-auto/docs/service-auto/pack-serii-verification.md
2026-06-05 15:00:42 +00:00

150 lines
5.2 KiB
Markdown

# 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 (`<V_ID_UTIL>` — 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).