Formação de preço de venda

FPRVEN

Descrição

A formação do preço de vendas de produtos e serviços é uma ferramenta que auxilia na captura de parâmetros e no calculo do preço de venda em função dos seus custos e despesas.

O valor deve cobrir o custo direto da mercadoria/produto/serviço, somado as despesas variáveis e fixas proporcionais. Além disso, deve gerar lucro líquido. A ferramenta não é um processo totalmente automatizado, pois depende da interação com usuários que compreendam tanto os aspectos financeiros como os aspectos mercadológicos.

Aspecto mercadológico

Pelo aspecto mercadológico, o preço de venda deverá estar próximo do praticado pelos concorrentes diretos da mesma categoria de produto e qualidade. Fatores como conhecimento da marca, tempo de mercado, volume de vendas já conquistado e agressividade da concorrência também exercem influência direta sobre o valor do produto.

Aspecto financeiro

No caso do aspecto financeiro, o preço de venda deverá cobrir o custo direto da mercadoria/produto/serviço vendido, as despesas variáveis (por exemplo, comissões de vendedores), as despesas fixas (como aluguel, água, luz, telefone, salários, pró-labore). O saldo restante será o lucro líquido.

Procedimentos

Interfaces

Configurações

FPRVEN.CAD_FORMACOES_PRECOS.APRESENTAR_TODAS_LISTAS

Apresentar as outras listas de preços que estão o mesmo produto

Apresentar os campos para atualização de preços do produto em diversas listas de preços

Tipo: FLAG

Valor padrão: N

FPRVEN.CAD_FORMACOES_PRECOS.COMPARATIVO.SCRIPT

Script para apresentação de formações de preços em outras listas de preços para o mesmo produto.

Script para apresentação de formações de preços em outras listas de preços para o mesmo produto.

Script utilizado:
ITEM COLECAO TEXT, label='Lista de preços';
ITEM PERC_CUSTOS_DIRETOS PERCENT, label='Custos diretos';
ITEM PERC_COMISSOES PERCENT, label='Comissões';
ITEM PERC_PROVISIONAMENTO_COMISSOES PERCENT, label='Comissões 13º';
ITEM PERC_PIS_COFINS_VENDA PERCENT, label='PIS/COFINS (%)';
ITEM PERC_ICMS_VENDA PERCENT, label='ICMS na venda (%)';
ITEM PERC_ICMS_VENDA_BASE PERCENT, label='Base ICMS na venda (%)';
ITEM PERC_ICMS_VENDA_ALIQUOTA PERCENT, label='ICMS na venda (%)';
ITEM IRPJ_CSLL_LUCRO PERCENT, label='IRPJ/CSLL sobre o lucro';
ITEM PERCENTUAL_PERDA PERCENT, label='Percentual de perda';
ITEM PERC_MARGEM_LUCRO PERCENT, label='Margem de lucro (%)';
ITEM PERC_TOTAL_INCIDENCIAS PERCENT, label='Total das incidencias';
ITEM FATOR_PRECO PERCENT, label='Fator de preço', format='#0.00000';
ITEM PERC_RETORNO_FINANCEIRO PERCENT, label='Retorno financeiro (%)';
ITEM VALOR_RETORNO_FINANCEIRO PERCENT, label='Retorno financeiro (R$)';
ITEM VALOR_FRETE_VENDA decimal_value, label='Frete sobre a venda (R$)';
ITEM CUSTO_TOTAL_MARKUP_PVR decimal_value, label='Custo total + Markup s/ PVR';

item PRECO_VENDA_CALCULADO decimal_value, label='Preço de venda calculado (R$)';
item PRECO_VENDA_REALIZADO decimal_value, label='Preço de venda realizado (R$)';
item PRECO_INDICADO decimal_value, label='Preço indicado (R$)';
item MARGEM_LUCRO_REAL percent, label='Margem de lucro real (%)';


