This commit is contained in:
2026-03-13 16:54:09 -03:00
parent 7113b026ef
commit e712c300c6
13 changed files with 693 additions and 264 deletions
@@ -0,0 +1,117 @@
# 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",
"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.