Sitio: LCT en vez de LZC y versión en las ligas a CSS/JS

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016X4CAujMuib2tDqt9JRg6X
This commit is contained in:
Leopoldo Rodríguez 2026-10-21 19:34:40 -06:00
parent 5f2f7a1f46
commit 65a221ba9c
9 changed files with 91 additions and 16 deletions

View File

@ -61,10 +61,10 @@ SITIOS = [
"contactos": [{"nombre": "por confirmar", "rol": "supervisor de patio (autoriza acceso a máquinas)", "telefono": "", "correo": ""}], "contactos": [{"nombre": "por confirmar", "rol": "supervisor de patio (autoriza acceso a máquinas)", "telefono": "", "correo": ""}],
"notas": "Terminal de contenedores. El acceso a cada máquina se pide por correo (Operaciones). " "notas": "Terminal de contenedores. El acceso a cada máquina se pide por correo (Operaciones). "
"Compara el HBOX RTK con un CalAmp legado (viajes en Wialon)."}, "Compara el HBOX RTK con un CalAmp legado (viajes en Wialon)."},
{"id": "lzc", "nombre": "LZC", "cliente": "Hutchison Ports", "ubicacion": "Lázaro Cárdenas, Mich.", {"id": "lzc", "nombre": "LCT", "cliente": "Hutchison Ports", "ubicacion": "Lázaro Cárdenas, Mich.",
"alias": ["LCT", "Lázaro Cárdenas"], "orden": 20, "alias": ["LZC", "Lázaro Cárdenas"], "orden": 20,
"contactos": [{"nombre": "por confirmar", "rol": "", "telefono": "", "correo": ""}], "contactos": [{"nombre": "por confirmar", "rol": "", "telefono": "", "correo": ""}],
"notas": "En notas antiguas aparece como LCT."}, "notas": "El nombre correcto es LCT (Leo, 21-oct-2026); hasta entonces el sitio decía LZC. El id lzc se queda: es la clave de las actas."},
{"id": "eit", "nombre": "EIT", "cliente": "Hutchison Ports", "ubicacion": "por confirmar", {"id": "eit", "nombre": "EIT", "cliente": "Hutchison Ports", "ubicacion": "por confirmar",
"alias": [], "orden": 30, "alias": [], "orden": 30,
"contactos": [{"nombre": "por confirmar", "rol": "", "telefono": "", "correo": ""}], "notas": ""}, "contactos": [{"nombre": "por confirmar", "rol": "", "telefono": "", "correo": ""}], "notas": ""},
@ -145,7 +145,7 @@ TAREAS = [
"enlaces": [{"titulo": "Inventario", "url": "/inventario/inventario.html"}], "enlaces": [{"titulo": "Inventario", "url": "/inventario/inventario.html"}],
"descripcion": "Un movimiento de tipo «ajuste» por ítem con el conteo físico y el motivo «conteo inicial»."}, "descripcion": "Un movimiento de tipo «ajuste» por ítem con el conteo físico y el motivo «conteo inicial»."},
{"id": "t-sitios-alta", "pista": "campo", "estado": "por-hacer", "responsable": "leo", "version_tarjeta": "—", {"id": "t-sitios-alta", "pista": "campo", "estado": "por-hacer", "responsable": "leo", "version_tarjeta": "—",
"titulo": "Dar de alta los 4 sitios (ICAVE, LZC, EIT, TIMSA) con contactos y unidades instaladas", "titulo": "Dar de alta los 4 sitios (ICAVE, LCT, EIT, TIMSA) con contactos y unidades instaladas",
"enlaces": [{"titulo": "Sitios", "url": "/sitios/"}], "enlaces": [{"titulo": "Sitios", "url": "/sitios/"}],
"descripcion": "Los 4 sitios ya existen con «por confirmar»: completar ubicación y contactos (Editar sitio, solo admin)."}, "descripcion": "Los 4 sitios ya existen con «por confirmar»: completar ubicación y contactos (Editar sitio, solo admin)."},
{"id": "t-acta-instalacion", "pista": "campo", "estado": "por-hacer", "responsable": "claude", "version_tarjeta": "—", {"id": "t-acta-instalacion", "pista": "campo", "estado": "por-hacer", "responsable": "claude", "version_tarjeta": "—",

View File

@ -11,7 +11,7 @@ Unidad **en la máquina o en camino**: instalación en el puerto, falla en sitio
| Sitio | Puerto | Página | | Sitio | Puerto | Página |
|---|---|---| |---|---|---|
| ICAVE | Veracruz | [Sitio ICAVE](../tableros/sitio.md?id=icave) | | ICAVE | Veracruz | [Sitio ICAVE](../tableros/sitio.md?id=icave) |
| LZC | Lázaro Cárdenas | [Sitio LZC](../tableros/sitio.md?id=lzc) | | LCT | Lázaro Cárdenas | [Sitio LCT](../tableros/sitio.md?id=lzc) |
| EIT | Ensenada | [Sitio EIT](../tableros/sitio.md?id=eit) | | EIT | Ensenada | [Sitio EIT](../tableros/sitio.md?id=eit) |
| TIMSA | Manzanillo | [Sitio TIMSA](../tableros/sitio.md?id=timsa) | | TIMSA | Manzanillo | [Sitio TIMSA](../tableros/sitio.md?id=timsa) |
@ -34,7 +34,7 @@ El checklist impreso se sube al [expediente](../tableros/unidad.md) junto con el
- **Firmware vigente en campo: 0.6.0** (V4 y V5). 0.6.3 es de banco; no se flashea en la máquina. Reflashear es trabajo de [taller](../taller/index.md). - **Firmware vigente en campo: 0.6.0** (V4 y V5). 0.6.3 es de banco; no se flashea en la máquina. Reflashear es trabajo de [taller](../taller/index.md).
- En **V5.5** no se apaga y prende la etapa RTK en batería «para ver si vuelve»: el módem queda oscuro hasta RESET 4G o 24 V. - En **V5.5** no se apaga y prende la etapa RTK en batería «para ver si vuelve»: el módem queda oscuro hasta RESET 4G o 24 V.
- La unidad en batería reporta cada 10 minutos (V5.6 en adelante) o de forma continua hasta agotar el paquete (V5.5 con 0.6.0). Si deja de reportar en batería, no es forzosamente una falla: ve el [manual del cliente](../manuales/manual-cliente.md). - La unidad en batería reporta cada 10 minutos (V5.6 en adelante) o de forma continua hasta agotar el paquete (V5.5 con 0.6.0). Si deja de reportar en batería, no es forzosamente una falla: ve el [manual del cliente](../manuales/manual-cliente.md).
- Despliegue GPS-RTK (24-sep): bases RTK y gabinetes en ICAVE, EIT, LZC y TIMSA desde la semana del 28-sep; meta de unidades RTK en los puertos a mediados de noviembre. - Despliegue GPS-RTK (24-sep): bases RTK y gabinetes en ICAVE, EIT, LCT y TIMSA desde la semana del 28-sep; meta de unidades RTK en los puertos a mediados de noviembre.
## Tableros y expediente ## Tableros y expediente

View File

@ -66,7 +66,7 @@
}, },
"sitios": [ "sitios": [
{ "id": "icave", "nombre": "ICAVE", "ciudad": "Veracruz", "x": 68.27, "y": 73.55, "etiqueta": "der", "nota": "se compara con el CalAmp" }, { "id": "icave", "nombre": "ICAVE", "ciudad": "Veracruz", "x": 68.27, "y": 73.55, "etiqueta": "der", "nota": "se compara con el CalAmp" },
{ "id": "lzc", "nombre": "LZC", "ciudad": "Lázaro Cárdenas", "x": 49.6, "y": 80.34, "etiqueta": "der" }, { "id": "lzc", "nombre": "LCT", "ciudad": "Lázaro Cárdenas", "x": 49.6, "y": 80.34, "etiqueta": "der" },
{ "id": "eit", "nombre": "EIT", "ciudad": "Ensenada", "x": 9.34, "y": 7.92, "etiqueta": "der" }, { "id": "eit", "nombre": "EIT", "ciudad": "Ensenada", "x": 9.34, "y": 7.92, "etiqueta": "der" },
{ "id": "timsa", "nombre": "TIMSA", "ciudad": "Manzanillo", "x": 43.06, "y": 74.67, "etiqueta": "izq" } { "id": "timsa", "nombre": "TIMSA", "ciudad": "Manzanillo", "x": 43.06, "y": 74.67, "etiqueta": "izq" }
], ],

