Pular para o conteúdo principal

TOTVS RM

Integração com o TOTVS RM (Framework RM) via API REST nativa, usada para sincronizar o cadastro de funcionários com o VELIX e receber eventos de admissão/demissão.

Endpoint de funcionários

O RM expõe o cadastro de colaboradores via:

GET /api/framework/v1/funcionarios

Parâmetros úteis: coligada, situacao (ativo/inativo), dataAlteracaoInicial para sincronização incremental.

Autenticação — OAuth2 client_credentials

curl -X POST https://SEU_RM/api/oauth2/v1/token \
-d 'grant_type=client_credentials' \
-d 'client_id=SEU_CLIENT_ID' \
-d 'client_secret=SEU_CLIENT_SECRET'

A resposta traz um access_token que deve ser enviado em Authorization: Bearer em todas as chamadas subsequentes ao RM. Renove antes da expiração (expires_in).

Mapeamento de campos

Campo RMCampo VELIX (Person)
CodColigada + CodFunc (concatenados)externalId
Nomename
CPFdocument
Situacao = 'A'active: true
Situacao = 'D' (demitido)dispara DELETE /v1/persons/:id ou soft-delete

externalId recomendado: ${CodColigada}-${CodFunc} — garante unicidade entre coligadas diferentes que reaproveitam o mesmo CodFunc.

Sync periódico

import { VelixClient, PersonsModule } from '@velix/sdk';
import axios from 'axios';

const velix = new VelixClient({
apiUrl: process.env.VELIX_API_URL!,
apiKey: process.env.VELIX_API_KEY!,
});
const persons = new PersonsModule(velix);

async function syncTotvsRM() {
const { data: token } = await axios.post(`${process.env.RM_URL}/api/oauth2/v1/token`, null, {
params: {
grant_type: 'client_credentials',
client_id: process.env.RM_CLIENT_ID,
client_secret: process.env.RM_CLIENT_SECRET,
},
});

const { data: funcionarios } = await axios.get(`${process.env.RM_URL}/api/framework/v1/funcionarios`, {
headers: { Authorization: `Bearer ${token.access_token}` },
params: { situacao: 'A' },
});

for (const f of funcionarios) {
const externalId = `${f.CodColigada}-${f.CodFunc}`;
await persons.upsert({
externalId,
name: f.Nome,
document: f.CPF,
});
}
}

Execute este job via cron/scheduler externo (ex: Task Scheduler do Windows, onde o RM normalmente roda) a cada 15–30 minutos.

Webhook de admissão/demissão via RM Workflow

O RM permite configurar uma ação de Workflow para disparar uma chamada HTTP externa quando um processo de admissão ou demissão é concluído. Configure o Workflow para chamar:

POST https://api.velixbiometrics.com/v1/persons (admissão)
DELETE https://api.velixbiometrics.com/v1/persons/:id (demissão)

com o Bearer token da API key dedicada à integração, no header customizado da ação HTTP do Workflow Designer. Isso reduz a latência de sincronização de ~30 minutos (polling) para segundos.