Creating Tax Groups for Taxes Exception
Creating tax groups can be very useful to handle the tax calculation in Brazil for different taxes (on Sales Orders, PO’s and etc) , such as ICMS, IPI, PIS, COFINS, ISS, Tax Substitution, Withholding taxes and etc.
As taxes rates, bases and other taxes matters are very dynamic in Brazil, you will for sure need to have tax groups maintained in your SAP.
First you have to create the tax groups, then go to transaction J1BTAX (or you can go to SPRO – Financial Accounting (New) – Financial Accounting Global Settings (New) – Tax on Sales/Purchases – Calculation – Settings for Tax Calculation in Brazil – Tax Rates -Define Tax Groups for Dynamic Exceptions)
Then, select the Country BR
At J1BTAX, go to Menu: Tax Calculation – Maintain Tax Group
Before you select “New entries” let me explain what those fields on J_1BTXGRUOP means:
In the Red Box – TAX GROUP – You can define groups in the range from 10 to 89. The numbers between 0 and 9 as well as between 90 and 99 are reserved for SAP. These groups should not be deleted. SAP delivers the groups 1, 5 and 97 to 99.
When looking for a tax dynamic exception, SAP will start from the smallest Tax Group to the Higher and stop searching then the 1st combination is found. Take this in consideration, building your groups from the most complex (smallest groups) to the less complex (higher groups)
The table below explains the usage of the tax groups delivered by SAP:
Tax Group Usage
1 MM: ICMS base reduction carrier
SD: ICMS base reduction customer
ISS rates (material-dependent)
5 ICMS, IPI, S.T. material-dependent exceptions
MM: ISS exceptions (dependent on ship-from, ship-to, material)
97 SD: IPI tax laws (based on NCM code)
98 IPI standard taxes (based on NCM code)
SD: IPI tax laws (based on country)
ICMS standard tax rates (based on ship-from and ship-to)
S.T. standard tax rates (based on ship-from, ship-to, S.T. group)
99 Default taxes (based on country)
SD: IPI tax laws (based on tax code)
In the Orange Box – TAX GROUP FIELDS 1, 2 and 3 – You can use between none and 3 possible keys combination to build the tax exception. The fields that are available are:
ASNUM- Service Number
NBM- NCM Code
MATKL- Material Class, Material Group
MWSKZ- Tax Code
BRSCH- Industry Sector
CITYC- City Code
OIHMTXGP- Tax Group (Oil)
OIHVGROUP- Customer Tax Group (Oil)
OIHCGROUP- Vendor Tax Group (Oil)
USAGE- Tax Calculation: Material Usage
LOC_PR- Location of Service Provider
LOC_SE- Location of Service Provision
LOC_SR- Location of Service Customer
BUKRS- Company Code
MTUSE_MARC- Material Usage (Material Master Record)
MTORG- Origin of Goods
CNAE- CNAE Code
CRTN- CRT Number
ICMSTAXPAY- ICMS Tax Payer
INDTYP- Industry Main Type
TDT- Tax Declaration Type
COMSIZE- Company Size
DECREGPC- Declaration Regimen for PIS/COFINS
LEGALNAT- Legal Nature
EXTWG- External Material Group
PRDHA- Product Hierarchy
GPART_KK- Business Partner Number
In the Green Box – CALLING APPLICATION – The ones that are valid for using are:
SD Sales and Distribution – it means that the exception will be valid only for the SD applications, like Sales Orders or Billing Documents for Example.
MM Material Management – it means that the exception will be valid only to the MM applications, like Purchase Orders or Invoice verification.
General – it means that, no matter if it is MM or SD, the exception for this group will be applied.
In the Blue Box – TAXES CHECKBOX – Here you select what are the taxes that the tax group can be used for a tax exception.
The screen above is just one example. You have to figure out with your tax department what would be the best combination to the key fields.
To create a new group, hit “new entries”:
Map tax Rate tables to Cond. Tables
Once you have created the tax groups you have to assign tax groups to the condition tables. Go back to the J1BTAX main screen and then to the menu Condition Setup – Condition Mapping – Map tax Rate tables to Cond. Tables:
When you maintain Brazilian tax tables, the system generates or changes condition records automatically. In this activity, you specify which condition tables are to be used for a specific tax table. In the case of dynamic exceptions, you additionally specify the condition table per tax group. The system then knows for which condition table (which must be contained in the access sequence) condition records are to be generated.
The assignment of tax tables to condition tables is done with reference to a tax group for: dynamic exceptions for IPI, ICMS and Sub.Trib.; always for ISS, PIS, COFINS and withholding taxes.
* SAP does not deliver standard Customizing of dynamic tax exceptions. If you create new tax groups, you must specify a new entry for each group you use. In SAP’s standard concept, the condition table is the same for all tax groups. However, in case you need to follow a different concept of Customizing access sequences you can specify different condition tables per tax group. We recommend staying with the standard concept of one tax group per table.
** You can find these entries in the overview page of the Tax Manager’s Workplace (transaction J1BTAX). There you define tax rates for several kinds of taxes.
Let’s take a practical example on how to fill the J_1BVIEWMAP table:
I created the tax groups and I did select 9 of these groups to be relevant for COFINS Values Dynamic Exceptions:
Then, I created 9 entries to map the Tax Rate tables to the Condition tables, each one representing one tax group. You will notice that, the tables that has no tax group assigned, they will have one entry each table and they never change.
Every time when a new tax group is created and if the COFINS checkbox is selected, a new entry has to be created as below:
This idea is valid for all the following tables:
J_1BTXIC3 – ICMS
J_1BTXIP3 – IPI
J_1BTXISS – ISS
J_1BTXPIS – PIS
J_1BTXST3 – ST
J_1BTXWITH – WHT
That means, if you have the check box activated to the taxes above, you will have to create one entry to each tax group in this table assigning the table name to the tax group and the correct condition table (349, 346, 382 and so on).
Migrate Tax Groups in Access Sequences
Now it is time to Migrate the Tax groups that you created into the access sequences.
Using the method of Tax Calculating via condition based (CBT), every time a new tax group is created, it must be added in a certain access sequence, automatically by the system through the transaction J1BTAX. The same should occur whenever changes are performed in the tax groups, or even it is deleted.
Go back to J1BTAX main screen and reach the menu: Condition Setup – Migration – Tax Groups in Access Sequences
On the program selection screen, you enter the tax group that you want to include in the update. You can simulate the results of the program by setting the Simulate Only indicator. This is extremely important, since the program makes cross-client changes to your data.
Additionally, you need to specify what type of conversion is to take place:
a. Update access sequences – if you want to update existing steps in the access sequences
b. Insert into the access sequences – if you want to include new steps in the access sequences after creating a new tax group
c. Delete from access sequences – if you want to delete existing steps from the access sequences
If you are creating all groups at once, it is easier select the range from 10 to 89 and you may want simulate first, just to make sure that there are no errors.
If it is all green, that means can run without the “simulate” check box active and the tax groups will be added to the access sequences:
You can use the report J_1B_EXT_ACC_SEQ to automatically update access sequences after you have created or changed tax groups for dynamic exceptions. You need to be authorized for cross-client Customizing if you want to modify the access sequences. It is important that you ensure that tax groups are not customized differently in different clients because with each conversion to access sequences, the previous Customizing settings will be overwritten.
The should looks something like this:
The result of the run above, is that all access sequences will be updated automatically, check for example below where the different tax groups were added to one specific access sequence:
Migrate Tax Tables to Conditions
Now you have to migrate the tax tables to conditions to create the condition records. Go back to J1BTAX main screen and reach the menu Condition Setup – Migration – Tax Tables to Conditions. This is the execution of the program J_1B_MIGRATE_TAX_RATES.
First you have to select the application:
– TX (Material Management)
– V (Sales and Distribution)
Then you will have to select the the Conversion Options:
– Overwrite existing condition records
– Ask in case of existing condition records
– Never overwrite existing condition records
And then finally select the tables, one by one to run the migration.
Note that, the tax groups that you selected as MM will be the only ones that you will be able to run to the application TX and the tax groups that you selected as SD, you will have to run to the application V. the ones that are general, or the tables that has no Tax Group, you will run for both (some exceptions apply).
The result will be something closer to the screenshot below:
Leandro da Pia Nascimento
It's not calculating ICS3 tax type for tax group ICST in nota fiscal.Please help
the ICS3 deals with ICMS-ST. Please, check the blog SAPBR and go to Search, type ICMS-ST and you will find a nice configuration guide. Review all the steps and make sure the configuration is ok. You should have ICS3 calculating after that.
Your post is excellent.
I have a specific business case (in MIRO) for my brasilian customer regarding the Nota Fiscal.
Please, may I share it with you? Maybe, it is possible to manage it through Tax Exceptions.
Thank you for your feedback.
Leandro, thank you for your post. If there were an algorithm to find out the optimal tax groups based on historical data from j_1bnfdoc, j_1bnflin and j_1bnfstx, how would it look like? Regards, Victor Soares