Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. DADOS GERAIS


Produto:

TOTVS CRM Automação da Força de Vendas

Linha de Produto:

Linha TOTVS CRM SFA

Módulo:Venda
Função:Pedido
Ticket:
Requisito/Story/Issue:

Jira
serverJIRA
serverId0c783de1-186e-383b-975c-a1acd7d76cb5
keyTSFAFSWE-4003

02. ESCOPO FUNCIONAL

...

  • Na tela de cadastro de desconto, para registros selecionados com "Aplicar em" = "Preço de venda" o sistema deve disponibilizar flag para "Exibir como oferta".
  • Descontinuar a tela de cadastro de ofertas via tabela de preço
  • No pedido de venda, ao buscar ofertas, além de buscar em produtoconfigvenda, como atualmente (respeito ao legado), o sistema deverá buscar os registros de desconto que estão com campo "Exibir como oferta" = "Sim", para exibir seu preço descontado já com o desconto sugerido (ponteiro || faixa mínima)
    • faixapercentual
    • faixaquantidade

02.01 Mapa de alterações

  • Separação de descontos em abas: preço venda / preço tabela, 
    • Preço tabela:
        • descrição
        • sigla
        • classe desconto (novo)
        • vigência
        • faixa quantidade
        • novo campo Modelo de faixa = "Valor / percentual" (  desconto.sglmodelofaixa = 'perc' ou 'val')
        • percentual
        • valor
      • Validações
        • faixaquantidade persistir null quando não informado, ao invés de 0
        • faixaquantidadeinicial <= faixaquantidadefinal
        • Faixa percentual e faixa quantidade precisam aceitar até 6 casas
        • Permitir valor negativo mesmo com conteúdo preenchido
    • Preço venda
      • remover "aplicado em"
      • Faixa percentual e faixa quantidade precisam aceitar até 6 casas
      • Remoção do conceito de ponteiro
        • novo campo Modelo de faixa = "Valor / percentual" 
        • Fixar filtro faixapercentual / faixavalor
        • Alterar posicionamento campos percentual e valor para a direita do "aplicar automaticamente", editáveis somente quando aplicar auto = sim 
        • Opção "Selecione" alterada para "Permitir"
        • Coluna "Lógica ao exceder" alterada para "Lógica aplicação"
        • Coluna "Faixa percentual" alterada para "Faixa aplicação"
        • Analisar impacto de clientes que já possuem ponteiro > faixa mínima e < faixa mínima
          • Para APR,
            • Clone de registro de desconto com lógica vazia, faixa minima = faixa minima registro clonado, faixa máxima = ponteiro registro clonado
            • update faixaminima para ponteiro
      • Validações
        • Percentual/Valor aplicado automaticamente between faixa aplicação inicial e final
        • faixainicial <= faixafinal
        • faixaquantidade persistir null quando não informado, ao invés de 0
        • faixaquantidadeinicial <= faixaquantidadefinal
        • Permitir valor negativo mesmo com conteúdo preenchido
  • Separação em níveis desconto preço tabela / desconto preço venda
    • Copiar configuração de desconto preço tabela do desconto preço venda, via tools
  • Comportamento alterado quando não encontra-se registros de desconto
    • Antes, permitia a inserção de desconto, agora, bloqueia

02.02 Protótipo

A experiência da tela de cadastro refatorada pode ser acessada através do link: https://www.figma.com/proto/sZOz8QUKfhSVacld8u9aLc/Refatora%C3%A7%C3%A3o-de-tela-de-cadastro-de-desconto?node-id=0-1&t=v6s6gBBJWZ2ce1YI-1

03. ESCOPO TÉCNICO

Painel
borderColorlightgray

03.01.01 Adição de colunas na tabela desconto

Contexto / Gatilho:

  • Pelo tools, opção 3

Lógica:

  • O sistema deve adicionar as seguintes colunas na tabela desconto:

Sem Formato
sglmodeloaplicacao: varchar(10), nullable, default "PERC"
  • O sistema deverá atualizar os valores da coluna uma vez segundo o script:
Sem Formato
update desconto set sglmodeloaplicacao = case when valor > 0 then 'VAL' else 'PERC' end 
Painel
borderColorlightgray

03.02.01 Separação de tela de desconto em abas

