# Fluxos Críticos

## Venda local com sincronização

1. Criar pedido na empresa/estabelecimento.
2. Validar cliente, preço, limite e itens.
3. Confirmar pedido.
4. Criar reserva atômica.
5. Publicar `InventoryAvailabilityChanged` na outbox.
6. Worker calcula saldo publicável por conexão/anúncio.
7. Atualiza Mercado Livre com idempotência e registra resposta.
8. Reconciliação posterior confirma quantidade externa.

Se o canal estiver indisponível, a venda local continua e a central mostra risco de divergência. Pode-se usar estoque de segurança por anúncio.

## Pedido do Mercado Livre

1. Receber notificação e persistir antes de responder.
2. Validar assinatura/origem quando disponível e deduplicar.
3. Job consulta o recurso oficial usando credencial da conexão.
4. Persistir snapshot externo.
5. Localizar/criar cliente conforme política e LGPD.
6. Mapear itens para variantes internas.
7. Criar pedido interno com chave externa única.
8. Reservar estoque.
9. Se insuficiente, aplicar política: reserva parcial/bloqueio operacional/alerta; nunca inventar saldo.
10. Sincronizar outros anúncios e canais.
11. Atualizar expedição conforme eventos de logística.

## Transferência entre depósitos

1. Solicitar e aprovar.
2. Reservar no depósito de origem.
3. Separar por leitura.
4. Despachar: saída da origem e entrada em trânsito na mesma transação.
5. Receber no destino por leitura.
6. Dar saída do trânsito e entrada no destino.
7. Registrar divergências e manter pendências.

## Produção interna

1. Criar OP a partir de BOM/roteiro versionados.
2. Explodir necessidade.
3. Liberar e reservar materiais.
4. Requisitar para produção.
5. Apontar operações e consumos.
6. Registrar produção parcial, lote e perdas.
7. Colocar resultado em qualidade ou disponível.
8. Calcular custo realizado.
9. Reconciliar e encerrar.

## Tecido enviado à tinturaria

```mermaid
stateDiagram-v2
    [*] --> Disponivel
    Disponivel --> Reservado: ordem externa
    Reservado --> EmTransito: expedição
    EmTransito --> ComTerceiro: entrega
    ComTerceiro --> Consumido: beneficiamento
    Consumido --> Transformado: retorno
    Transformado --> Qualidade
    Qualidade --> DisponivelFinal: aprovação
```

Passos:

1. Abrir ordem externa para tinturaria.
2. Informar tecido cru, lotes e tecido tingido esperado.
3. Reservar e separar por etiqueta.
4. Emitir remessa operacional; documento fiscal entra quando módulo estiver habilitado.
5. Despachar para trânsito.
6. Confirmar posse do terceiro.
7. No retorno, ler documento/remessa e lotes.
8. Registrar quantidade consumida, sobra, perda e pendência.
9. Gerar lote do tecido tingido com cor, metragem/peso, qualidade e genealogia.
10. Ratear custo do tecido consumido, serviço, frete e adicionais.
11. Entrada inicial em qualidade, se configurado.
12. Liberar para disponível.
13. Encerrar somente após reconciliação total.

## Separação e expedição por etiqueta

1. Criar tarefa de separação a partir de pedidos reservados.
2. Operador abre tarefa e escolhe depósito.
3. Sistema orienta local/SKU/lote/quantidade.
4. Leitura incorreta gera som e bloqueio claro.
5. Confirmar separação e mover para área de expedição.
6. Embalar e gerar volumes/etiquetas.
7. Conferente lê pedido/volume e todos os itens requeridos.
8. Diferença impede despacho sem override autorizado.
9. Despachar efetiva saída, grava horário/usuário e eventos.
10. Reimpressão de etiqueta exige motivo e marcação da anterior quando possível.

## NF-e

1. Gerar pré-documento e snapshot.
2. Validar cadastro e regra fiscal.
3. Reservar número de forma segura.
4. Montar XML com NFePHP.
5. Assinar com certificado da empresa.
6. Enviar à SEFAZ em job fiscal.
7. Tratar autorização, rejeição, duplicidade, timeout e consulta de recibo.
8. Persistir XML enviado, retorno, protocolo e XML autorizado.
9. Gerar DANFE.
10. Publicar evento e disponibilizar arquivos autorizados.

Timeout nunca significa rejeição: antes de reenviar, consultar situação/recibo para evitar duplicidade.

## Estorno

Cada módulo implementa comando explícito de estorno:

- valida período e permissão;
- verifica efeitos posteriores;
- bloqueia ou executa reversões na ordem correta;
- gera movimentos inversos;
- mantém vínculo com o original;
- registra motivo e usuário.

