# 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 &lt;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, &lt;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 &gt;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 &gt;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.
