United Arab Emirates (UAE) Implementation Examples
Complete FTA (Federal Tax Authority) PINT-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 PINT system integration and multi-language support (Arabic/English).
UAE-Specific Features
Compliance Standards
- Government System: FTA (Federal Tax Authority)
- Portal: PINT (Paperless Invoice Network Technology)
- TRN Format: 15-digit Tax Registration Number
- VAT Rate: 5% standard rate
- Multi-language: Arabic and English support
Required Fields
- TRN (15-digit Tax Registration Number)
- UUID for unique invoice identification
- FTA invoice reference number
- Clearance status tracking
- Submission date and time
- VAT category codes (S, Z, E)
- Exemption reason codes (when applicable)
Java SDK Examples
Complete B2B Tax Invoice Example
Complete working example demonstrating UAE-specific TAX_INVOICE functionality with FTA PINT compliance.
package io.complyance.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import io.complyance.sdk.Country;
import io.complyance.sdk.Environment;
import io.complyance.sdk.GETSUnifySDK;
import io.complyance.sdk.LogicalDocType;
import io.complyance.sdk.Mode;
import io.complyance.sdk.Operation;
import io.complyance.sdk.Purpose;
import io.complyance.sdk.SDKConfig;
import io.complyance.sdk.SDKException;
import io.complyance.sdk.Source;
import io.complyance.sdk.SourceType;
import io.complyance.sdk.UnifyResponse;
/**
* UAE Tax Invoice Test - Demonstrates UAE-specific TAX_INVOICE functionality
*
* This test class demonstrates:
* - UAE (AE) country-specific compliance
* - TAX_INVOICE logical document type mapping
* - B2B transaction processing with FTA PINT
* - UAE-specific field mappings (TRN, UUID, clearance)
* - Comprehensive payload with UAE invoice data
* - Multi-language support (Arabic/English)
* - FTA PINT compliance
*/
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, FTA PINT, and comprehensive payload");
try {
// Configure SDK
configureSDK();
// Create comprehensive UAE test payload
Map<String, Object> payload = createUAETestPayload();
System.out.println("✅ UAE test payload created");
System.out.println(" 📊 Expected GETS fields coverage: 37/37 (100%)");
System.out.println(" 🇦🇪 Expected AE country fields coverage: 8/8 (100%)");
System.out.println(" 💰 Expected AE compliance fields coverage: 5/5 (100%)");
// 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 FTA PINT 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-2024-001");
invoiceData.put("document_type", "tax_invoice");
invoiceData.put("invoice_date", "2024-01-15");
invoiceData.put("invoice_time", "14:30:00Z");
invoiceData.put("currency_code", "AED");
invoiceData.put("tax_currency_code", "AED");
invoiceData.put("due_date", "2024-02-14");
invoiceData.put("order_reference", "PO-2024-5678");
invoiceData.put("exchange_rate", 1.0);
invoiceData.put("line_extension_amount", 10000.00);
invoiceData.put("tax_exclusive_amount", 10000.00);
invoiceData.put("total_tax_amount", 500.00); // 5% VAT
invoiceData.put("total_amount", 10500.00);
invoiceData.put("total_allowances", 0.00);
invoiceData.put("total_charges", 0.00);
invoiceData.put("amount_due", 10500.00);
// FTA PINT specific fields
invoiceData.put("fta_invoice_ref", "FTA-2024-001");
invoiceData.put("uuid", UUID.randomUUID().toString());
invoiceData.put("submission_datetime", "2024-01-15T14:30:00Z");
invoiceData.put("clearance_status", "CLEARED");
payload.put("invoice_data", invoiceData);
// Seller Info - UAE company
Map<String, Object> sellerInfo = new HashMap<>();
sellerInfo.put("seller_name", "Emirates Company LLC");
sellerInfo.put("seller_trade_name", "Emirates Trading");
sellerInfo.put("seller_party_id", "SELLER-AE-001");
sellerInfo.put("trn", "100000000000003"); // 15-digit TRN
sellerInfo.put("vat_number_type", "TRN");
sellerInfo.put("registration_type", "AE:TRN");
sellerInfo.put("seller_email", "contact@emiratescompany.ae");
sellerInfo.put("seller_phone", "+971501234567");
sellerInfo.put("seller_street", "Sheikh Zayed Road");
sellerInfo.put("seller_building", "Emirates Tower");
sellerInfo.put("seller_city", "Dubai");
sellerInfo.put("seller_state", "Dubai");
sellerInfo.put("seller_postal_code", "00000");
sellerInfo.put("seller_country", "AE");
sellerInfo.put("seller_country_name", "United Arab Emirates");
payload.put("seller_info", sellerInfo);
// Buyer Info - UAE customer
Map<String, Object> buyerInfo = new HashMap<>();
buyerInfo.put("buyer_name", "Customer Company LLC");
buyerInfo.put("buyer_party_id", "BUYER-AE-001");
buyerInfo.put("trn", "100000000000004"); // 15-digit TRN
buyerInfo.put("vat_number_type", "TRN");
buyerInfo.put("buyer_email", "accounts@customercompany.ae");
buyerInfo.put("buyer_phone", "+971501234568");
buyerInfo.put("buyer_street", "Al Wasl Road");
buyerInfo.put("buyer_building", "Business Center");
buyerInfo.put("buyer_city", "Dubai");
buyerInfo.put("buyer_state", "Dubai");
buyerInfo.put("buyer_postal_code", "00000");
buyerInfo.put("buyer_country", "AE");
buyerInfo.put("buyer_country_name", "United Arab Emirates");
payload.put("buyer_info", buyerInfo);
// Line Items
List<Map<String, Object>> lineItems = new ArrayList<>();
Map<String, Object> lineItem = new HashMap<>();
lineItem.put("line_id", "1");
lineItem.put("item_name", "Professional Services");
lineItem.put("item_description", "Consulting services for January 2024");
lineItem.put("item_description_ar", "خدمات استشارية لشهر يناير 2024");
lineItem.put("quantity", 100);
lineItem.put("unit_code", "HUR"); // Hours
lineItem.put("unit_price", 100.00);
lineItem.put("line_extension_amount", 10000.00);
lineItem.put("discount_amount", 0.00);
lineItem.put("tax_category", "S"); // Standard rate
lineItem.put("tax_rate", 5.0);
lineItem.put("tax_amount", 500.00);
lineItem.put("total_amount", 10500.00);
lineItems.add(lineItem);
payload.put("line_items", lineItems);
// Tax Breakdown
List<Map<String, Object>> taxBreakdown = new ArrayList<>();
Map<String, Object> taxCategory = new HashMap<>();
taxCategory.put("tax_category_code", "S");
taxCategory.put("tax_category_name", "Standard Rate");
taxCategory.put("tax_rate", 5.0);
taxCategory.put("taxable_amount", 10000.00);
taxCategory.put("tax_amount", 500.00);
taxCategory.put("tax_scheme_id", "VAT");
taxBreakdown.add(taxCategory);
payload.put("tax_breakdown", taxBreakdown);
// Payment Terms
Map<String, Object> paymentTerms = new HashMap<>();
paymentTerms.put("payment_means_code", "30"); // Credit transfer
paymentTerms.put("payment_terms_note", "Payment due within 30 days");
paymentTerms.put("payment_due_date", "2024-02-14");
payload.put("payment_terms", paymentTerms);
// UAE Extensions
Map<String, Object> extensions = new HashMap<>();
Map<String, Object> aeIdentification = new HashMap<>();
aeIdentification.put("ftaInvoiceRef", "FTA-2024-001");
aeIdentification.put("trn", "100000000000003");
aeIdentification.put("uuid", UUID.randomUUID().toString());
aeIdentification.put("submissionDateTime", "2024-01-15T14:30:00Z");
aeIdentification.put("clearanceStatus", "CLEARED");
extensions.put("ae_identification", aeIdentification);
Map<String, Object> aeTax = new HashMap<>();
aeTax.put("vatCategoryCode", "S");
aeTax.put("taxSchemeId", "VAT");
extensions.put("ae_tax", aeTax);
Map<String, Object> aeMultilang = new HashMap<>();
aeMultilang.put("descriptionAr", "فاتورة ضريبية");
aeMultilang.put("languageCode", "en");
extensions.put("ae_multilang", aeMultilang);
payload.put("extensions", extensions);
return payload;
}
/**
* Test the UAE TAX_INVOICE transformation flow
*/
private static void testUAETaxInvoiceFlow(Map<String, Object> payload) throws SDKException {
System.out.println("\n📤 Testing UAE TAX_INVOICE transformation...");
UnifyResponse response = GETSUnifySDK.unify(
payload,
Operation.TRANSFORM,
LogicalDocType.TAX_INVOICE,
Country.AE,
Mode.REAL,
Purpose.INVOICE
);
// Verify response
if (response.isSuccess()) {
System.out.println("✅ Transformation successful");
System.out.println(" 📊 GETS JSON generated");
System.out.println(" 🇦🇪 UAE FTA PINT compliance verified");
System.out.println(" ✓ TRN validated: 100000000000003");
System.out.println(" ✓ UUID: " + response.getData().get("uuid"));
System.out.println(" ✓ Clearance status: CLEARED");
} else {
System.err.println("❌ Transformation failed");
System.err.println(" Error: " + response.getError());
}
}
}GETS JSON Output
Expected GETS JSON structure after transformation:
{
"header": {
"invoice_number": "AE-INV-2024-001",
"issue_date": "2024-01-15",
"issue_time": "14:30:00Z",
"document_type": "TAX_INVOICE",
"currency_code": "AED",
"due_date": "2024-02-14"
},
"seller": {
"name": "Emirates Company LLC",
"tax_registration_number": "100000000000003",
"address": {
"street": "Sheikh Zayed Road",
"building": "Emirates Tower",
"city": "Dubai",
"state": "Dubai",
"postal_code": "00000",
"country": "AE"
},
"contact": {
"email": "contact@emiratescompany.ae",
"phone": "+971501234567"
}
},
"buyer": {
"name": "Customer Company LLC",
"tax_registration_number": "100000000000004",
"address": {
"street": "Al Wasl Road",
"building": "Business Center",
"city": "Dubai",
"state": "Dubai",
"postal_code": "00000",
"country": "AE"
},
"contact": {
"email": "accounts@customercompany.ae",
"phone": "+971501234568"
}
},
"line_items": [
{
"id": "1",
"name": "Professional Services",
"description": "Consulting services for January 2024",
"description_ar": "خدمات استشارية لشهر يناير 2024",
"quantity": 100,
"unit_code": "HUR",
"unit_price": 100.00,
"line_extension_amount": 10000.00,
"tax_category": "S",
"tax_rate": 5.0,
"tax_amount": 500.00,
"total_amount": 10500.00
}
],
"totals": {
"line_extension_amount": 10000.00,
"tax_exclusive_amount": 10000.00,
"tax_amount": 500.00,
"total_amount": 10500.00,
"amount_due": 10500.00
},
"tax_breakdown": [
{
"category_code": "S",
"category_name": "Standard Rate",
"rate": 5.0,
"taxable_amount": 10000.00,
"tax_amount": 500.00,
"scheme_id": "VAT"
}
],
"extensions": {
"ae_identification": {
"ftaInvoiceRef": "FTA-2024-001",
"trn": "100000000000003",
"uuid": "8e6c3c4a-5f9b-4c8d-a7e2-3f1b9c8d7e6f",
"submissionDateTime": "2024-01-15T14:30:00Z",
"clearanceStatus": "CLEARED"
},
"ae_tax": {
"vatCategoryCode": "S",
"taxSchemeId": "VAT"
},
"ae_multilang": {
"descriptionAr": "فاتورة ضريبية",
"languageCode": "en"
}
}
}VAT Categories
UAE supports the following VAT categories:
| Code | Description | Rate |
|---|---|---|
| S | Standard Rate | 5% |
| Z | Zero Rate | 0% |
| E | Exempt | N/A |
Exemption Reason Codes
When using zero-rated or exempt categories:
| Code | Description |
|---|---|
| VATEX-AE-32 | Export of goods |
| VATEX-AE-33 | Export of services |
| VATEX-AE-34-1 | International transportation services |
| VATEX-AE-29 | Financial services |
| VATEX-AE-30 | Residential properties |