Ir al contenido

Diccionario de Datos

Esta página es la referencia completa a nivel columna para las 12 tablas de la base de datos Popolo-Graph. Cada columna, su tipo, nulabilidad, restricciones y propósito están documentados aquí. Úsala como fuente autorizada al consultar la base de datos o construir análisis derivados.

Áreas geográficas utilizadas para mapear distritos electorales, estados y circunscripciones.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo A01, A02, etc.
nombreTEXTNONombre del área (estado, distrito o circunscripción)
clasificacionTEXTNOCHECK IN (‘estado’,‘distrito’,‘circunscripcion’)Clasificación del área geográfica
parent_idTEXTYESFK → area(id)Área padre (ej. distrito dentro de un estado)
geometryTEXTYESGeometría GeoJSON opcional para visualización en mapa

Partidos políticos, bancadas parlamentarias, coaliciones, organismos de gobierno y otras organizaciones.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo O01, O02, etc.
nombreTEXTNOUNIQUENombre oficial de la organización
abbrTEXTYESAbreviatura (MORENA, PAN, PRI, etc.)
clasificacionTEXTNOCHECK IN (‘partido’,‘bancada’,‘coalicion’,‘gobierno’,‘institucion’,‘otro’)Tipo de organización
fundacionTEXTYESFecha de fundación en formato ISO 8601
disolucionTEXTYESFecha de disolución en formato ISO 8601

Legisladores y otras personas rastreadas en el sistema.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo P01, P02, etc.
nombreTEXTNONombre completo de la persona
fecha_nacimientoTEXTYESFecha de nacimiento en formato ISO 8601
generoTEXTYESCHECK IN (‘M’,‘F’,‘NB’)Género: M=masculino, F=femenino, NB=no binario
curul_tipoTEXTYESCHECK IN (‘mayoria_relativa’,‘plurinominal’,‘suplente’)Tipo de curul: mayoría relativa, representación proporcional o suplente
circunscripcionINTEGERYESCHECK BETWEEN 1 AND 5Circunscripción electoral (1-5)
start_dateTEXTYESFecha de inicio del período legislativo
end_dateTEXTYESFecha de fin del período legislativo
corriente_internaTEXTYESCHECK IN (‘Monreal’,‘AMLO’,‘Sheinbaum’,‘institucionalista’,NULL)Corriente interna del partido (para análisis de lealtad)
vulnerabilidadTEXTYESCHECK IN (‘alta’,‘media’,‘baja’,NULL)Nivel estimado de vulnerabilidad (teoría de juegos)
observacionesTEXTYESNotas de texto libre sobre el legislador
identifiers_jsonTEXTYESJSON con identificadores externos (ej. {"sitl_id": 108})

Vincula a una persona con una organización mediante un rol específico y un período de tiempo.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo M01, M02, etc.
person_idTEXTNOFK → person(id) ON DELETE CASCADEReferencia a la persona
org_idTEXTNOFK → organization(id) ON DELETE CASCADEReferencia a la organización
rolTEXTNORol dentro de la organización (diputado, senador, suplente)
labelTEXTYESDescripción legible (ej. “Diputado plurinominal, Circ. 4”)
start_dateTEXTNOFecha de inicio de la membresía
end_dateTEXTYESFecha de fin (NULL = activa actualmente)
on_behalf_ofTEXTYESFK → organization(id)Organización en cuyo nombre se ejerce el rol (ej. coalición)

Cargos formales dentro de una organización (cámara), opcionalmente vinculados a un área geográfica.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo T01, T02, etc.
org_idTEXTNOFK → organization(id)Organización (cámara) a la que pertenece el cargo
area_idTEXTYESFK → area(id)Área geográfica asociada al cargo
labelTEXTNODescripción legible del cargo
start_dateTEXTNOFecha de inicio del cargo
end_dateTEXTYESFecha de fin del cargo

