$ 14.85
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Lines of code | 1667 |
| Technical Name |
lm_id_withholding |
| License | OPL-1 |
| Website | https://lemacore.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Lines of code | 1667 |
| Technical Name |
lm_id_withholding |
| License | OPL-1 |
| Website | https://lemacore.com |
Lema Core Technologies
Indonesia Withholding Tax — PPh 21 / 23 / 4(2)
Production-ready Indonesian withholding tax module for Odoo 18. Adds the three most common PPh types to invoice and payment workflows, generates official Bukti Potong documents, and exports SPT Masa data in DJP-compatible CSV or Coretax XML.
Odoo 18 OPL-1 Indonesian Localization
Lema Core Technologies is a provider of business software solutions specializing in custom Odoo development. We help businesses unlock the full potential of their Odoo instances through reliable, well-tested modules.
Demo Preview
See Indonesia Withholding Tax in Action
Screenshots
Visual Walkthrough
17 Pre-Configured PPh Tax Records
Statutory tax rates for PPh 23 jasa, dividen / bunga / royalti, PPh 4(2) sewa tanah bangunan, jasa konstruksi, bunga deposito, hadiah, and PPh 21 final — ready to use after install.
Vendor Bill with Auto Withholding
Add a PPh tax to any vendor bill line and the withheld amount is computed automatically. The PPh Withheld field on the form summarises the total.
Create Bukti Potong
Generate a bukti potong document for any posted bill with PPh lines. The document aggregates all PPh lines from the bill and formats them according to DJP requirements.
Bukti Potong Document Workflow
Draft to Issued workflow with automatic numbering (BP-YYYY/NNNNN) and a QWeb PDF that matches the DJP layout. Cancellation is guarded against issued documents.
PDF includes company and partner NPWP, base amount, rate, withheld amount, and signature block. The layout is designed to comply with DJP's official bukti potong format for easy acceptance during tax reporting.
Register Payment Bukti Potong Generation
Pay multiple vendor bills in one journal entry; PPh withholding aggregates automatically. Generate every bukti potong for the payment from one smart button.
SPT Masa Export CSV & Coretax XML
Period-based export wizard generates files ready for upload to DJP Online (CSV) or Coretax (XML). Filter by PPh type and date range; each line maps to a DJP column.
Example CSV output with all PPh types selected for a given month.
Features
What You Get
Core Tax Engine
PPh 23 Withholding
Jasa 2% (NPWP) / 4% (non-NPWP), dividen / bunga / royalti 15% / 30%, with automatic rate selection based on partner NPWP status.
PPh 4(2) Final Tax
Sewa tanah-bangunan 10%, jasa konstruksi 2 / 3 / 4 / 6%, bunga deposito 20%, hadiah undian 25% — all final-tax categories pre-configured.
PPh 21 Non-Employee
PPh 21 final for tenaga ahli, honorarium dewan komisaris non-pegawai, and bonus to former employees. Payroll PPh 21 stays in HR modules.
Documents & Reporting
Bukti Potong PDF
QWeb report matching the DJP bukti potong layout, with company NPWP, partner NPWP, base amount, rate, withheld amount, and signature block.
SPT Masa CSV / XML
Export period-based bukti potong to DJP eSPT CSV or Coretax XML. Columns follow the official DJP layout.
NPWP Validation
Format checker accepting both legacy 15-digit and new 16-digit NIK-NPWP. Validation runs as an ORM constraint on partner save.
Automation & Integration
Auto Rate by NPWP
When the partner has no NPWP, the higher rate is applied automatically. No manual switching of tax records.
Batch Payment Support
Pay multiple bills at once; PPh aggregates per payment and bukti potong can be generated for all reconciled bills in one click.
Multi-Company Safe
Record rules isolate bukti potong per company. SPT export and sequences are scoped to the active company context.
System Architecture
From Invoice to SPT Masa
PPh data flows automatically from invoice line to bukti potong to monthly SPT export.
Technical Specifications
Built on Odoo 18 Standards
Dependencies
- account (core)
- l10n_id (Indonesian COA)
- No enterprise-only dependencies
Deployment
- Odoo Community & Enterprise
- Odoo.sh (PaaS)
- On-Premise multi-worker
Performance
- Batched search and create — no N+1 queries
- Stored computed for withholding total
- Indexed NPWP field for fast lookups
Security
- Per-model access control list
- Company isolation record rules
- Issued bukti potong cannot be modified
Version History
What's New
Frequently Asked Questions
Got Questions?
Which PPh types are supported?
Does it integrate with payroll for PPh 21?
How does the auto NPWP rate switching work?
Can I generate bukti potong for multiple bills paid together?
Is this available for Odoo Community and Enterprise?
Do purchases include future version upgrades?
Related Products
Indonesia Withholding Tax v18.0.2.0.0 · OPL-1 License
· © 2026 Lema Core Technologies
Indonesia Withholding Tax (PPh 21/23/4(2))
Production-ready withholding tax module for Indonesian businesses running Odoo 18. Adds the three most common PPh (Pajak Penghasilan) types to invoice and payment workflows, generates official Bukti Potong documents, and exports SPT Masa data in DJP-compatible CSV or Coretax XML.
Works on Odoo 18 Community and Enterprise. Hard dependencies: account, l10n_id.
What This Module Solves
Stock Odoo 18 has no native support for:
- PPh 23 withholding (jasa / sewa non-bangunan / dividen)
- PPh 4(2) final tax (sewa tanah-bangunan, jasa konstruksi, bunga, hadiah)
- PPh 21 final for non-employees (tenaga ahli, honorarium komisaris)
- Bukti Potong document generation
- SPT Masa export to DJP
This module fills those gaps without overriding any community or enterprise behavior.
Installation
odoo-bin -c odoo.conf -d <database> -i lm_id_withholding --stop-after-init
Or from the UI: Apps → search "PPh" → Install.
Post-Install Configuration
The module ships 17 pre-configured tax records based on statutory rates (PMK / UU HPP). Configure these once after install:
- Map tax repartition accounts — open Accounting → Configuration → Taxes, filter by "PPh", and assign the correct liability account on each tax repartition line.
- Set NPWP on partners — on each vendor/customer subject to PPh, open the partner record, go to the Accounting tab, and fill the NPWP field. Partners without NPWP are charged the higher rate automatically (e.g. 4% instead of 2% for PPh 23 jasa).
- Verify pre-configured tax rates — the data file provides taxes for PPh 23 jasa (2% / 4%), PPh 23 dividen-bunga-royalti (15%), PPh 4(2) sewa tanah-bangunan (10%), PPh 4(2) konstruksi (2%-6%), PPh 4(2) bunga deposito (20%), and PPh 21 final tenaga ahli (2.5%).
Usage
Create a vendor bill with PPh withholding
- Open Accounting → Vendors → Bills → New.
- Select the vendor (whose NPWP you configured).
- Add invoice line with a "PPh" tax in the Taxes column.
- Confirm the bill. The PPh Withheld field shows the deducted amount.
Generate bukti potong
- From a single bill: open the bill, click Action → Create Bukti Potong.
- From multiple bills: tick bills in the list view, then Action → Create Bukti Potong.
- From a payment (after settlement): click the Create Bukti Potong smart button on the payment form.
Issue and print bukti potong
- Accounting → Reporting → Indonesia (PPh) → Bukti Potong.
- Open the draft record, click Issue (assigns sequence BP-YYYY/NNNNN).
- Click Print to download the official QWeb PDF.
Export SPT Masa
- Accounting → Reporting → Indonesia (PPh) → Export SPT Masa.
- Pick the period (date range), PPh type, and format (CSV or XML).
- Click Export to download the file ready for upload to DJP Online or Coretax.
Batch Payment / Multi-Bill Payment
Pay multiple vendor bills in one journal entry while keeping PPh withholding correct for each. Pick the bills in the list view, click Action → Register Payment — the resulting payment auto-aggregates the withholding from every reconciled bill. account.batch.payment (Odoo Enterprise) is also supported because withholding works at the individual payment level.
Smart Buttons and Indicators
| Where | Field / Button | Purpose |
|---|---|---|
| Bill / Invoice form | PPh Withheld | Sum of all PPh |
| Bill / Invoice form | Bukti Potong button | Opens linked documents |
| Payment form | PPh Withholding | Aggregated from bills |
| Payment form | Bukti Potong button | Opens linked documents |
| Payment form | Create Bukti Potong | Batch-create action |
| Partner form, Accounting tab | NPWP field | Drives auto rate |
Common Issues
- "Tax repartition account is missing" on post — assign a tax account on each PPh tax's repartition lines.
- Partner shows non-NPWP rate but you entered NPWP — verify NPWP is 15 or 16 digits (dashes/dots are optional).
- SPT export returns zero rows — bukti potong must be in issued state and within the requested date range.
License
OPL-1. Copyright Lema Core Technologies — https://lemacore.com
Changelog
- 1.0.0 — Initial release: PPh 21/23/4(2) support, bukti potong, SPT Masa CSV/XML export, batch payment integration.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module