🇨🇷
CR Decide 2026

⚙️ Detalles Técnicos del Análisis

Esta página está dirigida a personas con conocimientos técnicos que deseen entender cómo funciona el sistema de análisis. Si buscas una explicación más general, visita la página de metodología.


🐍 Stack Tecnológico

🐍

Python 3.10+

Lenguaje principal

Scripts de procesamiento de PDFs, extracción de propuestas y cálculo de puntajes.

🚀

Astro 4.x

Framework web

Generador de sitios estáticos para la visualización de resultados.


📄 Procesamiento de PDFs

PDF

PyMuPDF (fitz)

Activo

Librería de alto rendimiento para lectura y manipulación de documentos PDF.

pip install PyMuPDF

¿Para qué se usa?

  • Extracción de texto página por página
  • Detección de texto corrupto (fuentes mal embebidas)
  • Renderización de páginas como imágenes para OCR
📚 Documentación oficial →
👁️

Tesseract OCR

v5.5.1

Motor de reconocimiento óptico de caracteres (OCR) de código abierto, mantenido por Google.

# macOS brew install tesseract tesseract-lang # Ubuntu/Debian apt install tesseract-ocr tesseract-ocr-spa

¿Para qué se usa?

  • Lectura de PDFs con texto corrupto o escaneado
  • Extracción de texto de imágenes de páginas
  • Soporte multiidioma (español configurado)
📚 Repositorio GitHub →
🔗

pytesseract

Python wrapper

Wrapper de Python para Tesseract OCR que facilita su integración.

pip install pytesseract
📚 PyPI →
🖼️

Pillow (PIL)

Procesamiento de imágenes

Fork moderno de Python Imaging Library para manipulación de imágenes.

pip install Pillow

¿Para qué se usa?

  • Conversión de páginas PDF a imágenes PNG
  • Preparación de imágenes para OCR
📚 Documentación oficial →

⚙️ Configuración del OCR

# Configuración en process_plans_v7.py

# Resolución para renderizar páginas como imagen
RENDER_DPI = 200

# Configuración de Tesseract
# --psm 1: Automatic page segmentation with OSD
# -l spa: Idioma español
TESSERACT_CONFIG = '--psm 1 -l spa'

# Caracteres que indican fuentes corruptas
CORRUPT_CHARS = set([
    '\uf0b7', '\uf0a7', '\uf0d8', '\uf020', '\uf06c', 
    '\uf06f', '\uf073', '\uf061', '\uf065', '\uf06e',
    # ... más caracteres de fuentes privadas
])

# Umbral: si más del 2% del texto son caracteres corruptos, usar OCR
CORRUPT_THRESHOLD = 0.02

🔄 Flujo de Procesamiento

1

Lectura del PDF

fitz.open(pdf_path) abre el documento PDF.

2

Detección de Texto Corrupto

Se muestrean las primeras 10 páginas. Si >2% son caracteres de fuentes privadas, se activa OCR.

3

Extracción de Texto

Modo normal: page.get_text()
Modo OCR: Renderiza a imagen → Tesseract → texto

4

Búsqueda de Propuestas

Se buscan keywords por pilar y se extraen propuestas con contexto.

5

Evaluación, Penalización y Bonos

Se evalúan las 4 dimensiones, se aplican penalizaciones (fiscales, omisión, viabilidad legal), se calculan bonos (múltiples propuestas, calidad, financiamiento) y se generan flags informativos.

6

Generación de JSON

Se exportan los resultados a archivos JSON que consume el sitio web.


📊 Archivos de Datos Generados

Archivo Descripción Tamaño aprox.
candidates.json Datos de candidatos y partidos (editado manualmente) ~5 KB
pillars.json Definición de los 10 pilares y pesos ~2 KB
proposals.json Todas las propuestas extraídas con evidencia ~150 KB
candidate_scores.json Puntajes por pilar y totales por candidato ~100 KB
ranking.json Rankings ordenados (general, prioritario, crítico) ~12 KB
detailed_analysis.json Análisis detallado con fortalezas y debilidades ~50 KB

🔧 Ejecución del Análisis

# 1. Instalar dependencias
pip install PyMuPDF Pillow pytesseract

# 2. Instalar Tesseract (macOS)
brew install tesseract tesseract-lang

# 3. Ejecutar el análisis v7
cd analysis/
python process_plans_v7.py

# Salida esperada:
# ================================================================================
# PROCESADOR DE PLANES v7.0 - NEUTRAL + ESTRICTO + BONOS + VIABILIDAD + FLAGS
# 10 pilares | OCR automático | Penalizaciones | Bonos | Viabilidad legal | Flags informativos
# ================================================================================
# 📄 ACRM...
# 📄 CAC...
# ...
# ✅ PROCESO COMPLETADO

📐 Constantes de Penalización