Iniciativas legislativas: reformas constitucionales, leyes secundarias y proyectos de ley ordinarios.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo Y01, Y02, etc.
textoTEXTNOTexto completo o resumen de la iniciativa
clasificacionTEXTNOCHECK IN (‘reforma_constitucional’,‘ley_secundaria’,‘ordinaria’,‘otra’)Tipo de iniciativa legislativa
requirementTEXTNOCHECK IN (‘mayoria_simple’,‘mayoria_calificada’,‘unanime’)Tipo de mayoría requerida para aprobar
resultTEXTYESCHECK IN (‘aprobada’,‘rechazada’,‘pendiente’,‘retirada’,NULL)Resultado de la votación (NULL si aún no se vota)
dateTEXTYESFecha de la votación
legislative_sessionTEXTYESNombre del período legislativo (ej. “LXVI Legislatura”)
fuente_urlTEXTYESURL de la fuente oficial

Un evento de votación específico (lista nominal) sobre una moción, realizado por una cámara.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo VE01, VE02, etc.
motion_idTEXTNOFK → motion(id)Referencia a la moción votada
start_dateTEXTNOFecha/hora en que inició el evento de votación
organization_idTEXTNOFK → organization(id)Cámara que realizó la votación
resultTEXTYESCHECK IN (‘aprobada’,‘rechazada’,‘empate’,NULL)Resultado de la votación
sitl_idINTEGERYESIdentificador de votación del sistema SITL (parámetro votaciont)
voter_countINTEGERYESNúmero de legisladores que participaron
legislaturaTEXTYESIdentificador de legislatura (LX, LXI, …, LXVI)
requirementTEXTYESCHECK IN (‘mayoria_simple’,‘mayoria_calificada’,‘unanime’,NULL)Requisito de mayoría (copiado de la moción)
source_idTEXTYESID del portal original para deduplicación entre fuentes
identifiers_jsonTEXTYESJSON con identificadores externos Popolo

Voto individual emitido por un legislador en un evento de votación.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo V01, V02, etc.
vote_event_idTEXTNOFK → vote_event(id)Referencia al evento de votación
voter_idTEXTNOFK → person(id)Referencia al legislador que votó
optionTEXTNOCHECK IN (‘a_favor’,‘en_contra’,‘abstencion’,‘ausente’)Opción del voto: a favor, en contra, abstención, ausente
”group”TEXTYESPartido/bloque al que pertenecía el legislador al momento de votar

Nota: El nombre de columna group es una palabra reservada de SQLite y debe ir entre comillas en las consultas.


Conteos agregados de votos por opción y por partido dentro de un evento de votación.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo C01, C02, etc.
vote_event_idTEXTNOFK → vote_event(id)Referencia al evento de votación
optionTEXTNOCHECK IN (‘a_favor’,‘en_contra’,‘abstencion’,‘ausente’)Opción de voto que se está contando
valueINTEGERNOCHECK >= 0Número de votos en este conteo
group_idTEXTYESFK → organization(id)Partido que aporta estos votos

Estas tres tablas extienden el esquema Popolo para soportar análisis de redes de poder. Modelan actores políticos externos, relaciones entre entidades y eventos políticos que influyen en el comportamiento legislativo.

Actores políticos fuera del legislativo: gobernadores, presidentes municipales, ex presidentes, dirigentes partidistas, jueces y otros que influyen en los resultados legislativos.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo AE01, AE02, etc.
nombreTEXTNONombre completo del actor externo
tipoTEXTNOCHECK IN (‘gobernador’,‘alcalde’,‘ex_presidente’,‘dirigente’,‘juez’,‘otro’)Tipo de actor externo
area_idTEXTYESFK → area(id)Área geográfica de influencia
start_dateTEXTYESFecha de inicio de su relevancia/cargo
end_dateTEXTYESFecha de fin de su relevancia/cargo
observacionesTEXTYESNotas de texto libre sobre el actor

