{
  "generated_at": "2026-05-29T17:29:14.843Z",
  "summary": {
    "generatedAt": "2026-05-29T17:29:14.843Z",
    "modules": 11,
    "activeModules": 9,
    "plannedModules": 1,
    "artifacts": 247,
    "rows": 222791,
    "latestUpdate": "2026-05-29T17:29:14.843Z"
  },
  "modules": [
    {
      "id": "compras",
      "title": "Compras públicas directas",
      "href": "/herramientas/compras/",
      "status": "Funcional",
      "health": "active",
      "source": "ARCE / Compras Estatales",
      "cadence": "Actualización diaria vía Vercel y Blob.",
      "coverage": "Compras directas comunes adjudicadas en el corte 2026.",
      "lastUpdated": "2026-05-29T15:43:24.822Z",
      "range": "2026-01-01 a 2026-05-28",
      "artifacts": 14,
      "rows": 185068,
      "metrics": [
        {
          "label": "compras",
          "value": "32.359"
        },
        {
          "label": "ítems",
          "value": "90.738"
        },
        {
          "label": "un oferente",
          "value": "25.620"
        }
      ],
      "limits": [
        "Lee compras directas comunes; no mezcla el régimen de excepción.",
        "Las alertas priorizan revisión, no atribuyen irregularidad.",
        "Los adjuntos PDF/XML se registran como variable de apoyo, no como prueba cerrada."
      ],
      "nextSteps": [
        "Refinar vínculos con expedientes y respuestas.",
        "Mejorar lectura de adjuntos para corregir cantidades o unidades declaradas.",
        "Mantener optimización incremental del refresh diario."
      ],
      "links": [
        {
          "label": "Abrir módulo",
          "href": "/herramientas/compras/"
        },
        {
          "label": "Datos",
          "href": "/herramientas/compras/datos/latest.json"
        },
        {
          "label": "Método",
          "href": "/herramientas/compras/metodo/"
        }
      ]
    },
    {
      "id": "compras-excepciones",
      "title": "Compras por excepción",
      "href": "/herramientas/compras/?vista=excepciones",
      "status": "Separado",
      "health": "active",
      "source": "ARCE / Compras Estatales",
      "cadence": "Actualización diaria junto al pipeline de compras.",
      "coverage": "Compra directa por excepción como régimen separado de las compras directas comunes.",
      "lastUpdated": "2026-05-29T15:44:47.174Z",
      "range": "2026-01-01 a 2026-05-28",
      "artifacts": 14,
      "rows": 16418,
      "metrics": [
        {
          "label": "compras",
          "value": "2.674"
        },
        {
          "label": "ítems",
          "value": "9.703"
        },
        {
          "label": "artefactos",
          "value": "14"
        }
      ],
      "limits": [
        "No se compara como si fuera compra directa común.",
        "La causal de excepción requiere revisión documental caso a caso."
      ],
      "nextSteps": [
        "Mejorar ficha propia para causales y documentos.",
        "Conectar casos relevantes con pedidos de acceso."
      ],
      "links": [
        {
          "label": "Datos",
          "href": "/herramientas/compras/datos/excepciones/"
        }
      ]
    },
    {
      "id": "expedientes",
      "title": "Expedientes y pedidos",
      "href": "/herramientas/expedientes/",
      "status": "MVP funcional",
      "health": "active",
      "source": "CSV de seguimiento editorial y documentos vinculados.",
      "cadence": "Actualización cuando se prepara, envía o recibe respuesta.",
      "coverage": "Pedidos de acceso y consultas periodísticas derivados de señales priorizadas.",
      "lastUpdated": "2026-05-29T17:24:29.686Z",
      "range": "próximo control 2026-06-23",
      "artifacts": 5,
      "rows": 322,
      "metrics": [
        {
          "label": "expedientes",
          "value": "21"
        },
        {
          "label": "organismos",
          "value": "10"
        },
        {
          "label": "documentos",
          "value": "301"
        }
      ],
      "limits": [
        "El estado publicado refleja el tracker, no el expediente completo del organismo.",
        "Muchos casos están en borrador hasta registrar envío o acuse.",
        "Los documentos faltantes son una lista de solicitud, no evidencia de incumplimiento."
      ],
      "nextSteps": [
        "Cargar acuses, tickets o expedientes cuando existan.",
        "Vincular respuestas recibidas con fichas de Compras.",
        "Definir política pública de corrección y derecho de respuesta."
      ],
      "links": [
        {
          "label": "Abrir módulo",
          "href": "/herramientas/expedientes/"
        },
        {
          "label": "Datos",
          "href": "/herramientas/expedientes/datos/"
        },
        {
          "label": "Feed",
          "href": "/herramientas/expedientes/feed/"
        }
      ]
    },
    {
      "id": "pauta",
      "title": "Pauta oficial",
      "href": "/herramientas/pauta/",
      "status": "Piloto",
      "health": "active",
      "source": "ARCE / Compras Estatales, filtrado por objetos e ítems.",
      "cadence": "Se regenera con el build y el refresh de compras.",
      "coverage": "Radar inicial de publicidad, comunicación, campañas, medios, producción audiovisual, redes y piezas gráficas en compras directas y excepciones.",
      "lastUpdated": "2026-05-29T15:44:47.174Z",
      "range": "2026-01-01 a 2026-05-28",
      "artifacts": 162,
      "rows": 1224,
      "metrics": [
        {
          "label": "señales",
          "value": "1.224"
        },
        {
          "label": "organismos",
          "value": "47"
        },
        {
          "label": "proveedores",
          "value": "629"
        },
        {
          "label": "pedidos sugeridos",
          "value": "10"
        },
        {
          "label": "fichas",
          "value": "160"
        }
      ],
      "limits": [
        "Es un radar por palabras clave sobre compras directas y excepciones; no equivale al gasto total en pauta oficial.",
        "Una compra puede ser comunicación, producción o impresión sin compra de espacios en medios.",
        "Los proveedores salen de ítems/adjudicaciones disponibles; algunas filas pueden requerir documentos adjuntos o pedidos de acceso.",
        "La clasificación es una señal para abrir expediente, no una conclusión sobre campaña, medio o beneficiario final."
      ],
      "nextSteps": [
        "Revisar la cola de pedidos sugeridos y convertir los casos fuertes en expedientes reales.",
        "Crear fichas de campañas cuando haya documentos o respuestas.",
        "Conectar casos relevantes con Expedientes y publicaciones editoriales."
      ],
      "links": [
        {
          "label": "Abrir radar",
          "href": "/herramientas/pauta/"
        },
        {
          "label": "JSON",
          "href": "/herramientas/pauta.json"
        },
        {
          "label": "Ficha ejemplo",
          "href": "/herramientas/pauta/senales/excepcion-1335286/"
        },
        {
          "label": "Preparar pedido",
          "href": "/herramientas/expedientes/nuevo/"
        }
      ]
    },
    {
      "id": "presupuesto",
      "title": "Gasto territorial",
      "href": "/herramientas/presupuesto/",
      "status": "En desarrollo",
      "health": "draft",
      "source": "OPP/OTU, ARCE, FIGM y fuentes municipales.",
      "cadence": "Revisión periódica de fuentes y regeneración del dataset.",
      "coverage": "Presupuesto territorial, municipios, transferencias, actas, autoridades, contactos y compras locales.",
      "lastUpdated": "2026-05-29T13:19:01.080752+00:00",
      "range": "ejecución 2024 · transferencias 2026/4",
      "artifacts": 22,
      "rows": 18362,
      "metrics": [
        {
          "label": "departamentos",
          "value": "19"
        },
        {
          "label": "municipios",
          "value": "136"
        },
        {
          "label": "alertas",
          "value": "33"
        }
      ],
      "limits": [
        "La ejecución presupuestal disponible tiene corte anual 2024.",
        "Algunas asociaciones municipales se infieren por nombre y deben revisarse antes de usarse como imputación formal.",
        "Las compras territoriales son una capa de contexto, no el total del gasto municipal."
      ],
      "nextSteps": [
        "Pulir perfiles territoriales y mapas.",
        "Separar señales metodológicas de alertas editoriales.",
        "Conectar pedidos territoriales con Expedientes."
      ],
      "links": [
        {
          "label": "Abrir módulo",
          "href": "/herramientas/presupuesto/"
        },
        {
          "label": "Datos",
          "href": "/herramientas/presupuesto/datos/"
        },
        {
          "label": "Feed",
          "href": "/herramientas/presupuesto/feed/"
        }
      ]
    },
    {
      "id": "feed-global",
      "title": "Feed global",
      "href": "/herramientas/feed/",
      "status": "Activo",
      "health": "active",
      "source": "Eventos normalizados de Compras, Expedientes, Pauta y Gasto territorial.",
      "cadence": "Se regenera con el build del sitio.",
      "coverage": "Novedades de módulos, controles futuros, respuestas, alertas y cambios de dataset.",
      "lastUpdated": "2026-05-29T17:29:14.587Z",
      "range": "2026-06-26",
      "artifacts": 3,
      "rows": 103,
      "metrics": [
        {
          "label": "eventos",
          "value": "103"
        },
        {
          "label": "módulos",
          "value": "4"
        },
        {
          "label": "expedientes",
          "value": "32"
        }
      ],
      "limits": [
        "No todos los eventos tienen la misma semántica de fecha.",
        "El feed mezcla actualizaciones, controles y señales; la ficha del módulo conserva el contexto."
      ],
      "nextSteps": [
        "Permitir feeds filtrados por organismo, proveedor o etiqueta.",
        "Conectar eventos del feed con seguimiento liviano por tema."
      ],
      "links": [
        {
          "label": "Abrir feed",
          "href": "/herramientas/feed/"
        },
        {
          "label": "JSON",
          "href": "/herramientas/feed.json"
        },
        {
          "label": "RSS",
          "href": "/herramientas/feed.xml"
        }
      ]
    },
    {
      "id": "buscador",
      "title": "Buscador transversal",
      "href": "/herramientas/buscar/",
      "status": "Activo",
      "health": "active",
      "source": "Índice local armado desde datos publicados de la suite.",
      "cadence": "Se regenera con el build del sitio.",
      "coverage": "Compras, proveedores, patrones, precios, expedientes, pauta, territorio, documentos y eventos.",
      "lastUpdated": "2026-05-29T17:29:14.843Z",
      "range": "índice operativo",
      "artifacts": 1,
      "rows": 720,
      "metrics": [
        {
          "label": "registros",
          "value": "720"
        },
        {
          "label": "módulos",
          "value": "5"
        },
        {
          "label": "tipos",
          "value": "11"
        }
      ],
      "limits": [
        "Es búsqueda textual local; no es motor semántico ni ranking jurídico.",
        "Cada resultado debe leerse en la ficha del módulo correspondiente."
      ],
      "nextSteps": [
        "Agregar resultados filtrados por organismo o proveedor persistente.",
        "Exponer endpoint JSON de búsqueda si la suite crece."
      ],
      "links": [
        {
          "label": "Abrir buscador",
          "href": "/herramientas/buscar/"
        }
      ]
    },
    {
      "id": "seguimiento",
      "title": "Seguimiento ciudadano",
      "href": "/herramientas/seguimiento/",
      "status": "Piloto",
      "health": "active",
      "source": "Canales filtrados desde el feed global y el índice transversal.",
      "cadence": "Se regenera con el build del sitio.",
      "coverage": "Organismos, proveedores, etiquetas, expedientes y módulos seguibles sin cuentas de usuario.",
      "lastUpdated": "2026-05-29T17:29:14.843Z",
      "range": "2026-06-26T12:00:00.000Z",
      "artifacts": 22,
      "rows": 554,
      "metrics": [
        {
          "label": "canales",
          "value": "10"
        },
        {
          "label": "eventos",
          "value": "233"
        },
        {
          "label": "registros",
          "value": "321"
        }
      ],
      "limits": [
        "No crea cuentas ni preferencias privadas; todo seguimiento es público y compartible.",
        "La coincidencia textual puede traer contexto amplio y debe revisarse en la ficha original.",
        "El canal ordena señales, no publica conclusiones."
      ],
      "nextSteps": [
        "Permitir canales creados desde filtros del buscador.",
        "Evaluar alertas por correo o Telegram sobre los mismos RSS/JSON.",
        "Sumar derecho de corrección y canal de aportes documentales."
      ],
      "links": [
        {
          "label": "Abrir seguimiento",
          "href": "/herramientas/seguimiento/"
        },
        {
          "label": "JSON",
          "href": "/herramientas/seguimiento.json"
        },
        {
          "label": "RSS por canal",
          "href": "/herramientas/seguimiento/modulo-compras.xml"
        }
      ]
    },
    {
      "id": "aportes-correcciones",
      "title": "Aportes y correcciones",
      "href": "/herramientas/aportes/",
      "status": "Activo",
      "health": "active",
      "source": "Política pública de recepción de aportes documentales, correcciones y respuestas.",
      "cadence": "Se actualiza con cambios de política editorial o canales.",
      "coverage": "Correcciones de datos, aportes documentales, derecho de respuesta y colaboración periodística.",
      "lastUpdated": "2026-05-29T17:29:14.843Z",
      "range": "canal permanente",
      "artifacts": 2,
      "rows": 4,
      "metrics": [
        {
          "label": "canales",
          "value": "4"
        },
        {
          "label": "principios",
          "value": "5"
        },
        {
          "label": "pasos",
          "value": "5"
        }
      ],
      "limits": [
        "El formulario no sube archivos ni crea una cuenta; prepara un correo estructurado.",
        "No se publican acusaciones sin soporte documental verificable.",
        "La incorporación de un aporte depende de pertinencia, fuente y revisión editorial."
      ],
      "nextSteps": [
        "Evaluar formulario backend con adjuntos si el volumen lo justifica.",
        "Registrar públicamente correcciones relevantes por ficha.",
        "Conectar aportes aceptados con expedientes y feed global."
      ],
      "links": [
        {
          "label": "Abrir canal",
          "href": "/herramientas/aportes/"
        },
        {
          "label": "JSON",
          "href": "/herramientas/aportes.json"
        }
      ]
    },
    {
      "id": "metodo-suite",
      "title": "Método común",
      "href": "/herramientas/metodo/",
      "status": "Activo",
      "health": "active",
      "source": "Política editorial y operativa común para todos los módulos de la suite.",
      "cadence": "Se actualiza cuando cambia el método de lectura o publicación.",
      "coverage": "Datos oficiales, criterios, alertas, fichas, preguntas, expedientes, respuestas y correcciones.",
      "lastUpdated": "2026-05-29T17:29:14.843Z",
      "range": "versión 2026-05-29",
      "artifacts": 2,
      "rows": 16,
      "metrics": [
        {
          "label": "pasos",
          "value": "6"
        },
        {
          "label": "principios",
          "value": "5"
        },
        {
          "label": "límites",
          "value": "5"
        }
      ],
      "limits": [
        "Es un método de lectura y publicación; no reemplaza investigación ni expediente.",
        "Cada módulo puede tener reglas específicas adicionales.",
        "El ensayo editorial sigue separado del método operativo."
      ],
      "nextSteps": [
        "Vincular cada ficha crítica con su criterio metodológico exacto.",
        "Publicar historial de cambios del método cuando evolucione."
      ],
      "links": [
        {
          "label": "Abrir método",
          "href": "/herramientas/metodo/"
        },
        {
          "label": "JSON",
          "href": "/herramientas/metodo.json"
        }
      ]
    },
    {
      "id": "tribunal-cuentas",
      "title": "Tribunal de Cuentas",
      "href": "/herramientas/tribunal-cuentas/",
      "status": "Plan",
      "health": "planned",
      "source": "Observaciones y reiteraciones del Tribunal de Cuentas.",
      "cadence": "Pendiente.",
      "coverage": "Sin dataset público integrado todavía.",
      "lastUpdated": "",
      "range": "sin cobertura",
      "artifacts": 0,
      "rows": 0,
      "metrics": [
        {
          "label": "estado",
          "value": "plan"
        },
        {
          "label": "datos",
          "value": "0"
        },
        {
          "label": "fichas",
          "value": "0"
        }
      ],
      "limits": [
        "No hay scraping ni normalización publicados.",
        "Debe separar observación, reiteración y vínculo con gasto o compras."
      ],
      "nextSteps": [
        "Mapear fuente oficial y campos mínimos.",
        "Conectar observaciones con organismos y compras priorizadas."
      ],
      "links": []
    }
  ]
}