यह लेख वर्तमान में केवल अंग्रेज़ी में उपलब्ध है। अनुवाद जल्द आ रहा है।
Odoo Kenya Localization 2026: KRA, eTIMS, VAT & Withholding Setup
The Kenya Revenue Authority (KRA) operates one of East Africa's most ambitious electronic tax compliance programs. Through eTIMS (Electronic Tax Invoice Management System), Kenya requires every VAT-registered business to issue invoices through KRA-authorized solutions, with real-time data transmission to KRA servers. The mandate became fully operational on 1 September 2023, replacing the legacy ETR (Electronic Tax Register) regime, and continues expansion through 2025-2026 to cover smaller businesses and additional transaction types. Odoo's Kenya integration requires connecting to KRA's eTIMS Online or eTIMS API, typically through partner solutions or custom modules.
Key Takeaways
- Kenya Revenue Authority (KRA) administers VAT (16%), Corporate Tax (30%), PAYE, and withholding
- eTIMS mandatory since September 2023 for all VAT-registered taxpayers
- Three eTIMS deployment options: Online, Lite (web), and OSCU (Online Sales Control Unit) for retail
- Odoo Kenya localization typically combines
l10n_kechart with custom eTIMS connector- Withholding tax 5-30% on services, royalties, dividends, with treaty rates for non-residents
- Statutory reports include monthly VAT (VAT3), monthly PAYE, monthly WHT, annual CIT
- KRA PIN (11 chars) required for all transactions; eTIMS device ID per branch
Kenya Tax Framework Overview
KRA enforces:
- VAT: 16% standard rate; 8% on petroleum products; 0% on exports and certain agricultural inputs; exempt for healthcare, education, financial services
- Corporate Income Tax: 30% standard for resident companies; 37.5% for non-resident; preferential rates for Special Economic Zones (10% for first 10 years)
- PAYE (Pay As You Earn): Progressive personal income tax with brackets up to 32.5%
- Withholding Tax: 5-30% on various payments depending on resident/non-resident status
- Excise Duty: On specific goods (alcohol, tobacco, cosmetics, petroleum, telecom services)
- Digital Service Tax (DST): 1.5% on digital services from non-residents (refined to Significant Economic Presence Tax in 2025)
Required Odoo Localization Modules
| Module | Purpose | Source |
|---|---|---|
l10n_ke | Kenya chart of accounts and VAT | Community |
l10n_ke_account | Localized financial reports | Community / Custom |
l10n_ke_etims | KRA eTIMS connector | Custom / Partner |
account_reports | Tax report engine | Enterprise |
hr_payroll_l10n_ke | PAYE, NSSF, NHIF, NITA | Community / Custom |
eTIMS integration is typically built as a custom module or sourced from local Kenyan partners. Major eTIMS solution providers include Tremol, Comply, EGS Kenya, Solbox, and others — most have published Odoo connectors or can develop one to specification.
Chart of Accounts Setup
Kenya's chart follows IFRS as adopted by ICPAK (Institute of Certified Public Accountants of Kenya). The community l10n_ke chart provides:
- 1xxx: Assets (cash, debtors, stocks, fixed assets)
- 2xxx: Liabilities (VAT payable, PAYE payable, NSSF/NHIF, withholding)
- 3xxx: Equity
- 4xxx: Revenue
- 5xxx: Cost of sales
- 6xxx-7xxx: Operating expenses
Configure the company record with:
- KRA PIN (11 alphanumeric characters, e.g., P051234567Z)
- Certificate of Incorporation number
- VAT registration status (mandatory above KSH 5 million annual turnover)
- eTIMS device ID per branch/POS
- Excise duty registration if applicable
VAT Configuration
Configure VAT tax records:
| Tax Name | Rate | Type | Notes |
|---|---|---|---|
| VAT 16% Output | 16% | Sales | Standard |
| VAT 8% Output (Petroleum) | 8% | Sales | Petroleum products |
| VAT 0% Output (Exports) | 0% | Sales | Exports, qualifying agricultural |
| VAT Exempt | 0% | Sales | Healthcare, education, financial |
| VAT 16% Input | 16% | Purchase | Recoverable |
| VAT Reverse Charge | 16% | Purchase | Imports of services |
Reverse charge applies to imports of services from non-residents — the recipient self-charges VAT and may simultaneously claim it as input (cancelling out for fully taxable activities).
eTIMS Integration
eTIMS deployment options:
| Option | Use Case | Integration |
|---|---|---|
| eTIMS Online | Web-based for low-volume | Manual entry / portal |
| eTIMS Lite | API for SMEs | REST API |
| OSCU (Online Sales Control Unit) | High-volume retail | Hardware device + API |
| Multi-paying Modes | Hybrid | Combination |
Most Odoo deployments use eTIMS API integration. The flow:
- Invoice approved in Odoo
- eTIMS connector formats payload per KRA spec (signature, items, taxes)
- Submits to KRA eTIMS API
- KRA validates and returns:
- SCU Information (Receipt Number, Date, Time)
- Internal Data (signature)
- Receipt Signature (verification code)
- QR Code data
- Odoo stores eTIMS metadata and prints invoice with QR code
Required fields:
- KRA PIN (seller and buyer)
- Item codes (Kenya Standards Bureau or KEBS-aligned classifications)
- Tax breakdown
- Receipt label (NS/NR for normal sale/refund, etc.)
def submit_to_etims(self, invoice):
payload = {
'tin': invoice.company_id.l10n_ke_pin,
'bhfId': invoice.company_id.l10n_ke_branch_id,
'invcNo': invoice.name,
'orgInvcNo': 0, # 0 for new invoice; original number for refund
'custTin': invoice.partner_id.l10n_ke_pin,
'custNm': invoice.partner_id.name,
'salesTyCd': 'N', # Normal sale
'rcptTyCd': 'S', # Sale (R for refund)
'pmtTyCd': 'CASH', # Or BANK, CHEQUE, etc.
'salesSttsCd': '02', # Confirmed
'cfmDt': invoice.invoice_date.strftime('%Y%m%d%H%M%S'),
'salesDt': invoice.invoice_date.strftime('%Y%m%d'),
'totItemCnt': len(invoice.invoice_line_ids),
'totAmt': float(invoice.amount_total),
'totTaxAmt': float(invoice.amount_tax),
'taxblAmtA': 0.0, # Exempt
'taxblAmtB': float(invoice.amount_untaxed), # Standard 16%
'itemList': [...],
}
return self._call_etims_api('saveTrnsSalesOsdc', payload)
Withholding Tax
Configure WHT codes:
| Type | Rate (Resident) | Rate (Non-Resident) |
|---|---|---|
| Management/Professional fees | 5% | 20% |
| Royalties | 5% | 20% |
| Interest | 15% | 15% |
| Dividends | 5% | 15% |
| Rent (commercial) | 10% | 30% |
| Insurance commissions | 5% | 20% |
| Service fees (general) | N/A | 20% |
Withholding agents must:
- File monthly returns by the 20th of the following month via iTax
- Issue WHT certificates to suppliers
- Allow suppliers to credit WHT against CIT/PAYE
Payroll Considerations
Kenyan payroll components:
| Item | Employee | Employer | Notes |
|---|---|---|---|
| PAYE | Per progressive scale | N/A | Up to 35% per Finance Act 2023 |
| NSSF (Tier 1 + 2) | 6% | 6% | New rates per NSSF Act 2013 |
| SHIF (Social Health Insurance Fund) | 2.75% | N/A | Replaces NHIF from October 2024 |
| Housing Levy | 1.5% | 1.5% | Affordable Housing Act 2024 |
| NITA | N/A | KSH 50/employee | Industrial training |
PAYE brackets (2026):
- First KSH 24,000: 10%
- Next KSH 8,333: 25%
- Next KSH 467,667: 30%
- Next KSH 300,000: 32.5%
- Above KSH 800,000: 35%
Personal Relief: KSH 2,400/month (KSH 28,800/year).
Reporting Requirements
A Kenya Odoo deployment must produce:
- VAT3 Return: Monthly via iTax, by the 20th
- PAYE Return (P10/P10A): Monthly via iTax, by the 9th
- Withholding Tax Returns: Monthly via iTax, by the 20th
- Excise Duty Returns: If applicable, monthly
- CIT Return: Annually, within 6 months of fiscal year end
- Annual Return for Resident Individuals: For employees with multiple income sources
- NSSF / SHIF / Housing Levy: Monthly to respective authorities
Implementation Checklist
- Confirm KRA PIN, VAT registration, branch IDs
- Choose eTIMS deployment option (Online, Lite, OSCU based on volume)
- Install community
l10n_ke; configure PIN, branch, VAT status - Build or integrate eTIMS connector module
- Configure VAT 16%, 8%, 0%, exempt categories
- Configure WHT codes for resident and non-resident scenarios
- Configure payroll with PAYE, NSSF Tier 1+2, SHIF, Housing Levy
- Test eTIMS submission in KRA sandbox before production
- Build VAT3 export aligned to iTax format
- Schedule monthly filings: PAYE by 9th, VAT/WHT by 20th
Common Pitfalls
Wrong PAYE personal relief: Personal Relief of KSH 2,400/month must be applied per employee. Multiple-job scenarios complicate this — only one employer can grant relief.
SHIF transition gaps: The transition from NHIF to SHIF (October 2024) changed the contribution mechanic from tiered amount to 2.75% of gross. Old configurations under-deduct.
Housing Levy missed: The Affordable Housing Levy (1.5% employee + 1.5% employer) is mandatory since 2024. Many ERPs configured before mid-2024 lack this.
eTIMS PIN mismatches: Customer PIN must be valid in KRA's registry. Invalid or wrong PIN causes submission rejection.
VAT input on disallowed expenses: Entertainment, employee benefits, and certain motor vehicle expenses have restricted input VAT. Configure separate codes.
ECOSIRE provides Odoo localization for Kenya, including eTIMS integration, multi-branch invoicing, and SHIF/Housing Levy payroll. Contact us for implementation or explore accounting services.
Frequently Asked Questions
Which eTIMS deployment option works best for Odoo?
For most Odoo deployments, eTIMS Lite (API-based) is the right choice — it integrates cleanly with Odoo's invoice approval workflow without requiring physical OSCU hardware. OSCU is mandated for high-volume retail/POS scenarios. eTIMS Online (manual portal entry) is impractical for ERP-driven operations.
Does Odoo support eTIMS natively?
Odoo's official localization doesn't include native eTIMS as of early 2026 — integration is via custom modules or partner-provided connectors. Several Kenyan Odoo partners maintain commercial eTIMS connectors. ECOSIRE has built eTIMS Lite connectors for Kenyan clients in distribution, manufacturing, and services.
How does the new SHIF differ from the old NHIF?
NHIF used tiered contribution amounts (e.g., KSH 1,700/month for high earners). SHIF, effective October 2024 under the Social Health Insurance Act 2023, charges 2.75% of gross monthly salary with no cap. For high earners, SHIF is significantly higher. Update Odoo payroll structures during the transition.
Can we issue credit notes through eTIMS?
Yes, eTIMS supports refund/cancellation receipts (rcptTyCd='R' or 'C'). The original receipt's eTIMS reference must be linked. Odoo's reverse functionality should populate the orgInvcNo field with the original eTIMS receipt number for proper KRA reconciliation.
What about non-VAT-registered businesses?
Businesses below the VAT registration threshold (KSH 5M) are not required to use eTIMS for VAT purposes but may opt in voluntarily. CIT obligations still apply. Most pre-revenue or small businesses skip eTIMS until they cross the threshold; Odoo's VAT codes can be configured as inactive until registration occurs.
लेखक
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
Odoo ERP के साथ अपना व्यवसाय बदलें
आपके संचालन को सुव्यवस्थित करने के लिए विशेषज्ञ ओडू कार्यान्वयन, अनुकूलन और समर्थन।
संबंधित लेख
How to Add a Custom Button to an Odoo Form View (2026)
Add custom action buttons to Odoo 19 form views: Python action method, view inheritance, conditional visibility, confirmation dialogs. Production-tested.
How to Add a Custom Field in Odoo Without Studio (2026)
Add custom fields via custom module in Odoo 19: model inheritance, view extension, computed fields, store/non-store decisions. Code-first, version-controlled.
How to Add a Custom Report in Odoo Using External Layout
Build a branded PDF report in Odoo 19 using web.external_layout: QWeb template, paperformat, action binding. With print logo + footer overrides.