Fluxo de Dados e Pre-loading¶
📋 Visão Geral¶
O Motor de Pricing utiliza uma estratégia de pré-carregamento paralelo de dados após o login. Isso garante que todas as páginas da aplicação carreguem rapidamente, pois os dados já estão em memória no navegador.
🔄 Mecanismo de Data Stores¶
A aplicação utiliza dcc.Store do Dash para armazenar dados na sessão do navegador. São 30+ stores definidos no app.py:
Stores de Controle¶
| Store ID | Tipo | Finalidade |
|---|---|---|
store-token |
session |
Token de autenticação do usuário |
store-request-id |
local |
ID da última requisição processada |
store-request-id-reference-price |
session |
ID de referência de preço |
store-data-loading-status |
memory |
Status do pré-carregamento |
Stores de Dados — Arquitetura de Preços¶
| Store ID | Tabela BigQuery | Conteúdo |
|---|---|---|
store-data-parametrization |
parametrization |
Parametrizações de data |
store-data-cost |
cost |
Custos dos produtos |
store-data-reference-price |
reference_price |
Preço de referência ⚠️ |
store-data-gross-margin |
gross_margin |
Margem bruta |
store-data-products |
products |
Cadastro de produtos |
store-data-packaging |
packaging |
Perfis de embalagem |
store-data-regionalization |
regionalization |
Perfis regionais |
store-data-current-price-list |
current_price_list |
Lista de preços vigente |
Stores de Dados — Variáveis¶
| Store ID | Tabela BigQuery | Conteúdo |
|---|---|---|
store-data-product-strategy |
product_strategy |
Estratégia de produtos |
store-data-product-strategy-architecture |
product_strategy_architecture |
Arquitetura de produtos |
store-data-regionalization-strategy |
regionalization_strategy |
Estratégia regional |
store-data-rotated-market |
rotated_market |
Mercado rotacionado |
store-data-vs-sales-suggestion |
vs_sales_suggestion |
VS Sugestão de vendas |
store-data-caps-vs-last-price-list |
caps_vs_last_price_list |
CAPS vs última lista |
store-data-min-margin |
min_margin |
Margem mínima |
store-data-base-index |
base_index |
Índice base |
Stores de Dados — Painel de Qualidade¶
| Store ID | Tabela BigQuery | Conteúdo |
|---|---|---|
store-data-painel-qualidade-alertas |
painel_qualidade_alertas |
Alertas de qualidade |
store-data-cc-posicionamento-produtos |
cc_posicionamento_produtos |
Posicionamento de produtos |
store-data-price-decomposition |
price_decomposition |
Decomposição do preço |
⚡ Pre-loading Paralelo¶
O módulo callbacks/preload_data.py pré-carrega 18 tabelas imediatamente após o login:
sequenceDiagram
participant U as Usuário
participant App as Dash App
participant Pool as ThreadPoolExecutor (8 workers)
participant BQ as BigQuery
U->>App: Login bem-sucedido
App->>App: store-token atualizado
App->>Pool: Iniciar preload_all_data()
par Paralelo (8 threads)
Pool->>BQ: fetch parametrization
Pool->>BQ: fetch cost
Pool->>BQ: fetch gross_margin
Pool->>BQ: fetch products
Pool->>BQ: fetch packaging
Pool->>BQ: fetch regionalization
Pool->>BQ: fetch current_price_list
Pool->>BQ: fetch product_strategy
end
BQ-->>Pool: Dados retornados
Pool-->>App: 18 tabelas carregadas
App->>App: loading_status = "completed"
App-->>U: Aplicação pronta para uso
Configuração¶
| Parâmetro | Valor |
|---|---|
| Workers paralelos | 8 (ThreadPoolExecutor) |
| Total de tabelas | 18 |
| Trigger | Input("store-token", "data") |
| Controle | prevent_initial_call=True |
Status de Carregamento¶
O store store-data-loading-status é atualizado com:
{
"status": "completed",
"timestamp": "2026-03-05 10:00:00",
"tables_loaded": 18,
"total_tables": 18,
"user": "usuario@lavoro.com.br"
}
⚠️ Exceção: reference_price¶
A tabela reference_price NÃO é pré-carregada. Ela é buscada apenas após o usuário processar dados na Arquitetura de Preços, pois depende do request_id gerado durante o processamento.
🔄 Fluxo das Páginas¶
Cada página da aplicação segue o mesmo padrão de consumo de dados:
graph TD
A[Callback de renderização] --> B{Dados no Store?}
B -->|Sim| C[Usar dados pré-carregados]
B -->|Não| D[Buscar via API - fallback]
C --> E[Renderizar página]
D --> E
style C fill:#27ae60,color:#fff
style D fill:#e67e22,color:#fff
- O callback da página verifica se os dados existem no store (pré-carregados)
- Se existem → usa diretamente (rápido)
- Se não existem → faz fallback para
fetch_data()(mais lento) - Filtros subsequentes utilizam os dados já em cache, sem novas chamadas à API
💾 Logout / Limpeza¶
Quando o token é limpo (logout), todos os stores são resetados para None:
Última atualização: Março 2026 | Versão 1.0