In this article
- What donor fund accounting must prove
- Build the right analytic structure in Odoo 19
- Use four analytic plans where restrictions justify them
- Make the allocation compulsory at the transaction point
- Treat shared costs as a policy decision
- Configure budget versus actual reporting by donor
- Step-by-step budget setup
- Create an auditable grant-control environment
- Tax and exemption controls remain country-specific
- South Africa: Section 18A data and ring-fencing
- Kenya: exemption rules changed in 2024
- Implementation checklist for CFOs and operations leaders
- Frequently Asked Questions
- Can Odoo track restricted funds by donor and grant?
- Does Odoo have a separate statutory grant-management module?
- What is the difference between Achieved and Committed in Odoo budgets?
- Can we allocate one expense across several donor grants?
A finance manager closes the month and finds three versions of the same donor report. One comes from the spreadsheet kept by programmes, one from the accounting team, and one from procurement. The figures differ because purchase commitments, shared costs and restricted income were not coded consistently when the transactions were entered.
Donor fund accounting Odoo addresses this control problem when the implementation uses Odoo 19 analytic accounting properly. For organisations assessing NGO ERP / grant management software, the important question is not whether a donor name can be typed into a note. It is whether every relevant posting can be identified, reviewed and reported against the right restriction, programme and budget.
We configure Odoo as a unified finance and operations system for this purpose. The controls sit in analytic plans, mandatory allocation rules, approval workflows and retained source documents. Odoo provides the accounting capabilities. The NGO must define the policy and apply it consistently.
What donor fund accounting must prove
A restricted donation is not simply income with a label. It creates an obligation to use and report funds according to the donor agreement. Finance needs to show the income received, the expenditure charged, the balance available and the commitments already made against that fund.
An auditable report should answer four questions for each donor or grant:
1. What funding was received and under which restriction?
2. Which confirmed accounting entries have been charged to it?
3. Which approved purchase commitments have not yet become supplier bills?
4. Is each shared cost split using a documented allocation basis?
Odoo 19 supports this structure through analytic accounting. Its official documentation confirms that income and costs can be tagged to analytic accounts, and that analytic plans can be mandatory for specified document types, accounts, products or companies. That mandatory control matters because a report is only reliable when coding happens at source.
The most common failure we see in grant reporting design is using a donor name in a memo field. A memo is useful context, but it does not enforce a posting rule, prevent omissions or create a dependable reporting dimension. A finance officer can forget it, spell it differently or use an old grant reference. Mandatory analytic dimensions are the proper control.
Build the right analytic structure in Odoo 19
We recommend separating the dimensions that management needs to analyse. Combining donor, grant and programme into one long code may look tidy at first, but it makes reporting harder when one donor supports several programmes or a programme has several donors.
Use four analytic plans where restrictions justify them
A practical structure has the following analytic plans:
| Analytic plan | What it records | Why it matters | | Donor | The organisation providing funds | Lets finance report the full relationship where one donor has several awards. | | Grant or Restricted Fund | The specific agreement, award or restriction | Prevents different funding agreements from being pooled. | | Programme | The delivery activity or project | Gives operations visibility of programme costs across funding sources. | | Cost Category | A donor-reporting category where needed | Supports a consistent mapping between the ledger and donor budget lines. | Odoo 19 allows multiple analytic plans and analytic accounts. We set mandatory allocation rules on grant-funded revenue, supplier bills, employee expenses and purchase orders. Purchase orders matter because management needs visibility before a bill is posted and cash leaves the bank.
Do not build four analytic plans because a template says so. If an organisation has one unrestricted funding stream and no separate programme reporting requirement, a smaller structure can be stronger because users are less likely to select the wrong code. Add a dimension only when a report, donor condition or approval decision requires it.
Make the allocation compulsory at the transaction point
A restricted-fund control is weakest when coding is left until month-end. By then, the person entering the bill may no longer remember which grant benefited, and programme staff may be unavailable to confirm the allocation.
We apply mandatory analytic allocation to the accounts and documents that create grant exposure. For example, a programme vehicle repair bill may require both a Grant allocation and a Programme allocation. A general office bill may be excluded until the approved allocation calculation is prepared, because forcing an arbitrary split is not a control.
Take an illustrative education NGO with twelve staff, a US$40,000 monthly payroll and two donors funding the same field team. Its finance officer initially split payroll evenly between the grants because the spreadsheet had no better basis. That created a US$4,000 monthly distortion when one donor funded six field officers and the other funded only two. The NGO would need a documented basis, such as approved timesheets or contracted staff assignments, then configure the corresponding analytic distribution. What it would do differently is agree the allocation policy before the first payroll journal, not when the donor asks for a report.
Treat shared costs as a policy decision
Odoo can apply percentage distributions, but software cannot establish whether a split is fair or permitted. The allocation basis must be documented, approved and reproducible.
A reasonable basis could be headcount, floor space, vehicle usage or verified staff time, depending on the expense and the grant agreement. The important point is that finance can explain why a 60% and 40% split was used, and repeat the calculation next month.
Do not allocate shared costs merely to spend down a grant balance. That creates an audit risk and can breach the funding agreement. Keep the policy, calculation and supporting evidence with the source record under the organisation’s retention rules.
Configure budget versus actual reporting by donor
A donor report should not confuse spending with commitment. In Odoo 19 analytic budgets, an open budget displays Budgeted, Committed, Achieved and Theoretical figures. Odoo’s official budget documentation defines Achieved from confirmed journal entries. Committed includes confirmed, unbilled purchase orders.
That distinction is central to management decisions. A project manager may have spent only part of the grant in the ledger, while approved purchase orders have already consumed most of the remaining budget.
| Measure in Odoo 19 | What it means | Management use | | Budgeted | The approved analytic budget amount | The authorised spending ceiling or plan. | | Achieved | Confirmed journal entries | The recorded accounting position, not cash spent. | | Committed | Confirmed unbilled purchase orders | The expected exposure already approved through procurement. | | Theoretical | Budget position over the defined period | A planning view against the budget schedule. | Calling Achieved “cash spent” is a recurring reporting mistake. A confirmed supplier bill can be achieved before payment, and a payment can settle an earlier bill. Keep the report label accurate so trustees and donors understand what they are reviewing.
Step-by-step budget setup
5. Approve the donor budget before loading it. The budget in Odoo should reflect the version authorised by the donor or board, because a changed spreadsheet after approval will not provide an auditable baseline.
6. Map each budget line to the relevant analytic dimensions. A grant budget for training costs may require the specific restricted fund, programme and cost category. This lets Odoo compare like with like.
7. Create budget periods that match reporting obligations. A quarterly donor report needs budget periods that allow a quarterly comparison, rather than one annual total with no period control.
8. Require analytic coding on purchase orders and accounting entries. This makes commitments and achieved expenditure visible in the same reporting model.
9. Review exceptions before sending a donor report. Investigate unallocated transactions, overspend, negative remaining balances and unusual shared-cost distributions. A report can be technically correct and still expose a policy breach.
10. Export the Budget Report with supporting detail. Odoo 19 supports filters, drill-down and export. Retain the exported report with the underlying approval and source documents for the reporting period.
Consider an illustrative health programme with a US$250,000 annual grant and a US$60,000 equipment budget. By month seven, confirmed bills showed US$31,000 achieved, so the programme manager believed there was substantial room left. Procurement had, however, confirmed US$24,000 in unbilled purchase orders. The Committed figure showed that only about US$5,000 remained before the budget line was fully exposed. In this case, a budget report prevented a new order that could have pushed the programme beyond its approved amount.
Create an auditable grant-control environment
Odoo Accounting includes Audit Trail, General Ledger, Analytic Report and Budget Report capabilities. Those functions are important, but they do not automatically create a compliant grant-control environment.
We treat the following as implementation requirements, not optional administration:
● Approval workflows for budgets, purchase orders, expenses and journal entries.
● Donor-report templates that define the required categories and reporting dates.
● Source-document retention rules for agreements, receipts, invoices, timesheets and allocation schedules.
● Restricted-fund policies covering coding, reallocations, shared costs and overspend approval.
● A monthly review of transactions posted without the required analytic dimensions.
The step organisations often skip is testing the report with a real donor agreement before go-live. Take one current grant, enter representative income, an expense, a purchase commitment and a shared cost. Then ask whether the resulting Budget Report answers the donor’s exact questions. If it does not, change the configuration before users process a full month.
Multi-entity organisations need an additional decision. If related entities receive and spend funds separately, analytic reporting must not be used to blur legal-entity boundaries. Configure the relevant companies, approval rights and reporting scope clearly. Group visibility is useful, but each entity still needs an auditable record of its own transactions.
Tax and exemption controls remain country-specific
Restricted-fund tracking does not establish tax exemption, donation deductibility or receipt validity. These are separate legal questions, and Africa has no single NGO tax regime.
South Africa: Section 18A data and ring-fencing
For South African organisations approved under Section 18A, donations for qualifying activities must be ring-fenced and records must identify the donation and its use. This makes a donor and restricted-fund analytic structure especially useful, but the Odoo configuration must match the organisation’s actual SARS approval and activities.
SARS expanded Section 18A receipt and IT3(d) data requirements from 1 March 2026, including additional information for donations in kind. The date matters because receipts and data processes designed before that date may not contain the information now required.
SARS requires IT3(d) submissions by 31 October for the period from 1 March to 31 August, and by 31 May annually. These are regulator deadlines, so finance should test data completeness before the submission window rather than reconstruct donor records afterward.
Do not issue a Section 18A receipt merely because a donation was restricted to a charitable programme. Confirm SARS approval and use the required reference number. Restriction, exemption and deductibility are related operational issues, but they are not the same legal status.
Kenya: exemption rules changed in 2024
Kenya’s Income Tax (Charitable Organisations and Donations Exemption) Rules, 2024, issued through Legal Notice No. 105, took effect on 18 June 2024. Existing exempt organisations had to demonstrate compliance by 18 June 2025 or risk revocation.
For a Kenya-based NGO, the control implication is practical. Keep the exemption evidence, governance records and donation documentation outside the accounting narrative, while using Odoo analytic reporting to support the financial trail. The Kenya Revenue Authority rules affect exemption status. They do not mean every donor restriction can be handled through a single accounting memo.
For tax localisation outside South Africa and Kenya, confirm the current position with the applicable authority and adviser before designing receipts or statutory reports. The correct accounting structure can support compliance evidence, but it cannot replace a local legal determination.
Implementation checklist for CFOs and operations leaders
Before starting an Odoo implementation, we ask finance and programme leadership to agree these decisions:
| Decision | Evidence needed before configuration | Why it affects ROI | | Grant hierarchy | Signed agreements and award references | Prevents duplicate or vague grant codes. | | Mandatory coding scope | Chart of accounts, expense flows and purchase process | Stops reporting gaps at the point of entry. | | Shared-cost basis | Approved policy and calculation method | Reduces rework and disputed donor charges. | | Budget ownership | Approved budgets and variance authority | Makes real-time exception reporting actionable. | | Reporting pack | Donor templates, board pack and statutory needs | Avoids building reports that nobody can use. | | Tax status controls | Current approvals, receipt requirements and filing calendar | Keeps tax localisation separate from grant restrictions. | A certified implementation partner should translate these decisions into roles, analytic plans, document workflows and report tests. The value is not a larger chart of accounts. It is reliable visibility from the purchase request through to the donor report.
Frequently Asked Questions
Can Odoo track restricted funds by donor and grant?
Yes. Odoo 19 analytic accounting can tag income and costs to analytic accounts. We recommend separate Donor and Grant or Restricted Fund plans where reporting needs both dimensions, then make allocation mandatory for relevant documents and accounts.
Does Odoo have a separate statutory grant-management module?
Odoo 19’s core control is analytic accounting and analytic budgets, rather than a separate statutory grant module. The organisation must configure approval workflows, donor-report templates, retention rules and restricted-fund policies around those capabilities.
What is the difference between Achieved and Committed in Odoo budgets?
Achieved is based on confirmed journal entries. Committed includes confirmed unbilled purchase orders. Use both figures because recorded expenditure alone does not show the full budget exposure.
Can we allocate one expense across several donor grants?
Yes, Odoo supports analytic distributions. Use them only where an approved, documented allocation basis supports the split. A percentage entered only to clear an unallocated expense is not defensible in a donor review.
Odoo 19 gives NGOs the reporting components. The implementation decision is whether your policies, coding controls and source records will stand behind the figures. Request a Consultation through our NGO ERP / grant management software service to book an ERP Readiness Audit.