Contexto / Gatilho:

  • No ambiente Web, ao clicar na opção do menu Cadastro → Venda → Desconto

Lógica:

  • O sistema deverá carregar tela com duas abas:

    • Âncora
      campo_precotabela
      campo_precotabela
      "Preço de tabela"

      • Quando clicado sobre a aba, o sistema deve carregar o conteúdo descrito pela seção Aba "Preço tabela"
    • Âncora
      campo_precovenda
      campo_precovenda
      "Preço de venda"

      • Selecionada por padrão
      • Quando clicado sobre a aba, o sistema deve carregar o conteúdo descrito pela seção Aba "Preço venda"
  • Visto que o conteúdo de cada uma das abas será diferente, os botões de ação:
      • "Adicionar"
      • "Gravar"
    • que anteriormente ficavam no canto superior da tela, deverão ser removidos, para serem reposicionados dentro do escopo da grid, dentro do conteúdo das abas.
Painel
borderColorlightgray

Âncora
aba_precotabela
aba_precotabela
03.02.02 Aba "Preço tabela"

Contexto / Gatilho:

Lógica:

  • O sistema deverá exibir conteúdo referenciado conforme o protótipo a seguir:

    • Image Added
  • O conteúdo da aba deverá exibir os seguintes elementos visuais:
  • Cabeçalho de pesquisa:
    • "Pesquisa rápida": Campo de entrada textual
      • Quando pesquisado, a informação do campo é utilizada para comparar com:
        • desconto.descricao
        • desconto.sigla
    • "Vigência de": Campo de entrada, data
    • "Até": Campo de entrada, data
    • "Pesquisa avançada": Texto clicável, para exibir/ocultar os campos de filtros avançados
      • /* Visto que não terá alteração nos filtros avançados, essa documentação não teve como objetivo detalhar todos os campos */
    • Botões de ação:
      • Pesquisar: Quando clicado, dispara a requisição de pesquisa de registros da entidade
      • Limpar: Limpa os valores dos campos de pesquisa
  • Grid de informações de controle de cota, contendo
    • Botões de ação
      • Adicionar: Botão que, quando clicado, adiciona nova linha na grid de desconto.
      • Cancelar alteração: cancela alterações da grid ainda não commitadas em banco
      • Gravar: commita as alterações da grid nos respectivos campos
        • Quando gravado, o registro deverá ser persistido na tabela desconto, sendo o detalhe do objeto a seguir:

          Sem Formato
          {
          	descricao: Valor do campo "Descrição"
          	sgltipodesconto: Valor do campo "Sigla"
          	idclassedesconto: identificador da entidade selecionada no campo "Classe desconto"
          	datainiciovigecia: Valor do campo "Data início vigência"
          	datafimvigencia: Valor do campo "Data fim vigência"
          	faixaquantidademinima: Valor do campo "Faixa quantidade mínima" 
           	faixaquantidademaxima: Valor do campo "Faixa quantidade máxima"
          	sglmodeloaplicacao: Valor do campo "Modelo aplicação" (Se "Percentual" = "PERC", se "Valor"= "VAL")
          	sglaplicacao: "PRCTAB"
          	percentual: Se sglmodeloaplicacao = PERC, Valor do campo "Percentual/Valor"
           	valor: Se sglmodeloaplicacao = VAL, Valor do campo "Percentual/Valor" 
          }
    • Lista de colunas da grid:
      • "Descrição": campo texto, editável, obrigatório
        • O valor da coluna é buscado / persistido com base no campo desconto.descricao
      • "Sigla": campo texto, editável, obrigatório, aceitando até 20 caracteres
        • O valor da coluna é buscado / persistido com base no campo desconto.sgltipodesconto
      • "Classe desconto": campo do tipo pesquisa seleção simples, editável, obrigatório
        • As opções do campo deverão seguir conforme implementação atual, definido nesta documentação
        • O valor da coluna é buscado / persistido com base no campo desconto.idclassedesconto
      • "Data início vigência": Campo tipo data, não obrigatório, editável
        • O valor da coluna é buscado / persistido com base no campo desconto.datainiciovigencia
        • O campo não pode ter valor maior que o campo "Data fim vigência", se informado
      • "Data fim vigência": Campo tipo data, não obrigatório, editável
        • O valor da coluna é buscado / persistido com base no campo desconto.datafimvigencia
        • O campo não pode ter valor maior que o campo "Data inicio vigência", se informado
      • "Faixa quantidade mínima": campo numérico, não obrigatório, editável
        • O campo deve aceitar apenas valores positivos
        • O campo deve aceitar valores fracionados, com precisão de até 6 casas decimais
        • O valor da coluna é buscado / persistido com base no campo desconto.faixaquantidademinina
        • O campo, quando não informado, deve persistir valor nulo
      • "Faixa quantidade máxima": campo numérico, não obrigatório, editável
        • O campo deve aceitar apenas valores positivos
        • O campo deve aceitar valores fracionados, com precisão de até 6 casas decimais
        • O valor da coluna é buscado / persistido com base no campo desconto.faixaquantidademaxima
        • O campo, quando não informado, deve persistir valor nulo
      • "Modelo aplicação": campo de opções selecionáveis, obrigatório, editável, seleção única, com as seguintes opções selecionáveis:
          • "Percentual", valor padrão
            • Visto que há possibilidade de o campo estar null no banco, se estiver, considerar 'PERC'
          • "Valor"
      • "Percentual / Valor": campo numérico, editável, obrigatório
        • O campo deve aceitar valores positivos e negativos (ainda que o campo esteja preenchido)
        • O valor da coluna é buscado / persistido com base na lógica a seguir:
          • Se sglmodeloaplicacao = PERC,
            • persistir/consultar do campo desconto.percentual
          • Se sglmodeloaplicacao = VAL
            • persistir/consultar do campo desconto.valor
      • Image Added "Editar": ícone clicável.
        • Quanto clicado, abre modal de vínculos de desconto com outras entidades
          • /* A modal já existe e não terá sua lógica alterada, portanto, não será detalhada na presente documentação */
      • Image Added"Remover": ícone clicável
        • Quando clicado, marca o registro da grid para deleção. A deleção efetiva ocorre após o acionamento do botão de ação "Gravar"


