Resumen
Modo Confiabilidad es un sitio estático: 59 páginas HTML generadas a partir de Markdown, de las cuales 57 son indexables. Las demás llevan noindex: la página de error, esta documentación y, si la suscripción está activa, la confirmación de suscripción. Tiene 16 guías técnicas, 13 calculadoras, 6 módulos de laboratorio, un tablero de mantenimiento con su kit para Power BI, 44 757 palabras de contenido y un buscador con 335 entradas. Las calculadoras y los modelos del laboratorio se verifican con 104 pruebas numéricas que se ejecutan en cada compilación: si una falla, el sitio no se genera.
| Entregable del pliego | Dónde está |
|---|---|
| Arquitectura | Arquitectura: principios, proceso de compilación, estructura del código y despliegue |
| Sitemap | Mapa del sitio, generado desde el registro de páginas, y sitemap.xml cuando se define el dominio |
| Wireframes | Wireframes de inicio, guía, calculadora, tablero y celular |
| Diseño final | El sitio mismo; las reglas que lo producen están en Sistema de diseño |
| HTML, CSS y JS | Código fuente: src/ (plantillas), assets/css/main.css y assets/js/ |
| Componentes reutilizables | Componentes |
| Assets | Tipografías autoalojadas, KaTeX, logotipo SVG, imágenes para redes, plantillas XLSX y kit de Power BI (estructura) |
| Calculadoras funcionales | Las 13 calculadoras y su verificación |
| Base de contenidos | Modelo de contenidos |
| SEO técnico y semántico | SEO |
| Rendimiento, accesibilidad y responsive | Rendimiento, Accesibilidad y Diseño adaptable |
| Benchmark | Benchmark |
| Auditoría | Auditoría: observaciones por rol, correcciones y verificación automática |
Arquitectura
Principios
- Sitio estático. Todo el HTML se genera en la compilación. No hay servidor de aplicación, base de datos ni cuentas de usuario, de modo que se aloja en cualquier servicio de archivos estáticos y no tiene superficie de ataque del lado del servidor.
- Sin framework. El generador es un script de Node.js con dos dependencias de producción,
marked(Markdown) ykatex(fórmulas), y usa esbuild para empaquetar el JavaScript. Cada página carga solo el script que necesita, como script clásico: el sitio funciona igual publicado que abierto desde el disco, sin servidor ni conexión. - Cálculo en el navegador. Las calculadoras, el laboratorio y el tablero no envían datos a ningún lado. Lo que se carga en una calculadora queda guardado en el propio navegador.
- Fórmulas resueltas en la compilación. KaTeX convierte cada fórmula en HTML y MathML durante la compilación; el navegador solo descarga la hoja de estilos de KaTeX en las páginas que tienen fórmulas.
- Sin terceros por defecto. Las tipografías están alojadas en el propio sitio, y no hay cookies, publicidad ni recursos de otros dominios. Las únicas excepciones son opcionales, las estadísticas de visitas y la suscripción por correo, y se activan por configuración. La política de seguridad de contenidos autoriza solo los dominios de lo que esté activo.
- La verificación es requisito de publicación. La compilación ejecuta las pruebas numéricas y controla la estructura de cada guía y el contraste de cada color antes de escribir una sola página.
Proceso de compilación
node build.mjs ejecuta, en este orden:
- Borra
dist/, copia los estilos ystatic/, y empaqueta el JavaScript con esbuild: un script común, uno por calculadora, módulo o página que lo necesite, y uno por widget. - Prepara las dependencias de presentación: la hoja de estilos de KaTeX con sus fuentes WOFF2, las tipografías del sitio con su
@font-face(subconjuntos porunicode-range) y el favicon SVG, que se dibuja con el mismo código que el logotipo. - Ejecuta
tests/models.test.mjs. Si alguna prueba falla, la compilación se detiene con la lista de fallas. - Genera las 16 guías: Markdown con front matter, secciones numeradas, índice lateral, herramientas y guías relacionadas. Si una guía no tiene las ocho secciones del pliego en orden, la compilación se detiene.
- Genera las calculadoras y los módulos del laboratorio: el marco de la página con su documentación, y la tabla de verificación con los resultados de las pruebas de esta misma compilación.
- Genera el blog. Con
BLOG_HASTApublica solo los artículos con fecha hasta ese día. - Genera las páginas en Markdown (sobre, cursos, casos, recursos, comunidad, contacto y esta documentación).
- Arma el kit de Power BI: seis CSV, consultas de Power Query, medidas DAX, tema, instrucciones y el ZIP.
- Compone las páginas que combinan datos: inicio, biblioteca, glosario, normas, calculadoras, laboratorio, tablero, blog y 404.
- Escribe el índice del buscador.
- Mide el peso de las páginas tipo, el volumen de contenidos y el contraste de los colores, y los inserta en esta documentación.
- Escribe
robots.txt,site.webmanifest,_headersy, si se definió el dominio,sitemap.xml. - Crea
dist-artifact/, una variante de vista previa en la que la página de inicio no lleva el esqueleto HTML.
La compilación sin pruebas tarda menos de un segundo. Las pruebas agregan unos nueve segundos, la mayor parte en las simulaciones con varias semillas que verifican propiedades estadísticas.
Estructura del código
confiabilidad/
build.mjs generador: pruebas, compilación, controles y dist/
package.json marked y katex; esbuild, tipografías, html-validate y axe-core
src/
site.mjs registro: guías, calculadoras, módulos, navegación, editor
md.mjs Markdown -> HTML: fórmulas, llamadas, directivas,
anclas explícitas y ortotipografía de cifras
layout.mjs plantilla de página, encabezado, pie, rótulo, tarjetas,
rutas relativas e imagen para redes
pages.mjs páginas compuestas: inicio, índices, glosario, normas,
tablero, contacto y esta documentación
diagrams.mjs 17 diagramas técnicos en SVG
data.mjs glosario, mapa de normas y bibliografía
kit.mjs kit de Power BI: CSV, Power Query, DAX, tema y ZIP
content/
guias/ 16 guías (Markdown con front matter)
herramientas/ documentación de las 13 calculadoras
lab/ documentación de los 6 módulos del laboratorio
blog/ artículos: NN-slug.md
paginas/ sobre, cursos, casos, recursos, comunidad, contacto, docs
assets/
css/main.css sistema de diseño completo, sin preprocesador
js/core.js tema, navegación, buscador, índice, widgets, desplazamiento
js/lib/ modelos puros (stats, models, lab, fleet) y marco de
interfaz (ui, charts)
js/calc/ una interfaz por calculadora
js/lab/ una interfaz por módulo del laboratorio
js/widgets/ componentes incrustados en el texto de las guías
js/dashboard.js tablero de mantenimiento
js/contacto.js redacción de consultas
static/ se copia a la raíz: plantillas XLSX e imágenes para redes
scripts/
plantillas.py genera las cinco plantillas de Excel con fórmulas
og.py genera las imágenes para redes (1200 x 630)
tests/
models.test.mjs pruebas numéricas (se ejecutan en cada compilación)
links.py enlaces internos, anclas y recursos
smoke.py prueba de humo de calculadoras y laboratorio
dash_smoke.py prueba de humo del tablero
superposiciones.py textos que se pisan o quedan cortados, en seis anchos
shots.py capturas de pantalla y errores de consola
Comandos y variables
| Comando | Qué hace |
|---|---|
npm install |
Instala las dependencias, las tipografías y las herramientas de validación |
node build.mjs |
Ejecuta las pruebas y compila dist/ y dist-artifact/ |
node build.mjs --sin-pruebas |
Compila sin ejecutar las pruebas. Sirve para iterar en diseño; no se publica así |
node tests/models.test.mjs |
Ejecuta las pruebas numéricas y muestra el detalle |
python3 tests/links.py dist |
Verifica enlaces internos, anclas y recursos |
npx html-validate $(find dist -name '*.html') |
Valida el HTML con las reglas de .htmlvalidate.json |
python3 tests/auditoria.py dist |
Revisa cada página con axe-core en tema claro, oscuro y celular; registra errores de consola y violaciones de la política de seguridad, sirviendo las mismas cabeceras de _headers, y busca desplazamiento horizontal a 320 píxeles |
python3 tests/estados.py dist |
Revisa con axe-core los estados interactivos: buscador, menús, errores de datos, filtros del tablero y gráficos recorridos con el teclado |
python3 tests/local.py dist |
Abre el sitio desde el disco, sin servidor, y comprueba que funcionen las calculadoras, el laboratorio, el tablero, los widgets y el buscador |
python3 tests/superposiciones.py dist |
Recorre cada página en seis anchos, de 320 a 1600 píxeles, y busca textos que se pisan, rótulos de gráficos a menos de 2 píxeles uno de otro y textos que salen de la pantalla o de su gráfico |
python3 scripts/plantillas.py |
Regenera las plantillas de Excel; después hay que recalcularlas con LibreOffice para guardar los valores |
python3 scripts/og.py |
Regenera las imágenes para redes con los títulos de dist/. Se corre después de compilar, cuando cambian los títulos |
| Variable | Efecto |
|---|---|
SITE_URL |
Dominio público, sin barra final. Activa las URL canónicas, sitemap.xml, las imágenes para redes, las migas de pan en JSON-LD y la acción de búsqueda del sitio |
CONTACT_EMAIL |
Muestra el botón «Abrir en el correo» del formulario de contacto. Sin esta variable, el formulario arma el mensaje y lo copia para enviarlo por LinkedIn |
BLOG_HASTA |
Fecha AAAA-MM-DD. Publica solo los artículos fechados hasta ese día, para acompañar una serie de LinkedIn sin adelantar las publicaciones siguientes |
CF_ANALYTICS_TOKEN |
Token de sitio de Cloudflare Web Analytics. Agrega el script de estadísticas a todas las páginas y autoriza sus dominios en la política de seguridad. Con el valor auto, solo los autoriza, para cuando Cloudflare inserta el script por su cuenta |
NEWSLETTER_URL |
Dirección de envío del formulario del proveedor de correo, por ejemplo https://app.kit.com/forms/NÚMERO/subscriptions. Muestra el formulario de suscripción en el pie de todas las páginas y al final de cada artículo, y genera la página de confirmación suscripcion.html |
NEWSLETTER_CAMPO |
Nombre del campo del correo, si el proveedor no es Kit: email en Buttondown, EMAIL en Brevo. Con Kit no hace falta |
Ejemplo: SITE_URL=https://www.ejemplo.org BLOG_HASTA=2026-10-20 node build.mjs.
Despliegue
El contenido de dist/ se sube a la raíz de cualquier servicio estático: Netlify, Cloudflare Pages, GitHub Pages, un bucket S3 con CloudFront o un servidor Nginx. Todos los enlaces internos son relativos, así que el sitio también funciona dentro de una subcarpeta.
También funciona sin servidor. Con doble clic en index.html se navega completo y funcionan las calculadoras, el laboratorio, el tablero y el buscador, sin conexión a internet, así que la carpeta dist/ sirve también como caja de herramientas sin conexión. En ese modo no se aplican las cabeceras de seguridad, porque las pone el alojamiento.
Netlify y Cloudflare Pages leen el archivo _headers tal como está. En otros servicios hay que replicar sus cabeceras en la configuración propia (en Nginx, con add_header). La política de seguridad de contenidos que se genera es esta:
default-src 'self';
script-src 'self' 'sha256-vf+SCwUohUAI/UwUA0ovqdzZqHoY1qIXkGpfZmPUGzQ=' https://static.cloudflareinsights.com;
style-src 'self' 'unsafe-inline';
img-src 'self';
font-src 'self';
connect-src 'self' https://cloudflareinsights.com;
object-src 'none';
base-uri 'self';
form-action 'self';
frame-ancestors 'self';
upgrade-insecure-requests
Sin servicios opcionales, todo se sirve desde el propio dominio. Con las estadísticas activas, la política suma el script de Cloudflare y el destino de sus datos; con la suscripción, la dirección del formulario del proveedor. El único script en línea, que aplica el tema claro u oscuro antes de pintar la página para evitar un destello, se autoriza por su hash SHA-256; si se modifica ese script, la compilación recalcula el hash. style-src admite estilos en línea porque los usan las fórmulas de KaTeX y los gráficos, que fijan colores y posiciones en cada elemento. El resto de las cabeceras desactiva el rastreo del tipo MIME, limita la información de origen que se envía a otros sitios, bloquea el uso del sitio dentro de marcos ajenos y desactiva cámara, micrófono, geolocalización, pagos y USB.
| Recursos | Caché | Motivo |
|---|---|---|
/assets/css/*, /assets/js/* |
Revalidación en cada visita (max-age=0, must-revalidate) |
Los nombres de archivo no llevan huella de versión: revalidar evita mezclar una hoja de estilos nueva con un script viejo después de una actualización. La respuesta 304 pesa unos cientos de bytes |
/assets/fonts/*, /assets/vendor/* |
30 días | Tipografías y KaTeX cambian solo cuando se actualiza la dependencia |
/assets/img/*, /descargas/* |
1 día | Imágenes para redes, plantillas y kit |
Estadísticas y suscripción por correo
Las dos funciones son opcionales y quedan apagadas hasta que se configuran. El sitio no necesita servidor propio para ninguna de las dos.
Estadísticas de visitas con Cloudflare Web Analytics. Es gratuito, no usa cookies y funciona con cualquier alojamiento:
- Crear una cuenta en Cloudflare y, en Web Analytics, agregar el sitio con su dominio.
- Copiar el token que aparece en el fragmento de código que muestra Cloudflare.
- Compilar con
CF_ANALYTICS_TOKEN=token.
Si el sitio se aloja en Cloudflare Pages o pasa por el proxy de Cloudflare con la inserción automática activada, se compila con CF_ANALYTICS_TOKEN=auto: Cloudflare inserta el script y la política de seguridad lo autoriza.
Suscripción por correo con Kit. El formulario envía el correo directamente al proveedor, sin scripts de terceros:
- Crear una cuenta en Kit y un formulario.
- En el código de inserción HTML del formulario, copiar la dirección del atributo
action:https://app.kit.com/forms/NÚMERO/subscriptions. - En la configuración del formulario, activar la doble confirmación y elegir como destino después de suscribirse la página
suscripcion.htmldel sitio. - Compilar con
NEWSLETTER_URL=dirección.
Otro proveedor con formulario HTML, como Buttondown o Brevo, se configura igual, indicando además el nombre del campo con NEWSLETTER_CAMPO.
La página de privacidad se arma sola con lo que esté activo: describe el servicio de estadísticas y el proveedor de correo solo cuando están configurados.
Antes de publicar conviene seguir esta secuencia:
- Actualizar la fecha de revisión en
src/site.mjs. - Compilar con
SITE_URLdefinido, sin--sin-pruebas. - Correr
python3 tests/links.py disthasta que no informe problemas. - Si cambiaron títulos, regenerar las imágenes con
python3 scripts/og.pyy volver a compilar.
Mapa del sitio
La navegación principal tiene cinco entradas: Biblioteca, Herramientas, Reliability Lab, Aprender y Comunidad. Las cuatro primeras abren un menú agrupado por tema. Cada página interna tiene una ruta de navegación, y el pie repite los accesos a la biblioteca, las herramientas, el laboratorio y las páginas del proyecto. Este árbol se genera desde el mismo registro que produce las páginas, así que no puede quedar desactualizado:
- Inicio
index.html - Biblioteca técnica
biblioteca.html- CF-GU-01 RCM
rcm.html - CF-GU-02 FMEA
fmea.html - CF-GU-03 Causa raíz (RCA)
rca.html - CF-GU-04 Weibull
weibull.html - CF-GU-05 Análisis RAM
analisis-ram.html - CF-GU-06 Preventivo
mantenimiento-preventivo.html - CF-GU-07 Predictivo
mantenimiento-predictivo.html - CF-GU-08 Basado en condición
mantenimiento-basado-en-condicion.html - CF-GU-09 TPM
tpm.html - CF-GU-10 OEE
oee.html - CF-GU-11 Gestión de activos
gestion-de-activos.html - CF-GU-12 ISO 55000
iso-55000.html - CF-GU-13 ISO 14224
iso-14224.html - CF-GU-14 Planificación
planificacion-y-programacion.html - CF-GU-15 Indicadores KPI
indicadores-kpi.html - CF-GU-16 Instrumentación
instrumentacion-industrial.html - Glosario
glosario.html - Mapa de normas
normas.html
- CF-GU-01 RCM
- Calculadoras
calculadoras.html- Análisis de Weibull
calculadoras/weibull.html - MTBF con intervalo de confianza
calculadoras/mtbf.html - MTTR y mantenibilidad
calculadoras/mttr.html - Disponibilidad inherente, alcanzada y operacional
calculadoras/disponibilidad.html - OEE y TEEP
calculadoras/oee.html - RAM analítico de sistemas
calculadoras/ram.html - Costo del ciclo de vida
calculadoras/lcc.html - Priorización de equipos
calculadoras/priorizacion.html - Matriz de criticidad
calculadoras/criticidad.html - Generador FMEA
calculadoras/fmea.html - Selector de estrategia de mantenimiento
calculadoras/estrategia.html - Dimensionamiento de válvulas de control
calculadoras/cv-valvulas.html - ROI de mantenimiento
calculadoras/roi.html
- Análisis de Weibull
- Reliability Lab
lab.html- Simulación Weibull
lab/weibull.html - Monte Carlo de disponibilidad
lab/montecarlo.html - Optimización de mantenimiento preventivo
lab/optimizacion-pm.html - Predicción de fallas en flota
lab/prediccion.html - Gemelo digital conceptual
lab/gemelo-digital.html - Machine learning aplicado
lab/machine-learning.html - Dashboard de ejemplo
dashboard.html
- Simulación Weibull
- Aprender
- Rutas de aprendizaje
cursos.html - Casos reales
casos.html - Recursos gratuitos
recursos.html - Blog técnico
blog.html- Modos de falla 3/3: del modo de falla a la tarea
blog/modos-de-falla-3.html - Modos de falla 2/3: cómo describirlos
blog/modos-de-falla-2.html - Modos de falla 1/3: los conceptos
blog/modos-de-falla-1.html - Historia del mantenimiento 2/2: dónde estamos y hacia dónde vamos
blog/historia-del-mantenimiento-2.html - Historia del mantenimiento 1/2: de dónde venimos
blog/historia-del-mantenimiento-1.html - ¿Los equipos fallan por viejos?
blog/patrones-de-falla.html - La curva P-F
blog/curva-p-f.html
- Modos de falla 3/3: del modo de falla a la tarea
- Rutas de aprendizaje
- Comunidad
comunidad.html - Sobre Modo Confiabilidad
sobre.html - Contacto
contacto.html - Privacidad
privacidad.html - Página no encontrada
404.html
Trazabilidad con el pliego
| Requisito | Dónde se cumple |
|---|---|
| Inicio, Sobre, Contacto | Inicio, Sobre Modo Confiabilidad, Contacto |
| Biblioteca técnica | Biblioteca, con glosario y mapa de normas |
| RCM, FMEA, RCA, Weibull, RAM, TPM, OEE, ISO 55000, ISO 14224, predictivo, preventivo, CBM, instrumentación, gestión de activos, planificación y programación, KPI | Una guía por tema, de CF-GU-01 a CF-GU-16 |
| Ocho secciones por tema | Fundamentos, Metodología, Fórmulas clave, Ejemplo industrial, Casos documentados, Buenas prácticas, Errores comunes y Referencias. La compilación lo controla |
| Dashboard de ejemplo | Tablero con datos sintéticos de 36 meses y kit descargable para Power BI |
| 13 herramientas funcionales | Weibull, MTBF, MTTR, disponibilidad operacional, OEE, RAM, LCC, priorización, matriz de criticidad, generador FMEA, selector de estrategia, Cv de válvulas y ROI, en Calculadoras |
| Reliability Lab | Simulación Weibull, Monte Carlo, optimización de PM, predicción de fallas, gemelo digital conceptual, machine learning y el tablero estilo Power BI, en Reliability Lab |
| Cursos, Blog, Casos reales, Recursos gratuitos, Comunidad | Rutas de aprendizaje, Blog, Casos reales, Recursos, Comunidad. Las rutas son autodidactas, sin cursos dictados, y quien lee puede proponer temas nuevos |
| Identidad: ingeniería basada en datos, Weibull, gestión de activos, instrumentación, Power BI, decisiones por riesgo | Sello MC², Modo Confiabilidad al cuadrado, con la frase «Datos › Método › Decisión»; navegación organizada por decisión, laboratorio cuantitativo y kit de Power BI |
| Sin prototipos ni contenido de relleno | Cada página es contenido final. Los datos ilustrativos se rotulan como sintéticos y los casos remiten a su informe oficial |
Wireframes
Esquemas de las cinco plantillas principales. Las proporciones son las del escritorio a 1240 píxeles de ancho de contenido, salvo el último, que muestra el comportamiento en un celular de 360 píxeles.
Inicio
+--------------------------------------------------------------------------+
| [MC²] MODO CONFIABILIDAD Biblioteca v Herramientas v Lab v |
| Aprender v Comunidad [Buscar Ctrl K] [tema]|
+-------------------------------------------+------------------------------+
| HERO | INSTRUMENTO INTERACTIVO |
| Antetítulo y revisión | h(t) Weibull, eta = 1000 h |
| H1 + bajada (2 líneas) | beta [-----o----] 2,50 |
| [Explorar la biblioteca] [Calculadoras] | [ gráfico de tasa de falla ] |
| 16 guías · 13 calculadoras · 6 módulos | Régimen | B10 | MTTF |
| + pruebas numéricas superadas | Veredicto en una frase |
+--------------------------------------------------------------------------+
| ORGANIZADO POR DECISIÓN: 4 tarjetas con 3 enlaces cada una |
| (qué equipos importan · qué hacer con cada modo · cuándo intervenir · |
| cómo saber si funciona) |
+--------------------------------------------------------------------------+
| MAPA DEL CONOCIMIENTO: SVG de 4 carriles x 5 nodos con enlaces |
+--------------------------------------------------------------------------+
| CALCULADORAS: grilla de 13 tarjetas (símbolo, título, descripción) |
+-------------------------------------------+------------------------------+
| RELIABILITY LAB: 6 tarjetas | PRINCIPIOS EDITORIALES 01-04 |
+--------------------------------------------------------------------------+
| DESDE LA BIBLIOTECA: 3 guías · BLOG: 3 últimos artículos |
+--------------------------------------------------------------------------+
| NORMAS: franja de chips · [Mapa de normas] |
+--------------------------------------------------------------------------+
| PIE: marca + 4 columnas de enlaces · aviso · revisión |
+--------------------------------------------------------------------------+
Guía técnica
+--------------------------------------------------------------------------+
| Encabezado fijo (igual en todas las páginas) |
+--------------------------------------------------------------------------+
| Inicio / Biblioteca / RCM <- ruta de navegación |
| BIBLIOTECA TÉCNICA · METODOLOGÍAS <- antetítulo |
| H1 Título de la guía |
| Bajada (descripción, 2-3 líneas) |
| +-----------+------------+---------+--------------------------+ |
| | Documento | Revisión | Lectura | Normas de referencia | |
| | CF-GU-01 | 1 · fecha | 14 min | SAE JA1011 · IEC 60300 | |
| +-----------+------------+---------+--------------------------+ |
+---------------------------------------------+----------------------------+
| §1 Fundamentos | EN ESTA GUÍA (fija) |
| §2 Metodología | 01 Fundamentos <- activo |
| §3 Fórmulas (KaTeX: HTML + MathML) | 02 Metodología |
| §4 Ejemplo industrial | ... |
| §5 Casos documentados | |
| §6 Buenas prácticas | HERRAMIENTAS |
| §7 Errores comunes | · Selector de estrategia |
| §8 Referencias | · FMEA |
| | |
| Figuras numeradas, llamadas [NOTA], | GUÍAS RELACIONADAS |
| [ATENCIÓN], [IDEA CLAVE], [EJEMPLO], | · FMEA · Weibull ... |
| tablas, tarjetas de herramientas | |
+--------------------------------------------------------------------------+
| Pie |
+--------------------------------------------------------------------------+
Calculadora y módulo del laboratorio
+--------------------------------------------------------------------------+
| Encabezado · ruta · H1 · bajada · rótulo (herramienta, método, |
| normas, guía) |
+-----------------------------+--------------------------------------------+
| DATOS DE ENTRADA (fijo) | RESULTADOS (aria-live) |
| [Guardado en el navegador] | +--------+--------+--------+ |
| | | Indic. | Indic. | Indic. | |
| Grupo de campos | | princ. +--------+--------+ |
| Campo [valor ] [unidad v] | | | Indic. | Indic. | |
| ayuda / error en línea | +--------+--------+--------+ |
| Tabla editable (pega Excel) | Notas: lectura / atención |
| [+ Agregar fila] | Sección: gráfico + tabla de datos |
| | Sección: tabla de resultados |
| [Cargar ejemplo] [Vaciar] | |
| Ejemplo [lista v] [Cargar] | [Copiar] [CSV] [Imprimir o PDF] |
+--------------------------------------------------------------------------+
| DOCUMENTACIÓN: cómo usarla · método · fórmulas · supuestos · |
| verificación (tabla de pruebas de esta compilación) · referencias |
+--------------------------------------------------------------------------+
Tablero de mantenimiento
+--------------------------------------------------------------------------+
| Encabezado · H1 · rótulo (datos, historial, modelo, kit) |
+--------------------------------------------------------------------------+
| FILTROS: Ventana v Área v Clase v Criticidad v Equipo v [Restablecer] |
| (el estado se guarda en la dirección: #area=...&crit=...) |
+--------------------------------------------------------------------------+
| Disponib. | MTBF | MTTR | Cumplimiento | Backlog | Trabajo reactivo |
| valor + variación interanual + minigráfico de 24 meses |
+--------------------------------------------------------------------------+
| LECTURA: 3 columnas de texto generado con los filtros activos |
+------------------------------------------------+-------------------------+
| Disponibilidad mensual | MTBF y MTTR |
| (banda de ventana, meta) | 12 meses móviles |
+------------------------+------------------------+------------------------+
| Cumplimiento | Horas-hombre por tipo | Backlog (semanas) |
+------------------------+------------------------+------------------------+
| Pareto de modos | Malos actores | Dispersión log-log |
| [Cantidad|Horas] | (cuadrante) | (jack-knife) |
+--------------------------------------------------------------------------+
| TABLA DE EQUIPOS ordenable · [Descargar CSV] |
+--------------------------------------------------------------------------+
| MODELO DE DATOS Y KIT: diagrama estrella · [Descargar ZIP] · |
| archivos · verificación tablero = DAX |
+--------------------------------------------------------------------------+
Celular
+--------------------------------------+
| [MC²] MODO / [Buscar][tema][=] |
| CONFIABILIDAD |
+--------------------------------------+
| Inicio / Biblioteca / RCM |
| H1 en 2-3 líneas |
| Bajada |
| Rótulo en 2 columnas |
+--------------------------------------+
| GUÍAS RELACIONADAS (antes del |
| texto; el índice se oculta) |
+--------------------------------------+
| §1 Fundamentos ... |
| Tablas: desplazamiento lateral |
| Fórmulas: desplazamiento lateral |
| Figuras: ancho mínimo + desplaz. |
+--------------------------------------+
| CALCULADORA: datos arriba, |
| resultados abajo, 1 columna; |
| indicadores en 2 columnas |
+--------------------------------------+
| DASHBOARD: indicadores 2x3, |
| gráficos a ancho completo |
+--------------------------------------+
Sistema de diseño
El concepto es una hoja de ingeniería sobre la mesa gris de una sala de control. La interfaz es gris por defecto y el color aparece solo donde hay información o un estado, como en la filosofía de pantallas de proceso de ISA-101. Cada página empieza con un rótulo documental, como el de un plano. Los códigos y los encabezados de tabla van en monoespaciada y el texto de lectura, con serifa.
Tipografía
| Familia | Uso | Pesos |
|---|---|---|
| Barlow Semi Condensed | Interfaz, títulos, tablas, botones | 400, 500, 600 y 700 |
| Source Serif 4 | Texto de lectura de guías y artículos | 400 y 600, redonda e itálica, latín y griego |
| IBM Plex Mono | Códigos de documento, encabezados de tabla, valores en controles | 400, 500 y 600 |
Las tres familias tienen licencia SIL Open Font License y se sirven desde el propio sitio: 15 archivos WOFF2 que suman 246 kB. Cada navegador descarga solo los subconjuntos y pesos que usa la página, y las dos variantes que aparecen en todas las páginas se precargan. El cuerpo de lectura usa 18 píxeles con interlineado de 1,68 y líneas de hasta 70 caracteres.
Color
| Token | Tema claro | Tema oscuro | Uso |
|---|---|---|---|
--bg |
#edf0f1 |
#0b1114 |
Fondo de página |
--paper |
#ffffff |
#141c20 |
Hojas: paneles, tarjetas, tablas |
--paper-2 |
#f5f7f8 |
#1a2429 |
Encabezados de tabla, código y llamadas |
--ink |
#11171b |
#e5ebee |
Texto principal |
--ink-2 |
#3f4b53 |
#b4c0c6 |
Texto secundario |
--muted |
#5d6b74 |
#8b9ba4 |
Metadatos, ayudas y rótulos de ejes |
--line |
#d3dadd |
#263238 |
Bordes y divisiones |
--accent |
#006b80 |
#52c4d9 |
Enlaces y acciones principales |
--signal |
#b8420c |
#f08a4b |
Contorno de foco del teclado |
--seal-glyph |
#ffffff |
#141c20 |
Letras del sello MC². En tema oscuro el cuadrado del sello toma el color del texto y se aclara |
--seal-exp |
#ffc23d |
#b8420c |
Exponente del sello MC²: amarillo sobre el cuadrado oscuro, naranja sobre el claro |
--ok |
#1d7843 |
#52c07e |
Estado correcto |
--warn |
#8f5c00 |
#e3ac40 |
Estado de atención |
--crit |
#b42318 |
#f07a6c |
Estado crítico |
--s1 a --s5 |
Series de los gráficos, siempre en el mismo orden |
Los colores de estado se usan solo para estados, siempre acompañados de un texto («OK», «Atención», «Crítico»), nunca como decoración. El tema oscuro no invierte los colores: cada token tiene un valor propio, elegido para conservar el contraste y la jerarquía. El tema sigue la preferencia del sistema operativo hasta que se elige uno con el botón del encabezado.
La compilación calcula el contraste de cada par de uso con la fórmula de WCAG 2.2 a partir de main.css, y se detiene si un par de texto queda por debajo de 4,5:1 o un elemento gráfico por debajo de 3:1:
| Par de colores | Uso | Mínimo | Tema claro | Tema oscuro |
|---|---|---|---|---|
--ink sobre --paper | Texto principal | 4,5:1 | 18,07:1 | 14,34:1 |
--ink-2 sobre --paper | Texto secundario | 4,5:1 | 8,96:1 | 9,28:1 |
--muted sobre --paper | Metadatos y ayudas | 4,5:1 | 5,50:1 | 6,02:1 |
--muted sobre --bg | Metadatos sobre el fondo | 4,5:1 | 4,80:1 | 6,63:1 |
--muted sobre --paper-2 | Ayudas en celdas de encabezado | 4,5:1 | 5,11:1 | 5,51:1 |
--accent sobre --paper | Enlaces | 4,5:1 | 6,15:1 | 8,43:1 |
--accent sobre --bg | Enlaces sobre el fondo | 4,5:1 | 5,37:1 | 9,29:1 |
--accent-ink sobre --accent | Texto de botón principal | 4,5:1 | 6,15:1 | 7,42:1 |
--ok sobre --ok-bg | Estado correcto | 4,5:1 | 4,74:1 | 6,77:1 |
--warn sobre --warn-bg | Estado de atención | 4,5:1 | 5,01:1 | 7,49:1 |
--crit sobre --crit-bg | Estado crítico | 4,5:1 | 5,45:1 | 5,97:1 |
--signal sobre --paper | Contorno de foco | 3:1 | 5,49:1 | 6,94:1 |
--signal sobre --bg | Contorno de foco sobre el fondo | 3:1 | 4,80:1 | 7,64:1 |
--s1 sobre --paper | Serie 1 de los gráficos | 3:1 | 4,07:1 | 4,88:1 |
--s2 sobre --paper | Serie 2 de los gráficos | 3:1 | 3,36:1 | 4,77:1 |
--s3 sobre --paper | Serie 3 de los gráficos | 3:1 | 4,98:1 | 4,69:1 |
--s4 sobre --paper | Serie 4 de los gráficos | 3:1 | 4,63:1 | 4,37:1 |
--s5 sobre --paper | Serie 5 de los gráficos | 3:1 | 3,06:1 | 5,49:1 |
Espaciado y retícula
Escala de espaciado de 4, 8, 12, 16, 24, 32, 48 y 72 píxeles (--sp1 a --sp8), radio de borde de 3 píxeles, ancho máximo de contenido de 1240 píxeles y margen lateral de 16 a 32 píxeles según el ancho de la pantalla. Las guías usan dos columnas, texto e índice lateral. Las calculadoras también usan dos: datos fijos a la izquierda y resultados a la derecha.
Cifras y unidades
Las cifras siguen la ortotipografía de la RAE y del Sistema Internacional, tanto en el texto como en las calculadoras y los gráficos:
- Coma decimal: 0,632.
- Espacio fino de no separación (U+202F) para los miles a partir de cinco cifras: 12 500 h. Los números de cuatro cifras no se separan: 8760 h.
- Signo menos tipográfico (U+2212), no el guion.
- Espacio de no separación entre el número y la unidad, también en el porcentaje: 85 %. El número nunca queda en una línea y su unidad en la siguiente.
- Fechas en español: «13 oct. 2026» en listas y «13 de octubre de 2026» en el rótulo de un artículo.
- Comillas angulares «» para las citas y los términos.
Gráficos
Trazos finos, grilla tenue y un solo eje vertical: nunca doble eje. La leyenda aparece solo con dos series o más, y el texto usa los tokens de tinta, no el color de la serie. Cada gráfico tiene un cuadro de información que se abre con el puntero o con el teclado, y una tabla con sus datos debajo, en un desplegable.
Componentes
| Componente | Definido en | Uso |
|---|---|---|
| Encabezado con menús | header() en layout.mjs, .site-head |
Menús agrupados con <details> nativos; se cierran con Esc o con un clic afuera. En pantallas angostas se pliegan en un botón |
| Buscador | <dialog id="buscador"> y core.js |
Se abre con Ctrl K o con la barra; el índice se descarga recién al abrirlo. Se recorre con flechas y con Enter |
| Ruta de navegación | crumbs() |
Lista ordenada con la página actual marcada. Se repite en JSON-LD |
| Cabecera y rótulo documental | pageHead(), titleBlock() |
Antetítulo, título, bajada y bloque de datos del documento: código, revisión, lectura y normas |
| Índice lateral | toc() y core.js |
Marca la sección visible mientras se lee |
| Tarjetas | guideCard(), toolCard() |
Guías, calculadoras y módulos, con código, símbolo y descripción |
| Llamadas | > [!NOTA], [!ATENCION], [!CLAVE], [!EJEMPLO] |
Notas, advertencias, ideas clave y ejemplos dentro del texto |
| Fórmulas | \(…\) y \[…\] en Markdown |
KaTeX en la compilación, con HTML y MathML |
| Diagramas | [[diagrama:nombre|pie]] y diagrams.mjs |
17 figuras SVG numeradas con título y descripción accesibles |
| Marco de calculadora | calcApp() en ui.js |
Campos declarativos con unidades, validación en línea, tablas editables que aceptan lo que se pega de Excel, ejemplos, guardado local, indicadores, notas, gráficos y exportación a portapapeles, CSV e impresión |
| Indicadores | tilesHtml() |
Grilla de resultados sin celdas huérfanas; el indicador principal ocupa dos filas |
| Notas de lectura | notesHtml() |
Interpretación, advertencias y errores de datos, anunciados a lectores de pantalla |
| Gráficos | charts.js |
Líneas, áreas, bandas, dispersión, escalas logarítmicas, papel de Weibull, barras agrupadas y apiladas, cascada, tornado y minigráficos. Los textos se miden con su tipografía real: los rótulos de referencias y puntos marcados prueban posiciones hasta encontrar una libre, los nombres largos de las barras horizontales pasan arriba de cada barra y los rótulos de los ejes se ralean en forma pareja. Un halo del color del fondo separa cada rótulo de las líneas que lo cruzan. Cada gráfico lleva el sello MC² como marca de agua tenue, detrás de los datos, en una esquina que no toca ningún texto, sin eventos del puntero y oculta para lectores de pantalla |
| Widgets en el texto | [[widget:nombre]] |
Tasa de falla de Weibull en la página de inicio, señal NAMUR NE 43 e inspección P-F dentro de las guías |
| Tabla de verificación | [[verificacion:clave]] |
Resultado de las pruebas de esta compilación al pie de cada calculadora y módulo |
| Tablero | dashboard.js |
Filtros con estado en la dirección de la página, indicadores con variación y minigráfico, lectura generada, gráficos y tabla ordenable con exportación |
| Formulario de contacto | contactForm() y contacto.js |
Arma el mensaje y lo copia o lo abre en el correo, sin servidor |
Modelos de cálculo y verificación
Los modelos son funciones puras, separadas de la interfaz, en assets/js/lib/: funciones especiales y estadística en stats.js, calculadoras en models.js, laboratorio en lab.js y la flota del tablero en fleet.js. Son los mismos archivos que ejecuta el navegador y los que importan las pruebas en Node.js, así que lo que se verifica es exactamente lo que calcula el sitio.
Las 104 pruebas de tests/models.test.mjs cubren:
- Funciones especiales contra tablas: Γ, χ², distribución normal y rangos de mediana exactos.
- Weibull contra los ejemplos resueltos de la referencia de análisis de vida de ReliaSoft (regresión de rangos y máxima verosimilitud, con y sin suspensiones), contra búsquedas exhaustivas independientes de la verosimilitud, y contra Weibayes, las vidas B e ISO 281.
- MTBF, MTTR y disponibilidad con límites χ², ajuste lognormal y balances de horas.
- OEE, RAM y economía: ejemplos de referencia, bloques k de n, VAN, costo anual equivalente y TIR.
- Válvulas de control contra los ejemplos de IEC 60534-2-1 para líquido y gas.
- Estrategia y laboratorio: edad óptima de reemplazo e intervalos de inspección contra búsquedas exhaustivas, intervalo de búsqueda de fallas, Monte Carlo contra soluciones analíticas, sesgo de máxima verosimilitud con pocas fallas, calibración del intervalo de vida remanente del gemelo digital y propiedades de la regresión logística, incluido el efecto de las etiquetas erróneas sobre el AUC.
- Tablero y kit: determinismo del generador, paradas sin superposición, igualdad entre cada indicador del tablero y la medida DAX aplicada a los CSV, consistencia del Pareto, límites del diagrama de dispersión de Knights e integridad del ZIP.
Los generadores aleatorios usan una semilla fija (algoritmo mulberry32), de modo que dos personas con los mismos parámetros obtienen el mismo resultado y las pruebas son reproducibles. Las plantillas de Excel replican con fórmulas los criterios de las calculadoras, y se verificaron con los mismos casos.
Modelo de contenidos
| Tipo de contenido | Archivos | Palabras | Ecuaciones en bloque | Diagramas | Tablas |
|---|---|---|---|---|---|
| Guías técnicas | 16 | 17 849 | 51 | 16 | 26 |
| Documentación de calculadoras | 13 | 4109 | 28 | 0 | 3 |
| Documentación del laboratorio | 6 | 6352 | 23 | 0 | 12 |
| Artículos del blog | 7 | 3087 | 1 | 4 | 8 |
| Páginas institucionales y esta documentación | 7 | 13 360 | 2 | 0 | 27 |
| Total | 49 | 44 757 | 105 | 20 | 76 |
Cada tipo de contenido es un archivo Markdown con un encabezado de datos (front matter):
| Tipo | Carpeta | Campos |
|---|---|---|
| Guía | content/guias/ |
titulo, corto, descripcion, normas, herramientas, relacionadas, claves, revision, actualizado |
| Calculadora | content/herramientas/ |
metodo, normas, lede, claves, ancho |
| Módulo del laboratorio | content/lab/ |
modelo, lede, ancho |
| Artículo | content/blog/NN-slug.md |
titulo, bajada, fecha, serie, temas, relacionadas |
| Página | content/paginas/ |
titulo, eyebrow, bajada, descripcion, numerada |
El Markdown admite, además de la sintaxis habitual de tablas y listas:
- fórmulas en línea
\(…\)y en bloque\[…\]; - llamadas
> [!NOTA],> [!ATENCION],> [!CLAVE]y> [!EJEMPLO]; - directivas en una línea propia:
[[diagrama:nombre|pie]],[[herramienta:id]],[[herramientas:a,b]],[[lab:id]],[[widget:nombre]],[[guias:a,b]]y[[verificacion:clave]]; - anclas fijas en los títulos,
## Título {#ancla}, para que un enlace externo no se rompa si cambia el texto; - alineación numérica de columnas con
--:.
La ortotipografía de cifras se aplica sola: el generador inserta los espacios de no separación entre número y unidad y entre grupos de miles.
Para agregar contenido:
- Una guía nueva se registra en
GUIDES(src/site.mjs) con su código y su grupo, y se escribecontent/guias/slug.mdcon las ocho secciones. - Un artículo es un archivo
content/blog/NN-slug.md; el número solo ordena los archivos y no aparece en la dirección. - Una calculadora necesita su entrada en
TOOLS, la interfazassets/js/calc/id.js, su documentación y sus casos de prueba.
Las reglas editoriales son:
- Español técnico de Argentina: falla, falla funcional, confiabilidad.
- Cada fórmula con su fuente.
- Los datos ilustrativos se rotulan como tales y los casos reales remiten a su informe oficial.
- Ninguna marca comercial se recomienda.
SEO técnico y semántico
Cada página tiene:
- título propio con la marca al final, salvo que el conjunto supere los 70 caracteres, y descripción tomada del contenido;
- idioma
es; - metadatos Open Graph y de Twitter;
- con el dominio definido, URL canónica e imagen para redes de 1200 × 630 con el título de la página, generada por
scripts/og.py.
La documentación, la página 404 y la confirmación de suscripción llevan noindex. No se bloquean en robots.txt: un buscador que no puede leer una página tampoco ve su indicación noindex.
Datos estructurados (JSON-LD). Cada tipo de página declara el que le corresponde:
| Tipo de página | Esquema |
|---|---|
| Inicio y Sobre | Organization con su fundador como Person |
| Inicio | WebSite con SearchAction: el buscador del sitio abre la búsqueda con ?q= |
| Guías | TechArticle con normas (about), nivel y tiempo de lectura |
| Calculadoras | WebApplication gratuita (Offer a precio cero), categoría de ingeniería |
| Artículos | BlogPosting con autor Person, fecha y palabras clave |
| Glosario | DefinedTermSet con cada término y su equivalente en inglés |
| Todas las internas | BreadcrumbList |
HTML semántico. Las páginas usan:
- regiones
header,nav,main,article,asideyfooter; - un único
h1por página, con secciones numeradas enh2; - figuras con
figcaption; - tablas con
thead; - fechas con
time datetime; - rótulos con listas de definición.
El texto, las fórmulas (que llevan también MathML) y las tablas de verificación están en el HTML servido, no se generan con JavaScript, de modo que cualquier buscador los indexa sin ejecutar scripts.
Enlazado interno. Las piezas se enlazan entre sí:
- cada guía enlaza sus calculadoras y sus guías relacionadas;
- cada calculadora enlaza su guía;
- cada artículo enlaza guías y herramientas para profundizar;
- el glosario y el mapa de normas enlazan la guía donde se aplica cada término o norma.
Vocabulario. Los títulos usan los términos con que se busca en español (falla, confiabilidad, mantenimiento basado en condición) y el glosario conserva el término en inglés como nombre alternativo, para captar búsquedas mixtas.
Rendimiento
Peso de las páginas tipo, medido en esta compilación sobre los archivos generados. Incluye el HTML, la hoja de estilos (y la de KaTeX donde hay fórmulas) y los scripts que la página carga al abrirse. No incluye las tipografías, que se descargan una vez y quedan en caché, ni los scripts que se cargan solo al usarse: el índice del buscador y los widgets.
| Página tipo | HTML | CSS | JavaScript | Scripts | Total | Total con gzip |
|---|---|---|---|---|---|---|
| Inicio | 35,5 kB | 54,1 kB | 6,9 kB | 1 | 96,6 kB | 23,8 kB |
| Guía (RCM) | 62,9 kB | 74,8 kB | 6,9 kB | 1 | 144,7 kB | 34,5 kB |
| Calculadora (Weibull) | 43,8 kB | 74,8 kB | 49,9 kB | 2 | 168,5 kB | 46,1 kB |
| Laboratorio (Monte Carlo) | 38,6 kB | 74,8 kB | 51,9 kB | 2 | 165,4 kB | 45,3 kB |
| Dashboard | 26,4 kB | 54,1 kB | 67,3 kB | 2 | 147,8 kB | 45,3 kB |
| Artículo del blog | 28,8 kB | 74,8 kB | 6,9 kB | 1 | 110,6 kB | 25,8 kB |
Qué lo mantiene liviano:
- Sin framework: el marco de calculadoras, los gráficos y el tablero son código propio sin dependencias.
- Cada página carga solo su script, empaquetado y minificado con esbuild: una guía no descarga el código de las calculadoras.
- El índice del buscador se descarga al abrir el buscador por primera vez, y los widgets cuando aparecen en la página.
- KaTeX no se ejecuta en el navegador. Su hoja de estilos se carga solo en las páginas con fórmulas.
- Tipografías WOFF2 con subconjuntos por
unicode-rangeyfont-display: swap: el texto se muestra de inmediato aunque la tipografía no haya llegado. - Los gráficos se dibujan en SVG y se vuelven a dibujar solo cuando cambia el ancho del contenedor, con una espera de 80 ms.
- La compresión gzip o brotli la aplica el servicio de alojamiento; la columna de la derecha muestra el peso que viaja con gzip.
Accesibilidad
El objetivo es WCAG 2.2 nivel AA.
Navegación y estructura
- Enlace para saltar al contenido.
- Contorno de foco visible de 2 píxeles en el color de señal.
- Regiones con nombre, idioma declarado y jerarquía de títulos sin saltos.
Controles nativos
- Los menús son
<details>y el buscador es un<dialog>, de modo que el foco y la tecla Esc funcionan como el navegador espera. - El buscador sigue el patrón de lista de opciones con
aria-activedescendant.
Formularios
- Cada campo tiene su
label, y la ayuda y el error se asocian conaria-describedby. - Los errores marcan el campo con
aria-invalidy se anuncian en una regiónaria-live. - Los resultados de las calculadoras también se anuncian al recalcular.
- Los campos numéricos piden el teclado decimal en el celular y aceptan coma o punto.
Gráficos y figuras
- Cada gráfico tiene nombre accesible y se recorre con el teclado (flechas en los gráficos de líneas, tabulación en los de barras), que muestra el mismo cuadro de información que el puntero.
- Cada gráfico tiene debajo su tabla de datos equivalente. Los minigráficos de los indicadores acompañan un valor que ya está escrito.
- Los diagramas SVG llevan título y descripción.
- El color nunca es el único portador de información: los estados llevan texto y las series, leyenda.
Contenedores con desplazamiento
- Las tablas, fórmulas, figuras y bloques de texto que no entran en el ancho disponible se vuelven navegables con el teclado y se anuncian como regiones con nombre.
- Esto pasa solo cuando desbordan, para no agregar paradas de tabulación innecesarias.
Movimiento, ampliación e impresión
- La animación de entrada se desactiva con la preferencia de movimiento reducido.
- El diseño se reacomoda en una columna hasta el 400 % de ampliación sin desplazamiento horizontal de la página.
- La hoja de impresión deja solo el contenido, para guardar informes de calculadoras como PDF.
Contraste. Se verifica en la compilación con la tabla del sistema de diseño.
Diseño adaptable
El diseño se construye con grillas fluidas (minmax(0, 1fr)) y cortes en los anchos donde el contenido lo pide, no en tamaños de dispositivos:
| Ancho | Cambio |
|---|---|
| ≤ 1180 px | Indicadores del tablero en tres columnas |
| 1021 a 1199 px | Se oculta el atajo Ctrl K, para que entre la navegación completa |
| ≤ 1080 px | Guías en una columna: las guías relacionadas pasan arriba y el índice lateral se oculta. Gráficos del tablero de a dos |
| ≤ 1020 px | La navegación se pliega en el botón de menú |
| ≤ 960 px | Calculadoras en una columna: datos arriba y resultados abajo |
| ≤ 900 px | Portada en una columna; pie en dos columnas |
| ≤ 860 px | Bloques divididos y texto del kit en una columna |
| ≤ 760 px | Gráficos del tablero a ancho completo |
| ≤ 640 px | Lista de artículos en una columna |
| ≤ 600 px | Indicadores del tablero en dos columnas |
| ≤ 520 px | Menús en una columna; se oculta el subtítulo de la marca y «MODO» pasa a una línea chica arriba de «CONFIABILIDAD» |
En pantallas angostas se aplican además estos criterios:
- Las tablas anchas, las fórmulas largas y los diagramas se desplazan dentro de su propio contenedor; la página nunca se desplaza en horizontal.
- Los diagramas conservan un ancho mínimo legible en lugar de achicar el texto.
- Los gráficos se vuelven a dibujar con el ancho real y recalculan sus marcas de escala, no se escalan como una imagen.
- Los controles miden al menos 32 píxeles de alto, por encima del mínimo de 24 de WCAG 2.2.
- El área segura de las pantallas con muesca se respeta con
viewport-fit=cover.
Benchmark
Las referencias del pliego se agruparon por tipo. La tabla describe lo que cada tipo de referencia hace bien y qué se tomó de eso; no evalúa a cada sitio en particular.
| Tipo de referencia | Ejemplos del pliego | Lo que hacen bien | Lo que se tomó | La diferencia buscada |
|---|---|---|---|---|
| Comunidades y publicaciones técnicas | Reliabilityweb, Accendo Reliability, Plant Services, Maintenance.org | Volumen y frecuencia de publicación, voces de la práctica, archivo por tema | Blog por series, autoría visible, artículos cortos que llevan a una guía | Guías en español con estructura fija, fórmulas con fuente y cálculo verificado junto al texto |
| Asociaciones profesionales | SMRP, IAM | Cuerpos de conocimiento, definiciones normalizadas de indicadores, certificación | Definición explícita de cada indicador con su fórmula y su norma; mapa de normas | Acceso abierto, con la definición, el cálculo y el ejemplo en el mismo lugar |
| Formación especializada | ARMS Reliability, Mobius Institute | Rutas de aprendizaje por rol, ejercicios, certificaciones | Rutas por perfil, ejercicios con respuesta y casos | Ejercicios que se resuelven con las calculadoras del propio sitio |
| Software de gestión de mantenimiento | Fiix, UpKeep, Limble | Interfaces simples, tableros de indicadores, plantillas listas | Tablero de ejemplo y plantillas descargables | Sin producto que vender: el modelo de datos y las medidas DAX se entregan abiertos y verificados |
| Plataformas de gestión de activos | IBM Maximo, SAP | Modelos de datos de órdenes de trabajo, jerarquías de activos y códigos de falla | Modelo estrella de órdenes y paradas con códigos de ISO 14224 | Independiente de la plataforma: CSV, Power Query y DAX |
| Fabricantes y monitoreo de condición | SKF, Emerson, ABB Ability | Notas de aplicación y manuales técnicos de sus tecnologías | Vida de rodamientos según ISO 281, dimensionamiento de válvulas según IEC 60534 y señales NAMUR NE 43 | Métodos neutrales respecto del proveedor |
En conjunto, Modo Confiabilidad ocupa un lugar que ninguna de estas referencias cubre sola:
- contenido técnico en español, con la profundidad de una norma;
- cálculo verificado y abierto;
- modelos que muestran la incertidumbre, no solo el valor medio.
Auditoría
La revisión final se hizo desde los cinco roles que define el pliego, con las herramientas automáticas como evidencia. Cada observación se corrigió en el código antes de publicar.
Observaciones y correcciones
| Rol | Observación | Corrección |
|---|---|---|
| Director global de confiabilidad | La guía de OEE era la más breve y no distinguía la disponibilidad del OEE de la disponibilidad de un estudio de confiabilidad | Se agregaron las seis grandes pérdidas con ejemplos de planta de proceso, la diferencia entre ambas disponibilidades y un ejemplo de proceso continuo con todos sus cálculos |
| Director global de confiabilidad | El símbolo de la calculadora de disponibilidad operacional usaba un subíndice cero en lugar de la letra o | Corregido a «Ao» |
| Director de gestión de activos | La documentación no mostraba la correspondencia entre cada requisito del pliego y la página que lo cumple | Se agregó la tabla de trazabilidad, y la compilación controla las ocho secciones de cada guía |
| Director de operaciones | La guía de indicadores y el laboratorio describían el tablero con dos años de datos, pero el historial es de 36 meses | Textos corregidos; el laboratorio separa ahora el tablero y el kit en su propia sección |
| CTO | Sin política de seguridad de contenidos | CSP sin unsafe-inline para scripts (el único script en línea va autorizado por hash) y cabeceras de seguridad. Cero violaciones con las cabeceras aplicadas |
| CTO | CSS y JavaScript sin huella de versión con caché de siete días: tras una actualización podían mezclarse archivos de versiones distintas | Revalidación en cada visita para CSS y JavaScript; caché larga solo para tipografías y KaTeX |
| CTO | La página 404 perdía estilos y enlaces al servirse en una dirección inexistente con subcarpetas | <base> con la raíz del sitio, solo en esa página |
| CTO | robots.txt bloqueaba la documentación, que además lleva noindex: el buscador nunca vería esa indicación |
Se quitó el bloqueo y se mantiene noindex |
| CTO | og:image apuntaba a un archivo que no existía, y siete títulos superaban los 70 caracteres |
Imagen para redes propia de cada página; título corto para buscadores en esas siete páginas |
| Responsable de UX | En el celular, cinco calculadoras desplazaban la página entera de costado: los textos para lectores de pantalla y el MathML de KaTeX escapaban de sus contenedores. A 320 píxeles no entraba el encabezado | Contenedores con desplazamiento posicionados, fieldset sin ancho mínimo, encabezado compacto, cortes de palabras largas y del código en línea. Ninguna página se desplaza en horizontal entre 320 y 1366 píxeles |
| Responsable de UX | Entre 1021 y unos 1090 píxeles de ancho, el encabezado desplazaba la página de costado: la navegación completa no entraba junto al subtítulo de la marca | Frase de la marca más corta y, entre 1021 y 1199 píxeles, sin el atajo Ctrl K; la auditoría suma una pasada a 1024 píxeles |
| Responsable de UX | En pantallas angostas había textos que se pisaban: el panel de datos de las calculadoras anchas tapaba el comienzo de los resultados, y en los gráficos chocaban rótulos de referencia vecinos, valores negativos con el nombre de su variable y marcas de los ejes. Los nombres largos de las barras horizontales quedaban cortados | Panel de datos sin desplazamiento fijo cuando no hay columna lateral; rótulos de gráficos medidos y ubicados sin choques, nombres arriba de la barra cuando no entran al costado. Un detector recorre todas las páginas en seis anchos |
| Responsable de UX | Las lecturas del instrumento de inspección P-F se veían en dos columnas comprimidas dentro de la guía | La regla general de listas de definición ya no afecta a los instrumentos |
| Responsable de UX | Tarjetas huérfanas al final de las grillas | Las tarjetas de la última fila se estiran hasta completar el ancho |
| Responsable de UX | Esc no cerraba el buscador si había texto escrito | Esc cierra el buscador y devuelve el foco al botón que lo abrió |
| Responsable de UX | 114 resultados generados por JavaScript separaban número y unidad con un espacio común | Espacio de no separación, como en el texto |
| Responsable de UX | La primera pasada de axe-core marcó 22 combinaciones de regla y configuración. Entre ellas: rectángulos con nombre sin rol en los gráficos, la matriz de criticidad sin filas, encabezados vacíos, un salto de nivel de título, regiones con el mismo nombre, objetivos táctiles chicos, enlaces dentro de una imagen y la lista del buscador mal anidada | Roles y nombres corregidos en gráficos, matriz, mapa del conocimiento y buscador; encabezados con texto; regiones con el nombre de su sección; objetivos de 24 píxeles |
Verificación automática
| Herramienta | Alcance | Resultado |
|---|---|---|
| Pruebas numéricas | Modelos de calculadoras, laboratorio y tablero | 104 superadas, 0 fallidas |
| html-validate 8.24, reglas recomendadas | 59 páginas | 0 errores |
| axe-core 4.10: WCAG 2.0, 2.1 y 2.2 niveles A y AA, más buenas prácticas | 59 páginas en tema claro, tema oscuro y celular | 0 violaciones |
| axe-core en estados interactivos | Buscador abierto y cerrado, menú móvil, menú desplegable, error de datos, filtros del tablero, gráfico recorrido con el teclado | 0 violaciones |
| Consola y política de seguridad | 59 páginas en cinco configuraciones, con las cabeceras de _headers |
0 errores, 0 violaciones |
| Reflujo a 320 píxeles (400 % de ampliación) | 59 páginas | Sin desplazamiento horizontal |
| Escritorio angosto, 1024 píxeles | 59 páginas | Sin desplazamiento horizontal |
| Textos superpuestos o cortados | 59 páginas en seis anchos, de 320 a 1600 píxeles | 0 casos |
| Enlaces, anclas y recursos | 59 páginas | 0 problemas |
| Sitio abierto desde el disco, sin servidor | 13 calculadoras, 6 módulos, tablero, widgets y buscador | Funcionan, sin errores |
| Prueba de humo | 13 calculadoras y 6 módulos con todos sus ejemplos, y el tablero con filtros y orden | Sin errores |
Lo que falta verificar en producción
La auditoría automática no reemplaza tres controles que conviene hacer después de publicar:
- Lector de pantalla. Recorrer una guía, una calculadora y el tablero con NVDA y VoiceOver.
- Dispositivos reales. Probar en un teléfono Android de gama media y en un iPhone.
- Rendimiento con el alojamiento definitivo. Medir con Lighthouse o WebPageTest, con la compresión y la red de distribución del servicio elegido.