UAE (AE) Implementation Examples
Complete UAE PINT AE-compliant examples using the canonical GETS structure. Includes both the final GETS JSON format and Java SDK payload examples. All examples provide 100% field coverage for UAE requirements with FTA compliance.
UAE-Specific Features
Compliance Standards
- Government System: FTA (Federal Tax Authority)
- Portal: e-Tax portal / PINT AE
- VAT Format: 15-digit TRN (e.g.,
100000000000003) - TIN Format: 10-digit TIN (e.g.,
1000000000) - Tax Scheme: VAT, TIN support
Required Fields
- TRN (Tax Registration Number) - 15 digits starting with
1, ending with03 - TIN for non-VAT registered sellers
- Peppol ID with scheme
0235 - Invoice type codes (380, 381, 383, 386, 388, 389, 480)
- VAT category codes (S, Z, E, O, AE, N)
- Transaction type bitmask for special scenarios
- Emirate subdivision codes (AUH, AJM, DXB, FUJ, RAK, SHJ, UAQ)
Java SDK Examples
Complete B2B Tax Invoice Example
Complete working example demonstrating UAE-specific TAX_INVOICE functionality with PINT AE compliance.
package io.complyance.test;
import io.complyance.sdk.*;
import io.complyance.sdk.Source;
import io.complyance.sdk.SourceType;
import io.complyance.sdk.SDKConfig;
import io.complyance.sdk.Environment;
import io.complyance.sdk.GETSUnifySDK;
import io.complyance.sdk.Country;
import io.complyance.sdk.Operation;
import io.complyance.sdk.Mode;
import io.complyance.sdk.Purpose;
import io.complyance.sdk.UnifyResponse;
import io.complyance.sdk.SDKException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.ArrayList;
/**
* UAE Tax Invoice Test - Demonstrates UAE-specific TAX_INVOICE functionality
*
* This test class demonstrates:
* - UAE (AE) country-specific compliance
* - TAX_INVOICE document type mapping
* - B2B transaction processing with PINT AE
* - UAE-specific field mappings
* - Comprehensive payload with UAE invoice data
*/
public class UAETaxInvoiceTest {
public static void main(String[] args) {
System.out.println("=== š¦šŖ UAE Tax Invoice Test ===");
System.out.println("Testing UAE-specific TAX_INVOICE functionality");
System.out.println("Demonstrates B2B mapping, AE compliance, and comprehensive payload");
try {
// Configure SDK
configureSDK();
// Create comprehensive UAE test payload
Map<String, Object> payload = createUAETestPayload();
System.out.println("ā
UAE test payload created");
// Test UAE TAX_INVOICE flow
testUAETaxInvoiceFlow(payload);
System.out.println("\nš UAE Tax Invoice test completed successfully!");
} catch (Exception e) {
System.err.println("ā Unexpected error: " + e.getMessage());
e.printStackTrace();
}
}
/**
* Configure the SDK for UAE testing
*/
private static void configureSDK() {
Source source = new Source("uae-source-system", "1.0", SourceType.FIRST_PARTY);
SDKConfig config = new SDKConfig("ak_368d073d3de1f19041612fe6cdcf",
Environment.SANDBOX, Arrays.asList(source));
GETSUnifySDK.configure(config);
System.out.println("ā
SDK Configured for UAE Testing");
}
/**
* Creates UAE test payload with PINT AE compliance
*/
private static Map<String, Object> createUAETestPayload() {
Map<String, Object> payload = new HashMap<>();
// Invoice Data - Maps to GETS header fields
Map<String, Object> invoiceData = new HashMap<>();
invoiceData.put("document_number", "AE-INV-2026-001");
invoiceData.put("document_type", "tax_invoice");
invoiceData.put("invoice_type_code", "380");
invoiceData.put("invoice_date", "2026-02-18");
invoiceData.put("invoice_time", "14:30:00+04:00");
invoiceData.put("currency_code", "AED");
invoiceData.put("tax_currency_code", "AED");
invoiceData.put("due_date", "2026-03-20");
payload.put("invoice_data", invoiceData);
// Seller Info - UAE company with TRN
Map<String, Object> sellerInfo = new HashMap<>();
sellerInfo.put("company_name", "ABC Trading LLC");
sellerInfo.put("trade_name", "ABC Trading");
sellerInfo.put("vat_registration", "100000000000003");
sellerInfo.put("tax_id_type", "TRN");
sellerInfo.put("tin_number", "1000000000");
sellerInfo.put("registration_type", "TL");
sellerInfo.put("registration_number", "CN-1234567");
sellerInfo.put("peppol_id", "0235:1000000003");
sellerInfo.put("email", "contact@abctrading.ae");
sellerInfo.put("phone", "+971-4-1234567");
sellerInfo.put("street_address", "Sheikh Zayed Road");
sellerInfo.put("building_number", "123");
sellerInfo.put("city_name", "Dubai");
sellerInfo.put("state_province", "DUBAI");
sellerInfo.put("postal_code", "00000");
sellerInfo.put("country_code", "AE");
sellerInfo.put("emirate", "DXB");
payload.put("seller_info", sellerInfo);
// Buyer Info
Map<String, Object> buyerInfo = new HashMap<>();
buyerInfo.put("company_name", "XYZ Corporation LLC");
buyerInfo.put("vat_registration", "100000000000003");
buyerInfo.put("tax_id_type", "TRN");
buyerInfo.put("buyer_vat", "100000000000003");
buyerInfo.put("peppol_id", "0235:1000000003");
buyerInfo.put("email", "purchasing@xyzcorp.ae");
buyerInfo.put("phone", "+971-2-9876543");
buyerInfo.put("street_address", "Al Wasl Road");
buyerInfo.put("building_number", "456");
buyerInfo.put("city_name", "Dubai");
buyerInfo.put("state_province", "DUBAI");
buyerInfo.put("postal_code", "00000");
buyerInfo.put("country_code", "AE");
buyerInfo.put("emirate", "DXB");
payload.put("buyer_info", buyerInfo);
// Line Items
List<Map<String, Object>> lineItems = new ArrayList<>();
Map<String, Object> item1 = new HashMap<>();
item1.put("item_id", "1");
item1.put("item_name", "Office Equipment");
item1.put("description", "Professional office equipment package");
item1.put("quantity", 10);
item1.put("unit_code", "EA");
item1.put("unit_price", 500.00);
item1.put("tax_rate", 5);
item1.put("tax_category", "S");
item1.put("tax_amount", 250.00);
item1.put("line_extension_amount", 5000.00);
item1.put("total_amount", 5250.00);
lineItems.add(item1);
payload.put("line_items", lineItems);
// Totals
Map<String, Object> totals = new HashMap<>();
totals.put("line_extension_amount", 5000.00);
totals.put("tax_exclusive_amount", 5000.00);
totals.put("total_tax_amount", 250.00);
totals.put("total_amount", 5250.00);
totals.put("amount_due", 5250.00);
payload.put("totals", totals);
// Payment
Map<String, Object> payment = new HashMap<>();
payment.put("payment_means_code", "30");
payment.put("payment_means_text", "Credit Transfer");
payment.put("payee_account_id", "AE123456789012345678901");
payment.put("payment_terms", "Net 30 days");
payload.put("payment", payment);
return payload;
}
/**
* Test UAE tax invoice flow
*/
private static void testUAETaxInvoiceFlow(Map<String, Object> payload) {
GetsDocumentType documentType = GetsDocumentType.builder()
.base(BASE.TAX_INVOICE)
.build();
UnifyResponse response = GETSUnifySDK.pushToUnify(
"uae-source-system",
"1.0",
documentType,
Country.AE,
Operation.SINGLE,
Mode.DOCUMENTS,
Purpose.INVOICING,
payload
);
if (response != null && "success".equalsIgnoreCase(response.getStatus())) {
System.out.println("ā
UAE Invoice submitted successfully!");
if (response.getData() != null && response.getData().getSubmission() != null) {
System.out.println("š Submission ID: " +
response.getData().getSubmission().getSubmissionId());
}
} else {
System.out.println("ā ļø Response: " + response);
}
}
}Key UAE-Specific Features
VAT Category Codes (UNCL5305 AE-restricted)
| Code | Name | Tax Rate | When to Use |
|---|---|---|---|
S | Standard rate | 5% | Default taxable supplies |
Z | Zero rated | 0% | Exports and specific zero-rated supplies |
E | Exempt from tax | N/A | Financial services, residential property, bare land |
O | Not subject to tax | N/A | Outside scope supplies |
AE | VAT Reverse Charge | Varies | VAT levied from invoicee |
N | Standard rate additional VAT | Non-zero | Profit margin scheme |
TRN and TIN Format
- TRN: 15 alphanumeric, starts with
1, ends with03(e.g.,100000000000003) - TIN: 10 numeric, starts with
1(e.g.,1000000000) - Peppol ID: Scheme
0235+ TIN value (e.g.,0235:1000000003)
Invoice Type Codes
| API Value | UNCL1001 | Name |
|---|---|---|
tax_invoice | 380 | Commercial invoice |
credit_note | 381 | Credit note |
debit_note | 383 | Debit note |
386 | 386 | Self-billed invoice |
388 | 388 | Self-billed credit note |
Emirate Subdivision Codes
| Code | Emirate |
|---|---|
AUH | Abu Dhabi |
AJM | Ajman |
DXB | Dubai |
FUJ | Fujairah |
RAK | Ras al-Khaimah |
SHJ | Sharjah |
UAQ | Umm al-Quwain |
Transaction Type Bitmask (BTAE-02)
| Position | 1 Means | Conditional Requirements |
|---|---|---|
| 1 | Free Trade Zone supply | Beneficiary ID required |
| 2 | Deemed supply | |
| 3 | Profit Margin Scheme | Must use VAT category N |
| 4 | Summary invoice | Invoicing period required |
| 5 | Continuous supply | |
| 6 | Agent billing | Principal ID required |
| 7 | E-commerce | Delivery address required |
| 8 | Exports | Delivery address required; country must not be AE |
Implementation Guide
How to use these examples in your application.
1. Choose the Right Document Type
For UAE, use these base document types:
| Document Type | Base | Description |
|---|---|---|
| Tax Invoice | TAX_INVOICE | Standard B2B/B2G invoice |
| Credit Note | CREDIT_NOTE | Invoice corrections/returns |
| Debit Note | DEBIT_NOTE | Additional charges |
2. Submit via Java SDK
// Configure SDK
Source source = new Source("your-source", "1.0", SourceType.FIRST_PARTY);
SDKConfig config = new SDKConfig("ak_your_api_key", Environment.PRODUCTION, Arrays.asList(source));
GETSUnifySDK.configure(config);
// Build document type
GetsDocumentType documentType = GetsDocumentType.builder()
.base(BASE.TAX_INVOICE)
.build();
// Submit invoice
UnifyResponse response = GETSUnifySDK.pushToUnify(
"your-source",
"1.0",
documentType,
Country.AE,
Operation.SINGLE,
Mode.DOCUMENTS,
Purpose.INVOICING,
payload
);3. Map Your Data to GETS Fields
See the UAE Field Mapping for detailed field paths and requirements.
UAE Compliance Checklist
- TRN is 15 digits starting with
1and ending with03 - Invoice type code is valid (380, 381, 383, 386, 388, 389, 480)
- VAT category codes are correct (S, Z, E, O, AE, N)
- Transaction type bitmask is 8 characters (e.g.,
00000000) - Seller and buyer addresses include valid emirate codes
- For exports: delivery address country is not
AE - For RCM: buyer VAT ID provided and RCM goods type specified
- Currency is AED or exchange rate is provided for foreign currency
Next Steps
UAE PINT AE ā Enum, Constant and Dropdown Reference
Source of truth for codelist values required by UAE e-invoicing.
- Specification basis: UAE PINT AE Specification (2025-Q2), UAE Electronic Invoicing Guidelines v1.0 (MoF)
- Last updated: 2026-04-24
Open Engineering Question
| # | Question | Impact |
|---|---|---|
| 1 | Credit note reason codes mismatch: validator constants use numeric 1-7, but Schematron validates DL8.61.1.A/B/C/D/E and VD. Confirm mapping before Peppol submission. | Credit notes may fail government/Peppol validation |
1) VAT Category Codes
Standard: UNCL5305 (AE-restricted subset)
| Code | Name | Tax Rate | When to Use | Rules |
|---|---|---|---|---|
S | Standard rate | 5% | Default taxable supplies | Rate must be exactly 5.00% (IBR-190-AE) |
Z | Zero rated | 0% | Exports and specific zero-rated supplies | Rate must be 0; line VAT amount must be 0 |
E | Exempt from tax | N/A | Financial services, residential property, bare land, local transport | Rate 0; exemption reason required; line VAT amount must not be provided; VAT breakdown rate must be omitted (IBR-121-AE) |
O | Not subject to tax | N/A | Outside scope supplies | Rate must not be provided; line VAT amount must not be provided |
AE | VAT Reverse Charge | Varies | VAT levied from invoicee | Breakdown tax amount 0; buyer VAT ID required (IBR-103-AE); RCM goods type required (IBR-006-AE) |
N | Standard rate additional VAT | Non-zero | Profit margin scheme | Rate must not be zero; doc-level charges/allowances cannot use this code |
2) Tax Exemption Reason Codes
Standard: AE-Exempt (UAE specific, not VATEX-EU)
| Code | Description | Legal Reference |
|---|---|---|
DL8.46.1 | Certain financial services | UAE VAT Decree-Law Article 46(1) |
DL8.46.2 | Supply of residential units (lease or sale) | UAE VAT Decree-Law Article 46(2) |
DL8.46.3 | Bare land | UAE VAT Decree-Law Article 46(3) |
DL8.46.4 | Local passenger transport | UAE VAT Decree-Law Article 46(4) |
Usage: Mandatory when VAT category = E (IBR-167/168/169-AE).
3) Reverse Charge Mechanism (RCM) Goods Type
Standard: AE-GoodsType
| Code | Description | Legal Reference |
|---|---|---|
DL8.48.8.2 | Electronic Devices | Decree-Law Article 48(8)(2) |
DL8.48.8.1 | Gold and Diamonds | Decree-Law Article 48(8)(1) |
DL8.48.3.1 | Crude or refined oil | Decree-Law Article 48(3)(1) |
DL8.48.3.2 | Unprocessed or processed natural gas | Decree-Law Article 48(3)(2) |
DL8.48.3.3 | Pure hydrocarbons | Decree-Law Article 48(3)(3) |
Usage: Mandatory for invoice lines with VAT category AE (IBR-006-AE, IBR-166-AE).
4) Invoice Type Codes
Standard: UNCL1001 (AE-restricted subset)
API accepts text aliases as primary input; system normalizes to UNCL1001 internally.
Invoice types
| API Value | UNCL1001 | Name | Rules |
|---|---|---|---|
tax_invoice | 380 | Commercial invoice | Cannot have only E/O VAT categories (IBR-151-AE) |
| (no alias) | 480 | Invoice out of scope of tax | Must use only E/O/Z; no tax details or party tax registrations (IBR-122-AE) |
Credit note types
| API Value | UNCL1001 | Name |
|---|---|---|
credit_note | 381 | Credit note |
| (no alias) | 81 | Credit note ā out-of-scope transactions |
Debit note
| API Value | UNCL1001 | Name |
|---|---|---|
debit_note | 383 | Debit note |
Self-billing types
| UNCL1001 | Name |
|---|---|
386 | Self-billed invoice |
388 | Self-billed credit note |
389 | Self-billed debit note |
5) Credit Note Reason Codes
Standard: AE-CreditReason
| Code | Description |
|---|---|
DL8.61.1.A | Supply was cancelled |
DL8.61.1.B | Tax treatment changed due to nature change |
DL8.61.1.C | Previously agreed consideration altered |
DL8.61.1.D | Recipient returned goods/services in full or part |
DL8.61.1.E | Tax charged/treatment applied in error |
VD | Volume Discount |
Usage:
- Cardinality is
0..1(BTAE-03), mandatory via IBR-158-AE. - If code =
VD, preceding invoice reference is not required. - For other codes, preceding invoice reference is required (IBR-055-AE).
6) Payment Means Codes
Standard: UNCL4461 (AE-restricted subset)
API accepts enum strings; conversion to UNCL4461 is internal. Default: CREDIT_TRANSFER (30).
| API Enum Value | UNCL4461 | Name | Notes |
|---|---|---|---|
IN_CASH | 10 | In cash | |
CHEQUE | 20 | Cheque | |
BANKERS_DRAFT | 21 | Banker's draft | |
CREDIT_TRANSFER | 30 | Credit transfer | Account identifier required (IBR-192-AE) |
DIRECT_DEBIT | 49 | Direct debit | |
CREDIT or CREDIT_CARD | 54 | Credit card | Both aliases supported |
DEBIT or DEBIT_CARD | 55 | Debit card | Both aliases supported |
ONLINE_PAYMENT_SERVICE | 68 | Online payment service |
7) Transaction Type (8-bit bitmask)
Standard: AE-TransType, field BTAE-02
| Position | 1 Means | Conditional Requirements |
|---|---|---|
| 1 | Free Trade Zone supply | Beneficiary ID required (IBR-007-AE) |
| 2 | Deemed supply (no consideration) | |
| 3 | Profit Margin Scheme | Must use VAT category N (IBR-116-AE) |
| 4 | Summary invoice | Invoicing period required (IBR-138-AE) |
| 5 | Continuous supply | |
| 6 | Agent billing | Principal ID required (IBR-137-AE) |
| 7 | E-commerce | Delivery address required (IBR-142-AE) |
| 8 | Exports | Delivery address required; country must not be AE (IBR-152-AE) |
Format: 1ā8 binary characters (IBR-154-AE). Recommended: always send all 8 (example 00000000, 10000001).
8) Item Type Codes
Standard: AE-ItemType
| Code | Description | Classification Required |
|---|---|---|
G | Goods | HS code required (IBR-184-AE) |
S | Services | SAC code required (IBR-185-AE) |
B | Both goods and services | Both HS and SAC required (IBR-186-AE) |
9) Billing Frequency Codes
Standard: AE-FreqBill
API accepts enum values; conversion to PINT codes is internal.
| API Enum Value | PINT Code | Description |
|---|---|---|
DAILY | DLY | Daily |
WEEKLY | WKY | Weekly |
ONCE_IN_15_DAYS | Q15 | Once in 15 days |
MONTHLY | MTH | Monthly |
ONCE_IN_45_DAYS | Q45 | Once in 45 days |
ONCE_IN_60_DAYS | Q60 | Once in 60 days |
QUARTERLY | QTR | Quarterly |
HALF_YEARLY | HYR | Half-Yearly |
YEARLY | YRL | Yearly |
OTHERS | OTH | Others (invoice note required, IBR-160-AE) |
10) Emirate Subdivision Codes
Standard: PINT AE specific (not ISO 3166-2:AE)
| Code | Emirate |
|---|---|
AUH | Abu Dhabi |
AJM | Ajman |
DXB | Dubai |
FUJ | Fujairah |
RAK | Ras al-Khaimah |
SHJ | Sharjah |
UAQ | Umm al-Quwain |
Usage: Mandatory for seller and buyer addresses (IBR-143/144-AE). API accepts names and legacy ISO-style values, normalizes internally.
11) Allowance Reason Codes
Standard: UNCL5189 (Peppol subset, 19 codes)
41, 42, 60, 62, 63, 64, 65, 66, 67, 68, 70, 71, 88, 95, 100, 102, 103, 104, 105
12) Charge Reason Codes
Standard: UNCL7161 (Peppol full list)
Common examples: AA, AAA, ABK, ABL, ACF, ACS, ADE, AEO, AEV, AEW, CG, DL, FC, FI, HD, NAA, PC, SH, ZZZ
13) MIME Codes for Attachments
Standard: IANAMT (AE subset includes application/xml)
application/pdf, application/xml, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.oasis.opendocument.spreadsheet, image/png, image/jpeg, text/csv
14) VAT Date Codes
Standard: UNCL2005 subset
| Code | Description |
|---|---|
3 | Invoice document issue date |
35 | Delivery date/time actual |
432 | Paid to date |
15) Tax Scheme IDs
| Code | Usage | Field Context |
|---|---|---|
VAT | Default tax scheme; seller provides VAT identifier (TRN) in IBT-031 | Seller tax scheme, buyer tax scheme, VAT breakdown |
!VAT | Seller provides TIN in IBT-032 instead of VAT identifier | Seller tax scheme only (never buyer or VAT breakdown) |
16) Currency Rules
- Invoice currency: any valid ISO 4217 code
- Tax accounting currency (IBT-006): must be
AEDwhen provided (IBR-140-AE) - If invoice currency is not AED, exchange rate (BTAE-04) is required (IBR-159-AE)
- Exchange rate: max 6 decimal places
Common UAE trade currencies: AED, USD, EUR, GBP, SAR, INR, CNY
17) TRN and TIN Format Rules
TRN
- Length: 15 alphanumeric
- Must start with
1and end with03 - Example:
100000000000003 - Rule: IBR-132-AE
TIN
- Length: 10 numeric
- Must start with
1 - Example:
1000000000 - Rule: IBR-148-AE
Peppol Participant ID
- Scheme:
0235 - Peppol notation:
0235:XXXXXXXXXX(TIN value) - UBL serialization separates
schemeIDand value
18) Identifier Scheme Codes
ICD/EAS
| Code | Name | Usage |
|---|---|---|
0235 | UAE Tax Identification Number | Used as ICD and EAS |
Legal registration types
| Code | Description | Notes |
|---|---|---|
TL | Commercial/Trade License | Standard business registration |
EID | Emirates ID | Personal identification |
PAS | Passport | Issuing country required (IBR-012/013-AE) |
CD | Cabinet Decision | Government entities |
19) Specification Identifiers
| Field | Value |
|---|---|
| CustomizationID (Invoice) | starts with urn:peppol:pint:billing-1@ae-1 |
| CustomizationID (Self-billing) | starts with urn:peppol:pint:selfbilling-1@ae-1 |
| ProfileID (Invoice) | urn:peppol:bis:billing |
| ProfileID (Self-billing) | urn:peppol:bis:selfbilling |
20) Incoterms
Standard: ICC Incoterms 2020
EXW, FCA, CPT, CIP, DAP, DPU, DDP, FAS, FOB, CFR, CIF
21) Predefined Endpoint IDs
| Endpoint ID |
|---|
9900000097 |
9900000098 |
9900000099 |
Use UAE predefined endpoints where applicable for recipient routing in integration flows.