Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple changes on tsje tables and scripts #162

Draft
wants to merge 8 commits into
base: semillas
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ sources/**/*.sql
sources/**/*.json
sources/**/*.png
sources/**/*.jpg
.vscode/**
37 changes: 28 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@

La plataforma de Control Ciudadano nace con el objetivo de poner a disposición
de la ciudadanía un portal de datos abiertos para controlar los recursos
públicos. Los datos que se encuentran disponibles en la actualidad son: las
compras realizadas durante la pandemia de la COVID-19, las declaraciones
juradas subidas a la fecha en la web de la Contraloría General de la República,
datos sobre autoridades electas, relación con proveedores del Estado que
cuenten con los mismos datos de contacto, las facturas de ANDE y ESSAP. La
plataforma pretende contar con más datos que ayuden a ejercer el derecho de
públicos. Los datos que se encuentran disponibles en la actualidad son:

* Las compras realizadas durante la pandemia de la COVID-19
* Las declaraciones juradas subidas a la fecha en la web de la Contraloría General de la República
* Datos sobre autoridades electas
* Relación con proveedores del Estado que cuenten con los mismos datos de contacto
* Las facturas de ANDE y ESSAP

La plataforma pretende contar con más datos que ayuden a ejercer el derecho de
“contralores ciudadanos”, convirtiéndose en una herramienta colaborativa,
apoyada por la comunidad de organizaciones y personas que deseen sumar sus
esfuerzos a la sostenibilidad de un portal útil – para promover el acceso a la
esfuerzos a la sostenibilidad de un portal útil – para promover el acceso a la
información pública y contribuir al desarrollo de un país transparente, libre
de corrupción e impunidad.

Expand All @@ -35,14 +38,14 @@ repositorio central. En este repositorio se almacena la información de:
* **API**: Servicios web utilizados para mostrar información dentro del portal
* **ETL**: Conjunto de ETL (programas para extracción transformación y carga)
que nutren la base de datos del portal
* **infra**: Conjunto de archivos que describen la infraestructura requerida
* **Infra**: Conjunto de archivos que describen la infraestructura requerida
para el portal, incluyendo servidores de base de datos, de archivos, de
aplicación, etc.

# Apoyo

La sección de análisis de compras covid con técnicas de Inteligencia Artificial
fue posible gracias al apoyo de la Open Contracting Partnership.
fue posible gracias al apoyo de la [Open Contracting Partnership](https://www.open-contracting.org/es/).

# Términos y condiciones

Expand Down Expand Up @@ -89,3 +92,19 @@ condiciones de la página externa.
El portal se encuentra abierto a contribuciones de toda la comunidad. Para colaborar
primero se debe crear una [incidencia](https://github.com/InstIDEA/controlciudadano/issues/new),
y en la misma describir la propuesta.


# Cómo instalar?

Clone el repositorio y accede al nuevo directorio:

```sh
git clone https://github.com/InstIDEA/controlciudadano
cd controlciudadano
```

Para levantar localmente el portal web puede referirse al siguiente
[README](https://github.com/InstIDEA/controlciudadano/blob/master/portal/README.md).

Para levantar localmente el api rest puede referirse al siguiente
[README](https://github.com/InstIDEA/controlciudadano/blob/master/api/README.md).
42 changes: 42 additions & 0 deletions api/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# API

Estos servicios web se utilizan para realizar búsquedas en la base de datos y mostrar información dentro del portal.

## Instalación
### Requerimientos
1. npm 6+ o mayor

### Instalación
Accede al directorio de la api:

```sh
cd api
```

Para instalar los paquetes y dependencias, ejecute:

```sh
npm install
```

### Configuración
Establezca las siguientes variables de entorno:
* PGUSER: usuario de la base de datos.
* PGHOST: host de la base de datos.
* PGPASSWORD: contraseña de acceso a la base de datos.
* PGDATABASE: la instancia de la base de datos.
* PGPORT: puerto de la base de datos (25432 por defecto).
* PORT: puerto del servicio (3001 por defecto).


### Levantar el servicio
Para iniciar el servicio, ejecute:

```sh
npm start
```

Alternativamente, para levantar el servicio y configurar las variables en un simple comando, puede ejecutar:
```sh
PGUSER=usuario PGHOST=host PGPASSWORD=pass PGDATABASE=db PGPORT=25432 PORT=3001 npm start
```
146 changes: 91 additions & 55 deletions migrations/R_Elected_with_document.sql
Original file line number Diff line number Diff line change
@@ -1,56 +1,92 @@
DROP MATERIALIZED VIEW IF EXISTS analysis.tsje_elected;
CREATE MATERIALIZED VIEW analysis.tsje_elected AS
(
WITH authorities AS (
SELECT DISTINCT CONCAT(REPLACE(e.apellido, '�', 'Ñ'), ', ', REPLACE(e.nombre, '�', 'Ñ')) AS name,
e.apellido as apellido,
e.nombre as nombre
FROM staging.tsje_elected e
),

by_hand (nombre, apellido, cedula) as (
values ('JUANA', 'PAEZ DE ESCURRA', '1790762'),
('HERIBERTO', 'SILVERA ACOSTA', '311107'),
('GALEANO LUGO', 'ELADIO', '480243'),
('MARIA BLANCA LILA', 'MIGNARRO DE GONZALEZ', '384004'),
('EVARISTO', 'MOREL ROJAS', '940792')
),

with_by_hand AS (
SELECT DISTINCT ON (a.name) a.name, a.apellido, a.nombre, h.cedula
FROM authorities a
LEFT JOIN by_hand h ON h.nombre = a.nombre AND h.apellido = a.apellido
),

with_set_simple AS (
SELECT DISTINCT ON (a.name) a.name, a.apellido, a.nombre, COALESCE(a.cedula, set.ruc) as cedula
FROM with_by_hand a
LEFT JOIN staging.set set ON a.cedula IS NULL AND set.nombre = a.name
),

with_set_complex AS (
SELECT DISTINCT ON (a.name) a.name, a.apellido, a.nombre, COALESCE(a.cedula, set.ruc) as cedula
FROM with_set_simple a
LEFT JOIN staging.set set
ON a.cedula IS NULL AND substr(a.name, 0, 20) = substr(set.nombre, 0, 20)

-- ON SIMILARITY(set.nombre, a.name) > 0.9
),

with_sfp_simple AS (
SELECT DISTINCT ON (a.name) a.name, a.apellido, a.nombre, COALESCE(a.cedula, sfp.documento) as cedula
FROM with_set_complex a
LEFT JOIN staging.sfp sfp
ON a.cedula IS NULL
AND sfp.nombres = a.nombre AND sfp.apellidos = a.apellido
),


final AS (
SELECT a.*
FROM with_sfp_simple a
)
SELECT a.cedula, elected.*
FROM final a
LEFT JOIN staging.tsje_elected elected ON elected.nombre = a.nombre AND elected.apellido = a.apellido
);
CREATE MATERIALIZED VIEW analysis.tsje_elected AS (
WITH authorities AS (
SELECT DISTINCT CONCAT(
REPLACE(e.apellido, '�', 'Ñ'),
', ',
REPLACE(e.nombre, '�', 'Ñ')
) AS name,
e.apellido as apellido,
e.nombre as nombre
FROM staging.tsje_elected e
),
by_hand (nombre, apellido, cedula) as (
values ('JUANA', 'PAEZ DE ESCURRA', '1790762'),
('HERIBERTO', 'SILVERA ACOSTA', '311107'),
('GALEANO LUGO', 'ELADIO', '480243'),
(
'MARIA BLANCA LILA',
'MIGNARRO DE GONZALEZ',
'384004'
),
('EVARISTO', 'MOREL ROJAS', '940792')
),
with_by_hand AS (
SELECT DISTINCT ON (a.name) a.name,
a.apellido,
a.nombre,
h.cedula
FROM authorities a
LEFT JOIN by_hand h ON h.nombre = a.nombre
AND h.apellido = a.apellido
),
with_set_simple AS (
SELECT DISTINCT ON (a.name) a.name,
a.apellido,
a.nombre,
COALESCE(
a.cedula,
set.ruc
) as cedula
FROM with_by_hand a
LEFT JOIN staging.set
set ON a.cedula IS NULL
AND
set.nombre = a.name
),
with_set_complex AS (
SELECT DISTINCT ON (a.name) a.name,
a.apellido,
a.nombre,
COALESCE(
a.cedula,
set.ruc
) as cedula
FROM with_set_simple a
LEFT JOIN staging.set
set ON a.cedula IS NULL
AND substr(a.name, 0, 20) = substr(
set.nombre,
0,
20
)
),
with_sfp_simple AS (
SELECT DISTINCT ON (a.name) a.name,
a.apellido,
a.nombre,
COALESCE(a.cedula, sfp.documento) as cedula
FROM with_set_complex a
LEFT JOIN staging.sfp sfp ON a.cedula IS NULL
AND sfp.nombres = a.nombre
AND sfp.apellidos = a.apellido
),
with_a_quien_elegimos_simple AS (
SELECT DISTINCT ON (a.nombre) a.nombre,
a.apellido,
COALESCE(a.cedula, aqes.identifier) as cedula
FROM with_sfp_simple a
LEFT JOIN staging.a_quien_elegimos aqes ON a.cedula IS NULL
AND aqes.name = a.nombre
AND aqes.lastname = a.apellido
),
final AS (
SELECT a.*
FROM with_a_quien_elegimos_simple a
)
SELECT a.cedula,
elected.*
FROM final a
LEFT JOIN staging.tsje_elected elected ON elected.nombre = a.nombre
AND elected.apellido = a.apellido
);
26 changes: 26 additions & 0 deletions migrations/R_Elected_with_stats.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
DROP TABLE IF EXISTS staging.tsje_elected_with_stats CASCADE;
CREATE TABLE staging.tsje_elected_with_stats
(
id bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 ),
year integer NOT NULL,
nombre text,
apellido text,
nombre_completo text,
edad integer,
sexo "char",
cand_desc text,
candidatura integer,
departamento integer,
dep_desc text,
desc_tit_sup text,
dis_desc text,
distrito integer,
lista integer,
orden integer,
siglas_lista text,
tit_sup integer,
PRIMARY KEY (id)
);

ALTER TABLE staging.tsje_elected_with_stats
OWNER to postgres;
Loading