set table-title 'Listas de preços';
TRANSPOSE
colecao,
PRECO_VENDA_CALCULADO,
PRECO_VENDA_REALIZADO,
PRECO_INDICADO,
MARGEM_LUCRO_REAL,
PERC_CUSTOS_DIRETOS,
PERC_COMISSOES,
PERC_PROVISIONAMENTO_COMISSOES,
PERC_PIS_COFINS_VENDA,
PERC_ICMS_VENDA,
PERC_ICMS_VENDA_BASE,
PERC_ICMS_VENDA_ALIQUOTA,
IRPJ_CSLL_LUCRO,
PERCENTUAL_PERDA,
PERC_MARGEM_LUCRO,
PERC_TOTAL_INCIDENCIAS,
FATOR_PRECO,
PERC_RETORNO_FINANCEIRO,
VALOR_RETORNO_FINANCEIRO,
VALOR_FRETE_VENDA,
CUSTO_TOTAL_MARKUP_PVR
from FORMACOES_PRECOS base
inner join V_FORMACOES_PRECOS vfpr on vfpr.id = base.id
inner join colecoes c on c.id = base.LISTA_PRECO_ID
where base.produto_id = (select produto_id from FORMACOES_PRECOS where id =${id})

Tipo: TEXT

FPRVEN.CAD_FORMACOES_PRECOS.CSS

CSS customizado para a interface

CSS customizado para compactar a interface.

Tipo: SOURCE_CODE

Valor padrão: table.multi-row th { font-size: 9pt; white-space: wrap; } .domain-area .input, .domain-area .display { display: inline-block; white-space: nowrap; } table.multi-row td { padding: 0px !important; } .domain-area { padding: 0px 3px; }

FPRVEN.CAD_FORMACOES_PRECOS.QUANTIDADE_DOCUMENTOS

Quantidade de documentos a ser apresentado

Quantidade de documentos que devem ser apresentados para seleção do item do documento fiscal.

Tipo: INTEGER

Valor padrão: 5

FPRVEN.CAD_FORMACOES_PRECOS.SCRIPT_ULTIMAS_COMPRAS

Script para apresentar as ultimas compras

Script utilizado na interface para apresentar as ultimas compras deste produto. Este script deve utilizar as macros abaixo para contextualizar:

  • ${estabelecimento_id}: ID do estabelecimento padrão do usuário.
  • ${produto_id}: ID do produto.

Exemplo:
set heading off;
set table off;
select to_char(d.data_entrega,'dd/mm/yy') 
|| ' ' || to_char(i.valor_unitario,'99999990.00')
|| ' ' || e.especie || ' ' 
||  d.numero || '/' || d.serie
|| ' ' || f.nome_completo
from itens_doc_entradas_saidas i
join doc_entradas_saidas d on d.id = i.documento_id
join especies e on e.id = d.especie_id
join pessoas f on f.id = d.emitente_id
where i.produto_id = ${produto_id}
and d.tipo_operacao = 'E'
limit 3;

Tipo: SOURCE_CODE

FPRVEN.CAD_FORMACOES_PRECOS.SQL_NOTAS_ENTRADAS

SQL para apresentação das notas fiscais que devem ser apresentas para seleção

SQL para apresentação das notas fiscais que devem ser apresentas para seleção.

Deve ser informado o filtro :PRODUTO_ID: na query.

Padrão utilizado:
select it.id
from itens_doc_entradas_saidas it
inner join doc_entradas_saidas doc on doc.id = it.documento_id
inner join naturezas_operacoes nat on nat.id = doc.natureza_operacao_id
where it.produto_id = ${PRODUTO_ID}
and doc.tipo_operacao='E'
and nat.gera_estatistica_compras='S'
and doc.tipo_emitente='T'
order by doc.data_entrega desc
limit 5

Tipo: SOURCE_CODE

FPRVEN.FORMACOES_PRECOS.FORMULAS

Formulação do preço de venda

Script utilizado para calcular os atributos relacionados à formação do preço de venda.
O script é formado por uma série de expressões que seguem o seguinte padrão:

ATRIBUTO = FORMULA;
Estas expressões devem:
  • Sempre terminar com ";". Se for necessário, a fórmula poderá ter várias linhas, mas a última linha deverá obrigatoriamente terminar com ";".
  • A formula deve ser escrita utilizando a sintaxe para expressões matemáticas do SQL.
  • A formula poderá utilizar qualquer um dos atributos da entidade FORMACOES_PRECOS e V_FORMACOES_PRECOS como parâmetros na expressão.
  • Se necessário, a formula poderá incluir consultas SQL (sub-queries) que deverão utilizar o contexto do registro com o alias "base":
    • base.PRODUTO_ID
    • base.ESTABELECIMENTO_ID
    • base.LISTA_PRECO_ID
  • Uma formula poderá utilizar o resultado de uma outra formula já calculada como parâmetro. Neste caso, o parâmetro deverá ser referenciado como macro.

Exemplo:
PRECO_COMPRA_IPI_FRETE = PRECO_COMPRA
     + PRECO_COMPRA * PERC_IPI_COMPRA / 100
     + VALOR_IPI_COMPRA
     + PRECO_COMPRA * PERC_FRETE_COMPRA / 100
     + FRETE_COMPRA;

