{
  "generatedAt": "2026-07-27T19:44:38.283Z",
  "title": "Roadmap público de Pistas públicas",
  "statusLabel": "MVP anunciable con límites visibles",
  "summary": {
    "blockers": 0,
    "warnings": 4,
    "modules": 16,
    "activeModules": 9,
    "draftModules": 7,
    "roadmapItems": 14,
    "doneItems": 7,
    "manualItems": 2,
    "inProgressItems": 4,
    "plannedItems": 1,
    "offlineDepartments": 18,
    "zeroCapturedDepartments": 0,
    "pendingOcrPdfs": 1066,
    "legislatorSourcesPendingAttribution": 126,
    "legislatorAttributionBatchDocuments": 12
  },
  "links": [
    {
      "label": "Estado",
      "href": "/herramientas/estado/"
    },
    {
      "label": "Cobertura",
      "href": "/herramientas/cobertura/"
    },
    {
      "label": "JSON",
      "href": "/herramientas/roadmap.json"
    },
    {
      "label": "Aportes",
      "href": "/herramientas/aportes/"
    }
  ],
  "stages": [
    {
      "id": "mvp-anunciable",
      "title": "MVP anunciable",
      "statusLabel": "Listo",
      "description": "Lo que debe estar cerrado para publicar sin esconder límites ni huecos de datos.",
      "items": [
        {
          "id": "suite-publica",
          "title": "Suite pública, estado y cobertura",
          "status": "done",
          "statusLabel": "Cerrado",
          "priority": "P0",
          "description": "La suite carga en producción, expone estado público, matriz de cobertura, búsqueda transversal, método y canal de correcciones.",
          "evidence": "Estado público con 16 módulos, compuerta MVP y matriz de cobertura enlazada desde la navegación.",
          "nextAction": "Mantener el estado público sincronizado con cada nuevo módulo o cambio de cobertura.",
          "href": "/herramientas/estado/",
          "metrics": [
            {
              "label": "Módulos",
              "value": "16"
            },
            {
              "label": "Activos",
              "value": "9"
            },
            {
              "label": "Bloqueantes",
              "value": "0"
            }
          ],
          "links": [
            {
              "label": "Estado",
              "href": "/herramientas/estado/"
            },
            {
              "label": "Cobertura",
              "href": "/herramientas/cobertura/"
            },
            {
              "label": "Buscador",
              "href": "/herramientas/buscar/"
            }
          ],
          "tags": [
            "mvp",
            "estado",
            "cobertura",
            "buscador",
            "método"
          ]
        },
        {
          "id": "compras-automatizadas",
          "title": "Compras nacionales con rutina validada",
          "status": "done",
          "statusLabel": "Cerrado",
          "priority": "P0",
          "description": "Compras directas comunes y compras por excepción tienen manifest público, descargas, Blob, cron, deploy hook y fallback operativo documentado.",
          "evidence": "Freshness público OK, 14/14 artefactos con Blob y endpoint cron probado manualmente.",
          "nextAction": "Monitorear corte, Blob URLs y cron diario después del anuncio.",
          "href": "/herramientas/compras/",
          "metrics": [
            {
              "label": "Blob",
              "value": "14/14"
            },
            {
              "label": "Cron",
              "value": "validado"
            },
            {
              "label": "Fallback",
              "value": "documentado"
            }
          ],
          "links": [
            {
              "label": "Compras",
              "href": "/herramientas/compras/"
            },
            {
              "label": "Datos",
              "href": "/herramientas/compras/datos/latest.json"
            },
            {
              "label": "Método",
              "href": "/herramientas/compras/metodo/"
            }
          ],
          "tags": [
            "compras",
            "blob",
            "cron",
            "arce",
            "fallback"
          ]
        },
        {
          "id": "promesa-limitada",
          "title": "Promesa pública limitada",
          "status": "done",
          "statusLabel": "Cerrado",
          "priority": "P0",
          "description": "Los módulos con cobertura parcial explican qué está capturado, qué está en revisión y qué no debe leerse como conclusión.",
          "evidence": "La compuerta MVP muestra 0 bloqueantes y 4 advertencias en producción.",
          "nextAction": "Repetir la misma disciplina editorial en cada actualización post-MVP.",
          "href": "/herramientas/cobertura/",
          "metrics": [
            {
              "label": "Advertencias",
              "value": "4"
            },
            {
              "label": "Próximos",
              "value": "18"
            },
            {
              "label": "OCR",
              "value": "1.066"
            }
          ],
          "links": [
            {
              "label": "Cobertura MVP",
              "href": "/herramientas/cobertura/"
            },
            {
              "label": "Estado JSON",
              "href": "/herramientas/estado.json"
            }
          ],
          "tags": [
            "advertencias",
            "cobertura parcial",
            "proximamente",
            "ocr pendiente"
          ]
        }
      ]
    },
    {
      "id": "operacion-anuncio",
      "title": "Operación de anuncio",
      "statusLabel": "Manual",
      "description": "Tareas que no conviene automatizar desde el repo porque dependen de cuenta, publicación y monitoreo humano.",
      "items": [
        {
          "id": "perfil-x",
          "title": "Configurar perfil de X",
          "status": "manual",
          "statusLabel": "Manual",
          "priority": "P1",
          "description": "Crear o actualizar perfil, nombre visible, bio, web, avatar, portada y post fijado después del anuncio.",
          "evidence": "Los textos y assets están preparados en los documentos de branding.",
          "nextAction": "Completar la cuenta antes de publicar el hilo y verificar el enlace final.",
          "metrics": [
            {
              "label": "Assets",
              "value": "listos"
            },
            {
              "label": "Alt text",
              "value": "preparado"
            },
            {
              "label": "Web",
              "value": "pistas.wtf"
            }
          ],
          "links": [
            {
              "label": "Guía rápida",
              "href": "/herramientas/guia-rapida/"
            },
            {
              "label": "Home",
              "href": "/"
            }
          ],
          "tags": [
            "x",
            "perfil",
            "avatar",
            "portada",
            "anuncio"
          ]
        },
        {
          "id": "publicacion-monitoreo",
          "title": "Publicar hilo y monitorear primeras horas",
          "status": "manual",
          "statusLabel": "Manual",
          "priority": "P1",
          "description": "Publicar el hilo, revisar que el primer enlace abre, fijar post si corresponde, responder por dónde empezar y registrar hora exacta.",
          "evidence": "Prepublish, editorial safety y baseline técnico ya tienen ejecución reproducible.",
          "nextAction": "Publicar solo si hay una persona disponible para monitorear menciones, errores y correcciones.",
          "metrics": [
            {
              "label": "Bloqueantes",
              "value": "0"
            },
            {
              "label": "Checks",
              "value": "OK"
            },
            {
              "label": "Primeras horas",
              "value": "monitoreo"
            }
          ],
          "links": [
            {
              "label": "Estado",
              "href": "/herramientas/estado/"
            },
            {
              "label": "Aportes",
              "href": "/herramientas/aportes/"
            }
          ],
          "tags": [
            "publicación",
            "monitoreo",
            "correcciones",
            "menciones"
          ]
        }
      ]
    },
    {
      "id": "post-mvp-inmediato",
      "title": "Post-MVP inmediato",
      "statusLabel": "En curso",
      "description": "Trabajo prioritario después del anuncio para convertir huecos visibles en cobertura más fuerte.",
      "items": [
        {
          "id": "compras-intendencias",
          "title": "Compras de intendencias",
          "status": "in_progress",
          "statusLabel": "En revisión",
          "priority": "P2",
          "description": "Mantener online gratuito sólo Montevideo; Canelones y el resto de intendencias quedan marcados como próximos.",
          "evidence": "La cobertura pública gratuita queda limitada a 1 departamento; los demás datasets territoriales no se publican todavía y la política de habilitación queda auditada en CSV.",
          "nextAction": "Completar revisión manual de alias, fuentes complementarias y huecos contra la política pública antes de habilitar nuevos departamentos.",
          "href": "/herramientas/presupuesto/acceso/",
          "metrics": [
            {
              "label": "Deptos públicos",
              "value": "1"
            },
            {
              "label": "Estado",
              "value": "próximamente resto"
            },
            {
              "label": "Riesgo",
              "value": "alto"
            }
          ],
          "links": [
            {
              "label": "Próximamente",
              "href": "/herramientas/presupuesto/acceso/"
            },
            {
              "label": "Cobertura pública",
              "href": "/herramientas/presupuesto/datos/compras-cobertura-departamentos.csv"
            },
            {
              "label": "Alias",
              "href": "/herramientas/presupuesto/datos/compras-auditoria-aliases-departamentales.csv"
            },
            {
              "label": "Política",
              "href": "/herramientas/presupuesto/datos/compras-politica-habilitacion-departamentos.csv"
            },
            {
              "label": "Cobertura",
              "href": "/herramientas/cobertura/"
            }
          ],
          "tags": [
            "intendencias",
            "departamentos",
            "montevideo",
            "canelones",
            "scope publico",
            "compras territoriales"
          ]
        },
        {
          "id": "ocr-territorial",
          "title": "OCR territorial",
          "status": "in_progress",
          "statusLabel": "En cola",
          "priority": "P2",
          "description": "Procesar PDFs territoriales sin texto extraído para mejorar búsqueda documental y no perder actas relevantes.",
          "evidence": "La cola pública prioriza documentos por motivo, estado y acción sugerida; además publica una tanda inicial de 25 documentos.",
          "nextAction": "Procesar la tanda sugerida, registrar resultado por documento y regenerar la cola antes de abrir un lote nuevo.",
          "href": "/herramientas/presupuesto/ocr/",
          "metrics": [
            {
              "label": "PDFs",
              "value": "1.066"
            },
            {
              "label": "Tanda",
              "value": "25"
            },
            {
              "label": "Lectura",
              "value": "parcial"
            }
          ],
          "links": [
            {
              "label": "Tablero OCR",
              "href": "/herramientas/presupuesto/ocr/"
            },
            {
              "label": "Tanda OCR CSV",
              "href": "/herramientas/presupuesto/datos/actas-ocr-tanda-sugerida.csv"
            },
            {
              "label": "Tanda OCR JSON",
              "href": "/herramientas/presupuesto/datos/actas-ocr-tanda-sugerida.json"
            },
            {
              "label": "Tanda OCR TXT",
              "href": "/herramientas/presupuesto/datos/actas-ocr-tanda-sugerida.txt"
            },
            {
              "label": "Cola OCR",
              "href": "/herramientas/presupuesto/datos/actas-ocr-pendientes.csv"
            },
            {
              "label": "Presupuesto",
              "href": "/herramientas/presupuesto/"
            }
          ],
          "tags": [
            "ocr",
            "pdf",
            "presupuesto",
            "actas",
            "territorio"
          ]
        },
        {
          "id": "legisladores-intervenciones",
          "title": "Intervenciones de legisladores",
          "status": "in_progress",
          "statusLabel": "Acceso en gestión",
          "priority": "P2",
          "description": "Resolver acceso autorizado o fuente oficial alternativa antes de extraer texto de Diarios de Sesiones y atribuir actividad pública a personas.",
          "evidence": "El directorio está publicado; 126 fuentes siguen pendientes de atribución y hay una tanda sugerida de 12 documentos para empezar; 12 visores quedaron restringidos por autoconsulta y 36 consultas alternativas oficiales quedaron preparadas; 12 solicitudes institucionales están listas para gestión.",
          "nextAction": "Ejecutar solicitudes institucionales y cola de fuentes alternativas; registrar URL o constancia por edición y volver a resolución de acceso antes de habilitar extracción, segmentación de oradores y conceptos.",
          "href": "/herramientas/legisladores/solicitudes/",
          "metrics": [
            {
              "label": "Fuentes",
              "value": "126"
            },
            {
              "label": "Tanda",
              "value": "12"
            },
            {
              "label": "Acceso",
              "value": "12"
            },
            {
              "label": "Consultas alt",
              "value": "36"
            },
            {
              "label": "Solicitudes",
              "value": "12"
            },
            {
              "label": "No publicar",
              "value": "12"
            },
            {
              "label": "Atribuidas",
              "value": "0"
            },
            {
              "label": "Nubes",
              "value": "bloqueadas"
            }
          ],
          "links": [
            {
              "label": "Resolver acceso",
              "href": "/herramientas/legisladores/acceso/"
            },
            {
              "label": "Fuentes alternativas",
              "href": "/herramientas/legisladores/alternativas/"
            },
            {
              "label": "Solicitudes",
              "href": "/herramientas/legisladores/solicitudes/"
            },
            {
              "label": "Atribución",
              "href": "/herramientas/legisladores/atribucion/"
            },
            {
              "label": "Fuentes",
              "href": "/herramientas/legisladores/fuentes/"
            },
            {
              "label": "Fuentes CSV",
              "href": "/herramientas/legisladores/datos/fuentes-candidatas.csv"
            },
            {
              "label": "Tanda CSV",
              "href": "/herramientas/legisladores/datos/tanda-atribucion.csv"
            },
            {
              "label": "Tanda JSON",
              "href": "/herramientas/legisladores/datos/tanda-atribucion.json"
            },
            {
              "label": "Cola extracción CSV",
              "href": "/herramientas/legisladores/datos/cola-extraccion.csv"
            },
            {
              "label": "Cola extracción JSON",
              "href": "/herramientas/legisladores/datos/cola-extraccion.json"
            },
            {
              "label": "Resolución CSV",
              "href": "/herramientas/legisladores/datos/resolucion-acceso.csv"
            },
            {
              "label": "Resolución JSON",
              "href": "/herramientas/legisladores/datos/resolucion-acceso.json"
            },
            {
              "label": "Alternativas CSV",
              "href": "/herramientas/legisladores/datos/fuentes-alternativas.csv"
            },
            {
              "label": "Alternativas JSON",
              "href": "/herramientas/legisladores/datos/fuentes-alternativas.json"
            },
            {
              "label": "Solicitudes CSV",
              "href": "/herramientas/legisladores/datos/solicitudes-acceso.csv"
            },
            {
              "label": "Solicitudes JSON",
              "href": "/herramientas/legisladores/datos/solicitudes-acceso.json"
            },
            {
              "label": "Revisión CSV",
              "href": "/herramientas/legisladores/datos/revision-atribucion.csv"
            },
            {
              "label": "Legisladores",
              "href": "/herramientas/legisladores/"
            }
          ],
          "tags": [
            "legisladores",
            "intervenciones",
            "diarios de sesiones",
            "tanda atribucion",
            "resolver acceso",
            "autoconsulta",
            "cola extraccion",
            "extraccion texto",
            "nube conceptual"
          ]
        },
        {
          "id": "votaciones-casos",
          "title": "Primeras votaciones con evidencia real",
          "status": "in_progress",
          "statusLabel": "Primer corte",
          "priority": "P2",
          "description": "Cargar casos parlamentarios separando voto nominal exacto, total agregado, inferencia marcada y faltante, con cola priorizada para ampliar el corte.",
          "evidence": "El módulo ya publica casos semilla, 54 votos nominales exactos y una cola de 6 revisiones, 4 de alta prioridad.",
          "nextAction": "Ejecutar la cola de ampliación: revisar anexos nominales, separar fundamentos, preparar pedidos de nómina y normalizar identidades históricas.",
          "href": "/herramientas/votaciones-parlamentarias/#cola",
          "metrics": [
            {
              "label": "Niveles",
              "value": "4"
            },
            {
              "label": "Fuentes",
              "value": "6"
            },
            {
              "label": "Casos",
              "value": "3"
            },
            {
              "label": "Revisión",
              "value": "3"
            },
            {
              "label": "Individuales",
              "value": "1"
            },
            {
              "label": "Votos",
              "value": "54"
            },
            {
              "label": "Cola",
              "value": "6"
            },
            {
              "label": "Alta",
              "value": "4"
            }
          ],
          "links": [
            {
              "label": "Votaciones",
              "href": "/herramientas/votaciones-parlamentarias/"
            },
            {
              "label": "JSON",
              "href": "/herramientas/votaciones-parlamentarias.json"
            },
            {
              "label": "Casos JSON",
              "href": "/herramientas/votaciones-parlamentarias/casos.json"
            },
            {
              "label": "Casos CSV",
              "href": "/herramientas/votaciones-parlamentarias/datos/casos-semilla.csv"
            },
            {
              "label": "Revisión JSON",
              "href": "/herramientas/votaciones-parlamentarias/revision-casos.json"
            },
            {
              "label": "Revisión CSV",
              "href": "/herramientas/votaciones-parlamentarias/datos/revision-casos.csv"
            },
            {
              "label": "Votos JSON",
              "href": "/herramientas/votaciones-parlamentarias/votos-nominales.json"
            },
            {
              "label": "Votos CSV",
              "href": "/herramientas/votaciones-parlamentarias/datos/votos-nominales.csv"
            },
            {
              "label": "Cola JSON",
              "href": "/herramientas/votaciones-parlamentarias/cola-ampliacion.json"
            },
            {
              "label": "Cola CSV",
              "href": "/herramientas/votaciones-parlamentarias/datos/cola-ampliacion.csv"
            }
          ],
          "tags": [
            "votaciones",
            "senado",
            "diputados",
            "voto nominal",
            "cola ampliacion",
            "anexos nominales",
            "normalizacion historica"
          ]
        }
      ]
    },
    {
      "id": "expansion",
      "title": "Expansión posterior",
      "statusLabel": "Plan",
      "description": "Mejoras útiles pero no bloqueantes para el anuncio inicial del MVP.",
      "items": [
        {
          "id": "tutorial-expediente",
          "title": "Tutorial para abrir expediente",
          "status": "done",
          "statusLabel": "Cerrado",
          "priority": "P2",
          "description": "Guía pública para convertir una señal en pregunta documentada, con evidencia mínima, vía de seguimiento y plantilla base.",
          "evidence": "Ruta publicada en /herramientas/tutoriales/abrir-expediente/ y enlazada desde Guía rápida.",
          "nextAction": "Mantener ejemplos y plantilla alineados con cambios del generador de Expedientes.",
          "href": "/herramientas/tutoriales/abrir-expediente/",
          "metrics": [
            {
              "label": "Pasos",
              "value": "5"
            },
            {
              "label": "Checklist",
              "value": "6"
            },
            {
              "label": "Plantilla",
              "value": "lista"
            }
          ],
          "links": [
            {
              "label": "Tutorial",
              "href": "/herramientas/tutoriales/abrir-expediente/"
            },
            {
              "label": "Generador",
              "href": "/herramientas/expedientes/nuevo/"
            },
            {
              "label": "Guía rápida",
              "href": "/herramientas/guia-rapida/"
            }
          ],
          "tags": [
            "tutorial",
            "expediente",
            "pedido",
            "guía rápida"
          ]
        },
        {
          "id": "tutoriales-demo",
          "title": "Video corto de demo",
          "status": "planned",
          "statusLabel": "Plan",
          "priority": "P2",
          "description": "Video corto de demo para mostrar recorridos reales después del anuncio.",
          "evidence": "La guía rápida, el tutorial de expediente y los casos de uso ya cubren la entrada escrita; falta material audiovisual externo.",
          "nextAction": "Elegir tres flujos reales y grabar una pieza corta con capturas productivas.",
          "metrics": [
            {
              "label": "Video",
              "value": "pendiente"
            },
            {
              "label": "Tutorial",
              "value": "listo"
            },
            {
              "label": "Casos",
              "value": "listos"
            }
          ],
          "links": [
            {
              "label": "Guía rápida",
              "href": "/herramientas/guia-rapida/"
            },
            {
              "label": "Tutorial",
              "href": "/herramientas/tutoriales/abrir-expediente/"
            },
            {
              "label": "Casos",
              "href": "/herramientas/casos-de-uso/"
            }
          ],
          "tags": [
            "demo",
            "video",
            "capturas"
          ]
        },
        {
          "id": "tests-visuales-permanentes",
          "title": "Tests visuales permanentes",
          "status": "done",
          "statusLabel": "Contrato activo",
          "priority": "P2",
          "description": "Contrato automatizado de rutas críticas para verificar que home, suite y módulos principales sigan mostrando la identidad, navegación, contenido esperado y no pantallas de error.",
          "evidence": "Script check:mvp-visual-contracts integrado al prepublish; check:mvp-launch conserva las capturas con Playwright cuando haya Chromium disponible.",
          "nextAction": "Reactivar capturas pixel/viewport en CI o en una máquina con Chromium local para complementar el contrato HTML.",
          "href": "/herramientas/roadmap/",
          "metrics": [
            {
              "label": "Rutas",
              "value": "18"
            },
            {
              "label": "Browser",
              "value": "no requerido"
            },
            {
              "label": "Screenshots",
              "value": "Playwright"
            }
          ],
          "links": [
            {
              "label": "Roadmap",
              "href": "/herramientas/roadmap/"
            },
            {
              "label": "Estado",
              "href": "/herramientas/estado/"
            },
            {
              "label": "Buscador",
              "href": "/herramientas/buscar/"
            }
          ],
          "tags": [
            "tests visuales",
            "contrato visual",
            "prepublish",
            "playwright",
            "mvp"
          ]
        },
        {
          "id": "casos-uso-publicos",
          "title": "Casos de uso por público",
          "status": "done",
          "statusLabel": "Cerrado",
          "priority": "P2",
          "description": "Recorridos públicos para periodistas, ediles, legisladores, ciudadanos y organismos, con copy listo para hilo de X.",
          "evidence": "Ruta publicada en /herramientas/casos-de-uso/ y copy listo en docs/branding/x-use-cases-thread.md.",
          "nextAction": "Publicar el hilo después del anuncio principal o usarlo como respuestas segmentadas.",
          "metrics": [
            {
              "label": "Públicos",
              "value": "5"
            },
            {
              "label": "Posts",
              "value": "6"
            },
            {
              "label": "Promesa",
              "value": "parcial"
            }
          ],
          "links": [
            {
              "label": "Casos",
              "href": "/herramientas/casos-de-uso/"
            },
            {
              "label": "Guía rápida",
              "href": "/herramientas/guia-rapida/"
            },
            {
              "label": "Aportes",
              "href": "/herramientas/aportes/"
            }
          ],
          "tags": [
            "casos de uso",
            "periodistas",
            "ediles",
            "legisladores",
            "ciudadanos",
            "organismos",
            "x"
          ]
        },
        {
          "id": "monitoreo-producto",
          "title": "Monitoreo y seguimiento de producto",
          "status": "done",
          "statusLabel": "Monitoreo activo",
          "priority": "P2",
          "description": "Formulario de seguimiento por correo, canales públicos, RSS/JSON, triage de lanzamiento y captura automatizada de errores client-side en logs de Vercel.",
          "evidence": "Ruta /herramientas/seguimiento/alertas/ publicada; ClientErrorMonitor reporta a /api/client-errors; el triage de lanzamiento separa P0/P1/P2 y check:mvp-prepublish valida el dry-run.",
          "nextAction": "Durante el anuncio, revisar triage, logs de Vercel y reportes de Soporte sin capturar datos personales.",
          "href": "/herramientas/soporte/triage/",
          "metrics": [
            {
              "label": "Feed",
              "value": "activo"
            },
            {
              "label": "Formulario",
              "value": "listo"
            },
            {
              "label": "Errores JS",
              "value": "captura"
            },
            {
              "label": "Colas triage",
              "value": "6"
            }
          ],
          "links": [
            {
              "label": "Triage",
              "href": "/herramientas/soporte/triage/"
            },
            {
              "label": "Triage JSON",
              "href": "/herramientas/soporte/triage.json"
            },
            {
              "label": "Seguimiento",
              "href": "/herramientas/seguimiento/"
            },
            {
              "label": "Alertas",
              "href": "/herramientas/seguimiento/alertas/"
            },
            {
              "label": "Feed",
              "href": "/herramientas/feed/"
            }
          ],
          "tags": [
            "newsletter",
            "monitoreo",
            "triage lanzamiento",
            "errores client-side",
            "vercel logs",
            "rss"
          ]
        }
      ]
    }
  ]
}