Validación y auditoría
La validación de camara-senadores-mex es una lectura read-only de senado.db. No corrige datos ni reescribe tablas; produce un reporte de consistencia que separa fallas estructurales de advertencias aceptadas por límites históricos de la fuente.
Modo de lectura
El validador debe abrir SQLite con URI read-only:
file:senado.db?mode=ro
El validador usa sqlite3.connect(uri, uri=True) y define row_factory = sqlite3.Row para inspección por nombre de columna. El uso de mode=ro es parte del contrato: una auditoría no debe modificar el snapshot ni debe describirse como una conexión que reactive PRAGMAs de escritura o concurrencia.
Estados
| Estado | Significado | Acción esperada |
|---|---|---|
PASS | La condición cumple el contrato. | Aceptar. |
WARN | Anomalía conocida o históricamente tolerada. | Documentar y monitorear. |
FAIL | Ruptura del contrato estructural. | Corregir extracción, persistencia o fuente de datos. |
Los warnings aceptados no bloquean publicación documental si están explicados como límites de fuente o cobertura.
Snapshot auditado
Métricas de referencia del snapshot documentado:
| Métrica | Valor |
|---|---|
| Votaciones | 4,993 |
| Votos nominales senatoriales | 454,094 |
| Perfiles persistidos | 700 |
| IDs senatoriales distintos en votos | 737 |
| IDs con votos pero sin perfil | 37 |
| Votos ligados a IDs sin perfil | 29,879 |
| Votaciones sin votos | 7 |
| Votos vacíos | 14 |
| Partidos vacíos | 88 |
Las 7 votaciones sin votos son: 408, 621, 801, 848, 3697, 3698, 3848.
Distribución por legislatura
| Legislatura | Votos nominales |
|---|---|
| 60 | 61,924 |
| 61 | 65,869 |
| 62 | 82,856 |
| 63 | 73,790 |
| 64 | 64,099 |
| 65 | 76,953 |
| 66 | 28,603 |
Lectura de anomalías
- IDs sin perfil: warning aceptado si los votos conservan
senador_idinstitucional y el perfil no está disponible o no es parseable. - Votaciones sin votos: warning aceptado para los IDs listados; no deben inflarse con filas sintéticas.
- Votos o partidos vacíos: warning aceptado en conteos bajos; se preservan como evidencia de extracción.
P0 históricos cerrados
Dos riesgos históricos no deben tratarse como P0 activos:
- Parser HTML basado en counts del sidebar: obsoleto y resuelto por la arquitectura AJAX vigente.
- AJAX que no suma counts agregados: fuera de contrato/obsoleto como P0 activo; el contrato actual audita votos nominales persistidos y métricas derivadas.