Complyance Logo

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:

CodeDescriptionRate
SStandard Rate5%
ZZero Rate0%
EExemptN/A

Exemption Reason Codes

When using zero-rated or exempt categories:

CodeDescription
VATEX-AE-32Export of goods
VATEX-AE-33Export of services
VATEX-AE-34-1International transportation services
VATEX-AE-29Financial services
VATEX-AE-30Residential properties

Next Steps