Compliance SOP

TaxIQ/Compliance SOP/sop

HA

TaxIQ — Zakat, Income Tax & Fixed Asset Compliance

How one compliance request is processed end to end: 21 steps across 8 phases (DEMO DATA — Al Noor Family Holdings).

What this automation does

Plain-language summary of the published SOP

AI-powered Saudi Arabia corporate tax and Zakat compliance workflow. One end-to-end run accepts company financial information and performs four connected activities: Zakat and income tax calculation, fixed asset tax and accounting depreciation kept in separate independent ledgers, compliance rule evaluation with a plain-language AI explanation, and Filing Readiness scoring for the CFO. The demo scenario is Saudi Family Business, fiscal year 2026 (Hijri), 80% Saudi/GCC and 20% Non-Saudi ownership.

All outputs are SIMULATED ESTIMATES for decision-support only — never official ZATCA figures.
TaxIQ never files automatically and never modifies accounting records.
Any unverified result is marked REVIEW REQUIRED and routed to a human reviewer.
Zakat and income tax are always separate top-level objects — totalTaxLiability never appears as one combined figure.
TAX_BASIS and ACCOUNTING_BASIS depreciation are maintained in separate independent ledgers.
Every rate comes from configuration (Zakat, income tax, depreciation) — never hardcoded.
The AI cannot override a human compliance decision; review tasks are created as PENDING_REVIEW.

Phase 1 · Financial Statements — Validate and Calculate

Validate ownership, then produce the Zakat and income tax estimates as independent figures.

4 steps
  1. 1

    Validate that Saudi/GCC and Non-Saudi ownership sum to 100%

    If the total is not 100%, sets status to REVIEW_REQUIRED with exception code OWNERSHIP_PERCENTAGE_INVALID and halts filing readiness. A valid result continues all downstream calculations.

    • Saudi/GCC % + Non-Saudi % must equal 100.0% (tolerance 0.01%)
    • OWNERSHIP_PERCENTAGE_INVALID halts filing readiness calculation
    • Any ownership change requires explicit confirmation before use in a filing-readiness result
  2. 2

    Calculate the estimated Zakat base from zakatable assets less deductible liabilities

    Displays the full calculation transparently: starting financial position (cash, inventory, receivables, investments) minus total deductible liabilities equals the Estimated Zakat Base. Every component is shown separately.

    • Zakatable assets: cash, inventory, accounts receivable, investments
    • Fixed assets excluded as non-zakatable business assets
    • Deductible liabilities: accounts payable, loans, other liabilities
    • Label applied: ESTIMATED ZAKAT BASE
  3. 3

    Apply the applicable Zakat rate and compute the Zakat liability

    Selects 2.5% for Hijri or approximately 2.57% for Gregorian from config, then calculates Estimated Zakat Liability = Zakat Base × Rate.

    • Hijri calendar: rate = determin-ai.config.hijri_zakat_rate (2.5%)
    • Gregorian calendar: rate = determin-ai.config.gregorian_zakat_rate (~2.57%)
    • Result is never presented as an official ZATCA filing figure
    • Label applied: SIMULATED ESTIMATE
  4. 4

    Calculate the estimated non-Saudi income tax independently from Zakat

    Derives the non-Saudi taxable share from net profit multiplied by the non-Saudi ownership percentage and applies the configured 20% rate. Zakat and income tax are never combined into one liability figure.

    • Only activates when ownership is valid and the non-Saudi percentage is greater than 0
    • Income tax rate from determin-ai.config.income_tax_rate — never hardcoded
    • Saudi/GCC Zakat portion and Non-Saudi income tax portion always displayed separately
    • Label applied: SIMULATED ESTIMATE — independent from Zakat

Phase 2 · Fixed Asset Processing

Maintain tax and accounting depreciation in two independent ledgers and report the variance neutrally.

3 steps
  1. 5

    Classify each fixed asset and calculate TAX_BASIS depreciation

    Parses the assets JSON, identifies the applicable ZATCA tax depreciation category and rate for each asset from config, then computes tax depreciation and tax net book value.

    • Tax depreciation rates from determin-ai.config.tax_rate_* — never hardcoded
    • Unknown asset categories receive the default rate and REVIEW_REQUIRED classification status
    • All schedule records carry basis = TAX_BASIS
    • Accounting depreciation values are never used to compute tax depreciation
  2. 6

    Calculate ACCOUNTING_BASIS depreciation in a separate independent ledger

    Uses accounting cost, useful life, residual value and accounting method from each asset record. Useful life and residual value default by category when not supplied.

    • Stored basis is always ACCOUNTING_BASIS — never mixed with TAX_BASIS
    • Useful life defaults: Building 20 yr, Vehicle 5 yr, Machinery 10 yr, IT 3 yr, Furniture 10 yr
    • Residual value defaults by category when not supplied in the asset record
    • Accounting depreciation values are never used in the tax depreciation calculation
  3. 7

    Compare the two schedules and compute per-asset variances

    Pairs TAX_BASIS and ACCOUNTING_BASIS figures for each asset, labels them separately, and computes the annual variance.

    • Both TAX_BASIS and ACCOUNTING_BASIS figures must be labeled before the variance line
    • The variance label is always VARIANCE absent an explicit applicable rule citation
    • TAX_BASIS and ACCOUNTING_BASIS are maintained in separate independent ledgers
    • COMPLIANT when all required information is available and rule checks pass