Painel
borderColorlightgray

Âncora
aba_precovenda
aba_precovenda
03.02.02 Aba "Preço Venda"

Contexto / Gatilho:

Lógica:

  • O sistema deverá exibir conteúdo referenciado conforme o protótipo a seguir:

    • Image Added
  • O conteúdo da aba deverá exibir os seguintes elementos visuais:
  • Cabeçalho de pesquisa:
    • "Pesquisa rápida": Campo de entrada textual
      • Quando pesquisado, a informação do campo é utilizada para comparar com:
        • desconto.descricao
        • desconto.sigla
    • "Vigência de": Campo de entrada, data
    • "Até": Campo de entrada, data
    • "Pesquisa avançada": Texto clicável, para exibir/ocultar os campos de filtros avançados
      • /* Visto que não terá alteração nos filtros avançados, essa documentação não teve como objetivo detalhar todos os campos */
    • Botões de ação:
      • Pesquisar: Quando clicado, dispara a requisição de pesquisa de registros da entidade
      • Limpar: Limpa os valores dos campos de pesquisa
  • Grid de informações de controle de cota, contendo
    • Botões de ação
      • Adicionar: Botão que, quando clicado, adiciona nova linha na grid de desconto.
      • Cancelar alteração: cancela alterações da grid ainda não commitadas em banco
      • Gravar: commita as alterações da grid nos respectivos campos
        • Quando gravado, o registro deverá ser persistido na tabela desconto, sendo o detalhe do objeto a seguir:

          Sem Formato
          {
          	descricao: Valor do campo "Descrição"
          	sgltipodesconto: Valor do campo "Sigla"
          	idclassedesconto: identificador da entidade selecionada no campo "Classe desconto"
          	datainiciovigecia: Valor do campo "Data início vigência"
          	datafimvigencia: Valor do campo "Data fim vigência"
          	faixaquantidademinima: Valor do campo "Faixa quantidade mínima" 
           	faixaquantidademaxima: Valor do campo "Faixa quantidade máxima"
          	sgllogicaexceder: Valor do campo "Lógica aplicação" (Se "Permitir" = null, "Gerar aprovação" = 'APR', "Gerar aprovação com itens" = "APR_ITENS") 		
          	idtipoaprovacao: Identificador da entidade selecionada no campo "Tipo aprovação" 
          	sglmodeloaplicacao: Valor do campo "Modelo aplicação" (Se "Percentual" = "PERC", se "Valor"= "VAL")
          	faixapercentualinicial: Se sglmodeloaplicacao = PERC, Valor do campo "Faixa aplicação inicial"
          	faixapercentualfinal: Se sglmodeloaplicacao = PERC, Valor do campo "Faixa aplicação final"
          	faixavalorminimo: Se sglmodeloaplicacao = VAL, Valor do campo "Faixa aplicação inicial"
          	faixavalormaximo: Se sglmodeloaplicacao = VAL, Valor do campo "Faixa aplicação final"
          	idnaplicaautomatico: Valor do campo "Aplica automático?" (1 se marcado, 0 se desmarcado)
          	percentual: Se sglmodeloaplicacao = PERC, Valor do campo "Percentual/Valor"
           	valor: Se sglmodeloaplicacao = VAL, Valor do campo "Percentual/Valor"
          	sglaplicacao: "PRCVEN"
          }
    • Lista de colunas da grid:
      • "Descrição": campo texto, editável, obrigatório
        • O valor da coluna é buscado / persistido com base no campo desconto.descricao
      • "Sigla": campo texto, editável, obrigatório, aceitando até 20 caracteres
        • O valor da coluna é buscado / persistido com base no campo desconto.sgltipodesconto
      • "Classe desconto": campo do tipo pesquisa seleção simples, editável, obrigatório
        • As opções do campo deverão seguir conforme implementação atual, definido nesta documentação
        • O valor da coluna é buscado / persistido com base no campo desconto.idclassedesconto
      • "Data início vigência": Campo tipo data, não obrigatório, editável
        • O valor da coluna é buscado / persistido com base no campo desconto.datainiciovigencia
        • O campo não pode ter valor maior que o campo "Data fim vigência", se informado
      • "Data fim vigência": Campo tipo data, não obrigatório, editável
        • O valor da coluna é buscado / persistido com base no campo desconto.datafimvigencia
        • O campo não pode ter valor maior que o campo "Data inicio vigência", se informado
      • "Faixa quantidade mínima": campo numérico, não obrigatório, editável
        • O campo deve aceitar apenas valores positivos
        • O campo deve aceitar valores fracionados, com precisão de até 6 casas decimais
        • O valor da coluna é buscado / persistido com base no campo desconto.faixaquantidademinina
        • O campo, quando não informado, deve persistir valor nulo
      • "Faixa quantidade máxima": campo numérico, não obrigatório, editável
        • O campo deve aceitar apenas valores positivos
        • O campo deve aceitar valores fracionados, com precisão de até 6 casas decimais
        • O valor da coluna é buscado / persistido com base no campo desconto.faixaquantidademaxima
        • O campo, quando não informado, deve persistir valor nulo
        • Quando informado o campo "Faixa quantidade mínima" for informado, o sistema deverá validar se "Faixa quantidade máxima" >= "Faixa quantidade mínima"
      • "Lógica aplicação": campo de opções selecionáveis, obrigatório, editável, seleção única, com as seguintes opções:
          • "Permitir": valor nulo
          • "Bloquear": valor "BLQ"
          • "Gerar aprovação": valor "APR"
          • "Gerar aprovação por itens": valor "APR_ITENS"
      • "Tipo aprovação": campo do tipo pesquisa seleção simples, editável
        • O campo deverá ser obrigatório quando a opção selecionada do campo "Lógica aplicação" for "Gerar aprovação" ou "Gerar aprovação por itens"
        • As opções do campo deverão seguir conforme implementação atual
        • O valor da coluna é buscado / persistido com base no campo desconto.idtipoaprovacao
      • "Modelo aplicação": campo de opções selecionáveis, obrigatório, editável, seleção única, com as seguintes opções:
          • "Percentual", valor padrão
            • Visto que há possibilidade de o campo estar null no banco, se estiver, considerar 'PERC'
          • "Valor"
      • "Faixa aplicação inicial": campo numérico, obrigatório, editável
        • O campo deve aceitar valores positivos e negativos
        • O campo deve aceitar valores fracionados, com precisão de até 6 casas decimais
        • O valor da coluna é buscado / persistido com base na lógica a seguir:
          • Se sglmodeloaplicacao = PERC,
            • persistir/consultar do campo desconto.faixapercentualinicial
          • Se sglmodeloaplicacao = VAL
            • persistir/consultar do campo desconto.faixavalorminimo
      • "Faixa aplicação final": campo numérico, obrigatório, editável
        • O campo deve aceitar valores positivos e negativos
        • O campo deve aceitar valores fracionados, com precisão de até 6 casas decimais
        • O valor da coluna é buscado / persistido com base na lógica a seguir:
          • Se sglmodeloaplicacao = PERC,
            • persistir/consultar do campo desconto.faixapercentualfinal
          • Se sglmodeloaplicacao = VAL
            • persistir/consultar do campo desconto.faixavalormaximo
      • "Aplica automático?": campo texto, editável exibindo Ativo/Inativo quando o campo desconto.idnaplicaautomatico estiver com respectivos valores 1/0. Ao editar o campo, o tipo do campo vira check-box marcada/desmarcada quando o campo desconto.idnaplicaautomatico estiver com respectivos valores 1/0
        • O valor da coluna é buscado / persistido com base no campo desconto.idnaplicaautomatico
      • "Percentual / Valor": campo numérico
        • O campo deve ser editável e obrigatório somente quando o campo "Aplica automático?" estiver marcado
        • O campo deve aceitar valores positivos e negativos (ainda que o campo esteja preenchido)
        • O valor da coluna é buscado / persistido com base na lógica a seguir:
          • Se sglmodeloaplicacao = PERC,
            • persistir/consultar do campo desconto.percentual
          • Se sglmodeloaplicacao = VAL
            • persistir/consultar do campo desconto.valor
      • Image Added "Oferta / Vitrine": Ícone clicável, que será implementado por esta documentação
      • Image Added "Editar": ícone clicável.
        • Quanto clicado, abre modal de vínculos de desconto com outras entidades
          • /* A modal já existe e não terá sua lógica alterada, portanto, não será detalhada na presente documentação */
      • Image Added"Remover": ícone clicável
        • Quando clicado, marca o registro da grid para deleção. A deleção efetiva ocorre após o acionamento do botão de ação "Gravar"
