{"id":2126,"date":"2026-09-06T22:21:22","date_gmt":"2026-09-07T03:21:22","guid":{"rendered":"https:\/\/nucleo.miespaciodigital.net\/?page_id=2126"},"modified":"2026-09-06T22:32:44","modified_gmt":"2026-09-07T03:32:44","slug":"metas-del-ano","status":"publish","type":"page","link":"https:\/\/miespaciodigital.net\/auditoria\/metas-del-ano\/","title":{"rendered":"Metas del A\u00f1o"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2126\" class=\"elementor elementor-2126\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4e3794e e-con e-atomic-element e-flexbox-base e-80cafa4 \" data-id=\"4e3794e\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"4e3794e\" data-e-type=\"e-flexbox\" data-id=\"4e3794e\">\n    \t\t<div class=\"elementor-element elementor-element-810fb61 elementor-widget elementor-widget-html\" data-id=\"810fb61\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n.nucleo-lista{\r\n  max-width:1050px;\r\n  margin:20px auto;\r\n  padding:30px;\r\n  background:#f8f6ef;\r\n  border-radius:14px;\r\n  font-family:Arial,sans-serif;\r\n  color:#12303b;\r\n}\r\n.nucleo-lista h1{\r\n  margin:0 0 8px;\r\n  color:#0f2f3b;\r\n}\r\n.nucleo-subtitulo{\r\n  margin:0 0 22px;\r\n  color:#52636b;\r\n}\r\n.nucleo-cabecera{\r\n  display:flex;\r\n  justify-content:space-between;\r\n  align-items:center;\r\n  gap:15px;\r\n  margin-bottom:22px;\r\n}\r\n.nucleo-nueva{\r\n  display:inline-block;\r\n  padding:12px 18px;\r\n  border-radius:8px;\r\n  background:#0f4354;\r\n  color:#fff !important;\r\n  text-decoration:none;\r\n  font-weight:700;\r\n  white-space:nowrap;\r\n}\r\n.nucleo-institucion-lista{\r\n  margin-bottom:20px;\r\n  padding:13px;\r\n  background:#e8f0f3;\r\n  border-left:4px solid #d99622;\r\n  border-radius:6px;\r\n}\r\n.nucleo-tarjeta{\r\n  margin-bottom:15px;\r\n  padding:20px;\r\n  background:#fff;\r\n  border:1px solid #dde3e5;\r\n  border-radius:10px;\r\n  box-shadow:0 2px 5px rgba(0,0,0,.05);\r\n}\r\n.nucleo-tarjeta h3{\r\n  margin:0 0 10px;\r\n  color:#0f2f3b;\r\n}\r\n.nucleo-datos{\r\n  display:grid;\r\n  grid-template-columns:repeat(4,1fr);\r\n  gap:12px;\r\n  margin-top:15px;\r\n}\r\n.nucleo-dato{\r\n  padding:10px;\r\n  background:#f5f7f8;\r\n  border-radius:6px;\r\n}\r\n.nucleo-dato small{\r\n  display:block;\r\n  margin-bottom:4px;\r\n  color:#64747b;\r\n}\r\n.nucleo-estado{\r\n  display:inline-block;\r\n  margin-top:10px;\r\n  padding:5px 10px;\r\n  border-radius:15px;\r\n  background:#def3e5;\r\n  color:#18723a;\r\n  font-weight:700;\r\n}\r\n.nucleo-mensaje{\r\n  padding:18px;\r\n  background:#fff;\r\n  border-radius:8px;\r\n}\r\n@media(max-width:750px){\r\n  .nucleo-lista{padding:20px;}\r\n  .nucleo-cabecera{display:block;}\r\n  .nucleo-nueva{margin-top:15px;}\r\n  .nucleo-datos{grid-template-columns:1fr 1fr;}\r\n}\r\n<\/style>\r\n\r\n<div class=\"nucleo-lista\">\r\n  <div class=\"nucleo-cabecera\">\r\n    <div>\r\n      <h1>Metas del A\u00f1o<\/h1>\r\n      <p class=\"nucleo-subtitulo\">\r\n        Seguimiento de las metas institucionales registradas en N\u00daCLEO.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <a class=\"nucleo-nueva\"\r\n       href=\"https:\/\/miespaciodigital.net\/auditoria\/nueva-meta\/\">\r\n      + Nueva Meta\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <div id=\"institucion-lista\"\r\n       class=\"nucleo-institucion-lista\">\r\n    Identificando la instituci\u00f3n...\r\n  <\/div>\r\n\r\n  <div id=\"resultado-metas\"\r\n       class=\"nucleo-mensaje\">\r\n    Cargando metas...\r\n  <\/div>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@supabase\/supabase-js@2\"><\/script>\r\n\r\n<script>\r\n(async function () {\r\n  const SUPABASE_URL =\r\n    'https:\/\/gpvhswppvuogtqgmudng.supabase.co';\r\n\r\n  const SUPABASE_KEY =\r\n    'sb_publishable_DWrUYYSvQpvVYZsNhRTrzg_wdfA8M_h';\r\n\r\n  const cliente = window.supabase.createClient(\r\n    SUPABASE_URL,\r\n    SUPABASE_KEY\r\n  );\r\n\r\n  const resultado = document.getElementById('resultado-metas');\r\n  const institucionCaja =\r\n    document.getElementById('institucion-lista');\r\n\r\n  function proteger(valor) {\r\n    return String(valor ?? '')\r\n      .replaceAll('&','&amp;')\r\n      .replaceAll('<','&lt;')\r\n      .replaceAll('>','&gt;')\r\n      .replaceAll('\"','&quot;')\r\n      .replaceAll(\"'\",\"&#039;\");\r\n  }\r\n\r\n  function fecha(valor) {\r\n    if (!valor) return 'Sin fecha';\r\n    const partes = valor.split('-');\r\n    return partes[2] + '\/' + partes[1] + '\/' + partes[0];\r\n  }\r\n\r\n  try {\r\n    const { data: sesionData } =\r\n      await cliente.auth.getSession();\r\n\r\n    const sesion = sesionData.session;\r\n\r\n    if (!sesion) {\r\n      throw new Error(\r\n        'Debe iniciar sesi\u00f3n en N\u00daCLEO para ver las metas.'\r\n      );\r\n    }\r\n\r\n    const { data: membresia, error: errorMembresia } =\r\n      await cliente\r\n        .from('membresias_institucion')\r\n        .select('institucion_id')\r\n        .eq('usuario_id', sesion.user.id)\r\n        .eq('es_principal', true)\r\n        .eq('estado', 'activo')\r\n        .maybeSingle();\r\n\r\n    if (errorMembresia) throw errorMembresia;\r\n\r\n    if (!membresia) {\r\n      throw new Error(\r\n        'No se encontr\u00f3 una instituci\u00f3n principal activa.'\r\n      );\r\n    }\r\n\r\n    const { data: institucion } =\r\n      await cliente\r\n        .from('instituciones')\r\n        .select('nombre')\r\n        .eq('id', membresia.institucion_id)\r\n        .maybeSingle();\r\n\r\n    institucionCaja.innerHTML =\r\n      '<strong>Instituci\u00f3n:<\/strong> ' +\r\n      proteger(\r\n        institucion?.nombre ||\r\n        ('Instituci\u00f3n ' + membresia.institucion_id)\r\n      );\r\n\r\n    const { data: metas, error: errorMetas } =\r\n      await cliente\r\n        .from('metas')\r\n        .select(\r\n          'id,nombre,descripcion,valor_meta,unidad_medida,fecha_inicio,fecha_limite,estado,objetivo_id'\r\n        )\r\n        .eq('institucion_id', membresia.institucion_id)\r\n        .order('id', { ascending:false });\r\n\r\n    if (errorMetas) throw errorMetas;\r\n\r\n    if (!metas || metas.length === 0) {\r\n      resultado.className = 'nucleo-mensaje';\r\n      resultado.textContent =\r\n        'Esta instituci\u00f3n todav\u00eda no tiene metas registradas.';\r\n      return;\r\n    }\r\n\r\n    resultado.className = '';\r\n    resultado.innerHTML = metas.map(function (meta) {\r\n      const valor =\r\n        meta.valor_meta === null\r\n          ? 'No definido'\r\n          : proteger(meta.valor_meta) + ' ' +\r\n            proteger(meta.unidad_medida || '');\r\n\r\n      return `\r\n        <article class=\"nucleo-tarjeta\">\r\n          <h3>${proteger(meta.nombre)}<\/h3>\r\n\r\n          <p>\r\n            ${proteger(meta.descripcion || 'Sin descripci\u00f3n')}\r\n          <\/p>\r\n\r\n          <div class=\"nucleo-datos\">\r\n            <div class=\"nucleo-dato\">\r\n              <small>C\u00f3digo<\/small>\r\n              META-${String(meta.id).padStart(3,'0')}\r\n            <\/div>\r\n\r\n            <div class=\"nucleo-dato\">\r\n              <small>Valor esperado<\/small>\r\n              ${valor}\r\n            <\/div>\r\n\r\n            <div class=\"nucleo-dato\">\r\n              <small>Fecha de inicio<\/small>\r\n              ${fecha(meta.fecha_inicio)}\r\n            <\/div>\r\n\r\n            <div class=\"nucleo-dato\">\r\n              <small>Fecha l\u00edmite<\/small>\r\n              ${fecha(meta.fecha_limite)}\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <span class=\"nucleo-estado\">\r\n            ${proteger(meta.estado)}\r\n          <\/span>\r\n        <\/article>\r\n      `;\r\n    }).join('');\r\n\r\n  } catch (error) {\r\n    institucionCaja.style.display = 'none';\r\n    resultado.className = 'nucleo-mensaje';\r\n    resultado.style.color = '#b42318';\r\n    resultado.textContent =\r\n      'No se pudieron cargar las metas: ' + error.message;\r\n  }\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Metas del A\u00f1o Seguimiento de las metas institucionales registradas en N\u00daCLEO. + Nueva Meta Identificando la instituci\u00f3n&#8230; Cargando metas&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-2126","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/2126","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/comments?post=2126"}],"version-history":[{"count":7,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/2126\/revisions"}],"predecessor-version":[{"id":2135,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/2126\/revisions\/2135"}],"wp:attachment":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/media?parent=2126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}