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