{"id":922,"date":"2026-06-23T11:00:01","date_gmt":"2026-06-23T16:00:01","guid":{"rendered":"https:\/\/actualidadambiental.pe\/acr2\/?page_id=922"},"modified":"2026-09-07T21:31:15","modified_gmt":"2026-09-08T02:31:15","slug":"asistente-acr","status":"publish","type":"page","link":"https:\/\/actualidadambiental.pe\/acr\/asistente-acr\/","title":{"rendered":"Asistente ACR"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1497.6px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><style>\n  .acr-chat-box {\n    max-width: 920px;\n    margin: 44px auto 72px auto;\n    padding: 38px;\n    border: 1px solid rgba(0,0,0,.10);\n    border-radius: 22px;\n    background: rgba(255,255,255,.78);\n    box-shadow: 0 20px 48px rgba(0,0,0,.06);\n  }\n\n  .acr-chat-label {\n    display: inline-block;\n    margin-bottom: 14px;\n    padding: 6px 13px;\n    border: 1px solid rgba(0,0,0,.16);\n    border-radius: 999px;\n    font-size: 11px;\n    letter-spacing: .16em;\n    text-transform: uppercase;\n    opacity: .72;\n  }\n\n  .acr-chat-box h1 {\n    margin: 0 0 14px 0;\n    font-size: clamp(38px, 5vw, 62px);\n    line-height: 1.02;\n    letter-spacing: .13em;\n    font-weight: 500;\n  }\n\n  .acr-chat-intro {\n    max-width: 760px;\n    margin: 0 0 26px 0;\n    font-size: 17px;\n    line-height: 1.75;\n    opacity: .84;\n  }\n\n  .acr-chat-form {\n    display: flex;\n    gap: 12px;\n    align-items: stretch;\n  }\n\n  .acr-chat-input {\n    flex: 1;\n    min-height: 54px;\n    padding: 0 17px;\n    border: 1px solid rgba(0,0,0,.30);\n    border-radius: 12px;\n    background: rgba(255,255,255,.95);\n    font-size: 15px;\n    outline: none;\n  }\n\n  .acr-chat-input:focus {\n    border-color: #111;\n    box-shadow: 0 0 0 3px rgba(0,0,0,.06);\n  }\n\n  .acr-chat-btn {\n    min-height: 54px;\n    padding: 0 24px;\n    border: 0;\n    border-radius: 12px;\n    background: #0b0b0b;\n    color: #fff;\n    font-size: 14px;\n    font-weight: 700;\n    cursor: pointer;\n  }\n\n  .acr-chat-btn:disabled {\n    opacity: .55;\n    cursor: wait;\n  }\n\n  .acr-chat-suggest {\n    margin-top: 16px;\n    font-size: 13px;\n    line-height: 1.8;\n    opacity: .72;\n  }\n\n  .acr-chat-suggest span {\n    display: block;\n    margin-bottom: 6px;\n    letter-spacing: .06em;\n    text-transform: uppercase;\n    font-size: 11px;\n  }\n\n  .acr-chat-suggest button {\n    margin: 4px 6px 0 0;\n    padding: 7px 12px;\n    border: 1px solid rgba(0,0,0,.16);\n    border-radius: 999px;\n    background: rgba(255,255,255,.78);\n    cursor: pointer;\n    font-size: 12px;\n  }\n\n  .acr-chat-out {\n    display: none;\n    margin-top: 28px;\n    padding: 24px;\n    border-radius: 18px;\n    background: #f6f2ea;\n    border: 1px solid rgba(0,0,0,.07);\n    font-size: 16px;\n    line-height: 1.75;\n    -webkit-user-select: text !important;\n    user-select: text !important;\n  }\n\n  .acr-chat-answer {\n    white-space: pre-wrap;\n  }\n\n  .acr-chat-sources {\n    margin-top: 22px;\n    padding-top: 15px;\n    border-top: 1px solid rgba(60, 30, 10, .16);\n  }\n\n  .acr-chat-sources-title {\n    margin-bottom: 10px;\n    font-size: 11px;\n    letter-spacing: .12em;\n    text-transform: uppercase;\n    color: rgba(0,0,0,.58);\n  }\n\n  .acr-chat-source-item {\n    margin: 0 0 10px 0;\n    padding: 0;\n    font-size: 13px;\n    line-height: 1.55;\n  }\n\n  .acr-chat-source-item a {\n    color: #351304;\n    text-decoration: underline;\n    text-underline-offset: 3px;\n    font-weight: 700;\n  }\n\n  .acr-chat-source-meta {\n    display: block;\n    margin-top: 2px;\n    color: rgba(0,0,0,.58);\n    font-size: 12px;\n  }\n\n  .acr-chat-copy-btn {\n    display: none;\n    margin-top: 12px;\n    padding: 10px 16px;\n    border: 1px solid rgba(0,0,0,.18);\n    border-radius: 999px;\n    background: #fff;\n    color: #111;\n    font-size: 12px;\n    letter-spacing: .10em;\n    text-transform: uppercase;\n    font-weight: 700;\n    cursor: pointer;\n  }\n\n  .acr-chat-copy-btn:hover {\n    background: #111;\n    color: #fff;\n  }\n\n  .acr-chat-note {\n    margin-top: 18px;\n    font-size: 12px;\n    line-height: 1.6;\n    opacity: .58;\n  }\n\n  @media (max-width: 700px) {\n    .acr-chat-box {\n      margin: 28px 16px 48px 16px;\n      padding: 26px;\n    }\n\n    .acr-chat-form {\n      flex-direction: column;\n    }\n\n    .acr-chat-btn {\n      width: 100%;\n    }\n  }\n<\/style>\n\n<div class=\"acr-chat-box\">\n  <span class=\"acr-chat-label\">Consulta documental<\/span>\n\n  <h1>Asistente ACR<\/h1>\n\n  <p class=\"acr-chat-intro\">\n    Realiza consultas sobre \u00c1reas de Conservaci\u00f3n Regional del Per\u00fa,\n    su marco normativo y los documentos t\u00e9cnicos disponibles. El asistente\n    responde a partir de las fuentes cargadas en la plataforma.\n  <\/p>\n\n  <div class=\"acr-chat-form\">\n    <input\n      id=\"acr_q\"\n      class=\"acr-chat-input\"\n      type=\"text\"\n      placeholder=\"Ej: \u00bfQu\u00e9 es un \u00c1rea de Conservaci\u00f3n Regional?\"\n    \/>\n\n    <button id=\"acr_btn\" class=\"acr-chat-btn\" type=\"button\">\n      Preguntar\n    <\/button>\n  <\/div>\n\n  <div class=\"acr-chat-suggest\">\n    <span>Preguntas sugeridas<\/span>\n\n    <button type=\"button\" class=\"acr-suggest-btn\" data-question=\"\u00bfQu\u00e9 es un \u00c1rea de Conservaci\u00f3n Regional?\">\n      \u00bfQu\u00e9 es un ACR?\n    <\/button>\n\n    <button type=\"button\" class=\"acr-suggest-btn\" data-question=\"\u00bfPara qu\u00e9 sirve un \u00c1rea de Conservaci\u00f3n Regional?\">\n      \u00bfPara qu\u00e9 sirve?\n    <\/button>\n\n    <button type=\"button\" class=\"acr-suggest-btn\" data-question=\"\u00bfQu\u00e9 requisitos se necesitan para crear un \u00c1rea de Conservaci\u00f3n Regional?\">\n      Requisitos para crear un ACR\n    <\/button>\n\n    <button type=\"button\" class=\"acr-suggest-btn\" data-question=\"\u00bfQui\u00e9n gestiona las \u00c1reas de Conservaci\u00f3n Regional?\">\n      \u00bfQui\u00e9n las gestiona?\n    <\/button>\n  <\/div>\n\n  <div id=\"acr_out\" class=\"acr-chat-out\" aria-live=\"polite\"><\/div>\n\n  <button id=\"acr_copy_btn\" class=\"acr-chat-copy-btn\" type=\"button\">\n    Copiar respuesta\n  <\/button>\n\n  <div class=\"acr-chat-note\">\n    Las respuestas son orientativas y se elaboran a partir de fuentes documentales disponibles en la plataforma.\n  <\/div>\n<\/div>\n\n<script>\n(function() {\n  var ACR_API_URL = \"https:\/\/acr-assistant-api-769319905046.us-central1.run.app\/ask\";\n  var ACR_TOKEN = \"ACRCHAT_TOKEN_DE_PRUEBA_123\";\n\n  function acrEscapeHtml(value) {\n  var div = document.createElement(\"div\");\n  div.textContent = String(value == null ? \"\" : value);\n  return div.innerHTML;\n}\n\n  function acrSafeUrl(url) {\n    var raw = String(url || \"\").trim();\n\n    if (!raw) {\n      return \"\";\n    }\n\n    try {\n      var parsed = new URL(raw, window.location.href);\n\n      if (parsed.protocol !== \"https:\") {\n        return \"\";\n      }\n\n      return parsed.href;\n    } catch (e) {\n      return \"\";\n    }\n  }\n\n  function acrFormatDate(dateText) {\n    var raw = String(dateText || \"\").trim();\n    var m = raw.match(\/^(\\d{4})-(\\d{2})-(\\d{2})$\/);\n\n    if (!m) {\n      return raw;\n    }\n\n    return m[3] + \"\/\" + m[2] + \"\/\" + m[1];\n  }\n\n  function acrHumanizeType(tipo) {\n    var raw = String(tipo || \"\").trim();\n\n    if (!raw) {\n      return \"\";\n    }\n\n    return raw.charAt(0).toUpperCase() + raw.slice(1);\n  }\n\n  function acrEsFuenteInterna(sourceObj) {\n    var raw = JSON.stringify(sourceObj || {});\n\n    return (\n      raw.indexOf(\"Biblioteca_documental_ACR_Peru\") >= 0 ||\n      raw.indexOf(\"Respuestas_modelo_bateria_Asistente_ACR\") >= 0\n    );\n  }\n\n  function limpiarFuenteACR(nombre) {\n    if (!nombre) {\n      return \"Documento consultado\";\n    }\n\n    var raw = String(nombre);\n\n    if (raw.indexOf(\"RPE_149_2025_SERNANP_Anexos\") >= 0) {\n      return \"Anexos de la Resoluci\u00f3n Presidencial Ejecutiva N.\u00b0 149-2025-SERNANP\";\n    }\n\n    if (raw.indexOf(\"RPE_149_2025_SERNANP_ACR\") >= 0) {\n      return \"Resoluci\u00f3n Presidencial Ejecutiva N.\u00b0 149-2025-SERNANP\";\n    }\n\n    if (raw.indexOf(\"DS_038_2001_AG_Reglamento_ANP\") >= 0) {\n      return \"Decreto Supremo N.\u00b0 038-2001-AG - Reglamento de la Ley de \u00c1reas Naturales Protegidas\";\n    }\n\n    if (raw.indexOf(\"Ley_26834_Areas_Naturales_Protegidas\") >= 0) {\n      return \"Ley N.\u00b0 26834 - Ley de \u00c1reas Naturales Protegidas\";\n    }\n\n    if (raw.indexOf(\"DS_016_2024_MINAM_Plan_Director_2024_2034\") >= 0) {\n      return \"Decreto Supremo N.\u00b0 016-2024-MINAM - Plan Director de las \u00c1reas Naturales Protegidas 2024-2034\";\n    }\n\n    if (raw.indexOf(\"DS_007_2026_MINAM_Aguas_Calientes_Maquia\") >= 0) {\n      return \"Decreto Supremo N.\u00b0 007-2026-MINAM - \u00c1rea de Conservaci\u00f3n Regional Aguas Calientes Maquia\";\n    }\n\n    if (raw.indexOf(\"DS_008_2026_MINAM_Chontabamba_Huancabamba\") >= 0) {\n      return \"Decreto Supremo N.\u00b0 008-2026-MINAM - \u00c1rea de Conservaci\u00f3n Regional Chontabamba Huancabamba\";\n    }\n\n    if (raw.indexOf(\"Inventario_maestro_ACR_Peru\") >= 0) {\n      return \"Inventario operativo de \u00c1reas de Conservaci\u00f3n Regional del Per\u00fa - corte 26 de agosto de 2026\";\n    }\n\n    return raw.replace(\".pdf\", \"\").replace(\/_\/g, \" \");\n  }\n\n  function acrRenderSources(sources) {\n    if (!Array.isArray(sources) || sources.length === 0) {\n      return \"\";\n    }\n\n    var items = [];\n\n    for (var i = 0; i < sources.length; i++) {\n      var s = sources[i] || {};\n\n      if (!s.public_title && acrEsFuenteInterna(s)) {\n        continue;\n      }\n\n      var title = s.public_title || limpiarFuenteACR(s.title || s.source || \"Documento consultado\");\n      var url = acrSafeUrl(s.public_url || \"\");\n      var date = s.public_date ? acrFormatDate(s.public_date) : \"\";\n      var type = s.source_type ? acrHumanizeType(s.source_type) : \"\";\n\n      var metaParts = [];\n\n      if (date) {\n        metaParts.push(\"Fecha: \" + date);\n      }\n\n      if (type) {\n        metaParts.push(type);\n      }\n\n      var meta = metaParts.length ? '<span class=\"acr-chat-source-meta\">' + acrEscapeHtml(metaParts.join(\" \u00b7 \")) + '<\/span>' : \"\";\n\n      if (url) {\n        items.push(\n          '<div class=\"acr-chat-source-item\">' +\n            '<a href=\"' + acrEscapeHtml(url) + '\" target=\"_blank\" rel=\"noopener noreferrer\">' +\n              acrEscapeHtml(title) +\n            '<\/a>' +\n            meta +\n          '<\/div>'\n        );\n      } else {\n        items.push(\n          '<div class=\"acr-chat-source-item\">' +\n            '<strong>' + acrEscapeHtml(title) + '<\/strong>' +\n            meta +\n          '<\/div>'\n        );\n      }\n    }\n\n    if (!items.length) {\n      return \"\";\n    }\n\n    return (\n      '<div class=\"acr-chat-sources\">' +\n        '<div class=\"acr-chat-sources-title\">Fuentes consultadas<\/div>' +\n        items.join(\"\") +\n      '<\/div>'\n    );\n  }\n\n  function mostrarSalida(texto) {\n    var out = document.getElementById(\"acr_out\");\n\n    if (!out) {\n      return;\n    }\n\n    out.style.display = \"block\";\n    out.textContent = texto;\n  }\n\n  function mostrarRespuestaDocumental(respuesta, sources) {\n    var out = document.getElementById(\"acr_out\");\n\n    if (!out) {\n      return;\n    }\n\n    var answerHtml = '<div class=\"acr-chat-answer\">' + acrEscapeHtml(respuesta || \"\") + '<\/div>';\n    var sourcesHtml = acrRenderSources(sources);\n\n    out.style.display = \"block\";\n    out.innerHTML = answerHtml + sourcesHtml;\n  }\n\n  function mostrarBotonCopiar(mostrar) {\n    var copyBtn = document.getElementById(\"acr_copy_btn\");\n\n    if (!copyBtn) {\n      return;\n    }\n\n    copyBtn.style.display = mostrar ? \"inline-block\" : \"none\";\n  }\n\n  function acrGetSessionId() {\n    var key = \"acr_chat_session_id\";\n    var current = \"\";\n\n    try {\n      current = window.sessionStorage.getItem(key) || \"\";\n    } catch (e) {\n      current = \"\";\n    }\n\n    if (current) {\n      return current;\n    }\n\n    var created = \"wp-acr-\" + Date.now() + \"-\" + Math.random().toString(36).slice(2, 10);\n\n    try {\n      window.sessionStorage.setItem(key, created);\n    } catch (e) {}\n\n    return created;\n  }\n\n  function acrSetQuestion(texto) {\n    var input = document.getElementById(\"acr_q\");\n\n    if (!input) {\n      return;\n    }\n\n    input.value = texto;\n    acrAsk();\n  }\n\n  function acrAsk() {\n    var input = document.getElementById(\"acr_q\");\n    var btn = document.getElementById(\"acr_btn\");\n\n    if (!input || !btn) {\n      return;\n    }\n\n    var pregunta = (input.value || \"\").trim();\n\n    mostrarBotonCopiar(false);\n\n    if (!pregunta) {\n      mostrarSalida(\"Escribe una pregunta para realizar la consulta.\");\n      return;\n    }\n\n    mostrarSalida(\"Consultando documentos...\");\n\n    btn.disabled = true;\n    btn.textContent = \"Consultando...\";\n\n    fetch(ACR_API_URL, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application\/json\",\n        \"Authorization\": \"Bearer \" + ACR_TOKEN\n      },\n      body: JSON.stringify({\n        question: pregunta,\n        session_id: acrGetSessionId(),\n        page: window.location.href\n      })\n    })\n    .then(function(response) {\n      return response.text().then(function(text) {\n        return {\n          ok: response.ok,\n          status: response.status,\n          text: text\n        };\n      });\n    })\n    .then(function(res) {\n      var data;\n\n      try {\n        data = JSON.parse(res.text);\n      } catch (e) {\n        throw new Error(\"Respuesta no v\u00e1lida del servicio.\");\n      }\n\n      if (!res.ok) {\n        throw new Error(data.detail || \"Error del servicio.\");\n      }\n\n      var respuesta = data.answer || \"No se encontr\u00f3 una respuesta suficiente en los documentos disponibles.\";\n      var sources = Array.isArray(data.sources) ? data.sources : [];\n\n      mostrarRespuestaDocumental(respuesta, sources);\n      mostrarBotonCopiar(true);\n    })\n    .catch(function(error) {\n      mostrarSalida(\"No se pudo completar la consulta en este momento. Intenta nuevamente.\");\n      console.log(\"Error Asistente ACR:\", error);\n    })\n    .finally(function() {\n      btn.disabled = false;\n      btn.textContent = \"Preguntar\";\n    });\n  }\n\n  function acrFallbackCopy(texto) {\n    var area = document.createElement(\"textarea\");\n    area.value = texto;\n    area.setAttribute(\"readonly\", \"\");\n    area.style.position = \"fixed\";\n    area.style.left = \"-9999px\";\n    area.style.top = \"0\";\n    document.body.appendChild(area);\n    area.focus();\n    area.select();\n\n    try {\n      document.execCommand(\"copy\");\n    } catch (e) {\n      console.log(\"No se pudo copiar con fallback:\", e);\n    }\n\n    document.body.removeChild(area);\n  }\n\n  function acrCopyAnswer() {\n    var input = document.getElementById(\"acr_q\");\n    var out = document.getElementById(\"acr_out\");\n    var copyBtn = document.getElementById(\"acr_copy_btn\");\n\n    if (!out) {\n      return;\n    }\n\n    var pregunta = input ? (input.value || \"\").trim() : \"\";\n    var respuesta = out.innerText || out.textContent || \"\";\n\n    if (!respuesta.trim()) {\n      return;\n    }\n\n    var texto = \"\";\n\n    if (pregunta) {\n      texto += \"Pregunta:\\n\" + pregunta + \"\\n\\n\";\n    }\n\n    texto += \"Respuesta:\\n\" + respuesta.trim();\n\n    function marcarCopiado() {\n      if (!copyBtn) {\n        return;\n      }\n\n      var original = copyBtn.textContent;\n      copyBtn.textContent = \"Copiado\";\n\n      setTimeout(function() {\n        copyBtn.textContent = original;\n      }, 1600);\n    }\n\n    if (navigator.clipboard && navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(texto).then(function() {\n        marcarCopiado();\n      }).catch(function() {\n        acrFallbackCopy(texto);\n        marcarCopiado();\n      });\n    } else {\n      acrFallbackCopy(texto);\n      marcarCopiado();\n    }\n  }\n\n  function acrBindEvents() {\n    var btn = document.getElementById(\"acr_btn\");\n    var input = document.getElementById(\"acr_q\");\n    var copyBtn = document.getElementById(\"acr_copy_btn\");\n    var suggestButtons = document.querySelectorAll(\".acr-suggest-btn\");\n\n    if (btn && !btn.dataset.acrBound) {\n      btn.dataset.acrBound = \"1\";\n      btn.addEventListener(\"click\", function(e) {\n        e.preventDefault();\n        acrAsk();\n      });\n    }\n\n    if (input && !input.dataset.acrBound) {\n      input.dataset.acrBound = \"1\";\n      input.addEventListener(\"keydown\", function(e) {\n        if (e.key === \"Enter\") {\n          e.preventDefault();\n          acrAsk();\n        }\n      });\n    }\n\n    if (copyBtn && !copyBtn.dataset.acrBound) {\n      copyBtn.dataset.acrBound = \"1\";\n      copyBtn.addEventListener(\"click\", function(e) {\n        e.preventDefault();\n        acrCopyAnswer();\n      });\n    }\n\n    for (var i = 0; i < suggestButtons.length; i++) {\n      if (!suggestButtons[i].dataset.acrBound) {\n        suggestButtons[i].dataset.acrBound = \"1\";\n        suggestButtons[i].addEventListener(\"click\", function(e) {\n          e.preventDefault();\n          acrSetQuestion(this.getAttribute(\"data-question\"));\n        });\n      }\n    }\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", acrBindEvents);\n  } else {\n    acrBindEvents();\n  }\n\n  window.addEventListener(\"load\", acrBindEvents);\n\n  window.acrAsk = acrAsk;\n  window.acrSetQuestion = acrSetQuestion;\n  window.acrCopyAnswer = acrCopyAnswer;\n  window.acrBindEvents = acrBindEvents;\n})();\n<\/script><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"100-width.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-922","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/actualidadambiental.pe\/acr\/wp-json\/wp\/v2\/pages\/922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/actualidadambiental.pe\/acr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/actualidadambiental.pe\/acr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/actualidadambiental.pe\/acr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/actualidadambiental.pe\/acr\/wp-json\/wp\/v2\/comments?post=922"}],"version-history":[{"count":18,"href":"https:\/\/actualidadambiental.pe\/acr\/wp-json\/wp\/v2\/pages\/922\/revisions"}],"predecessor-version":[{"id":1647,"href":"https:\/\/actualidadambiental.pe\/acr\/wp-json\/wp\/v2\/pages\/922\/revisions\/1647"}],"wp:attachment":[{"href":"https:\/\/actualidadambiental.pe\/acr\/wp-json\/wp\/v2\/media?parent=922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}