What is VAT?
VAT or Value Added Tax is a consumption tax imposed on many European countries.
How does this impact my organization?
If you are a company doing business in country that imposes VAT, this impacts your collection of taxes and payments.
Why validate VATs?
By validating your VAT numbers in your billing system, you increase your data integrity and quality and reduce the number of rebills needed to correct the VAT and reissue a new invoice with the correct VAT. This also means you reduce costs, whether it be processing costs or delivery costs if delivering via postal mail, etc.
How do we validate VAT numbers in our system?
You first need to understand that this means you need to understand web service concepts and how to consume them.
Once that is understood, it is a matter of getting the web service WSDL and plugging the service in where needed in your system.
Steps below will outline what I did to accomplish this task.
Where do I get the web service to validate VAT?
The EU commission web site can change from time to time so I suggest you go to the FAQ here http://ec.europa.eu/taxation_customs/vies/faq.html
search for WSDL, read the disclaimers and any other technical details before proceeding.
Ok, I have the WSDL URL, now what do I do?
1. Go to SE80
2. Select correct package
3. Navigate and expand node for Enterprise Services
4. Right click on Service Consumer and choose Create
5. Under Source, select URL/HTTP Destination
6. Choose continue enter URL for WSDL and choose continue again
7. Enter your package, enter Z in prefix and your transport ID.
8. Choose continue.
9. Choose complete.
10. System now reads WSDL, checks for errors and generates proxy classes, structures, etc.
11. System should create something that looks like this: ZCO_CHECK_VAT_PORT_TYPE.
12. If you see any messages regarding types, go into Internal View and choose methods Check_VAT expand "Importing CHECK_VAT_REQUEST" and then double click on COUNTRY_CODE and VAT_NUMBER and adjust XSD Typ to xsd:string if needed.
13. After you confirm no errors or issues, you can move onto the next steps of creating logical port and creating the function to call and pass data to and from the web service.
Creating Logical Port to allow access to service from within SAP CRM system.
1. in SAP CRM system, enter TCODE SOAMANAGER
2. Your browser should load with the web app to maintain configurations
3. Click on tab for Service Adminstration.
4. Click on Single Service Configuration
5. Change Search by to Consumer Proxy
6. Enter z* in Search Pattern
7. Change Field to Both Names.
8. Click Go
9. After search result is returned, you should see in the list, your newly created VAT proxy.
10. Select your item, should be checkVatPortType
11. Click Apply Selection
12. Click Configurations
13. Click Create Logical Port
14. Enter Logical Port name..something like ZVATLP
15. Enter Description
16. Select radio for Configuration Type to: WSDL Based Configuration
17. Select radio for WSDL Access Settings to Via HTTP Access
18. Enter the URL for WSDL access and click Apply Settings
19. Click on your Logical Port
20. Select Edit
21. Go to Messaging tab
22. Set Message ID Protocol to Suppress ID Transfer
23. Set Metering of Service Calls, Data Transfer Scope to Enhanced Data Transfer and Transfer Protocol to Transfer via SOAP Header if not already set.
24. Click save
25. Your logical port should be now set up and good to go for testing web service.
Testing Web Service
1. Go back into SE80 and locate your newly created Web Service Consumer
2. After double clicking into your web service proxy, click the test button
3. Select Logical Port name that you created in SOAMANAGER
4. Select method name CHECK_VAT
5. Click execute button
6. Now click XML Editor button
7. Locate a VAT number in your system, in table dfkkbptaxnum
8. Enter country string and VAT number string separate in XML elements.
9. Click Execute to run test.
10. If all is well, you should see a pass or fail based on your input.
I suggest you test this manually using the EU's standard web validation application located here: http://ec.europa.eu/taxation_customs/vies/vatRequest.html
This way you can confirm your service results are the same.
Creating the function to pass data to and from the web service
How do I validate our VAT numbers in mass?