← Volver al generador API Swagger
Esta página describe las tablas y campos que usa la API web con MySQL
(sql/mysql_demo.sql). Sirve para que, cuando un partido te entregue sus datos, sepas
qué columnas mapear y cómo encajan provincia → municipio → recinto → colegio → personas.
La app de escritorio original usa SQL Server con nombres parecidos; al vender migraciones MySQL, usa este modelo como contrato.
provincia (id)
└── municipio (id, id_provincia)
└── recinto (id, municipio_id)
└── colegio (id_colegio, id_recinto)
padron: cada persona → id_colegio + id_provincia + (id_municipio O id_distrito_municipal según DM)
delegados_funcionarios: cada fila → colegio_id
Distrito municipal (DM): si el municipio es un DM, en municipio.descripcion suele ir texto con (DM) y descripcion_padre es el nombre del municipio “padre” para cabeceras del PDF. En padron, si aplica DM, se filtra por id_distrito_municipal; si no, por id_municipio (igual que la lógica en Database.py).
provinciaCatálogo de provincias. La API lista con GET /provincias.
| Columna | Tipo | Notas para mapeo |
|---|---|---|
id | VARCHAR(32) PK | Identificador estable (ej. código oficial o UUID tuyo). |
descripcion | VARCHAR(255) | Nombre visible (en la app de escritorio suele mostrarse en mayúsculas). |
municipio| Columna | Tipo | Notas para mapeo |
|---|---|---|
id | VARCHAR(32) PK | ID del municipio o del distrito municipal (según tu modelo electoral). |
id_provincia | VARCHAR(32) FK | Debe existir en provincia.id. |
descripcion | VARCHAR(255) | Nombre. Si es DM, conviene incluir (DM) en el texto para la lógica de cabecera/padrón. |
descripcion_padre | VARCHAR(255) NULL | Solo útil con DM: nombre del municipio padre para el PDF. |
recinto| Columna | Tipo | Notas para mapeo |
|---|---|---|
id | VARCHAR(32) PK | ID del recinto electoral. |
municipio_id | VARCHAR(32) FK | Debe coincidir con municipio.id (en la vista sale como IdDistritoMunicipal). |
codigo_recinto | VARCHAR(32) | Código JCE o interno. |
descripcion | VARCHAR(512) | Nombre del recinto. |
direccion | VARCHAR(512) | Dirección física (sale en cabecera del PDF). |
estatus_recinto | VARCHAR(32) NULL | NULL = activo. Otro valor puede excluir el recinto de listados en SQL Server; en MySQL demo la API filtra IS NULL. |
colegio| Columna | Tipo | Notas para mapeo |
|---|---|---|
id_colegio | VARCHAR(64) PK | ID único del colegio (enlace desde padron y delegados). |
id_recinto | VARCHAR(32) FK | Debe existir en recinto.id. |
descripcion | VARCHAR(255) | Nombre del colegio. |
codigo_colegio | VARCHAR(32) | Código numérico o alfanumérico visible en el PDF. |
fotos_prm| Columna | Tipo | Notas para mapeo |
|---|---|---|
cedula | VARCHAR(20) PK | Misma cédula que en padron o delegados_funcionarios. |
imagen | LONGBLOB | Bytes de la foto (JPG/PNG). Padrón usa INNER JOIN: hace falta foto para cada votante listado. Delegados: LEFT JOIN (puede faltar y usa imagen por defecto en código). |
padron (votantes para PDF “Padrón”)Orden de columnas en SELECT coincide con el constructor Votante en Python.
| Columna | Tipo | Notas para mapeo |
|---|---|---|
cedula | VARCHAR(20) PK | 11 dígitos sin guiones recomendado. |
nombres | VARCHAR(120) | Nombre(s). |
apellido1, apellido2 | VARCHAR(120) | Apellidos. |
direccion, sector | VARCHAR(255) | Domicilio. |
telefono, celular | VARCHAR(40) | Contacto. |
empleado | TINYINT | 0 o 1. |
voto2016, voto2020 | TINYINT | 0 o 1 (concurrencia en cuadro). |
afprm, affp | TINYINT | 0 o 1 (afiliación). |
asistenciasocial | TINYINT | 0 o 1. |
id_provincia | VARCHAR(32) FK | Provincia del votante. |
id_municipio | VARCHAR(32) NULL | Si no es filtro DM, debe coincidir con municipio.id del municipio “normal”. |
id_distrito_municipal | VARCHAR(32) NULL | Si el filtro es DM, rellenar con el id del registro municipio DM y dejar coherente con la consulta. |
id_colegio | VARCHAR(64) FK | Colegio donde vota. |
delegados_funcionarios (PDF “Delegados”)El PDF coloca filas según tipo_oficio (texto en minúsculas).
| Columna | Tipo | Notas para mapeo |
|---|---|---|
cedula | VARCHAR(20) PK | Cédula. |
nombre | VARCHAR(200) | Nombre completo en un solo campo (a diferencia del padrón). |
telefono, celular | VARCHAR(40) | Contacto. |
tipo_oficio | VARCHAR(80) | Ver lista abajo; debe coincidir exacto (minúsculas) para el diseño del PDF. |
voto2016, voto2020, asistenciasocial | TINYINT | 0/1. |
afprm, affp, empleado | TINYINT | 0/1. |
direccion, sector | VARCHAR(255) | Domicilio. |
colegio_id | VARCHAR(64) FK | Debe ser colegio.id_colegio. |
vw_recinto_cascadaExpone: IDRecinto, CodigoRecinto, DescripcionRecinto, IdDistritoMunicipal (= municipio_id), EstatusRecinto. La API usa esta vista para listar recintos por municipio.
vw_colegio_cascadaExpone: IDColegio, CodigoColegio, codigocircunscripcion (en demo fijo 01; en producción puedes ampliar la vista o tabla para circunscripción real).
La web arma este objeto desde los combos; si mapeas a mano, estos son los nombres de propiedad (snake_case):
| Campo JSON | Origen típico |
|---|---|
provincia | provincia.id |
provincia_desc | provincia.descripcion |
municipio | municipio.id |
municipio_desc | Nombre para cabecera (tras lógica DM si aplica). |
distrito_desc | Nombre del distrito si es DM; si no, null o repetido según tu flujo. |
recinto | recinto.id |
recinto_desc, recinto_codigo | Descripción y código del recinto. |
direccion_recinto | recinto.direccion |
colegio | colegio.id_colegio |
colegio_desc, colegio_codigo | Descripción y código del colegio. |
circunscripcion_codigo | Desde vista vw_colegio_cascada (demo: 01). |
En Python interno estos mismos conceptos están en el diccionario colegio_a_generar (info_colegio_a_generar.py): claves provincia, provincia_desc, municipio, municipio_desc, distrito_desc, recinto, recinto_desc, recinto_codigo, direccion_recinto, colegio, colegio_desc, colegio_codigo, circunscripcion_codigo.
tipo_oficio (delegados)El generador de PDF espera estos textos en minúsculas (compara con .lower()):
principal, suplentepresidente, secretario, sustituto de secretarioprimer vocal, segundo vocal
home.py y Database.py siguen apuntando a tablas/vistas en SQL Server
(Provincia, Municipio, vwRecintoCascada, Recinto, Colegio, vwColegioCascada, Padron, delegados_funcionarios, dbPRM.dbo.FOTOS_PRM_PRM).
El significado de los datos es el mismo que arriba; cambian nombres de tablas y motor. Si un cliente solo usará la web MySQL, este documento es el contrato principal.