> For the complete documentation index, see [llms.txt](https://doc.sysdevmobile.com/mss-extensibility/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.sysdevmobile.com/mss-extensibility/mss-5.1/myteam/menu-extensibility.md).

# 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
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
