>
arrow_back Prototipos
Transparencia
En vivo

Monitor Alta Dirección Pública

¿En qué etapa va cada concurso de alta dirección del Estado — y cuándo debería reabrirse cada cargo?

FastAPI · APScheduler · SQLite · 7.092 concursos · :8009

Estado
En vivo · ingesta diaria
Fuente de datos
3 APIs Servicio Civil (ADP)
Stack
FastAPI · APScheduler · SQLite
Cadencia
Snapshot diario 06:30 CLT
Cobertura
7.092 concursos · 429 instituciones
Infraestructura
Raspberry Pi · $0 cloud

El problema

El Sistema de Alta Dirección Pública del Servicio Civil concursa los cargos directivos del Estado, pero su portal muestra los concursos como listas sueltas por etapa. Es difícil ver, de un vistazo, en qué punto del proceso va cada cargo de una institución — y casi imposible anticipar cuándo un cargo volverá a concursarse. Quise convertir esas listas en una línea de tiempo legible, tipo carta Gantt agrupada por servicio público.

Qué construí

Prototipé un dashboard que ingiere las tres APIs oficiales del Servicio Civil, las unifica en una base local y dibuja una carta Gantt de los concursos activos, agrupados por institución (estilo Jira), más una estimación de cuándo debería reabrirse cada cargo.

  • check_circle Integra las tres APIs JSON oficiales (postulación, evaluación e histórico de ~6.900 concursos finalizados) con autenticación Basic que el propio portal público expone.
  • check_circle Una carta Gantt agrupa los concursos activos por institución y muestra cada cargo en su etapa actual, con su ventana de postulación real.
  • check_circle Un buscador global cubre las 429 instituciones (activas e históricas): al elegir una se abre su historia completa por cargo, con carga diferida.
  • check_circle Para cada cargo con suficiente historia, estima la próxima apertura según la cadencia mediana entre sus concursos pasados.
  • check_circle Un snapshot diario (06:30, hora de Santiago) reconstruye las transiciones de etapa, que la fuente no fecha. Corre 24/7 sobre una Raspberry Pi, $0 cloud.

Qué es real y qué es estimado

Esta es la parte donde la honestidad importa más: el dashboard separa con cuidado el dato oficial de la inferencia.

  • verified Real: la ventana de postulación (inicio y cierre, con ampliaciones) y la etapa actual de cada concurso vienen directo de la API.
  • schedule Reconstruido: las fechas de transición entre etapas — la API no las publica, las arma el snapshot diario. Lo observado en vivo es preciso; lo anterior a la primera ingesta es aproximado.
  • trending_up Estimado: la fecha de renovación es una proyección por cadencia histórica, no el vencimiento oficial del nombramiento (la fuente no lo publica). No se inventa la etapa de "nómina", que la API no expone.

Cómo funciona

El backend es FastAPI + SQLite. Un job de APScheduler ingiere las tres APIs cada día y guarda tres tablas: el snapshot de concursos, la línea de tiempo de transiciones detectadas y una bitácora de cada corrida. La API propia expone el resumen, el Gantt filtrable por ministerio y región, el índice de instituciones y las estimaciones de renovación.

Decisiones técnicas

Snapshot diario en vez de confiar en la fuente

La API entrega la etapa actual pero no fecha los cambios de etapa. Un job a las 06:30 los detecta comparando snapshots día a día: preferí reconstruir la línea de tiempo a mostrar solo la foto del momento.

Unificar tres APIs en una sola base local

Postulación, evaluación e histórico llegan separadas; las consolido en SQLite con una corrida idempotente. Es lo que permite el Gantt por institución y el buscador sobre 429 instituciones sin pegarle a tres endpoints en cada carga.

Estimar la reapertura, declarándola como estimación

La fecha de renovación se proyecta por la cadencia mediana de cada cargo y se marca como estimada, no como vencimiento oficial (la fuente no lo publica). Preferí una señal útil y honesta a un campo vacío.

¿Quieres explorar la carta Gantt?

El dashboard corre ahora mismo sobre la Pi.

Abrir el prototipo arrow_forward