Este artigo está atualmente disponível apenas em inglês. Tradução em breve.
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.
Escrito por
ECOSIRE Research and Development TeamRedação técnica
A equipe de redação técnica da ECOSIRE escreve sobre Odoo ERP, e-commerce com Shopify, agentes de IA, análise de dados com Power BI, automação com GoHighLevel e boas práticas de software empresarial. Nossos guias ajudam as empresas a tomar decisões de tecnologia bem fundamentadas.
ECOSIRE
Transforme seu negócio com o Odoo ERP
Implementação, personalização e suporte especializado do Odoo para agilizar suas operações.
Artigos Relacionados
Segmentação de clientes baseada em IA: do RFM ao clustering preditivo
Saiba como a IA transforma a segmentação de clientes, desde a análise estática de RFM até o clustering preditivo dinâmico. Guia de implementação com dados Python, Odoo e ROI real.
IA para otimização da cadeia de suprimentos: visibilidade, previsão e automação
Transforme as operações da cadeia de suprimentos com IA: detecção de demanda, pontuação de risco de fornecedores, otimização de rotas, automação de armazéns e previsão de interrupções. Guia 2026.
Guia de ecommerce B2B de atacado: portais, prazos de pagamento e preços por cliente
Monte um portal de atacado B2B que os compradores realmente usam: preços por cliente, prazos e limites de crédito, checkout com pedido de compra e aprovações, e recompras pelo histórico.