> ## Documentation Index
> Fetch the complete documentation index at: https://muveya.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Conceitos

> O modelo por trás de cada tela do muveya: clínica odontológica, unidades, depósitos, insumos, caixas, registro de movimentos, pedidos, aprovações, custódia e permissões

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](/docs/pt/glossary) 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](/docs/pt/api-reference/authentication).

## 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**.

| Campo | Regras |
| - | - |
| Nome | Obrigatório, de 1 a 120 caracteres. Pode ser renomeado. |
| Status | `active` ou `inactive` (**Ativar unidade** / **Desativar unidade**). Não é possível criar um pedido novo para uma unidade inativa. |

O **Acesso às unidades** de uma pessoa decide quais pedidos, aprovações e entregas ela vê. Veja [Unidades](/docs/pt/locations/clinics).

## Depósitos

Um **depósito** (`warehouse`, `warehouseId`) é um lugar onde as caixas ficam guardadas. Cada caixa está em um único depósito por vez.

| Tipo | `kind` | Pertence a | Uso típico |
| - | - | - | - |
| **Central** | `central` | Nenhuma unidade; atende toda a clínica odontológica | O almoxarifado principal que abastece várias unidades |
| **Express** | `express` | Uma única unidade, escolhida na criação | O pequeno almoxarifado dentro de uma unidade, onde os pedidos dela são entregues |

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](/docs/pt/locations/warehouses).

## 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.

| Controle de estoque | `stockControl` | O que significa |
| - | - | - |
| **Sem contagem** | `uncounted` | O que é entregue à sala sai do estoque na hora; o que sobra na sala não é contado. |
| **Estoque contado** | `controlled` | A sala mantém estoque contado próprio em um depósito express da mesma unidade, o seu **Ponto de estoque**. O console pode criar esse depósito automaticamente. Um depósito atende no máximo uma sala. |

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](/docs/pt/locations/destinations) e [Registrar consumo e transferir caixas](/docs/pt/inventory/use-and-moves).

## 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.

| Campo | Campo da API | Regras |
| - | - | - |
| **SKU** | `sku` | Obrigatório, único na sua clínica odontológica, até 64 caracteres (letras, dígitos, `.`, `_`, `/`, `-`). Não pode ser alterado depois. |
| **Nome do insumo** | `name` | Obrigatório, até 200 caracteres. |
| **Categoria** | `categoryId` | Obrigatória; uma categoria da sua clínica odontológica. |
| **Unidade** | `unitOfMeasure` | A unidade base em que toda quantidade deste insumo é contada. Fica fixa ao ativar o insumo ou ao recebê-lo pela primeira vez. |
| **Criticidade** | `criticality` | `low`, `medium` ou `high`. |
| **Apresentação** | `packaging` | Texto livre, só descritivo. Nunca altera quantidades. Não confunda com as **Apresentações** do insumo. |
| **Controlar lotes**, **Controlar números de série**, **Controlar validades** | `tracksLot`, `tracksSerial`, `tracksExpiry` | O que um recebimento deve registrar para cada caixa. |
| **Insumo de alto valor** | `highValue` | Pode acionar regras de aprovação, e toda correção do seu estoque exige uma segunda pessoa. |
| **Custo**, **Moeda** | `cost`, `currency` | Opcionais. Veja [Custos](/docs/pt/catalog/costs). |

**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:

| `unitOfMeasure` | Rótulo no console |
| - | - |
| `unit` | **Unidade** |
| `box` | **Caixa** |
| `pack` | **Pacote** |
| `bottle` | **Frasco** |
| `ampoule` | **Ampola** |
| `milliliter` | **Mililitro** |
| `liter` | **Litro** |
| `gram` | **Grama** |
| `kilogram` | **Quilograma** |
| `pair` | **Par** |
| `kit` | **Kit** |

**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](/docs/pt/catalog/presentations-and-codes).

## 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.

| Status | Rótulo no console | Significado |
| - | - | - |
| `active` | **Ativa** | Em um depósito e utilizável, a menos que a data de validade já tenha passado |
| `in_transit` | **Em trânsito** | Despachada para um pedido e ainda não recebida. Não pode ser reservada, consumida nem transferida. |
| `quarantine` | **Em quarentena** | Separada para verificação. Não aceita movimentos e nunca é retirada para um pedido. |
| `expired` | **Vencida** | Marcada como vencida. Fora do estoque utilizável. |
| `depleted` | **Esgotada** | A quantidade em mãos chegou a zero por consumo ou por uma correção. |
| `disposed` | **Descartada** | Descartada. Fora do estoque utilizável. |

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](/docs/pt/inventory/lot-recall) 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](/docs/pt/inventory/boxes).

## 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.

