Camada Bronze
A camada Bronze contém dois esquemas de dados distintos, cada um atendendo a diferentes aspectos da plataforma de telemática e inteligência de negócios:
raw_business_data - contendo tabelas, atributos e valores relacionados às informações de negócios, como veículos, funcionários, geocercas adicionadas por usuários, etc.
raw_telematics_data - contendo tabelas, atributos e valores relacionados aos dados telemáticos transmitidos por dispositivos em monitoramento, tais como localizações, entradas, saídas e eventos.
Cada esquema é otimizado para seu domínio de dados específico e padrões de acesso, fornecendo cobertura abrangente das necessidades operacionais, telemáticas e de gerenciamento de ativos.
raw_business_data estrutura
raw_business_data estruturaEste esquema contém mais de 40 tabelas cuidadosamente selecionadas para cobrir vários aspectos de negócios e casos de uso. Essas tabelas representam suas entidades principais de negócio, estrutura organizacional e dados operacionais.
O diagrama interativo do esquema raw_business_data está disponível em dbdiagram.io: https://dbdiagram.io/d/V3-bronze-layer-68ecfd1c2e68d21b4131089a
Consulte os detalhes do esquema raw_business_data abaixo.
Frequência de atualização
Os dados neste esquema são sincronizados com o DB principal. Atualizações ocorrem incrementalmente conforme mudanças acontecem no banco de dados MySQL de origem, tipicamente em menos de 5 minutos a partir da alteração na origem.
description_parameters
description_parametersO sistema inclui dados de referência para padronizar valores em todo o banco de dados:
Definições de tipo
Tipos de entidade padrão
vehicle_type: car, truck, bus
Códigos de status
Valores de status de tarefa e do sistema
tasks_status: unassigned, assigned, done
Definições de unidade
Unidades de medida para sensores
units_type: liter, gallon, celsius
Classificações de entidade
Categorias de entidade de negócio
entities_type: place, task, customer
Tabelas principais por categoria
As tabelas no raw_business_data esquema são organizadas em categorias funcionais para facilitar a navegação. A tabela abaixo resume as tabelas principais pelo seu propósito de negócio:
Entidades centrais de negócio
users
Descrição: Contas de usuário contendo informações de perfil, vínculo à empresa, configurações de localização (fuso horário, localidade) e relacionamentos hierárquicos via master_id para estruturas de conta multinível
Campos-chave
- user_id - Identificador único do usuário
- company_label - Nome da empresa associada ao usuário
- first_name - Nome de usuário
- last_name - Sobrenome do usuário
- middle_name - Segundo nome do usuário
- locale - Configurações de idioma do usuário
- timezone_label - Fuso horário em formato IANA
- master_id - ID do usuário primário (se o atual for subordinado)
- registration_datetime - Data de registro no sistema
- birth_date - Data de nascimento do usuário
Relacionamentos
Usuário pai via master_id, vinculado a employees, departments, places, tasks através de user_id
Observações especiais
Entidade central que conecta dados organizacionais; master_id habilita hierarquias de usuários para estruturas de conta multinível
employees
Descrição: Registros de empregados e motoristas usados para representar pessoas que trabalham para a organização, incluindo informações pessoais, dados de habilitação, atribuições de departamento, chaves de hardware para identificação iButton/RFID e dados de localização com suporte a geofencing
Campos-chave
- employee_id - Identificador da entidade empregado
- user_id - Identificador da entidade usuário
- object_id - Identificador da entidade objeto
- department_id - ID do departamento ao qual o empregado está atribuído
- first_name - O atributo first_name da tabela employees
- last_name - O atributo last_name da tabela employees
- middle_name - O atributo middle_name da tabela employees
- driver_license_number - Número da carteira de motorista
- driver_license_categories - Categorias da carteira de motorista
- driver_license_issue_date - Data de emissão da carteira de motorista
- driver_license_valid_till - Data até a qual a carteira de motorista é válida
- hardware_key - Uma chave de hardware
- email - Email do empregado
- phone_number - Telefone do empregado sem o sinal "+"
- address - Endereço do local
- personnel_number - Número de pessoal do empregado/motorista
- citizen_id_number - Número de documento nacional
- latitude - Localização associada a este empregado
- longitude - Localização associada a este empregado
- radius - Localização associada a este empregado em metros
- fuel_consumption - O atributo fuel_consumption da tabela employees
- fuel_cost - O atributo fuel_cost da tabela employees
- is_deleted - O atributo is_deleted da tabela employees
Relacionamentos
Ligação a users, departments, objects (rastreadores atribuídos), rastreados em driver_history e checkins
Observações especiais
A chave de hardware permite identificação do motorista via iButton ou RFID; suporta geofencing com latitude, longitude, radius campos
departments
Descrição: Unidades organizacionais com dados geográficos (latitude, longitude, raio) permitindo análises baseadas em geofences para relatórios em nível de departamento e associação de localização de empregados
Campos-chave
- department_id - Identificador da entidade departamento
- user_id - Identificador da entidade usuário
- department_label - O atributo department_label da tabela departments
- latitude - Localização associada a este departamento
- longitude - Localização associada a este departamento
- radius - Tamanho da geolocalização em metros
- address - O atributo address da tabela departments
Relacionamentos
Vincula empregados à estrutura organizacional através de department_id
Observações especiais
Campos de localização suportam análises baseadas em geofences para relatórios em nível de departamento
Rastreamento e monitoramento
devices
Descrição: Registro de dispositivos físicos de rastreamento com identificadores de hardware (IMEI), informações do cartão SIM, status de conectividade de rede (força do sinal, roaming, operadora) e listagem de status para gerenciamento do ciclo de vida do dispositivo
Campos-chave
- device_id - ID do dispositivo
- owner_id - ID do proprietário do dispositivo na conta em que o beacon foi adicionado
- device_imei - IMEI do dispositivo
- phone - Número do cartão SIM do dispositivo
- status_listing_id - ID de status do dispositivo
- network_label - Nome da rede à qual o cartão SIM está conectado
- signal_level - Força do sinal do dispositivo
- has_roaming - Indicador de disponibilidade de roaming
- is_sim_blocked - Indicador de bloqueio do SIM
- created_at - Data e hora em que o registro foi criado
Relacionamentos
Entidade principal vinculando a objects, models, sensor_description, counters; owner_id references users.user_id
Observações especiais
Todos os dados telemáticos em raw_telematics_data esquema referenciam esta tabela via device_id
objects
Descrição: Registro central de entidades monitoradas (veículos, ativos, pessoal) vinculando dispositivos físicos à estrutura organizacional através de client_id e group_id, representando a "unidade rastreável" com um objeto ativo por dispositivo
Campos-chave
- object_id - Identificador da entidade objeto
- client_id - Identificador da entidade cliente
- device_id - Identificador da entidade dispositivo
- object_label - Nome do objeto
- model - Modelo do dispositivo
- group_id - ID do grupo de entidade
- create_datetime - Data e hora da criação de uma nova linha no servidor
- is_deleted - O atributo is_deleted da tabela objects
- is_clone - Indicador de clone
Relacionamentos
Hub central conectando dispositivos a usuários (client_id), detalhes do veículo, histórico de rastreamento, tarefas e regras
Observações especiais
Representa a "unidade rastreável" no sistema; um objeto por dispositivo em uso ativo
models
Descrição: Registro central de entidades monitoradas (veículos, ativos, pessoal) vinculando dispositivos físicos à estrutura organizacional através de client_id e group_id, representando a "unidade rastreável" com um objeto ativo por dispositivo
Campos-chave
- model_id - Identificador do modelo da entidade
- model - O atributo model da tabela models
- vendor - Nome da empresa que lançou o rastreador
- alternative_label - O atributo alternative_label da tabela models
- analog_amount - Número de entradas analógicas do rastreador
- digital_amount - Número de entradas discretas do rastreador
- outputs_amount - Número de saídas discretas do rastreador
- has_battery_level - Determina se o rastreador transmite leituras de carga da bateria
- has_altitude - Determina se o rastreador transmite altitude
- has_phone - Há um cartão SIM?
- has_gsm_level - Um rastreador pode transmitir a força do sinal GSM?
- has_gsm_name - O rastreador pode transmitir o nome da rede GSM ou código da operadora (MCC + MNC)?
- has_gsm_roaming - O rastreador pode transmitir o status de roaming?
- has_detach_button - O rastreador possui um sensor de destacamento?
- type_output_control - Perfil de controle de saída do rastreador
- type_special_control - Contém configurações especializadas e módulos funcionais para modelos de dispositivo individuais, como o modo de condução perigosa (hbm_telfm) para equipamentos Teltonika
- is_clone - O modelo é um clone de outro modelo?
Conteúdo
Flags booleanas de capacidade indicam quais campos de dados estão disponíveis para este tipo de dispositivo
Observações especiais
Use flags de capacidade para determinar sensores e entradas válidos ao consultar dados telemáticos
sensor_description
Descrição: Configuração abrangente de sensores vinculando entradas do dispositivo à lógica de negócio, incluindo mapeamentos de entrada, unidades de medida, fatores de conversão (multiplicador/divisor), tabelas de calibração para sensores de combustível, limites de precisão e lógica de agrupamento para leituras agregadas de sensores
Campos-chave
- sensor_id - Identificador da entidade sensor
- device_id - Identificador da entidade dispositivo
- sensor_label - Nome do sensor para a IU
- input_label - O nome do campo da mensagem (atributo) de onde os dados do sensor são obtidos. Se igual a "input_status", é um sensor discreto
- sensor_type - Tipo de sensor
- units_type - Unidades de medida
- multiplier - Multiplicador - o número pelo qual multiplicar o valor do campo. Apenas para sensores de medição
- divider - Divisor - o número pelo qual dividir o valor do campo. Apenas para sensores de medição
- accuracy - Uma porcentagem especificada para calcular o erro absoluto do volume do tanque. Esse erro é usado para determinar quando estão ocorrendo reabastecimentos ou drenagens. Usado apenas para sensores de combustível
- calibration_data - O atributo calibration_data da tabela sensor_description
- input_id - Número de entrada para sensor discreto
- group_id - Sensores do mesmo tipo com o mesmo group_id e source_id são considerados pertencentes ao mesmo grupo. Seus dados são somados ou promediados, dependendo do valor de group_type. Isso é necessário para sensores agregados. É usado em sensores de medição
- group_type - 0 - somar os valores dos sensores dentro de um grupo, 1 - média
- sensor_units - Nome da unidade inserido pelo usuário se units_type=0 (personalizado)
- parameters - Objeto opcional com parâmetros adicionais parent_ids - array opcional de parent_ids para sensor composto. volume - double. Opcional. Volume para sensor composto. parent_ids - opcional. array de inteiros. Array de parent_ids para sensor composto. volume - opcional. Double. Volume para sensor composto. min - opcional. Double. Valor bruto mínimo aceitável para um sensor. max - opcional. Double. Valor bruto máximo aceitável para um sensor. max_lowering_by_time - opcional. Double. Valor máximo legal de redução por hora. max_lowering_by_mileage - opcional. Double. Valor máximo legal de redução por 100 km. ignore_drains_in_move - opcional. Booleano. Padrão é false. Se true, as drenagens de combustível não serão detectadas durante o movimento. ignore_refuels_in_move - opcional. Booleano. Padrão é false. Se true, os reabastecimentos não serão detectados durante o movimento. refuel_gap_minutes - opcional. Inteiro. Padrão é 5. Tempo em minutos após o início do movimento em que reabastecimentos serão detectados durante o movimento. custom_field_name - opcional. Booleano. Padrão false. O parâmetro determina se o campo input_name é um valor personalizado inserido pelo usuário. Isso faz sentido apenas se o modelo do rastreador tiver o recurso has_custom_fields
Relacionamentos
Vincula entradas do dispositivo (de raw_telematics_data.inputs) à lógica de negócio através de device_id e input_label matching
Observações especiais
calibration_data (JSONB) armazena tabelas de calibração específicas do sensor para sensores de nível de combustível; multiplier e divider converter valores brutos para unidades
Gestão de ativos
vehicles
Descrição: Registro abrangente de veículos contendo especificações (dimensões, peso, capacidade), documentação (VIN, registro, seguro), parâmetros operacionais (consumo de combustível, volume do tanque) e atribuição atual de rastreador via object_id para gerenciamento de frota e rastreamento de conformidade
Campos-chave
- vehicle_id - Identificador da entidade veículo
- user_id - Identificador da entidade usuário
- object_id - Identificador da entidade objeto
- garage_id - Identificador da entidade garagem
- vehicle_label - O atributo vehicle_label da tabela vehicles
- registration_number - Número de registro/placa do veículo
- vin - O atributo vin da tabela vehicles
- manufacture_year - O atributo manufacture_year da tabela vehicles
- fuel_type - O atributo fuel_type da tabela vehicles
- fuel_cost - O atributo fuel_cost da tabela vehicles
- fuel_tank_volume - O atributo fuel_tank_volume da tabela vehicles
- max_speed - O atributo max_speed da tabela vehicles
- model - O atributo model da tabela vehicles
- color - O atributo color da tabela vehicles
- trailer - O atributo trailer da tabela vehicles
- additional_info - O atributo additional_info da tabela vehicles
- vehicle_type - O atributo vehicle_type da tabela vehicles
- vehicle_subtype - O atributo vehicle_subtype da tabela vehicles
- vehicle_status_id - Identificador de entidade status do veículo
- chassis_number - O atributo chassis_number da tabela vehicles
- frame_number - O atributo frame_number da tabela vehicles
- trailer_reg_number - O atributo trailer_reg_number da tabela vehicles
- payload_weight - O atributo payload_weight da tabela vehicles
- payload_height - O atributo payload_height da tabela vehicles
- payload_length - O atributo payload_length da tabela vehicles
- payload_width - O atributo payload_width da tabela vehicles
- passenger_capacity - Número máximo de passageiros
- gross_weight - O atributo gross_weight da tabela vehicles
- standard_fuel_consumption - Consumo médio normal de combustível em litros por 100 km
- fuel_grade - O atributo fuel_grade da tabela vehicles
- wheel_arrangement - O atributo wheel_arrangement da tabela vehicles
- tyre_size - Tamanho do veículo: dimensões e tamanho das rodas
- tyres_number - Número de rodas
- liability_insurance_policy_number - O atributo liability_insurance_policy_number da tabela vehicles
- liability_insurance_valid_till - Data até a qual o seguro de responsabilidade civil é válido
- free_insurance_policy_number - O atributo free_insurance_policy_number da tabela vehicles
- free_insurance_valid_till_date - Data até a qual o seguro gratuito é válido
Relacionamentos
Ligação a objects (rastreador atual), garages (local de serviço), vehicle_service_tasks; rastreado em vehicle_trackers_history
Observações especiais
Campos de dimensão física (payload_length, payload_width, payload_height, gross_weight) suportam análises de planejamento de carga; datas de seguro permitem rastreamento de conformidade
garages
Descrição: Locais de serviço e manutenção com coordenadas geográficas (latitude, longitude, raio), informações de contato para mecânicos e despachantes, permitindo detecção de visitas de serviço baseada em geofence e análise de proximidade
Campos-chave
- garage_id - Identificador da entidade garagem
- user_id - Identificador da entidade usuário
- latitude - Objeto de localização
- longitude - Objeto de localização
- radius - Tamanho da geolocalização em metros
- address - Objeto de localização
- organization_label - ID do depósito
- mechanic_name - Nome do mecânico
- dispatcher_name - Nome do despachante
Relacionamentos
Referenciado por vehicles.garage_id para atribuição de local de serviço
Observações especiais
Campos de localização permitem detecção de visitas de serviço baseada em geofence e análise de proximidade
vehicle_service_tasks
Descrição: Rastreamento de cronograma de manutenção e histórico de serviço com múltiplos tipos de gatilho (baseado em data, baseado em quilometragem, baseado em horas de motor), intervalos recorrentes de tarefas, notificações multicanal (email, SMS, push) e distinção entre eventos de manutenção planejada (is_repeat) e não planejada
Campos-chave
- service_task_id - Identificador da entidade tarefa de serviço
- vehicle_id - Identificador da entidade veículo
- description - O atributo description da tabela vehicle_service_tasks
- status - O valor do status do atributo status
- cost - O atributo cost da tabela vehicle_service_tasks
- start_date - A data e hora associadas ao atributo start_date
- end_date - A data e hora associadas ao atributo end_date
- completion_date - A data e hora associadas ao atributo completion_date
- predicted_datetime - A data e hora associadas ao atributo predicted_datetime
- mileage_limit - O atributo mileage_limit da tabela vehicle_service_tasks
- engine_hours_limit - O atributo engine_hours_limit da tabela vehicle_service_tasks
- start_mileage - O atributo start_mileage da tabela vehicle_service_tasks
- start_engine_hours - O atributo start_engine_hours da tabela vehicle_service_tasks
- mileage_notification_interval - O atributo mileage_notification_interval da tabela vehicle_service_tasks
- engine_hours_notification_interval - O atributo engine_hours_notification_interval da tabela vehicle_service_tasks
- date_notification_interval - Converter um inteiro N para N dias
- mileage_repeat_interval - O atributo mileage_repeat_interval da tabela vehicle_service_tasks
- engine_hours_repeat_interval - O atributo engine_hours_repeat_interval da tabela vehicle_service_tasks
- date_repeat_interval - Converter um inteiro N para N dias
- notification_emails - O atributo notification_emails da tabela vehicle_service_tasks
- notification_sms_phone_numbers - O atributo notification_sms_phone_numbers da tabela vehicle_service_tasks
- is_notification_push_enabled - O atributo is_notification_push_enabled da tabela vehicle_service_tasks
- completion_mileage - O atributo completion_mileage da tabela vehicle_service_tasks
- completion_engine_hours - O atributo completion_engine_hours da tabela vehicle_service_tasks
- is_repeat - O atributo is_repeat da tabela vehicle_service_tasks
- is_unplanned - O atributo is_unplanned da tabela vehicle_service_tasks
- comment - O atributo comment da tabela vehicle_service_tasks
Conteúdo
Suporta três tipos de gatilho: baseado em data, baseado em quilometragem, baseado em horas de motor; configurações de notificação para email, SMS, push
Observações especiais
is_repeat e campos de intervalo permitem cronogramas de manutenção recorrentes; is_unplanned distingue manutenção programada vs. reativa
Localização e roteamento
zones
Descrição: Áreas geofence definindo perímetros virtuais usando círculos ou polígonos para monitoramento de eventos de entrada e saída de veículos/ativos, suportando automação baseada em regras e análises de localização com codificação por cores para diferenciação visual
Campos-chave
- zone_id - Identificador da entidade zona
- client_id - Identificador da entidade cliente
- zone_label - O atributo zone_label da tabela zones
- zone_type - O atributo zone_type da tabela zones
- latitude - Objeto opcional, a caixa delimitadora que pode conter totalmente o resultado retornado
- longitude - Objeto opcional, a caixa delimitadora que pode conter totalmente o resultado retornado
- circle_center_latitude - O atributo circle_center_latitude da tabela zones
- circle_center_longitude - O atributo circle_center_longitude da tabela zones
- radius - Tamanho da geolocalização em metros
- address - O atributo address da tabela zones
- color - O atributo color da tabela zones
Conteúdo
Os tipos de zona incluem círculo, polígono (definido via geofence_points), e classificações de áreas especiais
Relacionamentos
Referenciado por rules2zones, users2zones; vértices do polígono armazenados em geofence_points
Observações especiais
Funções PostGIS podem ser usadas para verificar ponto-em-polígono para análise complexa de geofences
places
Descrição: Pontos de interesse com coordenadas geográficas, definições de raio e suporte extensível a campos personalizados para armazenar informações de contato do cliente e dados específicos do negócio, permitindo integração CRM/ERP via external_id e relatórios baseados em localização
Campos-chave
- place_id - Identificador da entidade place
- user_id - Identificador da entidade usuário
- place_label - O atributo place_label da tabela places
- latitude - Objeto de localização
- longitude - Objeto de localização
- radius - Tamanho da geolocalização em metros
- address - O atributo address da tabela places
- description - O atributo description da tabela places
- external_id - ID para integração com sistemas externos (CRM)
- custom_fields - Campos adicionais
- assigned_datetime - Data e hora da atribuição do ponto de interesse ao usuário
Relacionamentos
Estendido com valores de campos personalizados através de places_text_fields, places_decimal_fields, places_bigint_fields, places_longtext_fields, places_linked_entity_fields
Observações especiais
custom_fields JSONB fornece acesso rápido; tabelas relacionadas permitem filtragem e ordenação por atributos personalizados
geofence_points
Descrição: Coordenadas ordenadas de vértices (campo number determina a sequência) definindo limites de polígonos para formas complexas de geofence, permitindo perímetros geográficos precisos além de zonas circulares simples, usado com PostGIS ST_MakePolygon para operações geométricas
Campos-chave
- zone_id - Um ID da zona à qual este formulário está anexado
- number - Número serial
- latitude - Localização
- longitude - Localização
Relacionamentos
Múltiplos registros por zone_id definem limites do polígono; number campo determina a ordem dos vértices
Observações especiais
Consulta com ORDER BY number para reconstruir o caminho do polígono; use com PostGIS ST_MakePolygon para operações geométricas
Gerenciamento de tarefas e fluxo de trabalho
tasks
Descrição: Atribuições de ordens de serviço com validação de localização (latitude, longitude, raio), janelas de tempo (time_from, time_to), requisitos de duração de visita (stay_duration_minutes, arrival_duration_minutes), estrutura hierárquica via parent_task_id, e acompanhamento de status para gestão de serviço de campo e operações de entrega
Campos-chave
- task_id - Identificador da entidade task
- user_id - Identificador da entidade usuário
- object_id - Identificador da entidade objeto
- parent_task_id - Identificador da entidade parent task
- task_label - O atributo task_label da tabela tasks
- status - O valor do status do atributo status
- task_type - Tipo de tarefa: task, route ou checkpoint
- latitude - O atributo latitude da tabela tasks
- longitude - O atributo longitude da tabela tasks
- radius - Tamanho da geolocalização em metros
- arrival_datetime - Quando o rastreador chega à área da tarefa. IGNORADO ao criar/atualizar
- created_at - O atributo created_at da tabela tasks
- status_change_datetime - Data e hora da atualização da tarefa
- time_from - A data e hora associadas ao atributo time_from
- time_to - A data e hora associadas ao atributo time_to
- stay_duration - O atributo stay_duration da tabela tasks
- stay_duration_minutes - Duração da visita. O tempo que um trabalhador móvel deve passar no local da atribuição para completar com sucesso a tarefa. Múltiplas visitas são cumulativas
- arrival_duration_minutes - Ignorar visitas aleatórias mais curtas que a duração especificada. Ao calcular a duração mínima, visitas mais curtas que a duração especificada serão ignoradas
- max_delay_minuts - Atraso aceitável. A quantidade máxima de tempo que um funcionário pode se atrasar. Qualquer tarefa concluída durante esse tempo será marcada como "atrasada"
- is_stay_control_enabled - O atributo is_stay_control_enabled da tabela tasks
- address - O atributo address da tabela tasks
- description - Atributo description da tabela tasks
- custom_fields - O atributo custom_fields da tabela tasks
- external_id - Identificador da entidade externa
- order_sort - O atributo order_sort da tabela tasks
- created_by - Origem da tarefa criada
Conteúdo
Suporta tarefas hierárquicas via parent_task_id; janelas de tempo definidas por time_from/time_to; validação de geofence com localização e raio
Relacionamentos
Ligação a forms (coleta de dados), task_history (mudanças de status), objects (rastreador atribuído)
Observações especiais
stay_duration e arrival_duration_minutes habilitar monitoramento de conformidade para tarefas de entrega e serviço
forms
Descrição: Formulários de coleta de dados configuráveis para captura de informações estruturadas durante a conclusão de tarefas ou check-ins no aplicativo móvel, com campos e valores armazenados como JSON, validação opcional de localização (is_submission_in_zone) e requisitos de envio obrigatório quando anexados a tarefas
Campos-chave
- form_id - Identificador da entidade form
- task_id - Um ID da tarefa à qual este formulário está anexado
- object_id - Identificador da entidade objeto
- form_label - Rótulo do formulário definido pelo usuário
- campos - Se verdadeiro, o formulário só pode ser enviado na zona da tarefa
- values - Um mapa com IDs de campo como chaves e objetos field_value como valores. Chave usada para vincular campo e seu valor correspondente
- submitted_at - Data em que os valores do formulário foram enviados por último
- submission_latitude - Localização na qual os valores do formulário foram enviados por último
- submission_longitude - Localização na qual os valores do formulário foram enviados por último
- submission_address - Localização na qual os valores do formulário foram enviados por último
- is_submission_in_zone - Se verdadeiro, o formulário só pode ser enviado na zona da tarefa
- description - Data em que este formulário foi criado (ou anexado à tarefa)
- created_at - Data em que este formulário foi criado (ou anexado à tarefa)
Conteúdo
campos define a estrutura do formulário (JSON); values contém dados enviados (JSON)
Relacionamentos
Ligação a tasks (ordem de serviço associada), objects (remetente), referenciado em checkins
Observações especiais
Flag de validação de localização is_submission_in_zone habilita regras de envio de formulário baseadas em geofence
checkins
Descrição: Registros de presença e atividade baseados em localização enviados via aplicativo móvel, rastreando horários planejados versus reais de chegada (planned_datetime vs actual_datetime) com coordenadas geográficas e medições de precisão de localização (radius) para relatórios de pontualidade
Campos-chave
- checkin_id - Identificador da entidade checkin
- employee_id - O identificador da entidade empregado também é o identificador para motoristas
- object_id - Dispositivo do empregado
- form_id - Identificador da entidade form
- user_id - Usuário empregado
- planned_datetime - Hora do dispositivo quando o check-in foi realizado
- actual_datetime - Hora do servidor quando a solicitação/mensagem foi processada
- latitude - Localização na qual os checkins foram submetidos
- longitude - Localização na qual os checkins foram submetidos
- radius - Erro no posicionamento em um ponto em metros
- address - Endereço do check-in
- comment - O atributo comment da tabela checkins
Relacionamentos
Conecta empregados a formulários e locais; rastreia desvio do cronograma planejado
Observações especiais
Variação de tempo entre planned_datetime e actual_datetime habilita relatórios de pontualidade; radius define tolerância aceitável de localização
task_history
Descrição: Trilha de auditoria completa de eventos do ciclo de vida da tarefa capturando todas as mudanças de status, atribuições, atualizações e modificações de campo com timestamps (event_datetime), atribuição de usuário e tipos de atividade (create, update, assign, status_change) armazenados no campo payload para conformidade e análise de fluxo de trabalho
Campos-chave
- task_history_id - Identificador da entidade task history
- task_id - Identificador da entidade task
- user_id - Identificador da entidade usuário
- activity - Operação que ocorreu. Pode ser "create", "update", "assign" ou "status_change"
- event_datetime - Data e hora do evento
- payload - Depende da operação. Tipicamente, contém campos que foram alterados durante a operação
Conteúdo
Tipos de atividade definidos em description_parameters; payload armazena detalhes específicos do evento (texto)
Observações especiais
Essencial para análise de conclusão de tarefas, relatórios de transição de status e rastreamento de atividade do usuário
Regras e automação
rules
Descrição: Regras de detecção de eventos com condições de gatilho configuráveis (excesso de velocidade, violações de geofence, limites de sensores, tempo ocioso) armazenadas em parameters (JSONB), e configurações de notificação multicanal (alert_email, alert_sms, alert_phone, is_push_enabled) para monitoramento automatizado e alertas baseados em dados de dispositivo e servidor
Campos-chave
- rule_id - Identificador da entidade rule
- object_id - Identificador da entidade objeto
- client_id - Identificador da entidade cliente
- event_type - O atributo event_type da tabela rules
- event_label - O atributo event_label da tabela rules
- event_group - O atributo event_group da tabela rules
- description - Atributo description da tabela rules
- parameters - Parâmetros do evento. Para mais detalhes sobre parâmetros disponíveis, veja Navixy API docs.
- alert_email - E-mail para notificações
- alert_sms - Números de telefone para notificações por SMS
- alert_phone - Telefones para chamadas de voz
- is_push_enabled - Se verdadeiro, notificações push estão disponíveis
- created_at - O atributo created_at da tabela rules
- is_deleted - O atributo is_deleted da tabela rules
- maximum - Limites aplicados a várias regras. Por exemplo, para a regra de tempo ocioso com o motor ligado em minutos
- event_comment1 - O atributo event_comment1 da tabela rules
- event_comment2 - O atributo event_comment2 da tabela rules
Conteúdo
Parâmetros da regra (JSONB) definem condições de gatilho; suporta e-mail, SMS, telefone e notificações push
Relacionamentos
Vincula a objetos via rules2objects, zonas via rules2zones
Observações especiais
event_type define um cenário específico de monitoramento (excesso de velocidade, violação de geofence, limite de sensor); maximum campo habilita agregação de eventos para alertas baseados em limiar
rules2objects
Descrição: Relacionamento muitos-para-muitos vinculando regras a objetos monitorados com personalização de parâmetros por objeto via object_params (JSONB), permitindo diferentes valores de limiar (por exemplo, limites de velocidade) para cada veículo ou ativo dentro da mesma regra
Campos-chave
- rule_id - Identificador da entidade rule
- object_id - Identificador da entidade objeto
- param_group_number - O atributo param_group_number da tabela rules2objects
- object_params - O atributo object_params da tabela rules2objects
Conteúdo
object_params (JSONB) permite personalização de regra por objeto (por exemplo, diferentes limites de velocidade por veículo)
Observações especiais
Relacionamento muitos-para-muitos permite que uma regra monitore múltiplos objetos com parâmetros diferentes
rules2zones
Descrição: Relacionamento muitos-para-muitos associando regras a zonas geofenced, permitindo que uma única regra monitore eventos de entrada/saída em múltiplas áreas geográficas para cenários complexos de monitoramento espacial
Campos-chave
- rule_id - Identificador da entidade rule
- zone_id - Identificador da entidade zone
Observações especiais
Relacionamento muitos-para-muitos possibilita monitoramento multi-zona para uma única regra (por exemplo, alertar ao entrar em qualquer uma de várias áreas restritas)
Status e categorização
statuses
Descrição: Definições de status personalizadas dentro de listagens de status, incluindo propriedades de exibição (color para exibição no site, order_sort para posicionamento) usadas para representar estados de trabalho de dispositivo ou empregado com suporte a exclusão lógica via flag is_deleted
Campos-chave
- status_id - Identificador da entidade status
- listing_id - Identificador da entidade listing
- status_label - Valor do status do atributo status_label
- color - Cor usada para exibição no site
- order_sort - Posição de ordenação dentro da listagem de status
- is_deleted - O atributo is_deleted da tabela statuses
Relacionamentos
Grupos de status organizados por listing_id (referências status_listings); usado em status_history
Observações especiais
order_sort define sequência de exibição; color permite diferenciação visual em relatórios
status_listings
Descrição: Definições de conjuntos de status controlando quais valores de status estão disponíveis para dispositivos ou empregados, com flags de permissão (is_supervisor_controlled, is_employee_controlled) determinando se supervisores, empregados ou ambos podem alterar valores de status
Campos-chave
- status_listing_id - Identificador da entidade status listing
- user_id - Identificador da entidade usuário
- status_listing_label - Valor do status do atributo status_listing_label
- is_supervisor_controlled - Se verdadeiro, supervisores podem mudar o status de trabalho, por ex. usando o aplicativo móvel de monitoramento
- is_employee_controlled - Se verdadeiro, empregados podem mudar seu próprio status de trabalho, por ex. usando o aplicativo móvel de rastreamento
- is_deleted - O atributo is_deleted da tabela status_listings
Relacionamentos
Referenciado por devices.status_listing_id e statuses.listing_id
Observações especiais
Flags de controle determinam quem pode mudar status: somente supervisor, autoatendimento do empregado, ou ambos
status_history
Descrição: Trilha de auditoria de todas as transições de status de dispositivos com timestamps (changed_datetime no dispositivo, server_datetime no servidor), atribuição de usuário (updated_by) e captura de localização (latitude, longitude, address) permitindo análise geográfica de mudanças de status e relatórios de local de início/fim do dia de trabalho
Campos-chave
- status_history_id - Identificador da entidade status history
- device_id - Identificador da entidade dispositivo
- old_status_id - Identificador da entidade old status
- new_status_id - Identificador da entidade new status
- updated_by - A data e a hora associadas ao atributo updated_by
- changed_datetime - Data e hora de atribuição de um novo status no dispositivo
- server_datetime - Data e hora de atribuição do novo status no servidor
- latitude - Localizando dispositivos durante mudanças de status
- longitude - Localizando dispositivos durante mudanças de status
- address - Localizando dispositivos durante mudanças de status
Relacionamentos
Ligação a devices, statuses (antigo e novo), description_parameters (para updated_by role)
Observações especiais
A captura de localização possibilita análise geográfica de transições de status; útil para relatórios de local de início/fim do dia de trabalho
tags
Descrição: Rótulos de categorização definidos pelo usuário com codificação por cores que permitem filtragem e busca rápidas através de múltiplos tipos de entidade (places, geofences, employees, tasks, trackers, vehicles) para organização flexível
Campos-chave
- tag_id - ID da entidade tag
- user_id - Identificador da entidade usuário
- tag_label - O atributo tag_label da tabela tags
- color - O atributo color da tabela tags
Relacionamentos
Aplicado a entidades via tag_links; escopo definido pelo usuário
Observações especiais
Sistema de categorização flexível suportando múltiplas tags por entidade
tag_links
Descrição: Tabela de relacionamento polimórfico associando tags a qualquer tipo de entidade via entity_type e entity_id, com campo ordinal para gerenciamento da ordem de exibição, permitindo marcação flexível multi-entidade
Campos-chave
- tag_id - ID da entidade tag
- entity_type - O atributo entity_type da tabela tag_links
- entity_id - Identificador da entidade
- ordinal - O atributo ordinal da tabela tag_links
Conteúdo
entity_type identifica tabela (vehicle, employee, task, etc.); ordinal define a ordem de exibição
Observações especiais
Relacionamento polimórfico permite marcação entre diferentes tipos de entidade
Grupos e hierarquia
groups
Descrição: Estrutura de agrupamento organizacional para trackers permitindo organização visual na interface do usuário com cores personalizáveis (group_color) e gerenciamento hierárquico em estilo pasta, atualmente servindo função puramente visual
Campos-chave
- group_id - Grupo de trackers (vinculado por objects.group_id). A divisão em grupos pode ser vista na lista de beacons, por exemplo
- client_id - Identificador da entidade cliente
- group_label - Título do grupo especificado pelo usuário, de 1 a 60 caracteres imprimíveis, ex.: "Employees"
- group_color - Cor do grupo em formato web (sem #), ex.: "FF6DDC". Determina a cor dos marcadores de tracker no mapa
Relacionamentos
Referenciado por objects.group_id; propriedade do cliente via client_id (referências users)
Observações especiais
Permite organização em estilo pasta de entidades de monitoramento para relatórios e permissões
groups_objects
Descrição: Relacionamento muitos-para-muitos entre groups e objects usando chave primária composta (groups_client_id, objects_client_id), permitindo que objetos pertençam a múltiplos grupos simultaneamente para estruturas organizacionais flexíveis
Campos-chave
- groups_client_id - Identificador da entidade client para groups
- objects_client_id - Identificador da entidade client para objects
Observações especiais
Permite que objetos pertençam a múltiplos grupos simultaneamente; consulte com ambos client_id valores para associação ao grupo
Campos personalizados e entidades
entities
Descrição: Registro de tipos de entidade definindo quais entidades de negócio suportam campos personalizados e a estrutura de layout de seus campos (sections, field_order) armazenada em entity_label (JSONB), permitindo extensão dinâmica do esquema em places, tasks e outras entidades sem alterações no banco de dados
Campos-chave
- entity_id - Identificador da entidade
- user_id - Identificador da entidade usuário
- entity_label - id - int. Identificador da entidade. type - enum. Atualmente, apenas "place" é suportado. layout - objeto descreve o layout dos campos para a entidade. sections - array de objetos. Cada seção pode conter um ou mais campos. Pelo menos uma seção deve existir em um layout. label - string. Nome da seção. field_order - array de strings. Campos embutidos e IDs de campos personalizados (como strings)
- builtin_type - O atributo builtin_type da tabela entities
Relacionamentos
Referenciado por custom_fields para definir quais campos personalizados se aplicam a quais tipos de entidade
Observações especiais
builtin_type vincula a description_parameters para classificações de entidade definidas pelo sistema
custom_fields
Descrição: Definições de campos personalizados permitindo extensão dinâmica do esquema para tipos de entidade, com tipos de campo configuráveis (custom_field_type), regras de validação e opções em parameters (JSONB), e flags de obrigatoriedade (is_required) para captura flexível de dados em places, tasks e outras entidades
Campos-chave
- custom_field_id - Identificador da entidade custom field
- entity_id - Identificador da entidade
- custom_field_label - Nome do campo
- custom_field_type - Tipo de dado no campo
- description - Descrição do campo
- is_required - Isto é obrigatório ou não?
- parameters - Parâmetros do campo
Conteúdo
parameters (JSONB) armazena configuração específica do tipo de campo (regras de validação, opções de dropdown, etc.)
Relacionamentos
Define atributos personalizados disponíveis para entidades; o tipo de campo vincula a description_parameters
Observações especiais
Permite extensão dinâmica do esquema sem alterações no banco de dados; usado extensivamente em places e tasks
Rastreamento histórico
driver_history
Descrição: Trilha de auditoria completa de atribuições de empregado a veículo ao longo do tempo rastreando transições de old_employee_id para new_employee_id com timestamps (changed_datetime, server_datetime), dados de localização (latitude, longitude, address), informações de chave de hardware e atribuição de usuário (updated_by) permitindo análises específicas por motorista quando motoristas trocam entre veículos
Campos-chave
- driver_history_id - Identificador da entidade driver history
- object_id - Identificador da entidade objeto
- old_employee_id - Identificador da entidade old employee
- new_employee_id - Identificador da entidade new employee
- hardware_key - O atributo hardware_key da tabela driver_history
- changed_datetime - Data e hora em que as alterações foram feitas no dispositivo
- server_datetime - Data e hora das alterações feitas no servidor
- updated_by - A data e a hora associadas ao atributo updated_by
- latitude - O atributo latitude da tabela driver_history
- longitude - O atributo longitude da tabela driver_history
- address - O atributo address da tabela driver_history
Relacionamentos
Rastreia atribuições de motoristas a veículos ao longo do tempo; vincula a employees e objects
Observações especiais
Essencial para relatórios específicos por motorista quando motoristas trocam de veículo; a captura de localização possibilita análise do local da mudança de atribuição
vehicle_trackers_history
Descrição: Trilha de auditoria rastreando quais dispositivos GPS (object_id) foram instalados em quais veículos (vehicle_id) ao longo do tempo com timestamps de mudança (changed_datetime), permitindo atribuição histórica precisa de dados e cálculo de quilometragem quando trackers são movidos entre veículos
Campos-chave
- vehicle_tracker_history_id - Identificador da entidade vehicle tracker history
- vehicle_id - Identificador da entidade veículo
- object_id - Identificador da entidade objeto
- changed_datetime - A data e a hora associadas ao atributo changed_datetime
Relacionamentos
Rastreia qual dispositivo GPS foi instalado em qual veículo ao longo do tempo
Observações especiais
Crítico para análise histórica de dados quando trackers são movidos entre veículos; permite atribuição precisa de quilometragem e uso
Dados de referência e consulta
description_parameters
Descrição: Dados de referência em todo o sistema fornecendo rótulos legíveis por humanos (description) para valores inteiros enumerados (key) usados em todo o banco de dados, organizados pelo campo type (por exemplo, task_status, fuel_type, counter_type, entity_classification) para tradução consistente de valores em relatórios e exibição na interface
Campos-chave
- key - Valor possível no atributo
- type - Um atributo composto consistindo do nome da tabela seguido por um underscore e o nome de um atributo na tabela
- description - Valor implícito de um atributo
Conteúdo
Fornece rótulos legíveis por humanos para valores codificados em todo o banco de dados (status de tarefas, tipos de combustível, tipos de contador, etc.)
Relacionamentos
Referenciado via chaves estrangeiras de múltiplas tabelas para categorização padronizada
Observações especiais
Essencial para traduzir códigos inteiros em valores legíveis em relatórios; type grupos de campos relacionados a enumerações
counters
Descrição: Configurações de odômetro e contador de horas de motor vinculando leituras de sensores do dispositivo (sensor_id) a medições de distância ou tempo com coeficientes multiplicadores para conversão de unidades (km, milhas, horas) e counter_type de description_parameters definindo o tipo de medição
Campos-chave
- counter_id - ID interno
- device_id - Identificador da entidade dispositivo
- counter_type - Tipo de contador
- sensor_id - Identificador da entidade sensor
- multiplier - Coeficiente para converter valores em uma das métricas (km, l, etc.)
Relacionamentos
Vincula dispositivos a leituras de sensores que representam contadores de distância ou tempo
Observações especiais
multiplier converte pulsos do sensor em unidades reais (km, milhas, horas); counter_type from description_parameters define o tipo de medição
device_output_name
Descrição: Rótulos personalizados para canais de saída do dispositivo mapeando identificadores numéricos de saída (number) para nomes definidos pelo usuário (label) como "Door Lock" ou "Engine Block" para relatórios legíveis e análise de comandos e estados de saída do dispositivo
Campos-chave
- device_id - Identificador da entidade dispositivo
- number - O atributo number da tabela device_output_name
- label - O atributo label da tabela device_output_name
Conteúdo
Mapeia números de canais de saída para nomes definidos pelo usuário (por exemplo, "Door Lock", "Engine Block")
Observações especiais
Permite relatórios legíveis ao analisar comandos e estados de saída do dispositivo
raw_telematics_data estrutura
raw_telematics_data estruturaO raw_telematics_data schema contém três tipos principais de tabela que trabalham juntos para fornecer dados abrangentes do dispositivo.
O diagrama interativo do schema raw_telematics_data está disponível em dbdiagram.io: https://dbdiagram.io/d/v1-schema-telematics-bd-67a0acef263d6cf9a0d8e750
Encontre detalhes do schema de dados telemáticos brutos abaixo.
Tabelas principais por categoria
Cada tabela serve a um propósito específico na captura de diferentes aspectos da informação do dispositivo:
tracking_data_core
Propósito: Dados básicos de localização e movimento
Campos-chave
device_id, device_time, platform_time, latitude, longitude, speed, altitude, satellites, hdop, event_id
Indexação
Otimizado com índice em (device_id, device_time)
Observações especiais
Dados de localização (latitude e longitude) usam formato inteiro com precisão de 10⁷ para desempenho ideal no TimescaleDB A velocidade também é armazenada em inteiro, portanto é necessário dividi-la por 100
inputs
Propósito: Leituras de sensores dos dispositivos
Campos-chave
input_id, device_id, device_time, sensor_name, valor
Conteúdo
Leituras analógicas (nível de combustível, temperatura, voltagem), valores calculados (RPM do motor)
Relacionamentos
estados
Propósito: Indicadores de status do dispositivo e modos operacionais
Campos Chave
state_id, device_id, device_time, state_name, valor
Conteúdo
Indicadores de modo de operação (trabalhando, ocioso, desligado), status de componentes (ignição, portas)
Formato do Valor
Valores booleanos (1/0) ou códigos de status específicos
Os dados neste esquema são ingeridos diretamente dos dispositivos, com latência mínima (tipicamente segundos). O esquema é otimizado para dados de séries temporais usando TimescaleDB para armazenamento e recuperação eficientes.
Informações adicionais
Validação de dados
O banco de dados aplica integridade dos dados por meio de múltiplos mecanismos:
restrições CHECK validar que os valores estejam dentro de intervalos aceitáveis
chaves estrangeiras garantir que os relacionamentos entre tabelas permaneçam consistentes
restrições NOT NULL garantir que campos obrigatórios sempre possuam valores
valores DEFAULT fornecer um valor padrão quando os dados não são fornecidos explicitamente
Otimização de consultas
As tabelas são organizadas com estratégias específicas de indexação:
Todas as tabelas incluem índices baseados em tempo em
record_added_atColunas de chave estrangeira têm índices dedicados para desempenho em JOINs
Combinações de colunas frequentemente usadas têm índices compostos
TimescaleDB fornece índices especializados para consultas de séries temporais
repositório estrutura de dados
repositório estrutura de dadosEste esquema está atualmente em desenvolvimento. Se tiver interesse em acesso antecipado ou tiver dúvidas sobre esta funcionalidade, por favor contate [email protected].
O repositório o esquema fornece uma estrutura abrangente para gerenciar estruturas organizacionais, ativos, dispositivos e seus relacionamentos em ambientes multi-tenant. Construído sobre PostgreSQL 14+ com a extensão ltree, o esquema suporta organizações hierárquicas, definições de campos personalizados para qualquer tipo de entidade, controle de acesso baseado em funções com restrições em nível de objeto e trilhas de auditoria completas com rastreamento de alterações em nível de campo. Todas as entidades podem ser estendidas sem modificações no esquema, localizadas para implantações internacionais e vinculadas através de relacionamentos polimórficos flexíveis.
O esquema aborda cenários complexos de gerenciamento de dados incluindo hierarquias de ativos de frota através de níveis organizacionais, plataformas SaaS multi-tenant que exigem isolamento de dados, operações orientadas por conformidade com requisitos detalhados de auditoria, e sistemas que precisam de modelos de dados dinâmicos adaptáveis por meio de campos personalizados em vez de migrações de banco de dados.
O diagrama interativo derepositório esquema de dados está disponível em dbdiagram.io: https://dbdiagram.io/d/Navixy-Repo-data-schema-68ad788c1e7a611967a0930e
Encontre o repositório detalhes do esquema abaixo.
Frequência de atualização
Os dados no repositório esquema são sincronizados em tempo real com os sistemas de origem. Atualizações ocorrem imediatamente conforme as mudanças acontecem, com trilhas de auditoria capturando todas as modificações para conformidade e análise histórica.
ci_base
ci_baseO repositório o esquema usa um padrão Single Table Inheritance para todos os dados de referência através do ci_base tabela:
O repositório o esquema usa um Single Table Inheritance padrão para todos os dados de referência através do ci_base tabela. Este design consolida dicionários do sistema, classificações e itens de referência definidos pelo usuário em uma única estrutura unificada, proporcionando consistência e flexibilidade por todo o esquema.
Arquitetura:
O ci_base a tabela serve como base para todos os dados de referência, usando um discriminator campo para identificar o tipo de referência específico. Cada tipo de referência tem uma tabela correspondente (como ci_device_type, ci_asset_type) que compartilha o mesmo id como ci_base, criando uma relação de herança segura por tipo.
Como as entidades de negócio se conectam ao ci_base:
Todas as entidades de negócio no repositório esquema referenciam ci_base subtipos para definir sua classificação e comportamento:
organization→ referenciaci_organization_type(que herda deci_entity_type→ci_base)user→ referenciaci_user_type(que herda deci_entity_type→ci_base)device→ referenciaci_device_typeeci_device_status(ambos herdam deci_base)asset→ referenciaci_asset_type(que herda deci_entity_type→ci_base)inventory→ referenciaci_inventory_type(que herda deci_entity_type→ci_base)asset_group→ referenciaci_asset_group_type(que herda deci_entity_type→ci_base)
Categorias de tipo de referência:
Configuração do sistema
ci_module, ci_country, ci_role
Definir módulos do sistema, referências geográficas e funções de usuário
Definições de tipo de entidade
ci_entity_type, ci_device_type, ci_asset_type, ci_inventory_type, ci_organization_type, ci_user_type, ci_asset_group_type
Classificar todas as entidades de negócio por tipo
Status e classificação
ci_device_status, ci_asset_type_category
Rastrear estados de entidade e agrupar tipos em categorias
Controle de acesso
ci_permission_scope
Definir quais permissões podem ser concedidas (conectado a ci_module e ci_entity_type)
Relacionamentos
ci_device_relation_type
Definir tipos de relacionamento entre dispositivos (master-slave, backup, etc.)
Categorização
ci_tag, ci_catalog_category
Possibilitar marcação flexível e organização de catálogo
Tabelas principais por categoria
As tabelas no repositório os schemas são organizados em categorias funcionais. As descrições abaixo resumem as tabelas mais importantes por sua finalidade de negócio.
organization
Finalidade: Gestão de organização hierárquica
Campos-chave
id, parent_id, path, organization_type_id, title_en, is_active, deleted_at
Indexação
Índice GiST em path para consultas hierárquicas, índices em parent_id e organization_type_id
Observações especiais
Usa ltree para hierarquias multinível, herda de customizable_entity para suporte a campos personalizados
user
Finalidade: Contas de usuário e autenticação
Campos-chave
id, organization_id, user_type_id, identity_provider, identity_provider_id, full_name, is_active
Indexação
Índice único em (organization_id, identity_provider, identity_provider_id)
Observações especiais
Integração com provedores de identidade externos (Keycloak, Auth0, Okta), herda de customizable_entity
device
Finalidade: Dispositivos físicos de rastreamento
Campos-chave
id, organization_id, device_type_id, status_id, hw_id, label
Indexação
Índices em organization_id, device_type_id, status_id, hw_id
Observações especiais
Identificador de hardware para rastreamento de dispositivo, herda de customizable_entity para campos personalizados
asset
Finalidade: Ativos físicos ou virtuais
Campos-chave
id, organization_id, asset_type_id, label, description
Indexação
Índices em organization_id e asset_type_id
Observações especiais
Herda de customizable_entity, vinculado a dispositivos via device_asset_link
inventory
Finalidade: Registros de inventário e armazém
Campos-chave
id, organization_id, inventory_type_id, code
Indexação
Índice único em (organization_id, code)
Observações especiais
Códigos únicos dentro da organização, vinculados a dispositivos via device_inventory_link
asset_group
Finalidade: Agrupamento de ativos com rastreamento histórico
Campos-chave
id, organization_id, group_type_id, title_en, description
Relacionamentos
FROM repo.asset_group AS ag JOIN repo.asset_group_item AS agi ON agi.group_id = ag.id JOIN repo.asset AS a ON a.id = agi.asset_id WHERE agi.detached_at IS NULL
Observações especiais
Membros com validade temporal via asset_group_item, consultar membros atuais com WHERE detached_at IS NULL
custom_field_def
Finalidade: Definições de campos personalizados e metadados
Campos-chave
id, organization_id, owner_entity_type_id, code, field_type, is_multi, is_required
Conteúdo
Tipos de campo incluem texto, número, booleano, data, datetime, entity_ref, catalog_item_ref
Observações especiais
Possibilita campos personalizados flexíveis para qualquer tipo de entidade, valores armazenados em tabelas específicas por tipo custom_field_value_* tabelas
acl_role_permission
Finalidade: Gerenciamento de permissões baseado em função
Campos-chave
id, role_id, permission_scope_id, target_entity_id, actions
Conteúdo
Máscara de ações (READ=1, UPDATE=2, DELETE=4, CREATE=8), permissões específicas por alvo ou abrangendo todo o tipo de entidade
Relacionamentos
FROM repo.user_role AS ur JOIN repo.acl_role_permission AS rp ON rp.role_id = ur.role_id WHERE ur.user_id = $user_id
Observações especiais
Funciona com user_role e acl_user_scope para determinar permissões finais do usuário
audit_event
Finalidade: Log de auditoria unificado para todas as alterações do sistema
Campos-chave
id, event_category, user_id, aggregate_type, aggregate_id, event_type, event_data, occurred_at
Indexação
Índices em (user_id, occurred_at), (aggregate_type, aggregate_id, occurred_at), (event_category, occurred_at)
Observações especiais
Particionado por occurred_at (mensal), duas categorias: auth (autenticação) e domain (eventos de negócio), armazena deltas de alteração em nível de campo em event_data JSONB
Relacionamentos de dados
O repositório o schema implementa padrões sofisticados de relacionamento para modelagem de dados flexível:
Estruturas hierárquicas
Organizações usam caminhos ltree para consultas de árvore eficientes
Itens de referência (
ci_base) suportam hierarquias opcionaisManutenção automática de caminhos via triggers do banco de dados
Padrões de herança
Herança de tabela:
customizable_entity→ entidades de negócio (organization,user,device,asset,inventory,asset_group)Herança de ID:
ci_base→ tabelas de tipo de referênciaDiscriminação de tipo via
entity_type_idediscriminatorcampos
Relacionamentos polimórficos
Certas tabelas usam referências polimórficas sem restrições de chave estrangeira para máxima flexibilidade:
acl_role_permission.target_entity_id→ qualquercustomizable_entityacl_user_scope.target_entity_id→ qualquercustomizable_entityentity_tag.entity_id→ qualquercustomizable_entity
Esses relacionamentos são validados no nível da aplicação.
Informações adicionais
Validação de dados
O repositório o schema reforça a integridade dos dados por meio de múltiplos mecanismos:
Restrições de banco de dados
Restrições UNIQUE com suporte a soft delete (índices parciais WHERE
deleted_atIS NULL)Restrições CHECK (por exemplo,
device_relationgarantemaster_id≠slave_id)Restrições NOT NULL em campos obrigatórios
Valores DEFAULT para timestamps e flags booleanos
Validação no nível da aplicação
Validação de tipo de entidade para referências polimórficas
Validação de catálogo para referências de campos personalizados
Validação de tipo de campo personalizado
Gerenciamento de arrays para campos multivalorados
Otimização de consultas
As tabelas são organizadas com estratégias específicas de indexação:
Índices padrão:
Todas as chaves estrangeiras possuem índices dedicados
Índices baseados em tempo em
created_at,updated_at,deleted_atÍndices compostos para colunas frequentemente unidas
Índices especializados:
Índices GiST em caminhos ltree para consultas hierárquicas
Índices únicos parciais suportando soft delete
Índices de valor de campo personalizado para filtragem e ordenação
Índices de eventos de auditoria por tempo + entidade para buscas eficientes
Considerações de desempenho:
Pool de conexões recomendado (PgBouncer)
Manutenção regular VACUUM para tabelas grandes
Particionamento futuro possível para
devicetabela pororganization_idViews materializadas para cálculos complexos de controle de acesso
Atualizado
Isto foi útil?