Skip to content

Commit

Permalink
Initial Arab Emirates regime adjustments
Browse files Browse the repository at this point in the history
  • Loading branch information
richifernandez committed Nov 11, 2024
1 parent a4c5741 commit e13904b
Show file tree
Hide file tree
Showing 6 changed files with 122 additions and 200 deletions.
37 changes: 18 additions & 19 deletions regimes/ae/README.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,41 @@
# United Arab Emirates (AE) Tax Regime

This document provides an overview of the tax regime in the United Arab Emirates. The UAE tax regime primarily involves two types of indirect taxes: **Value-Added Tax (VAT)** and **Excise Tax**.
This document provides an overview of the tax regime in the United Arab Emirates.

## Types of Indirect Taxes in the UAE

1. **Value-Added Tax (VAT)**: A general tax applied to most goods and services at a rate of 5%.
2. **Excise Tax**: Is a form of indirect tax applied to specific categories of products that are considered harmful to health or the environment, such as tobacco and sugary drinks.

### 1. Value-Added Tax (VAT)
## Value-Added Tax (VAT)

The UAE VAT system categorizes goods and services into three main VAT rates:

- **Standard Rate (5%)**: Applies to most goods and services in the UAE.
- **Zero Rate (0%)**: Applies to certain essential goods, exports, and specific services.
- **Exempt**: Certain types of goods and services are exempt from VAT, including some financial services or residential real estate.