# Penalizaciones por irresponsabilidad (basadas en ley vigente)
FISCAL_PENALTIES = {
    "attacks_fiscal_rule": -2,      # Ataca la regla fiscal (Ley 9635)
    "proposes_debt_increase": -1,   # Propone más deuda sin plan
}

# Penalizaciones por omisión (urgencias nacionales)
OMISSION_PENALTIES = {
    "ignores_security_operations": -1,    # No menciona seguridad operativa
    "ignores_ccss_crisis": -1,            # No menciona crisis CCSS
    "ignores_formal_employment": -0.5,    # No menciona empleo formal
    "ignores_organized_crime": -0.5,      # No menciona crimen organizado
    "missing_priority_pillar": -0.5,      # Por cada pilar prioritario faltante
}

# Penalizaciones por viabilidad legal (v7)
VIABILITY_PENALTIES = {
    "violates_separation_powers": -1.0,    # Viola separación de poderes
    "violates_fundamental_rights": -1.0,    # Viola derechos fundamentales
    "violates_constitutional_guarantees": -1.0,  # Viola garantías constitucionales
    "violates_constitutional_procedures": -0.5,  # Viola procedimientos constitucionales
}

# Bonos (v7)
BONUSES = {
    "multiple_proposals": 1.0,      # 3+ propuestas válidas por pilar
    "complete_proposal": 0.25,      # Propuesta completa (4/4 dimensiones)
    "funding_clarity": 0.1,         # Propuesta con financiamiento claro (score >=3)
}

# Pilares prioritarios (P3=Seguridad, P4=Salud, P1=Fiscal, P7=Reforma)
PRIORITY_PILLARS = {"P3", "P4", "P1", "P7"}

# Pesos por pilar (v7)
PILLAR_WEIGHTS = {
    "P1": 0.14,  # Sostenibilidad fiscal
    "P2": 0.11,  # Empleo y competitividad
    "P3": 0.18,  # Seguridad ciudadana
    "P4": 0.16,  # Salud pública (CCSS)
    "P5": 0.10,  # Educación
    "P6": 0.03,  # Ambiente
    "P7": 0.12,  # Reforma del Estado
    "P8": 0.05,  # Política social
    "P9": 0.02,  # Política exterior
    "P10": 0.09, # Infraestructura
}

# Flags Informativos (v7 - NO penalizan, solo informan)
INFORMATIVE_FLAGS = {
    "current_proposals": {
        "violates_separation_powers": "Viola separación de poderes",
        "violates_fundamental_rights": "Viola derechos fundamentales",
        "violates_constitutional_guarantees": "Viola garantías constitucionales",
        "violates_constitutional_procedures": "Viola procedimientos constitucionales",
    },
    "dictatorial_patterns": "Similitudes con modelos dictatoriales (Cuba, Venezuela)",
    "power_negotiation_requirements": "Requisitos de negociación entre poderes",
    "historical": "Evidencia histórica verificable",
    "contradictions": "Contradicciones histórico-actual",
}

ℹ️ Flags Informativos (v7)

¿Qué son los Flags Informativos?

Los flags informativos NO penalizan el score. Son señales de información objetiva basadas en evidencia verificable que ayudan al ciudadano a tomar decisiones más informadas.

1. Propuestas Actuales Problemáticas

Detecta violaciones constitucionales en propuestas actuales (separación de poderes, derechos fundamentales, garantías constitucionales, procedimientos).

2. Similitudes con Modelos Dictatoriales

Detecta patrones objetivos similares a modelos históricos (Cuba, Venezuela) basados en evidencia verificable. NO juzga ideología, solo detecta patrones de comportamiento.

3. Requisitos de Negociación

Indica complejidad de implementación (requiere aprobación de Asamblea, mayoría calificada, coordinación entre poderes). NO es un problema, solo informa sobre complejidad.

4. Evidencia Histórica Verificable

Muestra evidencia histórica verificable de comportamiento del candidato/partido basada en sentencias judiciales, resoluciones internacionales, informes de Contraloría.

5. Contradicciones Histórico-Actual

Detecta patrones consistentes entre evidencia histórica y propuestas actuales problemáticas.

⚠️ Importante: Los flags informativos NO afectan el score. Son solo información para que el ciudadano pueda tomar decisiones más informadas.


Motor de análisis (Neutral + Estricto + Bonos + Viabilidad Legal + Flags Informativos) · Enero 2026

⚙️ Detalles Técnicos

🐍 Stack

🐍 Python 3.10+ Scripts de procesamiento
🚀 Astro 4.x Framework web

📄 Librerías

PyMuPDF pip install PyMuPDF
Tesseract OCR brew install tesseract
Pillow pip install Pillow

🔄 Flujo

1. Leer PDF
2. Detectar corrupción
3. Extraer texto (OCR si es necesario)
4. Buscar propuestas
5. Evaluar + Penalizar + Bonos
6. Generar JSON

📐 Constantes v7

