DEV Community

Alexander Nitrovich
Alexander Nitrovich

Posted on • Originally published at blog.eurovalidate.com

Validate EU VAT in TypeScript

Validating EU VAT numbers is crucial for businesses involved in cross-border transactions within Europe. By implementing a reliable validation method using TypeScript, you ensure compliance and smooth operation for your SaaS or fintech products. This guide breaks down how to integrate VAT validation using TypeScript, with real-world examples and best practices. Not using TypeScript yet? This guide shows its power in ensuring code reliability through strict type-checking.

Introduction

Incorporating EU VAT validation is an indispensable part of any enterprise application dealing with European customers. SaaS and fintech platforms, among others, must handle VAT checks to maintain compliance and prevent fraud. TypeScript adds a layer of security by ensuring type accuracy, reducing bugs, and facilitating maintainable code—a must-have for such critical functionalities.

Understanding EU VAT Requirements

What is EU VAT? Value Added Tax (VAT) in the EU is a consumption tax applied to goods and services bought and sold. Cross-border service providers face challenges, such as verifying VAT numbers to avoid erroneous tax calculations and legal issues. Typical hurdles include varying VAT formats across countries and understanding the nuances of VAT registration requirements.

Setting Up Your Environment

To begin, ensure you're using a recent version of TypeScript and Node.js:

  • TypeScript: 4.x or higher is recommended.
  • Node.js: Version 12 or higher.

Install the necessary libraries to aid VAT validation:

npm install typescript @eurovalidate/sdk axios jest
Enter fullscreen mode Exit fullscreen mode

Step-by-Step Implementation

Implementing the VAT Validation Function

TypeScript can handle regex checks for VAT number formats. Here's a basic function:

function isValidEuVat(vat: string): boolean {
  const euVatRegex = /^[A-Z]{2}[A-Z0-9]{8,12}$/;
  return euVatRegex.test(vat);
}
Enter fullscreen mode Exit fullscreen mode

To verify VAT numbers via the EuroValidate API, integrate the following Node.js example:

import axios from 'axios';

async function checkVatWithApi(vat: string): Promise<any> {
  try {
    const response = await axios.get(`https://api.eurovalidate.com/v1/vat/${vat}`);
    return response.data;
  } catch (error) {
    console.error('API error:', error);
    throw new Error('VAT validation failed');
  }
}
Enter fullscreen mode Exit fullscreen mode

Handling API Responses and Errors

The EuroValidate API provides detailed responses:

  • Valid VAT Example: Request GET /v1/vat/NL820646660B01 Response:
  {
    "vat_number": "NL820646660B01",
    "country_code": "NL",
    "status": "VALID",
    "company_name": "Test Company",
    "company_address": "Test Street, 1234 AB, Amsterdam",
    "request_id": "req_123456789",
    "meta": {
      "confidence": 95,
      "source": "VIES",
      "cached": false,
      "response_time_ms": 150
    }
  }
Enter fullscreen mode Exit fullscreen mode
  • Invalid VAT Example: Request GET /v1/vat/FR123456 Response:
  {
    "vat_number": "FR123456",
    "country_code": "FR",
    "status": "INVALID",
    "meta": {
      "cached": true,
      "response_time_ms": 140
    }
  }
Enter fullscreen mode Exit fullscreen mode

Best practices involve implementing error handling to manage API failures gracefully and logging for audit trails.

Testing Your Implementation

Use Jest for unit testing:

describe('isValidEuVat', () => {
  it('should return true for a valid VAT number', () => {
    expect(isValidEuVat('NL820646660B01')).toBe(true);
  });
  it('should return false for an invalid VAT number', () => {
    expect(isValidEuVat('123456')).toBe(false);
  });
});
Enter fullscreen mode Exit fullscreen mode

Integration tests should simulate diverse VAT scenarios to ensure reliability.

Advanced Use Cases and Customization

Complex applications like billing modules can benefit from customizing VAT validation logic based on business-specific rules. EuroValidate's comprehensive API documentation, found here, empowers developers to extend functionality further.

Conclusion and Best Practices

By leveraging TypeScript and a dedicated VAT validation API, businesses can significantly reduce errors in tax compliance workflows. Always optimize code for production, minimize API call latencies, and ensure thorough testing to avoid pitfalls.

For a head start, sign up for a free API key and integrate VAT validation into your project today. Our developer success team is ready to assist with demos and personalized support.

Harness the full power of TypeScript and the EuroValidate API to streamline your VAT validation processes effectively in any TypeScript project.

Top comments (0)