Objetivo
Possibilitar que o Totali Order faça os mesmos cálculos de Substituição Tributária que são feitos no Totali Checkout. Com isso o cliente terá acesso ao valor total da sua nota fiscal no momento em que fizer o orçamento.
Descrição da Rotina de Emissão de DAV com Substituição Tributária
A configuração "Calcula substituição para consumidor final contribuinte interestadual" será transferida do Totali Checkout para o Totali Config pois é necessária para os cálculos de Substituição Tributária. Além disso será criada uma interface para que o usuário possa informar a natureza de operação na qual aquela DAV será vendida, e serão adicionados campos para exibir a base e o valor de substituição tributária (ST) de cada item da DAV, assim como um totalizador do valor de ST na DAV na aba Geral.
Para realizar os cálculos da ST dos itens da DAV será criado um conjunto de classes com funções semelhantes as do Totali Checkout, que futuramente poderão ser utilizadas em outras rotinas que utilizem os mesmos cálculos.
Também serão armazenados internamente as informações de base, redução de base, valor e % de icms e substituição, assim como o mva da venda. EStas informações servirão para entendimento dos valores cálculados.
É importante destacar que o cálculo da substituição é diretamente afetado pelo cliente, a natureza de operação e os valores de acréscimo, desconto, frete e seguro da DAV. Por isso o valor de substituição de todos os itens serão recalculados sempre que estes valores forem alterados.
Para que o processo ocorra de maneira mais transparente para o usuário é necessário que ele selecione o cliente e a natureza da operação no início do cadastro da DAV, possibilitando assim que os valores de substituição tributária sejam calculados a medida que os produtos sejam incluídos.
Com a inclusão da natureza de operação de venda no cadastro da DAV o Checkout passará a respeitar tal configuração, necessitando de uma autorização de supervisor para alterá-la no momento do resgate da DAV.
Especificação Técnica
Configurações Necessárias
Abaixo estão datalhadas as tabelas e os respectivos atributos utilizados no cálculo da substituição:
TT_CLI(FLGTIP, TIPDOC, INSEST, ISENTO, CODCEP, SIMPLE)
TT_PRO(TIPICM, MVAVEN, ICMFED, REDUME, REDBAS, APLCON, REDCON, REDGR1, REDGR2, REDESP, PERICM, RESIPI, TIPPRO, CUSCOM)
TT_IUF(ESTADO, FILMAT, CODMAT, REDBAS, PERICM, REDESP, MVAVEN, REDSIM)
TD_EST(ESTADO, ONDCAL, ALIINT, PERICM, ICMINT)
TT_CFG(SUBSTT_CONSFI)
TD_NAT(TRIBUT, SERVIN)
Para que seja possível o correto cálculo dos valores de substituição são verificadas diversas configurações dos produtos e dos clientes, assim como algumas configurações gerais do Config. As mais importantes são:
Totali Config
Calcula substituição para consumidor final contribuinte interestadual (SubStt_ConsFi) do Config, que define se é feito cálculo de substituiçào para clientes Consumidores Finais em operações interestaduais;
Onde calcula? (OndCal) do estado da filial, que indica se é feito cálculo apenas para Fora ou Dentro do estado, ou em ambos os casos;
Dados da UF da filial e do cliente: são utilizados para definir se a operação é interestadual.
Totali Backoffice e Order
Tipo do Cliente, Cliente Isento e Tipo de documento do cliente: São utilizados para definir se o cliente é um consumidor final, uma revenda ou um contribuinte.
Dados de impostos do produto: definem a alíquota, percentuais de redução de base e MVA para os produtos. Devem ser definidos para cada estado, caso sejam diferentes, ou apenas para o estado da filial, que será utilizado como padrão.
Cliente da Dav: os valores de substituição tributária serão calculados com base nas informações do cliente selecionado.
Natureza de Operação da DAV: Se a natureza de operação for não tributa e não possuir um vínculo futuro não serão cálculados valores de substituição tributária.
Descrição do Processo
Abaixo estão listadas as operações do cadastro de DAVs que estão envolvidos no cálculo do valor de Substituição Tributária:

Para possibilitar o cálculo dos valores de ST foi definido um conjunto de classes que contém todas as informações utilizadas nos cálculos:

Refinamento do Processo
Juntamente a criação de uma nova DAV será criado um objeto da classe SubSttDAV passando como parâmetros a UF e os atributos OndCal, PerIcm e IcmInt da TD_EST da Filial, o SubStt_ConsF da TT_CFG, e os atributos Tribut e SerVin da TD_NAT, que indicam se a natureza é tributada e se possui vínculo futuro.
A natureza de operação deve ser informada na sequëncia, e pode ser adicionada como parâmetro na criação descrita acima. Para informar a natureza é necessário informacar os campos Tribut e SerVin. Segue abaixo a influência que tal alteração pode ter nos valores de ST:

Em seguida pode ser informado o cliente da DAV, que vai recalcular o valor de ST para todos os itens caso a lista de itens já esteja preenchida. Para informar o cliente deve-se utilizar como parâmetros os campos Simple, Isento, InsEst, FlgTip e TipDoc do cliente, assim como a UF, OndCal, PerIcm e IcmInt do estado do cliente:

Com a definição do cliente é possível que o objeto defina os atributos internos que serão utilizadas para definir algumas das variáveis numéricas utilizadas no cálculo da ST, como o MVA, a alíquota e o % de redução.

A qualquer momento o usuário pode informar os valores de acréscimo e desconto, e poderia também definir valores de frete e seguro. Como estes valores influênciam no cálculo do ST de cada um dos itens, é necessário ratear o valor pelos itens.

Para definir o tipo de tributação de cada item para a operação em questão foi definido um algoritmo: c
A cada inserção de item na DAV vai ser disparado um processo para cálculo da ST desse item, e em alguns casos o recálculo da ST de todos os itens.

Para que seja calculado um valor de ST para o produto ele deve ter o tipo de tributação como Substituído, a natureza da dav deve ser tributada ou com vínculo futuro, o MVA deve ser positivo e o tipo de Substituição do item deve ser 3. Calcula (10).

Para que seja possível calcular o valor da ST é necessário calcular o valor de IPI do item, caso exista:

Por fim, é preciso calcular o ICMS próprio do item para que ele seja deduzido do valor de substituição:

Para calcular o ICMS próprio é necessário definir a alíquota de ICMS utilizada para a operação em questão, que varia entre a do produto, a alíquota especial do produto, ou a alíquota do estado do cliente:

Para definir a Base do ICMS próprio é necessário descobrir se vai ser e qual vai ser o % de redução de base, que pode ser zero, REDCON, REDBAS, REDGR1 ou REDGR2:

Por fim o objeto vai totalizar os valores e a base de ST de todos itens em uma variável interna, para deixá-los disponíveis nas funções GetTotBasSub e GetTotVlrSub:

Caso seja necessário remover algum item da DAV, deve-se veriricar se existem valores rateados, e nesse caso rafazer o rateio e o cálculo de todos os itens. Caso contrário basta remover o item e recalcular os totais.

Caso seja necessário alterar a quantidade ou o valor bruto de algum item deve-se utilizar a função AlteraITem().
Cálculos Envolvidos
Mais informações sobre substituição tributária e os cálculos envolvidos no processo podem ser encontrados na página: http://ttadm:8080/wiki/index.php/Substitui%C3%A7%C3%A3o_tribut%C3%A1ria .
Além das informações presentes no artigo acima podemos encontrar um percentual de redução para a base de cálculo, MVAs e alíquotas diferenciados por Estado X Produto.
Alterações de Banco de Dados
Foi criada a configuração Substt_ConsFi na TT_CFG e os campos BASICM, VLRICM, BASSUB, VLRSUB, BASSTC, VLRSTC, MVAVEN, TAXICM, TAXSUB, REDICM e REDSUB na TT_IOR e CODNAT na TT_ORC.
| Coluna | Descrição | Origem | Domínio |
|---|---|---|---|
| BASICM | Base de ICMS | ||
| VLRICM | Valor de ICMS | ||
| BASSUB | Base de Substituição | ||
| VLRSUB | Valor de Substituição | ||
| BASSTC | Base se ST da compra | ||
| VLRSTC | Vlr BC do ICMS Retid | ||
| MVAVEN | MVA da Venda | ||
| TAXICM | Alíquota de ICMS | ||
| TAXSUB | Alíquota de ST | ||
| REDICM | Red. de Base de ICMS | ||
| REDSUB | Red. de Base de ST | ||
| CODNAT | Cod. Natureza Oper. | TD_NAT.CODTAB |
Alterações de Interface
Para possibiltiar o cálculo da substituição tributária no Order foi necessário transportar a configuracão "Calcula substituição para consumidor final contribuinte interestadual" que existia apenas no Checkout para o Config.
Também foi necessário possibilitar a seleção da natureza de operação no momento do cadastro da DAV no Order.
Para exibição dos valores de substituição serão adicionados a BASE e o VALOR de substituição no grid dos itens da DAV no Order.
Alterações de Checkout
A configuração Calcula substituição para consumidor final contribuinte interestadual deve ser removida do Checkout e passar a ser alimentada na carga, pela informação que vem do Config.
A natureza de operação da DAV deve ser importada no momento que a DAV é selecionada e só poderá ser alterada com permissão para alteração de orçamento.