Penalizaciones Fiscales Ataca regla: -2 | Más deuda: -1
Penalizaciones Omisión Seguridad: -1 | CCSS: -1 | Empleo: -0.5
Viabilidad Legal Separación poderes: -1.0 | Derechos: -1.0
Bonos Múltiples: +1.0 | Completa: +0.25 | Financiamiento: +0.1

ℹ️ Flags Informativos

NO penalizan, solo informan:

⚠️ Propuestas problemáticas 📚 Similitudes históricas 🤝 Requisitos negociación 📖 Evidencia histórica 🔄 Contradicciones

⚙️ Detalles Técnicos del Análisis

Esta página está dirigida a personas con conocimientos técnicos que deseen entender cómo funciona el sistema de análisis. Si busca una explicación más general, visite la página de metodología.

🐍 Stack Tecnológico

El sistema utiliza Python 3.10+ para el procesamiento de documentos y Astro 4.x como framework web para la visualización de resultados.

📄 Procesamiento de PDFs

El sistema utiliza las siguientes librerías para procesar los documentos PDF:

PyMuPDF (fitz)

Librería de alto rendimiento para lectura y manipulación de documentos PDF. Se utiliza para extraer texto página por página, detectar texto corrupto (fuentes mal embebidas) y renderizar páginas como imágenes para OCR.

pip install PyMuPDF

Tesseract OCR

Motor de reconocimiento óptico de caracteres (OCR) de código abierto, mantenido por Google. Se utiliza para leer PDFs con texto corrupto o escaneado, y para extraer texto de imágenes de páginas.

brew install tesseract tesseract-lang

Pillow (PIL)

Fork moderno de Python Imaging Library para manipulación de imágenes. Se utiliza para convertir páginas PDF a imágenes PNG y preparar imágenes para OCR.

pip install Pillow

🔄 Flujo de Procesamiento

El sistema procesa los planes de gobierno en los siguientes pasos:

  1. Lectura del PDF: Se abre el documento usando fitz.open(pdf_path).
  2. Detección de Texto Corrupto: Se muestrean las primeras 10 páginas. Si más del 2% son caracteres de fuentes privadas, se activa OCR.
  3. Extracción de Texto: En modo normal se usa page.get_text(). En modo OCR se renderiza a imagen y luego se procesa con Tesseract.
  4. Búsqueda de Propuestas: Se buscan keywords por pilar y se extraen propuestas con contexto.
  5. Evaluación, Penalización y Bonos: Se evalúan las 4 dimensiones, se aplican penalizaciones (fiscales, omisión, viabilidad legal), se calculan bonos (múltiples propuestas, calidad, financiamiento) y se generan flags informativos.
  6. Generación de JSON: Se exportan los resultados a archivos JSON que consume el sitio web.

📐 Constantes de Penalización y Bonos (v7)

El sistema utiliza las siguientes constantes para calcular los puntajes:

Penalizaciones Fiscales

  • Ataca regla fiscal: -2 puntos
  • Propone más deuda sin plan: -1 punto

Penalizaciones por Omisión

  • Ignora seguridad operativa: -1 punto
  • Ignora crisis CCSS: -1 punto
  • Ignora empleo formal: -0.5 puntos
  • Ignora crimen organizado: -0.5 puntos
  • Pilar prioritario faltante: -0.5 puntos

Penalizaciones por Viabilidad Legal

  • Viola separación de poderes: -1.0 puntos
  • Viola derechos fundamentales: -1.0 puntos
  • Viola garantías constitucionales: -1.0 puntos
  • Viola procedimientos constitucionales: -0.5 puntos

Bonos

  • Múltiples propuestas (3+ por pilar): +1.0 puntos
  • Propuesta completa (4/4 dimensiones): +0.25 puntos
  • Financiamiento claro (score >=3): +0.1 puntos

ℹ️ Flags Informativos (v7)

Los flags informativos NO penalizan el score. Son señales de información objetiva basadas en evidencia verificable que ayudan al ciudadano a tomar decisiones más informadas.

1. Propuestas Actuales Problemáticas

Detecta violaciones constitucionales en propuestas actuales (separación de poderes, derechos fundamentales, garantías constitucionales, procedimientos).

2. Similitudes con Modelos Dictatoriales

Detecta patrones objetivos similares a modelos históricos (Cuba, Venezuela) basados en evidencia verificable. NO juzga ideología, solo detecta patrones de comportamiento.

3. Requisitos de Negociación

Indica complejidad de implementación (requiere aprobación de Asamblea, mayoría calificada, coordinación entre poderes). NO es un problema, solo informa sobre complejidad.

4. Evidencia Histórica Verificable

Muestra evidencia histórica verificable de comportamiento del candidato/partido basada en sentencias judiciales, resoluciones internacionales, informes de Contraloría.

5. Contradicciones Histórico-Actual

Detecta patrones consistentes entre evidencia histórica y propuestas actuales problemáticas.

⚠️ Importante: Los flags informativos NO afectan el score. Son solo información para que el ciudadano pueda tomar decisiones más informadas.