Tabela principal de fatos. Contém todos os eventos brutos capturados pelo agente desktop nas máquinas dos colaboradores. Cada registro = uma janela (aplicativo) em foco por um período.
Particionamento: por coluna, em p2o_datetime_in (granularidade diária). Como o particionamento é por coluna, não existe a pseudo-coluna _PARTITIONDATE nesta tabela — filtre pela própria p2o_datetime_in.
Volume típico: milhares a milhões de registros/dia dependendo do número de colaboradores
Atualização: conforme licença contratada (diária ou intra-dia)
Coluna
Tipo
Descrição
bigquery_id
STRING
ID único do evento (PK)
p2o_username
STRING
Email ou username do colaborador
p2o_hostname
STRING
Nome da máquina (hostname)
p2o_datetime_in
TIMESTAMP
Início do evento — momento em que a janela ganhou foco
p2o_datetime_out
TIMESTAMP
Fim do evento — momento em que a janela perdeu foco
p2o_total_seconds
FLOAT64
Duração total do evento em segundos
p2o_total_idle
FLOAT64
Tempo ocioso (sem atividade de mouse/teclado) dentro do evento, em segundos
p2o_app_exe
STRING
Nome do executável (ex: chrome.exe, excel.exe)
p2o_app_exe_fullname
STRING
Nome completo/descritivo do aplicativo
p2o_title_windows
STRING
Título da janela ativa (pode conter nome do documento, aba do browser, etc.)
p2o_url
STRING
URL completa (quando o aplicativo é um navegador)
p2o_url_domain
STRING
Domínio extraído da URL (ex: google.com)
p2o_network
STRING
Informações de rede (SSID Wi-Fi conectado). Usado para detecção de local (escritório vs remoto)
p2o_mouse_hooks
STRING
Dados de atividade do mouse (cliques, movimentos)
p2o_keyboard_hooks
STRING
Dados de atividade do teclado (teclas pressionadas — sem captura de conteúdo)
p2o_IsWorkstationLocked
BOOLEAN
Se a estação estava bloqueada (tela de login do Windows)
p2o_source
STRING
Origem do dado (versão do agente, modo de envio)
p2o_datetime_last_insert
TIMESTAMP
Timestamp da última inserção/atualização deste registro no BigQuery
odd_behavior
STRING
Flags de comportamento anômalo (ex: Invalid total_seconds, Corrupted File). Usado para filtragem de qualidade
Dica de uso: Ao consultar events, sempre filtre pela coluna de particionamento p2o_datetime_in para evitar full table scan e reduzir custos — por exemplo WHERE DATE(p2o_datetime_in) BETWEEN '2026-01-01' AND '2026-01-31'. Correção 2026-08-05: versões anteriores desta página indicavam _PARTITIONDATE; essa pseudo-coluna não existe em tabela particionada por coluna e a consulta falha com Unrecognized name: _PARTITIONDATE. Exclua registros com p2o_source = 'CORRUPTED' e odd_behavior contendo flags de erro.
3. Tabela: rel_department_hierarchy_{company}
Hierarquia de departamentos. Define a estrutura organizacional em níveis (1 = topo, N = mais específico).
Coluna
Tipo
Descrição
department_name
STRING
Nome do departamento
department_code
STRING
Código único do departamento (PK, usado como FK em outras tabelas)
creation_user
STRING
Usuário que criou o registro
creation_date
TIMESTAMP
Data de criação do registro
active
BOOLEAN
Se o departamento está ativo (filtrar TRUE para visão atual)
department_level
INT64
Nível hierárquico: 1 = topo (diretoria), 2 = sub (gerência), 3+ = áreas específicas
4. Tabela: rel_role_attribute_{company}
Cadastro de cargos/funções. Tabela dimensional de referência para cargos dos colaboradores.
Coluna
Tipo
Descrição
role_name
STRING
Nome do cargo
role_code
STRING
Código único do cargo (PK)
creation_user
STRING
Usuário que criou o registro
creation_date
TIMESTAMP
Data de criação
active
BOOLEAN
Se o cargo está ativo
5. Tabela: rel_region_attribute_{company}
Cadastro de regiões/localidades. Dimensão geográfica dos colaboradores.
Vínculo colaborador × hierarquia organizacional. Tabela associativa que conecta cada colaborador ao seu departamento, cargo, região e processo. Contém também dados de jornada e férias.
Atenção: Esta tabela contém a configuração mais recente por login. Para análise histórica ("em qual depto o colaborador estava em data X"), use a tabela dim_employee_daily.
Coluna
Tipo
Descrição
employee
STRING
Email/username do colaborador (PK principal, JOIN com events.p2o_username)
employee_alias
STRING
Nome de exibição do colaborador
fk_department_code
STRING
FK → rel_department_hierarchy.department_code
fk_process_code
STRING
Código do processo associado
fk_role_code
STRING
FK → rel_role_attribute.role_code
fk_region_code
STRING
FK → rel_region_attribute.region_code
department_path
STRING
Caminho hierárquico completo (códigos separados por _). Ex: DIR_GER_AREA
process_path
STRING
Caminho de processos (códigos separados por _)
vacation_active
BOOLEAN
Se o colaborador está em férias no momento
vacation_date_in
TIMESTAMP
Data de início das férias
vacation_date_out
TIMESTAMP
Data de fim das férias
Entry_Weekday
STRING
Horário de entrada — dias úteis (ex: 08:00)
Exit_Weekday
STRING
Horário de saída — dias úteis (ex: 18:00)
Entry_Saturday
STRING
Horário de entrada — sábados
Exit_Saturday
STRING
Horário de saída — sábados
Entry_Sunday
STRING
Horário de entrada — domingos
Exit_Sunday
STRING
Horário de saída — domingos
creation_user
STRING
Usuário que criou o registro
creation_date
TIMESTAMP
Data de criação
search_date
TIMESTAMP
Data de vigência da associação (snapshot temporal)
Classificação de domínios/aplicativos por contexto organizacional. Define se um domínio/app é produtivo, neutro ou improdutivo para cada combinação de departamento/cargo/região.
Coluna
Tipo
Descrição
domain
STRING
Domínio ou nome do aplicativo
category
STRING
Categoria do domínio/app
fk_department_code
STRING
FK → departamento ao qual esta classificação se aplica
fk_process_code
STRING
Código do processo
fk_role_code
STRING
FK → cargo
fk_region_code
STRING
FK → região
department_path
STRING
Caminho hierárquico de departamento
process_path
STRING
Caminho de processos
waterfall_classification
STRING
Classificação de eficiência: produtivo, neutro, improdutivo
creation_user
STRING
Usuário que criou
creation_date
TIMESTAMP
Data de criação
search_date
TIMESTAMP
Data de vigência
active
BOOLEAN
Se a classificação está ativa
Nota: A classificação waterfall_classification é contextual — o mesmo domínio pode ser "produtivo" para um departamento e "neutro" para outro. Isso permite análises de eficiência operacional segmentadas.
8. Tabela: time_extension_request_{company}
Solicitações de extensão de jornada. Registra pedidos de hora extra feitos pelos colaboradores e sua aprovação/rejeição por gestores.
Coluna
Tipo
Descrição
request_date
DATE
Data da solicitação
request_timestamp
TIMESTAMP
Momento exato da solicitação
company
STRING
Identificador da empresa
username
STRING
Colaborador solicitante
time_requested
INT64
Tempo extra solicitado (em minutos)
original_requested
INT64
Valor originalmente solicitado (antes de ajustes)
justification
STRING
Justificativa fornecida pelo colaborador
request_manager
STRING
Gestor para quem a solicitação foi enviada
accepted
BOOLEAN
Se a solicitação foi aprovada (TRUE) ou rejeitada (FALSE)
accepted_timestamp
TIMESTAMP
Momento da aprovação/rejeição
manager_accepted
STRING
Gestor que efetivamente aprovou/rejeitou
date_limit
DATE
Data limite para a extensão ser utilizada
dh_insert
TIMESTAMP
Data/hora de inserção no BigQuery
9. Tabela: time_tracking_{company}
Registros de ponto/jornada. Marcações de início e fim de jornada, incluindo intervalos de almoço.
Coluna
Tipo
Descrição
action_date
DATE
Data do registro de ponto
action_id
STRING
ID único da ação
username
STRING
Colaborador
hostname
STRING
Máquina de origem do registro
beginDay
TIMESTAMP
Início da jornada
beginLunch
TIMESTAMP
Início do intervalo de almoço
endLunch
TIMESTAMP
Fim do intervalo de almoço
endDay
TIMESTAMP
Fim da jornada
source
STRING
Origem do registro: manual, sistema, etc.
locationType
STRING
Tipo de local: escritório, home office, etc.
action_datetime_sent
TIMESTAMP
Quando o registro foi enviado pelo agente
action_datetime_bq_insert
TIMESTAMP
Quando o registro foi inserido no BigQuery
lastUpdate
TIMESTAMP
Última atualização do registro
10. Tabela: dim_employee_daily_{company}
Dimensão de colaborador por dia. Tabela desnormalizada com a "foto" organizacional de cada colaborador em cada data. Ideal para análises históricas — mostra em qual departamento/cargo/região o colaborador estava em cada dia.
Tabela recomendada para JOINs com events. Use employee = p2o_username e p2o_date = DATE(p2o_datetime_in) para enriquecer eventos com dados organizacionais históricos corretos.
Coluna
Tipo
Descrição
employee
STRING
Email/username (lowercase)
p2o_date
DATE
Data de referência
employee_alias
STRING
Nome de exibição (uppercase)
role_name
STRING
Cargo vigente naquela data
Region
STRING
Região vigente naquela data
department_name
STRING
Departamento mais específico (nível mais profundo)
Department_1
STRING
Departamento nível 1 (topo — ex: Diretoria)
Department_2
STRING
Departamento nível 2 (ex: Gerência)
Department_3 … Department_10
STRING
Níveis hierárquicos 3 a 10 (preenchidos conforme profundidade da estrutura do cliente)
11. Tabelas de Suporte
Disponibilidade. As três tabelas desta seção e as duas UDFs da seção 12 vivem no mesmo dataset do cliente e são pré-requisito da consulta de referência da especificação do Data Lake. Se a consulta retornar Not found: Table … network_raw_latest ou Function not found: clean_textV2, o ambiente ainda não recebeu essa camada — solicite o provisionamento pelo canal de atendimento; é uma operação aditiva, sem impacto nas tabelas existentes.
11.1 network_raw_latest
SSIDs de redes corporativas cadastradas. Usada para determinar se o colaborador está no escritório ou remoto.
Coluna
Tipo
Descrição
DATA
STRING (JSON)
Documento JSON com $.network (array de SSIDs corporativos) e $.company
11.2 text_clearing_rules
Regras de limpeza e anonimização aplicadas aos títulos de janela antes da análise.
Coluna
Tipo
Descrição
regex_rule
STRING
Expressão regular para matching
replace_value
STRING
Valor de substituição
active
BOOLEAN
Se a regra está ativa
company
STRING
Empresa ou GENERAL_ALL (regra global)
11.3 app_classificationV2
Regras de classificação de aplicativos e sites. Define nome, classe e prioridade para matching via regex.
Coluna
Tipo
Descrição
company
STRING
Empresa ou GENERAL_ALL
app_name_en
STRING
Nome do aplicativo (inglês)
regex_rule
STRING
Regex para matching em título/URL
app_regex
STRING
Regex adicional para matching no executável
app_class
STRING
Classe do app (ex: web_browser__class, office__class)
app_class_id
INT64
ID numérico da classe
rnk
INT64
Prioridade da regra (menor = mais prioritário)
active
BOOLEAN
Se a regra está ativa
12. UDFs (User Defined Functions)
Funções JavaScript disponíveis no BigQuery para processamento de dados:
Função
Parâmetros
Descrição
clean_textV2
(input, options, replacements)
Limpeza e normalização de títulos de janela. Aplica regras de text_clearing_rules para anonimizar dados sensíveis
get_app_classification
(rules, search_strings, app_web)
Classificação de aplicativos. Recebe array de regras de app_classificationV2 e retorna nome/classe do app
SELECT
e.p2o_username,
d.employee_alias,
d.department_name,
d.role_name,
d.Region,
SUM(e.p2o_total_seconds) AS total_seconds
FROM `fnk-bi-empresa.empresa.events_empresa` e
JOIN `fnk-bi-empresa.empresa.dim_employee_daily_empresa` d
ON LOWER(e.p2o_username) = d.employee
AND DATE(e.p2o_datetime_in) = d.p2o_date
WHERE DATE(e.p2o_datetime_in) BETWEEN '2026-01-01' AND '2026-01-31'
GROUP BY 1, 2, 3, 4, 5
Filtro de qualidade recomendado para events
Revisão 2026-08-04. A condição AND p2o_total_seconds > 0 foi acrescentada ao filtro. Ela é obrigatória: p2o_total_seconds >= p2o_total_idle é satisfeita por eventos de duração zero (0 >= 0), que são o sinal de estação bloqueada. Mantidos na base, eles distorcem qualquer cálculo que estenda a duração de um evento até o evento seguinte.
SQL
WHERE
LOWER(p2o_username) != 'fhinck'
AND p2o_total_seconds >= p2o_total_idle
AND p2o_total_seconds > 0
AND (p2o_source IS NULL OR UPPER(p2o_source) != 'CORRUPTED')
AND (odd_behavior IS NULL
OR (odd_behavior NOT LIKE '%Invalid total_seconds%'
AND odd_behavior NOT LIKE '%Unexpected Time Change%'
AND odd_behavior NOT LIKE '%Corrupted File%'))
Última atualização: 2026-04-07 · Gerado a partir da documentação oficial do Data Lake Fhinck
15. Detalhes Técnicos do Pipeline
Informações extraídas do pipeline de atualizacao diaria da Fhinck que popula as tabelas diariamente às 3h. Clustering verificado em produção (fnk-bi-{cliente}).
Todas as tabelas dimensionais (rel_*, dim_*) usam ROW_NUMBER() para manter apenas o registro mais recente por chave primária:
SQL
-- Padrão aplicado em TODAS as tabelas rel_*
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY {primary_key}
ORDER BY creation_date DESC
) AS rn
FROM source_table
)
WHERE rn = 1
15.4 Frequência e Lógica de Atualização
CRON diário às 3h (horário de Brasília, UTC-3)
Eventos: carga incremental — apenas registros com p2o_datetime_last_insert >= último timestamp processado
Tabelas dimensionais: recriadas por completo (CREATE OR REPLACE TABLE) a cada execução
Tabelas de suporte: sincronizadas por completo do dataset DATA_SUPPORT
Janela padrão de eventos: últimos 90 dias (configurável por cliente)