Skip to Content
Product Information
Author's profile photo Aleshane Ghisleri

SD: Exclusão do ICMS da base do PIS e do COFINS

(Scroll down for the English version)

Olá, pessoal

Você pode optar por excluir o ICMS da base de cálculo do PIS e do COFINS sobre as operações de receita. A solução entregue pela SAP te permite as seguintes opções no contexto de exclusão do ICMS da base de cálculo do PIS e do COFINS em Sales and Distribution (SD):

  • Nenhuma mudança.
  • Exclusão apenas do valor de ICMS (ICM3).
  • Exclusão dos valores de ICMS (ICM3) e Fundo de Combate à Pobreza (FCP) sobre o ICMS (ICSC).
  • Exclusão dos valores de ICMS (ICM3) e ICMS Partilha (ICAP), quando a operação for interestadual com não contribuintes do ICMS.
  • Exclusão dos valores de ICMS (ICM3), ICMS Partilha (ICAP), e FCP sobre o ICMS Partilha (ICSP), quando a operação for interestadual com não contribuintes do ICMS.

Você pode personalizar o seu sistema e definir em quais cenários essa exclusão deve acontecer. Para os cenários que você habilitar a exclusão, as seguintes mudanças no processo de cálculo acontecem:

  • O cálculo do preço unitário é alterado para que os valores de ICMS sejam excluídos das bases de cálculo do PIS e do COFINS durante a formação do preço.
  • Durante o cálculo do PIS e do COFINS, os valores de ICMS são excluídos das bases de cálculo.

 

Novo cálculo

Nos cenários que você não habilitar a exclusão, nenhuma mudança acontece e o sistema calcula preço unitário e impostos de acordo com o comportamento padrão. Nos cenários que você habilitar a exclusão, tanto o valor unitário, quanto as bases do PIS e do COFINS terão seus valores calculados conforme novo cálculo.

A formula para cálculo do preço unitário em um cenário de venda para revenda é a seguinte:

Preço unitário = Valor líquido / (1 – (ICMS + (PIS * (1 – ICMS)) + (COFINS * (1 – ICMS))))

 

Como habilitar a exclusão

Um novo método Exclude ICMS from PIS and COFINS base (EXCLUDE_ICMS_FROM_PIS_COF_BASE) está disponível na BAdI for Brazil Tax Extensions (BADI_J1B_EXTEND_TAXES). Esse método te permite ativar a exclusão do ICMS, de acordo com as suas necessidades legais.

Na descrição da SAP Note 3085964ICMS Exclusion from PIS and COFINS Base Amount (TAXBRA), você encontra exemplo do comportamento do cálculo de imposto e mais informações técnicas sobre a BAdI.

 

Campo do SPED

Para fins de escrituração fiscal, o campo ICMS Amount Excluded from the PIS/COFINS Calculation Base está disponível na nota fiscal, e indica a soma dos valores de ICMS excluídos da base de cálculo do PIS e do COFINS. O campo é preenchido automaticamente quando a nota fiscal criada em SD for relevante para cálculo de PIS e COFINS, e valores de ICMS tenham sido selecionados para exclusão via BAdI. Se você criar uma nota fiscal através das transações da Nota Fiscal Writer (J1B*N), o campo ficará disponível para você preencher manualmente.

 

Para ter essa solução ativa no seu sistema, aplique as seguintes SAP Notes:

  • Se você usa o esquema de cálculo de imposto TAXBRA, implemente SAP Note 3085964.
  • Se você usa o esquema de cálculo de imposto TAXBRJ, implemente as SAP Notes 3085964 e 3087229.
  • Para habilitar o campo do SPED, aplique a SAP Note 3097613.

Importante: se você tem alguma solução de exclusão de ICMS ativa no seu sistema, você deve reverter a implementação. Nesse caso, as SAP Notes de consultoria entregues no passado que devem ser revertidas são as seguintes:

  • Para TAXBRA, reverta a aplicação da SAP Note 2456984.
  • Para TAXBRJ, reverta a aplicação das SAP Notes 2457131 e 2456986.

 

Em breve, divulgaremos um post com mais informações referentes à solução de Materials Management (MM). Fiquem atentos! 🙂

 

Gostou desse post? Dê um Like e compartilhe o conteúdo com seus colegas, e fiquem à vontade para deixar um feedback abaixo. Caso tenha algum comentário ou pergunta sobre a solução, poste no nosso canal de perguntas, neste link.

 

Um abraço,

Aleshane Ghisleri

#SAPGoGlobal #SAPLocalization

 

 

 

****

 

 

 

Hi guys,

You can choose to exclude the ICMS from the PIS and COFINS tax base on revenue transactions. The solution delivered by SAP allows you the following options in the context of excluding ICMS from the PIS and COFINS tax base in Sales and Distribution (SD):

  • No changes.
  • Exclude only the ICMS amount (ICM3).
  • Exclude the ICMS (ICM3) and the Poverty Combat Fund (FCP) amounts on ICMS (ICSC).
  • Exclude the ICMS (ICM3) and the ICMS Partilha (ICAP) amounts when the transaction is interstate with non-ICMS contributers.
  • Exclude the ICMS (ICM3), the ICMS Partilha (ICAP), the and FCP on ICMS Partilha (ICSP) amounts when the transaction is interstate with non-ICMS contributers.

You can customize your system and define in which scenarios this exclusion should take place. For scenarios that you enable the exclusion, the following changes to the calculation process happen:

  • The unit price calculation is changed so that the ICMS amounts are excluded from the PIS and COFINS tax base during the price formation.
  • During the calculation of PIS and COFINS, the ICMS amounts are excluded from the tax base.

 

New calculation formula

In scenarios where you don’t enable exclusion, no change happens and the system calculates the unit price and taxes according to the default behavior. In scenarios where you enable the exclusion, both the unit price and the PIS and COFINS bases will have their values calculated according to the new calculation formula.

The formula for calculating the unit price in a sales-for-resale scenario is as follows:

Unit price = Net amount / (1 – (ICMS + (PIS * (1 – ICMS)) + (COFINS * (1 – ICMS))))

 

