a6c03a091e
Moved from gov-agreg/src/pages/achizitii/* to root (drop prefix). - 22 pages migrated, 127 files total - All internal links: /achizitii/X → /X (176 occurrences fixed) - AchizitiiLayout subnav rewritten: /X paths, top-right link to vreaudigital.ro hub - BaseLayout new (vreau.digital branding, OG tags, site URL) - astro.config.mjs: site https://vreau.digital, server output (was static) - docker-compose: port 5096 (vreaudigital is 5095), container vreau-digital - deploy.sh: paths /opt/vreau-digital, log /var/log/vreau-digital-deploy.log Backend shared with gov-agreg: - PostgreSQL satra (same schemas: seap, firms, anaf, anre, ...) - Photon, Martin tiles - Infisical /vreaudigital path (DATABASE_URL etc. shared) build: PASS (npx astro check 0 errors, npm run build 5s vite + 10s server)
448 lines
14 KiB
Markdown
448 lines
14 KiB
Markdown
# Strategic plan — vreaudigital.ro firms+procurement DB
|
||
**Sintetizat 2026-05-08 din 9 research agents paraleli.**
|
||
|
||
Acest document e plan de implementare pentru extinderea bazei de date de la
|
||
"firmă + financiale + SEAP + ANAF" (curent live) la "cea mai completă bază
|
||
publică pentru analize, investigații, urbanism, transparență, competitivitate".
|
||
|
||
## Stare curentă (recap)
|
||
|
||
| Asset | Coverage |
|
||
|-------|----------|
|
||
| `firms.entities` | 3.97M firme RO (ONRC bulk + ANAF v9) |
|
||
| `firms.financials` | 3.86M records WEB_UU + 250K WEB_BL_BS_SL (5 ani) |
|
||
| `firms.financials_ong` | 250-300K NGO firm-years (în populare) |
|
||
| `firms.financials_banks` | ~100 bank firm-years (în populare) |
|
||
| `firms.reprezentanti_if` | 122,956 reprezentanți întreprinderi familiale |
|
||
| `firms.sucursale_ue` | 235 sucursale RO în 20 state UE |
|
||
| GIS lat/lng | 70.5% (postal+UAT) + Photon overnight la housenumber |
|
||
| `seap.announcements` | 642K contracte SEAP/TED/datagov |
|
||
| Cron timers | daily ANAF, weekly ONRC, nightly MV refresh |
|
||
|
||
## Cele 4 join-uri unice anti-corupție (CEL MAI MARE UNLOCK)
|
||
|
||
Combinația de 4 surse adăugate peste ce avem dă vreaudigital.ro un poziționare
|
||
unică în RO civic-tech — niciun alt proiect (Demoanaf, Banipartide, Expert
|
||
Forum, Funky Citizens) nu le are pe toate 4 împreună:
|
||
|
||
1. **ANI declarații avere/interese × SEAP** — "ce oficial deține firme care
|
||
au câștigat contracte?" — federated PDF crawl per instituție
|
||
2. **AEP donații politice × SEAP** — "ai donat partidului X, ai luat
|
||
contractul Y" — XLS per partid prin finantarepartide.ro
|
||
3. **ANPC sancțiuni consumatori × SEAP** — "furnizor amendat care vinde la
|
||
stat" — WP REST API verified working
|
||
4. **EU funds (SMIS/AFIR/FTS) × SEAP** — "double-dippers" UE + national —
|
||
data.gov.ro CKAN bulk
|
||
|
||
Plus killer feature urbanism: **E-PRTR polluters × SEAP** — "poluatori care
|
||
vând la stat" prin EEA bulk download.
|
||
|
||
---
|
||
|
||
## TIER 1 — Quick wins (1-2 zile total per item)
|
||
|
||
Ordinea = impact × ușurință. Toate au format bulk + license deschisă.
|
||
|
||
### A. INS Tempo per-UAT (gov2-ro/tempo-ins-dump) — IMPACT MAXIM
|
||
- Repo deja construit cu 3,706 Parquet files, FastAPI + DuckDB
|
||
- Pull populație, salariu mediu, șomaj, învățământ per UAT × an
|
||
- **Killer use**: color the map with population/income/education metrics
|
||
- 1 zi — clone + adapt pentru PG ingest
|
||
|
||
### B. Recensământ 2021 per UAT
|
||
- XLSX direct de la recensamantromania.ro (rezultate definitive)
|
||
- Etnie, educație, locuințe, vârstă per UAT
|
||
- Combinat cu A → "spending pe școli vs % populație <18 ani"
|
||
- 1 zi
|
||
|
||
### C. ANI declarații (gov2-ro/declaratii-integritate)
|
||
- Existing scraper, deja popolat
|
||
- Per oficial: shareholdings + administrator positions + salarii
|
||
- **Activates anti-corruption join #1**
|
||
- 1-2 zile pentru integrare
|
||
|
||
### D. ANPC sancțiuni (WP REST API)
|
||
- `https://anpc.ro/wp-json/wp/v2/posts?search=...&per_page=100&page=N`
|
||
- Verified working — JSON paginated
|
||
- Regex extract S.R.L./S.A. names → fuzzy match la firms.entities
|
||
- **Activates join #3**
|
||
- 2 zile
|
||
|
||
### E. AFIR FEGA/FEADR beneficiari (CAP funds per CUI)
|
||
- XLSX per an la `afir.ro/rapoarte/beneficiari-de-fonduri-europene/`
|
||
- 600K+ ferme/agri-firme/an
|
||
- 1 zi
|
||
|
||
### F. EU FTS (Financial Transparency System)
|
||
- 18 annual XLSX, filter `Country=Romania`
|
||
- Horizon, LIFE, Erasmus+, CEF beneficiaries
|
||
- Match by name (no CUI) — fuzzy
|
||
- **Activates join #4**
|
||
- 1 zi
|
||
|
||
### G. CORDIS Horizon EU R&D
|
||
- CSV bulk separat `organization.csv` cu filter country=RO
|
||
- ~2.5K RO orgs, <50MB
|
||
- Signal "real R&D player"
|
||
- 1 zi
|
||
|
||
### H. EEA E-PRTR (poluatori facility-level)
|
||
- MS Access + CSV bulk de la eea.europa.eu
|
||
- ~700 RO facilități cu CUI (NationalID field)
|
||
- Activates **"polluter ↔ public money"** killer story
|
||
- 1 zi
|
||
|
||
### I. EEA Natura 2000 + SEVESO shapefile
|
||
- ~600 RO Natura sites + ~280 SEVESO amplasamente
|
||
- Geo overlay cu firms — "construcții în zone protejate"
|
||
- 1 zi
|
||
|
||
### J. Industrial parks (MDLPA)
|
||
- 100 parks, 1518 operatori, 76K angajați
|
||
- HTML table → CSV → geocode
|
||
- Map vizual instant
|
||
- 0.5 zi
|
||
|
||
### K. ONRC missing CSVs (REPREZENTANTI_IF + SUCURSALE_UE)
|
||
- ✅ DONE 2026-05-08
|
||
|
||
### L. WEB_BL_BS_SL financials
|
||
- ✅ DONE 2026-05-08 (5 ani, ~250K records)
|
||
|
||
### M. ONG + bank financials separate tables
|
||
- ✅ în populare 2026-05-08 (~300K total)
|
||
|
||
### N. Geocoding postal + UAT centroid + Photon
|
||
- ✅ DONE postal/UAT
|
||
- ✅ Photon JAR running, 70%+ housenumber overnight
|
||
|
||
---
|
||
|
||
## TIER 2 — Medium effort (3-7 zile per item)
|
||
|
||
### O. ANI declarații federated crawler (per-instituție)
|
||
- Per-instituție config (URL pattern, PDF list selector)
|
||
- Start: Parlament + 41 Consilii Județene + top 100 primării
|
||
- Camelot/pdfplumber pentru tabele declarații
|
||
- 1-2 săptămâni
|
||
- **Datasetul cel mai valoros pentru transparency** — bridges officials → firms
|
||
|
||
### P. AEP financing parser
|
||
- finantarepartide.ro XLS per partid-an
|
||
- Donori >25K RON itemized
|
||
- 1 săptămână
|
||
- **Activates join #2**
|
||
|
||
### Q. Code4Romania romanian-elections-data
|
||
- Direct git ingest, BEC results per polling station back to 1992
|
||
- 1 zi setup, then incremental
|
||
- "Candidat X câștigat Sector 3 → Mayor X semnat contract Y la 60 zile"
|
||
|
||
### R. data.gov.ro proiecte-contractate (fonduri EU 2014-2024)
|
||
- 114 XLSX per OP × snapshot, 108MB total
|
||
- Dedup by latest snapshot per OP
|
||
- 1 zi
|
||
|
||
### S. CKAN poller generic (data.gov.ro)
|
||
- Walks `package_search?q=*` paginated
|
||
- Daily cron, dedup by (dataset_id, resource_id, mtime)
|
||
- Unblocks ~150 datasets care touch firms
|
||
- 1 zi
|
||
|
||
### T. SITUR — turism (cazare, agenții, ghizi, pârtii)
|
||
- 4 datasets, refresh zilnic, ~30K cazare + 3K agenții
|
||
- 1 zi
|
||
|
||
### U. ANSVSA — registre sanitar-veterinar per județ
|
||
- 42 județe × multiple categorii → CUI per autorizație food sector
|
||
- 1 săptămână (county aggregation)
|
||
|
||
### V. License registries scrape (ANRE, ANCOM, ASF, ANRSC, etc.)
|
||
- Per regulator: tabel paginat HTML
|
||
- ~50K firme cu flag "licență X"
|
||
- 3-5 zile
|
||
|
||
### W. EBRD + EIB + IFC project lists
|
||
- 3 separate CSV/HTML scrapes
|
||
- ~500 RO projects total cu nume + sumă
|
||
- Fuzzy match name → CUI
|
||
- 2 zile
|
||
|
||
### X. EUIPO Trademark API (RO TM holders)
|
||
- REST JSON + sandbox
|
||
- Filter applicant country=RO
|
||
- 1-2 zile
|
||
|
||
### Y. ANOFM vacancies (real-time labor demand)
|
||
- 5-day legal disclosure → ~8K vacancies live
|
||
- Daily snapshot + diff
|
||
- 1 săptămână
|
||
|
||
### Z. SEVESO XLSX consolidat per județ ANPM
|
||
- 42 PDFs/XLSX → consolidat
|
||
- 2 zile
|
||
|
||
### AA. ANRE licențe scrape (centrale regenerabile)
|
||
- Singurul registru centralizat producători energie
|
||
- ~5000 entries
|
||
- 1-2 zile
|
||
|
||
### BB. CNCD discrimination decisions
|
||
- 14K decisions HTML+PDF
|
||
- Sancțiuni angajatori
|
||
- 3 zile
|
||
|
||
### CC. ASF sancțiuni (PDF per decision)
|
||
- ~500/an
|
||
- 2 zile
|
||
|
||
### DD. ANSPDCP GDPR fines
|
||
- WP REST sau scrape
|
||
- 2 zile
|
||
|
||
### EE. INS Tempo dump (gov2-ro existing)
|
||
- (Deja în Tier 1 dar reluat: 1700 indicatori, integrare instantă)
|
||
|
||
### FF. ANP penitenciare (statistici lunare)
|
||
- 34 unități, locații publice, populații
|
||
- 1 zi
|
||
|
||
### GG. UEFISCDI BrainMap + ERRIS
|
||
- 17K cercetători + 1.4K research infrastructures
|
||
- PDF lists per call PCE/PD/TE
|
||
- 1 săptămână (PDF heavy)
|
||
|
||
### HH. GTFS feeds (TPBI + Tranzy.app)
|
||
- VERDE — București + Cluj + Iași + Timișoara + Botoșani
|
||
- Live transit overlay 20s refresh
|
||
- 1 zi
|
||
|
||
### II. ANRSC operatori apă-canal/salubrizare per UAT
|
||
- HTML scrape per județ
|
||
- 3 zile
|
||
|
||
### JJ. CFR + drumuri OSM
|
||
- Filter PBF Romania pentru railway/highway
|
||
- 1 zi
|
||
|
||
### KK. CIMEC muzee + RAN situri arheologice
|
||
- 840 muzee + 25K situri
|
||
- 2 zile
|
||
|
||
### LL. portal.just.ro instanțe locații
|
||
- Lista completă scrape + geocodare
|
||
- 1 zi
|
||
|
||
---
|
||
|
||
## TIER 3 — Heavy effort (1+ săptămâni) sau valoare scăzută
|
||
|
||
### MM. HCL POC (top UATs)
|
||
- Cluj-Napoca + 3 sectoare București + Timișoara + Iași
|
||
- PDF OCR + Tesseract + unstructured layout
|
||
- 80h per pattern
|
||
- Total 4-6 săptămâni pentru POC
|
||
- **Justified pentru "Mayor approves contract for connected firm" thesis**
|
||
|
||
### NN. cdep.ro voting + legislative pipeline
|
||
- Fork `cristian-sima/cdep-live`
|
||
- 4 săptămâni pentru ingest complet
|
||
- "Cine a votat ce" — payoff analitic mare
|
||
|
||
### OO. Curtea de Conturi PDF crawl
|
||
- 14K rapoarte audit IDs sequential
|
||
- OCR + LLM extraction
|
||
- 3-5 zile minimum
|
||
- Defer until use case clarifies
|
||
|
||
### PP. CNSC contestații
|
||
- 16K decizii PDF
|
||
- Heavy parsing
|
||
- 1 săptămână
|
||
|
||
### QQ. SUMAL wood traceability
|
||
- Per-firm flow data NOT bulk public (police-controlled)
|
||
- Defer until MMAP publishes 2025 transparency datasets
|
||
|
||
### RR. portal.just.ro ECRIS per-CUI scrape
|
||
- ~3h batch pentru top 50K firme cu SEAP
|
||
- Dossier metadata only (no decision text)
|
||
- 2 zile coding
|
||
|
||
### SS. ROLII / REJUST per-CUI
|
||
- ❌ ROLII mort 2022, REJUST anonimizat — IMPOSSIBLE
|
||
- Skip
|
||
|
||
### TT. BPI insolvency
|
||
- ❌ Paywalled (~$30K/year subscription via ONRC RECOM)
|
||
- Skip until commercial deal
|
||
|
||
### UU. ONRC UBO registry
|
||
- ❌ Paywall + e-signature per query
|
||
- Use rep_legali (administrators) ca proxy
|
||
|
||
### VV. ONRC puncte de lucru
|
||
- ❌ Nu există bulk
|
||
- Cerere oficială Lege 544/2001 (incertă)
|
||
|
||
### WW. ANAF Inactivi/Lista Albă/Datornici
|
||
- ❌ Captcha pe TOATE 3 (verified 2026-05-08)
|
||
- Skip until OCR captcha service justificat
|
||
|
||
### XX. portal.just.ro decision text per case
|
||
- Există dossier metadata, dar text decizii anonimizat
|
||
- Skip
|
||
|
||
### YY. DGAF / DNA / Vamă per-firmă
|
||
- Doar agregate sau prose press releases
|
||
- Defer (LLM extraction cost-benefit incert)
|
||
|
||
### ZZ. RoTLD .ro domains per CUI
|
||
- WHOIS redactat persoane fizice; PJ vizibile dar nu bulk
|
||
- Multi-week scrape, semnal slab
|
||
- Skip
|
||
|
||
---
|
||
|
||
## Roadmap recomandat 4 săptămâni
|
||
|
||
### Săptămâna 1 — backbone macro + 2 corruption joins
|
||
1. INS Tempo dump (gov2-ro/tempo-ins-dump) — A
|
||
2. Recensământ 2021 — B
|
||
3. ANI declarații (gov2-ro existing) — C
|
||
4. ANPC sancțiuni WP REST — D
|
||
5. EEA E-PRTR + SEVESO — H, I, Z (combinate)
|
||
6. AFIR + FTS + CORDIS — E, F, G
|
||
|
||
### Săptămâna 2 — Photon optimization + license registries
|
||
1. Photon address-bias optimization (improve housenumber rate)
|
||
2. ANRE energie + ANCOM telecom + ASF + ANRSC scrape — V
|
||
3. Industrial parks MDLPA — J
|
||
4. SITUR turism — T
|
||
5. EUIPO trademark API — X
|
||
|
||
### Săptămâna 3 — investigative joins
|
||
1. AEP donații politice (finantarepartide.ro) — P
|
||
2. EBRD/EIB/IFC project lists — W
|
||
3. data.gov.ro proiecte-contractate (fonduri EU) — R
|
||
4. CKAN poller generic — S
|
||
5. ANSVSA food sector — U
|
||
|
||
### Săptămâna 4 — civic + transit overlay
|
||
1. Code4Romania romanian-elections-data ingest — Q
|
||
2. cdep.ro voting (fork cdep-live) — NN
|
||
3. GTFS feeds — HH
|
||
4. UEFISCDI BrainMap+ERRIS — GG
|
||
5. ANI federated crawler MVP (Cluj + 4 București sectoare) — O
|
||
|
||
### Săptămâna 5+ — long tail
|
||
- ANRE renewable producers
|
||
- ANP penitenciare
|
||
- CIMEC muzee
|
||
- portal.just.ro instanțe + ECRIS
|
||
- HCL POC (Cluj + 4 sectoare București)
|
||
- CNCD/ASF/ANSPDCP sanctions
|
||
|
||
## Structură DB nouă (propusă)
|
||
|
||
Adoptăm convention: **nou schema per categorie majoră**, table per source.
|
||
|
||
```
|
||
firms.* — DEJA: entities, financials, financials_ong, financials_banks,
|
||
reprezentanti_if, sucursale_ue, postal_codes
|
||
seap.* — DEJA: announcements + 9 MVs
|
||
external.* — NOU: tabele per dataset CKAN (fonduri EU, AFIR, etc.)
|
||
ani.* — NOU: declaratii_avere, declaratii_interese, oficiali
|
||
political.* — NOU: donatii, partide, candidati, alegeri
|
||
sanctions.* — NOU: anpc, cncd, asf, anspdcp, consiliul_concurentei
|
||
licenses.* — NOU: anre, ancom, ansvsa, anrsc, anmdmr, etc. (per regulator)
|
||
research.* — NOU: cordis, uefiscdi, brainmap, erris, euipo
|
||
fonduri.* — NOU: smis, fts, afir, ebrd, eib, ifc
|
||
geo.* — NOU: osm_*, anp_penitenciare, cimec_muzee, lmi, parcuri_industriale
|
||
env.* — NOU: eprtr, seveso, natura2000, calitateaer
|
||
demografic.* — NOU: tempo_*, recensamant_*
|
||
transit.* — NOU: gtfs_* per oraș
|
||
```
|
||
|
||
Fiecare tabelă păstrează `source` + `fetched_at` + foreign key implicit pe
|
||
`cui` (text) sau `siruta` (text) sau `geom` (PostGIS) către firms/seap.
|
||
|
||
## Composite "real player" score
|
||
|
||
După Săptămâna 1+2, putem calcula un scor per firmă:
|
||
|
||
```
|
||
real_player_score =
|
||
(anaf_active_vat ? 1 : 0) * 1.0 +
|
||
(financials_filed_recent ? 1 : 0) * 1.5 +
|
||
(seap_contracts_count > 0 ? 1 : 0) * 1.0 +
|
||
(afir_beneficiar ? 1 : 0) * 1.0 +
|
||
(ebrd_eib_ifc_borrower ? 1 : 0) * 2.0 +
|
||
(cordis_participant ? 1 : 0) * 1.5 +
|
||
(euipo_trademark_holder ? 1 : 0) * 0.5 +
|
||
(any_regulator_license ? 1 : 0) * 1.0 +
|
||
(anofm_recent_vacancies ? 1 : 0) * 1.0
|
||
```
|
||
|
||
Score 0 = paper company / dormant (justified red flag for procurement
|
||
audit). Score >5 = real economic player.
|
||
|
||
## "Pollue ↔ Public Money" — first killer story
|
||
|
||
Combo Săptămâna 1:
|
||
1. EEA E-PRTR loaded (~700 RO facilities cu CUI + emisii)
|
||
2. JOIN seap.announcements pe supplier_cui
|
||
3. Output: "Top 50 polluters care au câștigat >X RON contracte publice"
|
||
4. Per facility: link la profil firmă cu emisii + contracte
|
||
5. Mapă cu pin-uri (Photon already done): poluatori scalați după emisii
|
||
|
||
**Deliver-able în 3 zile cu data deja accesibilă.**
|
||
|
||
## "Bani și voturi" — second killer story
|
||
|
||
Combo Săptămâna 1+3:
|
||
1. ANI declarații (oficiali → firme deținute)
|
||
2. AEP donații (donatori → partide)
|
||
3. SEAP contracte (firme → autorități)
|
||
4. Triple JOIN: oficiali ai partidului X care dețin firme care au câștigat
|
||
contracte de la autorități controlate de partidul X
|
||
5. Per oficial: dashboard cu firmele lor + contracte + donații date
|
||
|
||
## Memorie + automatizare
|
||
|
||
- **Cron daily**: ANAF delta (deja live), CKAN poller (S), ANPC poll (D),
|
||
AEP poll (P), GTFS-RT (HH)
|
||
- **Cron weekly**: ONRC bulk (deja live), ANI declarații, license registries,
|
||
ANSVSA per județ
|
||
- **Cron monthly**: Recensământ check (deși static), Tempo refresh, EEA mirror
|
||
|
||
## Surse de respect/skip
|
||
|
||
**Nu pierde timp pe**:
|
||
- BPI (paywalled)
|
||
- ROLII/REJUST (mort/anonimizat)
|
||
- ONRC UBO (paywalled)
|
||
- ANAF Inactivi/Lista Albă/Datornici (captcha)
|
||
- OSIM patente (DB națională broken)
|
||
- Per-supplier actual payments (ForexeBug nu publică)
|
||
- imobiliare.ro / olx (ToS interzic, GDPR risk)
|
||
- WHOIS bulk RoTLD (GDPR redaction)
|
||
|
||
**Excelent dar deja făcut de alții — fork sau parteneriate**:
|
||
- gov2-ro/tempo-ins-dump (INS)
|
||
- gov2-ro/declaratii-integritate (ANI)
|
||
- code4romania/romanian-elections-data (BEC/AEP)
|
||
- code4romania/czl-scrape (legislative)
|
||
- expertforum.ro/banipartide.ro (AEP donații curate)
|
||
- hcl.usr.ro (HCL aggregator — partner)
|
||
- funky.ong/banipublici.ro (budget viz — partner)
|
||
- Tranzy.app (GTFS-RT 5 orașe)
|
||
|
||
## Sursa de adevăr a planului
|
||
|
||
Acest fișier = STRATEGIC-PLAN.md. Update după fiecare iterație.
|
||
|
||
PROMPTS.md §0a referențiază acest plan pentru next-session context.
|
||
|
||
Memory project_firms_registry.md urmează roadmap-ul aici.
|