diff --git a/docs/formularios/acta.js b/docs/formularios/acta.js
index f050f7d..4a7829e 100644
--- a/docs/formularios/acta.js
+++ b/docs/formularios/acta.js
@@ -86,6 +86,7 @@
const flota = Array.isArray(cfg.unidades) && cfg.unidades.length > 0;
const serieOtra = $('input', { type: 'text', id: 'f_serie_otra', placeholder: 'Escribe la etiqueta de la unidad tal como viene en la caja' });
const fichaUnidad = $('div', { class: 'ficha-unidad' });
+ const armar = $('div', { class: 'armar-hbox' }); const armarSel = {};
if (flota) {
serieSel.append($('option', { value: '', text: '— elegir unidad —' }));
@@ -97,9 +98,17 @@
serieSel.append(og);
});
if (!cfg.sinEnsambladas) cargarEnsambladas();
+ if (!cfg.sinEnsambladas) serieSel.insertBefore($('option', { value: '__HBOX__', text: '🧩 Unidad HBOX completa — elegir sus 3 piezas' }), serieSel.children[1] || null);
serieSel.append($('option', { value: '__OTRA__', text: '➕ Otra unidad (no está en la lista)' }));
serieSel.append($('option', { value: 'CAMPO-PRUEBA', text: '⚙ PRUEBA (no cuenta)' }));
- const dS = $('div'); dS.append($('label', { text: cfg.etiquetaSerie || 'Unidad' }), serieSel, serieOtra, fichaUnidad);
+ // Unidad HBOX completa armada a mano: tarjeta + ArduSimple + módem → misma serie que el acta de ensamble.
+ [['einar', 'Tarjeta EinarBoard', 'V5', 2], ['ard', 'ArduSimple', 'ARD', 3], ['modem', 'Módem 4G', 'RTK', 4]].forEach(([k, t, pre, pad]) => {
+ const sel = $('select'); opciones(sel, pre, 1, 30, pad); armarSel[k] = sel;
+ const d = $('div'); d.append($('label', { text: t }), sel); armar.append(d);
+ sel.addEventListener('change', () => loadSerie());
+ });
+ armar.style.display = 'none';
+ const dS = $('div'); dS.append($('label', { text: cfg.etiquetaSerie || 'Unidad' }), serieSel, serieOtra, armar, fichaUnidad);
serieOtra.style.display = 'none'; serieOtra.style.marginTop = '8px';
const dT = $('div'); dT.append($('label', { text: 'Técnico' }), tecnico);
datos.append(dS, dT);
@@ -193,12 +202,24 @@
function seleccion() { const s = {}; for (const k in compSel) s[k] = compSel[k].value; return s; }
function unidadSel() {
if (!flota) return null;
+ if (serieSel.value === '__HBOX__') {
+ const c = {}; for (const k in armarSel) c[k] = armarSel[k].value;
+ const piezas = Object.values(c).filter(Boolean).join(' · ');
+ return { terminal: 'Unidades HBOX completas', componentes: c, etiqueta: 'HBOX completa (' + piezas + ')',
+ nota: 'Unidad completa' + (piezas ? ': ' + piezas : '') + '.' };
+ }
return (cfg.unidades || []).find(u => u.serie === serieSel.value) || null;
}
function serieActual() {
if (flota) {
if (serieSel.value === '__OTRA__')
return String(serieOtra.value || '').trim().toUpperCase().replace(/[^A-Z0-9_-]/g, '-').slice(0, 24);
+ if (serieSel.value === '__HBOX__') {
+ const c = {}; for (const k in armarSel) c[k] = armarSel[k].value;
+ if (Object.values(c).some(v => !v)) return '';
+ if (Object.values(c).some(esPrueba)) return 'HBOX5-PRUEBA';
+ return 'HBOX5-E' + num(c.einar) + '-A' + num(c.ard) + '-R' + num(c.modem);
+ }
return serieSel.value;
}
if (!compuesta) return serieSel.value;
@@ -646,7 +667,8 @@
for (const k in guardaEn) if (v[k] !== undefined && v[k] !== '') d[guardaEn[k]] = v[k];
if (flota) {
const u = unidadSel();
- if (u) { d.maquina = u.maquina || ''; d.terminal = u.terminal || ''; d.unidad = u.etiqueta || ''; }
+ if (u) { d.maquina = u.maquina || ''; d.terminal = u.terminal || ''; d.unidad = u.etiqueta || '';
+ if (u.componentes) d.componentes = u.componentes; }
else if (serieSel.value === '__OTRA__') d.unidad = 'no listada';
}
return d;
@@ -670,6 +692,7 @@
msg.className = 'msg'; locked = false;
if (flota) {
serieOtra.style.display = serieSel.value === '__OTRA__' ? '' : 'none';
+ armar.style.display = serieSel.value === '__HBOX__' ? '' : 'none';
const u = unidadSel();
fichaUnidad.innerHTML = u && u.componentes ? u.nota : u
? '' + (u.maquina || '—') + ' · ' + (u.terminal || '—') + (u.nota ? '
' + u.nota : '')
@@ -682,7 +705,7 @@
if (cfg.repetible) cargarHistorial();
consultarMarca();
if (!s) {
- estado.textContent = compuesta ? 'Elige los tres módulos' : (flota ? 'Elige la unidad' : 'Elige el número de serie');
+ estado.textContent = compuesta ? 'Elige los tres módulos' : (flota ? (serieSel.value === '__HBOX__' ? 'Elige las 3 piezas' : 'Elige la unidad') : 'Elige el número de serie');
aplicarCondiciones(); return;
}
if (esPrueba(s)) { cargarLocal(); aplicarCondiciones(); estado.textContent = 'Modo prueba (no cuenta)'; return; }