{"id":2105,"date":"2026-09-06T21:03:32","date_gmt":"2026-09-07T02:03:32","guid":{"rendered":"https:\/\/nucleo.miespaciodigital.net\/?page_id=2105"},"modified":"2026-09-07T00:20:48","modified_gmt":"2026-09-07T05:20:48","slug":"nueva-meta","status":"publish","type":"page","link":"https:\/\/miespaciodigital.net\/auditoria\/nueva-meta\/","title":{"rendered":"Nueva Meta"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2105\" class=\"elementor elementor-2105\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-08e57fa e-con e-atomic-element e-flexbox-base e-398df9f \" data-id=\"08e57fa\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"08e57fa\" data-e-type=\"e-flexbox\" data-id=\"08e57fa\">\n    \t\t<div class=\"elementor-element elementor-element-32bb14c elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"32bb14c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n.nucleo-meta{\r\n  max-width:900px;\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-meta h1{\r\n  margin:0 0 8px;\r\n  color:#0f2f3b;\r\n}\r\n.nucleo-meta .subtitulo{\r\n  margin-bottom:25px;\r\n  color:#52636b;\r\n}\r\n.nucleo-meta label{\r\n  display:block;\r\n  margin:15px 0 6px;\r\n  font-weight:600;\r\n}\r\n.nucleo-meta input,\r\n.nucleo-meta select,\r\n.nucleo-meta textarea{\r\n  width:100%;\r\n  padding:12px;\r\n  border:1px solid #ccd4d7;\r\n  border-radius:7px;\r\n  background:#fff;\r\n  box-sizing:border-box;\r\n  font-size:16px;\r\n}\r\n.nucleo-meta textarea{\r\n  min-height:90px;\r\n  resize:vertical;\r\n}\r\n.nucleo-fila{\r\n  display:grid;\r\n  grid-template-columns:1fr 1fr;\r\n  gap:18px;\r\n}\r\n.nucleo-institucion{\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-boton{\r\n  margin-top:25px;\r\n  padding:13px 24px;\r\n  border:0;\r\n  border-radius:8px;\r\n  background:#0f4354;\r\n  color:#fff;\r\n  font-size:16px;\r\n  font-weight:700;\r\n  cursor:pointer;\r\n}\r\n@media(max-width:650px){\r\n  .nucleo-fila{grid-template-columns:1fr;}\r\n  .nucleo-meta{padding:20px;}\r\n}\r\n<\/style>\r\n\r\n<div class=\"nucleo-meta\">\r\n  <h1>Registrar Nueva Meta<\/h1>\r\n  <p class=\"subtitulo\">\r\n    Defina el resultado esperado, su valor y el plazo de cumplimiento.\r\n  <\/p>\r\n\r\n  <div class=\"nucleo-institucion\" id=\"nucleo-institucion\">\r\n  <strong>Instituci\u00f3n:<\/strong> Identificando la instituci\u00f3n...\r\n<\/div>\r\n\r\n  <form id=\"nucleo-form-meta\">\r\n\r\n    <label for=\"objetivo_id\">Objetivo institucional<\/label>\r\n    <select id=\"objetivo_id\" name=\"objetivo_id\" required>\r\n      <option value=\"\">Cargando objetivos...<\/option>\r\n    <\/select>\r\n\r\n    <label for=\"nombre\">Nombre de la meta<\/label>\r\n    <input id=\"nombre\" name=\"nombre\" type=\"text\" required>\r\n\r\n    <label for=\"descripcion\">Descripci\u00f3n<\/label>\r\n    <textarea id=\"descripcion\" name=\"descripcion\"><\/textarea>\r\n\r\n    <div class=\"nucleo-fila\">\r\n      <div>\r\n        <label for=\"valor_meta\">Valor de la meta<\/label>\r\n        <input id=\"valor_meta\" name=\"valor_meta\" type=\"number\" step=\"0.01\">\r\n      <\/div>\r\n\r\n      <div>\r\n        <label for=\"unidad_medida\">Unidad de medida<\/label>\r\n        <input id=\"unidad_medida\" name=\"unidad_medida\"\r\n               type=\"text\" placeholder=\"Porcentaje, kil\u00f3metros, solicitudes\u2026\">\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"nucleo-fila\">\r\n      <div>\r\n        <label for=\"fecha_inicio\">Fecha de inicio<\/label>\r\n        <input id=\"fecha_inicio\" name=\"fecha_inicio\" type=\"date\">\r\n      <\/div>\r\n\r\n      <div>\r\n        <label for=\"fecha_limite\">Fecha l\u00edmite<\/label>\r\n        <input id=\"fecha_limite\" name=\"fecha_limite\" type=\"date\">\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <button class=\"nucleo-boton\" type=\"button\">\r\n      Guardar Meta\r\n    <\/button>\r\n\r\n  <\/form>\r\n<\/div>\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@supabase\/supabase-js@2\"><\/script>\r\n\r\n<script>\r\n(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 nucleoSupabase = window.supabase.createClient(\r\n    SUPABASE_URL,\r\n    SUPABASE_KEY\r\n  );\r\n\r\n  const formulario = document.getElementById('nucleo-form-meta');\r\n  const boton = formulario.querySelector('.nucleo-boton');\r\n\r\n  const mensaje = document.createElement('div');\r\n  mensaje.style.marginTop = '15px';\r\n  mensaje.style.fontWeight = '600';\r\n  formulario.appendChild(mensaje);\r\n\r\n    async function cargarContextoInstitucional() {\r\n    const cajaInstitucion =\r\n      document.getElementById('nucleo-institucion');\r\n\r\n    const selectorObjetivos =\r\n      document.getElementById('objetivo_id');\r\n\r\n    try {\r\n      const { data: sesionData } =\r\n        await nucleoSupabase.auth.getSession();\r\n\r\n      const sesion = sesionData.session;\r\n\r\n      if (!sesion) {\r\n        throw new Error('Debe iniciar sesi\u00f3n en N\u00daCLEO.');\r\n      }\r\n\r\n      const { data: membresia, error: errorMembresia } =\r\n        await nucleoSupabase\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, error: errorInstitucion } =\r\n        await nucleoSupabase\r\n          .from('instituciones')\r\n          .select('nombre')\r\n          .eq('id', membresia.institucion_id)\r\n          .maybeSingle();\r\n\r\n      if (errorInstitucion) throw errorInstitucion;\r\n\r\n      cajaInstitucion.innerHTML =\r\n        '<strong>Instituci\u00f3n:<\/strong> ' +\r\n        (institucion?.nombre ||\r\n         'Instituci\u00f3n ' + membresia.institucion_id);\r\n\r\n      const { data: objetivos, error: errorObjetivos } =\r\n        await nucleoSupabase\r\n          .from('objetivos')\r\n          .select('id,nombre')\r\n          .eq('institucion_id', membresia.institucion_id)\r\n          .order('id', { ascending:true });\r\n\r\n      if (errorObjetivos) throw errorObjetivos;\r\n\r\n      const nombresVistos = new Set();\r\n\r\n      const objetivosUnicos = (objetivos || []).filter(function (objetivo) {\r\n        if (nombresVistos.has(objetivo.nombre)) return false;\r\n        nombresVistos.add(objetivo.nombre);\r\n        return true;\r\n      });\r\n\r\n      selectorObjetivos.innerHTML =\r\n        '<option value=\"\">Seleccione un objetivo<\/option>';\r\n\r\n      objetivosUnicos.forEach(function (objetivo) {\r\n        const opcion = document.createElement('option');\r\n        opcion.value = objetivo.id;\r\n        opcion.textContent = objetivo.nombre;\r\n        selectorObjetivos.appendChild(opcion);\r\n      });\r\n\r\n      if (objetivosUnicos.length === 0) {\r\n        selectorObjetivos.innerHTML =\r\n          '<option value=\"\">No hay objetivos registrados<\/option>';\r\n      }\r\n\r\n    } catch (error) {\r\n      cajaInstitucion.innerHTML =\r\n        '<strong>Instituci\u00f3n:<\/strong> ' + error.message;\r\n\r\n      selectorObjetivos.innerHTML =\r\n        '<option value=\"\">No se pudieron cargar los objetivos<\/option>';\r\n    }\r\n  }\r\n\r\n  cargarContextoInstitucional();\r\n  boton.addEventListener('click', async function () {\r\n    mensaje.style.color = '#12303b';\r\n    mensaje.textContent = 'Guardando la meta...';\r\n    boton.disabled = true;\r\n\r\n    try {\r\n      const { data: sesionData } =\r\n        await nucleoSupabase.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 antes de registrar una meta.'\r\n        );\r\n      }\r\n\r\n      const { data: membresia, error: errorMembresia } =\r\n        await nucleoSupabase\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 nombre = document.getElementById('nombre').value.trim();\r\n      const objetivoId = document.getElementById('objetivo_id').value;\r\n      const valorMeta = document.getElementById('valor_meta').value;\r\n\r\n      if (!objetivoId || !nombre) {\r\n      throw new Error('Seleccione el objetivo y escriba el nombre de la meta.');\r\n       }\r\n      const nuevaMeta = {\r\n        institucion_id: membresia.institucion_id,\r\n        objetivo_id: Number(objetivoId),\r\n        nombre: nombre,\r\n        descripcion:\r\n          document.getElementById('descripcion').value.trim() || null,\r\n        valor_meta: valorMeta === '' ? null : Number(valorMeta),\r\n        unidad_medida:\r\n          document.getElementById('unidad_medida').value.trim() || null,\r\n        fecha_inicio:\r\n          document.getElementById('fecha_inicio').value || null,\r\n        fecha_limite:\r\n          document.getElementById('fecha_limite').value || null,\r\n        estado: 'activo'\r\n      };\r\n\r\n      const { error: errorInsertar } =\r\n        await nucleoSupabase\r\n          .from('metas')\r\n          .insert(nuevaMeta);\r\n\r\n      if (errorInsertar) throw errorInsertar;\r\n\r\n      mensaje.style.color = '#18723a';\r\n      mensaje.textContent =\r\n        'Meta registrada correctamente en N\u00daCLEO.';\r\n\r\n      formulario.reset();\r\n\r\n    } catch (error) {\r\n      mensaje.style.color = '#b42318';\r\n      mensaje.textContent =\r\n        'No se pudo guardar: ' + error.message;\r\n    } finally {\r\n      boton.disabled = false;\r\n    }\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>Registrar Nueva Meta Defina el resultado esperado, su valor y el plazo de cumplimiento. Instituci\u00f3n: Identificando la instituci\u00f3n&#8230; Objetivo institucional Cargando objetivos&#8230; Nombre de la meta Descripci\u00f3n Valor de la meta Unidad de medida Fecha de inicio Fecha l\u00edmite Guardar Meta<\/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-2105","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/2105","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=2105"}],"version-history":[{"count":22,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/2105\/revisions"}],"predecessor-version":[{"id":2154,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/2105\/revisions\/2154"}],"wp:attachment":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/media?parent=2105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}