Enabling the exclusion

A new Exclude ICMS from PIS and COFINS base (EXCLUDE_ICMS_FROM_PIS_COF_BASE) method is available in the BAdI for Brazil Tax Extensions (BADI_J1B_EXTEND_TAXES). This method allows you to activate the ICMS exclusion according to your legal requirements.

In the description of SAP Note 3085964 – ICMS Exclusion from PIS and COFINS Base Amount (TAXBRA), you find an example of the behavior of the tax calculation and more technical information about the Business Add-In (BAdI).

 

SPED field

For tax bookkeeping purposes, the ICMS Amount Excluded from the PIS/COFINS Calculation Base field is available in the nota fiscal, and indicates the sum of the ICMS amounts excluded from the PIS and COFINS tax base. The field is automatically populated when the nota fiscal created in SD is relevant for PIS and COFINS calculation, and the ICMS values have been determined for exclusion via BAdI. If you create a nota fiscal using the Nota Fiscal Writer (J1B*N) transactions, the field is available for you to fill in manually.

 

To have this solution active on your system, apply the following SAP Notes:

  • If you use the pricing procedure TAXBRA, implement SAP Note 3085964.
  • If you use the pricing procedure TAXBRJ, implement SAP Notes 3085964 and 3087229.
  • To enable the SPED field, apply SAP Note 3097613.

Important: If you have any ICMS exclusion solutions active on your system, you must roll back the implementation. In this case, the consulting SAP Notes delivered in the past that must be rolled back are as follows:

  • For TAXBRA, roll back the implementation of SAP Note 2456984.
  • For TAXBRJ, roll back the implementation of SAP Notes 2457131 e 2456986.

 

We will soon publish a post with more information regarding the Materials Management (MM) solution. Stay tuned! 🙂

 

Did you like this post? Like and share the content with your colleagues, and feel free to leave feedback below. If you have any comments or questions about the solution, post on our questions channel, on this link.

 

See you,

Aleshane Ghisleri

#SAPGoGlobal #SAPLocalization

