Sari la conținut

Registrul Interdicțiilor — Wiki

Acest conținut nu este încă disponibil în limba selectată.

Bun venit. Acesta este punctul de intrare în documentația proiectului Registrul Interdicțiilor (Republica Moldova) — o aplicație SaaS govtech care înregistrează și administrează interdicțiile legale aplicate persoanelor, companiilor, bunurilor, vehiculelor, armelor și activelor financiare.


Registrul centralizează interdicțiile emise de autorități judiciare, administrative, de control și speciale. Acoperă întregul ciclu de viață al unei interdicții (creare → aprobare → suspendare/contestare → ridicare / revocare / executare / expirare) și expune un API public de consultare pentru sisteme externe (bănci, ANAF, organe de control).

Stack tehnic: JHipster 8.11 monolith — Spring Boot 3 + Angular 19, PostgreSQL (prod) / H2 (dev), Elasticsearch, JWT, Liquibase, MapStruct, i18n RO/EN. Package: md.gov.interdictii.


DocumentConținut
interdictii_full.mdSursa de adevăr a domeniului. Inventar complet: cele 9 categorii de entități vizate, cele 10 statuturi, autoritățile emitente, clasificările (jurisdicție/domeniu/durată/intensitate).
platform_design.mdDesign tehnic complet: diagrame de sistem, componente, ER, lifecycle (state machine), activity și sequence flows. Conține și planul pentru extragerea unei platforme generice de registre.
db_schema.mdDDL PostgreSQL derivat din JDL — pentru review înainte de regenerare. Include constraints, indici, trigger append-only pentru audit, conversia jsonb și checklist de decizii deschise.
DocumentConținut
../interdictii.jdlModelul JHipster JDL (v2) — sursa autoritativă pentru entități, enumerări, relații. Regenerarea cu jhipster jdl produce backend + frontend.
../../CLAUDE.mdGhid pentru Claude Code: layering, comenzi de build/test/run, convenții (RO + EN coexistă, JDL e source-of-truth, Liquibase append-only, etc.).
../app/README.mdREADME-ul JHipster generat — comenzi standard mvnw/npmw, docker compose, packaging.

Toate comenzile rulează din saas_interdictii/app/.

Terminal window
# Dev (două terminale)
./mvnw # backend Spring Boot pe :8080
./npmw start # Angular dev server pe :9000 (HMR, proxy → :8080)
# Tot într-un terminal
./npmw run watch
# Teste
./mvnw verify # JUnit backend
./npmw test # Jest frontend
./npmw run e2e # Cypress (necesită backend pornit)
# Lint / format
./npmw run lint
./npmw run lint:fix
# Pornire servicii deps (Postgres, Elasticsearch)
docker compose -f src/main/docker/services.yml up -d
# Build de producție
./mvnw -Pprod clean verify
java -jar target/*.jar
# Regenerare din JDL (după modificări în interdictii.jdl)
jhipster jdl ../interdictii.jdl --force

Detalii suplimentare în CLAUDE.md și app/README.md.


flowchart LR
SPA[Angular 19 SPA] -->|HTTPS + JWT| API[Spring Boot REST]
API --> Svc[Service layer<br/>+ MapStruct DTOs]
Svc --> Repo[Spring Data JPA]
Svc --> SRepo[Spring Data Elasticsearch]
Repo --> PG[(PostgreSQL)]
SRepo --> ES[(Elasticsearch)]
API --> Mail[SMTP]
PublicAPI[Public Consultation API<br/>rate limit + masking] --> Svc
Ext[Sisteme externe<br/>bănci, ANAF, MConnect] --> PublicAPI

Detalii complete în platform_design.md §1-§6.


TermenDefiniție
InterdicțieÎnregistrarea de registru — restricția juridică emisă de o autoritate asupra unei entități.
EntitateSubiectul polimorfic al interdicției: persoană fizică, persoană juridică, administrator, funcționar public, străin, marfă, armă, vehicul sau activ financiar. Înlocuiește vechea entitate Persoana (prea îngustă — o mașină nu e o persoană).
Acțiune interzisăAcțiunea concretă blocată (IMPORT, TRANZACTIONARE, PORT_ARMA, CIRCULATIE, …) cu scope jsonb (limite valorice, geografie, contraparte, ferestre temporale). O interdicție poate bloca mai multe acțiuni.
StatutUna din cele 11 stări ale interdicției: DRAFT, CONDITIONATA, ACTIV, SUSPENDAT, CONTESTATA, PRELUNGITA, RIDICATA, REVOCATA, EXECUTATA, EXPIRAT, ANULAT. Vezi state diagram în §4.
Autoritate emitentăOrganul care emite interdicția — familie ∈ {JUDICIARA, ADMINISTRATIVA, CONTROL, SPECIALA}.
ActDocument justificativ (hotărâre, sentință, decizie, proces-verbal, ordin, dispoziție) atașat unei interdicții cu un rol (EMITERE / RIDICARE / REVOCARE / …). Numele evită coliziunea cu Document din Spring Data Elasticsearch.
Temei legalArticol normativ (Cod Penal / Contravențional / Lege specială) — lookup normalizat.
CondițieEveniment / obligație / decizie de care depinde efectul unei interdicții cu durata = CONDITIONATA.
Eveniment interdicțieIntrare în audit log append-only — fiecare tranziție de stare lasă urmă. Repository-ul interzice UPDATE/DELETE (Legea 133 + forensic).
IDNPIdentificator național de persoană fizică (13 cifre, Republica Moldova).
IDNOIdentificator național al persoanei juridice (13 cifre).
MConnectPlatforma guvernamentală de interoperabilitate a RM (schimb de date între registre).
MSignServiciul guvernamental de semnătură electronică.
AppUser vs jhi_userAppUser = operator de registru (entitate de domeniu cu rol funcțional). jhi_user = utilizator de autentificare JHipster built-in. Sunt entități distincte deliberat.

FazăDescriereStatus
v0JDL inițial (6 entități, Persoana ne-polimorfică), generare JHipster✅ Generat
v1Ajustări minore (statut/stare separate, rename)✅ Curent în cod
v2JDL polimorfic (Entitate cu 9 categorii), ActiuneInterzisa, EvenimentInterdictie, 11 statuturi, Conditie, TemeiLegal, InterdictieAct📝 Design gata — vezi db_schema.md §8 pentru checklist înainte de regenerare
Faza 1Workflow aprobare, public API + masking, integrare MSign/MConnect📋 Planificat
Faza 2Extragere gov-registry-commons (librărie reutilizabilă) — pattern B din platform_design.md §7.3📋 Planificat
Faza 3Al doilea registru pe platformă (validare reuse)🔮 Viitor
Faza 4Multi-tenant SaaS cu schema engine (decizie după Faza 3)🔮 Opțional

Roadmap detaliat în platform_design.md §7.6.


Necesită confirmare înainte de regenerare:

  • Unicitate entitate (categorie, identificator) vs globală pe identificator (IDNP poate apărea legitim ca PF + ADMIN?).
  • Conditie rămâne OneToOne sau devine ManyToMany cu logică AND/OR?
  • Soft delete pentru interdictie (probabil obligatoriu pentru registru juridic).
  • Politica de retenție / partitioning pentru eveniment_interdictie.
  • RolUser minimal (ADMIN/EMITENT) — restul rolurilor (SEF_DIRECTIE / AUDITOR) pe Spring Security authorities?
  • Confirmare că Act (nu Document) este OK — Document se ciocnește cu Spring Data Elasticsearch.

Lista completă în db_schema.md §8.


  1. Bilingv deliberat: domeniu în română (Interdictie, Entitate, statut, idnpIdno), framework plumbing în engleză. Nu „traduceți” numele entităților — sunt termenii juridici.
  2. JDL este source-of-truth pentru forma entităților. Editări manuale în clasele generate (*.java, *.ts, *.html) supraviețuiesc doar până la următorul jhipster jdl.
  3. Liquibase changelogs sunt append-only. Adaugă changelog nou, nu edita unul commitat.
  4. i18n în două locuri: webapp/i18n/{ro,en}/*.json (frontend) + resources/i18n/messages_*.properties (backend). Adaugă în ambele.
  5. ./mvnw și ./npmw (wrappers JHipster) în loc de mvn / npm — versiuni pinned.
  6. Entitate nu Persoana: subiectul interdicției este polimorfic — poate fi vehicul, cont bancar, marfă etc. Nu este o „persoană”.


Pentru întrebări despre arhitectură consultați mai întâi platform_design.md. Pentru întrebări despre cod consultați CLAUDE.md.