Painel
borderColorlightgray

03.03.01.01.01 Aplicação de filtro de faixapercentual de maneira fixa na busca de descontos

Contexto / Gatilho:

  • No ambiente Web, na configuração de busca de descontos (Configuração → Configuração pedido → Busca Produto → registro de DESCONTO)
    • Ao verificar os campos de filtro, tanto de busca por níveis como pelos filtros gerais

Lógica:

  • O sistema deverá remover a possibilidade de selecionar o registro "FAIXAPERCENTUAL", que atualmente pode ser selecionado opcionalmente.

Painel
borderColorlightgray

03.03.01.01.02 Implementação de filtragem fixa de descontos por faixa de aplicação

Contexto / Gatilho:

  • No ambiente Web / Mobile, no pedido de venda, na busca de cache de descontos dos produtos

Lógica:

  • O sistema deve em todas as buscas de níveis, e filtro geral, aplicar a cláusula WHERE a seguir:

Sem Formato
/* 
from desconto d
where case when sglmodeloaplicacao = 'PERC' then ${Campo % Desconto do contexto de item} between d.faixapercentualinicial and d.faixapercentualfinal 
else when sglmodeloaplicacao = 'VAL' then ${Campo R$ Desconto do contexto de item} between d.faixavalorminimo and d.faixavalormaximo end
*/
Painel
borderColorlightgray

03.03.02 Alteração de lógica de bloqueio de descontos na ausência de políticas encontradas

Contexto / Gatilho:

  • Nos ambientes Web/Mobile, no pedido de venda,
    • Ao alterar os campos de preço de venda / % desconto / R$ Desconto / Valor total desconto no contexto de itens

Lógica:

  • O sistema anteriormente, quando não encontrava registros de descontos no cache do item do pedido, permitia a inserção do desconto / acréscimo, desde que não superasse os campos tabelaprecoproduto.precominimo e tabelaprecoproduto.precomaximo

  • Agora, na ausência de um registro encontrado no cache de descontos do produto,
    • O sistema deverá bloquear a inserção de descontos / acréscimos (rollback), retornando mensagem: "Não há políticas de desconto cadastradas"

...