1
Solicitação de compras
Solicitação de compra - Ginseng
Este flow permite abertura de solicitação de compras automatizadas, informando qual item será comprado e direcionado para as aprovações corretas.
true
false
Default
Compras - Testes
<AssignmentController><Group>TIC</Group></AssignmentController>
0
0
0
Default
false
1
true
false
0
0
true
1
Solicitação de compra - Ginseng
89
9305
true
false
false
true
false
false
0
2
false
false
false
1
Solicitação de compras
1
1
Solicitar compra
Solicitar compra
Inicio da atividade
0
false
0
1
true
false
false
0
0
0
0
false
0
true
true
false
100
30
0
0
false
false
0
0
false
Default
0
10
0
false
0
0
0
0
false
1
Solicitação de compras
1
18
Receber o produto/serviço
Receber o produto/serviço
604800
false
0
Executor Atividade
<AssignmentController><BaseActivity>1</BaseActivity><Returns>Last</Returns></AssignmentController>
1
false
false
false
0
0
0
0
false
0
true
true
false
1440
13
0
0
false
false
0
0
false
0
80
0
false
0
0
0
0
false
0
1
Solicitação de compras
1
24
Verificar problema
Verificar problema
172800
false
0
Pool Grupo
<AssignmentController><Group>ComprasIndiretos</Group></AssignmentController>
1
false
false
false
0
0
0
0
false
0
true
true
false
1560
330
0
0
false
false
0
0
false
0
80
0
false
0
0
0
0
false
0
1
Solicitação de compras
1
73
Tratar erro
Tratar erro
0
false
0
Pool Grupo
<AssignmentController><Group>TIC</Group></AssignmentController>
1
false
true
false
3600
3600
0
0
false
0
true
false
false
970
640
0
0
false
false
0
0
false
0
80
0
false
0
0
0
0
false
0
1
Solicitação de compras
1
82
Enviar SC
Enviar SC
0
false
0
1
false
false
false
0
0
0
0
false
0
true
false
false
560
632
0
0
false
false
0
0
false
0
82
0
false
0
0
0
0
false
1
1
Solicitação de compras
1
114
Integrador Cotação
Integrador Cotação
0
false
0
1
false
false
false
0
0
0
0
false
0
true
false
false
560
225
0
0
false
false
0
0
false
0
82
0
false
0
0
0
0
false
1
1
Solicitação de compras
1
118
Cotação fora do prazo
Cotação fora do prazo
0
false
0
Pool Grupo
<AssignmentController><Group>ComprasIndiretos</Group></AssignmentController>
1
false
true
false
3600
3600
0
0
false
0
true
false
false
640
327
0
0
false
false
0
0
false
0
80
0
false
0
0
0
0
false
0
1
Solicitação de compras
1
121
Analisar necessidade de compra
Analisar necessidade de compra
0
false
0
Campo Formulário
<AssignmentController><FormField>gestor_cc</FormField></AssignmentController>
1
false
true
false
3600
3600
0
0
false
0
true
false
false
460
100
0
0
false
false
0
0
false
0
80
0
false
0
0
0
0
false
0
1
Solicitação de compras
1
85
Intermediário
Intermediário
Evento intermediário do processo
0
false
0
0
false
true
false
1
1
0
0
false
0
true
false
false
630
662
0
0
false
false
0
false
0
43
0
false
0
false
82
1
Solicitação de compras
1
117
Intermediário
Intermediário
Evento intermediário do processo
0
false
0
0
false
true
false
1
1
0
0
false
0
true
false
false
630
265
0
0
false
false
0
false
0
43
0
false
0
false
114
1
Solicitação de compras
1
46
Validar compra
Validar compra
false
false
false
0
true
1580
5
false
1
120
0
0
false
1
Solicitação de compras
1
39
Cancelado
Cancelado
Atividade final do processo
0
false
0
0
false
true
false
0
1
0
0
false
0
false
true
false
360
126
0
0
false
false
0
0
false
6
65
0
false
0
false
1
Solicitação de compras
1
52
Fim
Fim
Atividade final do processo
0
false
0
0
false
true
false
0
1
0
0
false
0
false
false
false
1670
41
0
0
false
false
0
0
false
6
60
0
false
0
false
1
Solicitação de compras
1
89
46
hAPI.getCardValue("validacaoItens") == "entregue"
52
0
1
Solicitação de compras
2
89
46
true
24
0
1
Solicitação de compras
1
26
false
24
18
false
false
0
1
Solicitação de compras
1
47
false
18
46
false
false
0
1
Solicitação de compras
1
48
false
46
24
Reprovar
false
false
0
1
Solicitação de compras
1
78
false
46
52
false
false
0
1
Solicitação de compras
1
86
false
85
73
false
false
0
1
Solicitação de compras
1
88
false
73
82
false
false
0
1
Solicitação de compras
1
97
false
73
false
false
0
1
Solicitação de compras
1
119
false
117
118
false
false
0
1
Solicitação de compras
1
120
false
118
114
false
false
0
1
Solicitação de compras
1
124
Rejeitar
false
121
39
false
false
0
1
Solicitação de compras
1
125
false
1
121
false
false
0
1
Solicitação de compras
1
126
Aprovar
false
121
82
false
false
0
1
Solicitação de compras
1
127
false
82
114
false
false
0
1
Solicitação de compras
1
161
Ajustar Solicitação
false
121
1
false
false
0
1
Solicitação de compras
1
162
false
114
18
false
false
0
1
servicetask82
Solicitação de compras
1
function toProtheusDate(d) {
if (!d) return "";
if (d.indexOf("/") > -1) {
var parts = d.split("/");
return parts[2] + parts[1] + parts[0]; // dd/MM/yyyy -> yyyyMMdd
}
if (d.indexOf("-") > -1) {
return d.replace(/-/g, ""); // yyyy-MM-dd -> yyyyMMdd
}
return d; // já está no formato certo
}
function hojeProtheus() {
var d = new Date();
var yyyy = d.getFullYear();
var mm = d.getMonth() + 1;
var dd = d.getDate();
if (mm < 10) mm = "0" + mm;
if (dd < 10) dd = "0" + dd;
return "" + yyyy + mm + dd; // yyyyMMdd
}
function servicetask82(attempt, message) {
log.info("🚀 Iniciando servicetask82");
var qtdItens = hAPI.getChildrenIndexes("tbItens");
log.info("📦 Total de itens na tabela: " + qtdItens.length);
var itens = [];
for (var i = 0; i < qtdItens.length; i++) {
var index = qtdItens[i];
var item = {
"C1_PRODUTO": String(hAPI.getCardValue("Codproduto___" + index)),
"C1_QUANT": Number(hAPI.getCardValue("qtd___" + index)),
"C1_DATPRF": toProtheusDate(String(hAPI.getCardValue("dataNec___" + index)))
};
itens.push(item);
log.info("📌 Item adicionado: " + JSON.stringify(item));
}
var filial = String(
hAPI.getCardValue("filialprotheus") ||
hAPI.getCardValue("filialProtheus") ||
hAPI.getCardValue("codigocentroCusto") ||
""
).trim();
if (!filial) {
throw "Campo PROTHEUS da filial não preenchido no formulário (filialprotheus).";
}
log.info("🏬 Filial PROTHEUS enviada no C1_FILENT: " + filial);
var payload = {
"C1_SOLICIT": String(hAPI.getCardValue("usuarioSolicitante")),
"C1_EMISSAO": hojeProtheus(),
"C1_FILENT": filial,
"C1_OBS": String(hAPI.getCardValue("observacoes")),
"itens": itens
};
log.info("📦 Payload montado:");
log.info(JSON.stringify(payload));
var data1 = {
companyId: '1',
serviceCode: 'Postprod',
endpoint: '/UF_MATA110',
method: 'post',
timeoutService: '60000',
params: payload, // objeto puro
headers: {
'Content-Type': 'application/json'
}
};
try {
var clientService = fluigAPI.getAuthorizeClientService();
var response = clientService.invoke(JSON.stringify(data1)); // SEMPRE stringify aqui
log.info("📬 Resposta da API Protheus:");
if (response) {
log.info("HTTP status: " + response.getHttpStatusResult());
log.info("Body: " + response.getResult());
}
if (response && response.getResult()) {
var result = JSON.parse(response.getResult());
if (result.sucesso) {
hAPI.setCardValue("numeroSCProtheus", result.C1_NUM || "");
hAPI.setCardValue("statusSCProtheus", "SC cadastrada com sucesso");
hAPI.setCardValue("statusAtendimento", "Em andamento");
hAPI.setCardValue("solicitanteSCProtheus", result.C1_SOLICIT || "");
hAPI.setCardValue("emissaoSCProtheus", result.C1_EMISSAO || "");
hAPI.setCardValue("qtdItensSCProtheus", String(result.quantidade_itens || ""));
hAPI.setCardValue("dataCadastroSCProtheus", result.data_cadastro || "");
hAPI.setCardValue("horaCadastroSCProtheus", result.hora_cadastro || "");
} else {
var erroMsg = result.erro || result.message || JSON.stringify(result);
hAPI.setCardValue("statusSCProtheus", "Erro: " + erroMsg);
hAPI.setCardValue("statusAtendimento", "Erro no envio");
throw "Erro Protheus: " + erroMsg;
}
} else {
throw "Sem resposta da API Protheus";
}
} catch (e) {
log.error("❌ Erro ao enviar SC para o Protheus: " + e);
throw e;
}
log.info("🏁 Finalização da servicetask82");
}
1
servicetask114
Solicitação de compras
1
function documentoValido(valor) {
var v = String(valor || "").trim().toUpperCase();
if (!v) return false;
if (v === "000000" || v === "000001") return false;
if (/^0+$/.test(v)) return false;
if (/^X+$/.test(v)) return false;
return true;
}
function consultarComFallback(clientService, endpoints, contexto) {
var ultimoErro = "";
for (var i = 0; i < endpoints.length; i++) {
try {
var req = {
companyId: "1",
serviceCode: "Postprod",
endpoint: endpoints[i],
method: "get",
timeoutService: "60000",
headers: {
"Content-Type": "application/json"
}
};
log.info("[ST114] Consulta " + contexto + " => " + endpoints[i]);
var response = clientService.invoke(JSON.stringify(req));
if (!response || !response.getResult()) {
ultimoErro = "Sem resposta";
continue;
}
var body = JSON.parse(response.getResult());
if (body && body.sucesso) {
return { sucesso: true, body: body };
}
ultimoErro = (body && (body.erro || body.message)) ? String(body.erro || body.message) : "Resposta sem sucesso";
} catch (e) {
ultimoErro = String(e);
}
}
return { sucesso: false, erro: ultimoErro || ("Falha na consulta de " + contexto) };
}
function apurarAssinaturas(pedidos) {
var resumo = {
total: 0,
aprovadas: 0,
pendentes: 0,
bloqueadas: 0,
rejeitadas: 0,
outros: 0
};
for (var i = 0; i < pedidos.length; i++) {
var alcadas = (pedidos[i] && pedidos[i].ALCADAS) ? pedidos[i].ALCADAS : [];
for (var j = 0; j < alcadas.length; j++) {
var status = String((alcadas[j] && alcadas[j].CR_STATUS) || "").trim();
if (!status) continue;
resumo.total++;
if (status === "03") {
resumo.aprovadas++;
} else if (status === "01" || status === "02") {
resumo.pendentes++;
} else if (status === "04") {
resumo.bloqueadas++;
} else if (status === "06" || status === "07") {
resumo.rejeitadas++;
} else {
resumo.outros++;
}
}
}
return resumo;
}
function servicetask114(attempt, message) {
log.info("[ST114] Inicio - valida cotacao, pedido e assinaturas");
var numSC = String(hAPI.getCardValue("numeroSCProtheus") || "").trim();
var numCotForm = String(hAPI.getCardValue("cotacaoSCProtheus") || "").trim();
var numPedForm = String(hAPI.getCardValue("pedidoSCProtheus") || "").trim();
if (!numSC) {
throw "Numero da SC nao informado no formulario.";
}
var clientService = fluigAPI.getAuthorizeClientService();
var consultaSC = consultarComFallback(clientService, [
"/UF_MATA110/" + numSC,
"/rest/UF_MATA110/" + numSC,
"/rest/uf_mata110/" + numSC
], "SC " + numSC);
if (!consultaSC.sucesso) {
throw "Nao foi possivel consultar a SC " + numSC + ": " + consultaSC.erro;
}
var solicitacoes = (consultaSC.body && consultaSC.body.solicitacoes) ? consultaSC.body.solicitacoes : [];
if (!solicitacoes.length) {
throw "SC " + numSC + " sem retorno de dados no Protheus.";
}
var sc = solicitacoes[0] || {};
var numCot = documentoValido(sc.C1_COTACAO) ? String(sc.C1_COTACAO).trim() : numCotForm;
var numPed = documentoValido(sc.C1_PEDIDO) ? String(sc.C1_PEDIDO).trim() : numPedForm;
if (!documentoValido(numCot)) {
hAPI.setCardValue("statusAtendimento", "Aguardando cotacao");
throw "Cotacao ainda nao disponivel para a SC " + numSC + ".";
}
hAPI.setCardValue("cotacaoSCProtheus", numCot);
if (!documentoValido(numPed)) {
hAPI.setCardValue("statusAtendimento", "Aguardando pedido");
throw "Pedido ainda nao gerado para a SC " + numSC + ".";
}
hAPI.setCardValue("pedidoSCProtheus", numPed);
var consultaPedido = consultarComFallback(clientService, [
"/UF_MATA120/" + numPed,
"/rest/UF_MATA120/" + numPed,
"/rest/uf_mata120/" + numPed
], "Pedido " + numPed);
if (!consultaPedido.sucesso) {
throw "Nao foi possivel consultar o pedido " + numPed + ": " + consultaPedido.erro;
}
var pedidos = (consultaPedido.body && consultaPedido.body.pedidos) ? consultaPedido.body.pedidos : [];
var assinatura = apurarAssinaturas(pedidos);
if (assinatura.total === 0) {
hAPI.setCardValue("statusAtendimento", "Pedido sem alcadas");
throw "Pedido " + numPed + " sem alcadas de assinatura retornadas.";
}
if (assinatura.bloqueadas > 0 || assinatura.rejeitadas > 0) {
hAPI.setCardValue("statusAtendimento", "Pedido bloqueado/rejeitado");
throw "Pedido " + numPed + " bloqueado/rejeitado. Nao pode seguir para recebimento.";
}
if (assinatura.aprovadas < assinatura.total) {
hAPI.setCardValue("statusAtendimento", "Pedido pendente de assinatura");
throw "Pedido " + numPed + " ainda nao esta 100% assinado (" + assinatura.aprovadas + "/" + assinatura.total + ").";
}
hAPI.setCardValue("statusAtendimento", "Pedido 100% assinado");
log.info("[ST114] Pedido " + numPed + " 100% assinado. Fluxo liberado para receber produto/servico.");
}
FFFFFF
715
1710
11
6
Solicitação de compras
1
0
1
Solicitação de compras
1
1
82b0b7
102
1680
41
6
Solicitante
2
1
1
Solicitação de compras
1
2
d0daae
102
1680
41
210
Compras
2
1
1
Solicitação de compras
1
3
d6e0d0
102
1680
41
108
Gestor CC
2
1
1
Solicitação de compras
1
4
adc9ac
103
1680
41
618
TI
2
1
1
Solicitação de compras
1
5
C0C0C0
102
1680
41
312
Compras
2
1
1
Solicitação de compras
1
6
c9c3ac
102
1680
41
414
GERF
2
1
1
Solicitação de compras
1
7
9fc1c6
102
1680
41
516
CEO
2
1
1
Solicitação de compras
1
8
1
Solicitação de compras
89
26
1
1492
368
1
Solicitação de compras
89
125
1
512
47
1
Solicitação de compras
89
126
1
513
662
1
Solicitação de compras
89
127
1
612
498
1
Solicitação de compras
89
161
1
511
47
1
Solicitação de compras
89
162
1
613
55
1
Solicitação de compras
descProduto
descProduto
1
1
Solicitação de compras
empresa
empresa
2
1
Solicitação de compras
estabelecimento
estabelecimento
3
1
Solicitação de compras
filialdest
filialdest
4
1
Solicitação de compras
numeroSCProtheus
numeroSCProtheus
5
1
Solicitação de compras
pedidoSCProtheus
pedidoSCProtheus
6
1
Solicitação de compras
quantidade
quantidade
7
1
Solicitação de compras
solicitanteSCProtheus
solicitanteSCProtheus
8
1
Solicitação de compras
urgencia
urgencia
9
1
Solicitação de compras
valorTotalCotacao
valorTotalCotacao
10
1
Solicitação de compras
1
82
5
Solicitação enviada com sucesso
1
0
1
Solicitação de compras
1
114
5
Integração executada com sucesso
6
0