Glosario¶
Términos que aparecen en el código, en los contratos y en la documentación del sistema. Cuando un término tiene una fuente de verdad en el código, se indica.
Dominio industrial y AAS¶
- AAS — Asset Administration Shell
- Representación digital normalizada de un activo industrial (IEC 63278-1:2023, IDTA-01002). Describe el activo como un conjunto de submodelos con propiedades semánticas. En este sistema, el modelo AAS de la embolsadora lo mantiene el historian.
- Submodelo (submodel)
- Agrupación de propiedades dentro de un AAS. En la embolsadora:
Operativos,Alarmas. - Colección (collection)
- Agrupación intermedia dentro de un submodelo. Ejemplos:
Pesada,Produccion. aasPath-
- Identificador semántico de una variable, con forma
Submodelo/Colección/Propiedad - (p. ej.
Operativos/Pesada/peso) oSubmodelo/Propiedadcuando no hay colección - (
Alarmas/paradaEmergencia). Es el contrato transversal más frágil del sistema: atraviesa - los cuatro repos y hoy no tiene validación automática. Ver
integraciones/catalogo-variables.md.- Fuente de verdad:
proyecto-embolsadora/src/historian/aas_mapping.yaml.
- Identificador semántico de una variable, con forma
- Catálogo canónico
proyecto-embolsadora/runtime/catalog.jsonycatalog.md, generados desdeaas_mapping.yaml. Es la lista de variables que el sistema puede producir.- Catálogo observado
- Lo que devuelve
GET /api/v1/dashboards/metrics/catalogdel Cloud: losaasPathque ya fueron vistos para una máquina. No sirve para validar, porque solo refleja lo que ya fluyó: tras renombrar una propiedad sigue mostrando el nombre viejo. - FA³ST
- Servidor AAS de código abierto (Eclipse FA³ST) que corre en la Raspberry Pi y sirve el modelo AAS por HTTP en el puerto 8081. Hoy no tiene consumidores en el sistema.
- Historian
- El middleware Python de
proyecto-embolsadora: lee el PLC por Modbus, escribe en InfluxDB y actualiza el modelo AAS. Pertenece a una tesis de maestría distinta del Proyecto Final. - Modbus TCP
- Protocolo industrial con el que el historian lee los registros del PLC. Solo lectura: el sistema no escribe nunca hacia el PLC.
- PLC
- Controlador lógico programable de la máquina embolsadora. Su programación está fuera del
alcance del proyecto. Hoy el stack local usa un mock (
MODBUS_HOST=mock).
Arquitectura del sistema¶
- BFF — Backend for Frontend
-
- Capa de rutas del lado servidor en Next.js (
src/app/api/**) que el navegador consume. El - navegador nunca llama directo a la Cloud API: el BFF inyecta el
Authorization: Bearery - el
X-Tenant-ID. - Fuente de verdad:
embolsadora-frontend/src/lib/backend-fetch.ts.
- Capa de rutas del lado servidor en Next.js (
- Edge Pi Service
- El servicio Go de
embolsadora-edgeque corre en la Raspberry Pi. Expone endpoints de estado hacia el Cloud y reenvía eventos desde InfluxDB hacia el Cloud. - Superficie ABM
/api/v1/**de la Cloud API. Autenticación JWT + RBAC + tenant. Gestión de usuarios, tenants, roles, dispositivos.- Superficie de ingesta (consumers)
/api/v1/consumers/**de la Cloud API. Autenticación por API key, sin JWT y sin header de tenant. Es la que consume el Edge. Su contrato de respuesta y sus códigos de error son un contrato congelado.- Tenant
- Cliente del sistema (una empresa que opera embolsadoras). Todo dato de negocio está particionado por tenant. MRG tiene un tenant de plataforma con capacidad cross-tenant.
- Cross-tenant
- Capacidad de ciertos roles de plataforma (MRG) de operar sobre datos de cualquier tenant.
Resiliencia e ingesta¶
- Outbox
- Tabla SQLite local en la Pi donde el Edge encola los eventos antes de enviarlos al Cloud. Permite seguir capturando datos si se cae el enlace. Buffer de al menos 24 horas.
- Watermark
- Marca de tiempo del último punto de InfluxDB ya procesado por el Edge. Permite reanudar sin duplicar ni perder datos tras un reinicio.
SAFETY_LAG- Retardo que el Edge aplica al leer InfluxDB, para no leer puntos que todavía están llegando.
- Idempotencia
- Garantía de que reenviar el mismo lote no duplica datos. Se implementa con un header
Idempotency-Keypor lote y uneventIdúnico por evento, con índice único en MongoDB. - Dead-letter
- Destino de los eventos que agotaron sus reintentos. El Edge emite además un evento de tipo
alarmidempotente para que el problema sea visible. - Fail-open
- Comportamiento de degradación en el que un componente caído no bloquea la operación. En este sistema, Redis: si no responde, el rate limiting deja de aplicarse pero la API sigue funcionando.
- Degradación aislada
- Que la caída de un componente afecte solo a su funcionalidad. MongoDB caído degrada la ingesta y los dashboards, pero el login y el ABM siguen funcionando.
schemaVersion- Versión del formato de cada evento de ingesta. Permite cambios incompatibles con período de convivencia, necesario porque las Raspberry Pi se actualizan después que el Cloud.
Seguridad¶
- JWKS
- Conjunto de claves públicas que publica Supabase y que la Cloud API usa para verificar la firma de los JWT. El verificador admite solo ES256 y RS256, y el proyecto firma con ES256. Si JWKS no responde, la API devuelve 503.
- Auto-provisioning
- Alta automática del usuario en la base local la primera vez que llega con un JWT válido.
Es idempotente (
ON CONFLICT (supabase_user_id)). - RBAC dinámico
- Los permisos de cada rol se leen de la base de datos, no de un mapa fijo en el código, lo que permite roles personalizados por tenant.
- API key de dispositivo
- Credencial por edge device con la que el Edge se autentica contra la superficie de ingesta. Se guarda hasheada en Postgres y en texto plano solo en la Pi.
Proceso y documentación¶
- ADR — Architecture Decision Record
- Registro de una decisión difícil de revertir. Formato MADR, un archivo por decisión,
inmutable. Prefijo
SYS-para decisiones de sistema (en este repo) yFE-,CLOUD-,EDGE-,HIST-para decisiones de componente (en cada repo). - Diátaxis
- Marco que divide la documentación según la necesidad del lector: tutorial, how-to, referencia y explicación.
- arc42
- Plantilla de 12 secciones para documentar arquitectura. Acá se usa en versión liviana.
- C4
- Modelo de diagramas de arquitectura en cuatro niveles: contexto, contenedores, componentes y código. Se usan los niveles 1 y 2 para el sistema y el 3 solo donde aporta.
- Drift check
- Verificación en CI de que un artefacto generado (p. ej. el OpenAPI) sigue correspondiendo al código. El Edge ya lo tiene; es el modelo a replicar.
- Harness documental
- El conjunto mínimo y obligatorio de artefactos de documentación que todo repo de componente
debe tener: su
README, sus ADR, sus especificaciones y su bitácora de alcance.
Organizaciones¶
- M.R.G. Equipamientos S.R.L.
- La empresa fabricante de las máquinas embolsadoras, destinataria de la transferencia tecnológica.
- UTN FRSF
- Universidad Tecnológica Nacional, Facultad Regional Santa Fe.
- TECPRO 2024
- Programa de transferencia tecnológica en cuyo marco se desarrolla el proyecto (Proyecto N.º 125).