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.
Phase 1 · Financial Statements — Validate and Calculate
Validate ownership, then produce the Zakat and income tax estimates as independent figures.
- 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
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
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
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.
- 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
- 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
- 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.
- 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
- 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
- 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
- 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.
- 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
- 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
- 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
- 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
- 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
- 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.
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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