| Tipo | Rótulo no console | Registrado quando | Em mãos | Reservado |
| - | - | - | - | - |
| `receive` | **Recebido** | O estoque é recebido, ou uma caixa aceita chega ao destino do pedido | aumenta | sem mudança |
| `reserve` | **Reservado** | O estoque é reservado para um pedido aprovado | sem mudança | aumenta |
| `release` | **Liberado** | Uma reserva é liberada | sem mudança | diminui |
| `pick` | **Retirado para o pedido** | Uma caixa reservada é escaneada para o seu pedido | sem mudança | sem mudança |
| `dispatch` | **Despachado** | Uma caixa retirada sai do depósito | diminui | diminui |
| `transfer_out`, `transfer_in` | **Saída por transferência**, **Entrada por transferência** | Uma caixa inteira vai para outro depósito | sem mudança | sem mudança |
| `split_out`, `split_in` | **Separação (saída)**, **Separação (entrada)** | Parte de uma caixa é separada em um novo recipiente | diminui na caixa original, aumenta na nova | sem mudança |
| `consume` | **Consumido** | Um consumo é registrado | diminui | sem mudança |
| `return` | **Devolvido** | Uma caixa contestada volta ao depósito de onde saiu | aumenta | sem mudança |
| `adjust_gain`, `adjust_loss` | **Correção (entrada)**, **Correção (saída)** | Uma correção ou uma diferença de contagem é aplicada | aumenta ou diminui | sem mudança |
| `expire` | **Vencido** | Uma caixa é marcada como vencida | sem mudança | sem mudança |
| `quarantine` | **Em quarentena** | Uma caixa ou um lote entra em quarentena | sem mudança | sem mudança |
| `dispose` | **Descartado** | Uma caixa é descartada | sem mudança | sem mudança |

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](/docs/pt/inventory/overview).

## Saldos

Para cada caixa, o muveya deriva do registro:

| Número | Campo | Significado |
| - | - | - |
| **Em mãos** | `onHand` | A quantidade física na caixa: a soma das suas mudanças em mãos. Nunca fica abaixo de zero. |
| **Reservado** | `reserved` | A parte comprometida com pedidos aprovados. |
| **Disponível** | `available` | `onHand - reserved`: o que ainda pode ser reservado. |

**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`).

| Tipo | `type` | Quem pode criar | Dados extras |
| - | - | - | - |
| **Geral** | `general` | `orders.create` | Motivo opcional |
| **Clínico** | `clinical` | `orders.create` e `orders.clinical.create` (a opção **É para o tratamento de um paciente** do console) | Referência do paciente opcional (`patientRef`), até 200 caracteres |

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.

| Status | Rótulo no console | Significado |
| - | - | - |
| `draft` | **Rascunho** | Em preparação por quem pede |
| `submitted` | **Enviado** | Enviado; aguarda a aplicação da política de aprovação |
| `pending_approval` | **Aguardando aprovação** | Precisa de uma ou mais decisões |
| `approved` | **Aprovado** | Aprovado; ainda sem estoque reservado |
| `rejected` | **Rejeitado** | Rejeitado. Final. |
| `cancelled` | **Cancelado** | Cancelado por quem pediu. Final. |
| `allocated` | **Estoque reservado** | Todas as linhas têm estoque reservado |
| `picking` | **Em preparação** | Pelo menos uma caixa foi retirada |
| `dispatched` | **Despachado** | As caixas saíram do depósito de origem |
| `delivered` | **Entregue** | Entrega confirmada |
| `exception` | **Problema de entrega** | Entrega confirmada com problema |
| `received` | **Recebido** | Todas as caixas aceitas no destino |
| `partially_fulfilled` | **Recebido em parte** | Pelo menos uma caixa contestada |
| `closed` | **Encerrado** | Encerrado pelo destino. Final. |

```mermaid theme={null}
stateDiagram-v2
    [*] --> draft
    draft --> submitted: enviar
    draft --> cancelled: cancelar
    submitted --> pending_approval: a política exige aprovação
    submitted --> approved: a política não exige aprovação
    submitted --> cancelled: cancelar
    pending_approval --> approved: aprovado em todas as etapas
    pending_approval --> rejected: rejeitado
    pending_approval --> cancelled: cancelar
    approved --> allocated: estoque reservado
    allocated --> picking: primeira caixa retirada
    picking --> dispatched: despacho
    dispatched --> delivered: entrega confirmada
    dispatched --> exception: problema de entrega informado
    delivered --> received: todas as caixas aceitas
    delivered --> partially_fulfilled: uma caixa contestada
    received --> closed: encerrar
    partially_fulfilled --> closed: encerrar
    rejected --> [*]
    cancelled --> [*]
    closed --> [*]
