{"id":421,"date":"2025-08-14T08:24:30","date_gmt":"2025-08-14T13:24:30","guid":{"rendered":"http:\/\/10.190.55.6\/?page_id=421"},"modified":"2026-01-12T11:18:01","modified_gmt":"2026-01-12T16:18:01","slug":"contingentes-arancelarios","status":"publish","type":"page","link":"https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/","title":{"rendered":"Contingentes Arancelarios"},"content":{"rendered":"    <div class=\"wp-block-bplugins-custom-html\" id='bPluginsCustomHtml-1'>\n    <style>\n    body \n    { \n        font-family: Arial, sans-serif; \n        padding: 20px; \n        background-color: #f4f4f9; \n    }\n    .custom-underline \n    {\n        display: inline-block;\n        position: relative;\n        padding-bottom: 3px;\n    }\n    .custom-underline::after \n    {\n        content: \"\";\n        position: absolute;\n        left: 0;\n        right: -5px;\n        bottom: 0;\n        height: 3px;\n        background-color: #fcaa52;\n    }\n    .accordion .card { margin-bottom: 10px; border: 1px solid #dee2e6; }\n    .accordion .card-header { padding: 0; }\n    .accordion .btn-link \n    { \n        display: flex; \n        align-items: center;\n        justify-content: space-between; \/* Alinea el texto a la izquierda y la flecha a la derecha *\/\n        width: 100%; \n        text-align: left; \n        color: #003875; \n        font-weight: 600; \n        text-decoration: none; \n        padding: 15px 20px; \n        transition: all 0.3s ease; \n    }\n    .accordion .btn-link:hover, .accordion .btn-link:focus { background-color: #fcaa52; color: #fff; text-decoration: none; }\n    .accordion .btn-link.collapsed { background-color: #f8f9fa; color: #003875; }\n    .accordion .btn-link.no-data { color: #6c757d; font-style: italic; background-color: #e9ecef; cursor: default; }\n    .accordion-arrow \n    {\n        transition: transform 0.3s ease-in-out;\n        display: flex; \n        align-items: center;\n        margin-left: 15px; \/* Separaci\u00f3n del texto *\/\n    }\n    .accordion .btn-link.collapsed .accordion-arrow \n    {\n        transform: rotate(0deg); \/* Flecha a la derecha (Cerrado) *\/\n    }\n    .accordion .btn-link:not(.collapsed) .accordion-arrow \n    {\n        transform: rotate(90deg); \/* Flecha girada a la derecha inferior (Abierto) *\/\n    }\n    .subcategorias-acordeon { padding: 10px; }\n    .fag_contenedor .card { margin-bottom: 5px; border: 1px solid #dcdcdc; border-radius: 4px; }\n    .fag_contenedor .card-header \n    { \n        background-color: #e9ecef; \n        cursor: pointer; \n        display: flex; \n        align-items: center; \n        justify-content: space-between; \n        padding: 0 10px;\n    }\n    .fag_contenedor .card-header.bg-suplemento { background-color: #003875 !important; color: #FFFFFF; font-weight: bold; }\n    .fag_contenedor .card-header.bg-secondary { background-color: #e9ecef !important; color: #333; }\n    \/*.fag_contenedor .toggle-btn { margin-left: 10px; border: none; background: transparent; color: inherit; }\n    .fag_contenedor .toggle-btn.collapsed { color: #FFFFFF;font-weight: bold; }*\/\n    .fag_contenedor .toggle-btn.collapsed {\n  color: #000;\n  font-weight: bold;\n}\n    .fag_contenedor .toggle-btn {\n    \/* El texto es un color oscuro (ej. negro) *\/\n    color: #333333; \n    \/* El texto es normal (no negrita) *\/\n    font-weight: bold; \n    \/* ... otros estilos base del bot\u00f3n ... *\/\n}\n    .fag_contenedor .card-body { padding: 15px; }\n    .calendar-table td, .calendar-table th { font-size: 0.9em; padding: 5px; }\n    .calendar-table td { height: 40px; }\n    .calendar-table thead th \n    { \n        text-align: center !important; \n    }\n    .event-circle \n    {\n        display: inline-flex;\n        justify-content: center;\n        align-items: center;\n        width: 32px;\n        height: 32px;\n        border-radius: 50%;\n        background-color: #999999;\n        color: white !important;\n        font-weight: bold;\n        position: relative;\n        text-decoration: none;\n        margin: auto;          \/* centra dentro de la celda *\/\n    }\n    .event-circle a \n    {\n        color: white !important;\n        text-decoration: none !important;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        width: 100%;\n        height: 100%;\n        border-radius: 50%;\n    }\n    .event-circle:hover \n    {\n        background-color: #fcaa52; \/* amarillo *\/\n        color: black !important;\n    }\n    .event-circle:hover a \n    {\n        color: black !important;\n    }\n    .event-circle .badge \n    {\n        position: absolute;\n        top: -8px;\n        right: -8px;\n        font-size: 0.7rem;\n    }\n    .calendar-table td.align-top { vertical-align: top; }\n    .calendar-table { table-layout: fixed; }\n    .archivos-list \n    {\n        width: 100%;              \n        padding-left: 0 !important;\n        margin-left: 0 !important;\n        list-style: none;          \n    }\n    .archivos-list li \n    {\n        display: flex;\n        align-items: center;\n        justify-content: flex-start;\n        background: #f8f9fa;\n        padding: 15px;\n        border-radius: 8px;\n        border-left: 5px solid #999999;\n        box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n        margin-bottom: 10px;\n        transition: transform 0.3s ease-in-out, border-left-color 0.3s ease-in-out;\n        width: 100%;              \n    }\n    .archivos-list li:hover \n    {\n        transform: scale(1.02);\n        border-left-color: #fcaa52;\n    }\n    .archivos-list li a \n    {\n        text-decoration: none !important;  \/* \ud83d\udd39 elimina el subrayado *\/\n        color: #555 !important;\n        display: flex;\n        align-items: center;\n        gap: 15px;\n        flex: 1;\n        transition: color 0.3s ease-in-out;\n        overflow-wrap: break-word;\n        white-space: normal;\n    }\n    .archivos-list li:hover a \n    {\n        color: #003875 !important;\n    }\n    .archivos-list li i \n    {\n        font-size: 1.2em;\n        color: #999999;\n        flex-shrink: 0;\n    }\n    .archivos-list li:hover i \n    {\n        color: #003875;\n    }\n    .archivos-list .fecha \n    {\n        width: 90px;          \/* m\u00e1s espacio para la fecha *\/\n        min-width: 90px;\n        text-align: center;\n        color: #666;\n        font-weight: 600;\n        font-size: 0.9rem;\n    }\n    .alert-info \n    {\n        padding: 20px !important;\n    }\n\n    \/* ----------------------------------------------------- *\/\n    \/* ESTILO PARA EL BOT\u00d3N DEL ACORDE\u00d3N CUANDO EST\u00c1 ABIERTO *\/\n    \/* ----------------------------------------------------- *\/\n    .accordion .btn-link:not(.collapsed) { \n        background-color: #fcaa52; \/* Fondo NARANJA solicitado *\/\n        color: #fff;              \/* Texto BLANCO solicitado *\/\n        font-weight: bold;        \/* Negrita solicitado *\/\n    }\n\n    \/* ----------------------------------------------------- *\/\n    \/* ESTILO PARA EL BOT\u00d3N DEL ACORDE\u00d3N CUANDO EST\u00c1 CERRADO *\/\n    \/* (Mantenemos el estilo original que ten\u00edas)           *\/\n    \/* ----------------------------------------------------- *\/\n    .accordion .btn-link.collapsed { \n        background-color: #f8f9fa; \n        color: #003875; \n    }\n\n    \/* ----------------------------------------------------- *\/\n    \/* ESTILO AL PASAR EL RAT\u00d3N (HOVER)                      *\/\n    \/* Esto asegura que el hover siga funcionando correctamente *\/\n    \/* ----------------------------------------------------- *\/\n    .accordion .btn-link:hover, \n    .accordion .btn-link:focus { \n        \/* El hover debe tener un color diferente para que se note la interacci\u00f3n,\n           aqu\u00ed usamos tu color original de hover: naranja (#fcaa52) y texto blanco. \n           Si el estado 'abierto' ya usa #fcaa52, puedes elegir un tono diferente \n           para el hover, o simplemente mantenerlo. Lo dejo como lo ten\u00edas: *\/\n        background-color: #fcaa52; \n        color: #fff; \n        text-decoration: none; \n    }\n\n    \/* ... (resto de estilos, asegurando que el font-weight se aplica) ... *\/\n\n    \/* Si quieres que el font-weight: bold solo se aplique en el estado abierto, \n       y no por defecto, el estilo de arriba es suficiente.\n       El estilo general .accordion .btn-link es:\n    *\/\n    .accordion .btn-link {\n        \/* ... otros estilos ... *\/\n        font-weight: 600; \/* Lo ten\u00edas as\u00ed. Lo mantengo, pero el :not(.collapsed) lo sobrescribe a 'bold' *\/\n        \/* ... otros estilos ... *\/\n    }\n<\/style>\n\n<div class=\"container-fluid\">\n    <div class=\"row mb-4\">\n        <div class=\"col-lg-12 text-center\">\n            <h3 class=\"font-weight-bold custom-underline mb-5\">Contingentes Arancelarios<\/h3>\n        <\/div>\n        <div class=\"col-lg-12 text-center mt-4\">\n            <div id=\"myaccordionid\" class=\"accordion\" role=\"tablist\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n    \n<script>\n    const dominio = '\/wp-content\/uploads\/contingente_arancelario\/'; \n    const categories = {Cat1: \"Estados Unidos\", Cat2: \"Canada\", Cat3: \"Costa Rica\", Cat4: \"Guatemala\",Cat5: \"Honduras\", Cat6: \"Nicaragua\", Cat7: \"Per\u00fa\", Cat8: \"OMC \u2013 Orgaizaci\u00f3n Mundial de Comercio\",Cat9: \"ADA \u2013 Acuerdo de Asociaci\u00f3n\", Cat10: \"Reino Unido\"};\n    const Subcategories = { SubCat1 : \"Primero Llegado \/ Primero Servido\", SubCat2 : \"PAN \/ PEQ\", SubCat3 : \"Licencias\",SubCat4 : \"Subasta\", SubCat5 : \"OMC \/ Arroz\", SubCat6 : \"OMC \/ Lacteos\", SubCat7 : \"OMC \/ Papa\",SubCat8 : \"OMC \/ Tomate\", SubCat9 : \"OMC \/ Cerdo\",};\n    \/\/ ==========================================================\n    \/\/ \ud83d\uddd3\ufe0f Funci\u00f3n de Renderizado del Calendario (SubCat1)\n    \/\/ ==========================================================\n    function renderCalendario(doc, catKey, subcatKey, items) \n    {\n        const meses = \n        [\n          \"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\",\n          \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"\n        ];\n        const diasSemana = [\"Do\", \"Lun\", \"Mar\", \"Mi\u00e9\", \"Jue\", \"Vie\", \"S\u00e1b\"];\n        const currentYear = new Date().getFullYear();\n        \n        \/\/ Procesar fechas\n        const fechas = items.map(i => \n        {\n          const dateMatch = i.title.match(\/^(\\d{2}\\\/\\d{2}\\\/\\d{4})\/);\n          const dateString = dateMatch ? dateMatch[1] : null;\n          \n          if (!dateString) return null;\n\n          const [day, month, year] = dateString.split(\"\/\").map(Number);\n          const fullLink = i.link ? dominio + i.link : '#';\n          \n          return { day, month, year, link: fullLink, title: i.title }; \n        }).filter(i => i !== null);\n\n        \/\/ Generar a\u00f1os disponibles\n        const years = [];\n        for (let y = 2017; y <= currentYear; y++) years.push(y);\n        \/\/ Determinar a\u00f1o por defecto\n        let defaultYear;\n        if (fechas.length > 0) \n        {\n            \/\/ Si hay fechas del a\u00f1o actual, usar el a\u00f1o actual\n            const hasCurrentYearDates = fechas.some(f => f.year === currentYear);\n            if (hasCurrentYearDates) \n            {\n                defaultYear = currentYear;\n            } \n            else \n            {\n                \/\/ Si no hay fechas del a\u00f1o actual, usar el a\u00f1o m\u00e1s reciente disponible\n                const sortedFechas = [...fechas].sort((a, b) => b.year - a.year);\n                defaultYear = sortedFechas[0].year;\n            }\n        } \n        else \n        {\n            \/\/ Si no hay fechas, usar el a\u00f1o actual\n            defaultYear = currentYear;\n        }\n\n        \/\/ Determinar mes por defecto\n        let defaultMonth;\n        const fechasDelYear = fechas.filter(f => f.year === defaultYear);\n        if (fechasDelYear.length > 0) \n        {\n            \/\/ Usar el mes m\u00e1s reciente del a\u00f1o seleccionado\n            const sortedMonths = [...fechasDelYear].sort((a, b) => b.month - a.month);\n            defaultMonth = sortedMonths[0].month - 1;\n        } \n        else \n        {\n            \/\/ Si no hay fechas del a\u00f1o, usar el mes actual\n            defaultMonth = new Date().getMonth();\n        }\n\n        const idBase = `Calendario-${catKey}-${subcatKey}`;\n        const idMonth = `${idBase}-month`;\n        const idYear = `${idBase}-year`;\n        const idBody = `${idBase}-body`;\n\n        const calendarHTML = `\n          <div class=\"row mb-2 px-1\">\n            <div class=\"col-6 p-1\">\n              <select id=\"${idMonth}\" class=\"form-control form-control-sm text-center\">\n                ${meses.map((m, i) => `<option value=\"${i}\" ${i === defaultMonth ? 'selected' : ''}>${m}<\/option>`).join('')}\n              <\/select>\n            <\/div>\n            <div class=\"col-6 p-1\">\n              <select id=\"${idYear}\" class=\"form-control form-control-sm text-center\">\n                ${years.map(y => `<option value=\"${y}\" ${y === defaultYear ? 'selected' : ''}>${y}<\/option>`).join('')}\n              <\/select>\n            <\/div>\n          <\/div>\n          <div class=\"table-responsive\">\n            <table class=\"table table-bordered text-center mb-0 calendar-table\">\n              <thead class=\"thead-light\">\n                <tr>${diasSemana.map(d => `<th>${d}<\/th>`).join('')}<\/tr>\n              <\/thead>\n              <tbody id=\"${idBody}\"><\/tbody>\n            <\/table>\n          <\/div>`;\n          \n        \/\/ \ud83e\udde9 Render y Eventos del calendario\n        const renderCalendar = (month, year) => \n        {\n          const primerDia = new Date(year, month, 1);\n          const ultimoDia = new Date(year, month + 1, 0);\n          const primerDiaSemana = primerDia.getDay(); \n          const diasMes = ultimoDia.getDate();\n          let html = '<tr>';\n          \n          for (let i = 0; i < primerDiaSemana; i++) html += '<td><\/td>';\n          \n          for (let d = 1; d <= diasMes; d++) \n          {\n            const diaSemana = (primerDiaSemana + d - 1) % 7;\n            const itemDia = fechas.find(f => f.day === d && f.month === month + 1 && f.year === year);\n            \n            if (itemDia && itemDia.link && itemDia.link !== '#') \n            {\n              html += `<td class=\"align-top\">\n                             <div class=\"event-circle\">\n                               <a href=\"${itemDia.link}\" target=\"_blank\" class=\"calendar-link\"\n                                   data-title=\"${itemDia.title}\"\n                                   data-cat=\"${catKey}\" data-subcat=\"${subcatKey}\">\n                                 ${d}\n                               <\/a>\n                             <\/div>\n                         <\/td>`;\n            } \n            else \n            {\n              html += `<td class=\"align-top\">${d}<\/td>`;\n            }\n            \n            if (diaSemana === 6 && d !== diasMes) html += '<\/tr><tr>';\n          }\n          \n          const resto = (primerDiaSemana + diasMes) % 7;\n          if (resto !== 0) for (let i = resto; i < 7; i++) html += '<td><\/td>';\n          html += '<\/tr>';\n\n          const tbody = doc.getElementById(idBody);\n          if (tbody) tbody.innerHTML = html;\n          \n        }; \n\n        jQuery(function($) \n        {\n            renderCalendar(defaultMonth, defaultYear); \n\n            const $monthSelect = $(`#${idMonth}`);\n            const $yearSelect = $(`#${idYear}`);\n            \n            if ($monthSelect.length && $yearSelect.length) \n            {\n                $monthSelect.on(\"change\", function() \n                {\n                    renderCalendar(parseInt($(this).val()), parseInt($yearSelect.val()));\n                });\n                \n                $yearSelect.on(\"change\", function() \n                {\n                    renderCalendar(parseInt($monthSelect.val()), parseInt($(this).val()));\n                });\n            }\n\n            \/\/ SWEETALERT PARA EL CALENDARIO\n            $(`#${idBody}`).on(\"click\", \".calendar-link\", function(e) \n            {\n                e.preventDefault();\n                const link = $(this);\n                const url = link.attr(\"href\");\n                const titulo = link.data(\"title\"); \n                const subcatKey = link.data(\"subcat\");\n                const catKeyAttr = link.data(\"cat\");\n\n                const subcatName = Subcategories[subcatKey] || subcatKey;\n                const catName = categories[catKeyAttr] || catKeyAttr;\n\n                \/\/ Swal.fire debe estar disponible globalmente\n                if (typeof Swal !== 'undefined') {\n                    Swal.fire({\n                        title: `${subcatName} (${catName})`,\n                        text: `\u00bfDesea descargar el archivo ${titulo}?`,\n                        icon: 'question',\n                        showCancelButton: true,\n                        confirmButtonText: 'S\u00ed, Descargar',\n                        cancelButtonText: 'Cancelar'\n                    }).then(result => {\n                        if (result.isConfirmed) window.open(url, \"_blank\");\n                    });\n                } else {\n                    window.open(url, \"_blank\"); \/\/ Fallback si Swal no est\u00e1\n                }\n            });\n        });\n        return calendarHTML;\n    }\n\n    \/\/ --- L\u00d3GICA PRINCIPAL Y EVENTOS ---\n    jQuery(document).ready(function($) \n    {\n        const accordionContainer = document.getElementById('myaccordionid');\n        const doc = document; \n        \n        if (!accordionContainer) {\n            return;\n        }\n\n        \/\/ \u26a0\ufe0f DESHABILITAR CACHE PARA TODAS LAS PETICIONES AJAX\n        \/\/ Esto asegura que siempre se cargue la versi\u00f3n m\u00e1s reciente del JSON.\n        $.ajaxSetup({ cache: false });\n        \n        \/\/ \ud83c\udfaf CARGA AS\u00cdNCRONA DE DATOS DESDE EL ARCHIVO JSON \ud83c\udfaf\n        $.getJSON('\/wp-content\/uploads\/contingente_arancelario.json', function(resoluciones) {\n            \n            \/\/ Si el JSON se carga pero est\u00e1 vac\u00edo\n            if (Object.keys(resoluciones).length === 0)\n            {\n                $(accordionContainer).html('<p class=\"alert alert-warning text-center mt-3\">No se encontraron datos de resoluciones activas.<\/p>');\n                return;\n            }\n\n            \/\/ --- 1. Generaci\u00f3n del HTML del Acorde\u00f3n ---\n            Object.keys(categories).forEach((catKey, catIndex) =>\n            {\n                const catName = categories[catKey];\n                \/\/ 'resoluciones' ahora es el objeto JSON cargado\n                const categoriaData = resoluciones[catKey]; \n                let catItems = [];\n\n                if (categoriaData && Array.isArray(categoriaData.Items)) {\n                    catItems = categoriaData.Items.filter(r => r.status === 1);\n                }\n\n                const collapseCatId = `collapse-${catKey}`;\n                const expanded = catKey === \"Cat1\";\n                const btnClass = expanded ? \"btn-link\" : \"btn-link collapsed\";\n                const collapseClass = expanded ? \"collapse show\" : \"collapse\";\n                \n                let contenidoHTML = '';\n                let contenidoCat = '';\n\n                if (catItems.length > 0) \n                {\n                    const itemsPorSubcat = {};\n                    catItems.forEach(item => {\n                        const subKey = item.Subcategories || 'NoSubcategory';\n                        if (!itemsPorSubcat[subKey]) itemsPorSubcat[subKey] = [];\n                        itemsPorSubcat[subKey].push(item);\n                    });\n\n                    let firstSubcat = true;\n                    Object.entries(itemsPorSubcat).forEach(([subcatKey, items]) => \n                    {\n                        const subcatName = Subcategories[subcatKey] || subcatKey;\n                        const collapseSubcatId = `collapse-sub-${catKey}-${subcatKey}`;\n                        let bodyHTML = '';\n\n                        \/\/ \ud83d\udd39 SubCat1: Calendario Nativo\n                        if (subcatKey === \"SubCat1\") {\n                             bodyHTML += renderCalendario(doc, catKey, subcatKey, items);\n                        }\n                        \/\/ \ud83d\udd38 Resto de subcategor\u00edas: Lista\n                        else \n                        {\n                            bodyHTML += `<ul class=\"list-group archivos-list mb-2\">`;\n                            items.forEach(item => {\n                                const isLink = item.link && item.link !== \"#\";\n                                const fullLink = isLink ? dominio + item.link : \"#\";\n\n                                bodyHTML += `\n                                    <li class=\"list-group-item d-flex align-items-center\">\n                                        <div class=\"mr-2\" style=\"width: 40px; display: flex; align-items: center; justify-content: center;\">\n                                            <i class=\"fa-solid fa-check fa-lg\"><\/i>\n                                        <\/div>\n                                        ${\n                                            isLink\n                                            ? `<a href=\"${fullLink}\" target=\"_blank\" class=\"flex-grow-1 text-decoration-none resolution-link\"\n                                                    data-title=\"${item.title}\" data-cat=\"${catKey}\" data-subcat=\"${subcatKey}\">\n                                                     ${item.title}\n                                                   <\/a>`\n                                            : `<span class=\"text-muted flex-grow-1 text-start\">\n                                                    ${item.title} <small class=\"text-dark fw-bold custom-underline ms-auto\">(No Disponible)<\/small>\n                                                  <\/span>`\n                                        }\n                                    <\/li>`;\n                            });\n                            bodyHTML += `<\/ul>`;\n                        }\n                        \n                        \/\/ Renderizar tarjeta de Subcategor\u00eda\n                        contenidoHTML += `\n                            <div class=\"fag_contenedor mb-3\">\n                                <div class=\"card shadow-sm mb-3\">\n                                    <div class=\"card-header d-flex justify-content-between align-items-center\" \n                                         data-toggle=\"collapse\" \n                                         data-target=\"#${collapseSubcatId}\"\n                                         style=\"cursor: pointer;\">\n                                        <span>${subcatName}<\/span>\n                                        <button class=\"btn btn-sm toggle-btn ${firstSubcat ? \"\" : \"collapsed\"}\" type=\"button\">\n                                            ${firstSubcat ? \"Ocultar\" : \"Ver\"}\n                                        <\/button>\n                                    <\/div>\n                                    <div id=\"${collapseSubcatId}\" class=\"collapse ${firstSubcat ? \"show\" : \"\"} card-body\" data-parent=\"#${collapseCatId}\">\n                                        ${bodyHTML}\n                                    <\/div>\n                                <\/div>\n                            <\/div>`;\n\n                        firstSubcat = false;\n                    });\n                    \n                    contenidoCat = contenidoHTML;\n\n                } else {\n                    contenidoCat = `\n                        <p class=\"alert alert-info text-center mt-3\">\n                            No hay elementos activos en la categor\u00eda **${catName}** para mostrar.\n                        <\/p>`;\n                }\n                \n                \/\/ 4. Creaci\u00f3n del HTML del acorde\u00f3n principal de la Categor\u00eda (BS4)\n                const catAccordionHtml = `\n                    <div class=\"card\">\n                      <div class=\"card-header\" role=\"tab\" id=\"heading-${catKey}\">\n                        <h5 class=\"mb-0\">\n                          <button class=\"${btnClass}\" data-toggle=\"collapse\" data-target=\"#${collapseCatId}\" aria-expanded=\"${expanded}\" aria-controls=\"${collapseCatId}\">\n                            <i class=\"fa-solid fa-folder-open mr-2\"><\/i> ${catName} (${catItems.length})\n                            \n                            <span class=\"accordion-arrow ml-auto\">\n                                <i class=\"fa-solid fa-angle-right\"><\/i>\n                            <\/span>\n                          <\/button>\n                        <\/h5>\n                      <\/div>\n                      <div id=\"${collapseCatId}\" class=\"${collapseClass}\" role=\"tabpanel\" aria-labelledby=\"heading-${catKey}\" data-parent=\"#myaccordionid\">\n                        <div class=\"card-body\">\n                           ${contenidoCat}\n                        <\/div>\n                      <\/div>\n                    <\/div>`;\n\n                $(accordionContainer).append(catAccordionHtml);\n            });\n\n\n            \/\/ --- 2. L\u00f3gica de Eventos del Acorde\u00f3n Secundario (CORRECCI\u00d3N AS\u00cdNCRONA V2) ---\n            \n            \/\/ Variable para almacenar el ID del nuevo panel que queremos abrir.\n            let targetCollapseIdToOpen = null;\n\n            \/\/ 1. Manejador de Clic\n            $('.fag_contenedor .card-header').on('click', function(e) {\n                e.stopPropagation();\n\n                const $header = $(this);\n                const $targetCollapse = $header.siblings('.collapse');\n                const $parentBody = $header.closest('.card-body');\n                const $openCollapses = $parentBody.find('.collapse.show').not($targetCollapse);\n\n                \/\/ Si hacemos clic en un panel ya abierto, lo cerramos y salimos.\n                if ($targetCollapse.hasClass('show')) {\n                    $targetCollapse.collapse('hide');\n                    targetCollapseIdToOpen = null; \/\/ No hay apertura pendiente\n                    return;\n                }\n                \n                \/\/ Guardamos el ID del panel que queremos abrir.\n                targetCollapseIdToOpen = `#${$targetCollapse.attr('id')}`;\n\n                \/\/ Si hay otros paneles abiertos, los cerramos. \n                \/\/ La apertura del nuevo se har\u00e1 en el evento 'hidden' del primer panel que se cierre.\n                if ($openCollapses.length > 0) {\n                    $openCollapses.collapse('hide');\n                } else {\n                    \/\/ Si no hay otros abiertos, abrimos directamente.\n                    $targetCollapse.collapse('show');\n                    targetCollapseIdToOpen = null; \/\/ Apertura iniciada\n                }\n            });\n\n            \/\/ 2. Evento 'hidden' (Cuando un panel termina de OCULTARSE)\n            $('.fag_contenedor .card-body.collapse').on('hidden.bs.collapse', function() {\n                const $header = $(this).siblings('.card-header');\n                const $toggleBtn = $header.find('.toggle-btn');\n                $header.addClass('bg-secondary').removeClass('bg-suplemento');\n                $toggleBtn.text('Ver').removeClass('collapsed');\n                \n                \/\/ Si hay un panel pendiente de apertura (targetCollapseIdToOpen), \u00a1lo abrimos ahora!\n                if (targetCollapseIdToOpen) {\n                    \/\/ Usamos un peque\u00f1o timeout para dar tiempo a Bootstrap a \"limpiar\"\n                    \/\/ el estado de la animaci\u00f3n de cierre.\n                    setTimeout(() => {\n                        $(targetCollapseIdToOpen).collapse('show');\n                        targetCollapseIdToOpen = null; \/\/ Reseteamos la apertura pendiente\n                    }, 50); \/\/ 50ms son suficientes para evitar conflictos\n                }\n            });\n\n            \/\/ 3. Evento 'shown' (Cuando un panel termina de MOSTRARSE)\n            $('.fag_contenedor .card-body.collapse').on('shown.bs.collapse', function() {\n                const $header = $(this).siblings('.card-header');\n                const $toggleBtn = $header.find('.toggle-btn');\n                $header.addClass('bg-suplemento').removeClass('bg-secondary');\n                $toggleBtn.text('Ocultar').addClass('collapsed');\n            });\n            \n            \/\/ 4. Inicializaci\u00f3n de estados del sub-acorde\u00f3n\n            $('.fag_contenedor .card-body.collapse.show').each(function() {\n                const $header = $(this).siblings('.card-header');\n                $header.addClass('bg-suplemento').removeClass('bg-secondary');\n                $header.find('.toggle-btn').text('Ocultar').addClass('collapsed');\n            });\n\n            \/\/ SWEETALERT PARA LA LISTA EST\u00c1NDAR\n            $('#myaccordionid').on('click', '.archivos-list .resolution-link', function(e) \n            {\n                e.preventDefault();\n                \n                const link = $(this);\n                const url = link.attr(\"href\");\n                const titulo = link.data(\"title\"); \n                const subcatKey = link.data(\"subcat\");\n                const catKeyAttr = link.data(\"cat\"); \n\n                const subcatName = Subcategories[subcatKey] || subcatKey;\n                const catName = categories[catKeyAttr] || catKeyAttr;\n\n                \/\/ Swal.fire debe estar disponible globalmente\n                if (typeof Swal !== 'undefined') {\n                    Swal.fire({\n                        title: `${subcatName} (${catName})`,\n                        text: `\u00bfDesea descargar el archivo ${titulo}?`,\n                        icon: 'question',\n                        showCancelButton: true,\n                        confirmButtonText: 'S\u00ed, Descargar',\n                        cancelButtonText: 'Cancelar'\n                    }).then(result => {\n                        if (result.isConfirmed) window.open(url, \"_blank\");\n                    });\n                } else {\n                    window.open(url, \"_blank\"); \/\/ Fallback si Swal no est\u00e1\n                }\n            });\n\n        \/\/ \u274c Manejo de Errores en la Carga de JSON\n        }).fail(function(jqxhr, textStatus, error) {\n            const err = textStatus + \", \" + error;\n            console.error(\"Error al cargar contingente_arancelario.json: \" + err);\n            $(accordionContainer).html('<p class=\"alert alert-danger text-center mt-3\">\u26a0\ufe0f Error cr\u00edtico: No se pudieron cargar los datos de las resoluciones.<\/p>');\n        });\n\n    }); \/\/ Fin de jQuery(document).ready(function($)\n<\/script>\n    <\/div>\n    ","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-421","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Contingentes Arancelarios - Autoridad Nacional de Aduanas<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Contingentes Arancelarios - Autoridad Nacional de Aduanas\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/\" \/>\n<meta property=\"og:site_name\" content=\"Autoridad Nacional de Aduanas\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/aduanas.panama\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-12T16:18:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.ana.gob.pa\/wp-content\/uploads\/2025\/07\/logo2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"175\" \/>\n\t<meta property=\"og:image:height\" content=\"76\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@aduanaspanama\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.ana.gob.pa\\\/index.php\\\/contingentes-arancelarios\\\/\",\"url\":\"https:\\\/\\\/www.ana.gob.pa\\\/index.php\\\/contingentes-arancelarios\\\/\",\"name\":\"Contingentes Arancelarios - Autoridad Nacional de Aduanas\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ana.gob.pa\\\/#website\"},\"datePublished\":\"2025-08-14T13:24:30+00:00\",\"dateModified\":\"2026-01-12T16:18:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ana.gob.pa\\\/index.php\\\/contingentes-arancelarios\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.ana.gob.pa\\\/index.php\\\/contingentes-arancelarios\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ana.gob.pa\\\/index.php\\\/contingentes-arancelarios\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/www.ana.gob.pa\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Contingentes Arancelarios\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.ana.gob.pa\\\/#website\",\"url\":\"https:\\\/\\\/www.ana.gob.pa\\\/\",\"name\":\"Autoridad Nacional de Aduanas\",\"description\":\"Autoridad Nacional de Aduanas\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.ana.gob.pa\\\/#organization\"},\"alternateName\":\"Autoridad Nacional de Aduanas\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.ana.gob.pa\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.ana.gob.pa\\\/#organization\",\"name\":\"Autoridad Nacional de Aduanas\",\"alternateName\":\"Autoridad Nacional de Aduanas\",\"url\":\"https:\\\/\\\/www.ana.gob.pa\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.ana.gob.pa\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.ana.gob.pa\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/logo-de-aduanas-y-gobierno.png\",\"contentUrl\":\"https:\\\/\\\/www.ana.gob.pa\\\/wp-content\\\/uploads\\\/2025\\\/07\\\/logo-de-aduanas-y-gobierno.png\",\"width\":2860,\"height\":423,\"caption\":\"Autoridad Nacional de Aduanas\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ana.gob.pa\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/aduanas.panama\\\/\",\"https:\\\/\\\/x.com\\\/aduanaspanama\",\"https:\\\/\\\/www.instagram.com\\\/aduanaspanama\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Contingentes Arancelarios - Autoridad Nacional de Aduanas","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/","og_locale":"es_ES","og_type":"article","og_title":"Contingentes Arancelarios - Autoridad Nacional de Aduanas","og_url":"https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/","og_site_name":"Autoridad Nacional de Aduanas","article_publisher":"https:\/\/www.facebook.com\/aduanas.panama\/","article_modified_time":"2026-01-12T16:18:01+00:00","og_image":[{"width":175,"height":76,"url":"https:\/\/www.ana.gob.pa\/wp-content\/uploads\/2025\/07\/logo2.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@aduanaspanama","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/","url":"https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/","name":"Contingentes Arancelarios - Autoridad Nacional de Aduanas","isPartOf":{"@id":"https:\/\/www.ana.gob.pa\/#website"},"datePublished":"2025-08-14T13:24:30+00:00","dateModified":"2026-01-12T16:18:01+00:00","breadcrumb":{"@id":"https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.ana.gob.pa\/index.php\/contingentes-arancelarios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.ana.gob.pa\/"},{"@type":"ListItem","position":2,"name":"Contingentes Arancelarios"}]},{"@type":"WebSite","@id":"https:\/\/www.ana.gob.pa\/#website","url":"https:\/\/www.ana.gob.pa\/","name":"Autoridad Nacional de Aduanas","description":"Autoridad Nacional de Aduanas","publisher":{"@id":"https:\/\/www.ana.gob.pa\/#organization"},"alternateName":"Autoridad Nacional de Aduanas","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.ana.gob.pa\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.ana.gob.pa\/#organization","name":"Autoridad Nacional de Aduanas","alternateName":"Autoridad Nacional de Aduanas","url":"https:\/\/www.ana.gob.pa\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.ana.gob.pa\/#\/schema\/logo\/image\/","url":"https:\/\/www.ana.gob.pa\/wp-content\/uploads\/2025\/07\/logo-de-aduanas-y-gobierno.png","contentUrl":"https:\/\/www.ana.gob.pa\/wp-content\/uploads\/2025\/07\/logo-de-aduanas-y-gobierno.png","width":2860,"height":423,"caption":"Autoridad Nacional de Aduanas"},"image":{"@id":"https:\/\/www.ana.gob.pa\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/aduanas.panama\/","https:\/\/x.com\/aduanaspanama","https:\/\/www.instagram.com\/aduanaspanama"]}]}},"_links":{"self":[{"href":"https:\/\/www.ana.gob.pa\/index.php\/wp-json\/wp\/v2\/pages\/421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ana.gob.pa\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ana.gob.pa\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ana.gob.pa\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ana.gob.pa\/index.php\/wp-json\/wp\/v2\/comments?post=421"}],"version-history":[{"count":338,"href":"https:\/\/www.ana.gob.pa\/index.php\/wp-json\/wp\/v2\/pages\/421\/revisions"}],"predecessor-version":[{"id":5770,"href":"https:\/\/www.ana.gob.pa\/index.php\/wp-json\/wp\/v2\/pages\/421\/revisions\/5770"}],"wp:attachment":[{"href":"https:\/\/www.ana.gob.pa\/index.php\/wp-json\/wp\/v2\/media?parent=421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}