From 65a221ba9c6a03cf581cb1cf0ad707e2ed824f63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leopoldo=20Rodr=C3=ADguez?= Date: Wed, 21 Oct 2026 19:34:40 -0600 Subject: [PATCH] =?UTF-8?q?Sitio:=20LCT=20en=20vez=20de=20LZC=20y=20versi?= =?UTF-8?q?=C3=B3n=20en=20las=20ligas=20a=20CSS/JS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016X4CAujMuib2tDqt9JRg6X --- backend/seed_1013.py | 8 ++--- docs/campo/index.md | 4 +-- docs/datos/proyecto.json | 2 +- docs/historia/index.md | 4 +-- docs/index.md | 2 +- docs/sitios/index.md | 10 +++--- docs/tableros/index.md | 2 +- hooks/versiones.py | 74 ++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 9 files changed, 91 insertions(+), 16 deletions(-) create mode 100644 hooks/versiones.py diff --git a/backend/seed_1013.py b/backend/seed_1013.py index 7726ee2..9ff1607 100644 --- a/backend/seed_1013.py +++ b/backend/seed_1013.py @@ -61,10 +61,10 @@ SITIOS = [ "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). " "Compara el HBOX RTK con un CalAmp legado (viajes en Wialon)."}, - {"id": "lzc", "nombre": "LZC", "cliente": "Hutchison Ports", "ubicacion": "Lázaro Cárdenas, Mich.", - "alias": ["LCT", "Lázaro Cárdenas"], "orden": 20, + {"id": "lzc", "nombre": "LCT", "cliente": "Hutchison Ports", "ubicacion": "Lázaro Cárdenas, Mich.", + "alias": ["LZC", "Lázaro Cárdenas"], "orden": 20, "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", "alias": [], "orden": 30, "contactos": [{"nombre": "por confirmar", "rol": "", "telefono": "", "correo": ""}], "notas": ""}, @@ -145,7 +145,7 @@ TAREAS = [ "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»."}, {"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/"}], "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": "—", diff --git a/docs/campo/index.md b/docs/campo/index.md index 5eb6bae..51fc11d 100644 --- a/docs/campo/index.md +++ b/docs/campo/index.md @@ -11,7 +11,7 @@ Unidad **en la máquina o en camino**: instalación en el puerto, falla en sitio | Sitio | Puerto | Página | |---|---|---| | 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) | | 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). - 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). -- 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 diff --git a/docs/datos/proyecto.json b/docs/datos/proyecto.json index 14e810c..f7e6a6a 100644 --- a/docs/datos/proyecto.json +++ b/docs/datos/proyecto.json @@ -66,7 +66,7 @@ }, "sitios": [ { "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": "timsa", "nombre": "TIMSA", "ciudad": "Manzanillo", "x": 43.06, "y": 74.67, "etiqueta": "izq" } ], diff --git a/docs/historia/index.md b/docs/historia/index.md index 265189f..c2a8bee 100644 --- a/docs/historia/index.md +++ b/docs/historia/index.md @@ -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 | | 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 | -| 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 | | 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 | @@ -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 | | 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 | **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 | — | --- diff --git a/docs/index.md b/docs/index.md index 0889e2e..6ee1444 100644 --- a/docs/index.md +++ b/docs/index.md @@ -118,7 +118,7 @@ hide: | **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 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) | — | | **Inventario** (existencias, entradas y salidas) | [Inventario](tableros/inventario.md) | — | | **Pedir una tarjeta o saber qué versión va** | [Tarjetas y hardware](hardware/index.md) | — | diff --git a/docs/sitios/index.md b/docs/sitios/index.md index 1d550b7..ccfdad0 100644 --- a/docs/sitios/index.md +++ b/docs/sitios/index.md @@ -6,7 +6,7 @@ tags: [project-drogheda, hbox, sitios, campo, instalacion] # 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.
Cargando sitios…
@@ -28,11 +28,11 @@ Un sitio es un puerto o terminal donde hay unidades HBOX instaladas (hoy: ICAVE, | Sitio | Puerto | Operador | Página | |---|---|---|---| | **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) | | **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 @@ -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). 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. Un sitio no se borra: se marca **inactivo** y deja de salir en los formularios, pero su historial sigue visible. diff --git a/docs/tableros/index.md b/docs/tableros/index.md index af9a5fb..6eaaa57 100644 --- a/docs/tableros/index.md +++ b/docs/tableros/index.md @@ -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 | | 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é 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 | | **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 | diff --git a/hooks/versiones.py b/hooks/versiones.py new file mode 100644 index 0000000..d63c512 --- /dev/null +++ b/hooks/versiones.py @@ -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=. 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..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) diff --git a/mkdocs.yml b/mkdocs.yml index 81c5a53..a892fbb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -57,6 +57,7 @@ hooks: - 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/documentos.py # «Documentos recientes» del inicio: site/datos/documentos.json (páginas con date:) + - hooks/versiones.py # ?v= en las ligas a .css y .js propios: cada deploy llega sin recargar a la fuerza plugins: - search: