# Conectar a sua aplicação ao menu do UNO ERP, validando usuário e permissão

Este guia é para quem constrói uma aplicação com a UNIA (por exemplo, no Lovable) e quer abri-la pelo menu do UNO ERP. Ele explica como a aplicação recebe o usuário que a abriu, confere quem ele é e se ele tem permissão para usar a tela.

## 1. Cadastrar o menu no UNO ERP

CADASTROS GERAIS => CADASTROS INICIAIS => Customização => Menu

* Cadastre a rota (URL) da sua aplicação em **Comando** e escolha os parâmetros. Sugerimos usar apenas `{TOKEN}`: o ERP abre a aplicação como `<Comando>?TOKEN=<token do usuário>`.
* Anote o código do **Programa** que o ERP gera ao gravar (ex.: `GGC10115`). É esse código que a aplicação procura nas permissões do usuário (passo 6).
* Adicione a permissão desse programa no grupo de teste (Segurança => Permissões), saia do ERP e entre novamente.

## 2. Encontrar o link do UNO ERP da sua empresa

É o endereço que você usa para acessar o UNO ERP pela web, terminado em `-web`. O formato mais comum é:

* `https://<SUA_APLICAÇÃO>.omegasoft.net.br/<SUA_APLICAÇÃO>-web`

O domínio pode ser outro na sua empresa: use o endereço exato do seu ERP.

## 3. Montar o link da API de usuário

Troque `-web` por `-api/predict/v1/unia/me` e salve essa URL na configuração da sua aplicação, de preferência numa variável de ambiente do servidor:

* `https://<SUA_APLICAÇÃO>.omegasoft.net.br/<SUA_APLICAÇÃO>-api/predict/v1/unia/me`

## 4. Como o UNO ERP chama a sua página

* Suponha que o link da sua aplicação seja: `https://minha-aplicacao.com.br/dash_diretoria`
* O UNO ERP vai abrir: `https://minha-aplicacao.com.br/dash_diretoria?TOKEN=<token do usuário>`
* O token é um JWT: três partes separadas por ponto, começando com `eyJ` (ex.: `eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOi...`).

Assim que ler o token, tire-o da barra de endereço (redirecione para a mesma página sem o `?TOKEN=`) e não grave URLs com o token em logs. Ele dá acesso aos dados da empresa em nome do usuário.

## 5. Validar a sessão e o usuário

Faça esta chamada **no servidor** (por exemplo, numa Supabase Edge Function), nunca no navegador: a resposta traz a chave de IA da empresa (`llmApiKey`), que não pode chegar ao navegador.

* Método: `GET`
* URL: `https://<SUA_APLICAÇÃO>.omegasoft.net.br/<SUA_APLICAÇÃO>-api/predict/v1/unia/me`
* Header: `Authorization: Bearer <TOKEN>`
* Se a resposta não for `200`, trate o token como inválido ou expirado.

Exemplo de resposta:

```json
{
    "codColaborador": 37,
    "codClienteUC": 123456,
    "aplicacao": "<SUA_APLICAÇÃO>",
    "idUsuario": "usuario.exemplo",
    "llmBaseUrl": "https://api.anthropic.com",
    "llmApiKey": "sk-ant-...",
    "empresas": [
        {
            "codEmpresa": 1,
            "nomeFantasia": "Nome Fantasia da Empresa 1",
            "razaoSocial": "Razão Social Empresa 1",
            "logo": "/UCOMMERCE/<SUA_APLICAÇÃO>/empresa/1/logo.img",
            "situacao": "ATIVO",
            "siglaUf": "SP"
        },
        {
            "codEmpresa": 2,
            "nomeFantasia": "Nome Fantasia da Empresa 2",
            "razaoSocial": "Razão Social Empresa 2",
            "logo": "/UCOMMERCE/<SUA_APLICAÇÃO>/empresa/2/logo.img",
            "situacao": "ATIVO",
            "siglaUf": "SP"
        }
    ],
    "programas": [
        "ATD0001",
        "ATD0002",
        "...",
        "GGC10115",
        "VDW0606"
    ]
}
```

## 6. Validar a permissão

Confira se o código do programa da sua tela (o do passo 1, ex.: `GGC10115`) está na lista `programas` do usuário.

* Se estiver:
    * Crie a sessão na sua aplicação/Supabase com as permissões do usuário (todas, ou só as que a sua aplicação usa).
    * Apresente a sua tela.
* Se não estiver:
    * O usuário é válido, mas o grupo dele não tem acesso. Mostre uma mensagem de acesso negado pedindo para o administrador liberar o programa no grupo do usuário (UNO ERP => Segurança => Permissões).

## 7. Login fora do UNO ERP (opcional)

Se a aplicação também puder ser aberta fora do menu do UNO ERP, sugerimos que o login seja **sempre** baseado em origem única: o *UNO ERP*.

* Consulte a tabela `sg_colaborador`, nas colunas `id_usuario` e `senha` (a senha é armazenada convertida em MD5).
* Faça essa verificação só no servidor: a coluna `senha` nunca deve chegar ao navegador.
* Atenção com o campo e-mail: ele **não** é **único** no UNO. Use o `id_usuario`.

## 8. Fluxo de login sugerido

1. O servidor recebe a requisição.
2. Veio a variável **TOKEN**: valide-a (passos 5 e 6), mesmo que já exista uma sessão. O token vale mais que a sessão antiga, porque outro usuário pode ter aberto a tela no mesmo navegador.
3. Token válido e com permissão: crie (ou troque) a sessão e apresente a tela.
4. Token inválido ou expirado: informe que houve um erro na sessão e abra a página de login.
5. Não veio o TOKEN e o usuário já está logado: atenda conforme as permissões dele.
6. Não veio o TOKEN e o usuário não está logado: abra a página de login.
