Controle de Inventário
Última atualização: 16 de julho de 2026
Visão Geral
"Controle de Inventário" trata do acompanhamento de comodatos, equipamentos cedidos a clientes que precisam ser periodicamente inventariados, e do registro de apontamentos sobre eles. A tela tem uma lista de clientes com comodato, uma lista de apontamentos já realizados e um formulário para criar um novo apontamento, com leitor de código de barras funcional. Apesar de todo esse cuidado visual, não existe nenhum repository, service ou tabela SQLite dedicados a isso no projeto: é uma funcionalidade inteiramente mockada, e a própria UI admite isso em vários textos.
Arquivos-chave
| Arquivo | Responsabilidade |
|---|---|
features/store/subscreens/inventory/store-inventory.controller.ts | Listas de clientes com comodato e apontamentos realizados |
features/store/subscreens/inventory/store-inventory.mock.ts | Fonte de todos os dados exibidos |
features/store/subscreens/inventory/subscreens/appointment/store-inventory-appointment.controller.ts | Formulário de novo apontamento |
features/store/subscreens/inventory/subscreens/details/store-inventory-detail.controller.ts | Detalhe de um apontamento já realizado |
Nenhum dado vem de uma fonte real
Uma busca por inventory, inventario, apontamento ou comodato em services/ e repositories/ não encontra nenhum service ou repository dedicado. A única pista relacionada ao tema no restante do projeto é um filtro comentado, sem uso, em repositories/client/client.repository.ts:
// if (checkOptions.other_legend.Comodato) {
// where.comodato = "S";
A lista de clientes com comodato é construída reaproveitando três registros fixos do mock de cliente usado no fluxo de carteira de clientes, com metadados de status (late, pending, done), data do último inventário e região adicionados artificialmente por cima. Os apontamentos "realizados" também são inteiramente hardcoded, com datas fixas como new Date(2026, 1, 20, 10, 55) e uma imagem de exemplo genérica (teste-image.png). A própria interface admite o mock em mais de um lugar, como no texto de estado vazio: "Ajuste a busca ou os filtros para visualizar os comodatos mockados."
O fluxo de criar um novo apontamento
Ao escolher um cliente na lista, o app navega para /loja/novo-apontamento-inventario passando o clientId como parâmetro. A tela carrega dois "equipamentos" fixos, extraídos do mock de produto (não de uma consulta real ao catálogo do cliente):
// store-inventory-appointment.controller.ts
function buildAppointmentItems(): AppointmentItem[] {
return [productResponseMock.content[3], productResponseMock.content[4]].map(
(product) => ({
id: product.id,
name: product.nomeCompleto || product.nome || "Produto",
equipmentCode: String(product.idExterno ?? product.id),
commodityCode: formatCommodityCode(product),
imageSource: equipmentPreview,
actionLabel: "Inventário",
observation: "",
isObservationVisible: false,
}),
);
}
Para cada item, o vendedor escolhe uma ação (Inventário, Solicitação de manutenção ou Coleta de comodato) e pode adicionar uma observação em texto livre. Existe também um leitor de código de barras de verdade, usando expo-camera com pedido de permissão em tempo real, e um modo alternativo de digitação manual do código. O resultado da leitura, porém, só é usado para filtrar a lista local de dois itens mockados (setSearch(barcodeValue)), não para buscar um produto real em nenhuma API ou no SQLite do catálogo.
Não há nenhuma validação bloqueando o salvamento, nenhum campo é obrigatório. E o próprio salvamento não faz nada além de simular sucesso:
// store-inventory-appointment.controller.ts
const handleSave = useCallback(() => {
toast.show(SUCCESS_TOAST_MESSAGE, "success", 3500, "top");
router.back();
}, [router, toast]);
Não há chamada de API, gravação em SQLite ou entrada em fila offline. O apontamento preenchido pelo vendedor não é persistido em lugar nenhum, ele simplesmente desaparece ao voltar para a tela anterior.
Armadilhas conhecidas
Não trate esta tela como uma referência de fluxo de inventário real, ela é um protótipo visualmente completo mas sem qualquer integração de dados. Se for implementar o controle de inventário de fato, será necessário criar um repository/service dedicado (seguindo o padrão de outros repositories SQLite do projeto) e substituir tanto store-inventory.mock.ts quanto o handleSave do formulário de apontamento, hoje puramente decorativo.