# Research roadmap — surse publice de date pentru firms registry Sintetizat 2026-05-08 din 4 research agents paraleli. Pentru context complet vezi PROMPTS.md §0a. Stare de bază: - 3.97M firme ONRC, 3.86M financials WEB_UU 2020-2024, 3.21M ANAF v9 enriched, 2.8M lat/lng (postal+UAT centroid). Cron live pentru ANAF daily + ONRC weekly. ## A. GIS — pin precision de la centroide la housenumber ### A1. Photon 0.5.0 JAR nativ (DONE 2026-05-08) - Install: `cron/install-photon.sh` (apt openjdk-21-jre-headless + 38MB JAR) - Run: `cron/vreaudigital-photon.service` (systemd, -Xmx8G, port 2322) - Format extract: ES (Elasticsearch 5.6.16) — Photon 0.6+ folosește OS și e incompatibil. 0.5.0 e ultima versiune ES. - Throughput verificat: ~50-100 req/s (CONCURRENCY=20 în geocode-photon.ts) - Rezultat estimat: 35-50% din firme prin housenumber match (limitat de acoperirea OSM RO addr:* tags ~1M obiecte vs 3M+ housenumber-ed firme) ### A2. osm2pgsql RO în PostGIS (TODO, 1h setup) ```bash sudo apt install osm2pgsql curl -fL -o /tmp/ro.osm.pbf https://download.geofabrik.de/europe/romania-latest.osm.pbf osm2pgsql -d architools_db --schema=osm --slim --drop --cache 4000 \ --number-processes 8 --hstore /tmp/ro.osm.pbf # disk: ~8-12GB, 15-30 min import ``` SQL pattern: JOIN firms cu osm.planet_osm_point WHERE addr:housenumber match, fuzzy similarity pe addr:street. Bonus: reusable pentru POI display, validare UAT. ### A3. Bucharest Infocod refinement (TODO, 1 zi) - data.gov.ro "Infocod Sept 2016 cu SIRUTA" — postal codes 010xxx-067xxx, ~9000 codes - Refinează ~250K firme București de la postal-area centroid (~500m) la street-cluster (~50-150m) ### A4. ANAF v9 backfill pentru cele 1.17M unpinned firms (TODO) - Lansa enrich-anaf cu filtru `WHERE adr_cod_postal IS NULL OR siruta IS NULL` - Multe firme vor primi cod_postal de la ANAF, declanșând geocoding postal ## B. Date financiare — categorii lipsă peste WEB_UU ### B1. 13 categorii non-WEB_UU pe data.gov.ro (TODO, 1-2 zile) Toate la slug `situatii_financiare_` (sau `situatii_financiare2023` pentru 2023): - web_bl_bs_sl_an.txt (~9MB) — bilanț scurt/lichidare. **Alliance Healthcare e aici.** - web_ong_an.txt (~8MB) — asociații/fundații - web_instit_de_credit_an.txt — bănci (~30 records, IFRS schema) - web_ifn.txt — instituții financiare nebancare - web_ip_ieme.txt — instituții de plată - webasig.txt — asigurători - webbrok.txt — brokeri asigurări - web_sif.txt — fonduri de investiții - web_pensii.txt — fonduri de pensii - web_vs_.txt — S.S.I.F. - web_vm_an.txt — valori mobiliare - web_ir_an.txt — instituții religioase - web_fond_garantare.txt — fonduri garantare Total ~17MB/an extra. CSV sidecar = column spec per categorie. Reuse importer existent, parametrizare schema per file. ### B2. Backfill 2015-2019 (TODO, one-shot) Slug `situatii_financiare_2021` e megadump cu toți anii 2012-2021. Adaugă 5 ani istorice pentru trend charts. ### B3. ANAF Bilanț webservice (TODO, on-demand) - Endpoint: `https://webservicesp.anaf.ro/bilant?an=&cui=` - Returnează JSON per-CUI bilanț (verified: BCR 2023, OMV Petrom 2023) - Coverage: 2015-2023 only (2024+2014 = empty `i:[]`) - Use: cache-miss fallback când userul deschide profil firmă fără financials ### B4. Watch slug `situatii_financiare_2025` (TODO, daily check) Așteptăm publicare ~iunie 2026 (pattern istoric: an+1 mai-iunie). ## C. ONRC + ANAF datasets neimportate ### C1. 3 ONRC CSVs lipsă (TODO, ~1h) Same dataset firme-DD-MM-YYYY: - `OD_REPREZENTANTI_LEGALI.CSV` — DEJA importat (rep_legali JSONB) - `OD_REPREZENTANTI_IF.CSV` — întreprinderi familiale (small) - `OD_SUCURSALE_ALTE_STATE_MEMBRE.CSV` — sucursale UE (very small ~19KB) ### C2. ANAF Inactivi (TODO) - URL: `https://www.anaf.ro/inactivi/rezultatInactivi.jsp` (HTML scrape) sau serviciu web async - Diferit de `is_active_anaf` din v9 (acela = activ fiscal; inactivi = declarat oficial inactiv conform art. 92 CPF, blocheaza deductibilitate TVA) - Adaugă coloană `anaf_inactiv_oficial` ### C3. ANAF Lista Albă (TODO) - URL: `https://www.anaf.ro/restante/listaalba.xhtml` (XHTML scrape) - Boolean `lista_alba_anaf` — fără obligații restante - Util ca "scor încredere" la public ### C4. ANAF Datornici (TODO, FOARTE VALOROS) - URL: `https://www.anaf.ro/restante/` (publicat trimestrial din 2026) - Sume datorate per CUI. Semnal financiar real, lucrabil în recipe-uri: "firme datoare la stat care au câștigat contracte recente" ### C5. ONRC Puncte de Lucru (NO BULK — defer) - Confirmat: nu există export bulk. Doar lookup web per CUI. - Opțiuni: scrape controlled 1 req/s (3.97M / an), sau cerere oficială Lege 544/2001 către ONRC pentru bulk (proiect civic poate fi accepted) - Defer until justified ## D. License/regulator registries (TODO, 3-5 zile pentru mai multe) Per categorie: PDF/web tabel, scraping necesar. Total ~50K firme cu flag-uri suplimentare per regulator: | Regulator | URL | Format | Volum aprox | |-----------|-----|--------|-------------| | ANRE (energie) | portal.anre.ro/PublicLists/LicenteAutorizatii (TLS expirat, --insecure) | tabel paginat | mii licențe | | ANCOM (telecom) | ancom.ro/furnizori-comunicatii-electronice_133 | web list paginat | ~3000 | | ASF (asigurări/finanțe) | asfromania.ro/ro/c/54/registrul-entitatilor-din-piata-asigurarilor | Excel/PDF | mii | | ANRSC (utilități publice) | anrsc.ro evidenta-licente PDF lunar | PDF parsabil | sute | | ANMDMR (medicamente) | portal.anm.ro | tabele paginate | mii | | ASPAAS (auditori) | aspaas.gov.ro + cafr.ro PDF | PDF | mii | | CECCAR (contabili) | ceccar.ro/?page_id=97 | PDF anual | mii | | ANEVAR (evaluatori) | anevar.ro/cautare + PDF lunar per categorie | PDF | corporativi cu CUI | | OAR (arhitecți) | oar.archi + Monitor Oficial PI | PDF anual | toți cu CUI | ## E. Procurement-adjacent ### E1. data.gov.ro proiecte-contractate (fonduri EU) (TODO, 1 zi) - URL: `https://data.gov.ro/dataset/proiecte-contractate` (XLSX bulk, OGL-ROU-1.0) - Coverage: POIM, POC, POAT, POCU, POR, POCA, POAD 2018-2024 - Beneficiari + suma per proiect, link la firms.entities prin CUI - Recipe nouă: "firme cu fonduri EU mari" + dependență per program ### E2. Consiliul Concurenței blacklist trucări (TODO, 2 zile) - ~100 decizii cartel/bid-rigging, ~35 firme distincte - URL: `consiliulconcurentei.ro/documente-oficiale/concurenta/decizii/serviciul-carteluri/` - PDF crawl + extracție nume firmă + sumă + decizie - IMPACT REPUTATIONAL ENORM pe profile firmă: "Acest furnizor a fost amendat pentru cartel" + link la PDF ### E3. ANAF datorii bugetul de stat (TODO, conditional) - Verifică dacă anaf.ro/restante are downloadable files (sau doar XHTML scrape) - Snapshot 1× / lună - Recipe: "datornici care câștigă contracte" ### E4. Curtea de Conturi audit reports (TODO, 3-5 zile) - URL: `curteadeconturi.ro/rapoarte-audit/downloads/` (sequential IDs ~14000) - Numai PDFs, fără API. Crawl + OCR/text extraction necesar - Începe cu rapoartele anuale publice (10 PDFs 2014-2024) pentru search full-text - Per-instituție audit: defer la v2 ### E5. PNRR ORDS dashboard (TODO, 1-day spike) - `pnrr.fonduri-ue.ro/ords/pnrr/r/dashboard-status-pnrr/` - Reverse-engineer Oracle ORDS endpoints din JS - Dacă accesibile bulk → INGEST IMEDIAT (highest-stakes spend RO acum) ### E6. CNSC contestații (TODO, 1 săptămână) - `portal.cnsc.ro/decizii.html`, ~16,000+ decizii PDF - Heavy parsing, but: "care autorități pierd contestații cel mai mult" e o întrebare jurnalistică deep-value - Park la Q3 ## F. NU SE POATE — gap-uri publice ### F1. Per-supplier actual payments Nu există. ForexeBug are date intern dar nu publică per-supplier. **Gap-ul cel mai mare** pentru "follow the money". ### F2. Per-CUI court decisions - ROLII e mort din martie 2022 (anonimizare GDPR + dizolvare fundație) - REJUST e replacement dar ANONIMIZAT (nu poți face per-firmă lookup) - portal.just.ro web service — limitat la 1000 results/query, nu CUI parameter - Per-CUI civil action history NU EXISTĂ ca open data RO ### F3. BPI insolvency procedural acts - ONRC charges subscription (~paywall) - Toate API/wrapper-uri terțe (DateBPI, termene.ro, Coface) sunt paid - Defer fără deal comercial ### F4. OSIM patente/mărci - DB națională OSIM e broken oficial - Espacenet (EPO) + EUIPO eSearch nu au per-CUI bulk dump ### F5. Email-uri firme - Niciun registru public obligatoriu - Pragmatic: derive `info@` din coloana `web` (acoperire ~20-30%) sau scrape websiteul firmei (regex email pe homepage + /contact). Legal-OK doar pentru emailuri generice (info@/contact@/office@), respectând robots.txt ## Ranking implementare next sprint 1. **Now (running)**: Photon geocoding pe 1.17M firme fără pin (49 min ETA) 2. **Săptămâna asta** (~2 zile): - 13 categorii MFP non-WEB_UU (1-2 zile) - 3 ONRC CSVs lipsă (1h) - data.gov.ro proiecte-contractate fonduri EU (1 zi) - ANAF Inactivi + Lista Albă + Datornici scrape (1 zi) 3. **Sprint următor** (~1 săptămână): - osm2pgsql RO PostGIS load - License registries (ANRE, ANCOM, ASF, ANRSC, ANMDMR, ASPAAS, ANEVAR, OAR) - Consiliul Concurenței blacklist (2 zile) - PNRR ORDS spike (1 zi) → ingest dacă accesibil 4. **Q3-Q4**: - Curtea de Conturi audit PDF crawl - CNSC contestații PDF scrape - ANAF Bilanț webservice cache-miss fallback