Assigned Tags

      40 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Wesley Yamaguti
      Wesley Yamaguti

      Olá, Aleshane!

      No post é informado que quem utiliza TAXBRJ devem ser aplicadas as notas 3085964 e 3087229, sendo que a nota 3085964 é para TAXBRA e a 3087229 é para TAXBRJ.

      Informa%E7%E3o%20do%20Blog

      Entretanto, no link do legal announcements (abaixo), apenas a nota 3087229 é indicada para TAXBRJ:

      Informa%E7%E3o%20do%20Legal%20Announcement

      https://launchpad.support.sap.com/#/legalchangenotification/NoteInforSet/jira=GSREQAMER-1953/TwoColumnsMidExpanded/0

      Por gentileza, pode confirmar se a aplicação da nota 3085964 é necessária para quem utiliza TAXBRJ?

      Muito obrigado!

      Author's profile photo Aleshane Ghisleri
      Aleshane Ghisleri
      Blog Post Author

      Olá, Wesley

      Sim, é necessário! A SAP Note que entrega a solução da TAXBRJ é a 3087229, porém ela tem como pre-requisito os objetos entregues pela SAP Note 3085964.

      Abraço, Aleshane

      Author's profile photo Antonio Ivo
      Antonio Ivo

      Bom dia Aleshane,

      Para o cenário de MM, essa solução atende?
      Podemos tratar na badi BADI_J1B_EXTEND_TAXES?

      Obrigado.

      Abraços,

      Antonio Carlos

      Author's profile photo Aleshane Ghisleri
      Aleshane Ghisleri
      Blog Post Author

      Olá, Ivo

      Hoje publicarei um blog post com os detalhes sobre a solução de MM! 🙂 porém, respondendo tua pergunta, a solução de MM utiliza a mesma BAdI.

      Abraço, Aleshane

      Author's profile photo Antonio Ivo
      Antonio Ivo

      muito obrigado, vamos efetuar os testes com os cenarios de MM e ajustar conforme necessario.

      Abraços

      Author's profile photo Wesley Viana
      Wesley Viana

      Antonio,

      Como você fez para a exclusão acontecer somente em SD e não em MM?

       

      Obrigado,

      Author's profile photo Antonio Ivo
      Antonio Ivo

      Bom dia Wesley,

      Aqui o funcional criou algumas regras, basicamente pelo VBTYP da XVBAK, por data no campo ERDAT, e pelo tipo de ordem no campo AUART. Para o Cenario de MM fizemos consistencias pelo SY-TCODE pois os nomes dos programas são diferentes para recuperar atraves do ASSIGN, e tambem por IVA.

      Coloquei abaixo  o codigo que usamos no metodo EXCLUDE_ICMS_FROM_PIS_COF_BASE. Espero que ajude

        method if_ex_badi_j1b_extend_taxes~exclude_icms_from_pis_cof_base.
      
          data: c_include type c value is initial.
          data: t_r_auart type table of tms_s_auart_range,
                t_r_fkart type table of tms_s_auart_range,
                r_mwskz   type range of mepo1317-mwskz.
      
          data: lt_tvarv type table of tvarvc.
          field-symbols: <f_mwskz>        type drseg-mwskz,
                         <f_xvbrk_vbtyp>  type vbrk-vbtyp,
                         <f_xvbrp_aubel>  type vbrp-aubel,
                         <f_xvbrp_aubell> type vbrp-aubel,
                         <f_xvbrk_fkart>  type vbrk-fkart,
                         <f_yvbrk_fkart>  type vbrk-fkart,
                         <f_yvbrk_vbtyp>  type vbrk-vbtyp,
                         <f_yvbrp_aubel>  type vbrp-aubel,
                         <f_yvbrp_aubell> type vbrp-aubel,
                         <f_ebeln>        type rm08m-ebeln.
      
          select *
          from tvarvc into table @data(t_tvarv)
          where name eq 'ZSD_EXC_ICMS_BASE_PIS_COFINS'
            and sign eq 'E'
            and opti eq 'EQ'.
      
          if sy-subrc = 0.
            read table t_tvarv into data(s_tvarvc) index 1.
      
            do 1 times.
      *******INICIO VALIDAÇÂO 1 e 2***********
              if s_tvarvc-low is not initial.
                assign ('(SAPMV45A)VBAK-VBTYP') to field-symbol(<f_vbak_vbtyp>).
                if sy-subrc = 0.
                  if <f_vbak_vbtyp> eq 'H'.
                    assign ('(SAPMV45A)VBAK-VGBEL') to field-symbol(<f_vbak_vgbel>).
                    if sy-subrc = 0.
                      select single aubel
                        from vbrp
                        into @data(s_vbrp_aubel)
                        where vbeln eq @<f_vbak_vgbel>.
      
                      if sy-subrc = 0.
                        select single vdatu
                          from vbak
                          into @data(s_vbak_erdat)
                          where vbeln eq @s_vbrp_aubel.
      
                        if s_vbak_erdat is not initial
                          and s_vbak_erdat >= s_tvarvc-low.
      *                   INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                          c_include = 'X'.
      *                   EXIT.
                        endif.
                      endif.
                    endif.
                  else.
                    assign ('(SAPMV45A)VBAK-VDATU') to field-symbol(<f_vbak_erdat>).
                    if sy-subrc = 0.
                      if <f_vbak_erdat> is not initial
                        and <f_vbak_erdat> >= s_tvarvc-low.
      *                INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                        c_include = 'X'.
      *                EXIT.
                      endif.
                    endif.
                  endif.
                endif.
      
                assign ('(SAPMV45A)XVBAK-VBTYP') to field-symbol(<f_xvbak_vbtyp>).
                if sy-subrc = 0.
                  if <f_xvbak_vbtyp> eq 'H'.
                    assign ('(SAPMV45A)XVBAK-VGBEL') to field-symbol(<f_xvbak_vgbel>).
                    if sy-subrc = 0.
                      select single aubel
                        from vbrp
                        into s_vbrp_aubel
                        where vbeln eq <f_xvbak_vgbel>.
      
                      if sy-subrc = 0.
                        select single vdatu
                          from vbak
                          into s_vbak_erdat
                          where vbeln eq s_vbrp_aubel.
      
                        if s_vbak_erdat is not initial
                          and s_vbak_erdat >= s_tvarvc-low.
      *                   INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                          c_include = 'X'.
      *                   EXIT.
                        endif.
                      endif.
                    endif.
                  else.
                    assign ('(SAPMV45A)XVBAK-VDATU') to field-symbol(<f_xvbak_erdat>).
                    if sy-subrc = 0.
                      if <f_xvbak_erdat> is not initial
                        and <f_xvbak_erdat> >= s_tvarvc-low.
      *                INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                        c_include = 'X'.
      *                EXIT.
                      endif.
                    endif.
                  endif.
                endif.
      
                assign ('(SAPMV45A)YVBAK-VBTYP') to field-symbol(<f_yvbak_vbtyp>).
                if sy-subrc = 0.
                  if <f_xvbak_vbtyp> eq 'H'.
                    assign ('(SAPMV45A)XVBAK-VGBEL') to field-symbol(<f_yvbak_vgbel>).
                    if sy-subrc = 0.
                      select single aubel
                        from vbrp
                        into s_vbrp_aubel
                        where vbeln eq <f_yvbak_vgbel>.
      
                      if sy-subrc = 0.
                        select single vdatu
                          from vbak
                          into s_vbak_erdat
                          where vbeln eq s_vbrp_aubel.
      
                        if s_vbak_erdat is not initial
                          and s_vbak_erdat >= s_tvarvc-low.
      *                   INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                          c_include = 'X'.
      *                   EXIT.
                        endif.
                      endif.
                    endif.
                  else.
                    assign ('(SAPMV45A)YVBAK-VDATU') to field-symbol(<f_yvbak_erdat>).
                    if sy-subrc = 0.
                      if <f_yvbak_erdat> is not initial
                        and <f_yvbak_erdat> >= s_tvarvc-low.
      *                INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                        c_include = 'X'.
      *                EXIT.
                      endif.
                    endif.
                  endif.
                endif.
      *******FIM VALIDAÇÂO 1 e 2***********
      
      *******INICIO VALIDAÇÂO 3 e 4***********
      
                if sy-tcode eq 'VF04' or
                   sy-tcode eq 'ZVF04'.
                  assign ('(SAPLV60A)XVBRK-VBTYP') to <f_xvbrk_vbtyp>.
                else.
                  assign ('(SAPMV60A)XVBRK-VBTYP') to <f_xvbrk_vbtyp>.
                endif.
      
                if sy-subrc = 0.
                  if <f_xvbrk_vbtyp> eq 'O'.
      
                    if sy-tcode eq 'VF04' or
                       sy-tcode eq 'ZVF04'.
                      assign ('(SAPLV60A)XVBRP-AUBEL') to <f_xvbrp_aubel>.
                    else.
                      assign ('(SAPMV60A)XVBRP-AUBEL') to <f_xvbrp_aubel>.
                    endif.
      
                    if sy-subrc = 0.
                      select single vgbel
                        from vbak
                        into @data(s_vbak_vgbel)
                        where vbeln eq @<f_xvbrp_aubel>.
      
                      if sy-subrc = 0.
      
      *                  select single vdatu
      *                    from vbrk
      *                    into @data(s_vbrk_erdat)
      *                    where vbeln eq @s_vbak_vgbel.
                        select single aubel
                          from vbrp
                          into @data(s_vbrp_aubel1)
                          where vbeln eq @s_vbak_vgbel.
      
                        if sy-subrc = 0.
      
                          select single vdatu
                            from vbak
                            into @data(s_vbrk_erdat)
                            where vbeln eq @s_vbrp_aubel1.
      
                          if sy-subrc = 0
                            and s_vbrk_erdat is not initial
                            and s_vbrk_erdat >= s_tvarvc-low.
      *              INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                            c_include = 'X'.
      *              EXIT.
                          endif.
                        endif.
                      endif.
                    endif.
                  else.
      
      *              assign ('(SAPMV60A)XVBRK-VDATU') to field-symbol(<f_xvbrk_erdat>).
      
                    if sy-tcode eq 'VF04' or
                       sy-tcode eq 'ZVF04'.
      
                      assign ('(SAPLV60A)XVBRP-AUBEL') to <f_xvbrp_aubell>.
                    else.
                      assign ('(SAPMV60A)XVBRP-AUBEL') to <f_xvbrp_aubell>.
                    endif.
      
                    if sy-subrc = 0.
      
                      select single vdatu
                        from vbak
                        into @data(f_xvbrk_erdat)
                        where vbeln eq @<f_xvbrp_aubell>.
      
      *                if <f_xvbrk_erdat> is not initial
      *                  and <f_xvbrk_erdat> >= s_tvarvc-low.
      
                      if f_xvbrk_erdat is not initial
                        and f_xvbrk_erdat >= s_tvarvc-low.
      
      *              INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                        c_include = 'X'.
      *              EXIT.
                      endif.
                    endif.
                  endif.
                endif.
      
                if sy-tcode eq 'VF04' or
                   sy-tcode eq 'ZVF04'.
      
                  assign ('(SAPLV60A)YVBRK-VBTYP') to <f_yvbrk_vbtyp>.
                else.
                  assign ('(SAPMV60A)YVBRK-VBTYP') to <f_yvbrk_vbtyp>.
                endif.
      
                if sy-subrc = 0.
                  if <f_yvbrk_vbtyp> eq 'O'.
      *              assign ('(SAPMV60A)XVBRP-AUBEL') to field-symbol(<f_yvbrp_aubel>).
      
                    if sy-tcode eq 'VF04' or
                       sy-tcode eq 'ZVF04'.
      
                      assign ('(SAPLV60A)YVBRP-AUBEL') to <f_yvbrp_aubel>.
                    else.
                      assign ('(SAPMV60A)YVBRP-AUBEL') to <f_yvbrp_aubel>.
                    endif.
      
                    if sy-subrc = 0.
                      select single vgbel
                        from vbak
                        into s_vbak_vgbel
                        where vbeln eq <f_yvbrp_aubel>.
      
                      if sy-subrc = 0.
      
      *                  select single vdatu
      *                    from vbrk
      *                    into s_vbrk_erdat
      *                    where vbeln eq s_vbak_vgbel.
      
                        select single aubel
                          from vbrp
                          into @data(s_vbrp_aubell)
                          where vbeln eq @s_vbak_vgbel.
      
                        if sy-subrc = 0.
      
                          select single vdatu
                            from vbak
                            into s_vbrk_erdat
                            where vbeln eq s_vbrp_aubell.
      
                          if sy-subrc = 0
                            and s_vbrk_erdat is not initial
                            and s_vbrk_erdat >= s_tvarvc-low.
      *              INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                            c_include = 'X'.
      *              EXIT.
                          endif.
                        endif.
                      endif.
                    endif.
                  else.
      
      *              assign ('(SAPMV60A)YVBRK-ERDAT') to field-symbol(<f_yvbrk_erdat>).
      
                    if sy-tcode eq 'VF04' or
                       sy-tcode eq 'ZVF04'.
      
                      assign ('(SAPLV60A)YVBRP-AUBEL') to <f_yvbrp_aubell>.
                    else.
                      assign ('(SAPMV60A)YVBRP-AUBEL') to <f_yvbrp_aubell>.
                    endif.
      
                    if sy-subrc = 0.
      
                      select single vdatu
                        from vbak
                        into @data(f_yvbrk_erdat)
                        where vbeln eq @<f_yvbrp_aubell>.
      
      *                if <f_yvbrk_erdat> is not initial
      *                  and <f_yvbrk_erdat> >= s_tvarvc-low.
                      if f_yvbrk_erdat is not initial
                        and f_yvbrk_erdat >= s_tvarvc-low.
      **** Final Alteração
      
      *              INCLUDE ZISD_EXC_ICMS_BASE_PIS_COFI.
                        c_include = 'X'.
      *              EXIT.
                      endif.
                    endif.
                  endif.
                endif.
      *******FIM VALIDAÇÂO 3 e 4***********
      
              endif.
            enddo.
          endif.
      *******FIM VALIDAÇÂO 4***********
      
          if c_include is not initial. " codigo retirado da include ZISD_EXC_ICMS_BASE_PIS_COFI
      *      data: t_r_auart type table of tms_s_auart_range,
      *            t_r_fkart type table of tms_s_auart_range.
      
            define m_fill_base.
              CS_ICMS_EXCL_PARAMS-icms_fcp = abap_true.
              CS_ICMS_EXCL_PARAMS-icms = abap_true.
      *        ev_base = iv_val_incl_icms - iv_icms_amount - ms_tax_result-icms_fcp_amt.
              EXIT.
            end-of-definition.
            select *
            from tvarvc into table @data(t_tvarvc)
            where name eq 'ZSD_EXC_ICMS_BASE_PIS_COFINS '
              and sign eq 'I'
              and opti eq 'EQ'.
            loop at t_tvarvc into data(w_tvarvc).
              split w_tvarvc-low at ',' into data(l_auart) data(l_fkart).
              t_r_auart = value #( base t_r_auart (
                                        sign   = 'I'
                                        option = 'EQ'
                                        low    = l_auart ) ).
              t_r_fkart = value #( base t_r_fkart (
                                   sign   = 'I'
                                   option = 'EQ'
                                   low    = l_fkart ) ).
            endloop.
      
            do 1 times.
              if t_r_auart is not initial.
                assign ('(SAPMV45A)VBAK-AUART') to field-symbol(<f_vbak_auart>).
                if sy-subrc = 0.
                  if <f_vbak_auart> is assigned and <f_vbak_auart> in t_r_auart.
                    m_fill_base.
                  endif.
                endif.
      
                assign ('(SAPMV45A)XVBAK-AUART') to field-symbol(<f_xvbak_auart>).
                if sy-subrc = 0.
                  if <f_xvbak_auart> is assigned and <f_xvbak_auart> in t_r_auart.
                    m_fill_base.
                  endif.
                endif.
      
                assign ('(SAPMV45A)YVBAK-AUART') to field-symbol(<f_yvbak_auart>).
                if sy-subrc = 0.
                  if <f_yvbak_auart> is assigned and <f_yvbak_auart> in t_r_auart.
                    m_fill_base.
                  endif.
                endif.
              endif.
      
              if t_r_fkart is not initial.
      
                if sy-tcode eq 'VF04' or
                   sy-tcode eq 'ZVF04'.
      
                  assign ('(SAPLV60A)XVBRK-FKART') to <f_xvbrk_fkart>.
                else.
                  assign ('(SAPMV60A)XVBRK-FKART') to <f_xvbrk_fkart>.
                endif.
      
                if sy-subrc = 0.
                  if <f_xvbrk_fkart> is assigned and <f_xvbrk_fkart> in t_r_fkart.
                    m_fill_base.
                  endif.
                endif.
      
                if sy-tcode eq 'VF04' or
                   sy-tcode eq 'ZVF04'.
                  assign ('(SAPLV60A)YVBRK-FKART') to <f_yvbrk_fkart>.
                else.
                  assign ('(SAPMV60A)YVBRK-FKART') to <f_yvbrk_fkart>.
                endif.
      
                if sy-subrc = 0.
                  if <f_yvbrk_fkart> is assigned and <f_yvbrk_fkart> in t_r_fkart.
                    m_fill_base.
                  endif.
                endif.
              endif.
            enddo.
          endif.
      
      **** inicio inclusão - Cenario de MM
      
          if sy-tcode = 'ME21N' or
             sy-tcode = 'ME22N' or
             sy-tcode = 'ME23N' or
             sy-tcode = 'MIRO'  or
             sy-tcode = 'MIR7'  or
             sy-tcode = 'ME28'  or
             sy-tcode = 'ME29N' or
             sy-tcode = 'MIR4'.
      
      **** Verificar se o flag para considerar o calculo esta ativo
            select *
              from tvarvc into table lt_tvarv
              where name eq 'ZMM_PISCOF_ATIVA'.
      
            read table lt_tvarv into data(ls_tvarv) index 1.
      
            if ls_tvarv-low = abap_true.
      
      **** verificas os IVAS que estão ativos para o calculo
              refresh: lt_tvarv.
              select *
                from tvarvc into table lt_tvarv
                where name eq 'ZMM_PISCOF_IVAS'.
      
              loop at lt_tvarv into ls_tvarv.
                append initial line to r_mwskz assigning field-symbol(<lfs_mwskz>).
                if ls_tvarv-sign is initial.
                  <lfs_mwskz>(3) = 'IEQ'.
                else.
                  <lfs_mwskz>-sign   = ls_tvarv-sign.
                  <lfs_mwskz>-option = ls_tvarv-opti.
                endif.
                <lfs_mwskz>-low  = ls_tvarv-low.
                <lfs_mwskz>-high = ls_tvarv-high.
              endloop.
      
              assign ('(SAPLMEGUI)MEPO1317-MWSKZ') to <f_mwskz>.
      
              if sy-subrc eq 0.
                if <f_mwskz> in r_mwskz.
                  m_fill_base.
                endif.
              else.
                assign ('(SAPLMR1M)RM08M-EBELN') to <f_ebeln>.
                if sy-subrc eq 0.
                  select single mwskz
                    into @data(ls_mwskz)
                    from ekpo
                    where ebeln = @<f_ebeln>.
      
                  if sy-subrc eq 0 and
                     ls_mwskz in r_mwskz.
                    m_fill_base.
                  endif.
                endif.
              endif.
            endif.
          endif.
      
      
      Author's profile photo Wesley Viana
      Wesley Viana

      Olá, Antônio!

      Obrigado pelo retorno e ajuda.

      Eu havia pensado em realizar a validação somente na enhencmente responsável pro "habilitar" o CS_ICMS_EXCL_PARAMS-ICMS 'X'. Neste ponto, pensei em colocar uma validação para verificar se a aplicação vinha de SD ='V' ou MM = 'TX'.

      Mas vi que essa sua validação faz referência por data e documento também.

      Obrigado pelo retorno.

      Abraços,

      Wesley Viana

      Author's profile photo Luciane Santos
      Luciane Santos

      Olá Aleshane

      Aplicamos a solução da SAP, só que nos testes, quando foi realizado a devolução de um faturamento anterior a implementação (origem sem a exclusão do ICMS) identificamos que o sistema desconta o valor da base na devolução.

      Entendemos que deveria buscar os mesmos valores da origem, a SAP tem alguma solução para este cenário?

      Muito obrigada desde já!

      E ficamos no aguardo de um retorno

      Luciane

      Author's profile photo Vinicius Garcia
      Vinicius Garcia

      Olá, Luciane!

      Nós não entregamos nenhuma lógica para fazer este controle. Contudo, através da implementação do método Exclude ICMS from PIS and COFINS base (EXCLUDE_ICMS_FROM_PIS_COF_BASE), que disponibilizamos na BAdI for Brazil Tax Extensions (BADI_J1B_EXTEND_TAXES), é possível criar a lógica que atenda suas necessidades de negócio. Vale ressaltar que este método novo da BAdI possui o parâmetro de importação IS_ICMS_EXCL_INFO que por sua vez contém, entre outros, dados da KOMK, KOMP e KOMV, que fazem parte do framework da pricing e podem ser usados na sua lógica.

      Pode ser relevante saber também que entregamos com a SAP Note 3097613 o campo ICMS Amount Excluded from the PIS/COFINS Calculation Base (EXCLUDED_ICMS_FROM_PISCOFINS) na tabela Nota Fiscal line items (J_1BNFLIN). Este campo estará vazio para notas sem nenhuma exclusão, de acordo com a nossa solução de preenchimento automático dele.

      Desejo um ótimo dia!

      Atenciosamente,
      Vinícius Garcia

      Author's profile photo Luciane Santos
      Luciane Santos

      Olá Vinicius, boa tarde!

      Muito obrigada pelo seu retorno.

      Tenha um ótimo dia 😉

      Luciane

      Author's profile photo Matheus Caldeira
      Matheus Caldeira

      Boa tarde,

       

      por algum motivo que não consigo identificar não estou conseguindo fazer a implementação do método Exclude ICMS from PIS and COFINS base (EXCLUDE_ICMS_FROM_PIS_COF_BASE), disponibilizado na BAdI for Brazil Tax Extensions (BADI_J1B_EXTEND_TAXES). Simplesmente não me dá a opção. O que será que tem de errado na minha implementação?

      BAdI

      BAdI

      Obrigado,
      Matheus

      Author's profile photo Antonio Ivo
      Antonio Ivo

      Boa tarde Matheus,

      Nós conseguimos da seguinte forma: Acessar SE18 e colocar o nome da BADI BADI_J1B_EXTEND_TAXES e vá em Exibir.

      Clique com o botao direito em cima do nome da badi e vá na opção criar implementação. Dai basta seguir as etapas para criação e depois no metodo que voce quer implementar.


      Espero ter ajudado.

      Abraços

       

      Author's profile photo Matheus Caldeira
      Matheus Caldeira

      Oi Antonio,
      bom dia.

      Fiz a criação e implementei na classe CL_TAX_CALC_BR, porém ao tentar ativar ele dá erro dizendo que essa classe é abstrata. Entendo que estou fazendo na classe errada, você utilizou qual Implementation Class?

       

      Implementation

      Implementation

       

      M%E9todo

      Método

       

      Obrigado,
      Matheus

      Author's profile photo Antonio Ivo
      Antonio Ivo

      Bom dia Matheus,

      Voce precisará criar uma classe Z de implementação para funcionar corretamente. Veja como fizemos abaixo:

       

      Abraços

      Author's profile photo Matheus Caldeira
      Matheus Caldeira

      Oi Antonio!

      Obrigado por esclarecer. Já fiz a implementação aqui e os usuários vão iniciar os testes.

       

      Abraços.

      Author's profile photo Aleshane Ghisleri
      Aleshane Ghisleri
      Blog Post Author

      Olá, Matheus

      Compartilho contigo o link do SAP Help Portal com instruções para implementar BAdIs, pode cliar aqui. Acredito que vai te ajudar.

      Abraço, Aleshane

      Author's profile photo Matheus Caldeira
      Matheus Caldeira

      Bom dia Aleshane!

       

      Mesmo com meu usuário S não tenho permissão para acessar o link que você me passou 🙁

      consegue me passar de alguma outra forma?

       

      Obrigado,
      Matheus

      Author's profile photo Aleshane Ghisleri
      Aleshane Ghisleri
      Blog Post Author

      Olá, Matheus!

      Desculpa, talvez tenha enviado o link quebrado. Tenta esse, por favor: https://help.sap.com/viewer/46a2cfc13d25463b8b9a3d2a3c3ba0d9/latest/en-US/44f518d884056c30e10000000a114a6b.html

      Abraço, Aleshane

      Author's profile photo Lucia Mendes
      Lucia Mendes

      Aleshane,

       

      Estou no S4 e gostaria de saber, depois de aplicar as notas, como o sistema irá diferenciar cada caso de exclusão?

      • Exclusão apenas do valor de ICMS (ICM3).
      • Exclusão dos valores de ICMS (ICM3) e Fundo de Combate à Pobreza (FCP) sobre o ICMS (ICSC).
      • Exclusão dos valores de ICMS (ICM3) e ICMS Partilha (ICAP), quando a operação for interestadual com não contribuintes do ICMS.
      • Exclusão dos valores de ICMS (ICM3), ICMS Partilha (ICAP), e FCP sobre o ICMS Partilha (ICSP), quando a operação for interestadual com não contribuintes do ICMS.

      Seria o caso de criar alguma categoria da empresa para o pagamento ICMS para cada caso para determinar corretamente?

      Porque olhando as notas, eu não encontrei nenhuma customização de SD, e não sei como vai ocorrer esta diferenciação.

      Obrigada!!

       

      Lúcia Cristina Mendes

      Author's profile photo Vinicius Garcia
      Vinicius Garcia

      Olá,

      Para fazer essa definição você deve implementar o método EXCLUDE_ICMS_FROM_PIS_COF_BASE da BAdI for Brazil Tax Extensions (BADI_J1B_EXTEND_TAXES). Tendo em vista que não há uma definição legal clara, você deve implementar no método a lógica que fizer sentido para o seu contexto legal e de negócio. Neste método você pode analisar os parâmetros de entrada e preencher os parâmetros de saída como for necessário a fim de atender seu requisito legal.

      Se não houver nenhuma implementação da BAdI o sistema não irá excluir nada e o comportamento deve continuar o mesmo de antes da aplicação das notas. Segue explicação dos parâmetros.

      O parâmetro de entrada deste método da BAdI, IS_ICMS_EXCL_INFO, é uma estrutura que inclui, entre outros, KOMK, KOMP e KOMV, que fazem parte do framework da pricing e podem ser usados na sua lógica. É importante analisar bem seu caso para seja feita a implementação da lógica que atenda a todo o seu cenário legal.

      O parâmetro de saída do método é a estrutura CS_ICMS_EXCL_PARAMS que possui os campos icms, icms_fcp, icms_partilha, icms_partilha_fcp que definem o que será excluído. Alguns pontos relevantes:

      1. Se o parâmetro icms não estiver preenchido, nada será excluído independentemente do preenchimento dos outros parâmetros.
      2. Se o parâmetro icms_partilha não estiver preenchido, o FCP sobre a partilha não será excluído independentemente do parâmetro icms_partilha_fcp.
      3. Se algum parâmetro estiver preenchido mas não tiver nenhum valor para a condição relacionada, será equivalente a não estar excluindo. Por exemplo, o preenchimento ou não do parâmetro icms_partilha não interfere em nada em um cenário que não calcula partilha.

      Espero que ajude e qualquer dúvida estamos à disposição!

      Atenciosamente
      Vinícius Garcia

      Author's profile photo Lucia Mendes
      Lucia Mendes

      Explicação Sensacional Vinicius !! 🙂

       

      Vou passar aqui pro meu ABAP agora está começando a clarear!!  Justamente esta questão de ainda não existir uma definição clara, é o que está causando tanta dúvida!

      Valeu mesmo!!

      Bom final de semana!

       

      Author's profile photo Pedro Henrique Oliveira Vioto
      Pedro Henrique Oliveira Vioto

      Boa noite Vinicius,

      Gostaria de tirar uma dúvida, aplicamos a nota 3085964, porém ao analisar o source code na nota vi que existe um código inserido nas interfaces, mas na minha badi a interface está sem implementação em nenhum dos métodos.

      Consegue me esclarecer se está correto e devemos fazer a implementação customizada para o nosso contexto ou se deveria haver mesmo o source code inicial ?

      Segue prints.

      interface%20na%20nota

      interface na nota

      badi

      badi

       

      implementa%E7%F5es

      implementações

      Obrigado.

       

      Author's profile photo Vinicius Garcia
      Vinicius Garcia

      Olá, Pedro,

      Não há nenhuma implementação inicial por parte da SAP para o método EXCLUDE_ICMS_FROM_PIS_COF_BASE. Toda lógica para este cenário deve ser feita pelos clientes e é de responsabilidade dos clientes, como informado no Disclaimer da SAP Note 3085964 – ICMS Exclusion from PIS and COFINS Base Amount (TAXBRA).

      Este código que você vê na interface é apenas a definição local das estruturas usadas para os parâmetros do método EXCLUDE_ICMS_FROM_PIS_COF_BASE. Esses são entregues na interface. Interface nunca tem implementação de lógica, apenas definições (como assinatura de métodos e seus parâmetros, atributos, tipos).

      Se você quiser entender melhor, sugiro ir na transação SE24, abrir a interface IF_EX_BADI_J1B_EXTEND_TAXES e olhar os tipos que estão definidos nela na aba de types. Lá você verá a definição dos tipos mty_excl_icms_pis_cof_base e mty_excl_icms_pis_cof_params e assim poderá ver este código do source code entregue pela nota.

      Em relação a implementação da BAdI, caso haja dúvidas, sugiro ver a documentação relacionada.

      Atenciosamente,
      Vinícius Garcia

      Author's profile photo Pedro Henrique Oliveira Vioto
      Pedro Henrique Oliveira Vioto

      Entendido Vinicius, vou repassar pro pessoal aqui e veremos o que fazer.

       

      Muito Obrigado pela rápida ajuda.

      Author's profile photo Eduardo Nicolau Bermudez Larrion
      Eduardo Nicolau Bermudez Larrion

      Prezados,

      Só para ficar claro, toda ativação de exclusão se da pela BADI_J1B_EXTEND_TAXES, isto é, não há nenhuma exclusão para SD que seja configuração funcional?

      A SAP não pensa liberar alguma visão que para determinado código de imposto, tipo de ordem + categoria de item ou esquema de calculo para que faça uma exclusão padrão ?

      Seria muito legal ter como ativar via customizing e caso o customizing não atenda a regra sim ativar direto pela Badi.

      Eduardo.

       

      Author's profile photo Aleshane Ghisleri
      Aleshane Ghisleri
      Blog Post Author

      Olá, Eduardo

      O teu entendimento está correto.
      Não faz parte do nosso planejamento essa opção de customização, mas encaminhei o teu feedback para o time de desenvolvimento! 🙂 Agradeço a sugestão.

      Abraço, Aleshane

      Author's profile photo Eduardo Nicolau Bermudez Larrion
      Eduardo Nicolau Bermudez Larrion

      Galera deixo uma sugestão para SD na BADI, nas devolução ou complementares para que nas devoluções não ative quando a origem não tem a desoneração da base.

      Percebi em testes que no SD não basta apenas ativar a desoneração, pois é necessário que se valide as devoluções, isto é, Se a venda for anterior a desoneração e estiver ocorrendo uma devolução quando a mesma for feita vai desonerar, isto é, o credito da devolução não vai ficar igual a venda (mesmo com controle de copia D).

      Como resolver, a Solução da SAP sempre carrega o campo (excluded_icms_from_piscofins) da LIN, portanto se na saída houve desoneração esse campo vai ter valor, desta forma se pode colocar o seguinte código na BADI.

      Exemplo para a devolução (ordem):

      DATA: vl_excluded TYPE j_1bnfe_exc_icms_piscof.

      IF is_icms_excl_info-komk-vbtyp EQ 'H' AND is_icms_excl_info-komp-vgbel IS NOT INITIAL.

      SELECT SINGLE excluded_icms_from_piscofins
      FROM j_1bnflin
      INTO vl_excluded
      WHERE refkey = is_icms_excl_info-komp-vgbel AND refitm = is_icms_excl_info-komp-vgpos.

      IF vl_excluded IS NOT INITIAL.

      LOGICA DE ATIVAÇÃO (No código acima vemos que se for H (ordem devolução) o sistema busca da NF devolvida se o campo tem desoneração senão cai fora)

      ENDIF.

      ENDIF.

       

      Exemplo para a devolução (Faturamento):

      DATA: wa_vbap          TYPE vbap.

      IF is_icms_excl_info-komk-vbtyp EQ 'O' AND is_icms_excl_info-komp-aubel IS NOT INITIAL.

      SELECT SINGLE vgbel vgpos
      FROM vbap INTO CORRESPONDING FIELDS OF wa_vbap
      WHERE vbeln = is_icms_excl_info-komp-aubel AND posnr = is_icms_excl_info-komp-aupos.

      IF sy-subrc EQ '0'.

      SELECT SINGLE excluded_icms_from_piscofins
      FROM j_1bnflin
      INTO vl_excluded
      WHERE refkey = wa_vbap-vgbel AND refitm = wa_vbap-vgpos.

      IF vl_excluded IS NOT INITIAL.

      LOGICA DE ATIVAÇÃO (No código acima vemos que se for O (Fatura de devolução ou credito) o sistema               busca da NF devolvida se o campo tem desoneração senão cai fora)

      ENDIF.

       

      ENDIF.

       

      Está ideia é para que não ocorra uma devolução onde a saída tenha sido com base cheia e no retorno volte com base reduzida.

      Espero que ajude no caso de outras pessoas terem o mesmo problema.

      Eduardo

      Author's profile photo Aleshane Ghisleri
      Aleshane Ghisleri
      Blog Post Author

      Olá, Eduardo

       

      Obrigada pela sugestão! Vou compartilhar teu comentário com o time de desenvolvimento.

      Abraço, Aleshane

      Author's profile photo Eduardo Nicolau Bermudez Larrion
      Eduardo Nicolau Bermudez Larrion

      Show de bola, foi so um padrão que usei para quando é devolução ver se na NF de origem tinha a base excluída e so fizesse a desoneração do pis cof se na origem fez.

      Vi que tinha galera fazendo por data, mas como temos o campo (excluded_icms_from_piscofins) é mais facil ver se na origem ele está preenchido.

       

      Abraços.

      Edu

      Author's profile photo FELIPE CESAR CHAVES TIEPPO
      FELIPE CESAR CHAVES TIEPPO

      Bom dia, Aleshane

      Habilitamos a exclusão do ICMS das bases do PIS/COFINS, em um ambiente atualizado (não foi necessário a aplicação de nenhuma SAP Note).

      As bases do PIS e COFINS foram reduzidas perfeitamente. Porém, nos casos onde há PIS retido na fonte e COFINS retido na fonte, suas bases continuaram considerando o valor do ICMS.

      Como as bases "normais" e "retido na fonte" são sempre as mesmas, não deveria a exclusão do ICMS ter sido feita sobre os impostos RF também?

      Muito obrigado!

       

       

      Author's profile photo Aleshane Ghisleri
      Aleshane Ghisleri
      Blog Post Author

      Olá, Felipe

      Obrigada por entrar em contato. Indico que você entre em contato com o seu departamento jurídico e, caso haja entendimento de que esse é o comportamento esperado pela sua empresa, entre em contato com a SAP ou a ASUG junto com a base legal do requerimento. Estamos sempre dispostos à escutar seu feedback e faremos o possível para atender suas necessidades legais.

      Abraço, Aleshane

      Author's profile photo Eduardo Nicolau Bermudez Larrion
      Eduardo Nicolau Bermudez Larrion

      Apenas para compartilhar: caso alguem esteja tendo problemas em faturamentos com partição de lotes, isto é, na fatura ter o item que vai para a NF e um item lote e perceber que nestes casos o campo EXCLUDED_ICMS_FROM_PISCOFINS está ficando vazio ja há um nota piloto para o caso e creio que em breve será disponibilizada a todos.

       

      3256941 - Adjustment of ICMS Exclusion in Batch Split
      Process

      Abraços

      Eduardo

      Author's profile photo eduardo silveira
      eduardo silveira

      Ola, a nota para a Taxbra não esta mais disponivel?

      Author's profile photo Aleshane Ghisleri
      Aleshane Ghisleri
      Blog Post Author

      Olá, Eduardo

      A SAP Note 3085964 está disponível. Você não consegue acessar ela? Ou instalar? Qual a sua release?

      Abraço, Aleshane

      Author's profile photo Eduardo Nicolau Bermudez Larrion
      Eduardo Nicolau Bermudez Larrion

      Aleshane,

       

      Bom dia, sabe dizer quando será liberada a SAPNOTE abaixo?

       

      3256941 - Adjustment of ICMS Exclusion in Batch Split

       

      Passei por esse problema num cliente e essa nota resolveu, agora em outro o mesmo problema; mas a nota não consta para download, parece não ter sido liberada ainda.

       

      Pedi para abrir um chamado (903370 / 2022), mas quando há partição de lote o campo do exclude pis cofins fica zerado.

       

      Eduardo

      Author's profile photo Eduardo Nicolau Bermudez Larrion
      Eduardo Nicolau Bermudez Larrion

      So pra avisar que foi liberada a NOTA piloto
      3283482 - Adjustment of batch split scenario with values

      Author's profile photo Marcelo Pereira Freitas
      Marcelo Pereira Freitas

      Pessoal, bom dia!

      Primeiro gostaria de agradecer pelo suporte... sem dúvidas vocês fazem um ótimo trabalho.

      Consegui fazer a implementação... mas tenho um problema no qual o Valor total do produto está mudando....

      Usando o mesmo item e cliente sem a exclusão o valor total do produto é 145,14.....  mas quando aplico a exclusão o valor total do produto muda para 140,34...

      Poderiam por gentileza me ajudar?

       

      Author's profile photo Vinicius Garcia
      Vinicius Garcia

      Olá, obrigado pela pergunta!

      Tendo em vista que nosso sistema de maneira geral trabalha com preço líquido no input, é esperado que o preço final mude ao reduzir o imposto.

      Dentro do nosso sistema, com essa redução de impostos, a única maneira do preço final permanecer o mesmo é com aumento do preço líquido. Este ajuste deve ser feito a nível de configuração caso deseje manter o mesmo preço final. No ponto onde é mantido o preço líquido você deve aumentá-lo tanto quanto necessário para que o novo preço final bata com o preço final antes da exclusão.

      Atenciosamente
      Vinícius

      Author's profile photo Flavio de Souza
      Flavio de Souza

      Olá Vinicius, tudo bem?

      Fiquei com dúvida na sua resposta. Você está sugerindo um aumento do preço, o que normalmente é feito pela área de negócio porém menciona que deve ser feito a nível de configuração? Há alguma forma de "configurar" o preço para bater com o calculo antigo?

      Atenciosamente,

      Flavio