Última publicación

  • Taller de Balística Forense en el Comando de Ingeniería del Ejército del Paraguay

    Taller de Balística Forense en el Comando de Ingeniería del Ejército del Paraguay

    El pasado sábado 30 de septiembre se desarrolló una exitosa jornada de capacitación en las instalaciones del Comando de Ingeniería del Ejército del Paraguay (COMINGE). La actividad consistió en un taller teórico-práctico de balística forense titulado “Método de análisis de trayectorias a corta distancia”, organizado por Equipo Forense Paraguay (EFOP) en alianza con el Departamento

    Leer más

`); ventana.document.close(); ventana.onload = function() { ventana.focus(); ventana.print(); }; }function seccionImpresion(item, data, forzar) { // Verificar si hay al menos un campo con datos (no renderizar si todo está vacío) const tieneData = item.campos.some(c => c.tipo !== 'imagen' && val(data, c.key)); if (!tieneData && !forzar) return '';let html = '
'; html += '
' + item.numero + '. ' + item.titulo.toUpperCase() + '
'; html += '
';item.campos.forEach(campo => { if (campo.tipo === 'imagen') { // Imagen no disponible aún return; } const v = val(data, campo.key); if (!v) return;if (campo.tipo === 'texto') { if (campo.label) html += '
' + esc(campo.label) + '
'; html += '
' + esc(v) + '
'; } else { html += '
'; html += '' + esc(campo.label) + ''; html += '' + esc(v) + ''; html += '
'; } });html += '
'; return html; }// ------------------------------------------------------- // HELPERS // ------------------------------------------------------- function val(data, key) { const v = data[key]; return (v !== null && v !== undefined && v !== '' && v !== 'null') ? String(v).trim() : ''; } function esc(str) { return String(str) .replace(/&/g,'&') .replace(//g,'>') .replace(/"/g,'"'); } function dato(label, valor) { return '
' + label + ':' + esc(valor) + '
'; }})();// ===================================================================== // FUNCIONES GLOBALES: Imprimir Consulta dimensional // ===================================================================== (function() {// --- Abrir modal acceso restringido --- window.icMostrarAccesoRestringido = function() { const m = document.getElementById('modal-ic-restringido'); m.style.display = 'flex'; document.body.style.overflow = 'hidden'; }; window.icCerrarRestringido = function() { document.getElementById('modal-ic-restringido').style.display = 'none'; document.body.style.removeProperty('overflow'); };// --- Disparar el flujo de impresión de consulta --- window.icImprimirConsulta = function() { // Reutiliza el mismo modal de encabezado que la ficha técnica window.mftAbrirEncabezadoConsulta(); };window.mftAbrirEncabezadoConsulta = function() { // Marcar modo consulta antes de abrir el modal compartido document.getElementById('modal-encabezado-impresion').dataset.modo = 'consulta'; window.mftAbrirEncabezado(); };// Exponer generador como global para que meiConfirmar (en el primer IIFE) lo invoque window._icGenerarImpresionConsulta = function(enc) { const cotas = window._icCotasIngresadas || []; const tipo = window._icTipoConsulta || 'Metálica';// Leer filas de candidatos desde el DOM const filas = []; document.querySelectorAll('.contenedor-resultados-balisticos table tr:not(:first-child)').forEach(tr => { const celdas = tr.querySelectorAll('td'); if (celdas.length < 7) return;// Reconstruir badges con color desde el DOM const badgesHTML = Array.from(celdas[4].querySelectorAll('span')).map(s => { const texto = s.textContent.trim(); const bg = s.style.backgroundColor || ''; const esVerde = bg === 'rgb(46, 204, 113)'; const esAmarillo = bg === 'rgb(241, 196, 15)'; const color = esVerde ? '#27ae60' : (esAmarillo ? '#b7950b' : '#c0392b'); const bgImp = esVerde ? '#d5f5e3' : (esAmarillo ? '#fef9e7' : '#fadbd8'); const border = esVerde ? '#27ae60' : (esAmarillo ? '#f1c40f' : '#c0392b'); return ''+texto+''; }).join(' ');filas.push({ candidato : celdas[0].textContent.trim(), tipo : celdas[1].textContent.trim(), percusion : celdas[2].textContent.trim(), formaVaina : celdas[3].textContent.trim(), parametrosHTML: badgesHTML || celdas[4].textContent.trim(), coincidencias: celdas[5].textContent.trim(), concordancia : celdas[6].textContent.trim(), }); });const LOGO_URL = 'https://peritobalistico.com/wp-content/uploads/2026/04/MODULO-IC.png';function esc(s) { return String(s||'') .replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"'); } function dato(label, valor) { return '
'+label+':'+esc(valor)+'
'; }let html = '
';// --- Encabezado 3 columnas (idéntico a ficha técnica) --- html += '
'; html += '
Logo
'; html += '
'; html += '
'+esc(enc.anexo)+'
'; html += '
Reporte de Consulta Dimensional — Buscador Balístico Especializado
'; html += '
'; html += '
'; if (enc.institucion) html += dato('Institución', enc.institucion); if (enc.laboratorio) html += dato('Laboratorio', enc.laboratorio); if (enc.informe) html += dato('Inf. Pericial', enc.informe); html += dato('Perito', enc.perito); if (enc.fecha) html += dato('Fecha', enc.fecha); html += '
'; html += '
'; // fin encabezado// --- Sección 1: Cotas ingresadas --- html += '
'; html += '
1. Parámetros de la Consulta — Cartuchería '+esc(tipo)+'
'; html += '
'; if (cotas.length === 0) { html += '
No se registraron cotas ingresadas.
'; } else { cotas.forEach(c => { html += '
'; html += 'Cota '+esc(c.codigo)+''; html += ''+esc(c.valor)+' mm'; html += '
'; }); } html += '
';// --- Sección 2: Candidatos --- html += '
'; html += '
2. Reporte de Candidatos
'; html += '
'; html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; [['CANDIDATO','col-candidato'],['TIPO','col-tipo'],['PERCUSIÓN','col-percusion'], ['FORMA DE VAINA','col-forma'],['PARÁMETROS','col-parametros'], ['COINCIDENCIAS','col-coincid'],['CONCORDANCIA','col-concordan']] .forEach(([h,c]) => { html += ''; }); html += '';filas.forEach((f) => { const pct = parseFloat(f.concordancia) || 0; const colorPct = (pct === 100) ? '#27ae60' : (pct >= 50 ? '#d4ac0d' : '#c0392b'); // Convertir badges inline a clases CSS para mejor impresión const badgesClase = f.parametrosHTML.replace( /background:[^;]+;color:([^;]+);font-weight:700;font-size:8pt;padding:[^;]+;border-radius:[^;]+;margin:[^;]+;border:[^"]+/g, (m, color) => color.includes('27ae60') ? 'class="badge-verde"' : 'class="badge-rojo"' ).replace(/ style="[^"]*class=/g, ' ').replace(/style="[^"]*"/g, (m) => m.includes('27ae60') ? 'class="badge-verde"' : 'class="badge-rojo"' ); html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; html += ''; }); html += '
'+h+'
'+esc(f.candidato)+''+esc(f.tipo)+''+esc(f.percusion)+''+esc(f.formaVaina)+''+f.parametrosHTML+''+esc(f.coincidencias)+''+esc(f.concordancia)+'
';// --- Pie de página --- const ahora = new Date(); const ts = ahora.toLocaleDateString('es-PY',{day:'2-digit',month:'2-digit',year:'numeric'}) + ' ' + ahora.toLocaleTimeString('es-PY',{hour:'2-digit',minute:'2-digit'}); html += ''; html += '
'; // fin imp-pagina// Abrir ventana de impresión const ventana = window.open('', '_blank', 'width=960,height=720'); if (!ventana || ventana.closed) { alert('Tu navegador bloqueó la ventana de impresión.\nPor favor, permití las ventanas emergentes para peritobalistico.com e intentá nuevamente.'); return; } ventana.document.write(`Consulta Dimensional — ${esc(enc.anexo)}${html}`); ventana.document.close(); ventana.onload = function() { ventana.focus(); ventana.print(); }; }})();