Modelo de Entidades
y Flujos
Todas las entidades, relaciones y flujos del sistema Ubiot en un documento interactivo.
Vista General de Entidades
Ubiot gestiona fichajes de empleados a traves de un modelo de entidades interrelacionadas. El diagrama muestra las relaciones principales entre todas las entidades del sistema.
Tenant
Nivel mas alto del sistema. Solo hay uno: Ubiot. Contiene todos los Customers, Assets y Devices.
Customer
Representa un contrato entre el receptor del servicio y la empresa empleadora. Ej: SMS LIMCAMAR.
Empresa Empleadora
Asset tipo EMPRESA_EMPLEADORA. Empresa donde el trabajador tiene su nomina.
Centro de Trabajo
Asset tipo CARD READER. Lugar fisico donde los trabajadores fichan. Pertenece a 1 Customer.
Trabajador
Device Device_<8digitos>. Empleado con DNI, planificacion, tarjetas NFC y codigos telefonicos.
Fichaje
Alarm en el centro. Timestamps de entrada/salida, DNI, tipo de fichaje y datos del lector.
Trabajador (Device)
Cada trabajador es un Device con nombre Device_<8digitos> generado de su DNI/NIE.
Puede tener multiples tarjetas NFC y codigos telefonicos, cada uno asociado a una empresa diferente.
DNI (9 chars):
12345678A → Device_12345678 (primeros 8 digitos)NIE (10 chars):
X1234567A → Device_01234567 (siempre 0 + ultimos 7 digitos)
Tarjetas NFC
- Device tipo
FICHAJES - Codigo hexadecimal unico
- Atributo
empresa_empleadora - Relacion
TarjetaDeEmpresaa la empresa
Codigos Telefonicos
- Device con numero de 9 digitos
- Atributo
empresa_empleadora - Relacion
UsesCodigoTelefonico - Identifica centro + empresa
Centro de Trabajo (Asset)
Los centros son Assets tipo CARD READER. Cada centro pertenece a exactamente un Customer y esta asociado a una empresa empleadora.
Estructura del Fichaje (Alarma)
Los fichajes son alarmas (Alarms). Es critico distinguir entre timestamps REALES y PLANIFICADOS.
start_ ni end_ para calculos de horas.
Son horas PLANIFICADAS, no reales. Usar siempre start_raw y endBonus.
endBonus YA incluye el bonus sumado — no hay que sumar nada extra
Prioridad INICIO
start_raw(fichaje real NFC)startBonusstartTs/createdTime- NUNCA
start_
Prioridad FIN
endBonus(real + bonus)end_raw(salida real)endTs- NUNCA
end_
Tipos de Fichaje
- NFC: reader = hex, nfc_in=true
- Telefonico: reader = 9 digitos
- SQT: type contiene _Simple
- Manual: manual=true
Sistema de Bonus
current_bonus = horas decimales (0.75 = 45min). Se SUMA a end_raw para generar endBonus. El calculo es simplemente endBonus - start_raw.
Mapa de Relaciones
Todas las relaciones del sistema con sus cardinalidades. Las lineas muestran el tipo de relacion y la direccion.
Detalle de cada relacion
| Relacion | Desde → Hacia | Card. | Descripcion |
|---|---|---|---|
| Contains | Centro → Trabajador | N:M | El centro contiene al trabajador (pertenencia) |
| Contains | Delegacion → Trabajador | 1:N | La delegacion agrupa trabajadores |
| Contains | Trabajador → Tarjeta NFC | 1:N | El trabajador posee tarjetas NFC |
| CentroDeEmpresa | Empresa → Centro | 1:N | El centro pertenece a una empresa empleadora |
| TarjetaDeEmpresa | Tarjeta NFC → Empresa | N:1 | La tarjeta NFC esta asociada a una empresa |
| UsesCodigoTelefonico | Trabajador → Cod. Tel. | 1:N | El trabajador usa codigos telefonicos |
| customerId | Centro → Customer | N:1 | Propiedad del asset (no relacion TB) |
| originator | Centro → Fichaje | 1:N | Los fichajes se crean como alarmas en el centro |
Modelo Multiempresa
Varias empresas empleadoras pueden operar en el mismo edificio fisico. Cada una tiene su propio centro en Ubiot. La tarjeta NFC determina a que centro se asigna el fichaje.
Customer = Contrato
Cada Customer = contrato entre receptor + empresa empleadora. SMS LIMCAMAR = Serv. Murciano de Salud con LIMCAMAR.
Un lector, multiples centros
Un unico lector NFC fisico puede servir a multiples centros. La tarjeta determina el centro mediante la empresa asociada.
Flujo de Fichaje NFC
El fichaje NFC es el metodo principal. El trabajador pasa su tarjeta, el sistema identifica la empresa, busca el centro y crea el fichaje con indices.
Flujo de Fichaje Telefonico
El trabajador ficha llamando a un numero de 9 digitos. El numero identifica centro y empresa; el telefono del trabajador lo identifica a el.
reader es un numero de 9 digitos.
Sistema de Indices de Telemetria
Ubiot mantiene indices fichaje_idx en tres ubicaciones para busquedas rapidas bidireccionales.
Indice en Centro
Responde: Quien ficho aqui hoy? Almacena alarmId, dni, nombre.
Indice en Trabajador
Responde: Donde ficho este trabajador? Almacena alarmId, centroId, centroNombre.
Indice Global
Responde: Todos los fichajes. Asset RegistroGlobalFichajes con datos combinados.
Sistema de Permisos
Cada usuario tiene permisos basados en filtros intersectivos: un centro es visible solo si cumple los tres criterios.
Roles de Usuario
Dos roles principales: Admin Ubiot (multiples empresas) y Gestor de Empresa (una empresa).
Admin Ubiot
- Gestiona MULTIPLES empresas empleadoras
- Ve TODOS los centros del tenant
- Ve TODOS los clientes y trabajadores
- Configura permisos de otros usuarios
- Wizard de permisos completo
- Acceso a TODAS las provincias
Gestor de Empresa
- Gestiona UNA empresa empleadora
- Ve SOLO centros de su empresa
- Ve SOLO clientes y trabajadores de su empresa
- NO puede cambiar permisos de otros
- Puede crear/editar fichajes de sus centros
- Puede gestionar planificaciones
Tabla de Entidades y Atributos
Detalle completo de atributos por entidad.
Trabajador (Device)
| Atributo | Tipo | Descripcion |
|---|---|---|
| Device Name | Device_<8dig> | Ej: Device_12345678 |
| Tipo | Personal Fichajes DNI | Tipo de device |
| Nombre | String | Nombre completo del trabajador |
| Dni. Trab. | String | DNI o NIE con letra |
| C. Trab. | String | Codigo interno del trabajador |
| Empresa | String | Array | "00001 LIMCAMAR" o ["00001 LIMCAMAR","00003 CONCAMAR"] |
| Delegacion | String | Codigo delegacion (DEL28, DEL30...) |
| Rol | String | Limpiador, Supervisor, etc. |
| worker_schedule | JSON | Horarios por centro y dia de la semana |
| turnos_nocturnos | JSON | Configuracion de turnos nocturnos |
Centro de Trabajo (Asset)
| Atributo | Tipo | Descripcion |
|---|---|---|
| Asset Name | String | Ej: "Hospital Rosell - LIMCAMAR" |
| Tipo | CARD READER | Tipo de asset |
| label | String | Nombre corto (ej: "Hospital Rosell") |
| cod_province | String | Codigo provincia (30=Murcia, 03=Alicante...) |
| name_province | String | Nombre de la provincia |
| cod_empresa | String | Codigo empresa empleadora |
| code_asset | String | Codigo interno del asset |
| cod_center | String | Codigo del centro |
| Delegado | String | Nombre del delegado asignado |
| Encargado | String | Nombre del encargado asignado |
| horas_objetivo_semanales | Number | Horas objetivo por semana |
| horas_objetivo_anual_json | JSON | Horas objetivo desglosadas por mes |
| estado_centro | String | Operativo / No disponible / Incidencia / Otro |
| observaciones_centro | String | Observaciones de texto libre |
| justificantes_centro | JSON | Documentos justificantes por mes |
Empresa Empleadora (Asset)
| Atributo | Tipo | Descripcion |
|---|---|---|
| Asset Name | String | Ej: "LIMCAMAR" |
| Tipo | EMPRESA_EMPLEADORA | Tipo de asset |
| cod_empresa | String | Codigo de 5 digitos (00001, 00003...) |
| nombre | String | Nombre corto |
| razon_social | String | Razon social completa |
| activo | Boolean | Si la empresa esta activa |
Customer (Cliente / Contrato)
| Atributo | Tipo | Descripcion |
|---|---|---|
| title | String | Nombre del contrato (ej: "SMS LIMCAMAR") |
| cod_cliente | String | Codigo unico del cliente |
| cif | String | CIF/NIF de la empresa receptora |
| telefono | String | Telefono de contacto |
| direccion | String | Direccion |
Tarjeta NFC (Device)
| Atributo | Tipo | Descripcion |
|---|---|---|
| Device Name | String | Codigo hexadecimal de la tarjeta |
| Tipo | FICHAJES | Tipo de device |
| empresa_empleadora | String | "00001 LIMCAMAR" (codigo + nombre) |
Codigo Telefonico (Device)
| Atributo | Tipo | Descripcion |
|---|---|---|
| Device Name | String | Numero de 9 digitos |
| empresa_empleadora | String | "00001 LIMCAMAR" (codigo + nombre) |
Fichaje (Alarm)
| Atributo | Tipo | Descripcion |
|---|---|---|
| type | String | "Device_<DNI>" del trabajador |
| originator | Entity ID | ID del centro (Asset) |
| severity | String | CRITICAL |
| startTs | Timestamp (ms) | Inicio del fichaje |
| endTs | Timestamp (ms) | Fin del fichaje |
| createdTime | Timestamp (ms) | Cuando se creo (inmutable) |
| start_raw | String (seg) | Hora REAL de entrada (NFC) |
| end_raw | String (seg) | Hora REAL de salida |
| endBonus | Number (seg) | Hora de salida CON bonus sumado |
| current_bonus | String | Valor del bonus en horas decimales |
| dni | String | DNI del trabajador |
| nombre | String | Nombre del trabajador |
| reader | String | ID del lector (hex NFC o 9 dig. tel) |
| manual | Boolean | Si es fichaje manual |
Usuario (User)
| Atributo | Tipo | Descripcion |
|---|---|---|
| String | Email del usuario | |
| provincias_permitidas | Array | Codigos de provincia permitidos |
| empresas_permitidas | Array | Codigos de empresa permitidos |
| clientes_permitidos | Array | IDs de clientes permitidos |
| centros_excepciones_add | Array | IDs de centros extra permitidos |
| centros_excepciones_remove | Array | IDs de centros excluidos |
Tickets y Peticiones
Crea peticiones, reporta dudas o solicita cambios en la estructura de entidades. Arrastra las tarjetas entre columnas para cambiar su estado.