Businesses required to charge VAT must register with the UAE Federal Tax Authority to get the Tax Registration Number (TRN). Registration can be completed online via the [VAT registration portal](https://tax.gov.ae/en/services/vat.registration.aspx).
Businesses required to charge VAT must register with the UAE Federal Tax Authority to obtain a Tax Registration Number (TRN). Registration can be completed online via the [VAT registration portal](https://tax.gov.ae/en/services/vat.registration.aspx).

## VAT Registration Requirements

Businesses in the UAE must evaluate their eligibility for VAT registration based on their revenue and expenses. The registration requirements are as follows:

- **Mandatory Registration**: Businesses are required to register for VAT if the total value of taxable supplies and imports exceeds **AED 375,000** in a 12-month period.
- **Voluntary Registration**: Businesses may choose to register voluntarily if the total value of taxable supplies and imports, or taxable expenses, exceeds **AED 187,500** within a 12-month period.

The algorithm to validate the TRN number was not located. Validation must be conducted directly on the official government website.
**Note:** Businesses below the voluntary registration threshold are not permitted to register for VAT and, therefore, will issue invoices without a TRN.

### 2. Excise Tax
For more information, visit the ([Federal Tax Authority website](https://tax.gov.ae/en/taxes/Vat/vat.topics/registration.for.vat.aspx))

Excise Tax is a form of indirect tax on certain goods considered harmful to consumer health or the environment. The following products are subject to Excise Tax in the UAE:
### TRN Validation

- **Tobacco products** (including vapes and vape liquids): 100%
- **Sugary drinks**: 50%
- **Energy drinks**: 100%
- **Carbonated drinks**: 50%
Currently, no checksum method is available for validating the TRN. Therefore, verification must be performed directly through the official UAE government website.

#### Excise Tax Registration
### Alcohol Sales Tax

Businesses that intend to sell goods subject to Excise Tax must register with the UAE Federal Tax Authority. Registration can be completed online via the [official UAE tax authority website](https://tax.gov.ae/en/taxes/excise.tax/excise.tax.topics/excise.tax.registration.aspx).
In Dubai, a **30% sales tax** on alcohol previously existed but has since been abolished. Some sources suggest that a similar tax persists in Abu Dhabi, but without official confirmation, this has not been included in the UAE tax regime.

## VAT Invoicing Requirements

In the UAE, businesses must issue VAT-compliant invoices. There are two types of VAT invoices. The standard and the simplified invoice:
In the UAE, businesses must issue VAT-compliant invoices. There are two types of VAT invoices: the standard and the simplified invoice.

**Simplified VAT Invoice**: Allowed in the following cases:

- When the recipient of goods or services is **not VAT registered**.
- When the recipient of goods or services **is VAT registered**, and the transaction value does not exceed **AED 10,000** .
- When the recipient of goods or services **is VAT registered**, and the transaction value does not exceed **AED 10,000**.
20 changes: 3 additions & 17 deletions regimes/ae/ae.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,7 @@ func init() {
tax.RegisterRegimeDef(New())
}

// Local tax category definition which is not considered standard.
const (
TaxCategoryExcise cbc.Code = "EXCISE"
)

// Specific tax rate codes.
const (
TaxRateSmokingProducts cbc.Key = "smoking-product"
TaxRateCarbonatedDrinks cbc.Key = "carbonated-drink"
TaxRateEnergyDrinks cbc.Key = "energy-drink"
TaxRateSweetenedDrinks cbc.Key = "sweetened-drink"
)

// New provides the tax region definition for UAE.
// New provides the tax region definition for AE.
func New() *tax.RegimeDef {
return &tax.RegimeDef{
Country: "AE",
Expand Down Expand Up @@ -57,11 +44,10 @@ func New() *tax.RegimeDef {
}
}

// Validate checks the document type and determines if it can be validated.
// Validate function assesses the document type to determine if validation is required.
// Note that, under the AE tax regime, validation of the supplier's tax ID is not necessary if it does not meet the specified threshold (refer to README section for more details).
func Validate(doc interface{}) error {
switch obj := doc.(type) {
case *bill.Invoice:
return validateInvoice(obj)
case *tax.Identity:
return validateTaxIdentity(obj)
}
Expand Down
32 changes: 0 additions & 32 deletions regimes/ae/invoices.go

This file was deleted.

67 changes: 0 additions & 67 deletions regimes/ae/invoices_test.go

This file was deleted.

101 changes: 101 additions & 0 deletions regimes/ae/scenarios_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package ae_test

import (
"testing"

"github.com/invopop/gobl/bill"
"github.com/invopop/gobl/cal"
"github.com/invopop/gobl/num"
"github.com/invopop/gobl/org"
"github.com/invopop/gobl/tax"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func testInvoiceReverseCharge(t *testing.T) *bill.Invoice {
t.Helper()
return &bill.Invoice{
Code: "123TEST",
Currency: "AED",
Supplier: &org.Party{
Name: "Test Supplier",
TaxID: &tax.Identity{
Country: "AE",
Code: "123456789012345",
},
},
Customer: &org.Party{
Name: "Test Customer",
TaxID: &tax.Identity{
Country: "AE",
Code: "123456789012346",
},
},
IssueDate: cal.MakeDate(2023, 1, 15),
Tags: tax.WithTags(tax.TagReverseCharge),
Lines: []*bill.Line{
{
Quantity: num.MakeAmount(5, 0),
Item: &org.Item{
Name: "Service Item",
Price: num.MakeAmount(5000, 2),
},
Taxes: tax.Set{
{
Category: "VAT",
Rate: "standard",
},
},
},
},
}
}

func testInvoiceSimplified(t *testing.T) *bill.Invoice {
t.Helper()
return &bill.Invoice{
Code: "123TEST",
Currency: "AED",
Supplier: &org.Party{
Name: "Test Supplier",
TaxID: &tax.Identity{
Country: "AE",
Code: "123456789012345",
},
},
IssueDate: cal.MakeDate(2023, 1, 15),
Tags: tax.WithTags(tax.TagSimplified),
Lines: []*bill.Line{
{
Quantity: num.MakeAmount(3, 0),
Item: &org.Item{
Name: "Product Item",
Price: num.MakeAmount(2000, 2),
},
Taxes: tax.Set{
{
Category: "VAT",
Rate: "standard",
},
},
},
},
}
}

func TestInvoiceScenarios(t *testing.T) {
i := testInvoiceReverseCharge(t)
require.NoError(t, i.Calculate())
require.NoError(t, i.Validate())
assert.Len(t, i.Notes, 1)
assert.Equal(t, i.Notes[0].Src, tax.TagReverseCharge)
assert.Equal(t, i.Notes[0].Text, "Reverse Charge / التحويل العكسي")

i = testInvoiceSimplified(t)
require.NoError(t, i.Calculate())
require.NoError(t, i.Validate())
assert.Len(t, i.Notes, 1)
assert.Equal(t, i.Notes[0].Src, tax.TagSimplified)
assert.Equal(t, i.Notes[0].Text, "Simplified Tax Invoice / فاتورة ضريبية مبسطة")
}
65 changes: 0 additions & 65 deletions regimes/ae/tax_categories.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,69 +77,4 @@ var taxCategories = []*tax.CategoryDef{
},
},
},
//
// Excise Tax
//
{
Code: TaxCategoryExcise,
Retained: false,
Name: i18n.String{
i18n.EN: "Excise Tax",
i18n.AR: "ضريبة السلع الانتقائية",
},
Title: i18n.String{
i18n.EN: "UAE Excise Tax",
i18n.AR: "ضريبة السلع الانتقائية في الإمارات",
},
Rates: []*tax.RateDef{
{
Key: TaxRateSmokingProducts,
Name: i18n.String{
i18n.EN: "Smoking Products Rate",
i18n.AR: "معدل منتجات التدخين",
},
Values: []*tax.RateValueDef{
{
Percent: num.MakePercentage(100, 3),
},
},
},
{
Key: TaxRateCarbonatedDrinks,
Name: i18n.String{
i18n.EN: "Carbonated Drinks Rate",
i18n.AR: "معدل المشروبات الغازية",
},
Values: []*tax.RateValueDef{
{
Percent: num.MakePercentage(50, 3),
},
},
},
{
Key: TaxRateEnergyDrinks,
Name: i18n.String{
i18n.EN: "Energy Drinks Rate",
i18n.AR: "معدل مشروبات الطاقة",
},
Values: []*tax.RateValueDef{
{
Percent: num.MakePercentage(100, 3),
},
},
},
{
Key: TaxRateSweetenedDrinks,
Name: i18n.String{
i18n.EN: "Sweetened Drinks Rate",
i18n.AR: "معدل المشروبات المحلاة",
},
Values: []*tax.RateValueDef{
{
Percent: num.MakePercentage(50, 3),
},
},
},
},
},
}

0 comments on commit e13904b

Please sign in to comment.