Skip to main content
Esta página explica os objetos com que você trabalha no muveya e as regras que o servidor aplica a eles. Cada seção traz o rótulo do console, o identificador usado pela API e pelo código, e links para as páginas de tarefas. O Glossário lista cada termo nos três idiomas.

Sua clínica odontológica

Uma clínica odontológica (tenant na API e no código) é a sua conta de cliente: uma clínica independente ou uma rede odontológica inteira. Ela é o limite de isolamento do muveya.
  • Todo registro operacional (unidades, depósitos, insumos, caixas, movimentos, pedidos, decisões, entregas) pertence a uma única clínica odontológica. Nada é compartilhado ou movido entre duas delas, e uma solicitação que não corresponde à sua clínica odontológica é recusada.
  • Uma pessoa pode fazer parte de várias clínicas odontológicas. Use Escolha uma clínica odontológica em Início, ou o seletor no topo da barra lateral, para trocar a clínica em que está trabalhando. Função, permissões e acesso a unidades e depósitos são definidos separadamente em cada uma.
  • Uma chave de API pertence a uma única clínica odontológica. A API pública deduz a clínica odontológica pela chave e nunca a aceita como parâmetro. Veja Autenticação.

Unidades

Uma unidade (clinic, clinicId) é um local operacional da sua clínica odontológica, onde os insumos são pedidos, recebidos e consumidos. O console as lista em Unidades. O Acesso às unidades de uma pessoa decide quais pedidos, aprovações e entregas ela vê. Veja Unidades.

Depósitos

Um depósito (warehouse, warehouseId) é um lugar onde as caixas ficam guardadas. Cada caixa está em um único depósito por vez. Regras que o servidor aplica:
  • Um depósito express deve indicar uma unidade existente da sua clínica odontológica; um depósito central não deve indicar nenhuma.
  • O nome é obrigatório, de 1 a 120 caracteres.
  • O status é active ou inactive. Um depósito inativo não recebe estoque novo (receber nele ou transferir uma caixa para ele é recusado) e não pode ser escolhido em pedidos novos.
  • No console, Entregar no depósito de um pedido novo oferece só os depósitos ativos que pertencem à unidade escolhida, então uma unidade precisa de um depósito express antes de fazer pedidos. O servidor nunca aceita como destino o depósito express de outra unidade. Retirar estoque de oferece depósitos centrais.
O Acesso aos depósitos de uma pessoa decide qual estoque ela vê e movimenta. Veja Depósitos.

Salas e áreas

Uma sala ou área (destination, destinationId) é um lugar dentro de uma unidade onde os insumos são usados: uma sala de atendimento (treatment_room) ou qualquer outra área (area). Salas e áreas são gerenciadas na página da unidade. Os nomes das salas e áreas são únicos dentro de uma unidade. Uma sala está active ou inactive; desativá-la mantém o nome nos registros passados. Ao registrar o consumo de uma caixa, você pode informar para onde foi e como:
  • O que aconteceu (usage): Uso direto (use) ou Entrega à sala ou área (issue). Uma entrega a uma sala sai do estoque uma única vez; quem usou pode ser atribuído depois em Uso por sala ou área sem descontar o estoque de novo.
  • Finalidade (purpose): procedure, cleaning, administrative ou other.
  • Responsável (responsibleUserId): a pessoa da equipe responsável, que pode ser diferente de quem registra.
  • Referência de atendimento (opcional) (careRef): o código do seu sistema clínico, nunca o nome de um paciente. Letras, dígitos e . _ : / -, sem espaços, até 64 caracteres. É guardada selada.
