# Menu Extensibility

Exemplos práticos de payloads para a **extensibilidade de menu** — entradas personalizadas na barra lateral de navegação.

### Contexto

Quando o utilizador clica numa entrada de menu de extensibilidade, o myTeam navega para uma página interna e envia um POST ao URL configurado. A autenticação do utilizador é enviada no campo `authentication` do payload, e o campo `filter` é sempre um objeto vazio.

O serviço externo identifica o utilizador através das credenciais recebidas e pode consultar a tabela `MSUSR` da base de dados do myTeam para obter qualquer informação adicional (nome, código de vendedor, etc.).

### Payload

URL configurado:

```
https://parceiro.exemplo.com/painel
```

```
{
  "authentication": {
    "user": "admin",
    "hash": "a1b2c3d4e5f6..."
  },
  "filter": {}
}

O campo `filter` é sempre enviado como objeto vazio `{}` na extensibilidade de menu. 
A identificação do utilizador é feita exclusivamente pelo campo `authentication`.
```

````json
## Exemplo de Resposta

O serviço externo deve devolver uma página HTML completa. Exemplo de um painel personalizado:

```html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        body { font-family: sans-serif; margin: 0; padding: 24px; color: #333; background: #fafafa; }
        h2 { color: #1B5E20; margin-bottom: 8px; }
        .subtitle { color: #787878; font-size: 14px; margin-bottom: 24px; }
        .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
        .card { background: #fff; border: 1px solid #e0e0e0; border-radius: 8px; padding: 20px; }
        .card .value { font-size: 28px; font-weight: 700; color: #2E7D32; }
        .card .label { font-size: 13px; color: #787878; margin-top: 4px; }
    </style>
</head>
<body>
    <h2>Painel do Vendedor</h2>
    <div class="subtitle">Utilizador: admin</div>
    <div class="grid">
        <div class="card">
            <div class="value">47</div>
            <div class="label">Clientes visitados</div>
        </div>
        <div class="card">
            <div class="value">€ 85.200</div>
            <div class="label">Vendas do mês</div>
        </div>
        <div class="card">
            <div class="value">12</div>
            <div class="label">Encomendas pendentes</div>
        </div>
    </div>
</body>
</html>
````

### Fluxo

```
Utilizador clica na entrada de menu "Painel do Vendedor"
    │
    ▼
myTeam navega para página de container interna
    │
    ▼
JavaScript envia POST ao URL configurado
    │  URL: https://parceiro.exemplo.com/painel
    │  payload: { authentication: { user: "admin", hash: "..." }, filter: {} }
    ▼
Serviço externo valida autenticação
    │
    ▼
Consulta MSUSR para obter dados do utilizador (nome, vendedor, etc.)
    │
    ▼
Processa dados de negócio
    │
    ▼
Devolve HTML (status 200)
    │
    ▼
Conteúdo apresentado em iframe de ecrã inteiro
```

{% hint style="info" %}
A página de menu extensibility ocupa o ecrã inteiro dentro do myTeam (exceto barra lateral e cabeçalho). O HTML devolvido deve ser pensado para ocupar todo o espaço disponível.O serviço externo tem acesso de leitura à base de dados do myTeam. Após validar a autenticação, pode consultar a tabela `MSUSR` (campo `USRUSR` = `authentication.user`) para obter o nome do utilizador (`USRNOM`), código de vendedor (`USRVND`) e quaisquer outros dados necessários.O acesso à entrada de menu é protegido por permissões. Mesmo que um utilizador conheça o URL direto, o myTeam valida as permissões e redireciona para a página "Não Autorizado" se o utilizador não tiver acesso.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.sysdevmobile.com/mss-extensibility/mss-5.1/myteam/menu-extensibility.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
