Files
vreau-digital/services/seap-scraper/sql/003_platform.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

99 lines
4.3 KiB
PL/PgSQL

-- Platform tables for submissions + voting
BEGIN;
CREATE SCHEMA IF NOT EXISTS platform;
-- Ideas/submissions — anyone can propose
CREATE TABLE platform.ideas (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
problem TEXT NOT NULL, -- "Ce te deranjează?"
solution TEXT, -- "Cum ar trebui să fie?"
category TEXT DEFAULT 'general', -- transparenta, cereri, ai, educatie, sanatate, etc
author_name TEXT, -- optional
author_email TEXT, -- optional, for follow-up
author_city TEXT, -- optional
status TEXT DEFAULT 'nou', -- nou, în discuție, în lucru, mvp, live, respins
votes INTEGER DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_ideas_votes ON platform.ideas(votes DESC);
CREATE INDEX idx_ideas_status ON platform.ideas(status);
CREATE INDEX idx_ideas_created ON platform.ideas(created_at DESC);
CREATE INDEX idx_ideas_category ON platform.ideas(category);
-- Votes — fingerprint-based (no accounts)
CREATE TABLE platform.votes (
id BIGSERIAL PRIMARY KEY,
idea_id BIGINT REFERENCES platform.ideas(id) ON DELETE CASCADE,
fingerprint TEXT NOT NULL, -- hash of IP + user-agent
created_at TIMESTAMPTZ DEFAULT now(),
UNIQUE(idea_id, fingerprint)
);
-- Comments on ideas — simple, no accounts
CREATE TABLE platform.comments (
id BIGSERIAL PRIMARY KEY,
idea_id BIGINT REFERENCES platform.ideas(id) ON DELETE CASCADE,
author_name TEXT DEFAULT 'Anonim',
content TEXT NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_comments_idea ON platform.comments(idea_id, created_at);
-- Seed some initial ideas to get things started
INSERT INTO platform.ideas (title, problem, solution, category, author_name, status, votes) VALUES
(
'Verificare status dosar la orice instituție',
'Trebuie să mergi fizic sau să suni repetat ca să afli ce se întâmplă cu dosarul tău. Fiecare instituție are alt sistem, unele nu au deloc.',
'O platformă unificată unde introduci numărul de dosar și vezi statusul instant, indiferent de instituție.',
'cereri', 'Comunitate', 'nou', 42
),
(
'Extras Carte Funciară online, instant',
'Durează 3-5 zile și necesită deplasare la OCPI. În 2026, un document public ar trebui disponibil online.',
'Introduci număr cadastral → primești PDF cu extrasul CF. Fără deplasare, fără așteptare.',
'cereri', 'Comunitate', 'nou', 38
),
(
'Certificat fiscal în 30 de secunde',
'Stai la coadă la primărie, plătești timbru, aștepți 1-3 zile. De 3 ori pe an minim, dacă ai firmă.',
'CNP sau CUI → certificat fiscal digital, semnat electronic, valid legal.',
'cereri', 'Comunitate', 'nou', 35
),
(
'Programare buletin/pașaport care chiar funcționează',
'Sistemul MAI e permanent supraîncărcat, cade, nu găsești slot-uri. Ajungi la 4 dimineața la coadă.',
'Calendar cu disponibilitate reală, notificare când se eliberează slot, programare în 3 click-uri.',
'cereri', 'Comunitate', 'nou', 50
),
(
'Calculator taxe și impozite locale',
'Nu știi cât datorezi, trebuie să mergi la primărie să afli. Fiecare primărie calculează diferit.',
'Introdu adresa sau nr. cadastral → vezi toate taxele datorate, cu deadline-uri și posibilitate de plată.',
'transparenta', 'Comunitate', 'nou', 30
),
(
'Monitor licitații publice cu alerte',
'Informația e dispersată, greu de urmărit. Firmele mici pierd oportunități pentru că nu știu de ele.',
'Feed cu licitații filtrat pe domeniu/județ/valoare. Alerte pe email când apare ceva relevant.',
'transparenta', 'Comunitate', 'în lucru', 25
),
(
'Profil digital per primărie',
'Nu existe un loc centralizat unde să vezi cum performează primăria ta: buget, licitații, servicii digitale.',
'Pagina per primărie cu: buget, top cheltuieli, licitații, nivel digitalizare, comparație cu altele.',
'transparenta', 'Comunitate', 'în lucru', 22
),
(
'Generator cereri și petiții cu AI',
'Oamenii nu știu cum să formuleze o cerere oficială. Limbajul birocratic intimidează.',
'Descrii în cuvintele tale ce vrei → AI generează cererea completă, cu referințe legale corecte.',
'ai', 'Comunitate', 'nou', 28
);
COMMIT;