Cómo se calcula el cumplimiento
El porcentaje de una política no se escribe a mano: se deriva de la programación anual de sus acciones y de lo que se ha reportado como ejecutado. Esta página documenta la cadena completa y la contrasta con los datos de producción.
totalPolitica para … de las …
políticas vigentes. Las que no cuadran no son un error de la fórmula: es el valor guardado que quedó desactualizado
(ver Cuándo se persiste).Los tres datos de entrada
| Dato | Dónde vive | Qué es |
|---|---|---|
anios | en la acción | Arreglo con lo programado para cada año, en el orden del plan. Su longitud define el horizonte de esa acción. |
ejecutado | PolariScore/seguimientos/{idAccion} | Mapa por año calendario con lo efectivamente logrado. |
importancia_objetivo | en el objetivo | Peso del objetivo dentro de su política. Los objetivos de una política deben sumar 1. |
anios es un
arreglo por posición y ejecutado es un mapa por año. Para cruzarlos hace falta saber en
qué año arranca la política:fecha_politica // "01/01/2023" → 2023año de la posición i = anioInicio + i
Si ese año inicial se toma mal, todo el cálculo se desplaza y el resultado cae a casi cero sin que nada avise. Es exactamente lo que le pasa hoy al KPI global del tablero de la v1 —el caso está medido en Las dos versiones—.
1. Cumplimiento de una acción
ejecutado = Σi min( ejecutado[anioInicio + i] , anios[i] ) // tope por año
cumplimiento = programado > 0 ? ejecutado / programado × 100 : 0
El min es deliberado: si una acción programada en 1 reporta 3, ese exceso no compensa
los años en que no se hizo nada. El tope se aplica año por año, no al total.
Por qué el tope es por año y no al final
[1,1,1] que reporta
[3,0,0] daría 100 %: se habría "adelantado todo el primer año". Aplicándolo por año da 33 %, que es lo
que refleja la realidad de una política que se ejecuta a lo largo del tiempo.2. Cumplimiento de un objetivo
No es el promedio de sus acciones: se agregan primero las sumas y se divide al final. Eso hace que las acciones con más programación pesen más dentro del objetivo, sin necesidad de un peso explícito por acción.
importancia_accion existe en los datos pero
no interviene en este cálculo. Solo la usa el KPI agregado del tablero de la v1. Si esperabas que
ponderara dentro del objetivo, no lo hace.3. Total de la política
totalPolitica = Σobjetivos aporte
Es decir: cada objetivo puede aportar como máximo su peso expresado en puntos porcentuales. Si los pesos suman 1, el total llega a 100 % cuando todo está ejecutado.
Ejemplo real — política P-001
"Política de Formación Profesoral", con seis objetivos:
| Objetivo | Peso | Programado | Ejecutado | Cumplimiento | Aporte |
|---|---|---|---|---|---|
| Cargando desde producción… | |||||
Los pesos y por qué importan tanto
Un peso mal cargado no produce ningún error visible: produce un porcentaje silenciosamente equivocado.
Σ pesos = 1
Es la condición para que la política pueda llegar al 100 %. Nada en la aplicación lo valida.
Σ pesos < 1
El techo baja: con 0,9 la política nunca podrá pasar del 90 %, aunque todo esté ejecutado.
Σ pesos > 1
El total puede superar el 100 %, lo que rompe las gráficas y la lectura del gauge.
importancia_politica no es un peso del conjunto
Cada política tiene también un campo importancia_politica. No se usa para ponderar
unas políticas contra otras: la suma de las 22 da …, no 1. Ninguna pantalla lo emplea
hoy en el cálculo del cumplimiento; conviene tratarlo como un dato descriptivo heredado del formato de carga.
Cuándo se persiste el total
El total no se recalcula en un proceso nocturno: se recalcula cuando alguien abre la ficha de la política. Si el valor nuevo difiere del guardado en más de 0,01 puntos, entonces:
- Se sobrescribe
PolariScore/politicas/{id}/totalPolitica. - Se agrega una entrada en
historial_total_politica/{DD-MM-AAAA}con ese valor.
El historial guarda una entrada por día: varias recalculadas el mismo día sobrescriben la misma clave. Es lo que alimenta la curva de evolución de la política.
Cómo se registra lo ejecutado
Desde la ficha de la acción, con el modal de evaluación: una pestaña por año, y al guardar se escribe
seguimientos/{idAccion}/ejecutado junto con una copia fechada del estado completo:
PolariScore/seguimientos/IAP-001 = {
ejecutado: { "2023": 1, "2024": 1, "2025": 1, "2026": 0, "2027": 0, "2028": 0 },
historialEvaluacion: {
"04-02-2026": { ejecutado: {…}, fecha: "2026-02-04T23:11:52.389Z", id_usuario: "…@unitropico_edu_co" },
"04-02-2026_1": { … } // segunda evaluación del mismo día
}
}
- La clave del historial es
DD-MM-AAAA; si ya existe ese día se añade el sufijo_1,_2… id_usuarioes el correo saneado de quien evaluó: los puntos pasan a guiones bajos.- La escritura del año es por hijo, no reemplazando el objeto completo: así ampliar el horizonte de una política no borra los años ya registrados.
Horizontes distintos por política
No todas las políticas duran lo mismo. El número de años lo determina el propio dato —la longitud de
anios en cada acción— y no una constante del código.
Longitud de anios | Acciones | Comentario |
|---|---|---|
| Cargando… | ||
anios debe guardarse como arreglo
contiguo. Si queda como objeto disperso ({0:1, 2:1}), su longitud subcuenta y el
horizonte de esa acción se acorta sin aviso.Checklist de diagnóstico
| Síntoma | Causa habitual |
|---|---|
| Registré ejecución y la política no se movió | El total se refresca al abrir la ficha de la política, no al guardar la acción. |
| La política no llega al 100 % ni con todo ejecutado | Los pesos de sus objetivos suman menos de 1. |
| Una acción reporta de más y no sube nada | El tope por año descarta el exceso; revisa si el año correcto es otro. |
| El cumplimiento cayó tras ampliar el horizonte | Se añadieron años programados sin ejecución: el denominador creció. |
| El tablero muestra un cumplimiento global casi nulo | Es el KPI de la v1, que desplaza los años. Ver Las dos versiones. |