Files
vreau-digital/services/seap-scraper/sql/013_firms_financials.sql
T
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

76 lines
2.9 KiB
PL/PgSQL

-- Financial indicators per firm-year, from Ministerul Finanțelor "Situații financiare"
-- annual datasets on data.gov.ro (CC-BY 4.0).
--
-- 21 indicators (I1-I20 + CAEN) extracted from balance sheet + P&L + headcount.
-- Schema covers years 2020-2024 initially; older years available too if needed.
BEGIN;
CREATE TABLE IF NOT EXISTS firms.financials (
cui TEXT NOT NULL,
year INT NOT NULL,
caen TEXT,
-- ── Bilanț — active ──
active_imobilizate NUMERIC(20,2), -- I1
active_circulante NUMERIC(20,2), -- I2
stocuri NUMERIC(20,2), -- I3
creante NUMERIC(20,2), -- I4
casa_banci NUMERIC(20,2), -- I5
cheltuieli_avans NUMERIC(20,2), -- I6
-- ── Bilanț — datorii / pasive ──
datorii NUMERIC(20,2), -- I7
venituri_avans NUMERIC(20,2), -- I8
provizioane NUMERIC(20,2), -- I9
capitaluri_total NUMERIC(20,2), -- I10
capital_subscris NUMERIC(20,2), -- I11
patrimoniul_regiei NUMERIC(20,2), -- I12
-- ── Cont profit/pierdere ──
cifra_afaceri NUMERIC(20,2), -- I13 (cifră afaceri netă)
venituri_total NUMERIC(20,2), -- I14
cheltuieli_total NUMERIC(20,2), -- I15
profit_brut NUMERIC(20,2), -- I16
pierdere_bruta NUMERIC(20,2), -- I17
profit_net NUMERIC(20,2), -- I18
pierdere_neta NUMERIC(20,2), -- I19
-- ── HR ──
numar_salariati BIGINT, -- I20 (some data anomalies need wider range)
-- ── Metadata ──
source TEXT DEFAULT 'mfinante.data.gov.ro',
fetched_at TIMESTAMPTZ DEFAULT now(),
PRIMARY KEY (cui, year)
);
CREATE INDEX IF NOT EXISTS idx_fin_cui ON firms.financials(cui);
CREATE INDEX IF NOT EXISTS idx_fin_year ON firms.financials(year);
CREATE INDEX IF NOT EXISTS idx_fin_ca_desc ON firms.financials(year, cifra_afaceri DESC NULLS LAST);
CREATE INDEX IF NOT EXISTS idx_fin_profit_desc ON firms.financials(year, profit_net DESC NULLS LAST);
CREATE INDEX IF NOT EXISTS idx_fin_salariati_desc ON firms.financials(year, numar_salariati DESC NULLS LAST);
CREATE INDEX IF NOT EXISTS idx_fin_caen ON firms.financials(caen);
-- Materialized view: latest year financials per CUI for fast profile lookup
CREATE MATERIALIZED VIEW IF NOT EXISTS firms.mv_financials_latest AS
SELECT DISTINCT ON (cui) *
FROM firms.financials
WHERE cui IS NOT NULL
ORDER BY cui, year DESC;
CREATE UNIQUE INDEX IF NOT EXISTS idx_mv_fin_latest_pk ON firms.mv_financials_latest(cui);
-- Staging table for raw CSV imports
CREATE TABLE IF NOT EXISTS firms.staging_financials (
cui TEXT,
caen TEXT,
i1 NUMERIC, i2 NUMERIC, i3 NUMERIC, i4 NUMERIC, i5 NUMERIC,
i6 NUMERIC, i7 NUMERIC, i8 NUMERIC, i9 NUMERIC, i10 NUMERIC,
i11 NUMERIC, i12 NUMERIC, i13 NUMERIC, i14 NUMERIC, i15 NUMERIC,
i16 NUMERIC, i17 NUMERIC, i18 NUMERIC, i19 NUMERIC, i20 NUMERIC
);
COMMIT;