Introdução
Orders são comandos que podem ser retornados por scripts JavaScript executados no sistema de automação de fluxos (RPA). Cada order representa uma ação que será executada pelo sistema de forma assíncrona após o script ser processado.
As orders são utilizadas em scripts de automação que são executados em resposta a eventos de fluxo, como mudanças de etapa, criação de cards, ou alterações em formulários.
Como Usar Orders
Estrutura Básica
Uma order é um objeto JavaScript com a seguinte estrutura:
{
name: 'nome-da-order',
args: {
// parâmetros específicos da order
},
priority: 4, // opcional (padrão: 3)
hash: 'hash-unico' // opcional, usado para evitar duplicatas
}
Retornando Orders
As orders devem ser retornadas como um array ou objeto único. O sistema processará todas as orders retornadas:
// Retornando um array de orders
return [
{
name: 'upinsert',
args: {
tableName: 'user_tabela',
data: dados
}
},
{
name: 'change-card',
args: {
step_key: 123
}
},
{
name: 'add-comment',
args: {
text: 'Processamento concluído'
}
}
];
// Retornando uma única order
return {
name: 'change-card',
args: {
step_key: 123
}
};
Referência de Orders
new-card
Cria um novo card.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
puca_pid |
string | Não | PID do card |
flow |
string | Sim | PID do fluxo |
step |
string | Não | PID da etapa (alternativa a step_key) |
step_key |
number | Não | Chave numérica da etapa |
title |
string | Sim | Título do card |
id_table_flow |
string | Sim | PID do formulário associado |
company |
string | Não | PID da empresa |
assigned |
string | Não | PID do usuário responsável |
assigned_username |
string | Não | Username do responsável (alternativa a assigned) |
skipNotification |
boolean | Não | Se true, não envia notificações |
Exemplo
return {
name: 'new-card',
args: {
puca_pid: 'uuid-do-card',
flow: 'uuid-do-fluxo',
step_key: 123,
title: 'Novo Card de Processamento',
id_table_flow: 'uuid-do-formulario',
company: 'uuid-da-empresa',
assigned_username: 'usuario.responsavel',
skipNotification: false
}
};
Casos de Uso
- Criar cards automaticamente em resposta a eventos
- Criar cards de monitoramento quando certas condições são atendidas
- Criar sub-cards relacionados a um card principal
change-card
Altera propriedades de um card existente. O card é identificado automaticamente pelo contexto de execução.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
step |
string | Não | PID da etapa (alternativa a step_key) |
step_key |
number | Não | Chave numérica da etapa |
assigned |
string | Não | PID do usuário responsável |
assigned_username |
string | Não | Username do responsável. Valores especiais: {{previousUser}} para o usuário anterior |
title |
string | Não | Novo título do card |
skipNotification |
boolean | Não | Se true, não envia notificações |
Exemplo
return {
name: 'change-card',
args: {
step_key: 123,
assigned_username: '{{previousUser}}',
title: 'Card Atualizado',
skipNotification: false
},
priority: 4
};
Valores Especiais para assigned_username
{{previousUser}}: Retorna o card para o usuário que estava responsável anteriormenteusername: Nome de usuário específico
Casos de Uso
- Mover card para próxima etapa
- Retornar card ao usuário anterior após processamento
- Atualizar responsável do card
- Finalizar processamento de scripts
change-form
Atualiza dados do formulário associado ao card atual. Os campos fornecidos serão atualizados no registro do formulário.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
[campo] |
any | Sim | Qualquer campo do formulário pode ser atualizado. O objeto deve conter os campos a serem atualizados com seus valores |
Exemplo
return {
name: 'change-form',
args: {
user_campo1: 'valor1',
user_campo2: 'valor2',
user_status: 'processado'
}
};
Observações
- O
puca_piddo formulário é automaticamente obtido do card atual - Apenas os campos fornecidos serão atualizados
- Campos que não existem no formulário serão ignorados
Casos de Uso
- Atualizar campos calculados
- Atualizar status de processamento
- Sincronizar dados de integrações externas
delete
Deleta um registro de uma tabela específica.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tableName |
string | Sim | Nome da tabela |
pucaPid |
string | Sim | PID do registro a ser deletado |
omitExceptions |
boolean | Não | Se true, ignora erros se o registro não existir (padrão: false) |
Exemplo
return {
name: 'delete',
args: {
tableName: 'user_tabela',
pucaPid: 'uuid-do-registro',
omitExceptions: false
}
};
Observações
Atenção: O parâmetro omitExceptionspode mascarar erros importantes. Use com cuidado e apenas quando necessário.- A deleção é permanente e não pode ser desfeita
- Verifique permissões antes de deletar registros
Casos de Uso
- Limpar registros temporários
- Remover dados obsoletos após processamento
- Deletar registros relacionados quando um card é cancelado
upinsert
Realiza operação de upsert (insert ou update) em uma tabela. Se o registro existir (baseado em uk ou puca_pid), será atualizado. Caso contrário, será inserido.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tableName |
string | Sim | Nome da tabela |
data |
object | Sim | Objeto com os dados do registro |
uk |
string | Não | Array de nomes de campos que formam a chave única para verificar se o registro existe |
hash |
string | Não | Hash único para evitar duplicatas (usado internamente) |
Exemplo
// Upinsert simples
return {
name: 'upinsert',
args: {
tableName: 'user_implantacao_jira',
data: {
puca_pid: 'uuid-opcional', // se existir, atualiza; se não, cria novo
user_chave_jira: 'KEY-123',
user_cliente: 'uuid-cliente',
user_empresa: 'uuid-empresa',
user_produto: 'uuid-produto',
user_resumo: 'Resumo da implantação',
user_situacao: 'Em andamento'
}
},
priority: 4
};
// Upinsert com chave única customizada
return {
name: 'upinsert',
args: {
tableName: 'user_hs_maxpedido',
data: {
user_data_geracao: '2024-01-01',
user_cod_cliente: 'uuid-cliente',
user_total: 85.5
},
uk: ['user_data_geracao', 'user_cod_cliente'] // campos que formam a chave única
}
};
// Upinsert com hash para evitar duplicatas
return {
name: 'upinsert',
args: {
tableName: 'puca_crm_api_interaction',
data: {
target: 'uuid-cliente',
type: 'uuid-tipo',
text: 'Interação realizada'
}
},
hash: 'hash-unico-para-evitar-duplicatas'
};
Comportamento Especial
Para a tabela puca_crm_api_interaction:
- Se
linknão for fornecido, será automaticamente gerado comopuca-flow-front/card/{cardPid} - Se
authornão for fornecido, será automaticamente definido como o robot user
Observações
- Se
puca_pidestiver presente emdatae o registro existir, ele será atualizado - Se nenhum registro for encontrado, um novo será criado
- Campos de data devem estar no formato ISO string
- Se
ukfor fornecido, o sistema busca por registros com esses campos e atualiza se encontrar - Atenção: Se você utilizar
nullcomo valor em qualquer um dos campos listados emuk(exemplo:args: { data: { campo: null }, uk: ['campo'] }), a verificação de unicidade não funcionará corretamente. Evite utilizarnullem campos de chave única para garantir o funcionamento adequado da upsert.
Casos de Uso
- Sincronizar dados de integrações externas
- Atualizar ou criar registros baseados em chaves únicas
- Manter dados atualizados sem duplicatas
- Processar dados de APIs externas
add-comment
Adiciona um comentário ao card atual.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
text |
string | Sim | Texto do comentário |
Exemplo
return {
name: 'add-comment',
args: {
text: 'Processamento concluído com sucesso'
},
priority: 4
};
Observações
- O comentário é automaticamente associado ao card atual
- O autor do comentário será o robot user
- Comentários são úteis para rastreabilidade e debugging
Casos de Uso
- Registrar erros ou avisos durante processamento
- Documentar decisões tomadas pelo script
- Fornecer feedback sobre o processamento
- Registrar validações e verificações
add-task
Cria uma tarefa relacionada ao card atual.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
kind |
string | Sim | Tipo da tarefa |
title |
string | Sim | Título da tarefa |
description |
string | Não | Descrição da tarefa |
start_date |
Date | Não | Data de início |
end_date |
Date | Não | Data de término |
all_day |
boolean | Não | Se é tarefa de dia inteiro |
assigned |
string | Não | PID do usuário responsável |
related_entity |
string | Não | Nome da entidade relacionada (padrão: puca_flow_api_card) |
related_entity_id |
string | Não | PID da entidade relacionada (padrão: PID do card atual) |
blockedStep |
string | Não | PID da etapa que está bloqueada por esta tarefa |
Exemplo
return {
name: 'add-task',
args: {
kind: 'reminder',
title: 'Revisar processamento',
description: 'Verificar se todos os dados foram processados corretamente',
end_date: new Date('2024-12-31'),
assigned: 'uuid-do-usuario',
blockedStep: 'uuid-da-etapa'
}
};
Observações
- A tarefa é automaticamente relacionada ao card atual se
related_entity_idnão for fornecido - Tarefas podem bloquear etapas do fluxo através do campo
blockedStep
Casos de Uso
- Criar lembretes para revisão
- Agendar tarefas futuras
- Bloquear etapas até que uma ação seja concluída
- Criar tarefas de acompanhamento
insert-interaction
Insere uma interação CRM com indicadores associados. Esta order é mais completa que add-crm-interaction pois permite associar indicadores de dados.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date |
Date | Sim | Data da interação |
interaction_text |
string | Sim | Texto da interação |
interaction_type |
string | Sim | PID do tipo de interação |
target |
string | Sim | PID do alvo da interação (geralmente cliente) |
link |
string | Não | Link relacionado (padrão: link do card) |
indicators |
array | Sim | Array de indicadores associados |
Estrutura de indicators
Cada indicador no array deve ter:
{
indicator_field: string, // Nome do campo do indicador
indicator_config: string, // PID da configuração do indicador
value: any, // Valor do indicador
refs: string[] // Array de PIDs de referência
}
Exemplo
return {
name: 'insert-interaction',
args: {
date: new Date(),
interaction_text: 'Cliente contatado via telefone',
interaction_type: 'uuid-tipo-interacao',
target: 'uuid-cliente',
link: 'puca-flow-front/card/uuid-card', // opcional
indicators: [
{
indicator_field: 'user_valor_venda',
indicator_config: 'uuid-config-indicador',
value: 1500.00,
refs: ['uuid-produto-1', 'uuid-produto-2']
}
]
}
};
Observações
- O
linké automaticamente gerado se não fornecido - O
authoré automaticamente definido como o robot user - Indicadores são criados em tabelas separadas e vinculados à interação
Casos de Uso
- Registrar interações com clientes incluindo métricas
- Criar histórico de vendas com indicadores
- Registrar contatos com dados de performance
- Rastrear interações com múltiplas referências
call-api
Chama uma API externa de outro módulo do sistema.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
path |
string | Sim | Caminho do endpoint da API |
method |
string | Não | Método HTTP (padrão: 'post') |
headers |
object | Não | Headers HTTP customizados |
body |
any | Não | Corpo da requisição |
moduleName |
string | Não | Nome do módulo a ser chamado |
Exemplo
return {
name: 'call-api',
args: {
path: '/api/endpoint',
method: 'post',
headers: {
'Custom-Header': 'valor'
},
body: {
campo1: 'valor1',
campo2: 'valor2'
},
moduleName: 'puca-crud' // opcional
}
};
Observações
- A chamada é feita com autenticação do robot user
- Use para comunicação entre módulos do sistema
- O método padrão é
postse não especificado - Timeout padrão é aplicado
- Este metodo não suporta calls para fora do sistema Puca
Casos de Uso
- Chamar endpoints de outros módulos
- Integrar funcionalidades entre serviços
- Disparar processamentos em outros sistemas
- Sincronizar dados entre módulos
call-plugin
Chama um plugin configurado no sistema.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name |
string | Sim | Nome do plugin |
path |
string | Sim | Caminho do endpoint no plugin |
method |
string | Sim | Método HTTP |
body |
any | Não | Corpo da requisição |
headers |
object | Não | Headers customizados |
params |
any | Não | Parâmetros de query |
timeout |
number | Sim | Timeout em milissegundos |
Exemplo
return {
name: 'call-plugin',
args: {
name: 'plugin-name',
path: '/endpoint',
method: 'post',
body: {
dados: 'valor'
},
headers: {
'Custom-Header': 'valor'
},
params: {
query: 'param'
},
timeout: 30000
}
};
Observações
- Plugins são serviços externos configurados no sistema
- Timeout deve ser especificado explicitamente
- Use para integrações com serviços externos via plugins
Casos de Uso
- Integrar com serviços externos via plugins
- Chamar APIs de terceiros configuradas como plugins
- Executar ações em sistemas externos
- Processar dados através de plugins customizados
new-sub-card
Cria um sub-card baseado em uma configuração de subfluxo. O sub-card é criado relacionado ao card atual.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
subflow_config_key |
number | Sim | Chave numérica da configuração do subfluxo |
assigned |
string | Não | PID do usuário responsável |
assigned_username |
string | Não | Username do responsável |
skipNotification |
boolean | Não | Se true, não envia notificações |
Exemplo
return {
name: 'new-sub-card',
args: {
subflow_config_key: 123,
assigned_username: 'usuario.responsavel',
skipNotification: false
}
};
Observações
- O sub-card é automaticamente relacionado ao card atual
- A configuração do subfluxo define a estrutura do card criado
- Use quando precisar criar cards relacionados em fluxos diferentes
Casos de Uso
- Criar cards de acompanhamento em subfluxos
- Disparar processos paralelos relacionados
- Criar cards de validação em fluxos separados
- Gerar cards de notificação em subfluxos
notify
Envia uma notificação para um usuário. A notificação pode ser exibida como toast, push ou email dependendo dos parâmetros fornecidos.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
username |
string | Sim | Username do destinatário |
userPid |
string | Não | PID do usuário (alternativa a username) |
title |
string | Não | Título da notificação |
message |
string | Não | Mensagem (retrocompatibilidade) |
shortMessage |
string | Não | Mensagem curta (para toast/push) |
htmlMessage |
string | Não | Mensagem HTML (para email) |
method |
string | Não | Tipo: 'info', 'success', 'error', 'warning' (padrão: 'info') |
link |
string | Não | Link relacionado |
expires |
number | Não | Tempo de expiração em milissegundos |
Exemplo
// Notificação simples
return {
name: 'notify',
args: {
username: 'usuario.destino',
message: 'Processamento concluído'
}
};
// Notificação completa
return {
name: 'notify',
args: {
username: 'usuario.destino',
title: 'Processamento Concluído',
shortMessage: 'O processamento foi finalizado com sucesso',
htmlMessage: '<p>O processamento foi finalizado com sucesso</p>',
method: 'success',
link: 'puca-flow-front/card/uuid-card',
expires: 3600000 // 1 hora
}
};
Retrocompatibilidade
O campo message é mantido para retrocompatibilidade:
- Se
titlenão for fornecido,messageserá usado como título - Se
titlefor fornecido,messageserá usado comoshortMessage
Observações
- O usuário deve existir no sistema
- Se
usernamenão for encontrado, um erro será lançado - Use
methodpara definir o tipo visual da notificação htmlMessageé usado apenas para notificações por email
Casos de Uso
- Notificar usuários sobre conclusão de processamentos
- Alertar sobre erros ou problemas
- Informar sobre criação de novos cards
- Enviar lembretes e avisos
send-email
Envia um email relacionado ao card atual. O email é enviado usando a configuração de email da etapa do card.
Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
context |
object | Sim | Contexto de dados para o template do email |
secretContext |
object | Não | Contexto secreto (não exposto no template) |
stepField |
string | Sim | Campo da etapa que contém a configuração do email |
addInteraction |
boolean | Não | Se true, adiciona uma interação CRM após enviar (padrão: true) |
Exemplo
return {
name: 'send-email',
args: {
context: {
nomeCliente: 'João Silva',
valor: 1500.00,
dataVencimento: '2024-12-31'
},
secretContext: {
token: 'token-secreto'
},
stepField: 'user_config_email',
addInteraction: true
}
};
Observações
- O template do email é definido no campo
stepFieldda etapa atual - O contexto é usado para preencher variáveis no template
secretContextpermite passar dados que não devem aparecer no template- Uma interação CRM é automaticamente criada após o envio (se
addInteractionfortrue)
Casos de Uso
- Enviar emails de notificação para clientes
- Enviar propostas e documentos
- Enviar lembretes e avisos
- Comunicar mudanças de status
Prioridades
As orders são executadas sequencialmente na ordem em que são retornadas. A propriedade priority pode influenciar a ordem de processamento, permitindo que orders mais importantes sejam executadas antes de outras.
Níveis de Prioridade
1. Crítica (priority: 1)
Usada para operações críticas do negócio que devem ter execução imediata e passar na frente de todas as outras orders. Essas orders são processadas com máxima urgência.
Casos de uso:
- Processamento de faturamento
- Eventos financeiros críticos
- Operações que impactam diretamente receita ou pagamentos
- Processamentos que bloqueiam outras operações importantes
Exemplo:
return {
name: 'upinsert',
args: {
tableName: 'user_faturamento',
data: { /* dados do faturamento */ }
},
priority: 1
};
2. Alta (priority: 2)
Usada para eventos que requerem feedback imediato ao usuário ou atualizações que precisam ser processadas rapidamente para melhorar a experiência do usuário.
Casos de uso:
- Atualizações no formulário de um card resultantes de um script logo após movê-lo de etapa
- Notificações urgentes para usuários
- Sincronizações que o usuário está aguardando
- Processamentos que afetam a interface do usuário em tempo real
Exemplo:
return {
name: 'change-form',
args: {
user_status: 'processado',
user_resultado: resultadoCalculado
},
priority: 2
};
3. Padrão (priority: 3)
Prioridade padrão para a maioria dos eventos e processamentos gerais do sistema. Esta é a prioridade padrão quando não especificada.
Casos de uso:
- Processamentos de rotina
- Atualizações de dados normais
- Sincronizações regulares
- Operações que não requerem urgência especial
Exemplo:
return {
name: 'upinsert',
args: {
tableName: 'user_tabela',
data: { /* dados */ }
}
// priority não especificada = padrão (3)
};
4. Baixa (priority: 4)
Usada para eventos que podem ser processados com menor urgência, geralmente operações em lote ou processamentos que ocorrem periodicamente.
Casos de uso:
- Fechamentos diários ou mensais
- Processamentos em lote
- Relatórios e consolidações
- Operações de manutenção e limpeza
- Sincronizações que não requerem urgência
Exemplo:
return {
name: 'upinsert',
args: {
tableName: 'user_fechamento_mensal',
data: { /* dados do fechamento */ }
},
priority: 4
};
Comportamento
- Orders com prioridade mais baixa (número menor) são executadas antes de orders com prioridade mais alta (número maior)
- Se não especificada, a prioridade padrão é
3(padrão) - Orders com a mesma prioridade são executadas na ordem em que foram retornadas
- A prioridade mínima é
1(crítica) e a máxima é4(baixa)
Valores Especiais
Usuários
{{previousUser}}: Referencia o usuário que estava responsável pelo card anteriormente
Etapas
{{previousStep}}: Referencia a etapa anterior do fluxo{{nextStep}}: Referencia a próxima etapa do fluxo
Boas Práticas
- Sempre retorne um array: Mesmo que tenha apenas uma order, retorne como array para consistência
- Retorne o card ao usuário anterior: Sempre que pelo menos uma order for solicitada, adicione uma última order
change-cardcomassigned_username: '{{previousUser}}'para retornar o card ao usuário anterior. Caso contrário, o card ficará com o robot como responsável mesmo após ele ter concluído suas atividades - Use hash para evitar duplicatas: Especialmente em
upinsertquando processar dados que podem ser duplicados - Evite
omitExceptionsem delete: O sistema por padrão lança excessão se uma linha deletada não existir, este parametro ignora este comportamento