Cet article est actuellement disponible en anglais uniquement. Traduction à venir.
Odoo Indonesia Localization 2026: Pajak, e-Faktur & NPWP Setup
Indonesia's tax framework is governed by the Directorate General of Taxes (Direktorat Jenderal Pajak, DJP) under the Ministry of Finance. The country runs a sophisticated VAT system (PPN) with mandatory e-invoicing through the e-Faktur platform — every Pengusaha Kena Pajak (PKP, taxable entrepreneur) must issue tax invoices via DJP's e-Faktur application or through the Coretax platform that began rolling out in 2025. Odoo's l10n_id localization handles the chart of accounts and PPN structure, but e-Faktur integration requires a connector that exchanges data with DJP's APIs.
Key Takeaways
- Directorate General of Taxes (DJP) administers PPN (VAT), PPh (income tax), and PBB (property tax)
- PPN standard rate increased to 12% effective 1 January 2025 per HPP Law (UU 7/2021)
- Mandatory e-Faktur for all PKPs; Coretax DJP system replacing legacy e-Faktur progressively from 2025
- NPWP (16-digit Tax ID) required for all transactions with PKP entities
- Odoo
l10n_idcovers PSAK chart of accounts; e-Faktur integration requires custom connector- Withholding tax (PPh 21, 23, 4(2), 26) requires multiple tax codes per supplier type
- Statutory reports include SPT Masa PPN (monthly), SPT Tahunan PPh (annual), and PPh 21/23 returns
Indonesia Tax Framework Overview
The DJP enforces a tiered tax system. PPN (Pajak Pertambahan Nilai) is the value-added tax, administered alongside Sales Tax on Luxury Goods (PPnBM). Income taxes split into corporate (PPh Badan, generally 22%) and several withholding regimes:
- PPh 21: Withholding on employee compensation (progressive)
- PPh 23: Withholding on services, rentals, royalties to domestic taxpayers (2% or 15%)
- PPh 4(2): Final withholding tax on specific transactions like land/building lease (10%) or construction services (1.75% to 6%)
- PPh 26: Withholding on payments to foreign entities (20% or treaty rate)
The Harmonised Tax Law (Undang-Undang Harmonisasi Peraturan Perpajakan, UU HPP No. 7/2021) raised PPN from 10% to 11% in April 2022 and to 12% in January 2025 — confirm the current rate in any new deployment, as the government has signaled selective application of the 12% rate to luxury goods only in some recent press statements.
Required Odoo Localization Modules
| Module | Purpose | Edition |
|---|---|---|
l10n_id | Indonesia chart of accounts (PSAK-aligned) | Community |
l10n_id_efaktur | E-Faktur CSV export for DJP application | Enterprise |
l10n_id_efaktur_coretax | Coretax DJP integration (where available) | Enterprise / Custom |
account_reports | Tax report engine | Enterprise |
hr_payroll_l10n_id | PPh 21, BPJS Kesehatan, BPJS Ketenagakerjaan | Enterprise / Custom |
Odoo's Enterprise localization includes an e-Faktur module that exports a CSV file compatible with DJP's e-Faktur desktop application. With the Coretax DJP rollout, the workflow is shifting to API-based submission, and custom connector development may be required during the transition period.
Chart of Accounts Setup
Indonesia uses Pernyataan Standar Akuntansi Keuangan (PSAK), aligned with IFRS. The l10n_id chart provides the standard structure:
- 1-1xx: Current assets (cash, receivables, inventory)
- 1-2xx: Non-current assets (fixed assets, intangibles)
- 2-1xx: Current liabilities (payables, tax payables)
- 2-2xx: Long-term liabilities
- 3-xxx: Equity
- 4-xxx: Revenue
- 5-xxx: Cost of revenue
- 6-xxx through 8-xxx: Operating expenses
- 9-xxx: Other income/expenses
Configure the company record with NPWP (16 digits since 2024, formerly 15), NIK or NIB (business identification), KLU code (business classification), and DJP-registered address. The 16-digit NPWP for individuals matches the NIK; for entities it uses a "0" prefix structure.
PPN Configuration
Configure PPN tax records under Accounting > Configuration > Taxes:
| Tax Name | Rate | Type | Notes |
|---|---|---|---|
| PPN Keluaran 12% | 12% | Sales | Standard output VAT |
| PPN Keluaran 11% | 11% | Sales | If reverted/grandfathered |
| PPN Masukan 12% | 12% | Purchase | Deductible input VAT |
| PPN 0% Ekspor | 0% | Sales | Exports |
| PPN Dikecualikan | 0% | Sales | Exempt (food staples, education, health) |
| PPnBM Variabel | 10-95% | Sales | Luxury goods (cars, real estate above threshold) |
Note that PPN input must be linked to a Faktur Pajak (tax invoice) from a PKP supplier. Non-PKP supplier purchases do not generate creditable input VAT. Configure the supplier record with the PKP flag to determine tax behavior.
E-Faktur and Coretax Integration
Every PKP must issue a Faktur Pajak Elektronik (electronic tax invoice) for taxable transactions. The Faktur Pajak number consists of:
- Status code (e.g., 010 for normal sale)
- Two-digit issuance year
- Eight-digit serial number from a NSFP (Nomor Seri Faktur Pajak) batch obtained from DJP
Until end-2024, the workflow used DJP's e-Faktur desktop application with a CSV import from the ERP. Odoo's l10n_id_efaktur module produces this CSV with all required columns (FK, LT, OF for invoice headers; FAPR, FK detail rows for line items).
The Coretax DJP system, launched in January 2025, replaces the desktop e-Faktur with a web-based platform offering API-based invoice submission. New deployments should plan for Coretax integration directly. Custom Odoo modules connecting to Coretax APIs typically handle:
- Invoice push with NSFP allocation
- Invoice approval status retrieval
- Cancellation and replacement workflows
- VAT input claim documentation linking
<record id="account_tax_ppn_keluaran_12" model="account.tax">
<field name="name">PPN Keluaran 12%</field>
<field name="amount">12</field>
<field name="amount_type">percent</field>
<field name="type_tax_use">sale</field>
<field name="l10n_id_kode_jenis_transaksi">01</field>
<field name="invoice_repartition_line_ids" eval="[
(0,0,{'factor_percent': 100, 'repartition_type': 'base'}),
(0,0,{'factor_percent': 100, 'repartition_type': 'tax', 'account_id': ref('ppn_keluaran_account')})
]"/>
</record>
Withholding Tax Configuration
Indonesia's withholding system is extensive. Configure the most common codes:
| Code | Description | Rate | When Applies |
|---|---|---|---|
| PPh 23 - Services | Services to domestic taxpayer | 2% | Most service vendors |
| PPh 23 - Rent (non-property) | Equipment rentals | 2% | Equipment lease |
| PPh 23 - Royalty | Royalty payments | 15% | IP licensing |
| PPh 4(2) - Land/Building | Property lease | 10% | Office rental |
| PPh 4(2) - Construction | Construction services | 1.75% to 6% | Construction contractors |
| PPh 26 | Payments to foreign | 20% (or treaty) | Cross-border services |
Each code is configured as a purchase tax with a negative impact creating a payable to DJP. The Bukti Potong (withholding certificate) must be issued to suppliers, and Coretax now handles digital Bukti Potong issuance.
Payroll Considerations
Indonesia payroll requires PPh 21 (employee withholding tax) and BPJS contributions:
| Item | Employee | Employer | Cap/Notes |
|---|---|---|---|
| BPJS Kesehatan | 1% | 4% | Cap IDR 12M/month base |
| BPJS Ketenagakerjaan - JHT | 2% | 3.7% | Old age savings |
| BPJS Ketenagakerjaan - JKK | N/A | 0.24-1.74% | Work accident, by industry |
| BPJS Ketenagakerjaan - JKM | N/A | 0.3% | Death benefit |
| BPJS Ketenagakerjaan - JP | 1% | 2% | Pension, capped |
| PPh 21 | Per progressive scale | N/A | Monthly TER from 2024 |
PPh 21 calculation changed in January 2024 with the introduction of Tarif Efektif Rata-rata (TER) — average effective rates simplifying monthly computation. Annual reconciliation still uses the standard progressive brackets (5%, 15%, 25%, 30%, 35%).
Reporting Requirements
Statutory reports a Indonesia Odoo deployment must produce:
- SPT Masa PPN (Form 1111): Monthly VAT return
- SPT Tahunan PPh Badan (Form 1771): Annual corporate income tax return
- SPT Masa PPh 21: Monthly employee withholding tax
- SPT Masa PPh 23/26: Monthly withholding return for services and foreign payments
- SPT Masa PPh 4(2): Final withholding tax monthly report
- PSAK Financial Statements: Statutory annual financial reports
Reports are submitted via DJP Online (djponline.pajak.go.id) or through Coretax DJP.
Implementation Checklist
- Obtain NPWP (16-digit) and PKP confirmation if VAT-registered
- Apply for NSFP (Faktur Pajak serial number batch) from DJP
- Install
l10n_id, configure company NPWP, NIB, KLU, address - Verify PSAK chart of accounts; add sub-accounts as needed
- Configure PPN 12% (and 11% for grandfathered transactions if applicable)
- Configure all PPh withholding codes with correct rates
- Build e-Faktur CSV export OR Coretax API connector
- Configure payroll with BPJS rules and PPh 21 TER tables
- Build SPT Masa PPN report mapped to Form 1111 layout
- Test parallel for one tax period before live submission
Common Pitfalls
Using legacy 11% rate in 2025 onward: Many ERPs were configured at 11% in 2022 and never updated. The 12% rate applies from 1 January 2025 — verify all tax codes.
Wrong NSFP batch usage: NSFP serials must be used in order. Skipping or duplicating numbers blocks invoice submission via Coretax.
Missing PPh 21 TER tables: Pre-2024 Odoo configurations use the old monthly-recalc method. The TER simplification changed monthly withholding logic — update salary rules.
Treating non-PKP purchases as VAT-claimable: Only PPN paid to PKP suppliers with valid Faktur Pajak is creditable. Tag non-PKP suppliers in vendor records.
Faktur Pajak status codes: Status code 04 (special transaction), 06 (other), 07 (PPnBM applicable), and 08 (export) have different tax treatment. Hard-coding 010 everywhere causes filing errors.
ECOSIRE provides Odoo localization for Indonesia, including Coretax DJP integration and BPJS-compliant payroll. Contact us for implementation or learn about our Odoo migration services.
Frequently Asked Questions
Has the PPN rate definitively moved to 12% in 2026?
The HPP Law (UU 7/2021) mandated 12% from 1 January 2025. Government statements in late 2024 suggested possible carve-outs limiting 12% to luxury goods, but the legal framework requires 12% as the standard rate unless a Government Regulation amends the schedule. Most Odoo deployments now use 12% as the default with category-specific overrides where applicable.
Should we use legacy e-Faktur or Coretax DJP?
Coretax DJP is the long-term replacement and went live in January 2025. New deployments should plan for Coretax API integration. The legacy desktop e-Faktur application is being phased out, and the CSV import path (which Odoo's standard module supports) will eventually deprecate. Custom Coretax connectors are now standard for new Odoo Indonesia projects.
Does Odoo handle the PPh 21 TER calculation correctly?
Odoo Enterprise's payroll localization for Indonesia has been updated for the TER methodology, but verify the bracket tables match the latest PMK (Ministry of Finance Regulation). Annual recalculation still uses progressive rates, so December payroll runs both monthly TER and full-year reconciliation in the same period.
What is the difference between PPh 23 and PPh 4(2)?
PPh 23 is a creditable withholding tax — the supplier can offset it against their annual income tax. PPh 4(2) is a final tax — the withheld amount is the supplier's full liability for that transaction. The distinction affects how Odoo records the journal: PPh 23 hits a withholding tax payable account, while PPh 4(2) is treated as a definitive tax expense on the supplier's side.
Can Odoo Community handle Indonesian e-invoicing?
Odoo Community with l10n_id covers basic chart and taxes. The e-Faktur CSV export module is in Enterprise. Coretax integration is custom development regardless of edition. Most production deployments choose Enterprise for the reporting engine and add a partner-built Coretax connector. ECOSIRE has built such connectors for both editions.
Rédigé par
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
Transformez votre entreprise avec Odoo ERP
Implémentation, personnalisation et assistance expertes d'Odoo pour rationaliser vos opérations.
Articles connexes
Comment ajouter un bouton personnalisé à une vue de formulaire Odoo (2026)
Ajoutez des boutons d'action personnalisés aux vues de formulaire Odoo 19 : méthode d'action Python, héritage des vues, visibilité conditionnelle, boîtes de dialogue de confirmation. Testé en production.
Comment ajouter un champ personnalisé dans Odoo sans Studio (2026)
Ajoutez des champs personnalisés via le module personnalisé dans Odoo 19 : héritage de modèle, extension de vue, champs calculés, décisions magasin/non-magasin. Code d'abord, contrôle de version.
Comment ajouter un rapport personnalisé dans Odoo à l'aide d'une mise en page externe
Créez un rapport PDF de marque dans Odoo 19 à l'aide de web.external_layout : modèle QWeb, format papier, liaison d'action. Avec logo imprimé + remplacements de pied de page.