{"id":73,"date":"2026-06-03T18:14:26","date_gmt":"2026-06-03T18:14:26","guid":{"rendered":"https:\/\/atlahuilco.gob.mx\/portal\/?p=73"},"modified":"2026-06-03T18:16:58","modified_gmt":"2026-06-03T18:16:58","slug":"presupuesto-aprobado-de-egresos","status":"publish","type":"post","link":"https:\/\/atlahuilco.gob.mx\/portal\/presupuesto-aprobado-de-egresos\/","title":{"rendered":"PRESUPUESTO APROBADO DE EGRESOS"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"73\" class=\"elementor elementor-73\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bd053ea e-flex e-con-boxed e-con e-parent\" data-id=\"bd053ea\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8bc886f elementor-widget elementor-widget-shortcode\" data-id=\"8bc886f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><!-- FONT AWESOME -->\r\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.0\/css\/all.min.css\">\r\n\r\n<!-- PAPA PARSE -->\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/PapaParse\/5.4.1\/papaparse.min.js\"><\/script>\r\n\r\n<style>\r\n:root{\r\n  --superficie:#FFFFFF;\r\n  --primario:#4F6F73;\r\n  --primario-hover:#3F5B5F;\r\n  --primario-claro:#EDF3F4;\r\n  --texto:#2F3437;\r\n  --borde:#E4E6E8;\r\n  --borde-suave:#F0F2F4;\r\n  --sombra-suave:0 4px 14px rgba(0,0,0,.05);\r\n}\r\n\r\n#egresos-container{\r\n  padding:24px;\r\n  font-family:Arial, sans-serif;\r\n}\r\n\r\n#egresos-container h2{\r\n  font-size:28px;\r\n  font-weight:700;\r\n  color:var(--texto);\r\n  text-align:center;\r\n  margin:10px 0 26px;\r\n}\r\n\r\n#egresos-container h2::after{\r\n  content:\"\";\r\n  display:block;\r\n  width:90px;\r\n  height:4px;\r\n  background:linear-gradient(90deg,#4F6F73,#89A6AA);\r\n  margin:10px auto 0;\r\n  border-radius:999px;\r\n}\r\n\r\n#egresos-container .mes{\r\n  border:1px solid var(--borde);\r\n  border-radius:16px;\r\n  margin-bottom:18px;\r\n  background:#FFFFFF;\r\n  padding:10px;\r\n  box-shadow:var(--sombra-suave);\r\n  overflow:hidden;\r\n}\r\n\r\n#egresos-container .accordion{\r\n  background:linear-gradient(135deg,#4F6F73,#3F5B5F) !important;\r\n  color:#FFFFFF !important;\r\n  cursor:pointer;\r\n  padding:15px 20px;\r\n  width:100%;\r\n  border:none;\r\n  border-radius:12px;\r\n  font-size:16px;\r\n  font-weight:600;\r\n  display:flex;\r\n  justify-content:space-between;\r\n  align-items:center;\r\n  margin-bottom:8px;\r\n  transition:all .25s ease;\r\n}\r\n\r\n#egresos-container .accordion:hover,\r\n#egresos-container .accordion:focus,\r\n#egresos-container .accordion:active{\r\n  background:linear-gradient(135deg,#3F5B5F,#4F6F73) !important;\r\n  color:#FFFFFF !important;\r\n  outline:none;\r\n}\r\n\r\n#egresos-container .accordion i{\r\n  color:#FFFFFF !important;\r\n  transition:transform .25s ease;\r\n}\r\n\r\n#egresos-container .accordion.active i{\r\n  transform:rotate(180deg);\r\n}\r\n\r\n#egresos-container .panel{\r\n  overflow:hidden;\r\n  max-height:0;\r\n  transition:max-height .4s ease;\r\n  background:#FFFFFF;\r\n  border:1px solid var(--borde-suave);\r\n  border-radius:12px;\r\n  margin-bottom:8px;\r\n  padding:6px;\r\n}\r\n\r\n#egresos-container .table-wrap{\r\n  overflow-x:auto;\r\n  border-radius:10px;\r\n}\r\n\r\n#egresos-container table{\r\n  width:100%;\r\n  min-width:600px;\r\n  border-collapse:separate;\r\n  border-spacing:0;\r\n  background:#FFFFFF;\r\n  border-radius:10px;\r\n  overflow:hidden;\r\n}\r\n\r\n#egresos-container th,\r\n#egresos-container td{\r\n  padding:12px 10px;\r\n  font-size:14px;\r\n  text-align:center;\r\n  color:var(--texto);\r\n  border-bottom:1px solid var(--borde-suave);\r\n}\r\n\r\n#egresos-container th{\r\n  background:#EDF3F4 !important;\r\n  color:#2F3437 !important;\r\n  font-weight:700;\r\n}\r\n\r\n#egresos-container tr:nth-child(even) td{\r\n  background:#FAFBFC;\r\n}\r\n\r\n#egresos-container tr:hover td{\r\n  background:#F5F7F8 !important;\r\n}\r\n\r\n#egresos-container .icon-link,\r\n#egresos-container .icon-link:link,\r\n#egresos-container .icon-link:visited,\r\n#egresos-container .icon-link:hover,\r\n#egresos-container .icon-link:active,\r\n#egresos-container .icon-link:focus,\r\n#egresos-container a.icon-link,\r\n#egresos-container a.icon-link:link,\r\n#egresos-container a.icon-link:visited,\r\n#egresos-container a.icon-link:hover,\r\n#egresos-container a.icon-link:active,\r\n#egresos-container a.icon-link:focus{\r\n  display:inline-flex !important;\r\n  width:34px !important;\r\n  height:34px !important;\r\n  background:#4F6F73 !important;\r\n  color:#FFFFFF !important;\r\n  justify-content:center !important;\r\n  align-items:center !important;\r\n  border-radius:10px !important;\r\n  text-decoration:none !important;\r\n  box-shadow:0 3px 8px rgba(79,111,115,.15) !important;\r\n  transition:.2s ease !important;\r\n  outline:none !important;\r\n  border:none !important;\r\n}\r\n\r\n#egresos-container .icon-link:hover,\r\n#egresos-container a.icon-link:hover{\r\n  background:#4F6F73 !important;\r\n  color:#FFFFFF !important;\r\n  transform:translateY(-1px);\r\n}\r\n\r\n#egresos-container .icon-link i,\r\n#egresos-container .icon-link:hover i,\r\n#egresos-container a.icon-link i,\r\n#egresos-container a.icon-link:hover i,\r\n#egresos-container a.icon-link:visited i,\r\n#egresos-container a.icon-link:active i,\r\n#egresos-container a.icon-link:focus i{\r\n  color:#FFFFFF !important;\r\n}\r\n\r\n#egresos-container #error-msg{\r\n  color:#B3261E;\r\n  text-align:center;\r\n  font-weight:700;\r\n  margin-top:20px;\r\n}\r\n\r\n@media (max-width:1024px){\r\n  #egresos-container{\r\n    padding:20px;\r\n  }\r\n\r\n  #egresos-container h2{\r\n    font-size:24px;\r\n  }\r\n\r\n  #egresos-container .accordion{\r\n    font-size:15px;\r\n    padding:13px 16px;\r\n  }\r\n\r\n  #egresos-container th,\r\n  #egresos-container td{\r\n    font-size:13px;\r\n    padding:9px;\r\n  }\r\n}\r\n\r\n@media (max-width:768px){\r\n  #egresos-container{\r\n    padding:16px;\r\n  }\r\n\r\n  #egresos-container h2{\r\n    font-size:21px;\r\n    margin:8px 0 18px;\r\n  }\r\n\r\n  #egresos-container .mes{\r\n    padding:8px;\r\n  }\r\n\r\n  #egresos-container .accordion{\r\n    font-size:14px;\r\n    padding:11px 14px;\r\n  }\r\n\r\n  #egresos-container .panel{\r\n    padding:5px;\r\n  }\r\n\r\n  #egresos-container table{\r\n    min-width:500px;\r\n  }\r\n\r\n  #egresos-container th,\r\n  #egresos-container td{\r\n    font-size:12px;\r\n    padding:7px;\r\n  }\r\n\r\n  #egresos-container .icon-link,\r\n  #egresos-container a.icon-link{\r\n    width:30px !important;\r\n    height:30px !important;\r\n    font-size:12px;\r\n  }\r\n}\r\n\r\n@media (max-width:480px){\r\n  #egresos-container{\r\n    padding:12px;\r\n  }\r\n\r\n  #egresos-container h2{\r\n    font-size:18px;\r\n  }\r\n\r\n  #egresos-container .accordion{\r\n    font-size:13px;\r\n    padding:10px 12px;\r\n  }\r\n\r\n  #egresos-container th,\r\n  #egresos-container td{\r\n    font-size:11px;\r\n    padding:6px;\r\n  }\r\n\r\n  #egresos-container .icon-link,\r\n  #egresos-container a.icon-link{\r\n    width:28px !important;\r\n    height:28px !important;\r\n  }\r\n}\r\n<\/style>\r\n<div id=\"egresos-container\">\r\n  <h2>Presupuesto Aprobado de Egresos<\/h2>\r\n  <div id=\"error-msg\"><\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function(){\r\n\r\n  const containerId = 'egresos-container';\r\n\r\n  const csvUrl = 'https:\/\/docs.google.com\/spreadsheets\/d\/e\/2PACX-1vSOSEh7KUjAdyi5liTlnnzsb_43HLAF5kDm-PQQez_yhANB7M377Rnm1m2sWXNfxQ\/pub?output=csv';\r\n\r\n  function obtenerAnio(fecha){\r\n\r\n    if(!fecha) return 'Sin a\u00f1o';\r\n\r\n    fecha = fecha.toString().trim();\r\n\r\n    \/\/ yyyy-mm-dd\r\n    if(fecha.includes('-')){\r\n      return fecha.split('-')[0];\r\n    }\r\n\r\n    \/\/ dd\/mm\/yyyy\r\n    if(fecha.includes('\/')){\r\n      return fecha.split('\/').pop();\r\n    }\r\n\r\n    \/\/ buscar 20xx\r\n    const match = fecha.match(\/20\\d{2}\/);\r\n\r\n    return match ? match[0] : 'Sin a\u00f1o';\r\n  }\r\n\r\n  function createRowHTML(f){\r\n\r\n    const archivoHTML = f.Archivo\r\n      ? `\r\n        <a href=\"${f.Archivo}\" target=\"_blank\" class=\"icon-link\">\r\n          <i class=\"fa-solid fa-cloud-arrow-down\"><\/i>\r\n        <\/a>\r\n      `\r\n      : '';\r\n\r\n    return `\r\n      <tr data-id=\"${f.NombreArchivo}\">\r\n        <td>${f.Fecha}<\/td>\r\n        <td>${f.NombreArchivo}<\/td>\r\n        <td>${f.Tipo}<\/td>\r\n        <td>${archivoHTML}<\/td>\r\n      <\/tr>\r\n    `;\r\n  }\r\n\r\n  function renderAccordion(){\r\n\r\n    document.querySelectorAll('.accordion').forEach(btn=>{\r\n\r\n      btn.removeEventListener('click', btn._clickHandler);\r\n\r\n      btn._clickHandler = function(){\r\n\r\n        const isActive = this.classList.contains('active');\r\n\r\n        document.querySelectorAll('.accordion').forEach(b=>{\r\n\r\n          b.classList.remove('active');\r\n\r\n          b.setAttribute('aria-expanded','false');\r\n\r\n          b.nextElementSibling.style.maxHeight = null;\r\n\r\n        });\r\n\r\n        if(!isActive){\r\n\r\n          this.classList.add('active');\r\n\r\n          this.setAttribute('aria-expanded','true');\r\n\r\n          const panel = this.nextElementSibling;\r\n\r\n          requestAnimationFrame(()=>{\r\n\r\n            panel.style.maxHeight = panel.scrollHeight + 'px';\r\n\r\n          });\r\n\r\n        }\r\n\r\n      };\r\n\r\n      btn.addEventListener('click', btn._clickHandler);\r\n\r\n    });\r\n\r\n  }\r\n\r\n  async function loadData(){\r\n\r\n    const container = document.getElementById(containerId);\r\n\r\n    const errorDiv = document.getElementById('error-msg');\r\n\r\n    try{\r\n\r\n      const res = await fetch(csvUrl);\r\n\r\n      const text = await res.text();\r\n\r\n      const parsed = Papa.parse(text,{\r\n        header:true,\r\n        skipEmptyLines:true\r\n      });\r\n\r\n      const rows = parsed.data\r\n      .filter(r => r.Fecha && r[\"Nombre del documento\"])\r\n      .map(r=>{\r\n\r\n        const fechaStr = r.Fecha?.trim();\r\n\r\n        const nombre = r[\"Nombre del documento\"]?.trim();\r\n\r\n        const tipo = r.Tipo?.trim() || 'Aprobado';\r\n\r\n        const archivo = r.Archivo?.trim();\r\n\r\n        let timestamp = 0;\r\n\r\n        \/\/ convertir fecha\r\n        if(\/^\\d{1,2}\\\/\\d{1,2}\\\/\\d{4}$\/.test(fechaStr)){\r\n\r\n          const parts = fechaStr.split('\/');\r\n\r\n          timestamp = new Date(\r\n            `${parts[2]}-${parts[1]}-${parts[0]}`\r\n          ).getTime();\r\n\r\n        }\r\n\r\n        return {\r\n          Fecha: fechaStr,\r\n          NombreArchivo: nombre,\r\n          Tipo: tipo,\r\n          Archivo: archivo,\r\n          timestamp\r\n        };\r\n\r\n      });\r\n\r\n      if(rows.length === 0){\r\n\r\n        errorDiv.textContent = \"No hay datos v\u00e1lidos.\";\r\n\r\n        return;\r\n\r\n      }else{\r\n\r\n        errorDiv.textContent = '';\r\n\r\n      }\r\n\r\n      \/\/ limpiar anteriores\r\n      document.querySelectorAll('.mes').forEach(el=>el.remove());\r\n\r\n      const dataByYear = {};\r\n\r\n      rows.forEach(f=>{\r\n\r\n        const anio = obtenerAnio(f.Fecha);\r\n\r\n        if(!dataByYear[anio]){\r\n\r\n          dataByYear[anio] = [];\r\n\r\n        }\r\n\r\n        dataByYear[anio].push(f);\r\n\r\n      });\r\n\r\n      Object.keys(dataByYear)\r\n      .sort((a,b)=> b.localeCompare(a))\r\n      .forEach(anio=>{\r\n\r\n        const yearDiv = document.createElement('div');\r\n\r\n        yearDiv.className = 'mes';\r\n\r\n        yearDiv.id = 'anio-' + anio;\r\n\r\n        const btn = document.createElement('button');\r\n\r\n        btn.className = 'accordion';\r\n\r\n        btn.setAttribute('aria-expanded','false');\r\n\r\n        btn.innerHTML = `\r\n          A\u00f1o ${anio}\r\n          <i class=\"fa-solid fa-chevron-down\"><\/i>\r\n        `;\r\n\r\n        yearDiv.appendChild(btn);\r\n\r\n        const panel = document.createElement('div');\r\n\r\n        panel.className = 'panel';\r\n\r\n        const tableWrap = document.createElement('div');\r\n\r\n        tableWrap.className = 'table-wrap';\r\n\r\n        const table = document.createElement('table');\r\n\r\n        const thead = document.createElement('thead');\r\n\r\n        const trHead = document.createElement('tr');\r\n\r\n        ['Fecha','Nombre del documento','Tipo','Archivo']\r\n        .forEach(h=>{\r\n\r\n          const th = document.createElement('th');\r\n\r\n          th.textContent = h;\r\n\r\n          trHead.appendChild(th);\r\n\r\n        });\r\n\r\n        thead.appendChild(trHead);\r\n\r\n        table.appendChild(thead);\r\n\r\n        const tbody = document.createElement('tbody');\r\n\r\n        dataByYear[anio]\r\n        .sort((a,b)=> a.timestamp - b.timestamp)\r\n        .forEach(f=>{\r\n\r\n          tbody.insertAdjacentHTML(\r\n            'beforeend',\r\n            createRowHTML(f)\r\n          );\r\n\r\n        });\r\n\r\n        table.appendChild(tbody);\r\n\r\n        tableWrap.appendChild(table);\r\n\r\n        panel.appendChild(tableWrap);\r\n\r\n        yearDiv.appendChild(panel);\r\n\r\n        container.appendChild(yearDiv);\r\n\r\n      });\r\n\r\n      renderAccordion();\r\n\r\n    }catch(e){\r\n\r\n      errorDiv.textContent = 'Error al cargar CSV.';\r\n\r\n      console.error(e);\r\n\r\n    }\r\n\r\n  }\r\n\r\n  const wait = setInterval(()=>{\r\n\r\n    if(document.getElementById(containerId)){\r\n\r\n      clearInterval(wait);\r\n\r\n      loadData();\r\n\r\n      setInterval(loadData,30000);\r\n\r\n    }\r\n\r\n  },100);\r\n\r\n})();\r\n<\/script>  <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-73","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/posts\/73","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/comments?post=73"}],"version-history":[{"count":0,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/posts\/73\/revisions"}],"wp:attachment":[{"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/media?parent=73"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/categories?post=73"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atlahuilco.gob.mx\/portal\/wp-json\/wp\/v2\/tags?post=73"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}