Directorio de Organismos Acreditados

Directorio de Acreditaciones

Consulte los laboratorios de ensayos, laboratorios de calibración y organismos de inspección acreditados por el Consejo Nacional de Acreditación (CNA) de Panamá.

Total de Acreditados
🏛
Laboratorios de Ensayos
🔬
Laboratorios de Calibración
Organismos de Inspección
🔍
Búsqueda por esquema de acreditación
Cargando directorio...
`; return; } resultsEl.innerHTML = items.map(i => `
${badgeLabel(i.tipo)}
${i.estatus ? `${escapeHtml(i.estatus)}` : ''}
${i.logo_url ? `` : `` }
${escapeHtml(i.organismo)}
${i.alcance ? `
${escapeHtml(i.alcance)}
` : ''}
${i.telefono ? `
📞${escapeHtml(i.telefono)}
` : ''} ${i.correo ? `` : ''} ${i.pagina_web ? `
🌐${escapeHtml(i.pagina_web)}
` : ''}
${i.archivo_url ? `
Ver certificado PDF
` : ''}
`).join(''); } /* ── PAGINACIÓN ── */ function renderPagination(data){ const cur = data.current_page; const last = data.last_page; const total = data.total; document.getElementById('total_results').innerHTML = `Se encontraron ${(total||0).toLocaleString()} organismos acreditados`; if(last <= 1){ paginationEl.innerHTML=''; return; } const delta = 2; let pages = []; for(let p = Math.max(1, cur-delta); p <= Math.min(last, cur+delta); p++) pages.push(p); let html = ''; html += ``; html += ``; if(pages[0] > 1) html += ``; pages.forEach(p => { html += ``; }); if(pages[pages.length-1] < last) html += ``; html += ``; html += ``; paginationEl.innerHTML = html; paginationEl.querySelectorAll('button[data-p]').forEach(btn => { btn.addEventListener('click', () => fetchPage(parseInt(btn.dataset.p))); }); } /* ── FETCH ── */ function fetchPage(page){ currentPage = page; resultsEl.innerHTML = '
Cargando...
'; paginationEl.innerHTML = ''; const q = encodeURIComponent(qInput.value.trim()); const tipo = encodeURIComponent(tipoInput.value); const estatus = encodeURIComponent(estatusInput.value); const url = `${apiBase}/buscarcna_api?per_page=${perPage}&page=${page}` + (q ? `&q=${q}` : '') + (tipo ? `&tipo=${tipo}` : '') + (estatus ? `&estatus=${estatus}` : ''); fetch(url) .then(r => r.json()) .then(data => { renderResults(data.data || []); renderPagination(data); }) .catch(() => { resultsEl.innerHTML = '
No se pudo conectar con el servidor. Intente nuevamente.
'; }); } /* ── HELPERS ── */ function escapeHtml(str){ return (str||'').toString().replace(/[&<>"]/g, c => ({'&':'&','<':'<','>':'>','"':'"'}[c])); } /* ── EVENTOS ── */ buscarBtn.addEventListener('click', () => fetchPage(1)); qInput.addEventListener('keydown', e => { if(e.key==='Enter') fetchPage(1); }); limpiarBtn.addEventListener('click', () => { qInput.value=''; tipoInput.value=''; estatusInput.value='Vigente'; fetchPage(1); }); /* ── INICIO ── */ loadTotals(); fetchPage(1); })();