1 Recrutamento e seleção Recrutamento e seleção Este flow permite abertura de solicitação de contratação automatizadas, informando qual a função e direcionado para as aprovações corretas. true false Default Recrutamento e Seleção Grupo <AssignmentController><Group>Recrutamento</Group></AssignmentController> 0 0 0 Expediente BackOffice, Logística e Motorista false 1 true false 2160000 0 true 1 Recrutamento e seleção 34 823 true false false true false false 0 2 false false true 1 Recrutamento e seleção 1 1 Solicitar colaborador Solicitar colaborador 0 false 0 1 true false false 0 0 0 0 false 0 true true false 100 83 0 0 true false 0 0 false 0 10 0 false 0 0 0 0 false 1 Recrutamento e seleção 1 4 Analisando necessidade Analisando necessidade 259200 false 0 1 false false false 0 0 0 0 false 0 true true false 490 210 0 0 false false 0 0 false 0 80 0 false 0 0 0 0 false 0 1 Recrutamento e seleção 1 6 Selecionando candidatos Selecionando candidatos 345600 false 0 Pool Grupo <AssignmentController><Group>Recrutamento</Group></AssignmentController> 1 false false false 0 0 0 0 false 0 true true false 490 410 0 0 false false 0 0 false 0 80 0 false 0 0 0 0 false 0 1 Recrutamento e seleção 1 18 Aguardando novo colaborador Aguardando novo colaborador 259200 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 1240 80 0 0 false false 0 0 false 0 80 0 false 0 0 0 0 false 0 1 Recrutamento e seleção 1 24 Entregando equipamentos Entregando equipamentos 345600 false 0 1 false false false 0 0 0 0 false 0 true true false 1240 580 0 0 false false 0 0 false 0 80 0 false 0 0 0 0 false 0 1 Recrutamento e seleção 1 57 Feedback do gestor Feedback do gestor 259200 false 0 Campo Formulário <AssignmentController><FormField>gestor_cc</FormField></AssignmentController> 1 false true false 3600 3600 0 0 false 0 true false false 1800 250 0 0 false false 0 0 false 0 80 0 false 0 0 0 0 false 0 1 Recrutamento e seleção 1 114 Corrigindo materiais Corrigindo materiais 259200 false 0 1 false true false 3600 3600 0 0 false 0 true false false 1440 400 0 0 false false 0 0 false 0 80 0 false 0 0 0 0 false 0 1 Recrutamento e seleção 1 2 Validar Gestor Validar Gestor false false false 0 true 250 47 false 1 120 0 0 false 1 Recrutamento e seleção 1 46 ValidarEquipamentos ValidarEquipamentos false false false 0 true 1060 380 false 1 120 0 0 false 1 Recrutamento e seleção 1 95 Validar início Validar início false false false 0 true 1710 70 false 1 120 0 0 false 1 Recrutamento e seleção 1 39 Cancelado Cancelado Atividade final do processo 0 false 0 0 false true false 0 1 0 0 false 0 false true false 680 230 0 0 false false 0 0 false 6 65 0 false 0 false 1 Recrutamento e seleção 1 55 Cancelado Cancelado Atividade final do processo 0 false 0 0 false true false 0 1 0 0 false 0 false true false 670 490 0 0 false false 0 0 false 6 65 0 false 0 false 1 Recrutamento e seleção 1 97 Fim Fim Atividade final do processo 0 false 0 0 false true false 0 1 0 0 false 0 false false false 1940 100 0 0 false false 0 0 false 6 60 0 false 0 false 1 Recrutamento e seleção 1 34 2 hAPI.getCardValue("centroCusto") == "" 6 <AssignmentController><Group>Recrutamento</Group></AssignmentController> Pool Grupo 0 1 Recrutamento e seleção 2 34 2 true 4 <AssignmentController><FormField>gestor_cc</FormField></AssignmentController> Campo Formulário 0 1 Recrutamento e seleção 1 34 46 hAPI.getCardValue("validarMotivo") == "substituicao" 18 <AssignmentController><FormField>gestor_cc</FormField></AssignmentController> Campo Formulário 0 1 Recrutamento e seleção 2 34 46 hAPI.getCardValue("validarMotivo") == "temporario" 18 <AssignmentController><FormField>gestor_cc</FormField></AssignmentController> Campo Formulário 0 1 Recrutamento e seleção 3 34 46 hAPI.getCardValue("validarMotivo") == "aumento" 24 <AssignmentController><Group>TIC</Group></AssignmentController> Pool Grupo 0 1 Recrutamento e seleção 1 34 95 hAPI.getCardValue("validacaoFunc") == "entregue" 57 <AssignmentController><FormField>gestor_cc</FormField></AssignmentController> Campo Formulário 0 1 Recrutamento e seleção 2 34 95 hAPI.getCardValue("validacaoFunc") == "naoEntregue" 114 <AssignmentController><Group>TIC</Group></AssignmentController> Pool Grupo 0 1 Recrutamento e seleção 3 34 95 hAPI.getCardValue("validacaoFunc") == "incorreto" 114 <AssignmentController><Group>Recrutamento</Group></AssignmentController> Pool Grupo 0 1 Recrutamento e seleção 1 3 false 1 2 false false 0 1 Recrutamento e seleção 1 5 false 2 4 Gestor Identificado false false 0 1 Recrutamento e seleção 1 7 false 2 6 Sem Gestor false false 0 1 Recrutamento e seleção 1 41 Aprovar false 4 6 Aprovar false false 0 1 Recrutamento e seleção 1 53 Reprovar false 4 39 Reprovar false false 0 1 Recrutamento e seleção 1 96 false 18 95 false false 0 1 Recrutamento e seleção 1 110 false 46 24 false false 0 1 Recrutamento e seleção 1 115 false 95 114 false false 0 1 Recrutamento e seleção 1 116 Prosseguir false 114 18 Material enviado false false 0 1 Recrutamento e seleção 1 117 Cancelar seleção false 6 55 Cancelar false false 0 1 Recrutamento e seleção 1 118 false 95 57 false false 0 1 Recrutamento e seleção 1 119 false 57 97 false false 0 1 Recrutamento e seleção 1 120 false 46 18 false false 0 1 Recrutamento e seleção 1 121 false 24 18 false false 0 1 Recrutamento e seleção 1 122 false 6 46 false false 0 1 beforeTaskSave Recrutamento e seleção 1 function beforeTaskSave(colleagueId, nextSequenceId, userList) { try { var currentState = parseInt(String(getValue("WKNumState") || "0"), 10); var nextState = parseInt(String(nextSequenceId || "0"), 10); var completeTask = String(getValue("WKCompletTask") || "false"); log.info("[Recrutamento.beforeTaskSave] currentState=" + currentState + ", nextState=" + nextState + ", completeTask=" + completeTask); if (completeTask !== "true") return; // Disparo do e-mail inicial da solicitação (atividade inicial = 1). if (currentState === 1) { enviarNotificacaoSolicitacao(); return; } // Disparo quando a seleção define o início do colaborador. if (currentState === 6 && nextState === 46) { enviarNotificacaoInicioColaborador(); } } catch (e) { log.error("[Recrutamento.beforeTaskSave] Erro ao disparar notificação: " + e); } } function enviarNotificacaoSolicitacao() { var envio = montarContextoEnvio(); if (!envio.ok) return; var params = new java.util.HashMap(); params.put("WKNumProces", envio.processNumber); params.put("linkSolicitacao", envio.processLink); params.put("link", envio.processLink); params.put("requesterName", valueOrDefault(hAPI.getCardValue("requesterName"))); params.put("gestorNome", valueOrDefault(hAPI.getCardValue("gestorNome"))); params.put("dataAbertura", valueOrDefault(hAPI.getCardValue("dataAbertura"))); params.put("cargo", valueOrDefault(hAPI.getCardValue("funcao"))); params.put("kitUtilizado", getKitDescricao(hAPI.getCardValue("itensinicio"))); params.put("motivoSolicitacao", getMotivoDescricao(hAPI.getCardValue("validarMotivo"))); params.put("justificativa", valueOrDefault(hAPI.getCardValue("justificativa"))); notifier.notify("admin", "tpl_recrutamento_realizada_dia", params, envio.destinatarios, "text/html"); log.info("[Recrutamento.beforeTaskSave] tpl_recrutamento_realizada_dia enviado. processo=" + envio.processNumber + ", destinos=" + envio.destinosLog); } function enviarNotificacaoInicioColaborador() { var envio = montarContextoEnvio(); if (!envio.ok) return; var dataInicio = safeTrim(hAPI.getCardValue("datainiciotrabalho")); if (dataInicio === "") { log.warn("[Recrutamento.beforeTaskSave] Data de início vazia. Notificação de início não enviada."); return; } var params = new java.util.HashMap(); params.put("WKNumProces", envio.processNumber); params.put("linkSolicitacao", envio.processLink); params.put("link", envio.processLink); params.put("colaboradorNome", valueOrDefault(hAPI.getCardValue("nomedocandidato"))); params.put("cargo", valueOrDefault(hAPI.getCardValue("funcao"))); params.put("dataInicio", formatDateBr(dataInicio)); params.put("kitUtilizado", getKitDescricao(hAPI.getCardValue("itensinicio"))); notifier.notify("admin", "tpl_recrutamento_realizada", params, envio.destinatarios, "text/html"); log.info("[Recrutamento.beforeTaskSave] tpl_recrutamento_realizada enviado. processo=" + envio.processNumber + ", destinos=" + envio.destinosLog); } function montarContextoEnvio() { var destinatarios = new java.util.ArrayList(); var jaAdicionados = {}; addEmail(destinatarios, jaAdicionados, "tic@grupoginseng.com.br"); var requesterId = safeTrim(hAPI.getCardValue("requesterId")); if (requesterId !== "") { addEmail(destinatarios, jaAdicionados, resolveEmailByColleagueId(requesterId)); } if (destinatarios.isEmpty()) { log.warn("[Recrutamento.beforeTaskSave] Nenhum e-mail válido encontrado para notificação."); return { ok: false }; } var processNumber = safeTrim(getValue("WKNumProces")); var processLink = buildProcessLink(processNumber); return { ok: true, processNumber: processNumber, processLink: processLink, destinatarios: destinatarios, destinosLog: String(destinatarios.toString()) }; } function addEmail(destinatarios, jaAdicionados, email) { var v = safeTrim(email).toLowerCase(); if (!isValidEmail(v)) return; if (jaAdicionados[v]) return; destinatarios.add(v); jaAdicionados[v] = true; } function resolveEmailByColleagueId(colleagueId) { var id = safeTrim(colleagueId); if (id === "") return ""; try { var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST); var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", id, id, ConstraintType.MUST); var byId = DatasetFactory.getDataset("colleague", null, [cId, cActive], null); if (byId && byId.rowsCount > 0) { return safeTrim(byId.getValue(0, "mail")); } var cLogin = DatasetFactory.createConstraint("login", id, id, ConstraintType.MUST); var byLogin = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null); if (byLogin && byLogin.rowsCount > 0) { return safeTrim(byLogin.getValue(0, "mail")); } } catch (e) { log.warn("[Recrutamento.beforeTaskSave] Falha ao buscar e-mail por colleagueId: " + e); } return ""; } function buildProcessLink(processNumber) { var baseUrl = safeTrim(getValue("WKServerURL")); var companyId = safeTrim(getValue("WKCompany")); if (baseUrl === "" || processNumber === "") return ""; if (baseUrl.indexOf("http://") !== 0 && baseUrl.indexOf("https://") !== 0) { baseUrl = "https://" + baseUrl; } if (baseUrl.charAt(baseUrl.length - 1) === "/") { baseUrl = baseUrl.substring(0, baseUrl.length - 1); } if (companyId === "") companyId = "1"; return baseUrl + "/portal/p/" + companyId + "/pageworkflowview?app_ecm_workflowview_detailsProcessInstanceID=" + processNumber; } function getMotivoDescricao(motivo) { var v = safeTrim(motivo).toLowerCase(); if (v === "aumento") return "Aumento de quadro"; if (v === "substituicao") return "Substituição"; if (v === "temporario") return "Temporário"; return v === "" ? "Não informado" : v; } function getKitDescricao(kit) { var v = safeTrim(kit).toLowerCase(); if (v === "backoffice") return "Kit Backoffice (Notebook, mouse, teclado e headset)"; if (v === "amg") return "Kit AMG (Notebook, kit mouse e teclado, headset e telefone corporativo)"; if (v === "comercial") return "Kit Comercial (Mobshop e Mobpin)"; return v === "" ? "Não informado" : v; } function formatDateBr(value) { var v = safeTrim(value); if (/^\d{4}-\d{2}-\d{2}$/.test(v)) { return v.substring(8, 10) + "/" + v.substring(5, 7) + "/" + v.substring(0, 4); } return v; } function valueOrDefault(value) { var v = safeTrim(value); return v === "" ? "Não informado" : v; } function isValidEmail(email) { var v = safeTrim(email); if (v === "") return false; if (/\s/.test(v)) return false; var at = v.indexOf("@"); if (at <= 0 || at !== v.lastIndexOf("@")) return false; var dot = v.lastIndexOf("."); return dot > at + 1 && dot < (v.length - 1); } function safeTrim(value) { return String(value == null ? "" : value).trim(); } 1 onNotify Recrutamento e seleção 1 function onNotify(subject, receivers, template, params) { log.info("===== onNotify GLOBAL ===== Template: " + template); var validos = new java.util.ArrayList(); for (var i = 0; i < receivers.size(); i++) { var email = receivers.get(i); log.info("Receiver original: [" + email + "]"); if (email && email.indexOf("@") > 0 && email.indexOf(".") > 0) { validos.add(email); } else { log.warn("REMOVIDO EMAIL INVALIDO: [" + email + "] TEMPLATE: " + template); } } receivers.clear(); for (var j = 0; j < validos.size(); j++) { receivers.add(validos.get(j)); } log.info("TOTAL FINAL RECEIVERS: " + receivers.size()); } FFFFFF 715 1980 11 6 Recrutamento e Seleção 1 0 1 Recrutamento e seleção 1 1 82b0b7 178 1950 41 6 Gestor 2 1 1 Recrutamento e seleção 1 2 d0daae 178 1950 41 362 Gente e cultura 2 1 1 Recrutamento e seleção 1 3 d6e0d0 178 1950 41 184 Lider direto 2 1 1 Recrutamento e seleção 1 4 adc9ac 181 1950 41 540 TI 2 1 1 Recrutamento e seleção 1 5 1 Recrutamento e seleção 34 5 1 342 100 1 Recrutamento e seleção 34 5 2 342 248 1 Recrutamento e seleção 34 7 1 279 448 1 Recrutamento e seleção 34 110 1 1090 627 1 Recrutamento e seleção 34 115 1 1740 437 1 Recrutamento e seleção 34 117 1 543 507 1 Recrutamento e seleção 34 120 1 1090 126 1 Recrutamento e seleção centroCusto centroCusto 1 1 Recrutamento e seleção consideracoesCompras consideracoesCompras 2 1 Recrutamento e seleção dataAbertura dataAbertura 3 1 Recrutamento e seleção requesterId requesterId 4 1 Recrutamento e seleção requesterMail requesterMail 5 1 Recrutamento e seleção requesterName requesterName 6 1 Recrutamento e seleção userCotacaoGestor userCotacaoGestor 7 1 Recrutamento e seleção userRealizacaoCompras userRealizacaoCompras 8 1 Recrutamento e seleção userValidacaoCompras userValidacaoCompras 9 1 Recrutamento e seleção userValidacaoGestor userValidacaoGestor 10 1 Recrutamento e seleção userValidacaoItens userValidacaoItens 11 1 Recrutamento e seleção validacaoItens validacaoItens 12 1 Recrutamento e seleção valorTotalsemformat valorTotalsemformat 13 1 Recrutamento e seleção WKNumProces WKNumProces 14 0 0 Recrutamento e seleção 34 4 approval title Solicitação de compra 0 0 Recrutamento e seleção 34 4 approval highlight Centro de Custo - Aprovar solicitação? 0 0 Recrutamento e seleção 34 4 approval approve 6 0 0 Recrutamento e seleção 34 4 approval reject 39 0 0 Recrutamento e seleção 34 6 approval title Solicitação de compra 0 0 Recrutamento e seleção 34 6 approval highlight Compras - Aprovar solicitação? 0 0 Recrutamento e seleção 34 6 approval reject 55