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

159 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AAAS — Autoritatea pentru Administrarea Activelor Statului
**Status:** ingest portfolio MVP livrat 2026-05-10. Schema + scraper + cron deployed.
**Sursa:** https://www.aaas.gov.ro/ (HTML scraping; nicio sursă Excel / JSON / API publică).
## Context AAAS
AAAS administrează cota reziduală a statului în firme privatizate plus
recuperează creanțe post-privatizare. A taga o firmă cu **"statul deține
acțiuni"** / **"datorează bani statului"** / **"obligație investițională
post-privatizare"** este un semnal **rar și puternic** la nivel național
— ~500-1000 CUI-uri totale.
Conform comunicatelor instituției: ~400 firme active monitorizate,
~2.000 contracte post-priv, ~550 în insolvență, ~11.5 mld RON datorii
de recuperat. **Doar 12 firme (active_holding) sunt publicate online
structurat astăzi**; restul rămâne în PDF-uri istorice / portal cu login.
## Sursele identificate
| URL | Conținut | Stare astăzi | Acțiune |
|-----|----------|--------------|---------|
| `/despre-aaas/.../1-9-3-companii-sub-autoritatea-aaas/` | 12 firme active_holding cu subpagină proprie | **STRUCTURAT** — CUI / J / adresă / participație % | **Ingerat** |
| `/4-oferta-a-a-a-s/4-2-vanzari-actiuni/` | Oferte vânzare acțiuni | "SECȚIUNE ÎN CONSTRUCȚIE" — doar EXPO PARC SRL Iași teaser PDF | Probă logată; recheck cron |
| `/4-oferta-a-a-a-s/4-3-valorificare-creante/` | Lista creanțe de vândut | "SECȚIUNE ÎN CONSTRUCȚIE" | Probă logată; recheck cron |
| `gwp.aaas.gov.ro/Directia-creante` | Portal servicii electronice | Login required, nu există API public anonim | Defer (ar necesita cont AAAS) |
| `aaas.gov.ro/upload_files/.../ANEXA%20LA%20ORDINUL%20278_18.02.2005_en.pdf` | ~800 firme × 41 județe (snapshot 2005) | PDF-only, istoric — referință | Defer (PDF parser pe sesiune ulterioară) |
| `aaas.gov.ro/upload/FNI_Judet_*.pdf` | Despăgubiri FNI persoane fizice | PDF-only, **persoane fizice (CNP)** — nu CUI | Out of scope pentru aaas.firme |
## Schema livrată — `services/seap-scraper/sql/032_aaas.sql`
```
aaas.firme -- PK = cui; one row per AAAS-monitored CUI
-- aaas_status ∈ {active_holding, post_priv_debt, insolventa,
-- recuperare, vanzare_actiuni, vanzare_creante}
-- state_share_pct, debt_to_state_lei, raw jsonb
aaas.scrape_log -- per-run audit trail (mirror anre.scrape_log)
aaas.mv_per_cui -- materialized rollup pentru join uniform
-- REFRESH MATERIALIZED VIEW CONCURRENTLY aaas.mv_per_cui
```
## Scraper — `services/seap-scraper/src/scrape-aaas.ts`
- Walk index `1-9-3-companii-sub-autoritatea-aaas/` → extrage 12 anchors `1-9-3-*/`.
- Pentru fiecare subpagină: `htmlToText` + ancorează pe `CUI: NNN / Jxx`,
apoi extrage Adresa / Telefon / Site / Email / Participație AAAS.
- Tratează caz curat de double-render al titlului ("BLUE AIR TEHNIC SA BLUE
AIR TEHNIC S.A." → "BLUE AIR TEHNIC S.A.").
- UPSERT pe `cui`, `aaas_status='active_holding'`, `cui_match_method='aaas_published'`
(CUI-ul vine direct de la AAAS, deci scor 1.000).
- Probează și paginile `vanzari_actiuni` / `vanzari_creante` — astăzi loghează
`section_under_construction`. Re-rularea le va detecta când AAAS publică conținut.
- Refresh MV + raport match rate la final.
## Cron wrapper — `services/seap-scraper/cron/scrape-aaas.sh`
Mirror `scrape-anre.sh`: Infisical Machine Identity → env-file → `docker run --env-file`.
Idempotent (UPSERT). Recomandare cadența: **săptămânal** (sursa nu se schimbă des).
```
sudo /opt/vreaudigital/services/seap-scraper/cron/scrape-aaas.sh
sudo LIMIT=3 .../scrape-aaas.sh # smoke test
```
## Rezultate ingest (2026-05-10)
```
12 subpages found 11 inserted 1 skipped (CRIZANTEMA COM — pagină goală încă)
match_cui_pct: 100.0% (11/11 față de firms.entities)
breakdown: active_holding = 11
```
| CUI | Nume AAAS | Participație | Match firms.entities |
|---|---|---|---|
| 16695222 | RADIOACTIV MINERAL MAGURELE S.A. | 100.000% | RADIOACTIV MINERAL MAGURELE SA |
| 31029694 | ACTIVE CONEXE | 100.000% | ACTIVE CONEXE S.A. |
| 11369861 | ARCADIA 2000 | 100.000% | ARCADIA 2000 SA |
| 42790517 | BLUE AIR TEHNIC S.A. | 100.000% | BLUE AIR TECHNIC S.R.L. |
| 8359779 | SOCIETATEA DE STRATEGIE PENTRU PIATA DE GROS | 100.000% | SOCIETATEA DE STRATEGIE PENTRU PIATA DE GROS SRL |
| 1960487 | TRIMEC | 98.500% | TRIMEC SA |
| 7638244 | AGROMEC ICLOD | 92.800% | AGROMEC ICLOD SA |
| 360557 | EUROTEST S.A. | 70.000% | EUROTEST SA |
| 1973568 | RECONS | 66.000% | RECONS SA |
| 1074251 | AGROMEC MOLDOVA NOUA | 58.600% | AGROMEC MOLDOVA NOUA SA |
| 1384767 | COMALEX | 53.600% | COMALEX SA |
## Cross-source value — recipe SQL drafted
### Recipe 1: "Firme AAAS-monitorizate care câștigă contracte SEAP"
Companii în portofoliul activ AAAS care câștigă mai multe contracte de stat
— state-owned firms taking state procurement money.
```sql
SELECT
a.cui,
a.name AS firma_aaas,
a.state_share_pct,
COUNT(ann.notice_id_internal) AS nr_contracte_seap,
SUM(ann.awarded_value) AS total_castigat_lei,
array_agg(DISTINCT ann.authority_name) FILTER (WHERE ann.authority_name IS NOT NULL)
AS autoritati_contractante
FROM aaas.firme a
LEFT JOIN seap.announcements ann ON ann.supplier_cui = a.cui
GROUP BY a.cui, a.name, a.state_share_pct
ORDER BY total_castigat_lei DESC NULLS LAST;
```
**Smoke test (azi):** RADIOACTIV MINERAL MAGURELE (100% AAAS) are 5 contracte
SEAP, top 279.700 RON de la **Compania Națională a Uraniului S.A.** (firmă
de stat) — circuit complet stat→stat documentat.
### Recipe 2: "Firme AAAS-monitorizate care figurează la ANAF datornici"
Firme cu acționariat de stat care își datorează propriile taxe statului.
```sql
SELECT a.cui, a.name, a.state_share_pct, d.suma_totala
FROM aaas.firme a
JOIN anaf.datornici d USING (cui)
ORDER BY d.suma_totala DESC;
```
### Recipe 3: "Performanța portofoliului rezidual de stat"
Cum performează firmele în care statul mai are acțiuni — utilizat pentru
KPI / red-flag pe profil.
```sql
SELECT a.cui, a.name, a.state_share_pct,
f.cifra_afaceri, f.profit_brut, f.an
FROM aaas.firme a
LEFT JOIN firms.financials f USING (cui)
WHERE f.an = (SELECT MAX(an) FROM firms.financials WHERE cui = a.cui)
ORDER BY f.cifra_afaceri DESC NULLS LAST;
```
## Next steps (sesiuni viitoare)
1. **PDF parser pentru ORDIN 278/2005** (~800 firme × 41 județe, snapshot 2005)
— ar putea da ~500-700 CUI-uri istorice tagate ca `aaas_legacy_portfolio`.
Format: PDF tabular, OCR nu e necesar (text extractabil cu `pdftotext`).
2. **Recheck cron** pentru `4-2-vanzari-actiuni` / `4-3-valorificare-creante`
— când AAAS publică conținut, scraperul deja loghează stare. Adaugă parser
când stare ≠ `section_under_construction`.
3. **Insolvențe AAAS** — căutare în arhiva BPI (Buletinul Procedurilor de
Insolvență) după CUI-urile din `aaas.firme` ar produce automat tag-uri
`insolventa` pentru cele ~550 raportate de AAAS.
4. **Recipe în `lib/recipes.ts`** — adaugă "Firme aflate sub autoritatea AAAS"
ca secțiune dedicată (3 recipes: portofoliu, contracte, datorii).
5. **Profile badge**`firms.entities.cui``aaas.firme.cui` ⇒ afișează
chip "Stat deține X% (AAAS)" pe profilul firmei.
## Notițe operaționale
- Sursa AAAS este **fragilă** (WordPress + Brizy editor, pagini cu boilerplate
"dummy text" în loc de date reale, secțiuni "în construcție" persistente).
Parserul este intentat conservativ — anchor strict pe `CUI: NNN / Jxx`.
- Nu există rate limiting agresiv; 350ms între cereri e conservator.
- Volumul total e mic (12 pagini) — runtime 6-7 secunde end-to-end.
- **Replicabilitate 5/5**: doar AAAS publică această taxonomie. Rar și valoros.