Files
Claude VM a6c03a091e 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)
2026-05-13 00:10:32 +03:00

75 lines
4.2 KiB
SQL

-- 021_regas_ajutoare.sql
-- RegAS — Registrul Ajutoarelor de Stat (Consiliul Concurenței).
-- Source: https://regas.consiliulconcurentei.ro/transparenta/index.html
-- API: POST /apitransparenta/cautareTransparenta (XSRF-TOKEN cookie + header)
-- Volume at first scrape (2026-05-09): 132,363 ajutoare individuale.
--
-- Each row = one ajutor de stat acordat unei firme (denumireBeneficiar+cui),
-- cu masura (referintaMasura SA.xxx/yyyy), categorie/subcategorie, suma în RON,
-- finantator (ministerul/agentia care a dat banii), instrumentAcordare
-- (fonduri nerambursabile / credite / garantii / scutiri).
--
-- Cheie naturală: (cui, idMasura, dataAcordare, ajutorAcordatSubcategorie) —
-- același beneficiar poate primi multiple tranșe pe aceeași măsură. Folosim
-- un id sintetic SHA1 pentru ON CONFLICT idempotent.
CREATE SCHEMA IF NOT EXISTS regas;
CREATE TABLE IF NOT EXISTS regas.ajutoare (
id char(40) PRIMARY KEY, -- sha1(cui|idMasura|dataAcordare|subcategorie|sumaSubcategorie)
cui text NOT NULL,
denumire_beneficiar text NOT NULL,
raf text, -- "Registrul Ajutoarelor Fiscale" id (rare)
alt_cod text, -- ID alternativ (rare)
dimensiune_intreprindere text, -- "întreprindere mare" / "IMM" / etc.
regiune text[], -- ["Regiunea I Nord-Est", ...] sau ["Toate regiunile"]
domeniu_activitate text, -- CAEN cod (4 digits)
data_acordare date, -- "DD/MM/YYYY" parsed
id_masura integer NOT NULL, -- FK logic la /apitransparenta/downloadPdfMasura/{idMasura}
denumire_masura text NOT NULL,
referinta_masura text, -- "SA.104966/2022"
activitati_finantate text[], -- CAEN codes
categorie text,
subcategorie text,
obiectiv text,
ajutor_acordat_categorie numeric(20,2), -- RON
ajutor_acordat_subcategorie numeric(20,2), -- RON (de obicei = categorie pentru o singură subcategorie)
intermediari_financiari text[],
executanti text[],
instrument_acordare text, -- "fonduri nerambursabile" / "garantii" / "credite"
intensitate numeric(6,2), -- procent (e.g. 65.00)
finantator text, -- "Ministerul ... (MIPE)"
pdf_masura text, -- "1195_MASURA.pdf"
fetched_at timestamptz DEFAULT now(),
raw_json jsonb
);
CREATE INDEX IF NOT EXISTS idx_regas_ajutoare_cui ON regas.ajutoare(cui);
CREATE INDEX IF NOT EXISTS idx_regas_ajutoare_data ON regas.ajutoare(data_acordare DESC NULLS LAST);
CREATE INDEX IF NOT EXISTS idx_regas_ajutoare_finantator ON regas.ajutoare(finantator);
CREATE INDEX IF NOT EXISTS idx_regas_ajutoare_referinta ON regas.ajutoare(referinta_masura);
CREATE INDEX IF NOT EXISTS idx_regas_ajutoare_id_masura ON regas.ajutoare(id_masura);
COMMENT ON TABLE regas.ajutoare IS
'State aid records from Consiliul Concurentei RegAS portal. One row per ajutor acordat. Source: https://regas.consiliulconcurentei.ro/transparenta/';
COMMENT ON COLUMN regas.ajutoare.id IS
'Synthetic sha1 of (cui|idMasura|dataAcordare|subcategorie|ajutorAcordatSubcategorie). Used for idempotent upsert.';
-- Materialized view aggregating per CUI for fast firma profile lookup.
CREATE MATERIALIZED VIEW IF NOT EXISTS regas.mv_ajutoare_per_cui AS
SELECT
cui,
COUNT(*) AS nr_ajutoare,
SUM(ajutor_acordat_subcategorie) AS total_ron,
COUNT(DISTINCT id_masura) AS nr_masuri,
COUNT(DISTINCT finantator) AS nr_finantatori,
MIN(data_acordare) AS prima_acordare,
MAX(data_acordare) AS ultima_acordare,
array_agg(DISTINCT finantator) FILTER (WHERE finantator IS NOT NULL) AS finantatori,
array_agg(DISTINCT instrument_acordare) FILTER (WHERE instrument_acordare IS NOT NULL) AS instrumente
FROM regas.ajutoare
GROUP BY cui;
CREATE UNIQUE INDEX IF NOT EXISTS idx_regas_mv_cui ON regas.mv_ajutoare_per_cui(cui);