{"id":915,"date":"2026-08-19T21:24:43","date_gmt":"2026-08-20T02:24:43","guid":{"rendered":"https:\/\/nucleo.miespaciodigital.net\/?page_id=915"},"modified":"2026-09-07T21:30:31","modified_gmt":"2026-09-08T02:30:31","slug":"acciones-correctivas-2","status":"publish","type":"page","link":"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/4-gestion-por-resultados\/acciones-correctivas-2\/","title":{"rendered":"Acciones Correctivas"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"915\" class=\"elementor elementor-915\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fc53782 e-con e-atomic-element e-flexbox-base e-c7090a9 \" data-id=\"fc53782\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"fc53782\" data-e-type=\"e-flexbox\" data-id=\"fc53782\">\n    <div class=\"elementor-element elementor-element-5f4c678 e-con e-atomic-element e-flexbox-base \" data-id=\"5f4c678\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"5f4c678\" data-e-type=\"e-flexbox\" data-id=\"5f4c678\">\n    \t\t<div class=\"elementor-element elementor-element-12cbf65 elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"12cbf65\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\n<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>N\u00facleo \u2014 Acciones Correctivas<\/title>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap\" rel=\"stylesheet\">\n<style>\n  :root{\n    --ink:#132029; --ink-soft:#3d4d55;\n    --paper:#F4F2EC; --paper-raised:#FFFFFF; --line:#DDD8CB;\n    --navy:#12303D; --navy-soft:#1C3E4E;\n    --gold:#C98A3B; --gold-soft:#E8C899;\n    --green:#3A7D57; --green-bg:#E4EEE6;\n    --amber:#B8862F; --amber-bg:#F2E9D6;\n    --red:#B4432B; --red-bg:#F3E1DB;\n    --radius:14px;\n    --shadow: 0 1px 2px rgba(19,32,41,0.06), 0 8px 24px -12px rgba(19,32,41,0.18);\n  }\n  *{box-sizing:border-box;}\n  html,body{margin:0;padding:0;}\n  body{background:var(--paper); color:var(--ink); font-family:'IBM Plex Sans', sans-serif; -webkit-font-smoothing:antialiased;}\n  .app{display:grid; grid-template-columns:260px 1fr; min-height:100vh;}\n\n  .sidebar{background:var(--navy); color:#EDEBE2; padding:28px 20px 20px; display:flex; flex-direction:column; gap:28px;}\n  .brand{display:flex; align-items:center; gap:10px;}\n  .brand-mark{width:34px;height:34px;border-radius:50%; background:radial-gradient(circle at 35% 30%, var(--gold-soft), var(--gold) 60%); box-shadow: inset 0 0 0 2px rgba(255,255,255,0.25); flex-shrink:0;}\n  .brand-name{font-family:'Fraunces', serif; font-weight:600; font-size:1.25rem;}\n  .brand-sub{font-size:0.7rem; color:#9FB2BC; letter-spacing:0.06em; text-transform:uppercase; margin-top:-22px; margin-left:44px;}\n  nav{display:flex;flex-direction:column;gap:2px;margin-top:6px;}\n  .nav-item{display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:8px; font-size:0.87rem; color:#C7D3D8; text-decoration:none; cursor:pointer; transition:background 0.15s ease, color 0.15s ease;}\n  .nav-item .num{font-family:'IBM Plex Mono', monospace; font-size:0.72rem; color:#7C929B; width:16px;}\n  .nav-item:hover{background:rgba(255,255,255,0.06); color:#fff;}\n  .nav-item.active{background:var(--navy-soft); color:#fff; box-shadow: inset 3px 0 0 var(--gold);}\n  .nav-item.active .num{color:var(--gold);}\n  .nav-sub{margin-left:26px; display:flex; flex-direction:column; gap:1px;}\n  .nav-sub .nav-item{font-size:0.8rem; padding:7px 12px; color:#9FB2BC;}\n  .nav-sub .nav-item.active{color:#fff;}\n  .sidebar-footer{margin-top:auto; font-size:0.72rem; color:#7C929B; padding-top:16px; border-top:1px solid rgba(255,255,255,0.1);}\n\n  main{padding:32px 40px 60px; max-width:1240px;}\n  .topbar{display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:26px; flex-wrap:wrap; gap:16px;}\n  .eyebrow{font-family:'IBM Plex Mono', monospace; font-size:0.72rem; letter-spacing:0.08em; text-transform:uppercase; color:var(--gold); margin-bottom:6px;}\n  h1{font-family:'Fraunces', serif; font-weight:600; font-size:2rem; margin:0; color:var(--navy);}\n  .subtitle{color:var(--ink-soft); font-size:0.95rem; margin-top:6px;}\n  .user-chip{display:flex; align-items:center; gap:10px; background:var(--paper-raised); border:1px solid var(--line); border-radius:999px; padding:6px 14px 6px 6px; box-shadow:var(--shadow);}\n  .user-avatar{width:30px;height:30px;border-radius:50%; background:var(--navy); color:#EDEBE2; display:flex;align-items:center;justify-content:center; font-size:0.75rem;font-weight:600; font-family:'IBM Plex Mono',monospace;}\n  .user-chip .name{font-size:0.82rem;font-weight:500;}\n  .user-chip .role{font-size:0.72rem;color:var(--ink-soft);}\n\n  .summary-strip{display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin-bottom:22px;}\n  .kpi-card{background:var(--paper-raised); border:1px solid var(--line); border-radius:var(--radius); padding:18px 20px; box-shadow:var(--shadow); position:relative; overflow:hidden;}\n  .kpi-card::before{content:\"\"; position:absolute; top:0; left:0; right:0; height:3px;}\n  .kpi-card.navy::before{background:var(--navy);}\n  .kpi-card.red::before{background:var(--red);}\n  .kpi-card.amber::before{background:var(--amber);}\n  .kpi-card.green::before{background:var(--green);}\n  .kpi-label{font-size:0.74rem; color:var(--ink-soft); margin-bottom:6px;}\n  .kpi-value{font-family:'Fraunces', serif; font-size:1.8rem; font-weight:600; color:var(--navy);}\n  .kpi-card.red .kpi-value{color:var(--red);}\n  .kpi-card.amber .kpi-value{color:var(--amber);}\n  .kpi-card.green .kpi-value{color:var(--green);}\n\n  .toolbar{display:flex; gap:12px; align-items:center; margin-bottom:16px; flex-wrap:wrap;}\n  .search-box{flex:1; min-width:220px; display:flex; align-items:center; gap:8px; background:var(--paper-raised); border:1px solid var(--line); border-radius:10px; padding:10px 14px;}\n  .search-box input{border:none; outline:none; background:transparent; font-family:'IBM Plex Sans', sans-serif; font-size:0.88rem; color:var(--ink); width:100%;}\n  .search-box svg{flex-shrink:0; color:var(--ink-soft);}\n  .filter-chip{font-size:0.8rem; padding:9px 14px; border-radius:10px; border:1px solid var(--line); background:var(--paper-raised); color:var(--ink-soft); cursor:pointer; user-select:none; transition:border-color 0.15s ease, color 0.15s ease;}\n  .filter-chip.active{border-color:var(--navy); color:var(--navy); font-weight:600; background:var(--gold-soft);}\n  .btn-new{margin-left:auto; font-family:'IBM Plex Sans', sans-serif; font-size:0.85rem; font-weight:600; padding:10px 18px; border-radius:10px; border:none; background:var(--navy); color:#fff; cursor:pointer;}\n\n  .form-panel{background:var(--paper-raised); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); padding:24px; margin-bottom:22px; display:none;}\n  .form-panel.open{display:block;}\n  .form-panel h3{font-family:'Fraunces', serif; font-size:1.1rem; color:var(--navy); margin:0 0 16px;}\n  .form-grid{display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-bottom:16px;}\n  .form-field{display:flex; flex-direction:column; gap:6px;}\n  .form-field.full{grid-column:1 \/ -1;}\n  .form-field label{font-size:0.74rem; font-weight:600; color:var(--ink-soft); text-transform:uppercase; letter-spacing:0.03em;}\n  .form-field select, .form-field input, .form-field textarea{border:1px solid var(--line); border-radius:8px; padding:10px 12px; font-family:'IBM Plex Sans', sans-serif; font-size:0.86rem; color:var(--ink); background:var(--paper-raised);}\n  .form-field textarea{resize:vertical; min-height:70px;}\n  .form-actions{display:flex; gap:10px; justify-content:flex-end;}\n  .btn{font-family:'IBM Plex Sans', sans-serif; font-size:0.82rem; font-weight:600; padding:10px 16px; border-radius:9px; border:1px solid var(--navy); background:var(--navy); color:#fff; cursor:pointer;}\n  .btn.secondary{background:transparent; color:var(--navy);}\n\n  .panel{background:var(--paper-raised); border:1px solid var(--line); border-radius:var(--radius); box-shadow:var(--shadow); overflow:hidden;}\n  table{width:100%; border-collapse:collapse;}\n  thead th{text-align:left; font-size:0.68rem; text-transform:uppercase; letter-spacing:0.04em; color:var(--ink-soft); padding:13px 16px; border-bottom:1px solid var(--line); background:#FAF9F5;}\n  tbody tr.data-row{border-bottom:1px solid var(--line); cursor:pointer; transition:background 0.12s ease;}\n  tbody tr.data-row:hover{background:#FAF8F2;}\n  tbody td{padding:13px 16px; font-size:0.83rem; vertical-align:top;}\n  .code{font-family:'IBM Plex Mono',monospace; font-size:0.76rem; color:var(--gold); font-weight:500;}\n  .desc-cell .name{font-weight:500; font-size:0.85rem; line-height:1.4;}\n  .desc-cell .sub{font-size:0.72rem; color:var(--ink-soft); margin-top:3px;}\n  .plazo-cell{font-family:'IBM Plex Mono',monospace; font-size:0.8rem;}\n  .plazo-cell.overdue{color:var(--red); font-weight:600;}\n  .plazo-cell.soon{color:var(--amber); font-weight:600;}\n  .status-pill{display:inline-flex; align-items:center; gap:6px; font-size:0.72rem; font-weight:600; padding:4px 10px; border-radius:999px; white-space:nowrap;}\n  .status-pill.sin_responsable{background:var(--red-bg); color:var(--red);}\n  .status-pill.en_ejecucion{background:var(--amber-bg); color:var(--amber);}\n  .status-pill.cumplida{background:var(--green-bg); color:var(--green);}\n  .status-pill .dot{width:6px;height:6px;border-radius:50%; background:currentColor;}\n\n  .detail-row td{padding:0; border-bottom:1px solid var(--line);}\n  .detail-inner{padding:18px 24px; background:#FAF9F5; display:none; grid-template-columns:repeat(3,1fr); gap:18px;}\n  .detail-inner.open{display:grid;}\n  .detail-block{grid-column:span 1;}\n  .detail-block.full{grid-column:1\/-1;}\n  .detail-block .k{font-size:0.68rem; text-transform:uppercase; letter-spacing:0.04em; color:var(--ink-soft); margin-bottom:4px;}\n  .detail-block .v{font-size:0.85rem; font-weight:500; line-height:1.5;}\n  .advance-btn{grid-column:1\/-1; margin-top:6px;}\n  .advance-btn button{font-size:0.78rem; padding:8px 14px; border-radius:8px; border:1px solid var(--navy); background:#fff; color:var(--navy); cursor:pointer; font-weight:600;}\n  .link-note{grid-column:1\/-1; font-size:0.78rem; color:var(--gold); background:var(--gold-soft); padding:8px 12px; border-radius:8px;}\n\n  .no-results{padding:40px; text-align:center; color:var(--ink-soft); font-size:0.9rem; display:none;}\n  .demo-note{margin-top:20px; font-size:0.78rem; color:var(--ink-soft); text-align:center; padding:14px; border:1px dashed var(--line); border-radius:10px; background:rgba(201,138,59,0.05);}\n\n  @media (max-width:980px){\n    .app{grid-template-columns:1fr;}\n    .sidebar{display:none;}\n    .summary-strip{grid-template-columns:repeat(2,1fr);}\n    .form-grid{grid-template-columns:1fr;}\n    thead{display:none;}\n    table, tbody, tr, td{display:block; width:100%;}\n    tbody tr.data-row{padding:12px 16px; border-bottom:1px solid var(--line);}\n    tbody td{padding:4px 0;}\n  }\n<\/style>\n<\/head>\n<body>\n<div class=\"app\">\n\n  <aside class=\"sidebar\">\n    <div class=\"brand\">\n      <img decoding=\"async\" src=\"https:\/\/miespaciodigital.net\/auditoria\/wp-content\/uploads\/2026\/09\/LOGO1.jpg\"\n           alt=\"N\u00daCLEO\"\n           style=\"width:100%; max-width:190px; height:auto; display:block;\">\n    <\/div>\n    <nav>\n      <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/tablero-general\/\"><span class=\"num\">01<\/span> Tablero General<\/a>\n      <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/atencion-ciudadana-tupa\/\"><span class=\"num\">02<\/span> Atenci\u00f3n Ciudadana<\/a>\n      <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/asistente-interno-ia\/\"><span class=\"num\">03<\/span> Asistente Interno (IA)<\/a>\n      <a class=\"nav-item active\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/4-gestion-por-resultados\/\"><span class=\"num\">04<\/span> Gesti\u00f3n por Resultados<\/a>\n      <div class=\"nav-sub\">\n        <a class=\"nav-item active\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/4-gestion-por-resultados\/acciones-correctivas-2\/\">Acciones Correctivas<\/a>\n        <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/4-gestion-por-resultados\/indicadores-kpi-2\/\">Indicadores KPI<\/a>\n        <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/4-gestion-por-resultados\/matriz-raci-v2\/\">Matriz RACI<\/a>\n        <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/4-gestion-por-resultados\/metas-y-linea-base-2\/\">Metas y L\u00ednea Base<\/a>\n        <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/4-gestion-por-resultados\/seguimiento-de-resultados-v2\/\">Seguimiento de Resultados-v2<\/a>\n      <\/div>\n      <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/5-planeamiento-y-presupuesto\/\"><span class=\"num\">05<\/span> Planeamiento y Presupuesto<\/a>\n      <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/auditoria-y-control\/\"><span class=\"num\">06<\/span> Auditor\u00eda y Control<\/a>\n      <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/informes-y-rendicion-sistema\/\"><span class=\"num\">07<\/span> Informes y Rendici\u00f3n<\/a>\n      <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-organismos-de-gobierno\/\"><span class=\"num\">08<\/span> Configuraci\u00f3n<\/a>\n      <a class=\"nav-item\" href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/ayuda-y-soporte-2\/\"><span class=\"num\">09<\/span> Ayuda y Soporte<\/a>\n    <\/nav>\n    <div class=\"sidebar-footer\">N\u00daCLEO<br>Gesti\u00f3n por Resultados con IA<\/div>\n  <\/aside>\n\n  <main>\n    <div class=\"topbar\">\n      <div>\n        <div class=\"eyebrow\">Gesti\u00f3n por Resultados<\/div>\n        <h1>Acciones Correctivas<\/h1>\n        <div class=\"subtitle\">Compromisos derivados de hallazgos de auditor\u00eda y autoevaluaci\u00f3n, con responsable y plazo<\/div>\n      <\/div>\n      <div class=\"user-chip\">\n        <div class=\"user-avatar\">DM<\/div>\n        <div><div class=\"name\">Demo Municipal<\/div><div class=\"role\">Gerente Municipal<\/div><\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"summary-strip\">\n      <div class=\"kpi-card navy\"><div class=\"kpi-label\">Acciones activas<\/div><div class=\"kpi-value\" id=\"kpiTotal\">\u2014<\/div><\/div>\n      <div class=\"kpi-card red\"><div class=\"kpi-label\">Sin responsable asignado<\/div><div class=\"kpi-value\" id=\"kpiSinResp\">\u2014<\/div><\/div>\n      <div class=\"kpi-card amber\"><div class=\"kpi-label\">Vencidas<\/div><div class=\"kpi-value\" id=\"kpiVencidas\">\u2014<\/div><\/div>\n      <div class=\"kpi-card green\"><div class=\"kpi-label\">Cumplidas este trimestre<\/div><div class=\"kpi-value\" id=\"kpiCumplidas\">\u2014<\/div><\/div>\n    <\/div>\n\n    <div class=\"toolbar\">\n      <div class=\"search-box\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/svg>\n        <input id=\"searchInput\" type=\"text\" placeholder=\"Buscar por c\u00f3digo, gerencia o descripci\u00f3n...\">\n      <\/div>\n      <div class=\"filter-chip active\" data-status=\"todos\">Todos<\/div>\n      <div class=\"filter-chip\" data-status=\"sin_responsable\">Sin responsable<\/div>\n      <div class=\"filter-chip\" data-status=\"en_ejecucion\">En ejecuci\u00f3n<\/div>\n      <div class=\"filter-chip\" data-status=\"cumplida\">Cumplidas<\/div>\n      <button class=\"btn-new\" onclick=\"toggleForm()\">+ Nueva acci\u00f3n correctiva<\/button>\n    <\/div>\n\n    <div class=\"form-panel\" id=\"formPanel\">\n      <h3>Registrar acci\u00f3n correctiva<\/h3>\n      <div class=\"form-grid\">\n        <div class=\"form-field full\">\n          <label>Descripci\u00f3n del compromiso<\/label>\n          <textarea id=\"fDesc\" placeholder=\"Ej: Elaborar directiva interna para el manejo de conformidades de servicio\"><\/textarea>\n        <\/div>\n        <div class=\"form-field\">\n          <label>Origen<\/label>\n          <select id=\"fOrigen\">\n            <option>Hallazgo de Auditor\u00eda<\/option>\n            <option>Autoevaluaci\u00f3n interna<\/option>\n            <option>Recomendaci\u00f3n del Concejo<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"form-field\">\n          <label>Gerencia responsable<\/label>\n          <select id=\"fGerencia\"><\/select>\n        <\/div>\n        <div class=\"form-field\">\n          <label>Plazo de cumplimiento<\/label>\n          <input type=\"date\" id=\"fPlazo\">\n        <\/div>\n      <\/div>\n      <div class=\"form-actions\">\n        <button class=\"btn secondary\" onclick=\"toggleForm()\">Cancelar<\/button>\n        <button class=\"btn\" onclick=\"registrarAccion()\">Registrar acci\u00f3n<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"panel\">\n      <table>\n        <thead>\n          <tr>\n            <th>C\u00f3digo<\/th>\n            <th>Acci\u00f3n correctiva<\/th>\n            <th>Origen<\/th>\n            <th>Gerencia responsable<\/th>\n            <th>Plazo<\/th>\n            <th>Estado<\/th>\n          <\/tr>\n        <\/thead>\n        <tbody id=\"tableBody\"><\/tbody>\n      <\/table>\n      <div class=\"no-results\" id=\"noResults\">No se encontraron acciones que coincidan con tu b\u00fasqueda.<\/div>\n    <\/div>\n\n    <!-- ACCI\u00d3N CORRECTIVA REAL DESDE SUPABASE -->\n<style>\n  .accion-real{\n    margin:22px 0;\n    padding:22px;\n    background:#fff;\n    border:2px solid #B4432B;\n    border-radius:14px;\n    box-shadow:0 8px 24px -12px rgba(19,32,41,.20);\n  }\n  .accion-real__badge{\n    display:inline-block;\n    padding:5px 10px;\n    background:#F3E1DB;\n    color:#B4432B;\n    border-radius:999px;\n    font-size:12px;\n    font-weight:700;\n  }\n  .accion-real h2{\n    margin:12px 0 6px;\n    color:#12303D;\n    font-family:'Fraunces',serif;\n  }\n  .accion-real__grid{\n    display:grid;\n    grid-template-columns:repeat(3,1fr);\n    gap:12px;\n    margin-top:16px;\n  }\n  .accion-real__dato{\n    padding:14px;\n    background:#FAF9F5;\n    border:1px solid #DDD8CB;\n    border-radius:10px;\n  }\n  .accion-real__dato small{\n    display:block;\n    color:#3D4D55;\n    margin-bottom:5px;\n  }\n  .accion-real__bloque{\n    margin-top:12px;\n    padding:15px;\n    background:#FAF9F5;\n    border-left:4px solid #C98A3B;\n    border-radius:8px;\n  }\n  .accion-real__bloque h3{\n    margin:0 0 6px;\n    font-size:15px;\n    color:#12303D;\n  }\n  .accion-real__error{\n    padding:14px;\n    background:#F3E1DB;\n    color:#9B2525;\n    border-radius:8px;\n  }\n  @media(max-width:800px){\n    .accion-real__grid{grid-template-columns:1fr;}\n  }\n<\/style>\n\n<section class=\"accion-real\">\n  <span class=\"accion-real__badge\">ACCI\u00d3N REAL CONECTADA A SUPABASE<\/span>\n  <div id=\"nucleoAccionReal\">\n    Cargando la acci\u00f3n correctiva de San Marcos...\n  <\/div>\n<\/section>\n\n<script>\n(async function(){\n  const contenedor = document.getElementById('nucleoAccionReal');\n\n  function proteger(valor){\n    return String(valor ?? '')\n      .replaceAll('&','&amp;')\n      .replaceAll('<','&lt;')\n      .replaceAll('>','&gt;')\n      .replaceAll('\"','&quot;');\n  }\n\n  function esperarSupabase(){\n    return new Promise((resolve,reject)=>{\n      let intentos = 50;\n      const reloj = setInterval(()=>{\n        if(window.supabase && window.supabase.createClient){\n          clearInterval(reloj);\n          resolve();\n        }else if(--intentos === 0){\n          clearInterval(reloj);\n          reject(new Error('No se pudo cargar la conexi\u00f3n con Supabase.'));\n        }\n      },100);\n    });\n  }\n\n  try{\n    await esperarSupabase();\n\n    const cliente = window.supabase.createClient(\n      'https:\/\/gpvhswppvuogtqgmudng.supabase.co',\n      'sb_publishable_DWrUYYSvQpvVYZsNhRTrzg_wdfA8M_h'\n    );\n\n    const {data:sesionDatos} = await cliente.auth.getSession();\n\n    if(!sesionDatos.session){\n      throw new Error('Debe iniciar sesi\u00f3n en NUCLEO.');\n    }\n\n    const {data,error} = await cliente.rpc(\n      'obtener_caso_gestion',\n      {p_meta_id:7}\n    );\n\n    if(error) throw error;\n    if(!data || !data.length){\n      throw new Error('No se encontr\u00f3 la acci\u00f3n correctiva.');\n    }\n\n    const c = data[0];\n\n    contenedor.innerHTML = `\n      <h2>${proteger(c.meta)}<\/h2>\n      <p><strong>Origen:<\/strong> ${proteger(c.alerta)}\n      \u2014 Nivel ${proteger(c.nivel_alerta)}<\/p>\n\n      <div class=\"accion-real__bloque\">\n        <h3>Decisi\u00f3n de la autoridad<\/h3>\n        ${proteger(c.decision_autoridad)}\n      <\/div>\n\n      <div class=\"accion-real__bloque\">\n        <h3>Acci\u00f3n correctiva acordada<\/h3>\n        ${proteger(c.accion_correctiva)}\n      <\/div>\n\n      <div class=\"accion-real__grid\">\n        <div class=\"accion-real__dato\">\n          <small>Responsable<\/small>\n          <strong>${proteger(c.responsable)}<\/strong>\n        <\/div>\n        <div class=\"accion-real__dato\">\n          <small>Fecha l\u00edmite<\/small>\n          <strong>${proteger(c.fecha_limite)}<\/strong>\n        <\/div>\n        <div class=\"accion-real__dato\">\n          <small>Estado<\/small>\n          <strong>${proteger(c.estado_accion)}<\/strong>\n        <\/div>\n      <\/div>\n\n      <div class=\"accion-real__bloque\">\n        <h3>Recomendaci\u00f3n de la IA<\/h3>\n        ${proteger(c.recomendaciones)}\n      <\/div>\n    `;\n  }catch(error){\n    contenedor.innerHTML =\n      '<div class=\"accion-real__error\">No se pudo mostrar la acci\u00f3n: ' +\n      proteger(error.message) +\n      '<\/div>';\n  }\n})();\n<\/script>\n    \n    <div class=\"demo-note\">\n      Datos conectados en tiempo real con N\u00daCLEO. Haz clic en una fila para consultar el detalle y dar seguimiento a la acci\u00f3n correctiva.\n    <\/div>\n    <div style=\"margin-top:30px;\">\n      <a href=\"https:\/\/miespaciodigital.net\/auditoria\/plataforma-saas-de-gestion-digital\/tablero-general\/\"\n         style=\"display:inline-block;padding:12px 22px;background:#123746;color:#fff;text-decoration:none;border-radius:8px;font-weight:600;\">\n        \u2190 REGRESAR AL \u00cdNDICE\n      <\/a>\n    <\/div>\n  <\/main>\n<\/div>\n\n<script>\nconst gerencias = [\n  \"Gerencia de Administraci\u00f3n y Finanzas\",\n  \"Gerencia de Infraestructura y Desarrollo Urbano\",\n  \"Gerencia de Servicios P\u00fablicos\",\n  \"Gerencia de Desarrollo Social\",\n  \"Gerencia de Seguridad Ciudadana\",\n  \"Gerencia de Planeamiento y Presupuesto\",\n  \"Gerencia de Tecnolog\u00edas de la Informaci\u00f3n\"\n];\nconst fGerenciaSelect = document.getElementById(\"fGerencia\");\ngerencias.forEach(g => { const o=document.createElement(\"option\"); o.value=g; o.textContent=g; fGerenciaSelect.appendChild(o); });\n\nlet acciones = [\n  {code:\"AC-0087\", desc:\"Definir formalmente al responsable de la acci\u00f3n correctiva vinculada al hallazgo de mantenimiento vehicular\", origen:\"Hallazgo de Auditor\u00eda\", gerencia:\"Gerencia de Seguridad Ciudadana\", plazo:\"2026-08-25\", estado:\"sin_responsable\", vinculo:\"Vinculada al hallazgo AUD-0028 y al bien patrimonial PAT-00142 (VH-014).\"},\n  {code:\"AC-0091\", desc:\"Elaborar directiva interna para el manejo de conformidades de servicio en contrataciones\", origen:\"Hallazgo de Auditor\u00eda\", gerencia:\"Gerencia de Administraci\u00f3n y Finanzas\", plazo:\"2026-08-30\", estado:\"en_ejecucion\", vinculo:\"Vinculada al hallazgo AUD-0015.\"},\n  {code:\"AC-0095\", desc:\"Implementar cronograma de evaluaci\u00f3n de desempe\u00f1o trimestral para personal CAS\", origen:\"Autoevaluaci\u00f3n interna\", gerencia:\"Gerencia de Administraci\u00f3n y Finanzas\", plazo:\"2026-09-15\", estado:\"en_ejecucion\", vinculo:null},\n  {code:\"AC-0078\", desc:\"Actualizar el registro de flota vehicular con fichas t\u00e9cnicas vigentes\", origen:\"Hallazgo de Auditor\u00eda\", gerencia:\"Gerencia de Seguridad Ciudadana\", plazo:\"2026-07-20\", estado:\"cumplida\", vinculo:null},\n  {code:\"AC-0083\", desc:\"Reforzar el protocolo de firma de conformidad en la entrega de programas sociales\", origen:\"Hallazgo de Auditor\u00eda\", gerencia:\"Gerencia de Desarrollo Social\", plazo:\"2026-07-15\", estado:\"cumplida\", vinculo:null},\n  {code:\"AC-0099\", desc:\"Elaborar plan de contingencia y continuidad de los sistemas de informaci\u00f3n municipales\", origen:\"Hallazgo de Auditor\u00eda\", gerencia:\"Gerencia de Tecnolog\u00edas de la Informaci\u00f3n\", plazo:\"2026-09-10\", estado:\"en_ejecucion\", vinculo:\"Vinculada al hallazgo AUD-0032.\"}\n];\n\nconst today = new Date(\"2026-08-19T00:00:00\");\nfunction daysLeft(plazo, estado){ if(estado===\"cumplida\") return null; return Math.round((new Date(plazo+\"T23:59:59\")-today)\/(1000*60*60*24)); }\nfunction shortDate(d){ return new Date(d+\"T00:00:00\").toLocaleDateString(\"es-PE\",{day:\"2-digit\",month:\"short\",year:\"numeric\"}); }\nfunction statusLabel(s){ return s===\"sin_responsable\" ? \"Sin responsable\" : s===\"en_ejecucion\" ? \"En ejecuci\u00f3n\" : \"Cumplida\"; }\n\nlet activeStatus = \"todos\";\nfunction getFiltered(){\n  const q = document.getElementById(\"searchInput\").value.trim().toLowerCase();\n  return acciones.filter(a => {\n    const matchesStatus = activeStatus === \"todos\" || a.estado === activeStatus;\n    const haystack = (a.code+\" \"+a.desc+\" \"+a.gerencia+\" \"+a.origen).toLowerCase();\n    return matchesStatus && haystack.includes(q);\n  });\n}\n\nfunction render(){\n  const filtered = getFiltered();\n  const tbody = document.getElementById(\"tableBody\");\n  const noResults = document.getElementById(\"noResults\");\n  tbody.innerHTML = \"\";\n  noResults.style.display = filtered.length===0 ? \"block\" : \"none\";\n\n  filtered.forEach((a,i) => {\n    const left = daysLeft(a.plazo, a.estado);\n    let plazoClass=\"\", plazoText=\"\";\n    if(a.estado===\"cumplida\"){ plazoText = \"Cumplida \u2014 plazo era \" + shortDate(a.plazo); }\n    else if(left<0){ plazoClass=\"overdue\"; plazoText = `Venci\u00f3 hace ${Math.abs(left)} d\u00eda(s)`; }\n    else if(left<=5){ plazoClass=\"soon\"; plazoText = `Vence en ${left} d\u00eda(s)`; }\n    else { plazoText = `Vence en ${left} d\u00edas`; }\n\n    const tr = document.createElement(\"tr\");\n    tr.className = \"data-row\";\n    tr.innerHTML = `\n      <td class=\"code\">${a.code}<\/td>\n      <td class=\"desc-cell\"><div class=\"name\">${a.desc}<\/div><\/td>\n      <td class=\"desc-cell\"><div class=\"name\">${a.origen}<\/div><\/td>\n      <td class=\"desc-cell\"><div class=\"name\">${a.gerencia}<\/div><\/td>\n      <td class=\"plazo-cell ${plazoClass}\">${plazoText}<\/td>\n      <td><span class=\"status-pill ${a.estado}\"><span class=\"dot\"><\/span>${statusLabel(a.estado)}<\/span><\/td>\n    `;\n    const detailTr = document.createElement(\"tr\");\n    detailTr.className = \"detail-row\";\n    detailTr.innerHTML = `\n      <td colspan=\"6\">\n        <div class=\"detail-inner\" id=\"detail-${i}\">\n          <div class=\"detail-block\"><div class=\"k\">Origen<\/div><div class=\"v\">${a.origen}<\/div><\/div>\n          <div class=\"detail-block\"><div class=\"k\">Gerencia responsable<\/div><div class=\"v\">${a.gerencia}<\/div><\/div>\n          <div class=\"detail-block\"><div class=\"k\">Plazo<\/div><div class=\"v\">${shortDate(a.plazo)}<\/div><\/div>\n          ${a.vinculo ? `<div class=\"link-note\">\ud83d\udd17 ${a.vinculo}<\/div>` : \"\"}\n          <div class=\"advance-btn\"><button onclick=\"event.stopPropagation(); advanceStatus('${a.code}')\">Avanzar estado \u2192<\/button><\/div>\n        <\/div>\n      <\/td>\n    `;\n    tr.addEventListener(\"click\", () => document.getElementById(`detail-${i}`).classList.toggle(\"open\"));\n    tbody.appendChild(tr);\n    tbody.appendChild(detailTr);\n  });\n\n  document.getElementById(\"kpiTotal\").textContent = acciones.filter(a=>a.estado!==\"cumplida\").length;\n  document.getElementById(\"kpiSinResp\").textContent = acciones.filter(a=>a.estado===\"sin_responsable\").length;\n  document.getElementById(\"kpiVencidas\").textContent = acciones.filter(a=>{const d=daysLeft(a.plazo,a.estado); return d!==null && d<0;}).length;\n  document.getElementById(\"kpiCumplidas\").textContent = acciones.filter(a=>a.estado===\"cumplida\").length;\n}\n\nfunction advanceStatus(code){\n  const a = acciones.find(x=>x.code===code);\n  if(!a) return;\n  if(a.estado===\"sin_responsable\") a.estado=\"en_ejecucion\";\n  else if(a.estado===\"en_ejecucion\") a.estado=\"cumplida\";\n  else a.estado=\"sin_responsable\";\n  render();\n}\n\ndocument.getElementById(\"searchInput\").addEventListener(\"input\", render);\ndocument.querySelectorAll(\".filter-chip\").forEach(chip => {\n  chip.addEventListener(\"click\", () => {\n    document.querySelectorAll(\".filter-chip\").forEach(c=>c.classList.remove(\"active\"));\n    chip.classList.add(\"active\");\n    activeStatus = chip.dataset.status;\n    render();\n  });\n});\n\nfunction toggleForm(){ document.getElementById(\"formPanel\").classList.toggle(\"open\"); }\n\nlet counter = 100;\nfunction registrarAccion(){\n  const desc = document.getElementById(\"fDesc\").value.trim();\n  if(!desc){ alert(\"Describe la acci\u00f3n correctiva.\"); return; }\n  const plazo = document.getElementById(\"fPlazo\").value || \"2026-09-30\";\n  acciones.unshift({\n    code: \"AC-01\" + (counter++), desc,\n    origen: document.getElementById(\"fOrigen\").value,\n    gerencia: fGerenciaSelect.value,\n    plazo, estado: \"sin_responsable\", vinculo: null\n  });\n  document.getElementById(\"fDesc\").value = \"\";\n  toggleForm();\n  render();\n}\n\nrender();\n<\/script>\n<\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>N\u00facleo \u2014 Acciones Correctivas 01 Tablero General 02 Atenci\u00f3n Ciudadana 03 Asistente Interno (IA) 04 Gesti\u00f3n por Resultados Acciones Correctivas Indicadores KPI Matriz RACI Metas y L\u00ednea Base Seguimiento de Resultados-v2 05 Planeamiento y Presupuesto 06 Auditor\u00eda y Control 07 Informes y Rendici\u00f3n 08 Configuraci\u00f3n 09 Ayuda y Soporte N\u00daCLEOGesti\u00f3n por Resultados con IA Gesti\u00f3n [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":661,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-915","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/915","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=915"}],"version-history":[{"count":19,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/915\/revisions"}],"predecessor-version":[{"id":2200,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/915\/revisions\/2200"}],"up":[{"embeddable":true,"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/pages\/661"}],"wp:attachment":[{"href":"https:\/\/miespaciodigital.net\/auditoria\/wp-json\/wp\/v2\/media?parent=915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}