Phase 3 · Compliance Review — Rules Applied

Check documents, answer the compliance question, evaluate every rule and raise typed exceptions.

4 steps
  1. 8

    Check whether the four required supporting documents are available

    Verifies presence of Financial Statements, Ownership Information, Fixed Asset Register and Depreciation Information.

    • Required: Financial Statements, Ownership Information, Fixed Asset Register, Depreciation Information
    • Each missing document creates a MISSING_DOCUMENT exception with severity HIGH
    • Overall status is COMPLIANT only when all four required documents are present
  2. 9

    Analyse the user's compliance question and provide a grounded AI explanation

    Identifies the relevant topic, provides a plain-language explanation citing the applicable rule and source, and clearly distinguishes AI explanation from official regulation.

    • The explanation must clearly distinguish AI explanation from official regulation
    • If the applicable regulation cannot be verified: reviewStatus = REVIEW_REQUIRED
    • Confidence is HIGH, MEDIUM or LOW — never overstated
    • Returns status NOT_APPLICABLE when no question is provided
  3. 10

    Evaluate all calculations against the configured compliance rules

    Checks seven areas: ownership, Zakat base, Zakat rate, income tax, fixed asset classification, tax vs accounting depreciation, and supporting documents.

    • Never claims a rule is verified if the source is not available in the configured library
    • DEVIATION requires a specific identified rule violation with expected, actual and impact
    • SOURCE_VERIFICATION_REQUIRED when a regulatory reference cannot be confirmed
    • Status per rule: COMPLIANT, REVIEW_REQUIRED or DEVIATION
  4. 11

    Create exception records for every REVIEW_REQUIRED and DEVIATION result

    Generates typed exceptions for invalid ownership, missing financial data, unknown asset categories, depreciation issues, unverified compliance rules, missing documents and critical deviations.

    • Codes: INVALID_OWNERSHIP, MISSING_FINANCIAL_DATA, MISSING_DOCUMENT, UNKNOWN_ASSET_CATEGORY, DEPRECIATION_EXCEPTION, COMPLIANCE_RULE_UNVERIFIED, CRITICAL_DEVIATION
    • Severity: CRITICAL, HIGH or MEDIUM
    • Every exception includes code, severity, explanation and required action

Phase 4 · Filing Package — Ready for CFO

Score filing readiness, produce the consolidated report, route humans in and write the audit trail.

6 steps
  1. 12

    Evaluate the result set and calculate the Filing Readiness Score and status

    Scores eight checks: ownership valid, Zakat complete, income tax complete, asset register complete, depreciation complete, documents complete, compliance verified, no critical deviations. Score = passed / total × 100.

    • Score at or above determin-ai.config.filing_readiness_threshold gives READY_FOR_REVIEW
    • Any CRITICAL exception gives REVIEW_REQUIRED regardless of score
    • Invalid ownership gives NOT_READY
    • Status values: READY_FOR_REVIEW, REVIEW_REQUIRED, NOT_READY
  2. 13

    Generate the consolidated TaxIQ Financial and Tax Summary report

    Produces the complete human-readable report: company and ownership, Zakat, income tax, fixed assets (TAX_BASIS and ACCOUNTING_BASIS in separate sections), compliance, documents and filing readiness.

    • Zakat and income tax are always displayed in separate sections — never combined
    • TAX_BASIS and ACCOUNTING_BASIS are always labeled separately in the assets section
    • Filing status is READY FOR REVIEW, REVIEW REQUIRED or NOT READY
    • Disclaimer applied: all figures are SIMULATED ESTIMATES for decision-support only
  3. 14

    Determine whether human review is required and write PENDING_REVIEW tasks

    Identifies all CRITICAL and HIGH severity exceptions and writes a PENDING_REVIEW task to the human_review_tasks collection for each high-risk item.

    • High-risk items are always routed to human review
    • Supported reviewer actions: APPROVE, REJECT, REQUEST_MORE_INFORMATION
    • Review task status is always PENDING_REVIEW on creation
    • AI cannot override a human compliance decision
  4. 15

    Retrieve the current run identifier for audit trail correlation

    Wraps the built-in run_id() call so the orchestrator can invoke it as a user-defined function step. Returns None outside a live automation run.

    • No parameters
    • Returns None when called outside of a live automation run
  5. 16

    Write one immutable audit event per major workflow step

    Creates six events — ownership validation, Zakat calculation, income tax calculation, fixed asset processing, compliance evaluation and filing readiness — all linked by runIdRef.

    • Every event is a new insert to the audit_trail collection — never deleted or modified
    • The runIdRef field links all events from the same orchestration run
    • Events are retrievable by company, fiscal year, step or runIdRef
  6. 17

    Assemble the complete TaxIQ JSON response

    Serialises every result for output, with Zakat and income tax as separate top-level named objects and both depreciation bases separately labeled.

    • zakat and income_tax are always independent top-level objects — never merged
    • totalTaxLiability never appears as a single combined figure
    • Every result carries the SIMULATED ESTIMATE label where applicable
    • fixed_assets lists per-asset cost, tax depreciation, tax NBV, accounting depreciation, accounting NBV and variance

