Gestão de comissões e royalties > Cenários de exemplo
Comissões de representação - Modelo 1
COMISSOES.RQ-018
Descrição
Gestão de comissões no cenário onde uma empresa representa um fornecedor em uma operação de venda para um cliente e que a comissão é gerada a partir do pagamento das parcelas pagas pelos clientes para o fornecedor.
O processo é dividido nas seguintes etapas:
- Emissão de Pedido de representação com geração de títulos de terceiros conforme os valores e plano de pagamentos do mesmo (parcelas).
- A partir do faturamento desses pedidos pelo fornecedor, esses títulos passam para a situação "Aberto" (opcional).
- Realização de uma conciliação para registrar a liquidação dos títulos nos seus pagamentos
- Ao liquidar um (ou mais) título(s) de terceiro(s), o sistema gera títulos de recebimento da respectiva comissão
- Os títulos de comissão são controlados normalmente no contas a receber
Fluxo normal
Geração dos títulos de terceiros
A emissão de um pedido de representação deve utilizar um tipo de pedido que esteja configurado para gerar automaticamente títulos de terceiros previstos em manutenção. Esse modelo funciona com pedidos criados com planos de pagamentos. Uma vez gerado, o usuário poderá ajustar as datas e valores como convir, tanto pela guia do financeiro como diretamente na interface de títulos de terceiros.
Confirmação dos títulos de terceiros (opcional)
Essa é uma etapa que pode ser ignorada.
Conceitualmente, sempre que um pedido for entregue pelo fornecedor, os títulos seriam automaticamente confirmados. Novamente, as datas e valores poderão ser ajustadas conforme informações recebidas pelo faturamento realizado pelo fornecedor.
Como a rotina de conciliação confirma automaticamente os títulos que tiverem confirmação de pagamento, então isso não precisa ser feito.
Conciliação dos pagamentos de terceiros
Mensalmente (ou na frequência desejada), os títulos efetivamente pagos pelos clientes para os fornecedores (nos vencimentos dos títulos de terceiros) deverão ser liquidados no sistema utilizando a interface (Títulos de terceiros).
O roteiro normal seria filtrar pelo Fornecedor (emitente do título) que está sendo conciliado, situação diferente de "Liquidado", com data de vencimento até a data corrente. Listar com [b:Enter] e pressionar [b:Pagar F12] para abrir a lista de registros com os campos de valor de data de pagamento em aberto.
O usuário deverá então confirmar o pagamento dos títulos, informando valor e data, salvando no final.
Durante a essa conciliação, também é possível monitorar as parcelas de clientes que estão em atraso (consultando os títulos por data de vencimento até o dia anterior e que ainda estejam abertos).
Opcionalmente, é possível consultar títulos em manutenção que teoricamente já deveriam estar abertos devido a entrega de pedidos que ainda não foram entregues.
Geração dos títulos de comissão a receber
Após conciliado os pagamentos dos clientes para os fornecedores, deve-se gerar as comissões a receber, disparando a rotina pelo menu "Financeiro > Gerar comissões a receber". Esse processo gera títulos a receber agrupando por fornecedor/data de vencimento.
Caso já existam títulos em manutenção para o fornecedor para a data de vencimento, estes títulos são alterados para incluir os respectivos valores.
Ao consultar os títulos de terceiros liquidados que já geraram comissão a receber, um link é apresentado para indicar o respectivo título a receber.
Ao consultar os títulos de comissão a receber, é apresentada a informação dos títulos de terceiros que originaram a respectiva comissão.
Gestão do recebimento das comissões
Segue o fluxo normal dos processos de contas a receber.
Implantação
Tipo de pedido (de representação):
- Gera previsão financeira: Gerar títulos "manutenção"
Criar um tipo de título chamado de "COMISSAO"
- Tipo de título: COMISSAO
- Sigla para os títulos: COM
- Descrição: Comissões a receber dos fornecedores.
- Baixa automática: -1
- Permite negociação: Sim
- Permite impressão de boleto bancário: Não
- Permite previsão antes do vencimento: Sim
- Permite valor zero: Sim
Criar um histórico de movimentação "VINCULO (R)"
- Histórico: VINCULO
- Tipo de operação: Receber
- Permite exclusao: Sim
- Tipo de operação: Outros
Criar rotina custom
- Operação: GERAR_COMISSOES_RECEBER
- Título: Gerar comissões a receber
- Tipo de implementação: Telescope SQL Script Engine
- Implementação:
set tipo_titulo_comissao_id id from tipos_titulos where tipo_titulo = 'COMISSAO';
set historico_vinculo_id id from historicos_contas_receber where historico = 'VINCULO (R)';
set historico_lancamento_id id from historicos_contas_receber where historico = 'LANCAMENTO (R)';
for rec in
select parcela.numero_titulo
, pag.estabelecimento_id
, pag.id as movimento_pagamento_id
, parcela.emitente_id as destinatario_id
, e.estabelecimento_id as emitente_id
, pag.valor
, pag.data_contabil
, (date_trunc('month', current_date)
+ interval '1 month'
+ interval '14 day')::date as data_vencimento
, (select ped.percentual_comissao
from pedidos_titulos pt
join pedidos ped on ped.id = pt.pedido_id
where pt.titulo_id = parcela.id) * pag.valor / 100 as valor_comissao
from movimentos_financeiros pag
join titulos parcela on parcela.id = pag.titulo_id
join historicos_contas_receber hist_pag on hist_pag.id = pag.historico_id
join estabelecimentos e on e.id = parcela.estabelecimento_id
left join tipos_titulos tipo_comissao on tipo_titulo = 'COMISSAO'
where hist_pag.historico = 'PAGAMENTO (R)'
and parcela.tipo_operacao = 'T'
and not exists (select 1
from movimentos_financeiros
where MOVIMENTO_FINANCEIRO_GERADOR_ID = pag.id)
loop
set titulo_id id
from titulos t
where t.tipo_operacao = 'R'
and t.destinatario_id = ${rec.destinatario_id}
and t.situacao = 'M'
and t.tipo_titulo_id = ${tipo_titulo_comissao_id}
limit 1;
if '' = '$!{titulo_id}' then
ins titulos
set estabelecimento_id = ${rec.estabelecimento_id}
, tipo_titulo_id = ${tipo_titulo_comissao_id}
, tipo_operacao = 'R'
, emitente_id = ${rec.emitente_id}
, destinatario_id = ${rec.destinatario_id}
, data_vencimento = '${rec.data_vencimento}'
, valor = ${rec.valor_comissao}
, sequencia = 0;
set titulo_id ${last.id};
else
upd titulos
set valor = valor + ${rec.valor_comissao}
where id = ${titulo_id};
end-if;
ins movimentos_financeiros
set historico_id = ${historico_vinculo_id}
, MOVIMENTO_FINANCEIRO_GERADOR_ID = ${rec.movimento_pagamento_id}
, valor = ${rec.valor_comissao}
, titulo_id = ${titulo_id}
from movimentos_financeiros mf
where titulo_id = ${titulo_id}
and historico_id = ${historico_lancamento_id}
limit 1;
end-loop;
Incluir um item de menu que chame a rotina acima.
Incluir direitos de acesso para quem pode executá-la.
Configurar scripted_field na CAD_TITULOS_TERCEIROS (block config)
{
"items": [
{
"name": "VINCULOS",
"domain": "ADSRT.SCRIPTED_FIELD",
"label": "Origens",
"hint": "Vínculo entre os títulos de terceiros e títulos de comissões a receber.",
"expr": "''",
"usages": [
{
"operation": "VIEW",
"usage": "view"
}
]
}
]
}
Configurar preferencia CONREC.CAD_TITULOS_RECEBER.VINCULOS.SCRIPT:
item titulo text_html;
select mf.valor as valor_comissao
, '<a href="ConTitulos?Z_ACTION=CONSULTA&A_ID=' || t2.id || '">' || t2.titulo || '</a>' as titulo
, t2.data_vencimento
, m2.data_contabil as data_pagamento
, m2.valor as valor_pagamento
from movimentos_financeiros mf
join historicos_contas_receber h on h.id = mf.historico_id
join movimentos_financeiros m2 on m2.id = mf.MOVIMENTO_FINANCEIRO_GERADOR_ID
join titulos t2 on t2.id = m2.titulo_id
where mf.titulo_id = ${id}
and h.historico = 'VINCULO (R)';
Configurar scripted_field na CAD_TITULOS_TERCEIROS (block config)
{
"items": [
{
"name": "COMISSOES",
"domain": "ADSRT.SCRIPTED_FIELD",
"label": "Comissões",
"hint": "Comissão a receber gerada a partir deste título.",
"expr": "''",
"usages": [
{
"operation": "VIEW",
"usage": "view"
}
]
}
]
}
Configurar preferencia CONREC.CAD_TITULOS_TERCEIROS.VINCULOS.SCRIPT:
item titulo text_html;
select mf.valor as valor_comissao
, t1.data_vencimento
, '<a href="ConTitulos?Z_ACTION=CONSULTA&A_ID=' || t1.id || '">' || t1.titulo || '</a>' as titulo
from movimentos_financeiros mf
join titulos t1 on t1.id = mf.titulo_id
join historicos_contas_receber h on h.id = mf.historico_id
join movimentos_financeiros m2 on m2.id = mf.MOVIMENTO_FINANCEIRO_GERADOR_ID
join titulos t2 on t2.id = m2.titulo_id
where m2.titulo_id = ${id}
and h.historico = 'VINCULO (R)';
Criar operação custom para informar preencher o percentual de comissão
- Operação: SUGERIR_COMISSAO
- Título: Sugerir comissão
- Tipo de implementação: Groovy Scripting Engine
Implementação:
def pedido = ctx.getEvent().getObject();
if (pedido.getPercentualComissao().isNull()) {
tipo = pedido.findTipoPedido().valueOfTipoPedido();
if (tipo.contains("INTERNACIONAL")) {
pedido.setPercentualComissao(10);
} else if (tipo.contains("NACIONAL")) {
pedido.setPercentualComissao(7);
}
}
E listener para o mesmo:
- Preferência: CUSTOM.SUGERIR_COMISSAO.EVENT_LISTENER
- Valor: PEDIDOS.PEDIDOS.PRE_INSERT : SUGERIR_COMISSAO
Modelo
MOVIMENTO_FINANCEIRO (VINCULO)
MOVIMENTO_FINANCEIRO (PAGAMENTO) -< movimento_financeiro_gerador_id
TITULO_TERCEIRO -< titulo_id titulo_id >- TITULO_RECEBER
Resumo
- O titulo de terceiro tem um movimento de pagamento
- Cada movimento de pagamento tem um movimento de vinculo no titulo a receber
- A soma dos movimentos de vinculo formam o movimento de lamçamento do titulo receber