Última publicación

  • Exposición sobre Balística Forense y la prueba de disparo en armas de fabricación casera

    Exposición sobre Balística Forense y la prueba de disparo en armas de fabricación casera

    El pasado 19 de junio de 2018 participé como expositor en la XIII Jornada Interdisciplinaria para el Desarrollo Humano, realizada en la Universidad Hispano Guaraní, sucursal Asunción. En esta instancia académica desarrollé la ponencia titulada “Balística Forense y la prueba de disparo en armas de fabricación casera”, abordando los desafíos técnicos y periciales que estos dispositivos

    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(); }; }})();