Relaciones de poder entre dos entidades (personas, organizaciones o actores externos). Se usa para análisis de lealtad, mapeo de presión y seguimiento de coaliciones.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo RP01, RP02, etc.
source_typeTEXTNOCHECK IN (‘person’,‘organization’,‘actor_externo’)Tipo de la entidad origen
source_idTEXTNOID de la entidad origen
target_typeTEXTNOCHECK IN (‘person’,‘organization’,‘actor_externo’)Tipo de la entidad destino
target_idTEXTNOID de la entidad destino
tipoTEXTNOCHECK IN (‘lealtad’,‘presion’,‘influencia’,‘familiar’,‘clientelismo’,‘conflicto’,‘alianza’)Tipo de relación de poder
pesoINTEGERNOCHECK BETWEEN 1 AND 5Fuerza de la relación (1=muy débil, 5=muy fuerte)
start_dateTEXTYESFecha de inicio de la relación
end_dateTEXTYESFecha de fin de la relación
fuenteTEXTYESFuente de la información (URL o referencia)
notaTEXTYESNotas adicionales sobre la relación

Eventos políticos (reformas, crisis, acuerdos) que pueden o no estar vinculados a una moción legislativa.

ColumnTypeNullableConstraintsDescription
idTEXTNOPRIMARY KEYID único con prefijo EP01, EP02, etc.
fechaTEXTNOFecha del evento
tipoTEXTNOTipo de evento (texto libre: reforma, votacion, crisis, acuerdo, etc.)
descripcionTEXTNODescripción detallada del evento
consecuenciaTEXTYESConsecuencia o impacto del evento
fuente_urlTEXTYESURL de la fuente
motion_idTEXTYESFK → motion(id)Moción legislativa relacionada (si aplica)

-- Búsquedas por membresía
CREATE INDEX idx_membership_person ON membership(person_id);
CREATE INDEX idx_membership_org ON membership(org_id);
-- Búsquedas por evento de votación
CREATE INDEX idx_vote_event_motion ON vote_event(motion_id);
CREATE INDEX idx_vote_event_source ON vote_event(source_id);
-- Búsquedas por voto individual
CREATE INDEX idx_vote_voter ON vote(voter_id);
CREATE INDEX idx_vote_event ON vote(vote_event_id);
-- Agregaciones de conteo
CREATE INDEX idx_count_event ON count(vote_event_id);
CREATE INDEX idx_count_group ON count(group_id);
-- Recorridos de relaciones de poder
CREATE INDEX idx_relacion_source ON relacion_poder(source_type, source_id);
CREATE INDEX idx_relacion_target ON relacion_poder(target_type, target_id);
CREATE INDEX idx_relacion_tipo ON relacion_poder(tipo);
-- Análisis de lealtad
CREATE INDEX idx_person_corriente ON person(corriente_interna);
-- Filtrado de actores externos
CREATE INDEX idx_actor_tipo ON actor_externo(tipo);

Cuatro triggers aplican la restricción end_date >= start_date en las tablas person y membership, tanto para INSERT como para UPDATE.

-- Person: validar fechas en INSERT
CREATE TRIGGER trg_person_dates_insert
BEFORE INSERT ON person
BEGIN
SELECT RAISE(ABORT, 'end_date must be >= start_date')
WHERE NEW.end_date IS NOT NULL
AND NEW.start_date IS NOT NULL
AND NEW.end_date < NEW.start_date;
END;
-- Person: validar fechas en UPDATE
CREATE TRIGGER trg_person_dates_update
BEFORE UPDATE ON person
BEGIN
SELECT RAISE(ABORT, 'end_date must be >= start_date')
WHERE NEW.end_date IS NOT NULL
AND NEW.start_date IS NOT NULL
AND NEW.end_date < NEW.start_date;
END;
-- Membership: validar fechas en INSERT
CREATE TRIGGER trg_membership_dates_insert
BEFORE INSERT ON membership
BEGIN
SELECT RAISE(ABORT, 'end_date must be >= start_date')
WHERE NEW.end_date IS NOT NULL
AND NEW.start_date IS NOT NULL
AND NEW.end_date < NEW.start_date;
END;
-- Membership: validar fechas en UPDATE
CREATE TRIGGER trg_membership_dates_update
BEFORE UPDATE ON membership
BEGIN
SELECT RAISE(ABORT, 'end_date must be >= start_date')
WHERE NEW.end_date IS NOT NULL
AND NEW.start_date IS NOT NULL
AND NEW.end_date < NEW.start_date;
END;