Uma sala com estoque contado recusa Entrega à sala ou área e só aceita consumos registrados a partir de uma caixa que já está no seu ponto de estoque: transfira a caixa inteira antes. Uma caixa em um depósito express só pode ser atribuída a salas e áreas da unidade desse depósito; uma caixa em um depósito central pode ser atribuída a salas e áreas de qualquer unidade. Veja Salas e áreas e Registrar consumo e transferir caixas. Um insumo (CatalogItem, itemId) é um item que a sua clínica odontológica autorizou. Ele descreve o que pode ser pedido e recebido; não é estoque. Status. Um insumo nasce draft (Rascunho). Ao ativá-lo (Ativar e fixar unidade), ele passa a active (Ativo) e sua unidade fica fixa. inactive (Inativo) é uma desativação sem exclusão: nada é apagado. Só insumos ativos podem ser adicionados a pedidos, e o console só oferece insumos ativos no recebimento. Unidades de medida. A unidade base vem de uma lista fechada: Apresentações. Uma apresentação (presentationId) é como você compra o insumo, por exemplo “Caixa com 100”. Suas Unidades base que contém são um número inteiro a partir de 1. Receber 3 de uma apresentação que contém 100 soma 300 unidades base. As apresentações têm versões: corrigir uma publica uma nova versão, e as caixas já recebidas mantêm a versão com que foram recebidas. Uma apresentação está active ou retired; uma retirada não pode mais ser recebida. Códigos. Uma apresentação pode ter códigos impressos na embalagem: gtin (GTIN (código de barras), de 8 a 14 dígitos), supplier (Código do fornecedor) e internal (Código interno). Um código identifica qual é o artigo, não qual é a caixa, e aponta para uma única apresentação por vez. Veja Apresentações e códigos.

Caixas

Uma caixa (StockBox, boxId) é um recipiente físico de um insumo. Ela tem:
  • um código da caixa (code) único na sua clínica odontológica. Você pode digitar a sua própria etiqueta no recebimento, ou o muveya gera uma;
  • o insumo que contém e a quantidade, sempre na unidade base do insumo;
  • o lote, os números de série e a data de validade quando o insumo os controla;
  • Recebida como: a apresentação, a versão e a quantidade com que chegou, quando foi recebida como apresentação;
  • o depósito em que está e o seu status.
Uma caixa só é criada por um recebimento, ou ao separar parte de outra caixa. Ela nunca é editada: sua quantidade só muda por meio de movimentos do registro. Como o status de uma caixa muda:
  • De active para depleted: um consumo, ou uma correção, que a zera.
  • De active para quarantine, expired ou disposed: Tirar a caixa de uso, que só aparece em caixas ativas. O muveya também aceita descartar uma caixa em quarentena ou vencida, mas o console não tem um botão para isso. O Recolhimento de lote coloca em quarentena, de uma vez, todas as caixas ativas de um lote.
  • De active para in_transit: o despacho. De in_transit para active no depósito de destino: um recebimento aceito. De in_transit de volta à origem como active ou quarantine: um recebimento contestado.
Validade. Uma caixa cuja data de validade já passou não pode ser consumida, reservada nem separada, mesmo que o status continue active. A data de validade vale até o fim daquele dia do calendário em UTC. Separar parte de uma caixa cria um novo recipiente com o mesmo insumo, lote, validade e data de recebimento, vinculado à caixa de origem. Só é possível separar unidades livres (não reservadas), nunca todo o conteúdo, e não de uma caixa que controla números de série. Na preparação de um pedido, a caixa é separada automaticamente quando contém mais do que o pedido precisa. Veja Caixas e etiquetas.

O registro de movimentos

Cada mudança de estoque é um movimento (StockMovement) incluído em um registro imutável. Um movimento guarda o tipo, a caixa, o insumo, a mudança de quantidade, quem fez (actorId), quando aconteceu (occurredAt, pelo relógio do servidor) e, quando for o caso, o pedido, os depósitos, um motivo, a segunda pessoa que aprovou ou a sala ou área. Nada no registro é editado ou apagado. Um erro é corrigido com um novo movimento que o compensa, e o original continua visível. Uma operação repetida nunca conta duas vezes: cada uma leva uma chave de idempotência, e uma repetição devolve o primeiro resultado. Veja Visão geral do estoque.

Saldos

