RiyalPlus — User Manual
Step-by-step guides for every product in RiyalPlus. The platform prepares Saudi compliance filings from your own documents: the annual Zakat & income tax declaration (Form 10) with financial statements, plus Transfer Pricing, Withholding Tax, VAT returns, RETT, UBO, Excise Tax, the Qawaem financial-statement deposit, and the Verify+ document check. RiyalPlus prepares the filing pack; you submit it through the relevant government portal (ZATCA, or the Ministry of Commerce via the Saudi Business Center).
One principle runs through everything: every number traces back to your uploaded documents. RiyalPlus never invents a figure. Where the regulation requires a judgment — a market valuation, a sugar concentration, a discount rate — you assert the value and the system records your basis for it.
Getting started
Creating your account
Your account is where your filing entities, cases, and points balance live.
- Open the sign-up page and enter your email; confirm it from the verification email.
- Set a password and complete your personal profile (name and language).
- New accounts receive a one-time opening grant of points so you can run your first filings before buying more.
Adding a filing entity
A filing entity is one company you file for — its registration details, ownership, and activities. Every product works against a filing entity.
- Open Filing entities in the sidebar and add an entity.
- Provide the commercial registration (CR) number — RiyalPlus can look the record up in the commercial registry and prefill the details — or upload the articles of association, or enter the details manually.
- Review the name, CR number, VAT number, capital, legal form, and ownership split (Saudi, GCC, non-Saudi percentages), then save.
The optional Registration and licence section holds the facts the tools would otherwise ask you again: the tax identification number (TIN), VAT registration, national address, licence, withholding payer regime, excise role, auditor, authorised representative, and a prior declaration or ruling. None of its fields is required. A new Zakat case's Setup step starts its financial number and VAT number from it; the objection letter prints the TIN; the financial statements name the auditor; withholding is worked out under the entity's own regime; and the insurance schedule, the CRS pack, the objection workbench and the fine estimate propose an answer from the kind of institution or the legal form, which you can always change.
See also: Glossary "Filing entity", "Ownership structure"
Reviewing details read from your documents
When you provide a registration document, RiyalPlus extracts the key details for you to confirm — it never silently trusts its own reading.
- Open the review panel after the document is read.
- Check the extracted ownership, capital, legal form, and related parties against the document.
- Correct anything that doesn't match, then confirm to save.
Understanding points
RiyalPlus is pay-per-use. There are no subscriptions. Prices are shown in the app before you confirm each charge.
- What's free: creating cases and containers, catalogs and registers, previews and validation screens, the UBO identification, the CbCR scope check.
- When you're charged: at the moment a product does its paid work — uploading a trial balance (Zakat & tax case), creating a TP case, unlocking a WHT year, marking a VAT / Excise / RETT filing as filed, confirming a UBO annual confirmation, or activating an add-on (Verify+, Qawaem).
- Pricing: every action has one flat price, shown in the app before you confirm and on the Billing page's price card. Paid actions: the Zakat & tax case (Form 10 + financial statements), a Transfer Pricing year, a WHT year (with the optional automatic-extraction add-on), a VAT period, an Excise period, a RETT transaction, the UBO annual confirmation, the Qawaem deposit add-on, the Verify+ add-on, the Invoice Reader, the assessment & objection workbench, the contract disclosure batch, and the CRS reporting pack (once per institution per reporting year). Team seats and the other consultant tools are free.
- If your balance can't cover a charge, you'll see a top-up prompt (RP-2033). Nothing is charged until you have enough points.
See also: FAQ "What are points?"; User manual "Points and billing"
Finding the tools
Open Tools in the sidebar (or All tools) to reach the Tools hub: one grid, one card per tool, each card with its category label. The tools built for financial institutions are cards like any other, labelled Financial institutions — there is no separate menu section for them. The tools that belong to the Zakat & tax case have no card: they live inside the case and open from it — the what-if simulator on the Compute step; the explanation letter, the journal post-back, the deferred-tax register and the audit evidence pack on the Export step. The Tools guide describes each tool in six parts.
Settings: language and profile
- Open Settings.
- Switch between Arabic and English, or update your profile and notification preferences at any time.
The compliance calendar
Your account's home page doubles as a live compliance calendar: every open obligation across every product and filing entity, plus a look ahead at what's coming next.
The calendar and the "Upcoming deadlines" list
- The main list shows your open obligations — filings you've already started that carry a deadline — grouped by urgency (Overdue, Due soon within 30 days, Upcoming, No deadline) and sorted so the most urgent sits first. The four tiles at the top filter the list; click any row to jump straight to that filing.
- A separate Upcoming deadlines list, below it, shows filings you haven't started yet, each tagged with a Predicted chip. RiyalPlus projects these from your filing entities' fiscal calendars and filing history, using the same due-date rule the product's own engine applies — nothing here is guessed. A predicted item disappears on its own once you start the real filing (or it's otherwise covered).
- Predicted covers VAT, WHT, Excise Tax, the UBO annual confirmation, Form 10 (Zakat & income tax), and the Qawaem deposit. RETT is never predicted, since it's triggered per transaction with no "next" occurrence to project; UBO's 15-day change updates and a TP case's own lifecycle also stay off the predicted list, since both need an event to happen first before a date can anchor to it.
Deadline reminder emails
- Open Settings › Notifications to control the Deadline reminders toggle — on by default for every account.
- Choose How far ahead to remind you: 7, 14, or 30 days before a predicted item's due date.
- You'll never get more than one reminder email a day: every predicted item that enters its window on the same day is grouped into a single digest.
- Every reminder email carries an unsubscribe link — using it turns off deadline reminders for your account immediately, the same as switching the toggle off in Settings.
See also: FAQ "Why is a deadline marked predicted?", "How do I stop the reminder emails?"; Glossary "Predicted deadline"
Notifications
The notification centre (the bell, and the Notifications page) tells you what changed on your account. RiyalPlus checks every hour, whether or not anyone is signed in, and adds each notice once.
What it does
- Dates. A notice 30 days and again 7 days before the due date of every filing you have started: Form 10, VAT, WHT, Excise, RETT, the UBO annual confirmation and its 15-day update, the TP disclosure and the Qawaem deposit. Once more after the date has passed, within 30 days, while the filing is still open. The dates your tools track (an objection window, a contract-disclosure filing window, a capital-asset retention date) come the same way. A RETT claw-back comes once a breach is recorded, with its 30-day payment date. The CbCR notification comes, when its answers put the group in scope, before its date only: the app does not record whether the notification was made.
- Long tasks. A notice when reading a trial balance, mapping accounts, reading invoices, a contract-disclosure batch, reading an assessment notice or reading a company's foundation contract finishes, or does not finish.
- Money. A top-up that did not go through, points given back to your balance, a card refund completed or not completed, your opening points, and a low balance: your balance is below what the last paid action cost.
- Also: a person replying in your support conversation, a payment received, a change to your team, a result that no longer matches its inputs, and errors that keep repeating.
When to use it
- Open it from the bell when it shows unread notices, or read the morning e-mail.
- A notice states a date or a fact. It never says a filing is late or wrong.
Steps
- Press Open on a notice to go to the page it is about: the filing, the tool, Billing or your support conversation. Mark as read clears one notice; Mark all as read clears them all.
- To stop the reminders for a tool's date you have dealt with, find it in the Open deadlines list (on the Tools page and on your home page) and press Mark done. The row asks "Close this date? Reminders for it stop."; press Close, or Keep open to leave it as it is.
- The closed row stays where it was, dimmed, reading Closed. with Undo until you leave the page. Undo opens the date again.
- Open Settings › Notifications and use the Daily notification e-mail switch to turn the morning e-mail off or on. The notification centre itself is always on.
What it needs
- Nothing to set up: the notices come from the filings, tools, long tasks and points on your account.
- The morning e-mail goes to the e-mail address on your profile.
What it produces
- One notice for each event, never the same one twice.
- One e-mail each morning at 09:00 Riyadh time, listing the notices you have not read. If that hour's run is missed, a later run the same morning sends it, once. Your mail app offers a one-click unsubscribe for it.
- In that e-mail, notices of one kind about the same company make one line, under the company's current name, with their number in brackets; two companies with the same name are told apart by their CR numbers. A date notice about no company names its date instead, and notices of one kind that name nothing else (top-ups, for example) make one line with their number. A notice about a filing whose case you archived or deleted after it came stays in the notification centre and is left out of the e-mail; so does a notice about a company's own date (a tool's date, for example) once you archive or delete the company.
- A date that falls on a Friday or a Saturday is shown as the rules state it, and its notice ends with: "Dates are shown as the rules state them: a deadline is not moved for an ordinary weekend."
Common questions
- Why did the notices for a date stop? The filing was filed or closed, you archived its case, you marked the tool's date done, or you archived the company a date of its own belongs to (a tool's date, the CbCR notification, a RETT or UBO date).
- I archived a company. Why do notices still come for its VAT filing? A VAT, WHT, Excise or TP filing whose case is still open stays on your home page, under the company's name, and keeps its notices. To stop them, press Archive on the case.
- Why does a team member not see a notice I see? A notice about the account holder's own support conversation is shown to the holder only.
- Does the morning e-mail replace the deadline reminder e-mails? No. Deadline reminders cover the filings you have not started yet, and keep their own Deadline reminders switch.
- Why is there no notice for the end of my RETT claw-back's watch period? The end of a watch period is not a due date. A notice comes once a breach is recorded.
See also: User manual "The compliance calendar"
Zakat & income tax declaration (Form 10)
Creating a case
A case is one declaration — one filing entity, one fiscal period. Creating it is free; the price (plus any add-ons you tick), shown in the app, is locked at creation and charged when you upload the trial balance.
- Open Zakat & Tax Declaration and select New case.
- Pick the filing entity (if your account has more than one, you must choose — RiyalPlus never guesses which company a filing belongs to).
- Enter the period start and end dates and confirm the shareholder details.
- Create the case. Fiscal years 2023 and earlier are not supported — they fall under the previous Zakat regulation.
See also: FAQ "What is a case?"
Choosing the filing type
The filing type tells RiyalPlus how to treat opening balances.
- Pick the type: first year of a new entity, first time filing in the app, or sequential (a successor to last year's case in RiyalPlus).
- If you choose sequential, select the prior-year case to link to. The option needs a computed prior-year case.
Uploading your trial balance
The trial balance is the source data for the declaration. This upload is the charge point: the case's locked price is deducted from your points when processing starts. If processing fails on our side, the points are refunded automatically.
- On the upload step, select the trial balance file — Arabic, as an XLSX spreadsheet or a PDF, with account names or codes and debit/credit columns.
- Start the upload. If your workbook has several sheets, pick the one holding the trial balance when prompted.
- Processing runs in the background — you can leave and come back; the case resumes where it was.
See also: Troubleshooting "The trial balance won't upload or ingest"
Reviewing the ingestion checks
After the file is read, RiyalPlus shows the results of its accounting checks.
- If everything passed, continue to mapping.
- Warnings (for example, a small imbalance) can be reviewed and either corrected or accepted with Proceed anyway.
- A failed required check (for example, duplicate account codes) offers Re-upload only — fix the file and upload again.
- Small figures can be corrected inline on the review screen without re-uploading.
Entering opening balances
A first-time-in-app filing needs opening balances before compute.
- Open the opening-balance form when prompted. These are last year's closing balance-sheet figures.
- Enter them; opening assets must equal liabilities plus equity.
- Save and continue.
See also: Troubleshooting "Compute won't run — it asks for opening balances"
Reviewing the account mapping
Mapping matches each trial-balance account to the right declaration line. RiyalPlus proposes it; you review it. Each row shows the account's amount and a debit/credit indicator alongside the suggested line and where the suggestion came from.
- Open the mapping step and review each suggestion.
- Adjust any mapping that isn't right.
- Confirm to continue. Getting the mapping right is what makes the computed figures correct.
See also: FAQ "What does mapping mean?"
The certification step
Before compute, you answer a short set of certification questions about the declaration (they mirror the certification section of the official form). Compute won't run until this step is complete.
Running compute
Compute calculates the Zakat base, tax base, and resulting amounts, then runs the validation controls.
- From the mapped, certified case, select Compute.
- If a required input is missing — ownership percentages that don't total 100%, missing opening balances — fix it and compute again.
Reviewing results, warnings, and approvals
- Open the results. The warnings panel lists anything to look at, in plain language.
- Blockers must be resolved before export — open each to see what it needs, fix the data, recompute.
- Advisory warnings don't block; if you've reviewed one and accept it, override it with a reason, which is recorded in the audit trail.
- Each wizard step can be approved (locked). To edit an approved step, unlock it first; changes to an earlier step mark later steps as needing a re-run.
- When all blockers pass, the filing is submission-ready.
Saved what-if scenarios
The what-if panel on the results screen lets you ask "what would change if…" without touching the case. Nothing you do there is filed, and the real result never moves.
- Build one or more tweaks (a different account mapping, a different adjustment amount, a different opening balance) and select Apply to see the effect.
- To keep that set, give it a name and select Save scenario. Names are unique within a case, so two scenarios can never be confused in a comparison.
- Saved scenarios are listed underneath, each with its Zakat figure and the date of the compute run it was measured against.
- If you recompute the case, every scenario saved before that recompute is marked Needs rerun — its figures were measured against a result the case no longer has. Select Rerun to measure the same tweaks against today's figures. The old version is kept as a record; it is never overwritten.
- Tick up to four scenarios and select Download in Arabic or Download in English to get a comparison PDF: your real result beside each scenario, the difference between them, and which Zakat bound (minimum, maximum, or the SAMA limit) actually applied in each. A scenario that needs a rerun cannot be included until you rerun it.
- Archive retires a scenario. It is not deleted — the record stays and the name becomes free to use again.
Saved scenarios and the comparison PDF are included in the case price; there is no separate charge. The comparison PDF is a working document, not a declaration — it states so on every page.
Exporting the declaration and financial statements
- Select Export Form 10 and save the PDF.
- Select the financial-statements export for the full IFRS statement set (statement of financial position, income statement, cash flow, changes in equity, and notes) — included in the case price.
- Submit the declaration through ZATCA's portal. RiyalPlus does not lodge it for you.
- Audit evidence pack — after the case is filed, produce from this step the dated PDF that shows where each figure of the return came from (its amount, the article behind it where the app holds one, and the rows it was read from), to hand to a ZATCA auditor. See the Tools guide, "Audit evidence pack".
Zakat explanation letter
- In the Export step, choose the letter language (Arabic or English) and select Download.
- The letter sets out, line by line, how this case's zakat was arrived at: the additions to the base, the deductions from it, which bounds were tested and which actually bound, the rate and how it was set, the ownership apportionment, and the amount due. Each line names the article behind it and where its figure came from — your uploaded trial balance, or a value the engine derived under the Regulation.
- It is included with the case; there is no extra charge.
- Every figure in the letter is read from the case's saved computation. If the case has changed since it was computed, the letter says so on its first page and the Export step shows the same warning — recompute, then download the letter again.
- The letter is a working paper, not an opinion. It carries the standard disclaimer: it is not legal or tax advice and takes effect only once you — or the licensed accountant or adviser acting for you — have reviewed it, adopted it and signed it in your own name.
Filing next year (sequential case)
- From a computed case, create the next year's filing as a successor.
- Closing balances carry forward automatically as the new opening balances. Creation is free; the charge happens at the new year's trial-balance upload.
Verify+ (document check add-on)
Verify+ cross-checks figures in your supporting documents against the declaration — a quality-assurance layer on a Zakat & tax case. Priced per case, shown in the app, including a set number of document extractions (then priced per further document; removing a result does not restore the allowance).
- Add Verify+ when creating the case, or activate it later from the case (a one-time points charge).
- Upload the supporting document for a declaration line (an invoice, statement, or contract).
- RiyalPlus reads the amount and compares it with the declared value; matches and mismatches are shown per line.
- Export the verification report PDF when you're done.
See also: FAQ "What is Verify+?"
Deferred tax (IAS 12 register)
For every case whose Form 10 carries an income-tax share — a bank or finance company taxed on its foreign shareholders' share of profit, an insurer, or any other mixed or income-tax case — the register adds one schedule — where each deferred-tax balance goes in the Zakat base — keyed to the regime your Form 10 was actually computed under; every line carries its article or says it does not arise under Article 66(2), and the note's presentation sentence matches the standard you report under. The arithmetic, the balances and the Form 10 figures do not change; the tool stays free.
Your accounts and your tax return disagree about when some things count. Depreciation is written off over the useful life in the books but over a pooled rate in the tax computation; a provision is an expense in the books the year it is formed but is not deductible until it is used. Those gaps reverse over time, and the future tax effect of them is your deferred tax — a deferred tax asset (DTA) where you will pay less later, a deferred tax liability (DTL) where you will pay more.
The deferred-tax tool builds that register for a fiscal-year case and turns it into a note in your financial statements. It is free, it is deterministic (no AI), and it changes nothing in your Zakat or income-tax declaration.
It is only for entities that pay income tax. A Zakat-only entity has no income-tax leg and nothing to defer, so the tool shows a short "not applicable" explanation instead of a form.
Building a register
- Compute the case first. The register measures deferred tax at the income-tax rate your calculation actually applied — it never assumes a rate. If the case has not been computed, the tool says so rather than guessing.
- Open Deferred tax from the case's Export step.
- Enter the opening balances. If the case is linked to last year's case and that year has a register, the closing position is proposed for you — confirm it or replace it. For an entity's first register, take the opening figures from the prior year's statements.
- Check the temporary differences. Where the case's own figures contain a depreciation-difference or provisions adjustment, rows are proposed from them, each showing where the number came from. They are starting points, not measurements: enter the real carrying amount and tax base for each component, and add or remove rows as needed.
- Answer the two questions about carried-forward losses (below) if you have a tax-loss row.
- Write the basis of recognition. This is required, and it is printed on the note word for word as management's assertion. RiyalPlus does not judge whether a deferred tax asset is recoverable — you do, and the note says so.
- Compute and save. Saving stores the register. It does not yet change your financial statements.
- When you are satisfied, choose Include in the financial statements. The next time you generate the statements for this case, the deferred-tax note appears in them. Until you do this, the statements are exactly what they would be without the register.
Carried-forward losses: two conditions that are not negotiable
- Audited accounts. Losses can be carried forward only where they were determined by statutory accounts audited by a CPA licensed in the Kingdom (Implementing Regulations Art. 11(3)). Without that confirmation the tool refuses to recognise a loss at all — it does not compute one with a warning.
- A 50% ownership change. Where ownership changed by half or more, the Law removes the carry-forward for the non-Saudi share, unless the entity continues to carry on the same activity (Income Tax Law Art. 43(b)). Confirm the same-activity carve-out, or remove the loss.
Carry-forward itself has no time limit, and there is no carry-back. What is limited is how much you may deduct in any one year: no more than 25% of the declared annual profit (Implementing Regulations Art. 11(1)). The register shows that annual ceiling and roughly how many years the loss would take to absorb — as a disclosure, not as a cut to what is recognised.
What the register does not claim
Every register prints its own limits on the page and on the note. The most important: the endorsed text of IAS 12 is not held in this system's regulatory reference, and SOCPA's endorsement of the international standards is fixed as at 22 May 2017 with no record of later re-endorsement. Recognition and measurement in the register are therefore your assertion, not a rule RiyalPlus applied. The exact base for the 25% ceiling is well supported but not beyond argument, and the note says that rather than presenting it as settled.
The register also does not touch your declaration. The Zakat treatment of deferred tax — a deferred tax asset is a deduction from the Zakat base, a deferred tax liability an addition — still comes from your mapped trial balance, exactly as before.
Corrections and history
Registers are never edited in place. Saving again creates a new register and keeps the previous one, so every deferred-tax position a filing ever showed stays readable. If you recompute the case after building a register, the register is marked "recomputed since" and cannot be included in the statements until you save it again against the new result — a note measured against superseded numbers would disagree with the statements around it.
Fixed asset register
The fixed asset register keeps one list of an entity's assets and produces the three different numbers Saudi law asks for from the same list. It is free to use; nothing in it costs points.
Why the same asset carries three values. Saudi rules do not agree with each other about fixed assets, and they are not meant to:
- The books depreciate each asset on the entity's own accounting policy — usually straight line over a useful life.
- Income tax does not depreciate assets at all. It depreciates groups. Article 17 of the Income Tax Law puts every depreciable asset into one of five groups (fixed buildings 5%, movable industrial and agricultural buildings 10%, machinery, equipment, software and vehicles 25%, exploration 20%, everything else including furniture and goodwill 10%) and applies the rate to what is left in the group at the year end. There is no tax written-down value for a single asset, and no gain or loss when one is sold — the sale is handled inside the group.
- Zakat uses the net book value shown in the financial statements (Ministerial Resolution 1007, Articles 26(4) and 48–51).
The register holds all three and never mixes them.
The two-year rule you should expect to see. When an asset is bought, only half its cost enters the tax group that year; the other half enters the following year. When an asset is sold, only half the sale proceeds come out that year, and the other half the following year. This is Article 17(e) as amended in 2018. It is not a half-year convention — the asset is not fully inside its group until its second year, and it is still half-out of the group the year after it is sold. If your first-year tax depreciation looks about half of what you expected, this is why.
Walking through it.
Assets. Upload your existing spreadsheet as an
.xlsxfile. RiyalPlus reads it directly and proposes which of your columns is which; you confirm the mapping and correct anything in the preview before it is saved. You can also add rows by hand. Every save creates a new version — nothing is overwritten, so a figure you filed last year can always be traced back to the exact rows it came from.The zakat class picker is deliberately open-ended. Article 49's list is illustrative, not exhaustive, so if your asset does not fit any of the listed classes, choose Other and describe it. An asset with no Article 17 group at all (land, construction in progress) is a legitimate row — leave the tax group blank.
An exploitation, processing or surveying right bought by a mining, quarrying or oil-and-gas-services taxpayer sits in its own group — the Article 19 independent group — amortised at the 20% rate Article 17(b) gives the survey group, kept apart from group 5 unless you place the right there yourself (the group is your choice, row by row); the PDF names Article 19 and Article 17(b) beside the group.
Schedule. Choose the fiscal years. Because the tax groups carry forward from one year to the next, the span must be a whole number of 12-month years, and the last one is the year that gets pushed to your return.
If the register holds assets that were placed in service before the first year you asked for, RiyalPlus will ask for the opening balance of each affected group. It does not guess: the group balances are the taxpayer's own history, and an invented opening balance would be wrong in every year that follows it.
You can also enter repairs charged to each group. Article 18 allows a repair deduction of up to 4% of the group's remaining value; anything above that is added to the group and depreciates from the following year.
The schedule shows the group table, the per-asset book table, the zakat net book value by class, and the reconciliation between the accounting charge and the tax charge. Both a PDF and an Excel workbook can be downloaded.
Push. This sets one figure on a Zakat & tax case: the depreciation difference on the Section (ج) adjustment line. It does not touch anything else on the return, and it can be withdrawn.
The figure is negative when tax depreciation exceeds the accounting charge — adjustment amounts are added to net book profit, so a deduction shows as a minus. Any Article 17(g) balancing charge (which happens when disposals push a group below zero) moves it the other way, because that excess is added to taxable income.
Net fixed assets are shown but not pushed. The zakat base already deducts the net fixed assets you mapped from your balance sheet, and a pushed value would be added to that figure rather than replacing it — doubling the deduction. So the register's net book value is displayed beside your mapped figure with the difference highlighted, and you reconcile the two in the Mapping step.
Things RiyalPlus does not decide for you. The register applies Article 17 to the cost you enter. It does not split land out of a building (Article 17(j)), pro-rate an asset used partly outside the business (Article 17(k)), spread a BOT/BOOT asset over a contract term (Article 17(l)), or write off a group whose assets have all been sold (Article 17(i)). Nor does it set your accounting depreciation policy — the full-month straight-line basis it uses must match your financial statements. Each of these is stated on the schedule itself.
Periods before 2018. The two-year rule above came in with Royal Decree M/131, effective 1 January 2018. RiyalPlus refuses to compute a schedule for a fiscal year ending before that date rather than applying the wrong rule silently.
Provisions pack (end of service, credit losses, leases)
Three year-end schedules a preparer otherwise builds by hand in a spreadsheet, kept in one register per filing entity and turned into a provision figure, a PDF schedule, a note in the financial statements and — for end of service — a compute input on the Zakat and tax case.
It is free, it is deterministic (no AI anywhere in the path), and you can re-run it as often as you like.
The three legs
End of service is the fully specified one. Give us one row per employee — a payroll code, the hire date, the last wage and, where they have left, the termination date and the reason — and we compute the Labour Law Art. 84 award: half a month's wage for each of the first five years and a full month for each year after that, with fractions of a year pro rata in both bands. A resignation is scaled down the Art. 85 ladder (nothing under two years, one third from two up to and including five, two thirds above five and under ten, the full award at ten or more); a dismissal under Art. 80 removes the award. A month is thirty days, because that is what Art. 2 says a month is.
Two things about that calculation are worth knowing before you trust the total:
- The wage column is the LAST ACTUAL wage, allowances included — not basic salary. Art. 84 computes the award on «الأجر», and Art. 2 defines that as the actual wage. A system that accrues on basic salary understates the liability by whatever the allowances come to. The template's column says so and so does the page.
- Never put a national id or iqama number in the employee-code column. Use your own payroll code. The importer refuses a bare ten-digit value on purpose: the roster is personal data and the smallest identifier that does the job is the one that should be stored.
Credit losses is an aging matrix. You give the buckets and the balances; you also give the loss rates. RiyalPlus never suggests a loss rate and never validates one — there is no statutory table of loss rates in the Kingdom to check against, and a suggested rate would be us making a credit judgement in your name. The output says, in both languages and on the page, that the rates are yours. Beside the matrix you get the bad-debt write-off conditions, listed separately for Zakat (Art. 65, including the relief from the accountant's certificate where the debt is under 1 % of revenues or a final bankruptcy judgment has been issued) and for income tax (IRR Art. 3(3), which has no such relief and adds the "all legal procedures taken, impossibility proved by convincing evidence" limb). The two regimes genuinely differ; we do not merge them.
Leases builds the liability amortisation schedule under IFRS for SMEs Section 20 — the framework this product's financial statements are prepared under, not IFRS 16. You tell us whether each lease is a finance or an operating lease; that is your judgement at inception under paras 20.4–20.8 and we record it, we never derive it. In particular we never derive it from the income-tax recharacterisation tests in IRR Art. 14 (75 % of useful life, 20 % residual, 90 % of fair value, a bespoke asset, transfer of ownership): those govern tax and must not be wired into an accounting classification. From the payments, term, timing and discount rate we produce the present value, the period-by-period rollforward (opening, finance charge, payment, closing) and the straight-line right-of-use amortisation.
Working through it
- Roster. Pick the leg, download our template, fill it and upload it. We propose a column map; you confirm it; only then is a snapshot saved. Every import is a new version — nothing is overwritten — so a number that reached a filing can always be traced to the exact rows behind it. Uploading an end-of-service roster does not disturb your lease rows: a version carries every leg forward.
- Calculate. Choose the fiscal year and the inputs that are yours to give: the valuation date (serving employees are measured to it — leave it blank for 31 December), the opening balance, and what was actually paid or written off during the period. Nothing in a roster records a payment, so we never guess one. The closing provision is what the rules say is owed at the valuation date; the charge to the period is whatever it takes to get there.
- Push. Attach the calculation to a Zakat and tax case, choosing the Zakat treatment. See below.
You can export any calculation as a bilingual PDF schedule or as an Excel workbook at any point. Both are rendered from the stored calculation, so a schedule exported in March still prints March's figures in June.
What the Zakat base does with a provision — three different answers
This is the part a provisions schedule usually gets wrong, and the page asks you to choose it deliberately:
- Added as a non-current liability. A provision representing a settled debt owed to non-owners — end of service, leave, annual air tickets — is added to the Zakat base as a non-current liability (Art. 29(1)(b), which names the end-of-service provision expressly). Art. 24 classifies these by rule — end-of-service, leave and the like are treated as non-current liabilities whatever the entity's own presentation — and where current liabilities exceed current assets, Art. 29(2)(b) adds the difference to the base.
- Added as equity. Every other provision on the face of the statement of financial position — asset retirement, legal claims, Zakat and taxes — is added at its closing balance under Art. 24.
- Added nowhere. A provision netted against an asset — inventory obsolescence, credit losses against receivables — is not added at all. Art. 17: only what is shown is taken.
Choosing a treatment that does not match the leg is refused with an explanation naming the article, rather than quietly corrected. All three appear on the list so that the refusal teaches you which one applies and why.
What actually reaches your declaration
Only the end-of-service leg writes anything into the Zakat and tax computation, and it writes at most two Section (ج) adjustment lines:
- Provisions charged to the period's accounts — the period's charge, added back, because ITL Art. 15 makes no provision deductible (banks' doubtful-debt provisions and the two insurance reserves aside). For fiscal years from 2024 the calculator itself applies this to the income-tax leg only and tells you so, because MR 1007 Art. 63(9) accepts provisions formed during the year as a Zakat expense.
- Utilised provisions previously added back — the amounts paid, reducing book profit under IRR Art. 3(6). This one is pushed only if you tick the confirmation, because Art. 3(6) has two conditions no roster can hold: the amount must have been paid or accrued during the year under valid supporting documents, and the provision must have been added back to the tax base in the year it was formed.
The credit-loss matrix and the lease schedule write nothing into the declaration. Attaching them adds their notes to your financial statements and leaves the Zakat and tax numbers exactly where they were.
A push is refused if the case is already filed, if its Mapping step is approved (unlock it first, which runs the usual downstream cascade), or if a newer roster version has landed since the calculation was taken — recalculate and push again. You can withdraw a push, which restores the case's own mapped values.
What we do not model, and why
The end-of-service output names these on the page rather than letting their absence read as a finding:
- Art. 87 — force majeure, or a female worker ending the contract within six months of her marriage contract or three months of giving birth — restores the full award despite a resignation. It turns on facts a roster does not hold. Enter such an employee as an end of contract so the full award is paid.
- Art. 81 (the seven no-notice departures) — the same reason.
- Art. 54 (no award on a probation termination) — the roster has no probation column, and inferring one from a short service span would be a guess.
- Interruptions to continuous service. Statutory leave, exam absence and unpaid absence up to twenty intermittent days in a work year are all continuous service, so the plain span between the two dates is right for them. Unpaid absence beyond that is not automatically continuous — but nothing records it, and guessing would understate a statutory liability.
Employee data, and how to delete it
The end-of-service roster is the only place in RiyalPlus that holds employee-level personal data: names, wages and hire dates. Three things follow, and they are how we handle it:
- It lives in one place. The roster exists only inside the register's version snapshots. It is never copied into an event log, an error report or a monitoring payload — those carry counts and totals only.
- We keep it until you delete it. There is no automatic expiry. A roster stays readable for as long as you keep the register, because it is the evidence behind a number that may have reached a filed declaration.
- Purge destroys it, and you control when. The Purge action on a register permanently blanks the rows in every version of it — names, wages, dates, all of them — and retires the register. It cannot be undone. What survives is the version records themselves, so a figure already pushed into a case still has a provenance chain that resolves, and calculations keep the numbers they already stored. A purged register can never be recalculated and accepts no new imports.
If you are handling a personal-data deletion request under the Personal Data Protection Law, purging the register is the action that satisfies it for this product.
Where the rules come from
The end-of-service schedule stamps the version of the Labour Law table it used on every output. Where a valuation date falls before the earliest date we have verified that table for, we refuse to compute rather than produce a figure from rules nobody checked for that date.
Qawaem deposit (financial-statement filing add-on)
Companies under the Companies Law must deposit their annual financial statements on the Ministry of Commerce's Qawaem platform (via the Saudi Business Center) — separate from the ZATCA declaration. Late deposit carries a personal fine on each manager or board chairman (SAR 2,000–20,000 by company form and capital, +50% for a repeat year). The deadline is 6 months after the fiscal year-end, whatever the legal form.
The Qawaem tab rides your Zakat & tax case and uses the statements the case already generated.
- Open the Qawaem deposit tab on the fiscal-year case. Generate the financial statements first if you haven't (the Export step).
- Confirm the company classification: legal form, capital, number of responsible managers, listed status, and whether an external audit applies (attach the auditor's report if it does). Note: being exempt from audit does not exempt you from filing.
- Run Validate — free. You'll see completeness checks, the deposit deadline, and the exact personal-penalty exposure.
- To export the deposit pack and mark the filing done, activate the Qawaem add-on (the price is shown in the app, once per case).
- Deposit on the Qawaem portal. Direct XBRL file export from RiyalPlus is coming soon — until then, the pack gives you validated statements and figures to deposit manually on the portal.
Journal post-back (year-end entries)
Once a case is computed you still have to put the numbers in the books. The journal post-back turns the filing's provisions into year-end journal entries and writes them into a spreadsheet your accounting system can import. It is free — the entries come from numbers you already paid to compute — and it rides the Zakat & tax case, reached from the Export step.
What it writes today:
- Zakat provision — debit zakat expense, credit zakat provision.
- Income tax provision — debit income tax expense, credit income tax provision.
- Deferred tax and the end-of-service benefit provision movement — only when the tool that produces those figures has run for this case. If it has not, the preview says "no source yet" in its own row rather than quietly leaving the entry out.
These are provision entries, not payments: nothing here credits your bank. And the Zakat Regulations' Article 24 treatment — the zakat provision added back as equity — applies to the zakat base, not to your books; the file does not reclassify the provision into equity, and says so on its face.
- Open Journal post-back from the case's Export step.
- Choose an import layout and confirm the fiscal period end the entries are dated with.
- Enter your own account code for each line. RiyalPlus proposes no chart of accounts and fills nothing in — the codes are yours.
- Review the preview: the entries, the Arabic narration each will carry, and the source of every figure.
- Select Generate, then download the file as CSV or Excel.
Two things to know before you import:
- No layout is vendor-certified. The Qoyod-, Daftra-, Zoho Books- and Odoo-shaped layouts are our best reading of a conventional journal-import grid, not a specification published by those vendors. Review the file, and expect to adjust column names for your own system. The generic layouts are the safest starting point.
- Descriptions are in Arabic. Two duties meet here: the Commercial Books Law requires the books to be kept in Arabic and states no exception, and Income Tax Implementing Regulations Article 56(2) requires adjusting entries to be in Arabic. The English text is a second column on the wide Excel layout, never a replacement.
If you recompute the case after generating a journal, the stored generation is marked superseded. It stays downloadable — it is the record of what you posted — but generate a fresh one before posting again.
Transfer Pricing (TP)
The TP workflow prepares the Controlled Transactions Disclosure Form that ZATCA requires from any entity with related-party transactions — from fiscal year 2024 this includes Zakat payers. It is a standalone yearly workflow in the sidebar, available to everyone.
Creating a TP case
One TP case = one filing entity × one fiscal year. Creating the case is the payment, shown in the app before you confirm: everything inside — parties, transactions, the CbCR step, generation, and exports — is covered. Re-opening the same entity-year never re-charges.
- Open Transfer Pricing and create a case for the entity and fiscal year.
- Optionally link it to the matching Zakat & tax case.
Building the related-party register
- Add related parties (or run detection to propose them from your ownership data and prior filings).
- Confirm or rebut each proposed party — the relationship conclusion is yours; RiyalPlus records the basis.
Recording controlled transactions
- Add each related-party transaction with its type (the form's transaction categories), amounts, and pricing method.
- Run detection against the case's trial balance to catch transactions you may have missed.
The CbCR notification step
Country-by-Country Reporting applies only to constituent entities of multinational groups whose consolidated revenue exceeds SAR 3.2 billion. The scope check is free and most companies see a clean "Not applicable".
- Answer the two scope questions (multinational-group member? revenue threshold met?).
- If in scope, complete the reporting-entity details; the notification is due within 120 days of year-end.
Generating the disclosure pack
- Run classify and analyze, then Generate.
- Export the disclosure PDF, and the accountant's affidavit form where required.
- File the disclosure inside the annual return on the ZATCA portal; keep the signed affidavit with your records.
Withholding Tax (WHT)
WHT applies when a Saudi resident pays certain amounts (services, royalties, dividends, rent, and similar) to a non-resident without a Saudi permanent establishment. Each month with payments needs a return, remitted within the first 10 days of the following month; late payment costs 1% of the unpaid tax per 30 days.
Unlocking a WHT year
One WHT case = one filing entity × one tax year (the price is shown in the app, charged at unlock). It covers all of that year's monthly returns. You can add AEP — automatic extraction of payments from uploaded invoices and remittances — for a price shown in the app, at unlock or any time later; it includes a set number of document reads for the year, then a per-document price for any further document (charged before each read, refunded automatically if the read fails).
The beneficiary registry
The registry holds each foreign beneficiary's rate-determining facts — relationship to you, permanent-establishment status, treaty country, and tax-residency certificate. It persists across years, so next year starts prefilled.
- Add each non-resident beneficiary once.
- Set the relationship and treaty facts. Treaty relief needs a tax-residency certificate.
Recording payments and filing a month
- Open the month and record each payment: beneficiary, payment type, amount, currency, date. With AEP active, upload the invoice or remittance and RiyalPlus prefills the amount, currency, recipient, and date — the payment type and relationship always stay your decision.
- Compute the month — the correct rate per category (and treaty relief where evidenced) is applied per payment. Software has its own three payment types: a use-only licence or subscription (standard or customised) is recorded but not withheld, with the ZATCA software guideline's caveat printed on the line and a warning to review; a payment that also carries a right to modify the software is withheld as a royalty at 15% (Implementing Regulations Article 63(1)); software support and implementation services are withheld at 5% as technical services (Article 63(1) as amended from 15 September 2023).
- Review and mark the month filed, then submit and pay through the ZATCA portal. A month with no payments can be marked nil.
- A filed month is locked — corrections go through the correct open month, not by editing a filed one.
Importing a month's register (institutions)
Any withholding payer with a large register — a bank, a finance company, an insurer, a fund manager or any other — can import a month's payments from its register file (.xlsx) instead of typing them. RiyalPlus proposes the column map; you confirm it and answer its questions; the whole file is validated before anything is saved — one failing row fails the whole import, and every error is listed, never only the first. The month then shows its figures by payment type (gross, rate, tax), the due date and any late fine, three named lists (withheld; not subject, with the article; withheld because a question is unanswered), a PDF that prints every answer you gave and the article behind every line, and the full line list as a spreadsheet. No AI model is used, and a filed month is never touched.
VAT returns
For VAT-registered entities. RiyalPlus computes the return independently from your trial balance and reconciles it against the draft ZATCA pre-fills on the portal, so every difference is explained before you submit.
Creating the VAT container
One VAT case = one filing entity × one year — free to create. Choose the filing frequency: monthly (required above SAR 40 million of annual taxable supplies) or quarterly. The container opens the year's periods.
Working a period
- Ingest — upload or reuse the period's trial-balance movements.
- Classify — accounts are classified into the return's sales and purchase boxes (standard-rated, zero-rated, exports, exempt, imports, reverse charge). Where a judgment is needed — whether a foreign service is reverse-charge, whether an expense is blocked from deduction (entertainment, restricted vehicles, catering, private use) — you assert it. A partly exempt registrant (a bank, a finance company, an insurer, a real-estate lessor) deducts input VAT by Article 51's default ratio: last calendar year's supplies — or this year's estimate when you were not registered last year — applied in every period of the year, including a period with no exempt sales of its own; the year's final return carries a true-up reminder computed from the year's actual figures.
- ZATCA draft — optionally paste the portal's pre-filled figures; every delta between your computed return and the draft is flagged with an explanation.
- Compute — output tax minus deductible input tax, with corrections from previous periods (an understatement below SAR 15,000 goes in the corrections field of the period you discovered it in; a larger understatement needs a corrective return — the threshold applies to understatements only, and over-declarations are simply deducted in a later return) and any credit carried forward. The standard rate is the one in force for the period — 5% up to 30 June 2020, 15% from 1 July 2020 (the VAT Law's standard rate, revised from that date) — and is printed on the return. A period that contains 1 July 2020 is refused (RP-3172): split it at 30 June 2020.
- Review — clear blockers; judge and override advisory warnings with a reason.
Filing a period
- Mark filed — this is the charge point, priced per period and shown in the app. The period locks and the export pack (return figures, citations, reconciliation appendix) becomes available.
- Enter the figures on the ZATCA portal, submit, and pay the SADAD bill.
- A period with no activity still needs a nil return — marking a period nil is also a filing (and is priced the same way).
- A filed period is immutable. To fix an error afterwards: small differences via the next period's corrections field; larger ones via a corrective return on the portal.
RETT (Real Estate Transaction Tax)
RETT is 5% of the value of a real-estate disposal — sale, gift, barter, lease-to-own, long usufruct, or transfer of shares in a real-estate company. It is per-transaction: no periods, no nil filings.
Recording a transaction
- Open RETT and start a transaction. Pick the disposal type — it routes the rest of the flow.
- Enter the deed details, the counterparty, and whether the parties are related (a related-party sale below market value is a ZATCA valuation trigger).
- Enter the agreed consideration. Financing cost from licensed financiers is excluded from the base.
- Assert the fair market value (FMV) — yours or an accredited valuer's. The taxable base is the higher of consideration or FMV; RiyalPlus never invents an FMV.
- For a usufruct over 50 years, the base is a present value — you must provide the discount rate and its basis (an accredited valuer or a ZATCA ruling). The regulation specifies no rate, so RiyalPlus will not guess one.
Exemptions
- If you claim an exemption, pick the category and work through its condition checklist. Every condition must be attested — an unmet or uncertain condition blocks the filing.
- Some exemptions carry conditions that survive for years (for example, a 5-year no-share-disposal lock after an in-kind capital contribution). Confirmed exemptions register those conditions into the claw-back monitor.
Filing and the claw-back monitor
- Compute, review, and mark filed (priced per transaction, shown in the app). Then complete the Property Registration Request on ZATCA's RETT portal and pay on or before notarization (special cases: within 30 days).
- A filed transaction is immutable; corrections or cancellations go through a linked correction/refund request.
- The claw-back monitor (free, for the life of each condition) watches your live exemption conditions with countdowns. If a condition is breached — shares sold inside the lock period, the property changed within the return window — the exemption voids retroactively and RETT falls due within 30 days of the breach. The monitor warns you before and when this bites.
UBO (beneficial-ownership register)
Almost every company under the Companies Law must identify its ultimate beneficial owners — the natural persons who ultimately own or control it — keep a register, update the Ministry of Commerce within 15 days of any change, and confirm the data annually on the anniversary of its commercial registration. Listed joint-stock companies are exempt (with proof). The MoC filing itself is free of charge; RiyalPlus charges for the identification, register, and orchestration work.
Identifying your UBOs
The identification run is free.
- Open UBO for the entity and run the identification.
- RiyalPlus applies the legal criteria in order: 25% or more of capital or voting rights, directly or indirectly (indirect stakes are computed through the ownership chain), then control criteria (power to appoint or remove management, ability to influence decisions), then — if no one qualifies — the manager/board fallback.
- Ownership-based UBOs are derived from your entity data; control-based conclusions and nominee arrangements are yours to assert.
Maintaining the register
- Record each UBO's mandated details (name, nationality, ID, address, the criterion met and its percentage, supporting documents).
- If a shareholder holds shares on someone else's behalf (a nominee), the real person must be disclosed and recorded.
15-day updates and the annual confirmation
- When UBO data changes, RiyalPlus opens an update task with the 15-day countdown; file the update with the reason. Updates are included — they are never charged.
- Ahead of the CR anniversary (you can file up to 30 days early), open the annual confirmation, resolve any register blockers, and confirm — this is the charge point, shown in the app (cheaper for a year in which the register did not change, derived by the platform). The register is snapshotted into the confirmation.
- Export the register pack and submit the confirmation through the Saudi Business Center.
Excise Tax
For producers, importers, and holders of excise goods: tobacco products, energy drinks, e-smoking devices and liquids (all at 100% of the tax base), and sweetened beverages (a per-litre rate by sugar tier). Returns are bi-monthly — six periods a year — due by the end of the month following the period.
Building your product catalog
The catalog is free and is authored once; it drives every period.
- Open Excise Tax and add each product (SKU): its excise category, and for beverages the sugar concentration in grams per 100 ml asserted from the product spec or lab report — RiyalPlus never estimates it, because it alone determines the tier (SAR 0 / 0 / 0.79 / 1.09 per litre).
- For concentrates, powders, and gels, record the dilution so tax is computed on the final ready-to-drink volume.
- For ad-valorem goods, record the retail sales price; the base is the higher of that and the GCC standard price.
Filing a period
- Create the entity's Excise case (free) and open the bi-monthly period.
- Enter the quantities released for consumption per SKU.
- Compute — per-line tax and the period total, with the tier badge per product.
- Review, clear any blockers (for example, a beverage without a sugar spec cannot be tiered), and mark filed (priced per period, shown in the app). Periods with no activity are marked nil.
- Enter the return on the ZATCA portal and pay via SADAD.
Cross-Return Consistency Check
Before you file, this tool compares one filing entity's own returns to each other for the same fiscal year and shows you where they disagree, along the same lines ZATCA compares them itself. It is free, including the memo, and it reads only figures you have already produced in RiyalPlus: nothing is recomputed, and nothing is written back into any return.
What it compares
- Revenue against the VAT returns. Revenue in the Zakat & tax return against the sales disclosed across that year's VAT returns. This is ZATCA's own examination step: on a difference it asks for documents, and absent sufficient ones it adds the difference to adjusted net profit. ZATCA draws on a third source RiyalPlus does not hold — real-estate disposals — so a clean result here is narrower than ZATCA's own check.
- Related-party balances against the TP disclosure. A year-end balance and a year's transactions are not the same measure, so nothing is subtracted here. What is flagged is the one genuinely inconsistent shape: material related-party balances on the statement of financial position while the transfer-pricing disclosure aggregates nothing.
- Cross-border expense against withholding tax — shown for context and never flagged. The Zakat & tax return carries no counterparty-residency tag, so foreign spend cannot be isolated; and withholding tax falls due on payment while the expense is booked on accrual, so the two sides legitimately differ.
Running a check
- Open Tools → Cross-Return Consistency Check.
- Pick the filing entity and the fiscal year. A year appears only when the entity has data for it; a year with fewer than two comparable returns is shown but cannot be run, and says so.
- Adjust the thresholds if you want to — see below.
- Run check. The result is stored, so you can reopen it later exactly as it was, and download it as a memo in Arabic or English.
The thresholds are ours, not ZATCA's
The percentage and amount are a RiyalPlus product setting, chosen so a rounding difference does not read as an exception. No Saudi rule sets a materiality threshold for any of these comparisons, and ZATCA's own worked example adds a 20 %-magnitude revenue difference in full. Widening the thresholds hides nothing: every figure and every difference is still shown, with fewer of them marked for your attention. The memo says all of this on its face.
What the four results mean
- Flagged for review — the two sides differ by more than both thresholds.
- Not flagged by the threshold — they differ by less than at least one of them. This is not a clearance: the tool did not draw your attention to it, which is a different thing from confirming it is right.
- Not evaluated — a side is missing, or the comparison has no comparable basis. The row says which.
- Source out of date — the Zakat & tax case was edited after its last compute, so its figures are superseded. No number is shown, because a difference measured against a superseded figure is a wrong difference.
A stored run is never rewritten. If the case behind it is recomputed later, the run says so with a banner and keeps showing the figures it actually read — run a new check to compare the current ones.
Regulatory Change Report
Pick a filing entity and two fiscal years, and this tool lists the rules that were in force in exactly one of them. A rule in force in both years did not change for that client and does not appear; a rule in force in neither is not their business. What is left is the difference between the year you last filed and the year you are filing now. It is free, including the PDF.
Where the list comes from
Every entry is derived mechanically from the effectivity tags in RiyalPlus's regulatory library — the [[EFF …]] markers that record, for each provision, when it started, when it stopped, its status, and what it replaced. Nothing in this register is written by hand. That is deliberate: a hand-typed list of "what changed in Saudi tax this year" is a set of assertions with no source, and this product does not make those.
The consequence you can act on: every row prints its own tag verbatim, with the file and line it came from. You are meant to read it, not trust it.
How to build one
- Tools → Regulatory Change Report.
- Choose the filing entity. The four date fields fill in automatically with the entity's two most recently completed fiscal years, taken from its own financial-year end.
- Adjust the dates if you need a different pair — a client filing late, or a first accounting period that was not twelve months.
- Build report. It is stored, and it is never rewritten afterwards.
The entity's profile must record a tax mode and a financial-year end. Without them the tool cannot say which regimes are directly relevant, and it says so rather than guessing.
Reading the report
Entries are grouped by topic — zakat base, income tax, VAT, withholding, transfer pricing, RETT, excise, UBO, filing and administration, accounting and reporting. Each group carries a relevance line:
- Direct — the entity's own tax mode puts it in this regime.
- Not established — the profile settles it neither way, so the entries are shown rather than hidden. A zakat-only payer still withholds tax on a cross-border payment, and VAT registration is not a fact this app holds.
Each entry shows Came into force or Ceased to apply, the instrument as the library cites it, the effectivity window in the tag's own notation, the source file and line, and the raw tag.
The three things the report will not tell you
- Which return line a rule touches. The effectivity grammar has no such axis — there is nothing in the source that links a rule to a Form 10 line — so mapping one would be a professional opinion dressed up as a computation. The topic grouping is the honest limit.
- What an unsettled status means. An entry marked Status unknown or Partly superseded shows its status where every other row shows a verdict, and carries a sentence saying why. "Status unknown" is not a synonym for "current", and "partly superseded" does not say which limb was replaced.
- Anything about a date it could not read. Some tags carry an unconverted Hijri date, a date in prose, or no established date at all. Those entries were never tested against either year — and they were not dropped either. They sit in their own Dates that could not be read section at the foot of the report, with their bounds exactly as tagged. Read them yourself.
Two smaller markers:
- Dated by fiscal year, not by date — the tag says
FY2024rather than a day. It was widened to the whole calendar year: exact for a calendar-year filer, an approximation for anyone else. - Where the report is silent, it says so — a report with no changes prints that sentence rather than an empty page.
How current is it?
The register version and its curation date are on the toolbar and on every report and PDF. Until a named reviewer has signed the register off, the tool says so, on the toolbar and in the report's own caveats. When an instrument moves, the register must be re-derived and re-checked — a report built against an older version is a photograph of that older version, and it stays one.
The PDF
Download it in Arabic or in English. It contains the same grouping, the same raw tags, the same caveats and the same register stamp. The unreadable-dates section is truncated in print and says how many rows it held back; the full list is always in the app.
VAT Capital-Asset Register
A place to keep your capital assets and work out, one year at a time, how much of the input VAT you recovered on them has to be adjusted because their use changed. It is free, including both exports.
Read this first: what RiyalPlus knows, and what it does not
RiyalPlus holds the duty, quoted from the VAT Implementing Regulations:
The use of capital assets must be monitored annually over the useful life of the asset. Where usage changes from taxable to non-taxable or vice versa, the Taxable Person must adjust previously deducted Input Tax; adjustments are made each 12 months. — VAT IR Art. 52
It also holds two facts that follow from it: capital assets are excluded from the default recovery ratio in Art. 51(3) (which is why they need their own register), and the record-retention windows — 11 years for movable capital assets and 15 years for immovable, from acquisition.
What Art. 52 sets, and what you supply. VAT IR Art. 52(2) sets the adjustment period: six years for movable capital assets, ten for immovable ones permanently attached to land or real property, counted from purchase — or, where your own accounting practice gives a shorter useful life, that life; any part of a year counts as a whole year. Art. 52(4) sets the yearly adjustment on the fraction of the initial deduction over the period, adjusted to actual use. RiyalPlus does not hold your useful lives or the deduction you took on purchase, so it offers no default for either: every figure it prints is computed from parameters you enter, by the method printed in full on the page and on both exports.
The three parameters you supply
| Parameter | What it is |
|---|---|
| Adjustment period (years) | How many years this asset is adjusted over. Required. There is no default; the tool refuses to compute until every asset has one. |
| Initial recovery % | The share of the asset's input VAT you recovered when you bought it, on the intended use at the date of purchase. Required. |
| Taxable use % (per year) | The share of the asset's use that was taxable in the year you are adjusting. Entered each year. |
The method applied, verbatim:
yearly adjustment = (input VAT on the asset ÷ adjustment period in years) × (taxable-use % this year − initial recovery %)
A positive result is additional input VAT you may recover; a negative result is input VAT repayable to ZATCA. Both belong on the same line of the same return (below).
The schedule labels each window by calendar year, inclusive from the year of acquisition. Art. 52(5) runs each twelve-month window from the start of the tax period in which the asset was acquired, and the adjustment goes in the return for the last tax period inside those twelve months. The number of windows is the same either way — any part of a year counts as a whole year — but where the two diverge, measure each taxable-use percentage over the statutory twelve months rather than the calendar year. A year outside the window is refused rather than adjusted "close enough".
How to use it
- Assets. Create a register for one filing entity, then import the
.xlsxlist you already keep (Excel 97-2003.xlsis not supported — save as.xlsxfirst). The columns are matched automatically, including Arabic headers; check the proposal before you save. Fill the Adjustment period and Initial recovery % columns — they are marked required, and the register tells you how many assets still need them. Saving stores a new version. Register versions are immutable: the previous one stays readable, so any schedule you exported can always be traced back to the exact rows it was computed from. - Annual use. Pick the year and enter each asset's taxable-use percentage for it, then compute. An asset you leave blank is reported as awaiting a percentage and is not included in the total — a blank is never read as "unchanged".
- Schedule. Review the year's total, download it as a PDF or a workbook, and finalise the year when it is the figure you are filing. Finalising locks the percentages; re-open the year if you need to correct them.
Where the number goes — and who puts it there
RiyalPlus never writes into a VAT return. Enter the year's total yourself on the corrections line (14) of the final VAT return of that calendar year. That is the same place RiyalPlus already points to for the Art. 51(6)-(7) year-end recovery-ratio true-up, and the reason it is not automatic is that the adjustment is a separate obligation you are attesting to, computed from parameters only you can verify.
Record retention
Importing your assets raises a retention reminder for each one: 11 years from acquisition for movable capital assets, 15 years for immovable. They appear on the Tools hub alongside your other deadlines. Reminders for an asset that a later import removed from the register are kept — the duty is anchored on the acquisition, not on what the list contains today — and marked as no longer in the current version.
Pinning a tool to the sidebar. On the Tools hub, every tool that has its own workspace carries a small pin at the top corner of its card. Pinning adds the tool as a row under "All tools" in the sidebar, in the order you pinned; the pin turns gold and clicking it again removes the row. You can pin up to four tools. Pins are remembered on the device and browser you set them on, not on your account, so they do not follow you to another computer. A tool that lives inside the filing wizard (the explanation letter, what-if scenarios, the journal post-back, the deferred-tax note) has no pin: it opens from the case it belongs to. One caveat travels with those dates: the source material records a conflict — one ZATCA guideline says 16 years for movable capital assets where two others say 11. RiyalPlus shows 11 (two sources against one) and prints the conflict beside the dates rather than resolving it silently.
What can go wrong
| Message | What it means |
|---|---|
| RP-3091 Adjustment parameters missing | An asset has no adjustment period or no initial recovery percentage, or a taxable-use percentage is not a number between 0 and 100. There is no default to fall back on — enter the figures. |
| RP-3092 Capital asset not found | A percentage was entered for an asset the register's current version does not contain (usually after a re-import). |
| RP-3093 Year already finalised | Re-open the year before changing its percentages. |
| RP-3094 Year outside the adjustment period | The year falls outside that asset's window as you entered it. Check the acquisition date and the period. |
| RP-3056 Register rows failed validation | The sheet could not be stored. The message lists the first few problems and the total count; row numbers are the rows of your sheet. |
RP-1042 .xls not supported | Save the workbook as .xlsx and upload again. |
PE & Treaty-Relief Screener
For one beneficiary on a filing entity's withholding-tax roster, this tool applies the domestic permanent-establishment test, sets out which relief route is open and what each route needs on file, and produces a memo you can put in a file. It is free, including the memo.
What it decides — and what it deliberately does not
- It concludes the domestic leg. Income Tax Law Art. 4 is a closed list: a permanent place of activity (including activity carried on through an agent), a construction or assembly site with its connected supervision, a natural-resource survey installation, the fixed base of a non-resident individual, a licensed branch, and the deemed establishment of a non-resident partner in a resident partnership — read against Art. 4's own list of places that are expressly not one. The result names the article each conclusion rests on.
- It never concludes the treaty leg. The treaty section always reads "undetermined", states no treaty rate and reaches no day-count conclusion. RiyalPlus holds no curated register of treaty texts, treaty rates or treaty day-count thresholds, and the count is treaty-specific — 182 days, 183 days and "six months" all occur, so it must be read from the agreement that applies. What the tool gives you instead is the four treaty establishment types to test and your own recorded facts to test them with.
- "No permanent establishment" is not "no tax". Source of income is settled independently, and withholding on the gross is a separate question. Where the applicable agreement characterises technical services under the royalty article — Egypt, Ethiopia, Gabon, Georgia, Malaysia, Morocco and Vietnam — the tool says so explicitly, because a clean "no PE" there still leaves withholding running.
- It never makes the election. Relief at source requires the withholder's own acceptance of full liability for any under-withholding and its penalties. That is your decision; the tool reports whether the route is open on the facts you asserted and never takes it for you.
Running a screening
- Open Tools → PE & Treaty-Relief Screener and pick the filing entity. Its withholding-tax beneficiaries appear, each showing the conclusion of its most recent screening (or "Not screened").
- Open a beneficiary. The questionnaire is grouped: the threshold question, presence in the Kingdom, fixed place and branch, the agent, the payment itself, the relief-at-source conditions, and documents on file. Three answers are pre-filled from the roster record — change any of them.
- Answer every question. A question left blank is not a "no", so the form will not submit until each one is answered.
- Run the screening. The outcome appears immediately and is stored.
Two things worth knowing about the questions
- Days are days on the ground. "Days physically present in the Kingdom" counts days your personnel were actually in the Kingdom. Remote delivery never counts, however long the engagement runs — and days billed or days the project was live are the wrong measure.
- Every fact is yours. Residence, days on the ground, the group relationship and the project connection appear on no payment document. They are your assertions; the platform verifies none of them, and the memo says so.
The memo, and screening again
The memo is a working paper you adopt, not a tax opinion. It prints the facts you asserted, the article behind each conclusion, the documents each route needs, and what is left open — and it names the edition of every rule table it used. Download it in Arabic or English.
Screenings are append-only: screening again adds a new one and leaves the earlier one exactly as it was produced, because you may already have relied on it. If the beneficiary's roster record changes afterwards, the stored screening does not change with it — the page tells you the record moved, and whether the change is one that could affect the conclusion.
One caveat on the procedure
The two relief routes come from the Implementing Regulations, but the procedural circular behind them is recorded in our reference set with an unconfirmed status. Verify the procedure ZATCA currently applies before relying on the mechanics.
Assessment & Objection Workbench
A workbench for disputing a ZATCA assessment. You upload the notice, RiyalPlus reads the adjustments out of it as drafts, you confirm every citation and decide accept or contest on each item, and it assembles an Arabic objection-letter draft from the items you contested.
For a bank, a finance company, a refinancing company or a CMA-licensed financing fund, the workbench also splits a mixed notice's payment condition into the Zakat part (worked out) and the income-tax part (not worked out, with the reason), carries a ticked grounds checklist on each line, and prints under each contested line the articles you rely on, in the article's own Arabic words. The price does not change: one charge at "Read the notice" covers everything after it.
It is not a filing tool. RiyalPlus does not submit anything to ZATCA, does not tell you whether an item is right or wrong, and does not sign anything. The letter it produces is an unsigned working draft; submitting the objection — through ERAD or the manual channel — is yours.
What it costs
Priced once per notice, shown in the app before you confirm. The charge happens the moment you press Unlock and read the notice, and it covers everything after that for that dispute: unlimited item edits and decisions, evidence attachments, the deadline ladder, and the objection letter, generated and regenerated as often as you like. A different assessment is a different dispute and a new charge.
Creating the container and uploading the notice are free. If the reading fails on our side the points come back automatically. If it succeeds but finds nothing — a scan too poor to read — the points do not come back, because the reading really happened; instead you upload a better scan and read it again at no new charge, because the dispute is already unlocked.
1 · Notice
Upload the assessment as a PDF, up to 20 MB and 60 pages.
Every upload is kept. If ZATCA reissues the notice, or you get a cleaner scan, upload it — it is added as a new document and the old one stays readable. Nothing is ever replaced.
Enter the notice date in the Gregorian calendar. RiyalPlus does not convert Hijri dates. Convert on the Umm al-Qura calendar before entering it: a one-day slip moves a real legal deadline, and there is no version of that mistake that is harmless.
2 · Items
Each adjustment the notice asserts appears as a card with:
- the item text as printed;
- the article as the machine read it, shown separately and marked as such, beside an empty field for the citation you confirm. It is deliberately not pre-filled — a pre-filled field gets confirmed by inertia;
- the assessed amount, and a field for the amount as filed. Leaving it empty means "no figure entered", which is not the same as zero and is never shown as a difference;
- accept / contest, and a free-text reasons box that is printed in the letter exactly as you wrote it.
RiyalPlus never recommends accepting or contesting. It shows the notice's figure, your figure, the difference and the citation; the judgement is professional and it is yours.
An amount the reader could not make out is left blank rather than guessed, and a citation it was unsure of is flagged. There is no canonical list of Saudi regulatory article numbers to check a machine reading against, which is exactly why the confirmation step exists.
Once you record the objection as filed, the item decisions lock. They are what was filed.
3 · Timeline
The objection and appeal ladder, computed from the notice date: 60 days to object, 90 for ZATCA to decide, 30 to request an internal settlement, 30 for the Settlement Committee, 60 (extendable by 60, else deemed rejected) for the settlement decision, 30 to take a grievance to the Resolution Committee, and 30 to appeal.
These are not a countdown, and the page will not give you one. Every stage shows two dates — the earliest defensible one and the plain statutory one, a day apart — with the rule they come from beside them, because the consequence of being a day late is that the decision can no longer be challenged anywhere. Check them against the notice.
A window whose starting event has not happened yet shows no date at all. When you record the objection as filed, the 90-day window gets its anchor and appears.
The page also states what it will not tell you:
- The payment condition. For zakat it is 10–25 % of the zakat on the items you contest, or a guarantee for that same amount, with the items you accept paid in full. (Older ZATCA manuals give 50 %; that figure is wrong.) For income tax the percentage is not computed at all — the governing instrument is not held, and guessing at a payment condition is how a client underpays and loses the objection.
- The settlement procedure. The durations are stated; the rules governing the Settlement Committees are held but not yet graded, so the page does not describe them.
- The appeal bar. Where the payable amount does not exceed SAR 50,000 there is no appeal and the first-instance decision is final. If no payable amount is recorded, the bar has not been checked — the page says so rather than assuming either way.
- The late-payment fine runs from the return's due date to payment regardless of the dispute.
4 · Letter
The objection-letter draft, in Arabic, assembling the contested items, their figures and differences, and the reasons you wrote for each.
It will not generate while any contested item still carries an unconfirmed citation. It prints the enumerated contents an objection must have — memorandum of reasons, taxpayer name and number, decision number, period, documents, the representative's authorisation, proof the accepted items were paid, proof of the part-payment or guarantee — as an unticked checklist, because RiyalPlus cannot verify any of them.
Every generation is stored separately and numbered. Regenerating does not overwrite: the draft you actually filed stays retrievable exactly as it was.
The document says on its face that it is an unsigned draft and is not a filing.
Where your files go
The notice and every evidence file are kept for as long as your account exists — unlike the Invoice Reader, where uploads are deleted after processing. A ZATCA notice is the primary evidence in a dispute that may run for years through several committees, and you must be able to re-read the original stamped page long after the fact. Nothing in this tool deletes them; deleting your account deletes them with it.
Contract Disclosure
What it does. You upload the contracts your organisation has signed with private-sector parties; RiyalPlus reads the disclosure fields out of each one, applies the SAR 100,000 floor, computes the reporting deadline, and gives you an Excel dataset to file. Priced per contract document, shown in the app.
A financial institution that reports its contracts quarterly, in the hundreds, gets one Excel dataset per batch to file itself — each contract with the facts the Law asks for, its threshold verdict and its reporting date — plus a list of every date owed. A batch of contracts with the institution's own customers is refused at upload, before anything is stored or read by a model: this tool reads vendor and supplier contracts only.
What it does not do — read this first. RiyalPlus does not submit this disclosure to ZATCA. There is no published submission channel or file format for it, so the deliverable is a dataset you file yourself through whatever channel the Authority specifies. Nothing in the product says "submitted" or "filed", because nothing in the product does either.
The obligation this serves
Article 58(2)(b) of the Income Tax Implementing Regulations requires any person — natural or corporate, taxpayer or not, including charitable bodies, endowments, institutions, public authorities and government bodies — to give the Authority basic information on every contract concluded with a private-sector person, except contracts worth less than SAR 100,000, together with any amendments, within three months of signature. You must also notify the Authority of the date execution of a contract stops, and what rights each party then has against the other, within 30 days of the stoppage. The Authority may ask for a copy of the contract.
Anyone who breaches this obligation is jointly liable with the taxpayer for the tax due on the contract and any fines on it. In government departments and public institutions, finance directors and project directors are personally responsible for notifying on time (Art. 58(4)).
The fields themselves come from Article 61(c) of the Income Tax Law: the name and address of each party, the subject of the contract, its value, its financial terms, and the dates of commencement and completion of performance. That is the whole list, and it is the whole of what this tool extracts — deliberately. Tax identification and commercial registration numbers are not collected: they appear in no limb of the duty, and an export carrying them would look authoritative about a field ZATCA never asked for.
The walk
- Create a batch and name it (the name appears in the exported workbook and in the completeness statement, so name it after the set: "Q1 2026 supply contracts", not "batch 3").
- Upload one contract per PDF, up to 60 pages and 20 MB each. Uploading is free. A file over 60 pages is refused with the instruction to split it — a 200-page file is almost always a bundle of contracts, and one bundle would otherwise collapse many disclosure records into one.
- Extract. This is where you are charged: priced per document, shown and confirmed before anything is deducted. If a contract fails on our side, its own charge comes back automatically.
- Review every document. This is the real work, and it is free: each field shows what the model read beside a box you can correct, and each party's name and address are editable. A document is not part of the dataset until you confirm it.
- Export once every document is confirmed. The workbook rebuilds from your confirmed record each time you download it.
The signature date and the Hijri calendar
The three-month window is computed from a Gregorian signature date and from nothing else. If the contract is dated in Hijri, convert it on the Umm al-Qura calendar and enter the Gregorian date; the product will not convert it for you and will not let you confirm the document until it has one. This is deliberate: a Hijri date read as Gregorian moves the deadline by roughly three years — in the late direction, which would leave you inside a joint-liability window believing yourself on time.
Amendments and stoppages
An amendment and a stoppage of execution are each recorded as their own dated event on the contract, and each raises its own deadline: an amendment runs three months from its signature, a stoppage 30 days from the stoppage. Two amendments to one contract are two open windows, not one.
What the export can and cannot tell you
The workbook opens on a disclaimer sheet, and the first thing it says is the completeness statement: this dataset covers the N documents uploaded to this batch; it cannot assert that a period's disclosure obligation is discharged. The tool knows the contracts you gave it and nothing else — a contract nobody uploaded is invisible to it. Whether a given document is legally "a contract concluded with a private-sector person" is your judgement, not the tool's.
Where your counterparties' data lives, and how to erase it
This is the only product in RiyalPlus whose stored record holds the personal data of third parties — the names and addresses of counterparties who are not our customers. Two things follow:
- the uploaded PDFs are transient: they are deleted as soon as the batch finishes processing, and a batch you never process is swept after 48 hours;
- the extracted fields are kept so the workbook can be regenerated — until you erase them. Erase data on a batch permanently blanks the extracted and corrected fields. The batch, its charge and its deadlines remain, so the record that a dataset was produced survives; the people named in it do not. Download the workbook first if you still need it.
If something goes wrong
- A contract we could not process is marked failed and its charge is refunded automatically. Upload it again as a new document when you like.
- A contract we read but found nothing in is charged, and is not refunded: the model was run and answered. Type the fields in on the Review step — that is free — or upload a clearer copy as a new document, which is charged again.
- Not enough points stops the extraction before anything is deducted; top up and try again.
Points and billing
The Invoice Reader (standalone)
Upload purchase/sales invoices — PDFs or photos, including multi-invoice scans — and receive one structured Excel workbook: parties, amounts, VAT, and a ZATCA QR check per invoice, with a per-document report sheet.
- Create a batch (free; unprocessed drafts expire after 48 hours) and upload the files.
- Read the live quote — files, pages, and the exact cost, shown in the app. The price is locked before anything runs.
- Confirm to start. Extraction runs in the background; you can leave the page.
- Download the Excel when ready. If some documents could not be read, the report sheet says which and why; if nothing at all could be extracted, the batch's points are refunded automatically.
Buying points
- Open Billing › Buy points.
- Choose an amount. Larger top-ups earn bonus points — the Buy points page shows the bonus ladder and the minimum top-up.
- Pay at checkout (15% VAT applies). Points land in your balance immediately after the payment confirms, and a tax invoice is issued for the purchase.
Your ledger and invoices
- Billing shows your balance, every point movement (what was spent or added, and when), and your tax invoices.
- If a trial-balance run fails on our side after a charge, the points are refunded automatically — you'll see the refund in the ledger.
- Refund and credit-note questions are handled by our team directly — contact support.
Team accounts
Members, roles, and seats
- Open Team to invite members by email. Team seats are free — add up to 25 members at no charge (past that, contact support).
- Assign a role per member: Admin (manages members, billing, and settings), Member (works on assigned clients' filings).
- Assign members to specific filing entities to control who can see and modify each client's work. Spending by members is attributed in the points ledger.
Help and your data
Getting help
- Open Support from the sidebar — a full page with your conversation history. Ask the assistant anything about the product; it answers from these help articles.
- On any page, the Support assistant bar at the bottom answers with the context of where you are.
- If something needs a person, the conversation is escalated to a ticket and our team follows up by email. You can also write to support@riyalplus.ai.
- Payment and billing matters are always handled by the team, not the assistant.
Exporting or deleting your data
- To get a copy of your data or to delete your account, send a support request.
- On deletion, personal information is removed; anonymised records may be kept for statistics and compliance.

