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