View File

@ -81,7 +81,7 @@ El mes más denso. Se estudia el respaldo de bajo consumo y la química del paqu
| 18-sep | Prueba final de unidad (FW 0.4.0); diagnóstico en campo, diagnóstico en banco y reflasheo. Primeras unidades V5 embarcadas con 0.4.0 / 0.5.0 / 0.5.1. **V5-006 destruida** por un cruce en el GX16. | [Prueba final](../procedimientos/v5-prueba-final-unidad.md) · [Diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) · [Diagnóstico en banco](../procedimientos/diagnostico-banco.md) · [Reflasheo](../procedimientos/reflasheo-unidades.md) | V5.5 | | 18-sep | Prueba final de unidad (FW 0.4.0); diagnóstico en campo, diagnóstico en banco y reflasheo. Primeras unidades V5 embarcadas con 0.4.0 / 0.5.0 / 0.5.1. **V5-006 destruida** por un cruce en el GX16. | [Prueba final](../procedimientos/v5-prueba-final-unidad.md) · [Diagnóstico en campo](../diagnostico/procedimiento-diagnostico-campo.md) · [Diagnóstico en banco](../procedimientos/diagnostico-banco.md) · [Reflasheo](../procedimientos/reflasheo-unidades.md) | V5.5 |
| 19-sep | Ciclo de vida de una unidad (qué acta en qué momento); índice de actas; guía de ensamble y QC (borrador V3). | [Ciclo de vida](../procedimientos/ciclo-de-vida.md) · [Actas](../actas/index.md) · [Guía de ensamble y QC](../montaje/guia-ensamble-qc.md) — **superada** por el ensamble V5 | V5.5 / V3 | | 19-sep | Ciclo de vida de una unidad (qué acta en qué momento); índice de actas; guía de ensamble y QC (borrador V3). | [Ciclo de vida](../procedimientos/ciclo-de-vida.md) · [Actas](../actas/index.md) · [Guía de ensamble y QC](../montaje/guia-ensamble-qc.md) — **superada** por el ensamble V5 | V5.5 / V3 |
| 19/21-sep | **Regla de nombres del firmware:** un binario por tarjeta (`hbox-tarjetaV3_4.0.0`, `hbox-tarjetaV4_x.y.z`, `hbox-v5-bringup_x.y.z`); la versión no indica la tarjeta. | [Descargas](../descargas/index.md#firmware-del-hbox-que-binario-va-en-que-tarjeta) | todas | | 19/21-sep | **Regla de nombres del firmware:** un binario por tarjeta (`hbox-tarjetaV3_4.0.0`, `hbox-tarjetaV4_x.y.z`, `hbox-v5-bringup_x.y.z`); la versión no indica la tarjeta. | [Descargas](../descargas/index.md#firmware-del-hbox-que-binario-va-en-que-tarjeta) | todas |
| 24-sep | Prueba de banco del reporte cada 10 min en batería (FW 0.5.2). **Despliegue GPS-RTK:** unidades RTK en los puertos a mediados de noviembre, instalación terminada a mediados de diciembre; gabinetes y bases RTK desde la semana del 28-sep en ICAVE, EIT, LZC y TIMSA. | `…2026-09-24_Drogheda_HBOX-FW-0.5.2_Prueba-Banco-Bateria_ES_v1.0.md` · notas del proyecto (24-sep) | V4/V5 | | 24-sep | Prueba de banco del reporte cada 10 min en batería (FW 0.5.2). **Despliegue GPS-RTK:** unidades RTK en los puertos a mediados de noviembre, instalación terminada a mediados de diciembre; gabinetes y bases RTK desde la semana del 28-sep en ICAVE, EIT, LCT y TIMSA. | `…2026-09-24_Drogheda_HBOX-FW-0.5.2_Prueba-Banco-Bateria_ES_v1.0.md` · notas del proyecto (24-sep) | V4/V5 |
| 24-sep | Lote planeado: **30 unidades (15 V4 + 15 V5)** — **superado** por el plan de 570 unidades del 13-oct. | notas del proyecto (24-sep) | V4/V5 | | 24-sep | Lote planeado: **30 unidades (15 V4 + 15 V5)** — **superado** por el plan de 570 unidades del 13-oct. | notas del proyecto (24-sep) | V4/V5 |
| 25-sep | Primera auditoría pre-fabricación de la v6 (5 prototipos previstos). | [Auditoría pre-fab v6](../hardware/v6-auditoria-prefab.md) · [inglés](../hardware/v6-prefab-audit.md) — **superada** por la del 28-sep | v6 | | 25-sep | Primera auditoría pre-fabricación de la v6 (5 prototipos previstos). | [Auditoría pre-fab v6](../hardware/v6-auditoria-prefab.md) · [inglés](../hardware/v6-prefab-audit.md) — **superada** por la del 28-sep | v6 |
| 26-sep | Auditoría del mapa de pines V4/V5 contra FW 0.5.4. **Decisión V5.6:** 500 ArduSimple ya pedidos → la arquitectura con zócalos se queda; nada de rework en tarjetas existentes. Hallazgo: el módem no arranca en batería (MP1584 en UVLO sobre el riel del boost). | `…2026-09-26_Drogheda_HBOX-V4-V5_Pinmap-Audit-FW-0.5.4_v1.0.md` · notas del proyecto (26-sep) | V4/V5.5 | | 26-sep | Auditoría del mapa de pines V4/V5 contra FW 0.5.4. **Decisión V5.6:** 500 ArduSimple ya pedidos → la arquitectura con zócalos se queda; nada de rework en tarjetas existentes. Hallazgo: el módem no arranca en batería (MP1584 en UVLO sobre el riel del boost). | `…2026-09-26_Drogheda_HBOX-V4-V5_Pinmap-Audit-FW-0.5.4_v1.0.md` · notas del proyecto (26-sep) | V4/V5.5 |
@ -104,7 +104,7 @@ Firmware 0.6.3 a banco (1-oct). Se revisa el bus I²C de V5.6/v6 (5-oct), se dia
| 12-oct | Instrucciones a Michelle para el layout final V5.6 (U26, sin P12). Borrador v0.1 de la ECO V5.7. | [Layout pasada 1](../hardware/v56-layout-pasada-1.md) — **superada** por la pasada 2 · `…2026-10-12_Drogheda_EinarBoard-V5.7_ECO-Fuente-a-bordo_ES_v0.1.md` — **superado** por v0.2 | V5.6 / V5.7 | | 12-oct | Instrucciones a Michelle para el layout final V5.6 (U26, sin P12). Borrador v0.1 de la ECO V5.7. | [Layout pasada 1](../hardware/v56-layout-pasada-1.md) — **superada** por la pasada 2 · `…2026-10-12_Drogheda_EinarBoard-V5.7_ECO-Fuente-a-bordo_ES_v0.1.md` — **superado** por v0.2 | V5.6 / V5.7 |
| 13-oct | **Auditoría del layout de Michelle (`d71098d`): NO LISTA** — `/BAT_PLUS` por In1 a 0.5 mm (bloqueante); 18 piezas movidas (decisión: se quedan); MAIN5V/SYS5V/SW3 por capas internas desde V5.5. Pasada 2 con las correcciones. | [Auditoría 13-oct (inglés)](../hardware/v56-auditoria-layout-13oct.md) · [Layout pasada 2](../hardware/v56-layout-pasada-2.md) | V5.6 | | 13-oct | **Auditoría del layout de Michelle (`d71098d`): NO LISTA** — `/BAT_PLUS` por In1 a 0.5 mm (bloqueante); 18 piezas movidas (decisión: se quedan); MAIN5V/SYS5V/SW3 por capas internas desde V5.5. Pasada 2 con las correcciones. | [Auditoría 13-oct (inglés)](../hardware/v56-auditoria-layout-13oct.md) · [Layout pasada 2](../hardware/v56-layout-pasada-2.md) | V5.6 |
| 13-oct | **V5.7 = V5.6 + fuente 24 V → 5 V a bordo** (U25 TPS54360B del bloque v6), sin SD-15B: esquemático aplicado (ERC 0), F2 fusible SMD 3 A, fuera U2 y P2, JP1 puenteado; proyecto KiCad separado `hbox-watchdog-v57`. Leo coloca la fuente; Michelle corrige V5.6 y después toma V5.7. | [ECO V5.7 v0.2](../hardware/v57-eco-fuente.md) · [Guía de layout V5.7](../hardware/v57-layout-guia.md) | V5.7 | | 13-oct | **V5.7 = V5.6 + fuente 24 V → 5 V a bordo** (U25 TPS54360B del bloque v6), sin SD-15B: esquemático aplicado (ERC 0), F2 fusible SMD 3 A, fuera U2 y P2, JP1 puenteado; proyecto KiCad separado `hbox-watchdog-v57`. Leo coloca la fuente; Michelle corrige V5.6 y después toma V5.7. | [ECO V5.7 v0.2](../hardware/v57-eco-fuente.md) · [Guía de layout V5.7](../hardware/v57-layout-guia.md) | V5.7 |
| 13-oct | **Pedido de 570 HBOX:** 113 × V5.6 (con SD-15B) · 327 × V5.7 · 130 × v6 (+ reemplazos futuros en v6). Paquetes de fabricación V5.6/V5.7/v6 para cotizar. Caja plástica del HBOX: el cable Ethernet no cabe (cambio por definir). Sitios: ICAVE, LZC, EIT, TIMSA. | notas del proyecto (13-oct) · [Tablero de producción](../tableros/produccion.md) · [Kanban](../tableros/pendientes.md) | V5.6 / V5.7 / v6 | | 13-oct | **Pedido de 570 HBOX:** 113 × V5.6 (con SD-15B) · 327 × V5.7 · 130 × v6 (+ reemplazos futuros en v6). Paquetes de fabricación V5.6/V5.7/v6 para cotizar. Caja plástica del HBOX: el cable Ethernet no cabe (cambio por definir). Sitios: ICAVE, LCT, EIT, TIMSA. | notas del proyecto (13-oct) · [Tablero de producción](../tableros/produccion.md) · [Kanban](../tableros/pendientes.md) | V5.6 / V5.7 / v6 |
| 13-oct | Reorganización de este sitio por propósito; tableros, inventario y sitios. | esta página | — | | 13-oct | Reorganización de este sitio por propósito; tableros, inventario y sitios. | esta página | — |
--- ---

View File

@ -118,7 +118,7 @@ hide:
| **Armar una unidad** (módulos → ensamble → prueba final → configuración) | [Producción](produccion/index.md) | [Ensamble](formularios/ensamble.html) | | **Armar una unidad** (módulos → ensamble → prueba final → configuración) | [Producción](produccion/index.md) | [Ensamble](formularios/ensamble.html) |
| **Diagnosticar** una unidad que falla en la máquina | [Diagnóstico en campo](diagnostico/procedimiento-diagnostico-campo.md) | [Diagnóstico en campo](formularios/diagnostico.html) | | **Diagnosticar** una unidad que falla en la máquina | [Diagnóstico en campo](diagnostico/procedimiento-diagnostico-campo.md) | [Diagnóstico en campo](formularios/diagnostico.html) |
| **Diagnosticar** una unidad en la mesa | [Diagnóstico en banco](procedimientos/diagnostico-banco.md) | [Banco](formularios/banco.html) | | **Diagnosticar** una unidad en la mesa | [Diagnóstico en banco](procedimientos/diagnostico-banco.md) | [Banco](formularios/banco.html) |
| **Instalar en sitio** (ICAVE, LZC, EIT, TIMSA) | [Checklist de puesta en marcha](procedimientos/v5-checklist-puesta-en-marcha.md) | [Instalación en campo](formularios/instalacion.html) | | **Instalar en sitio** (ICAVE, LCT, EIT, TIMSA) | [Checklist de puesta en marcha](procedimientos/v5-checklist-puesta-en-marcha.md) | [Instalación en campo](formularios/instalacion.html) |
| **Ver los tableros** (ingeniería, producción, actas, inventario) | [Tableros](tableros/index.md) | — | | **Ver los tableros** (ingeniería, producción, actas, inventario) | [Tableros](tableros/index.md) | — |
| **Inventario** (existencias, entradas y salidas) | [Inventario](tableros/inventario.md) | — | | **Inventario** (existencias, entradas y salidas) | [Inventario](tableros/inventario.md) | — |
| **Pedir una tarjeta o saber qué versión va** | [Tarjetas y hardware](hardware/index.md) | — | | **Pedir una tarjeta o saber qué versión va** | [Tarjetas y hardware](hardware/index.md) | — |

View File

@ -6,7 +6,7 @@ tags: [project-drogheda, hbox, sitios, campo, instalacion]
# Sitios de instalación # Sitios de instalación
Un sitio es un puerto o terminal donde hay unidades HBOX instaladas (hoy: ICAVE, LZC, EIT, TIMSA). Cada sitio tiene su página con contactos, unidades, instalaciones, diagnósticos y daños, armada a partir de las actas. Un sitio es un puerto o terminal donde hay unidades HBOX instaladas (hoy: ICAVE, LCT, EIT, TIMSA). Cada sitio tiene su página con contactos, unidades, instalaciones, diagnósticos y daños, armada a partir de las actas.
<div id="lista-sitios" class="buscar-aviso" markdown="0">Cargando sitios…</div> <div id="lista-sitios" class="buscar-aviso" markdown="0">Cargando sitios…</div>
<script> <script>
@ -19,7 +19,7 @@ Un sitio es un puerto o terminal donde hay unidades HBOX instaladas (hoy: ICAVE,
h+='<li><a href="sitio.html?id='+encodeURIComponent(s.id)+'"><b>'+s.nombre+'</b></a>'+(s.cliente?' · '+s.cliente:'')+ub+(s.activo===false?' <em>(inactivo)</em>':'')+'</li>';}); h+='<li><a href="sitio.html?id='+encodeURIComponent(s.id)+'"><b>'+s.nombre+'</b></a>'+(s.cliente?' · '+s.cliente:'')+ub+(s.activo===false?' <em>(inactivo)</em>':'')+'</li>';});
h+='</ul>'+(j.admin?'<a class="md-button md-button--primary" href="sitio.html?nuevo=1">+ Nuevo sitio</a>':'<small>Para dar de alta un sitio, pide a Leo (administrador).</small>'); h+='</ul>'+(j.admin?'<a class="md-button md-button--primary" href="sitio.html?nuevo=1">+ Nuevo sitio</a>':'<small>Para dar de alta un sitio, pide a Leo (administrador).</small>');
caja.innerHTML=h; caja.innerHTML=h;
}).catch(function(){caja.innerHTML='No se pudo leer la lista de sitios (¿backend apagado?). Entra directo: <a href="sitio.html?id=icave">ICAVE</a> · <a href="sitio.html?id=lzc">LZC</a> · <a href="sitio.html?id=eit">EIT</a> · <a href="sitio.html?id=timsa">TIMSA</a>';}); }).catch(function(){caja.innerHTML='No se pudo leer la lista de sitios (¿backend apagado?). Entra directo: <a href="sitio.html?id=icave">ICAVE</a> · <a href="sitio.html?id=lzc">LCT</a> · <a href="sitio.html?id=eit">EIT</a> · <a href="sitio.html?id=timsa">TIMSA</a>';});
})(); })();
</script> </script>
@ -28,11 +28,11 @@ Un sitio es un puerto o terminal donde hay unidades HBOX instaladas (hoy: ICAVE,
| Sitio | Puerto | Operador | Página | | Sitio | Puerto | Operador | Página |
|---|---|---|---| |---|---|---|---|
| **ICAVE** | Veracruz | Hutchison Ports | [Abrir](../tableros/sitio.md?id=icave) | | **ICAVE** | Veracruz | Hutchison Ports | [Abrir](../tableros/sitio.md?id=icave) |
| **LZC** | Lázaro Cárdenas | Hutchison Ports | [Abrir](../tableros/sitio.md?id=lzc) | | **LCT** | Lázaro Cárdenas | Hutchison Ports | [Abrir](../tableros/sitio.md?id=lzc) |
| **EIT** | Ensenada | Hutchison Ports | [Abrir](../tableros/sitio.md?id=eit) | | **EIT** | Ensenada | Hutchison Ports | [Abrir](../tableros/sitio.md?id=eit) |
| **TIMSA** | Manzanillo | Hutchison Ports | [Abrir](../tableros/sitio.md?id=timsa) | | **TIMSA** | Manzanillo | Hutchison Ports | [Abrir](../tableros/sitio.md?id=timsa) |
En notas antiguas Lázaro Cárdenas aparece como «LCT»; el nombre oficial en el sitio es **LZC**. Hasta el 21-oct, Lázaro Cárdenas aparecía en el sitio como «LZC»; el nombre correcto es **LCT**. La dirección de su página sigue siendo `?id=lzc` (es la clave con la que las actas lo guardan), y «LZC» queda como alias para que las actas viejas lo sigan encontrando.
## Cómo se relaciona con las actas ## Cómo se relaciona con las actas
@ -51,7 +51,7 @@ En notas antiguas Lázaro Cárdenas aparece como «LCT»; el nombre oficial en e
1. En la página de cualquier sitio, elige **+ Nuevo sitio…** en el selector, o entra a [`sitio.html?nuevo=1`](../tableros/sitio.md?nuevo=1). 1. En la página de cualquier sitio, elige **+ Nuevo sitio…** en el selector, o entra a [`sitio.html?nuevo=1`](../tableros/sitio.md?nuevo=1).
2. Id corto en minúsculas (`icave`, `lzc`), nombre como lo dice el cliente, cliente, ubicación. 2. Id corto en minúsculas (`icave`, `lzc`), nombre como lo dice el cliente, cliente, ubicación.
3. **Alias**: los nombres con los que ese sitio aparece en actas viejas (por ejemplo `LCT` para LZC), para que la búsqueda por texto las encuentre. 3. **Alias**: los nombres con los que ese sitio aparece en actas viejas (por ejemplo `LZC` para LCT), para que la búsqueda por texto las encuentre.
4. Contactos: nombre, rol, teléfono, correo. Guarda. El sitio aparece de inmediato en los formularios. 4. Contactos: nombre, rol, teléfono, correo. Guarda. El sitio aparece de inmediato en los formularios.
Un sitio no se borra: se marca **inactivo** y deja de salir en los formularios, pero su historial sigue visible. Un sitio no se borra: se marca **inactivo** y deja de salir en los formularios, pero su historial sigue visible.

View File

@ -15,7 +15,7 @@ Las páginas que abres para saber **dónde está el proyecto hoy**: qué pendien
| **Cuántas unidades** llevamos y cuántas faltan | [Producción](produccion.md) | Plan 113 V5.6 · 327 V5.7 · 130 v6 contra las unidades reales por etapa; embudo por paso; bloqueos; alertas de inventario | | **Cuántas unidades** llevamos y cuántas faltan | [Producción](produccion.md) | Plan 113 V5.6 · 327 V5.7 · 130 v6 contra las unidades reales por etapa; embudo por paso; bloqueos; alertas de inventario |
| Qué **tarjeta, módulo o unidad** pasó cada acta | [Actas](actas.md) | Series V5-NN, ARD-NNN, RTK-NNNN y V4-NN; parejas integradas; unidades ensambladas. Pendiente = liga al acta | | Qué **tarjeta, módulo o unidad** pasó cada acta | [Actas](actas.md) | Series V5-NN, ARD-NNN, RTK-NNNN y V4-NN; parejas integradas; unidades ensambladas. Pendiente = liga al acta |
| Qué **material** hay y qué falta | [Inventario](inventario.md) | Existencias, mínimos y cada movimiento con quién y por qué | | Qué **material** hay y qué falta | [Inventario](inventario.md) | Existencias, mínimos y cada movimiento con quién y por qué |
| Qué hay **en cada puerto** | [Sitios](sitio.md) | Unidades instaladas, envíos, diagnósticos, daños y contactos de ICAVE, LZC, EIT y TIMSA | | Qué hay **en cada puerto** | [Sitios](sitio.md) | Unidades instaladas, envíos, diagnósticos, daños y contactos de ICAVE, LCT, EIT y TIMSA |
| **Quién es quién** | [Equipo](equipo.md) | Miembros, área, acceso al sitio y pendientes abiertos y vencidos de cada quien. El administrador crea aquí los accesos | | **Quién es quién** | [Equipo](equipo.md) | Miembros, área, acceso al sitio y pendientes abiertos y vencidos de cada quien. El administrador crea aquí los accesos |
| **Todo sobre una serie** | [Expediente de unidad](unidad.md) | Cada acta, foto y log de una unidad en una línea de tiempo, de la tarjeta al sitio | | **Todo sobre una serie** | [Expediente de unidad](unidad.md) | Cada acta, foto y log de una unidad en una línea de tiempo, de la tarjeta al sitio |
| Las **visitas de diagnóstico** | [Visitas de campo](campo.md) | Todas las actas de diagnóstico en campo y en banco, con fotos | | Las **visitas de diagnóstico** | [Visitas de campo](campo.md) | Todas las actas de diagnóstico en campo y en banco, con fotos |

74
hooks/versiones.py Normal file
View File

@ -0,0 +1,74 @@
"""Versión de los .css y .js propios en cada liga (21-oct-2026).
Sin esto, después de un deploy el navegador sigue usando el tablero.css o el kanban.js anteriores
un buen rato: el nombre del archivo no cambia y el servidor no le pide revisarlo. Pasó el 21-oct: la
página de inicio nueva salió con la ruta a producción sin estilos hasta recargar a la fuerza.
Aquí, al construir, cada liga a un .css o .js que vive en docs/ recibe ?v=<huella del archivo>. Si el
archivo cambió, la dirección cambia y el navegador lo baja otra vez; si no cambió, sigue en caché.
Se aplica al HTML de las páginas de MkDocs (on_post_page) y a las páginas sueltas de docs/
(formularios, cuenta, admin, salir…, en on_post_build). Los archivos de docs/ no se tocan.
Los de Material ya traen su huella en el nombre (main.<huella>.min.css) y no se tocan.
"""
import hashlib
import logging
import os
import posixpath
import re
log = logging.getLogger("mkdocs.hooks.versiones")
_HUELLAS = {}
# href="…x.css" o src="…x.js" sin parámetros (si ya traen ?algo, se respetan)
_LIGA = re.compile(r'(\b(?:href|src)=")([^"#?]+\.(?:css|js))(")')
def on_pre_build(config, **kwargs):
_HUELLAS.clear()
docs = config["docs_dir"]
for raiz, _, archivos in os.walk(docs):
for f in archivos:
if f.endswith((".css", ".js")):
ruta = os.path.join(raiz, f)
with open(ruta, "rb") as fh:
_HUELLAS[os.path.relpath(ruta, docs).replace(os.sep, "/")] = hashlib.sha256(fh.read()).hexdigest()[:10]
def _base(url_pagina):
u = "/" + (url_pagina or "")
return u if u.endswith("/") else posixpath.dirname(u) + "/"
def _marcar(html, base):
def cambia(m):
url = m.group(2)
if url.startswith(("http:", "https:", "//", "data:")):
return m.group(0)
rel = (url if url.startswith("/") else posixpath.normpath(posixpath.join(base, url))).lstrip("/")
huella = _HUELLAS.get(rel)
return m.group(1) + url + "?v=" + huella + m.group(3) if huella else m.group(0)
return _LIGA.sub(cambia, html)
def on_post_page(output, page, config, **kwargs):
return _marcar(output, _base(page.url))
def on_post_build(config, **kwargs):
# páginas sueltas: el HTML de docs/ que MkDocs copia tal cual (formularios, cuenta, redirecciones…)
docs, site, n = config["docs_dir"], config["site_dir"], 0
for raiz, _, archivos in os.walk(docs):
for f in archivos:
if not f.endswith(".html"):
continue
rel = os.path.relpath(os.path.join(raiz, f), docs).replace(os.sep, "/")
destino = os.path.join(site, rel)
if not os.path.isfile(destino):
continue
with open(destino, encoding="utf-8") as fh:
html = fh.read()
nuevo = _marcar(html, _base(rel))
if nuevo != html:
with open(destino, "w", encoding="utf-8") as fh:
fh.write(nuevo)
n += 1
log.info("versiones: %d archivos .css/.js con huella; %d páginas sueltas marcadas", len(_HUELLAS), n)

View File

@ -57,6 +57,7 @@ hooks:
- hooks/iconos.py # íconos del menú lateral (también para páginas que llegan por sync-docs.sh) - hooks/iconos.py # íconos del menú lateral (también para páginas que llegan por sync-docs.sh)
- hooks/frontmatter.py # encabezados YAML con «: » sin comillas: se leen igual (no toca los archivos) - hooks/frontmatter.py # encabezados YAML con «: » sin comillas: se leen igual (no toca los archivos)
- hooks/documentos.py # «Documentos recientes» del inicio: site/datos/documentos.json (páginas con date:) - hooks/documentos.py # «Documentos recientes» del inicio: site/datos/documentos.json (páginas con date:)
- hooks/versiones.py # ?v=<huella> en las ligas a .css y .js propios: cada deploy llega sin recargar a la fuerza
plugins: plugins:
- search: - search: