Registrul Interdicțiilor — Wiki
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.
Despre proiect
Section titled “Despre proiect”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.
Conținut
Section titled “Conținut”Pentru toată echipa
Section titled “Pentru toată echipa”| Document | Conținut |
|---|---|
interdictii_full.md | Sursa 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.md | Design 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.md | DDL PostgreSQL derivat din JDL — pentru review înainte de regenerare. Include constraints, indici, trigger append-only pentru audit, conversia jsonb și checklist de decizii deschise. |
Pentru developeri
Section titled “Pentru developeri”| Document | Conținut |
|---|---|
../interdictii.jdl | Modelul JHipster JDL (v2) — sursa autoritativă pentru entități, enumerări, relații. Regenerarea cu jhipster jdl produce backend + frontend. |
../../CLAUDE.md | Ghid 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.md | README-ul JHipster generat — comenzi standard mvnw/npmw, docker compose, packaging. |
Quick start
Section titled “Quick start”Toate comenzile rulează din saas_interdictii/app/.
# 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 verifyjava -jar target/*.jar
# Regenerare din JDL (după modificări în interdictii.jdl)jhipster jdl ../interdictii.jdl --forceDetalii suplimentare în CLAUDE.md și
app/README.md.
Arhitectura — pe scurt
Section titled “Arhitectura — pe scurt”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] --> PublicAPIDetalii complete în platform_design.md §1-§6.
Glosar de termeni
Section titled “Glosar de termeni”| Termen | Definiție |
|---|---|
| Interdicție | Înregistrarea de registru — restricția juridică emisă de o autoritate asupra unei entități. |
| Entitate | Subiectul 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. |
| Statut | Una 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}. |
| Act | Document 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 legal | Articol normativ (Cod Penal / Contravențional / Lege specială) — lookup normalizat. |
| Condiție | Eveniment / obligație / decizie de care depinde efectul unei interdicții cu durata = CONDITIONATA. |
| Eveniment interdicție | Intrare în audit log append-only — fiecare tranziție de stare lasă urmă. Repository-ul interzice UPDATE/DELETE (Legea 133 + forensic). |
| IDNP | Identificator național de persoană fizică (13 cifre, Republica Moldova). |
| IDNO | Identificator național al persoanei juridice (13 cifre). |
| MConnect | Platforma guvernamentală de interoperabilitate a RM (schimb de date între registre). |
| MSign | Serviciul guvernamental de semnătură electronică. |
| AppUser vs jhi_user | AppUser = operator de registru (entitate de domeniu cu rol funcțional). jhi_user = utilizator de autentificare JHipster built-in. Sunt entități distincte deliberat. |
Status și roadmap
Section titled “Status și roadmap”| Fază | Descriere | Status |
|---|---|---|
| v0 | JDL inițial (6 entități, Persoana ne-polimorfică), generare JHipster | ✅ Generat |
| v1 | Ajustări minore (statut/stare separate, rename) | ✅ Curent în cod |
| v2 | JDL 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 1 | Workflow aprobare, public API + masking, integrare MSign/MConnect | 📋 Planificat |
| Faza 2 | Extragere gov-registry-commons (librărie reutilizabilă) — pattern B din platform_design.md §7.3 | 📋 Planificat |
| Faza 3 | Al doilea registru pe platformă (validare reuse) | 🔮 Viitor |
| Faza 4 | Multi-tenant SaaS cu schema engine (decizie după Faza 3) | 🔮 Opțional |
Roadmap detaliat în platform_design.md §7.6.
Decizii deschise
Section titled “Decizii deschise”Necesită confirmare înainte de regenerare:
- Unicitate
entitate (categorie, identificator)vs globală pe identificator (IDNP poate apărea legitim ca PF + ADMIN?). -
Conditieră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. -
RolUserminimal (ADMIN/EMITENT) — restul rolurilor (SEF_DIRECTIE / AUDITOR) pe Spring Security authorities? - Confirmare că
Act(nuDocument) este OK —Documentse ciocnește cu Spring Data Elasticsearch.
Lista completă în db_schema.md §8.
Convenții importante
Section titled “Convenții importante”- Bilingv deliberat: domeniu în română (
Interdictie,Entitate,statut,idnpIdno), framework plumbing în engleză. Nu „traduceți” numele entităților — sunt termenii juridici. - 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ătoruljhipster jdl. - Liquibase changelogs sunt append-only. Adaugă changelog nou, nu edita unul commitat.
- i18n în două locuri:
webapp/i18n/{ro,en}/*.json(frontend) +resources/i18n/messages_*.properties(backend). Adaugă în ambele. ./mvnwși./npmw(wrappers JHipster) în loc demvn/npm— versiuni pinned.EntitatenuPersoana: subiectul interdicției este polimorfic — poate fi vehicul, cont bancar, marfă etc. Nu este o „persoană”.
Resurse externe
Section titled “Resurse externe”- JHipster 8.11 docs
- Spring Boot 3 reference
- Angular 19 docs
- MConnect (interop guvernamentală RM) (verificați URL-ul actual)
- MSign (semnătură electronică RM) (verificați URL-ul actual)
- ANAF — registre persoane juridice (Serviciul Fiscal de Stat)
Pentru întrebări despre arhitectură consultați mai întâi
platform_design.md. Pentru întrebări despre cod
consultați CLAUDE.md.