# Portal Fornecedor - contrato do endpoint intermediario

## Objetivo

A widget publica nao deve chamar diretamente:

- `/process-management/api/v2/processes/FlowEssentials_LancamentodeDocumento/start`
- `/api/public/ecm/dataset/datasets`

Ela deve chamar um endpoint intermediario no servidor, por exemplo:

- `POST /api/public/portalfornecedor/enviar`

Esse endpoint e quem usa `fluig_rest` no backend.

## Request esperado da widget

```json
{
  "targetState": 5,
  "comment": "Envio via portal fornecedor",
  "formFields": {
    "data_abertura": "2026-03-13",
    "emitido_por": "fornecedor",
    "entidade_responsavel": "Empresa X",
    "tipo_cadastro": "cpf",
    "emailSolicitante": "email@empresa.com.br",
    "cpf": "12345678900",
    "tipo_documento": "danfe",
    "numero_documento": "123456",
    "valor": "10,00",
    "autorizador_responsavel": "Nome do autorizador",
    "justificativa": "Descricao do servico"
  }
}
```

## Response de sucesso

```json
{
  "success": true,
  "message": "Solicitacao enviada com sucesso.",
  "processInstanceId": "12345",
  "content": {
    "processInstanceId": "12345"
  }
}
```

## Response de erro

```json
{
  "success": false,
  "message": "Descricao do erro"
}
```

## Logica esperada no backend

1. Receber o JSON da widget.
2. Validar os campos obrigatorios.
3. Usar `fluigAPI.getAuthorizeClientService()`.
4. Invocar o servico `fluig_rest`.
5. Chamar o endpoint final:
   `/process-management/api/v2/processes/FlowEssentials_LancamentodeDocumento/start`
6. Retornar para a widget somente o resultado final.

## Exemplo de chamada server-side

```javascript
var clientService = fluigAPI.getAuthorizeClientService();

var requestData = {
  companyId: String(getValue("WKCompany") || "1"),
  serviceCode: "fluig_rest",
  endpoint: "/process-management/api/v2/processes/FlowEssentials_LancamentodeDocumento/start",
  method: "post",
  timeoutService: "100",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json"
  },
  options: {
    encoding: "UTF-8",
    mediaType: "application/json",
    useSSL: true
  },
  params: payloadRecebidoDaWidget
};

var vo = clientService.invoke(JSON.stringify(requestData));
var raw = String(vo.getResult() || "");
var response = JSON.parse(raw);
```

## Configuracao da widget

Por padrao a widget usa:

- `https://api.grupoginseng.com.br/v2/portalfornecedor/enviar_api_public_portalfornecedor_enviar_post`

Se necessario, sobrescreva antes de carregar a widget:

```html
<script>
window.portalfornecedorConfig = {
  publicEndpointUrl: "https://api.grupoginseng.com.br/v2/portalfornecedor/enviar_api_public_portalfornecedor_enviar_post"
};
</script>
```

## Observacao importante

`apiKey` no front nao substitui OAuth 1.0 do Fluig. Se existir um header como `apiKey`,
ele deve ser validado apenas no endpoint intermediario. O endpoint intermediario continua
sendo o responsavel por usar `fluig_rest` no servidor.