Phase 5 · Phase 2 — VAT, AP, Revenue & SAMA Modules

Activated by requestType. Adds the ZATCA VAT engine and return, AP three-way match, withholding tax, IFRS 15 revenue recognition, e-invoice drafts, enhanced tax computations and the SAMA compliance assessment.

8 steps
  1. 18

    Run the VAT engine over the submitted transactions

    Classifies each transaction as STANDARD_RATED, ZERO_RATED, EXEMPT or BLOCKED_INPUT, computes output and recoverable input VAT and flags large transactions for SAMA AML review.

    • The standard rate comes from configuration — never hardcoded in the logic
    • Blocked input VAT (entertainment, personal vehicles) is never treated as recoverable
    • Transactions at or above the configured large-transaction threshold are flagged SAMA_LARGE_TRANSACTION
    • A run without a TRN is marked REVIEW_REQUIRED
  2. 19

    Prepare the ZATCA 12-box VAT return draft

    Maps the VAT engine results into the twelve ZATCA return boxes and produces a draft with the net VAT position.

    • The return is always produced in DRAFT_RETURN status
    • TaxIQ never submits a return to ZATCA
    • Box 12 shows the net VAT due or reclaimable for the period
  3. 20

    Process accounts payable with a three-way match

    Matches each vendor invoice to its purchase order and goods receipt within tolerance, validates the Saudi IBAN, detects duplicates, ages the balance and builds a payment file.

    • Match tolerance is taken from configuration (percentage and absolute SAR floor)
    • A Saudi IBAN must be 24 characters starting SA — otherwise payment is blocked
    • Duplicate invoices (same vendor, amount and date) raise an exception
    • The payment file is PAYMENT_READY only — human approval is always required
    • Overdue Saudi SME suppliers are flagged under SAMA supplier payment expectations
  4. 21

    Calculate the withholding tax provision by vendor

    Applies the configured WHT rate for each non-resident vendor service category and computes gross, WHT and net payment amounts.

    • Saudi residents and GCC nationals are WHT-exempt
    • Rates by category (dividend, royalty, technical fee, management fee, business service) come from configuration
    • Each non-resident vendor requires a quarterly WHT certificate
  5. 22

    Recognise revenue under the IFRS 15 five-step model

    Computes percentage of completion for over-time contracts, recognises point-in-time contracts on delivery and derives contract assets and liabilities.

    • Revenue is always measured VAT-exclusive
    • Variable consideration is constrained and routed for review (IFRS 15.56–58)
    • Contract assets and contract liabilities are reported separately
  6. 23

    Generate ZATCA Fatoorah Phase 1 e-invoice drafts

    Creates a compliant e-invoice draft per billable contract with seller TRN, supply date, VAT-exclusive amount, VAT and total.

    • Drafts are marked EINVOICE_GENERATED and never transmitted to ZATCA
    • The VAT rate is read from configuration
    • Submission requires explicit human authorisation
  7. 24

    Compute enhanced tax positions

    Calculates real estate transaction tax on property disposals, excise tax on excise goods, IAS 12 deferred tax on depreciation timing differences and flags related-party transfer pricing exposures.

    • RETT and excise rates are configuration-driven, with statutory exemptions listed
    • Deferred tax is recognised only on temporary differences — never on Zakat
    • Related-party transactions above the configured threshold are flagged TRANSFER_PRICING_REVIEW
    • The consolidated provision keeps Zakat and income tax separately labelled
  8. 25

    Assess SAMA and ZATCA framework adherence

    Scores twelve weighted frameworks, produces a gap register, a regulatory calendar and the AI governance disclosure required under the SAMA Outsourcing Policy.

    • Scoring is weighted 40% Critical, 30% High, 30% Medium
    • Any Critical framework assessed NON_COMPLIANT forces REVIEW_REQUIRED
    • The module is read-and-report only — it never modifies financial records