hbox-docs/docs/formularios/diagnostico.html

281 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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: 'Helgen Technologies · llénala EN LA MÁQUINA, mientras revisas. No la llenes de memoria después.',
textoOK: 'QUEDA OPERATIVA',
intro: '<b>Para qué sirve esta acta.</b> Nadie espera que tú encuentres la causa de la falla: eso se '
+ 'determina en el banco de Querétaro. Lo que sí depende de ti es que la evidencia llegue completa. '
+ 'Una unidad mal diagnosticada se puede volver a revisar; una unidad que reiniciaste antes de mirarla '
+ '<b>ya no se puede diagnosticar nunca</b>, porque el estado en que la encontraste se borró.',
secciones: [
{ titulo: '⚠ Reglas de oro — léelas antes de tocar la unidad',
items: [
{ tipo:'nota', txt:'<div class="peligro"><b>1 · No reinicies, no desconectes, no abras nada hasta el paso 3.</b> '
+ 'El estado en que encontraste la unidad <b>es la evidencia</b>. Cortarle la energía borra la temperatura '
+ 'máxima, la cuenta de reinicios y la causa del último arranque — justo lo que necesitamos.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>2 · Seguridad de la máquina primero.</b> No trabajes sobre un RTG o '
+ 'un equipo energizado sin el permiso y el bloqueo (LOTO) del terminal. Si el equipo está operando, '
+ '<b>no subas</b>: agenda con el supervisor de ICAVE y regresa.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>3 · Batería.</b> Si ves la batería <b>hinchada</b>, si <b>quema</b> al '
+ 'tacto o si huele a quemado: no sigas desarmando, no la perfores, sepárala de la electrónica, tómale foto '
+ 'y avisa de inmediato. Una batería de litio hinchada <b>no viaja en avión</b>.</div>' },
{ tipo:'nota', txt:'<div class="peligro"><b>4 · Si está lloviendo o el gabinete está mojado, no lo abras.</b> '
+ 'Anótalo y regresa en seco.</div>' },
{ tipo:'check', clave:'reglas', req:true, txt:'<b>Leí las cuatro reglas</b> y voy a seguir el procedimiento en orden.' },
] },
{ titulo: '0 · Permiso de acceso y máquina — antes de subirte a nada',
sub:'En ICAVE el equipo no se identifica por el HBOX sino por la MÁQUINA, y no se sube a una máquina sin autorización por escrito.',
items: [
{ tipo:'nota', txt:'<b>Cómo funciona.</b> Operaciones (Adriana) manda a ICAVE un correo pidiendo acceso a la '
+ '<b>máquina</b> por su número, nombrando a los técnicos que van a subir. Hasta que ICAVE contesta y se acuerda '
+ 'el horario, no hay visita. Si llegaste sin ese correo contestado, <b>no subas</b>: avisa y reagenda.' },
{ tipo:'fecha', clave:'fecha', req:true, guardaEn:'fecha', txt:'Fecha de la revisión',
ayuda:'Arranca con la de hoy. Cámbiala si estás capturando una visita de otro día.' },
{ tipo:'texto', clave:'maquina_id', req:true, guardaEn:'maquina_id', rows:'1',
txt:'Número de la máquina donde está instalado el HBOX, tal como lo nombra ICAVE',
ph:'FL-JUN-060 · RT-ZPMC-20 · HS-WES-62' },
{ tipo:'radio', clave:'coincide', req:true, txt:'¿Coincide con la máquina que aparece arriba, junto a la unidad que elegiste?',
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 de qué unidad está en qué máquina quedó mal y hay que corregirlo.' },
{ tipo:'radio', clave:'permiso', req:true, guardaEn:'permiso',
txt:'¿Hay autorización de acceso a esa máquina?',
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 a qué hora?', ph:'Abraham (ICAVE) — correo del 18-sep, acceso 09:40' },
{ tipo:'check', clave:'loto', si:v=>String(v.permiso||'').startsWith('Sí'),
txt:'La máquina está <b>detenida y bloqueada (LOTO)</b>, o el supervisor confirmó que es seguro trabajar en ella.' },
{ tipo:'nota', si:v=>String(v.permiso||'').startsWith('No —'),
txt:'<div class="peligro"><b>Sin autorización no te subas al equipo.</b> Haz lo que se pueda desde el piso '
+ '(fotos de lejos, patrón del LED si se alcanza a ver) y déjalo anotado. Una revisión incompleta '
+ 'es aceptable; un accidente no.</div>' },
{ tipo:'texto', clave:'operador', rows:'1', txt:'¿Quién te acompañó o te dio acceso? (operador o supervisor)' },
] },
{ titulo: '1 · Por qué vienes a esta unidad',
sub:'Contesta con lo que te dijeron, aunque suene vago. La versión del operador vale.',
items: [
{ tipo:'radio', clave:'motivo', req:true, guardaEn:'motivo', txt:'Motivo de la visita',
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 exactamente?',
ph:'Ej.: el operador del montacargas dice que ayer en la tarde dejó de verse en el sistema.' },
{ tipo:'texto', clave:'ultima_vez', txt:'¿Cuándo se vio reportando por última vez? (fecha y hora aproximadas)',
ph:'17-sep, como a las 3 de la tarde' },
{ tipo:'radio', clave:'estado_maquina', txt:'¿Cómo está la máquina ahora?',
opciones:['Trabajando normal','Encendida pero parada','Apagada','En taller / fuera de servicio','No sé'] },
] },
{ titulo: '2 · Antes de abrir nada — cómo la encontraste',
sub:'Todo este paso se hace con el gabinete CERRADO y sin cortar la energía.',
items: [
{ tipo:'foto', clave:'f_maquina', req:true, etiqueta:'maquina',
txt:'La máquina completa, de lejos, donde se vea dónde está montado el gabinete.',
ayuda:'Sirve para saber qué sol le pega y a qué altura está. Una sola foto basta.' },
{ tipo:'foto', clave:'f_gabinete', req:true, etiqueta:'gabinete-cerrado',
txt:'El gabinete cerrado, de cerca, tal como lo encontraste.' },
{ tipo:'foto', clave:'f_antenas', req:true, etiqueta:'antenas',
txt:'Las antenas (la de GPS y las dos de celular) con su cable.',
ayuda:'Acércate al conector: buscamos cables pellizcados, conectores flojos, antenas rotas o faltantes.' },
{ tipo:'check', clave:'ext_golpes', txt:'Revisé el exterior: <b>golpes, tapas flojas, tornillos faltantes, prensaestopas sueltos</b>.' },
{ tipo:'radio', clave:'ext_estado', txt:'¿El gabinete por fuera está…?',
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:'¿Le pega el sol directo a esa hora?', opciones:['Sí, de lleno','Parcial','No, está en sombra'] },
{ tipo:'medida', clave:'hora_revision', txt:'Hora a la que estás haciendo esta revisión', ph:'14:30', modo:'text' },
] },
{ titulo: '3 · El LED de estado — el dato más importante de toda la visita',
sub:'La unidad te está diciendo qué le pasa con el parpadeo del LED. Todavía SIN cortarle la energía.',
items: [
{ tipo:'nota', txt:'<b>Cómo se hace bien:</b> mira el LED <b>10 segundos completos</b> con el reloj y '
+ '<b>cuenta cuántas veces prende</b>. No lo adivines: 5 veces en 10 s y 10 veces en 10 s significan '
+ 'cosas <b>opuestas</b> (una es que la máquina no le da corriente, la otra es que no tiene enlace).' },
{ tipo:'medida', clave:'destellos', txt:'¿Cuántas veces prendió el LED en 10 segundos?', ph:'5', u:'destellos' },
{ tipo:'radio', clave:'led', req:true, txt:'¿Cuál de estos patrones es? (elige el que más se parezca)',
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:'Opcional pero muy útil: foto del LED encendido.' },
] },
{ titulo: '🔴 Lectura A — la unidad está muerta o sin corriente', si:v=>led(v).startsWith('A'),
sub:'El LED apagado significa una de dos: no le llega energía, o el HBOX ya no enciende. El multímetro lo decide.',
items: [
{ tipo:'nota', txt:'Abre el gabinete (máquina apagada) y mide <b>en este orden</b>. Si en algún punto ya no hay voltaje, ahí está el corte.' },
{ tipo:'medida', clave:'v_maquina', txt:'1) Voltaje que entrega la máquina al 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 fuente Mean Well', opciones:['Encendido','Apagado','No tiene / no se ve'] },
{ tipo:'medida', clave:'v_meanwell', txt:'4) Salida de la fuente Mean Well', esperado:'23 – 26 V', u:'V' },
{ tipo:'medida', clave:'v_gx16', txt:'5) En el conector GX16 del HBOX, pines 1-2', esperado:'23 – 26 V', u:'V',
aviso:'Esta es la medida que parte el diagnóstico en dos: <b>con 24 V aquí y el LED apagado, la falla es del HBOX</b>. Sin 24 V aquí, la falla es del gabinete o de la máquina.' },
{ tipo:'medida', clave:'v_ign', txt:'6) GX16 pin 3 (ignición), con la 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 completo, antes de mover cables.' },
] },
{ titulo: '🟡 Lectura D — el HBOX vive, pero la máquina no le está dando corriente', si:v=>led(v).startsWith('D'),
sub:'Latido lento = el equipo está funcionando con su propia batería. Aguanta poco: por eso "dejó de reportar".',
items: [
{ tipo:'nota', txt:'La falla <b>no está en el HBOX</b>, está aguas arriba: breaker, fusible, fuente, cable o ignición.' },
{ tipo:'medida', clave:'v_maquina_d', txt:'Voltaje que entrega la máquina al 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:'¿Encontraste el 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 — el HBOX vive pero no tiene enlace', si:v=>/^[EFG]/.test(led(v)),
sub:'Parpadeo de 1 por segundo, doble destello o parpadeo rápido continuo = está buscando o perdiendo el enlace de datos.',
items: [
{ tipo:'nota', txt:'Las correcciones y los datos viajan por el <b>módem 4G</b>, no por el GPS. Revisa la cadena del celular.' },
{ tipo:'check', clave:'ant_lte', txt:'Las <b>dos antenas de celular</b> están atornilladas y firmes (no flojas, no rotas).' },
{ tipo:'check', clave:'ant_gnss', txt:'La antena de <b>GPS</b> está firme, con vista al cielo y el cable sin aplastar.' },
{ tipo:'radio', clave:'senal_tel', txt:'Con tu teléfono, parado junto a la máquina, ¿cuánta señal Telcel hay?',
opciones:['Llena','Media','Una rayita','Nada'] },
{ tipo:'texto', clave:'nota_efg', txt:'¿Algo cambió cerca? (estructura metálica nueva, contenedores apilados, el gabinete se movió)' },
{ tipo:'foto', clave:'f_ant_cerca', req:true, etiqueta:'antenas-detalle', txt:'Detalle de los conectores de antena, bien de cerca.' },
{ tipo:'nota', txt:'Si el parpadeo era <b>rápido y continuo</b> (patrón G), puede ser que la unidad se esté '
+ 'reiniciando sola una y otra vez. Eso <b>solo</b> se confirma con la captura por USB del paso 5: hazla sí o sí.' },
] },
{ titulo: '🔵 Lectura B — la unidad se ve sana', si:v=>led(v).startsWith('B'),
sub:'LED fijo = está trabajando, con corriente de la máquina y con enlace. Entonces el problema no está aquí.',
items: [
{ tipo:'nota', txt:'<b>No la desmontes.</b> Si el sistema no la ve pero el equipo está sano, lo más probable es que el '
+ 'problema esté en el servidor, en la SIM o en la plataforma. Haz la captura por 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 — la unidad está dormida por batería agotada', si:v=>led(v).startsWith('C'),
sub:'Destello cortito cada 4 s = se durmió para no dañar la batería. Casi siempre es consecuencia, no causa: 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: '⚪ No se ve el LED', si:v=>led(v).startsWith('H'),
items: [
{ tipo:'nota', txt:'Sin el LED no hay atajo: el paso 5 (captura por USB con la laptop) pasa de recomendado a <b>obligatorio</b>.' },
] },
{ titulo: '4 · Por dentro — temperatura, olor y batería',
sub:'Solo si ya abriste el gabinete y la máquina está apagada.',
items: [
{ tipo:'radio', clave:'abrir', req:true, txt:'¿Abriste el gabinete?', opciones:['Sí','No — no fue posible (explica al final)'] },
{ tipo:'radio', clave:'tacto', si:abrio, txt:'Con el <b>dorso</b> de la mano, la caja del HBOX se siente…',
opciones:['Fría o al tiempo','Tibia','Caliente pero se aguanta','Quema — no se puede tocar'] },
{ tipo:'medida', clave:'t_ir', si:abrio, txt:'Si traes termómetro infrarrojo: temperatura dentro del gabinete', 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:'¿Huele a quemado o a plástico derretido?', opciones:['No','Sí, leve','Sí, fuerte'] },
{ tipo:'radio', clave:'agua', si:abrio, txt:'¿Hay agua, humedad o condensación adentro?', opciones:['No','Gotas o empañado','Encharcado'] },
{ tipo:'radio', clave:'bateria', si:abrio, req:true, txt:'La batería se ve…',
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:'Si marcaste hinchada, con fuga o caliente: <b>deja de desarmar</b>, sepárala de la electrónica, no la perfores y avisa hoy mismo.' },
{ 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:'Foto de la batería desde dos ángulos.' },
{ tipo:'foto', clave:'f_quemado', etiqueta:'dano', si:v=>String(v.olor||'').startsWith('Sí'),
req:true, txt:'Foto de lo que se ve quemado, oscurecido o derretido.' },
{ tipo:'check', clave:'wiggle', si:abrio, txt:'Prueba de meneo: moví <b>suavemente</b> cada conector y cable. Anoto abajo si alguno estaba flojo.' },
{ tipo:'texto', clave:'nota_interior', si:abrio, rows:'2', txt:'¿Qué encontraste flojo, quemado, mojado o fuera de lugar?' },
] },
{ titulo: '5 · Captura por USB — lo que la unidad tiene guardado',
sub:'Este paso vale más que todos los demás juntos: la unidad guarda su temperatura máxima, cuántas veces se reinició y por qué arrancó la última vez. Eso se pierde al cortarle la corriente.',
items: [
{ tipo:'nota', txt:'<b>Cómo:</b> conecta el cable USB del Blackpill a la laptop → abre el puerto serie nuevo a '
+ '<b>115200</b> baudios → <b>guarda a archivo</b> → déjalo correr <b>3 minutos</b> → después presiona RESET y '
+ 'graba también el arranque. Al final guarda el archivo y pega abajo las dos últimas líneas.' },
{ tipo:'radio', clave:'usb', req:true, txt:'¿Pudiste hacer la 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:'Pega la línea que empieza con BOOT,', ph:'BOOT,1234,fw=3.0.3,reset=…' },
{ tipo:'texto', clave:'linea_tlm', si:conUsb, rows:'3',
txt:'Pega la última línea que empieza con TLM,', ph:'TLM,…,RUN,OK,4,14,…' },
{ tipo:'nota', si:conUsb,
txt:'Si no puedes copiar y pegar, no importa: llena a mano los cuatro datos de abajo, que son los que más nos dicen.' },
{ tipo:'medida', clave:'tlm_tmax', si:conUsb, txt:'Campo <code>tmax</code> (temperatura máxima que ha visto)', u:'°C' },
{ tipo:'medida', clave:'tlm_rec', si:conUsb, txt:'Campo <code>rec</code> (veces que se ha tenido que recuperar)' },
{ tipo:'medida', clave:'tlm_vbat', si:conUsb, txt:'Campo <code>vbat</code> (voltaje de la batería)', u:'V' },
{ tipo:'medida', clave:'tlm_veh', si:conUsb, txt:'Campo <code>veh</code> (1 = le llega corriente de la máquina, 0 = no)' },
{ tipo:'archivo', clave:'log_blackpill', etiqueta:'captura-blackpill',
si:v=>String(v.usb||'').startsWith('Sí, con archivo'), req:true,
txt:'Sube aquí el archivo de la captura del Blackpill',
ayuda:'El .txt o .log que guardó PuTTY / TeraTerm. Es el registro más valioso de la visita: '
+ 'súbelo aunque no hayas entendido lo que dice.' },
{ tipo:'foto', clave:'f_pantalla', etiqueta:'captura-usb', si:conUsb,
txt:'Foto de la pantalla de la laptop con las líneas visibles (respaldo por si falla el copiado).' },
] },
{ titulo: '6 · Reinicio controlado — hasta ahora sí puedes cortar la energía',
sub:'Solo cuando ya terminaste los pasos 2 al 5. Antes no.',
items: [
{ tipo:'check', clave:'evidencia_lista', req:true, txt:'Ya tomé las fotos y (si se pudo) la captura por USB. <b>La evidencia está completa.</b>' },
{ tipo:'radio', clave:'reinicio', txt:'Corté la energía 30 segundos, la volví a dar y esperé 2 minutos. ¿Qué pasó?',
opciones:['Revivió y quedó con LED fijo','Revivió pero volvió a fallar','Sigue igual','No lo intenté'] },
] },
{ titulo: '7 · Cómo la dejas y qué crees que tiene',
sub:'Elige lo que observaste, no lo que supones. "No está claro" es una respuesta válida y útil.',
items: [
{ tipo:'radio', clave:'clasificacion', req:true, guardaEn:'clasificacion', txt:'Clasificación de la falla',
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:'¿Cómo queda la unidad al terminar tu visita?',
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:'Número de serie de la unidad que quedó instalada' },
{ tipo:'texto', clave:'observaciones', rows:'4', req:true,
txt:'Cuenta con tus palabras qué viste y qué hiciste',
ph:'Escribe como se lo contarías a un compañero. Lo que aquí escribas es lo que va a leer ingeniería.' },
{ tipo:'foto', clave:'f_final', etiqueta:'final', txt:'Foto de cómo quedó al terminar (instalada o empacada).' },
] },
]
});
</script>
</body>
</html>