Para cada caixa, o muveya deriva do registro: Reposição também mostra Utilizável agora: o estoque de caixas ativas e não vencidas que de fato pode ser usado.

FEFO e FIFO

Quando o muveya reserva estoque para um pedido, ele ordena as caixas candidatas de cada insumo:
  • FEFO (fefo, primeiro a vencer, primeiro a sair) quando alguma caixa candidata tem data de validade: primeiro a validade mais próxima, as caixas sem validade por último, e depois o recebimento mais antigo.
  • FIFO (fifo, primeiro a entrar, primeiro a sair) nos demais casos: primeiro o recebimento mais antigo.
Só caixas ativas e não vencidas são candidatas. Se o pedido indicar um depósito de origem (Retirar estoque de), só as caixas desse depósito são consideradas; caso contrário, o servidor não limita a busca a um depósito. Uma linha pode retirar de várias caixas.

Pedidos

Um pedido (Order, orderId) é uma solicitação interna de insumos de uma unidade, entregue em um dos seus depósitos. Cada pedido tem um número único na sua clínica odontológica (number, exibido como #12). Regras:
  • Só quem pediu pode adicionar, alterar ou remover linhas, e só enquanto o pedido é um rascunho. Cada linha é um insumo ativo e uma quantidade inteira de pelo menos 1, na unidade base do insumo. Ao ser adicionada, a linha guarda uma cópia do custo, da categoria e da marca de alto valor do insumo.
  • Só quem pediu pode enviar o pedido, e ele precisa de pelo menos uma linha. O valor do pedido fica congelado no envio.
  • O Motivo (opcional) aceita até 2000 caracteres e é recusado se parecer conter dados pessoais.
  • Só quem pediu pode cancelar, e só a partir de draft, submitted ou pending_approval.
  • Enviar e cancelar verificam a versão do pedido: se o pedido mudou um instante antes, a ação é recusada e a tela mostra a versão mais recente.
Qualquer outra mudança de status é recusada. Veja Criar e acompanhar pedidos.

Aprovações e separação de funções

A política de aprovação decide quais pedidos enviados precisam da decisão de alguém. Veja Política de aprovação.
  • Versões. Publicar cria uma nova versão (policyVersion) que substitui a vigente. Versões publicadas nunca são editadas. Até que a primeira versão seja publicada, os pedidos enviados ficam em submitted; depois disso, são processados na próxima vez que qualquer pedido for enviado.
  • Regras. Cada regra tem condições e um requisito. Condições: faixa de valor do pedido (minValue, maxValue, em unidades menores, inclusive), tipos de pedido (orderTypes), categorias (categories) e insumos de alto valor (highValue). Uma condição vazia vale para todo pedido; uma condição de valor nunca vale para um pedido sem valor. O requisito é um Nome da etapa (stage, até 64 caracteres), a permissão que quem decide precisa ter (requiredScope, approvals.decide quando o console escreve a regra) e Pessoas que devem aprovar (minApprovers, de 1 a 10). Uma política tem no máximo 100 regras.
  • Avaliação. No envio, o muveya aplica a versão vigente ao pedido e guarda o plano resultante com o pedido. Se nenhuma regra corresponder (ou se a política não tiver regras, como com Publicar sem aprovações), o sistema aprova o pedido na hora (auto_approve) e a aprovação automática fica auditada.
  • Decisões. Quem decide escolhe uma etapa e escolhe Aprovar ou Rejeitar. Uma rejeição encerra o pedido na hora. O pedido passa a approved só quando cada etapa tem o número exigido de aprovadores diferentes. Cada decisão é um registro imutável (approved ou rejected) com a pessoa, o horário, a etapa, a versão da política e um comentário opcional (até 500 caracteres no console).
Separação de funções:
  • Quem pediu nunca pode decidir o próprio pedido. A tentativa é recusada e auditada, e a caixa de aprovações nunca lista os seus próprios pedidos.
  • Uma pessoa decide uma mesma etapa de um pedido uma única vez.
  • Quem decide precisa ter todas as permissões que a etapa exige e acesso à unidade do pedido.
  • Uma decisão tomada sobre uma versão desatualizada do pedido é recusada sem gravar nada.
  • Correções de estoque acima do limite exigem uma segunda pessoa, diferente (veja Contagens e correções).
  • A entrega é confirmada pelo lado de origem (delivery.confirm) e o recebimento pelo lado de destino (receipt.confirm). Uma pessoa limitada a unidades específicas que tem acesso tanto à unidade de origem quanto a uma unidade de destino diferente não pode confirmar o recebimento nem encerrar o pedido.
Veja Aprovar ou rejeitar pedidos.

Atendimento e custódia

Depois de aprovado, um pedido é executado por um atendimento (fulfillment), que acompanha as caixas do depósito de origem até o destino. A custódia é por caixa inteira: uma caixa viaja completa, e uma caixa que contém mais do que o pedido precisa é separada antes. O atendimento também tem um status próprio: allocating (Reservando estoque) enquanto a reserva acontece, e depois os mesmos valores do pedido, de allocated a closed. Regras que vale conhecer:
  • A alocação é tudo ou nada. Se uma linha não puder ser reservada por completo, tudo o que foi reservado nessa tentativa é liberado e o pedido continua Aprovado. O muveya tenta de novo em uma alocação posterior.
  • A separação só aceita caixas reservadas para aquele pedido; cada caixa é registrada uma única vez.
  • O despacho: o console oferece Despachar pedido quando todas as caixas reservadas foram retiradas, e você pode anotar a transportadora. Cada caixa retirada deve conter exatamente a quantidade do pedido, o que a separação garante ao dividir as caixas maiores.
  • Os problemas de entrega valem para o envio inteiro. O console oferece Não foi possível entregar, Chegou danificado, Foi para o lugar errado e Outra coisa, mais detalhes opcionais. Um pedido em exception não pode ser recebido nem encerrado pelo console, e as caixas continuam Em trânsito; escreva para team@muveya.com para resolver.
  • O recebimento precisa decidir cada caixa entregue uma vez. Uma caixa contestada precisa de um motivo (o console oferece Danificada, Faltando, Insumo errado, Vencida e Outro) e de uma descrição em Evidência do problema; você pode pedir que ela fique em quarentena quando voltar.
  • O encerramento não movimenta estoque; fica disponível quando cada caixa foi aceita ou devolvida.
  • Cada uma dessas etapas grava um registro imutável com a pessoa e o horário. O Histórico do pedido em Entregas mostra esses registros junto com os movimentos das caixas.
Veja Entregas: visão geral e Histórico de custódia.

Contagens e correções

Verificações físicas e correções exigem inventory.adjust.
  • Corrigir esta caixa registra uma entrada ou uma saída com quantidade e motivo (Correção de contagem, Danificado, Uso não registrado, Outro).
  • Contar um insumo conta as caixas ativas de um insumo em um depósito. Começar a contar abre uma contagem antes da medição, para perceber qualquer movimento que aconteça nesse meio-tempo. Uma contagem (cycleCount) está open, submitted ou cancelled. Ao salvar, cada caixa termina sem diferença, corrigida, aguardando aprovação ou alterada durante a contagem (é preciso contar de novo).
  • Uma campanha de contagem (countCampaign) agrupa as contagens de um depósito e está open (Em andamento) ou closed (Encerrada). Contagens também lista as caixas que não foram contadas recentemente.
  • Limite de aprovação. Uma correção maior que o limite ainda não altera o estoque: ela vira uma solicitação em Correções de estoque que outra pessoa com inventory.adjust precisa aprovar pela própria sessão. O limite é de 100 unidades base por padrão; um mínimo por depósito pode reduzi-lo (de 0 a 100), nunca aumentá-lo. Para insumos de alto valor, toda correção exige outra pessoa. Uma caixa tem no máximo uma solicitação pendente.
Veja Correções de estoque e Contagens físicas.

Reposição e alertas

Um mínimo por depósito (stockPolicy) é definido para um insumo em um depósito, na unidade base dele: Reposição compara Utilizável agora com o mínimo: Abaixo do mínimo (below_minimum), Suficiente (ok) ou Sem mínimo (no_minimum). Os alertas de estoque são gerados automaticamente: low_stock (Abaixo do mínimo) e expiry_approaching (Perto do vencimento, exibido como Vencido quando a data já passou). Um alerta fica open até a condição desaparecer e depois passa a resolved. Veja Reposição e alertas de estoque.

Permissões e acesso a unidades e depósitos

O acesso de uma pessoa em uma clínica odontológica tem três partes. 1. Função (roleTemplate): um modelo. 2. Permissões (scopes): todas as outras são concedidas uma a uma, para qualquer função. inventory.adjust também inclui inventory.receive, inventory.consume e inventory.transfer. audit.read e integrations.manage podem ser concedidas, mas nenhuma tela do console as usa por enquanto. 3. Acesso a unidades e depósitos: Acesso às unidades (clinicScopeMode, clinicIds) e Acesso aos depósitos (warehouseScopeMode, warehouseIds), cada um com todos (inclusive os criados depois), uma lista selecionada ou nenhum. O acesso às unidades limita os pedidos, aprovações e entregas que a pessoa vê; o acesso aos depósitos limita o estoque que ela vê e movimenta. O proprietário fundador começa com acesso a tudo. Ninguém pode mudar o próprio acesso a unidades e depósitos, e um convite sempre concede pelo menos uma unidade. O console oculta o que você não pode usar, mas o servidor verifica cada solicitação por conta própria. Veja Funções e permissões.

Omissão de dados no servidor

Alguns campos são omitidos pelo servidor quando quem consulta não tem a permissão. Eles não aparecem na resposta (não vêm em branco), então nenhuma tela, exportação ou integração consegue revelá-los. A API pública nunca devolve valores de pedidos nem referências de pacientes. A referência do paciente é guardada criptografada e nunca é enviada à IA, e as mensagens de WhatsApp nunca mostram custos, valores de pedidos ou referências de pacientes. Veja Segurança e privacidade.

Auditoria

Além do registro de movimentos e dos registros imutáveis de decisões, entregas, recebimentos e encerramentos, o muveya grava registros de auditoria para ações sensíveis e recusas, por exemplo decisões de aprovação, uma tentativa recusada de aprovar o próprio pedido, aprovações automáticas, correções de estoque, etapas de custódia e importações de catálogo recusadas. Os registros de auditoria nunca são editados. Por enquanto não há tela nem API que os pesquise; use os Movimentos de uma caixa e o Histórico de um pedido para acompanhar o que aconteceu.

Idiomas, fusos horários e moeda

  • Idiomas. O console, as mensagens do servidor e os e-mails de convite estão em inglês (en), espanhol (es) e português (pt). Escolha em Idioma, na barra lateral, no cabeçalho do celular ou nas telas de entrada. O navegador guarda a escolha; na primeira vez, o console segue o idioma do navegador e, se não puder, usa inglês. Códigos, status e nomes de permissões continuam em inglês em todos os idiomas.
  • Fusos horários. O muveya guarda todos os horários em UTC. A maioria das telas mostra datas e horas no fuso horário do seu dispositivo. O relatório de consumo agrupa dias e semanas em UTC, e os resultados de análises declaram timezone como UTC. Não há configuração de fuso horário por clínica odontológica.
  • Moeda. Não há configuração de moeda por clínica odontológica. Cada custo de insumo leva o próprio código ISO 4217 (três letras maiúsculas, como USD ou CLP) e um valor em unidades menores inteiras: 1200 equivale a USD 12,00 ou CLP 1200. O valor de um pedido só soma as linhas na mesma moeda da primeira linha com custo, então mantenha o seu catálogo em uma única moeda.

Páginas relacionadas