# Matriz de acesso de menu

## Como o menu e montado

1. O catalogo de modulos, telas e acoes e definido em `database/seeders/AccessControlSeeder.php`.
2. Cada acao gera uma permissao no formato `modulo.tela.acao`.
3. O `MenuService` monta o menu com base nas permissoes dos grupos do usuario.
4. Apenas telas com `menu = S` e `ativo = S` entram no menu.
5. A exibicao no menu nao substitui a protecao real: as rotas continuam protegidas por middleware `permission:`.

## Regras de exibicao

Fonte principal: `app/Services/MenuService.php`

- Tela so aparece se o usuario possuir permissao vinculada a ela.
- Telas duplicadas por multiplos grupos sao deduplicadas.
- Modulos sem telas acessiveis nao aparecem.
- A ordem visual segue `modulo.ordem` e `tela.ordem`.

## Matriz atual por modulo

| Modulo | Tela | Rota de menu | Permissoes catalogadas | Aparece no menu | Middleware da rota principal |
| --- | --- | --- | --- | --- | --- |
| Administracao | Catalogo de Acesso | `administracao.catalogo.index` | `administracao.catalogo.visualizar`, `criar`, `editar`, `excluir` | Sim | `administracao.catalogo.visualizar` |
| Estoque | Produtos | `estoque.produtos.index` | `estoque.produtos.visualizar`, `criar`, `editar`, `excluir` | Sim | `estoque.produtos.visualizar` |
| OPME | Cruzamento VIMAN x Sankhya | `opme.consolidado-viman-sankhya.index` | Acesso administrativo | Sim | `auth` |
| Estoque | Posicao Por Rastro | `estoque.posicao-rastro.index` | `estoque.posicao-rastro.visualizar` | Sim | `estoque.posicao-rastro.visualizar` |
| Estoque | Movimentacoes | `estoque.movimentacoes.index` | `estoque.movimentacoes.visualizar`, `criar`, `aprovar`, `cancelar` | Sim | `estoque.movimentacoes.visualizar` |
| Fiscal | NF-e | `fiscal.nfe.index` | `fiscal.nfe.visualizar`, `emitir`, `cancelar` | Sim | `fiscal.nfe.visualizar` |
| Financeiro | Contas | `financeiro.contas.index` | `financeiro.contas.visualizar`, `criar`, `editar`, `aprovar` | Sim | `financeiro.contas.visualizar` |
| OPME | Entradas OPME | `opme.entradas.index` | `opme.entradas.visualizar`, `importar`, `validar`, `aprovar`, `integrar` | Sim | `opme.entradas.visualizar` |
| OPME | Divergência Geral | `opme.divergencia-geral.index` | `opme.divergencia-geral.visualizar` | Sim | `opme.divergencia-geral.visualizar` |
| OPME | Pedidos OPME | `opme.pedidos.index` | `opme.pedidos.visualizar` | Sim | `opme.entradas.visualizar` |
| OPME | Importacao de XML | `opme.importacao-xml.index` | `opme.importacao-xml.visualizar`, `importar` | Sim | `opme.importacao-xml.visualizar` |
| OPME | Assistente Corporativo | `opme.assistente.index` | `opme.assistente.visualizar` | Sim | `opme.assistente.visualizar` |

## Grupos atuais

| Grupo | Regra atual |
| --- | --- |
| `administracao` | Recebe todas as permissoes do sistema no seeder |
| `operacao` | E criado no seeder, mas nao recebe permissoes por padrao |

## Observacao importante sobre OPME

Hoje existe um desalinhamento intencional ou temporario no portal de pedidos OPME:

- O menu de Pedidos OPME e exibido a partir da permissao `opme.pedidos.visualizar`.
- Porem a rota principal `opme.pedidos.index` ainda esta protegida por `opme.entradas.visualizar`.
- As rotas de criar e gravar pedido tambem dependem de `opme.entradas.importar`.

Impacto pratico:

- Um usuario pode ganhar o item de menu `Pedidos OPME` e ainda assim nao conseguir abrir a tela se nao tiver `opme.entradas.visualizar`.
- O portal de pedidos ainda nao esta totalmente desacoplado das permissoes de entradas OPME.

## Recomendacao de proximo ajuste

Se a intencao for separar de fato o portal de pedidos como area propria, o ideal e:

1. Trocar as rotas de listagem e detalhe para `opme.pedidos.visualizar`.
2. Criar acoes proprias para pedidos, como `opme.pedidos.criar` e possivelmente `opme.pedidos.editar`.
3. Manter `opme.entradas.*` apenas para recebimento, validacao e integracao de XML/NF.
