Finance teams running Saudi, UAE, Oman or Bahrain subsidiaries in NetSuite hit the same wall every filing period. The ledger itself is fine — tax codes are applied, journals post, the tax control accounts balance — but the return is assembled by hand. Someone exports a transaction saved search to a spreadsheet, filters by tax code, separates standard-rated from zero-rated and exempt, isolates reverse-charge imports, rebuilds the Emirate-level split the UAE form asks for, converts a handful of foreign-currency documents at the right rate, and retypes the totals into the authority portal. Then a second person re-performs the whole exercise as a review control, because nobody wants to sign a return whose numbers came out of an unversioned spreadsheet on a laptop.
The audit file is harder still. When a tax authority asks for an FTA Audit File (FAF) or a SAF-T style listing, there is no native report that emits it. The extract becomes a bespoke query written under deadline pressure, mapped to a layout nobody on the team has produced before, with header, supply, purchase and general-ledger sections that all have to tie back to a return that was already filed weeks earlier.
Native NetSuite tax reporting was designed around nexus and tax-code aggregation, not around per-country statutory forms. It will tell you the net tax sitting on a code. It will not produce the government's form in the government's box order, with the government's sign convention and rounding, alongside the supporting transaction listing that has to reconcile to it — and it will not keep a locked, immutable copy of what you actually filed.
What ECOSIRE builds
Nothing here is pre-built or sitting in a download folder. After scoping, ECOSIRE builds a NetSuite application in SuiteScript 2.1, shaped around the jurisdictions you file in, the tax engine your account runs, and the way your chart of accounts and tax codes are actually configured. It is delivered as an SDF project (installable as an unmanaged bundle) that you own outright.
Per-country return packs
A custom record type holds the return definition for each jurisdiction: the box list, the rule that populates each box (tax codes, tax types, transaction types, account ranges, nexus and subsidiary scope), the sign convention and the rounding rule. Generation runs as a Map/Reduce script that reads posting transactions for a selected accounting period and subsidiary, evaluates each rule, and writes a VAT Return record with one child line per box. Because the rules are data rather than hard-coded logic, adding a jurisdiction or absorbing a form change is a configuration edit, not a redeployment. UAE returns carry the Emirate breakdown, sourced from the customer record, the shipping address or a custom segment — whichever your team already maintains. Saudi, Omani and Bahraini returns each get their own box map, reverse-charge treatment and adjustment lines.
Audit files and transaction listings
A second Map/Reduce streams the underlying transaction detail into the audit-file layout: company header block, supplies listing, purchases listing and general-ledger listing, written to the File Cabinet as CSV in the field order and delimiter the authority specifies. Output is chunked so that a full year of lines stays inside the file-size and memory limits SuiteScript imposes, and each file is stamped with the return record it belongs to so the listing and the filed figures never drift apart.
Reconciliation and controls
Before a return can be marked as filed, the app runs a reconciliation: box totals against the tax control accounts in the general ledger for the same period, subsidiary and accounting book; foreign-currency documents against the rate actually applied; and an exception list covering transactions with no tax code, tax codes mapped to no box, postings made to the period after the return was generated, and credit memos crossing period boundaries. Exceptions surface on a Suitelet with a link straight to the offending record. A scheduled script emails the same sweep several days before the deadline, so problems are found during the month, not during the filing window.
How it is wired into your account
User Event scripts stamp tax-relevant custom fields on invoices, credit memos, vendor bills and journal entries at save. Map/Reduce handles generation so volume scales and governance yields cleanly. A Suitelet provides the preparer and reviewer screens. A scheduled script runs the reminder and exception sweep. RESTlets expose return and box data as JSON if your external workpapers need to pull it, secured with token-based authentication. SuiteFlow drives the prepared → reviewed → approved → filed transitions and the system-note trail that implies. Access sits on dedicated Tax Preparer and Tax Reviewer roles, scoped to the custom records, saved searches and File Cabinet folder rather than to the whole account. In OneWorld everything is subsidiary-aware, honours your accounting book and period calendar, and runs per subsidiary or as a consolidated pack.
Who this is for
Group financial controllers with entities in more than one GCC country, who currently maintain a different spreadsheet per jurisdiction. Shared-service and regional tax teams filing the same forms every month or quarter and re-deriving them from scratch each time. Accounting and advisory firms preparing returns on behalf of NetSuite clients, who need the workpaper and the audit-ready listing to come from the system of record rather than from an export. It is equally relevant to companies that have had an audit request land and discovered there is no button that produces the file.
How delivery works
We start with a scoping call: which countries, which subsidiaries, which tax engine your account runs, how your tax codes map today, what your period calendar and accounting books look like, and what an auditor has already asked you for. From that we issue a fixed quote — no hourly drift, no discovery invoices. Once approved, we build against your requirements and test on realistic data. Installation goes to your sandbox account first, where your tax team runs a full parallel period against a return they have already filed by hand and confirms the numbers tie. Only after you sign off does the same SDF project deploy to production, with the roles, deployments and saved searches configured. A support window follows, covering defect fixes and questions from your team while the first live filing cycles run.
What this is not
It is not an e-invoicing clearance solution and does not submit anything to a tax authority portal on your behalf — a human prepares, reviews and files. It is not certified, approved or endorsed by any tax authority, and we do not claim otherwise; it is a preparation, reconciliation and evidence tool that your tax team reviews and signs. It also does not replace tax advice: the box mapping is built from the rules your advisors confirm, and it is configurable precisely because those rules change.