```

Qualquer outra mudança de status é recusada. Veja [Criar e acompanhar pedidos](/docs/pt/orders/create-and-track).

## 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](/docs/pt/orders/approval-policy).

* **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](/docs/pt/orders/approvals).

## 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.

| Etapa | Quem | Status do pedido depois | Registro | Caixa |
| - | - | - | - | - |
| Alocação | O sistema, logo após a aprovação | `allocated` | `reserve` em cada caixa escolhida | Continua `active` |
| Separação | `fulfillment.pick` | `picking` (primeira caixa) | `pick`; mais `split_out`, `split_in`, `release` e `reserve` quando uma caixa é separada | Continua `active` |
| Despacho | `fulfillment.dispatch` | `dispatched` | `dispatch` | `in_transit` |
| Entrega | `delivery.confirm` | `delivered`, ou `exception` com problema | Nenhum | Continua `in_transit` |
| Recebimento | `receipt.confirm` | `received`, ou `partially_fulfilled` com contestação | Caixa aceita: `receive` no destino. Caixa contestada: `return` na origem | Aceita: `active` no destino. Contestada: `active` ou `quarantine` na origem |
| Encerramento | `fulfillment.close` | `closed` | Nenhum | Sem mudança |

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](mailto: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](/docs/pt/deliveries/overview) e [Histórico de custódia](/docs/pt/deliveries/custody-history).

## 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.

| Status da solicitação | Rótulo no console | Resultado |
| - | - | - |
| `pending` | **Pendentes** | Nada gravado ainda |
| `approved` | **Aprovada por …** | Exatamente um movimento de correção gravado, com as duas pessoas |
| `rejected` | **Rejeitada por …** | Nada gravado |
| `withdrawn` | **Retirada** | Nada gravado |
| `stale` | **Desatualizada: a caixa mudou** | Nada gravado; é preciso solicitar ou contar de novo |

Veja [Correções de estoque](/docs/pt/inventory/corrections) e [Contagens físicas](/docs/pt/inventory/counts).

## Reposição e alertas

Um **mínimo por depósito** (`stockPolicy`) é definido para um insumo em um depósito, na unidade base dele:

| Campo | Regras |
| - | - |
| **Mínimo** | Número inteiro a partir de 0. Zero significa "nunca alertar". |
| **Pedido habitual** | Opcional, número inteiro a partir de 1. Sugerido quando o insumo fica abaixo do mínimo. |
| **Avisar antes do vencimento (dias)** | Opcional, de 1 a 365. Padrão: 30. |
| **Limite de aprovação** | Opcional, de 0 a 100. |

**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](/docs/pt/inventory/replenishment-and-alerts).

## 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.

| Função | Rótulo no console | Inclui |
| - | - | - |
| `owner` | **Proprietário** | `catalog.read`, `catalog.manage`, `members.manage`, `settings.manage`. Só um proprietário pode mudar funções, convidar administradores e transferir a propriedade. Uma clínica odontológica sempre mantém um proprietário ativo. |
| `admin` | **Administrador** | `catalog.read`, `catalog.manage`, `members.manage`, `settings.manage` |
| `member` | **Membro** | `catalog.read` |

**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`.

| Família | Permissões | Grupo no console |
| - | - | - |
| Catálogo | `catalog.read`, `catalog.manage`, `catalog.cost.read` | **Catálogo** |
| Estoque | `inventory.read`, `inventory.receive`, `inventory.consume`, `inventory.transfer`, `inventory.adjust` | **Estoque** |
| Pedidos | `orders.create`, `orders.read.all`, `orders.value.read`, `orders.clinical.create`, `orders.patient_ref.read` | **Pedidos** |
| Aprovações | `approvals.policy.manage`, `approvals.decide` | **Aprovações** |
| Atendimento | `fulfillment.pick`, `fulfillment.dispatch`, `delivery.confirm`, `receipt.confirm`, `fulfillment.close`, `fulfillment.read` | **Atendimento** |
| Relatórios e auditoria | `reports.read`, `audit.read` | **Relatórios e auditoria** |
| Administração | `members.manage`, `settings.manage`, `integrations.manage` | **Administração** |

`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](/docs/pt/account/roles-and-permissions).

## 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.

| Campo | Onde aparece | Permissão que o revela |
| - | - | - |
| Custo e moeda do insumo (`cost`, `currency`) | Catálogo, exportação CSV | `catalog.cost.read` |
| Cópia do custo em cada linha do pedido | Detalhe do pedido | `catalog.cost.read` |
| Valor do pedido e sua moeda, e o valor avaliado pela política de aprovação | Pedidos, detalhe do pedido, caixa de aprovações | `orders.value.read` |
| Referência do paciente de um pedido clínico (`patientRef`) | Detalhe do pedido | `orders.patient_ref.read` |
| Referência de atendimento de um consumo (`careRef`) | **Uso por sala ou área** | `orders.patient_ref.read` |

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](/docs/pt/trust/security-and-privacy).

## 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

* [Início rápido](/docs/pt/quickstart)
* [Glossário](/docs/pt/glossary)
* [Funções e permissões](/docs/pt/account/roles-and-permissions)
* [Visão geral do estoque](/docs/pt/inventory/overview)
* [Entregas: visão geral](/docs/pt/deliveries/overview)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.