Pular para o conteúdo principal

Loja / Gestão Operacional — Visão Geral

Última atualização: 16 de julho de 2026

O que é este fluxo

A tab "Loja" do app não é uma vitrine de produtos, é a tela de perfil do vendedor. app/(tabs)/loja.tsx apenas renderiza StoreProfileScreen, cujo próprio cabeçalho exibe o título "Perfil". A partir dela, um menu dá acesso a um conjunto de sub-telas operacionais como controle de inventário, gestão de aprovações, atualizações de dados, notificações, sugestões de feedback, repositório de vendas salvas e gerenciamento da tela inicial. Cada uma dessas sub-telas é documentada em seu próprio arquivo neste fluxo.

Arquivos-chave

ArquivoResponsabilidade
app/(tabs)/loja.tsxRota da tab, só delega para StoreProfileScreen
features/store/store-profile.tsxTela de perfil e menu de navegação
features/store/store-profile.controller.tsEstado, dados do usuário, foto de perfil, flags de menu, modo dev
storage/organization/organization.storage.tsContexto de organização selecionada (já documentado em Sincronização Offline)
services/profile-image/profile-image.service.instance.tsUpload/remoção da foto de perfil

O que é real e o que é hardcoded no perfil

Dado exibidoOrigemReal ou hardcoded
Nome e emailuseUser()Real, parte do fluxo de autenticação
Cargo "Vendedor"const PROFILE_ROLE = "Vendedor";Hardcoded pra todo usuário, sem distinção de papel
Foto de perfilfetchProfileImageDataUri / profileImageServiceReal, upload e remoção de fato chamam a API
Organização atual e lista de organizaçõesstorage/organization/organization.storage.ts (MMKV)Real
"Saldo Flex" e "Provisão de Acréscimo"SUMMARY_FLEX = "R$ 0,00" e `SUMMARY_PROVISION = "R$ 0,0000/00/0000"`
Versão do applida de package.jsonReal, valor de build

Trocar de organização pelo perfil segue o mesmo caminho já documentado no fluxo de sincronização: grava a nova organização selecionada no storage, chama reset() e depois startSyncAll(organizationId) do useSync(), disparando uma resincronização completa.

O menu é inteiramente controlado por flags de configuração

Cada item do menu só aparece se a flag correspondente, lida via useSettings(), estiver ativa. Não existe nenhuma tela nova aqui, é a mesma lógica de feature flag já usada em outros fluxos do app:

Item do menuRotaFlagPadrão
Sugestões/loja/sugestoescfg-ativarsugestoesDesligado
Atualizações/loja/atualizacoescfg-ativaratualizacoesLigado
Gerenciar Tela Inicial/loja/gerenciar-tela-inicialcfg-ativargerenciamentodetelainicialLigado
Controle de Inventário/loja/controle-inventariocfg-ativarcontroledeinventarioDesligado
Central de Notificações/loja/notificacoescfg-ativarcentraldenotificacoesDesligado
Gestão de Aprovações (atalho no topo do card)/loja/gestao-aprovacoescfg-ativargestaodeaprovacoesDesligado
Troca de organizaçãoabre bottom sheetcfg-ativartrocadeorganizacaoLigado
Modo Devoculto até desbloquearcfg-ativarmododevDesligado

Dois itens aparecem comentados diretamente no array menuItems de store-profile.controller.ts, sem chegar a ser renderizados: "Configurações do Perfil" (troca de senha) e "Contactar Central" (WhatsApp, controlado por cfg-ativarcontactarcentral, que por sua vez está com valor padrão ligado apesar da UI estar desativada). São indícios de funcionalidades planejadas e depois pausadas, não código morto para remover sem verificar antes com o time.

O modo dev e uma nota de segurança

Tocar dez vezes seguidas no item "Versão" abre um bottom sheet pedindo uma senha. Se o valor digitado bater com uma constante fixa no código, o modo dev é ativado e um painel avançado é liberado para editar qualquer parâmetro persistido em settings.service.ts:

// store-profile.controller.ts
const handleSubmitDevPassword = useCallback(
(password: string) => {
if (password.trim() !== "191543") {
setDevModePasswordError("Senha inválida. Verifique o código de acesso.");
return;
}

settings.update("cfg-ativarmododev", "S");
// ...
},
[settings, toast],
);

Essa senha fica em texto puro dentro do bundle JavaScript do app, então qualquer pessoa capaz de fazer engenharia reversa do APK/IPA consegue extraí-la e habilitar o modo dev em qualquer instalação. Vale registrar isso como ponto de atenção de segurança, já que o painel liberado por ela permite editar parâmetros de configuração do app diretamente no dispositivo.

Armadilhas conhecidas

A maior parte das sub-telas acessíveis por este menu é protótipo de UI sem integração real, conforme detalhado em cada documento específico: controle de inventário, gestão de aprovações, notificações, sugestões e repositório são 100% mock. Atualizações e gerenciar tela inicial, ao contrário, são funcionais de ponta a ponta. Antes de assumir que uma ação nesta área realmente persiste ou envia algo, confira o documento da sub-tela específica.