PRECO_COMPRA_FINAL = ${PRECO_COMPRA_IPI_FRETE}
+ ${PRECO_COMPRA_IPI_FRETE} * PERC_ICMS_ST / 100
+ VALOR_ICMS_ST
- PRECO_COMPRA * PERC_PIS_COFINS_RECUPERADO / 100
- PRECO_COMPRA * PERC_ICMS_RECUPERADO / 100
- PRECO_COMPRA * PERC_BONIFICACOES / 100
- VALOR_BONIFICACOES;

Tipo: SOURCE_CODE

FPRVEN.FORMACOES_PRECOS.SCRIPT_AUTO_PREENCHER

Script utilizado no auto-preenchimento

DDL executado para preencher automaticamente os parâmetros de formação do preço de venda a partir dos dados existentes no sistema. Este script utiliza o ID da lista de preços e o ID do estabelecimento através das macro-substituições:

  • ${lista_preco_id}: Lista de preço que está sendo auto-preenchida
  • ${estabelecimento_id}: Estabelecimento padrão do usuário

Exemplo:
update formacoes_precos base
set preco_venda_realizado = ic.preco_sugerido
from formacoes_precos fpv
join itens_colecoes ic on ic.id = fpv.id
where fpv.id = base.id
and fpv.lista_preco_id = ${lista_preco_id}

Tipo: SOURCE_CODE

FPRVEN.FORMACOES_PRECOS.SQL_DOCUMENTO

SQL para busca dos valores do documento de entrada

SQL para realizar a busca dos valores para preenchimento dos valores de entrada.

SQL de exemplo:

select produto_id, (CASE WHEN substring(base.CST from 2 for 2) in ('60','10','30','70') then null else base.aliquota_icms                 end) as PERC_ICMS_RECUPERADO 
,(CASE WHEN substring(base.CST from 2 for 2) in ('20') and base.base_icms <100 then base.base_icms WHEN substring(base.CST from 2 for 2) in ('20') and base.base_icms =100 then (select tr.base_calculo_icms from tributacoes_produtos tr where tr.id = tributacao_produto_id ) else 100 end) as PERCENTUAL_ICMS_RECUPERADO_BASE 
,(case when base.valor_mercadorias_servicos = 0 then null when base.valor_icms_substituicao_tributaria > 0 then (base.valor_icms_substituicao_tributaria * 100 / (base.valor_mercadorias_servicos - coalesce(valor_desconto_item,0) ))          when (select valor_tributo          from operacoes_fiscais_itens_documento          where tributo_id = (select id from tributos where sigla = 'SUBST')           and item_documento_id = BASE.ID) is not null          then (select valor_tributo          from operacoes_fiscais_itens_documento          where tributo_id = (select id from tributos where sigla = 'SUBST')           and item_documento_id = BASE.ID) * 100 / base.valor_mercadorias_servicos          else null end) as PERC_ICMS_ST_COMPRA 
,null as VALOR_ICMS_ST_COMPRA 
,null as PERC_IPI_COMPRA 
,(CASE WHEN quantidade = 0 then null when (cst_ipi is not null and cst_ipi='00') then null else base.valor_ipi/BASE.QUANTIDADE end ) as VALOR_IPI_COMPRA 
,null as PERC_FRETE_COMPRA 
,case when valor_frete_item is not null and valor_frete_item >0 then valor_frete_item/quantidade else null end as VALOR_FRETE_COMPRA 
,(select sum(aliquota_tributo)          from operacoes_fiscais_itens_documento o           where tributo_id in (select id from tributos where sigla  in ('COFINS','PIS') )           	and  item_documento_id = BASE.ID)  as PERC_PIS_COFINS_RECUPERADO 
,null as PRECO_COMPRA_IPI_FRETE 
,base.valor_unitario as preco_compra 
, ((base.valor_total_item/doc.valor_total / quantidade) * doc.valor_frete_conhecimento) as VALOR_FRETE_TERC_COMPRA
, (base.valor_desconto_item/base.quantidade) as DESCONTO
, (CASE WHEN substring(base.CST from 2 for 2) in ('51') and base.diferimento_icms is not null then base.diferimento_icms else null end) as diferimento  
from itens_doc_entradas_saidas base 
inner join doc_entradas_saidas doc on doc.id = base.documento_id 
where base.id = ?

Tipo: TEXT