# 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.