265 lines
18 KiB
HTML
265 lines
18 KiB
HTML
<!doctype html>
|
||
<html lang="es">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Acta de diagnóstico en campo — HBOX</title>
|
||
<link rel="stylesheet" href="acta.css">
|
||
</head>
|
||
<body>
|
||
<div id="acta"></div>
|
||
<script src="flota.js"></script>
|
||
<script src="acta.js"></script>
|
||
<script>
|
||
const led = v => String(v.led || '');
|
||
const abrio = v => String(v.abrir || '').startsWith('S');
|
||
const conUsb = v => String(v.usb || '').startsWith('S');
|
||
|
||
Acta.render({
|
||
tipo: 'diagnostico-campo',
|
||
repetible: true,
|
||
tecnicoDesdeUsuario: true,
|
||
nombres: { alan: 'Alan', daniel: 'Daniel', leo: 'Leo Rodríguez' },
|
||
unidades: window.FLOTA,
|
||
etiquetaSerie: 'Unidad que vas a revisar',
|
||
titulo: 'Acta de diagnóstico en campo — HBOX',
|
||
subtitulo: 'Se llena en la máquina, mientras revisas; no de memoria después.',
|
||
textoOK: 'QUEDA OPERATIVA',
|
||
intro: 'La causa se encuentra en el banco de Querétaro; tu trabajo es traer la evidencia completa. '
|
||
+ 'Una unidad reiniciada antes de leerla ya no se puede diagnosticar.',
|
||
secciones: [
|
||
|
||
{ titulo: 'Reglas',
|
||
items: [
|
||
{ tipo:'nota', txt:'<div class="peligro"><b>1 · No reinicies, no desconectes, no abras nada hasta el paso 3.</b> '
|
||
+ 'Cortar la energía borra la temperatura máxima, los reinicios y la causa del último arranque.</div>' },
|
||
{ tipo:'nota', txt:'<div class="peligro"><b>2 · Máquina.</b> Nada sobre un RTG o equipo energizado sin permiso y LOTO. '
|
||
+ 'Si está operando, no subas: agenda con el supervisor de ICAVE.</div>' },
|
||
{ tipo:'nota', txt:'<div class="peligro"><b>3 · Batería.</b> Hinchada, caliente o con olor a quemado: deja de desarmar, no la perfores, '
|
||
+ 'sepárala de la electrónica, foto y aviso inmediato. Hinchada no viaja en avión.</div>' },
|
||
{ tipo:'nota', txt:'<div class="peligro"><b>4 · Lluvia o gabinete mojado: no lo abras.</b> Anótalo y regresa en seco.</div>' },
|
||
{ tipo:'check', clave:'reglas', req:true, txt:'Leí las cuatro reglas y sigo el procedimiento en orden.' },
|
||
] },
|
||
|
||
{ titulo: '0 · Permiso y máquina',
|
||
sub:'En ICAVE el equipo se identifica por la máquina, y no se sube sin autorización por escrito.',
|
||
items: [
|
||
{ tipo:'nota', txt:'Operaciones (Adriana) pide a ICAVE acceso a la máquina por correo, con los técnicos que suben. '
|
||
+ 'Sin correo contestado y horario acordado, no subas: avisa y reagenda.' },
|
||
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha',
|
||
ayuda:'Hoy por omisión; cámbiala si capturas una visita de otro día.' },
|
||
{ tipo:'texto', clave:'maquina_id', req:true, guardaEn:'maquina_id', rows:'1',
|
||
txt:'Máquina (como la nombra ICAVE)',
|
||
ph:'FL-JUN-060 · RT-ZPMC-20 · HS-WES-62' },
|
||
{ tipo:'radio', clave:'coincide', req:true, txt:'Coincide con la máquina de arriba',
|
||
opciones:['Sí, es la misma','No — la unidad está en otra máquina (explícalo abajo)','La lista no dice la máquina'],
|
||
aviso:'Si no coincide, avisa a ingeniería: el registro está mal.' },
|
||
{ tipo:'radio', clave:'permiso', req:true, guardaEn:'permiso',
|
||
txt:'Autorización de acceso',
|
||
opciones:['Sí, autorizada por correo','Sí, autorizada en sitio por el supervisor','No — solo la reviso desde afuera, sin subir','No aplica — la unidad ya está en el taller'] },
|
||
{ tipo:'texto', clave:'permiso_quien', si:v=>String(v.permiso||'').startsWith('Sí'), rows:'1',
|
||
txt:'Quién autorizó y hora', ph:'Abraham (ICAVE) — correo del 18-sep, acceso 09:40' },
|
||
{ tipo:'check', clave:'loto', si:v=>String(v.permiso||'').startsWith('Sí'),
|
||
txt:'Máquina detenida y bloqueada (LOTO), o el supervisor confirmó que es seguro.' },
|
||
{ tipo:'nota', si:v=>String(v.permiso||'').startsWith('No —'),
|
||
txt:'<div class="peligro"><b>Sin autorización no subas.</b> Haz lo posible desde el piso (fotos, LED si se ve) y anótalo.</div>' },
|
||
{ tipo:'texto', clave:'operador', rows:'1', txt:'Acompañante (operador o supervisor)' },
|
||
] },
|
||
|
||
{ titulo: '1 · Motivo',
|
||
sub:'Lo que te dijeron, aunque suene vago.',
|
||
items: [
|
||
{ tipo:'radio', clave:'motivo', req:true, guardaEn:'motivo', txt:'Motivo',
|
||
opciones:['Dejó de reportar','Reporta pero con posición mala o saltos','Nunca ha reportado desde que se instaló',
|
||
'La máquina se quedó sin la unidad / se desmontó','Revisión preventiva','Otro (explícalo abajo)'] },
|
||
{ tipo:'texto', clave:'reporte', rows:'2', txt:'Quién avisó y qué dijo',
|
||
ph:'Ej.: el operador del montacargas dice que ayer en la tarde dejó de verse en el sistema.' },
|
||
{ tipo:'texto', clave:'ultima_vez', txt:'Último reporte (fecha y hora aprox.)',
|
||
ph:'17-sep, como a las 3 de la tarde' },
|
||
{ tipo:'radio', clave:'estado_maquina', txt:'Estado de la máquina',
|
||
opciones:['Trabajando normal','Encendida pero parada','Apagada','En taller / fuera de servicio','No sé'] },
|
||
] },
|
||
|
||
{ titulo: '2 · Cómo la encontraste',
|
||
sub:'Gabinete cerrado, sin cortar la energía.',
|
||
items: [
|
||
{ tipo:'foto', clave:'f_maquina', req:true, etiqueta:'maquina',
|
||
txt:'Máquina completa con el gabinete a la vista.',
|
||
ayuda:'Para ver sol y altura. Una foto basta.' },
|
||
{ tipo:'foto', clave:'f_gabinete', req:true, etiqueta:'gabinete-cerrado',
|
||
txt:'Gabinete cerrado, de cerca.' },
|
||
{ tipo:'foto', clave:'f_antenas', req:true, etiqueta:'antenas',
|
||
txt:'Antenas (GPS y dos de celular) con su cable.',
|
||
ayuda:'De cerca al conector: cables pellizcados, conectores flojos, antenas rotas o faltantes.' },
|
||
{ tipo:'check', clave:'ext_golpes', txt:'Exterior revisado: golpes, tapa, tornillos, prensaestopas.' },
|
||
{ tipo:'radio', clave:'ext_estado', txt:'Gabinete por fuera',
|
||
opciones:['Bien, sin daños','Golpeado','Con agua o marcas de agua','Con la tapa mal cerrada','Falta alguna antena'] },
|
||
{ tipo:'radio', clave:'sol', txt:'Sol directo a esta hora', opciones:['Sí, de lleno','Parcial','No, está en sombra'] },
|
||
{ tipo:'medida', clave:'hora_revision', txt:'Hora de la revisión', ph:'14:30', modo:'text' },
|
||
] },
|
||
|
||
{ titulo: '3 · LED de estado',
|
||
sub:'Todavía sin cortar la energía.',
|
||
items: [
|
||
{ tipo:'nota', txt:'Cuenta los destellos durante 10 s con reloj. 5 y 10 destellos significan cosas opuestas (sin corriente de la máquina vs sin enlace).' },
|
||
{ tipo:'medida', clave:'destellos', txt:'Destellos en 10 s', ph:'5', u:'destellos' },
|
||
{ tipo:'radio', clave:'led', req:true, txt:'Patrón del LED',
|
||
opciones:[
|
||
'A · Apagado — no prende ni una vez en 30 segundos',
|
||
'B · Fijo encendido, sin parpadear',
|
||
'C · Un destello muy cortito cada 4 segundos',
|
||
'D · Prende 1 seg y apaga 1 seg — latido lento (5 en 10 s)',
|
||
'E · Parpadeo parejo, 1 por segundo (10 en 10 s)',
|
||
'F · Dos destellos juntos, pausa, y se repite',
|
||
'G · Parpadeo rápido continuo, no alcanzo a contarlo',
|
||
'H · No puedo ver el LED desde afuera' ] },
|
||
{ tipo:'foto', clave:'f_led', etiqueta:'led', txt:'LED encendido (opcional).' },
|
||
] },
|
||
|
||
{ titulo: 'Lectura A — sin energía o muerta', si:v=>led(v).startsWith('A'),
|
||
sub:'No le llega energía o el HBOX no enciende; el multímetro decide.',
|
||
items: [
|
||
{ tipo:'nota', txt:'Máquina apagada, gabinete abierto. Mide en orden; donde deje de haber voltaje está el corte.' },
|
||
{ tipo:'medida', clave:'v_maquina', txt:'1) Máquina → gabinete', esperado:'12 V o 24 V según el equipo', u:'V' },
|
||
{ tipo:'radio', clave:'breaker', txt:'2) Breaker / fusible del gabinete', opciones:['Cerrado y con continuidad','Botado (disparado)','Fusible abierto (quemado)','No pude revisarlo'] },
|
||
{ tipo:'radio', clave:'meanwell_led', txt:'3) LED verde de la Mean Well', opciones:['Encendido','Apagado','No tiene / no se ve'] },
|
||
{ tipo:'medida', clave:'v_meanwell', txt:'4) Salida de la Mean Well', esperado:'23 – 26 V', u:'V' },
|
||
{ tipo:'medida', clave:'v_gx16', txt:'5) GX16 del HBOX, pines 1-2', esperado:'23 – 26 V', u:'V',
|
||
aviso:'Con 24 V aquí y LED apagado: falla del HBOX. Sin 24 V: gabinete o máquina.' },
|
||
{ tipo:'medida', clave:'v_ign', txt:'6) GX16 pin 3 (ignición), máquina encendida', esperado:'12 – 24 V con ignición', u:'V' },
|
||
{ tipo:'foto', clave:'f_interior_a', req:true, etiqueta:'interior', txt:'Interior del gabinete, antes de mover cables.' },
|
||
] },
|
||
|
||
{ titulo: 'Lectura D — vive en batería, sin corriente de la máquina', si:v=>led(v).startsWith('D'),
|
||
sub:'Latido lento = funciona con su batería, que aguanta poco.',
|
||
items: [
|
||
{ tipo:'nota', txt:'La falla está aguas arriba del HBOX: breaker, fusible, fuente, cable o ignición.' },
|
||
{ tipo:'medida', clave:'v_maquina_d', txt:'Máquina → gabinete', esperado:'12 V o 24 V', u:'V' },
|
||
{ tipo:'radio', clave:'breaker_d', txt:'Breaker / fusible del gabinete', opciones:['Cerrado y con continuidad','Botado (disparado)','Fusible abierto (quemado)','No pude revisarlo'] },
|
||
{ tipo:'medida', clave:'v_gx16_d', txt:'GX16 pines 1-2 (lo que llega al HBOX)', esperado:'23 – 26 V', u:'V' },
|
||
{ tipo:'texto', clave:'nota_d', txt:'Punto donde se corta', ph:'Ej.: hay 24 V a la salida de la fuente pero 0 V en el GX16 → cable o conector.' },
|
||
{ tipo:'foto', clave:'f_interior_d', req:true, etiqueta:'interior', txt:'Interior del gabinete y el punto donde se corta el voltaje.' },
|
||
] },
|
||
|
||
{ titulo: 'Lectura E / F / G — vive, sin enlace', si:v=>/^[EFG]/.test(led(v)),
|
||
sub:'Buscando o perdiendo el enlace de datos.',
|
||
items: [
|
||
{ tipo:'nota', txt:'Correcciones y datos viajan por el módem 4G, no por el GPS: revisa la cadena celular.' },
|
||
{ tipo:'check', clave:'ant_lte', txt:'Dos antenas de celular firmes y sanas.' },
|
||
{ tipo:'check', clave:'ant_gnss', txt:'Antena GPS firme, con cielo, cable sin aplastar.' },
|
||
{ tipo:'radio', clave:'senal_tel', txt:'Señal Telcel en tu teléfono junto a la máquina',
|
||
opciones:['Llena','Media','Una rayita','Nada'] },
|
||
{ tipo:'texto', clave:'nota_efg', txt:'Cambios cerca (estructuras, contenedores, gabinete movido)' },
|
||
{ tipo:'foto', clave:'f_ant_cerca', req:true, etiqueta:'antenas-detalle', txt:'Conectores de antena de cerca.' },
|
||
{ tipo:'nota', txt:'Patrón G (rápido continuo): posible bucle de reinicio. Solo la captura USB del paso 5 lo confirma; hazla.' },
|
||
] },
|
||
|
||
{ titulo: 'Lectura B — se ve sana', si:v=>led(v).startsWith('B'),
|
||
sub:'LED fijo = trabajando, con corriente y enlace.',
|
||
items: [
|
||
{ tipo:'nota', txt:'<b>No la desmontes.</b> Probablemente es el servidor, la SIM o la plataforma. Haz la captura USB del paso 5 y avisa a ingeniería.' },
|
||
{ tipo:'check', clave:'b_aviso', txt:'Entendido: la dejo instalada y reporto a ingeniería.' },
|
||
] },
|
||
|
||
{ titulo: 'Lectura C — dormida por batería agotada', si:v=>led(v).startsWith('C'),
|
||
sub:'Destello corto cada 4 s. Casi siempre es consecuencia: lleva tiempo sin corriente de la máquina.',
|
||
items: [
|
||
{ tipo:'medida', clave:'v_gx16_c', txt:'GX16 pines 1-2 (lo que llega al HBOX)', esperado:'23 – 26 V', u:'V' },
|
||
{ tipo:'medida', clave:'v_ign_c', txt:'GX16 pin 3 (ignición), máquina encendida', esperado:'12 – 24 V', u:'V' },
|
||
{ tipo:'foto', clave:'f_interior_c', req:true, etiqueta:'interior', txt:'Interior del gabinete.' },
|
||
] },
|
||
|
||
{ titulo: 'LED no visible', si:v=>led(v).startsWith('H'),
|
||
items: [
|
||
{ tipo:'nota', txt:'Sin LED, la captura USB del paso 5 es obligatoria.' },
|
||
] },
|
||
|
||
{ titulo: '4 · Por dentro',
|
||
sub:'Gabinete abierto y máquina apagada.',
|
||
items: [
|
||
{ tipo:'radio', clave:'abrir', req:true, txt:'Gabinete abierto', opciones:['Sí','No — no fue posible (explica al final)'] },
|
||
{ tipo:'radio', clave:'tacto', si:abrio, txt:'Caja del HBOX al tacto (dorso de la mano)',
|
||
opciones:['Fría o al tiempo','Tibia','Caliente pero se aguanta','Quema — no se puede tocar'] },
|
||
{ tipo:'medida', clave:'t_ir', si:abrio, txt:'Temperatura dentro del gabinete (IR)', esperado:'anota también la del aire afuera', u:'°C' },
|
||
{ tipo:'medida', clave:'t_amb', si:abrio, txt:'Temperatura ambiente a la sombra', u:'°C' },
|
||
{ tipo:'radio', clave:'olor', si:abrio, req:true, txt:'Olor a quemado', opciones:['No','Sí, leve','Sí, fuerte'] },
|
||
{ tipo:'radio', clave:'agua', si:abrio, txt:'Agua o condensación', opciones:['No','Gotas o empañado','Encharcado'] },
|
||
{ tipo:'radio', clave:'bateria', si:abrio, req:true, txt:'Batería',
|
||
opciones:['Normal','Hinchada o abombada','Con manchas cafés o negras','Con líquido o fuga','Caliente','No tiene batería / no la vi'],
|
||
aviso:'Hinchada, con fuga o caliente: deja de desarmar, sepárala, no la perfores y avisa hoy.' },
|
||
{ tipo:'foto', clave:'f_bateria', etiqueta:'bateria',
|
||
si:v=>['Hinchada','Con manchas','Con líquido','Caliente'].some(t=>String(v.bateria||'').startsWith(t)),
|
||
req:true, txt:'Batería, dos ángulos.' },
|
||
{ tipo:'foto', clave:'f_quemado', etiqueta:'dano', si:v=>String(v.olor||'').startsWith('Sí'),
|
||
req:true, txt:'Lo quemado, oscurecido o derretido.' },
|
||
{ tipo:'check', clave:'wiggle', si:abrio, txt:'Meneo suave de conectores y cables (lo flojo, abajo).' },
|
||
{ tipo:'texto', clave:'nota_interior', si:abrio, rows:'2', txt:'Hallazgos' },
|
||
] },
|
||
|
||
{ titulo: '5 · Captura por USB',
|
||
sub:'Temperatura máxima, reinicios y causa del último arranque; se pierden al cortar la corriente.',
|
||
items: [
|
||
{ tipo:'nota', txt:'USB del Blackpill → puerto serie a 115200 guardando a archivo → 3 min → RESET y graba el arranque. Pega abajo las líneas BOOT y TLM.' },
|
||
{ tipo:'radio', clave:'usb', req:true, txt:'Captura',
|
||
opciones:['Sí, con archivo guardado','Sí, pero solo pude ver la pantalla','No traía laptop','No, la unidad no enciende','No, no hay acceso físico al USB'] },
|
||
{ tipo:'texto', clave:'linea_boot', si:conUsb, rows:'2',
|
||
txt:'Línea BOOT', ph:'BOOT,1234,fw=3.0.3,reset=…' },
|
||
{ tipo:'texto', clave:'linea_tlm', si:conUsb, rows:'3',
|
||
txt:'Última línea TLM', ph:'TLM,…,RUN,OK,4,14,…' },
|
||
{ tipo:'nota', si:conUsb,
|
||
txt:'Si no puedes pegar, llena a mano los cuatro campos de abajo.' },
|
||
{ tipo:'medida', clave:'tlm_tmax', si:conUsb, txt:'<code>tmax</code> (temperatura máxima)', u:'°C' },
|
||
{ tipo:'medida', clave:'tlm_rec', si:conUsb, txt:'<code>rec</code> (recuperaciones)' },
|
||
{ tipo:'medida', clave:'tlm_vbat', si:conUsb, txt:'<code>vbat</code> (batería)', u:'V' },
|
||
{ tipo:'medida', clave:'tlm_veh', si:conUsb, txt:'<code>veh</code> (1 = hay corriente de la máquina)' },
|
||
{ tipo:'archivo', clave:'log_blackpill', etiqueta:'captura-blackpill',
|
||
si:v=>String(v.usb||'').startsWith('Sí, con archivo'), req:true,
|
||
txt:'Captura del Blackpill',
|
||
ayuda:'El .txt o .log de PuTTY / TeraTerm.' },
|
||
{ tipo:'foto', clave:'f_pantalla', etiqueta:'captura-usb', si:conUsb,
|
||
txt:'Pantalla de la laptop con las líneas (respaldo).' },
|
||
] },
|
||
|
||
{ titulo: '6 · Reinicio controlado',
|
||
sub:'Solo después de los pasos 2 a 5.',
|
||
items: [
|
||
{ tipo:'check', clave:'evidencia_lista', req:true, txt:'Fotos y captura USB (si se pudo) tomadas: evidencia completa.' },
|
||
{ tipo:'radio', clave:'reinicio', txt:'Energía cortada 30 s y devuelta; resultado a 2 min',
|
||
opciones:['Revivió y quedó con LED fijo','Revivió pero volvió a fallar','Sigue igual','No lo intenté'] },
|
||
] },
|
||
|
||
{ titulo: '7 · Clasificación y resultado',
|
||
sub:'Lo que observaste, no lo que supones. "No está claro" es válido.',
|
||
items: [
|
||
{ tipo:'radio', clave:'clasificacion', req:true, guardaEn:'clasificacion', txt:'Clasificación',
|
||
opciones:[
|
||
'Sin corriente desde la máquina o el gabinete',
|
||
'El HBOX no enciende aunque le llega 24 V',
|
||
'Enlace 4G: no hay datos ni correcciones',
|
||
'Antena suelta, rota o faltante',
|
||
'Batería dañada (hinchada, caliente o con fuga)',
|
||
'Daño por calor (quemado, derretido, decolorado)',
|
||
'Agua adentro del gabinete',
|
||
'Daño mecánico o golpe',
|
||
'La unidad se ve sana — el problema parece ser del servidor',
|
||
'No está claro — se necesita banco' ] },
|
||
{ tipo:'radio', clave:'accion', req:true, guardaEn:'accion', txt:'Resultado',
|
||
opciones:[
|
||
'Instalada y reportando',
|
||
'Instalada, pero sin resolver — pendiente de ingeniería',
|
||
'Desmontada y guardada en el taller, etiquetada',
|
||
'Desmontada y enviada a Querétaro',
|
||
'Reemplazada por otra unidad (anota cuál abajo)' ] },
|
||
{ tipo:'texto', clave:'unidad_repuesto', si:v=>String(v.accion||'').startsWith('Reemplazada'),
|
||
txt:'Serie de la unidad instalada' },
|
||
{ tipo:'texto', clave:'observaciones', rows:'4', req:true,
|
||
txt:'Observaciones',
|
||
ph:'Qué viste y qué hiciste, como se lo contarías a un compañero.' },
|
||
{ tipo:'foto', clave:'f_final', etiqueta:'final', txt:'Cómo quedó (instalada o empacada).' },
|
||
] },
|
||
]
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|