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 é
activeouinactive. 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.
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,administrativeouother. - 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.
Insumos e catálogo
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.
Como o status de uma caixa muda:
- De
activeparadepleted: um consumo, ou uma correção, que a zera. - De
activeparaquarantine,expiredoudisposed: 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
activeparain_transit: o despacho. Dein_transitparaactiveno depósito de destino: um recebimento aceito. Dein_transitde volta à origem comoactiveouquarantine: um recebimento contestado.
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.
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,submittedoupending_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 emsubmitted; 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.decidequando 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
approvedsó quando cada etapa tem o número exigido de aprovadores diferentes. Cada decisão é um registro imutável (approvedourejected) com a pessoa, o horário, a etapa, a versão da política e um comentário opcional (até 500 caracteres no console).
- 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.
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
exceptionnã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.
Contagens e correções
Verificações físicas e correções exigeminventory.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,submittedoucancelled. 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) ouclosed(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.adjustprecisa 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
timezonecomoUTC. 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
USDouCLP) e um valor em unidades menores inteiras:1200equivale 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.