Diccionario de Datos
Resumen
Sección titulada «Resumen»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.
Convenciones
Sección titulada «Convenciones»Tablas Principales
Sección titulada «Tablas Principales»Áreas geográficas utilizadas para mapear distritos electorales, estados y circunscripciones.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo A01, A02, etc. |
| nombre | TEXT | NO | — | Nombre del área (estado, distrito o circunscripción) |
| clasificacion | TEXT | NO | CHECK IN (‘estado’,‘distrito’,‘circunscripcion’) | Clasificación del área geográfica |
| parent_id | TEXT | YES | FK → area(id) | Área padre (ej. distrito dentro de un estado) |
| geometry | TEXT | YES | — | Geometría GeoJSON opcional para visualización en mapa |
organization
Sección titulada «organization»Partidos políticos, bancadas parlamentarias, coaliciones, organismos de gobierno y otras organizaciones.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo O01, O02, etc. |
| nombre | TEXT | NO | UNIQUE | Nombre oficial de la organización |
| abbr | TEXT | YES | — | Abreviatura (MORENA, PAN, PRI, etc.) |
| clasificacion | TEXT | NO | CHECK IN (‘partido’,‘bancada’,‘coalicion’,‘gobierno’,‘institucion’,‘otro’) | Tipo de organización |
| fundacion | TEXT | YES | — | Fecha de fundación en formato ISO 8601 |
| disolucion | TEXT | YES | — | Fecha de disolución en formato ISO 8601 |
Legisladores y otras personas rastreadas en el sistema.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo P01, P02, etc. |
| nombre | TEXT | NO | — | Nombre completo de la persona |
| fecha_nacimiento | TEXT | YES | — | Fecha de nacimiento en formato ISO 8601 |
| genero | TEXT | YES | CHECK IN (‘M’,‘F’,‘NB’) | Género: M=masculino, F=femenino, NB=no binario |
| curul_tipo | TEXT | YES | CHECK IN (‘mayoria_relativa’,‘plurinominal’,‘suplente’) | Tipo de curul: mayoría relativa, representación proporcional o suplente |
| circunscripcion | INTEGER | YES | CHECK BETWEEN 1 AND 5 | Circunscripción electoral (1-5) |
| start_date | TEXT | YES | — | Fecha de inicio del período legislativo |
| end_date | TEXT | YES | — | Fecha de fin del período legislativo |
| corriente_interna | TEXT | YES | CHECK IN (‘Monreal’,‘AMLO’,‘Sheinbaum’,‘institucionalista’,NULL) | Corriente interna del partido (para análisis de lealtad) |
| vulnerabilidad | TEXT | YES | CHECK IN (‘alta’,‘media’,‘baja’,NULL) | Nivel estimado de vulnerabilidad (teoría de juegos) |
| observaciones | TEXT | YES | — | Notas de texto libre sobre el legislador |
| identifiers_json | TEXT | YES | — | JSON con identificadores externos (ej. {"sitl_id": 108}) |
membership
Sección titulada «membership»Vincula a una persona con una organización mediante un rol específico y un período de tiempo.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo M01, M02, etc. |
| person_id | TEXT | NO | FK → person(id) ON DELETE CASCADE | Referencia a la persona |
| org_id | TEXT | NO | FK → organization(id) ON DELETE CASCADE | Referencia a la organización |
| rol | TEXT | NO | — | Rol dentro de la organización (diputado, senador, suplente) |
| label | TEXT | YES | — | Descripción legible (ej. “Diputado plurinominal, Circ. 4”) |
| start_date | TEXT | NO | — | Fecha de inicio de la membresía |
| end_date | TEXT | YES | — | Fecha de fin (NULL = activa actualmente) |
| on_behalf_of | TEXT | YES | FK → 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.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo T01, T02, etc. |
| org_id | TEXT | NO | FK → organization(id) | Organización (cámara) a la que pertenece el cargo |
| area_id | TEXT | YES | FK → area(id) | Área geográfica asociada al cargo |
| label | TEXT | NO | — | Descripción legible del cargo |
| start_date | TEXT | NO | — | Fecha de inicio del cargo |
| end_date | TEXT | YES | — | Fecha de fin del cargo |
Iniciativas legislativas: reformas constitucionales, leyes secundarias y proyectos de ley ordinarios.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo Y01, Y02, etc. |
| texto | TEXT | NO | — | Texto completo o resumen de la iniciativa |
| clasificacion | TEXT | NO | CHECK IN (‘reforma_constitucional’,‘ley_secundaria’,‘ordinaria’,‘otra’) | Tipo de iniciativa legislativa |
| requirement | TEXT | NO | CHECK IN (‘mayoria_simple’,‘mayoria_calificada’,‘unanime’) | Tipo de mayoría requerida para aprobar |
| result | TEXT | YES | CHECK IN (‘aprobada’,‘rechazada’,‘pendiente’,‘retirada’,NULL) | Resultado de la votación (NULL si aún no se vota) |
| date | TEXT | YES | — | Fecha de la votación |
| legislative_session | TEXT | YES | — | Nombre del período legislativo (ej. “LXVI Legislatura”) |
| fuente_url | TEXT | YES | — | URL de la fuente oficial |
vote_event
Sección titulada «vote_event»Un evento de votación específico (lista nominal) sobre una moción, realizado por una cámara.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo VE01, VE02, etc. |
| motion_id | TEXT | NO | FK → motion(id) | Referencia a la moción votada |
| start_date | TEXT | NO | — | Fecha/hora en que inició el evento de votación |
| organization_id | TEXT | NO | FK → organization(id) | Cámara que realizó la votación |
| result | TEXT | YES | CHECK IN (‘aprobada’,‘rechazada’,‘empate’,NULL) | Resultado de la votación |
| sitl_id | INTEGER | YES | — | Identificador de votación del sistema SITL (parámetro votaciont) |
| voter_count | INTEGER | YES | — | Número de legisladores que participaron |
| legislatura | TEXT | YES | — | Identificador de legislatura (LX, LXI, …, LXVI) |
| requirement | TEXT | YES | CHECK IN (‘mayoria_simple’,‘mayoria_calificada’,‘unanime’,NULL) | Requisito de mayoría (copiado de la moción) |
| source_id | TEXT | YES | — | ID del portal original para deduplicación entre fuentes |
| identifiers_json | TEXT | YES | — | JSON con identificadores externos Popolo |
Voto individual emitido por un legislador en un evento de votación.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo V01, V02, etc. |
| vote_event_id | TEXT | NO | FK → vote_event(id) | Referencia al evento de votación |
| voter_id | TEXT | NO | FK → person(id) | Referencia al legislador que votó |
| option | TEXT | NO | CHECK IN (‘a_favor’,‘en_contra’,‘abstencion’,‘ausente’) | Opción del voto: a favor, en contra, abstención, ausente |
| ”group” | TEXT | YES | — | Partido/bloque al que pertenecía el legislador al momento de votar |
Nota: El nombre de columna
groupes 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.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo C01, C02, etc. |
| vote_event_id | TEXT | NO | FK → vote_event(id) | Referencia al evento de votación |
| option | TEXT | NO | CHECK IN (‘a_favor’,‘en_contra’,‘abstencion’,‘ausente’) | Opción de voto que se está contando |
| value | INTEGER | NO | CHECK >= 0 | Número de votos en este conteo |
| group_id | TEXT | YES | FK → organization(id) | Partido que aporta estos votos |
Tablas de Extensión
Sección titulada «Tablas de Extensión»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.
actor_externo
Sección titulada «actor_externo»Actores políticos fuera del legislativo: gobernadores, presidentes municipales, ex presidentes, dirigentes partidistas, jueces y otros que influyen en los resultados legislativos.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo AE01, AE02, etc. |
| nombre | TEXT | NO | — | Nombre completo del actor externo |
| tipo | TEXT | NO | CHECK IN (‘gobernador’,‘alcalde’,‘ex_presidente’,‘dirigente’,‘juez’,‘otro’) | Tipo de actor externo |
| area_id | TEXT | YES | FK → area(id) | Área geográfica de influencia |
| start_date | TEXT | YES | — | Fecha de inicio de su relevancia/cargo |
| end_date | TEXT | YES | — | Fecha de fin de su relevancia/cargo |
| observaciones | TEXT | YES | — | Notas de texto libre sobre el actor |
relacion_poder
Sección titulada «relacion_poder»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.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo RP01, RP02, etc. |
| source_type | TEXT | NO | CHECK IN (‘person’,‘organization’,‘actor_externo’) | Tipo de la entidad origen |
| source_id | TEXT | NO | — | ID de la entidad origen |
| target_type | TEXT | NO | CHECK IN (‘person’,‘organization’,‘actor_externo’) | Tipo de la entidad destino |
| target_id | TEXT | NO | — | ID de la entidad destino |
| tipo | TEXT | NO | CHECK IN (‘lealtad’,‘presion’,‘influencia’,‘familiar’,‘clientelismo’,‘conflicto’,‘alianza’) | Tipo de relación de poder |
| peso | INTEGER | NO | CHECK BETWEEN 1 AND 5 | Fuerza de la relación (1=muy débil, 5=muy fuerte) |
| start_date | TEXT | YES | — | Fecha de inicio de la relación |
| end_date | TEXT | YES | — | Fecha de fin de la relación |
| fuente | TEXT | YES | — | Fuente de la información (URL o referencia) |
| nota | TEXT | YES | — | Notas adicionales sobre la relación |
evento_politico
Sección titulada «evento_politico»Eventos políticos (reformas, crisis, acuerdos) que pueden o no estar vinculados a una moción legislativa.
| Column | Type | Nullable | Constraints | Description |
|---|---|---|---|---|
| id | TEXT | NO | PRIMARY KEY | ID único con prefijo EP01, EP02, etc. |
| fecha | TEXT | NO | — | Fecha del evento |
| tipo | TEXT | NO | — | Tipo de evento (texto libre: reforma, votacion, crisis, acuerdo, etc.) |
| descripcion | TEXT | NO | — | Descripción detallada del evento |
| consecuencia | TEXT | YES | — | Consecuencia o impacto del evento |
| fuente_url | TEXT | YES | — | URL de la fuente |
| motion_id | TEXT | YES | FK → motion(id) | Moción legislativa relacionada (si aplica) |
Referencia de Índices
Sección titulada «Referencia de Índices»-- Búsquedas por membresíaCREATE INDEX idx_membership_person ON membership(person_id);CREATE INDEX idx_membership_org ON membership(org_id);
-- Búsquedas por evento de votaciónCREATE 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 individualCREATE INDEX idx_vote_voter ON vote(voter_id);CREATE INDEX idx_vote_event ON vote(vote_event_id);
-- Agregaciones de conteoCREATE INDEX idx_count_event ON count(vote_event_id);CREATE INDEX idx_count_group ON count(group_id);
-- Recorridos de relaciones de poderCREATE 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 lealtadCREATE INDEX idx_person_corriente ON person(corriente_interna);
-- Filtrado de actores externosCREATE INDEX idx_actor_tipo ON actor_externo(tipo);Referencia de Triggers
Sección titulada «Referencia de Triggers»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 INSERTCREATE TRIGGER trg_person_dates_insertBEFORE INSERT ON personBEGIN 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 UPDATECREATE TRIGGER trg_person_dates_updateBEFORE UPDATE ON personBEGIN 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 INSERTCREATE TRIGGER trg_membership_dates_insertBEFORE INSERT ON membershipBEGIN 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 UPDATECREATE TRIGGER trg_membership_dates_updateBEFORE UPDATE ON membershipBEGIN 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;