initial: split from gov-agreg — vreau.digital standalone platform
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)
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
# 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_<YEAR>` (sau `situatii_financiare2023` pentru 2023):
|
||||
- web_bl_bs_sl_an<YEAR>.txt (~9MB) — bilanț scurt/lichidare. **Alliance Healthcare e aici.**
|
||||
- web_ong_an<YEAR>.txt (~8MB) — asociații/fundații
|
||||
- web_instit_de_credit_an<YEAR>.txt — bănci (~30 records, IFRS schema)
|
||||
- web_ifn<YEAR>.txt — instituții financiare nebancare
|
||||
- web_ip_ieme<YEAR>.txt — instituții de plată
|
||||
- webasig<YEAR>.txt — asigurători
|
||||
- webbrok<YEAR>.txt — brokeri asigurări
|
||||
- web_sif<YEAR>.txt — fonduri de investiții
|
||||
- web_pensii<YEAR>.txt — fonduri de pensii
|
||||
- web_vs_<YEAR>.txt — S.S.I.F.
|
||||
- web_vm_an<YEAR>.txt — valori mobiliare
|
||||
- web_ir_an<YEAR>.txt — instituții religioase
|
||||
- web_fond_garantare<YEAR>.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=<YYYY>&cui=<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/<NNN>` (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@<domain>` 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
|
||||
Reference in New Issue
Block a user