Summary:In the Coretax system, the unit of measure (UOM) on tax invoices must use the official DJP unit code, not free text. Odoo 19 maps UOM to e-Faktur codes through the UoM Categories menu. DJP has also just released XML template version 1.6 which adds 6 new unit codes — the implementation team needs to ensure these codes are also available in the Odoo UOM mapping.
Why is UOM a Critical Issue in the Coretax Era?
Coretaxreplaces the old CSV-based e-Faktur system with a much more structured XML format. One thing that often escapes the attention of the ERP implementation team isthe unit of goods or services (Unit of Measure).
In the old system, the unit column on tax invoices was relatively flexible — it could be filled with free text such as "pcs", "box", or "unit". In Coretax, this unit must be mapped tothe standard DJP unit code. XML that does not contain a valid code will be rejected when uploaded.
This challenge is increasingly felt by companies with many variations of UoM — pcs, boxes, cartons, cases, dozens, kg, meters, and so on — because each unit must have an official equivalent in Coretax before an invoice can be issued.
PER-11/PJ/2025 also stipulates that if the quantity uses a specific unit (for example, "3 units of computers"), the description of the quantity and unit must still be explicitly reflected in the name of the goods/services on the invoice — not just in the quantity column.
How Odoo 19 Maps UOM to e-Faktur Code
Odoo 19 provides a built-in mechanism to map internal UoM to Coretax e-Faktur UoM codes, so this process does not need to be done manually for each invoice.
Configuration steps:
- OpenInventory ‣ Configuration ‣ UoM Categories.
- Select the category you want to configure.
- Choose the appropriate e-Faktur UoM code from the available list in that category.
Important point: mapping is done at the level ofUoM Category, not per individual UoM. So one category (for example, "Unit", "Weight", "Volume") represents one e-Faktur code for all UoMs within it.
Requirements for e-Faktur to be Created
Before the UOM code plays a role, the following two basic requirements must be met in the master data:
- The country on the customer contact must beIndonesia.
- The checkbox"Is PKP"on the customer contact form must be active.
End-to-End Workflow in Odoo
- Create an invoice throughAccounting ‣ Customers ‣ Invoices.
- On the tabOther Info, sectionElectronic Tax, select the appropriateTransaction Code(automatically generated by Odoo, cannot be freely edited).
- Confirm the invoice.
- Click the iconActions ‣ Download e-faktur. The generated XML file is then uploaded to the Coretax system.
- Fielde-Faktur Document (Coretax)the invoice will be automatically filled after this process.
- For high volume, select multiple invoices at once in the list view, then selectDownload e-invoicefrom the Actions menu to generate a single XML batch file.
Important Update: New UOM Code in Coretax XML Template v1.6
The DJP has released an update to the Excel template for output tax invoices toversion 1.6, one of its focuses isthe addition of the unit of measure (UOM) code list. This is directly relevant to the UoM Category configuration in Odoo, as the following codes need to be available in the mapping to avoid validation failures when uploading to Coretax.
Here are the new UOM codes added in template v1.6:
| Code | Unit Name |
|---|---|
| UM.0034 | Cubic Meter |
| UM.0035 | Square Centimeter |
| UM.0036 | Drum |
| UM.0037 | Carton |
| UM.0038 | Kwh (Kilowatt-hour) |
| UM.0039 | Roll |
Important technical note: although the Excel template has been upgraded to version 1.6,the Excel-to-XML converter application for this release still uses version 1.5. Therefore, the implementation team needs to verify the compatibility of the converter version used before assuming that this new unit can be processed end-to-end automatically.
What the Odoo Implementation Team Needs to Do
- Re-audit the configured UoM Category— especially for products using carton, drum, roll, cubic meter, kwh, or square centimeter units. Ensure that the e-Invoice UOM code in the related category points to the correct v1.6 code (UM.0034–UM.0039), not the old code or an inappropriate generic category.
- Check the converter versionused on the Coretax/DJP side if the upload process still goes through the manual Excel-to-XML conversion path, as version mismatches can cause new unit codes to not be read correctly.
- Update BRD/SOP documentationrelated to UOM mapping to include the reference of the template version used (v1.6), so that when DJP releases the next version, the team knows which parts need to be rechecked.
Quick Way to Add New UOM Codes via SQL
The UOM codes for e-Faktur in Odoo are stored in the table l10n_id_efaktur_coretax_uom_code. If the UOM code v1.6 is not available in the dropdown options for UoM Category, the fastest way to add them in bulk is through a direct query to the database, without needing to input one by one through the UI:
sql
INSERT INTO public.l10n_id_efaktur_coretax_uom_code (create_uid, write_uid, code, name, create_date, write_date) VALUES (1, 1, 'UM.0034', 'Cubic Meter', NOW(), NOW()), (1, 1, 'UM.0035', 'Square Centimeter', NOW(), NOW()), (1, 1, 'UM.0038', 'KWh', NOW(), NOW()), (1, 1, 'UM.0039', 'Roll', NOW(), NOW());
Usage notes:
- create_uid and write_uid are filled with 1, which is the ID of the Administrator/OdooBot user in Odoo. Adjust if the admin user ID in the relevant instance is different.
- UM.0036 (Drum) and UM.0037 (Carton) are intentionally not includedin the example above — first check if those codes already exist in the table before inserting, as "Carton" may already be available as a default category before the v1.6 update.
- Always check existing data firstwith SELECT code, name FROM l10n_id_efaktur_coretax_uom_code WHERE code IN ('UM.0034','UM.0035','UM.0036','UM.0037','UM.0038','UM.0039'); before running INSERT, to avoid code duplication.
- Run in the staging/testing environment first, not directly to the production database. After verification, it can be run in production with a backup of the database beforehand.
- After this code is added to the table, the code will automatically appear as an option in the dropdown.UoM Categories ‣ e-Faktur UoM Codeand can be directly mapped to the appropriate UoM Category.
- Treat this step asa workaround until the official Indonesian localization module of Odoo releases an update that includes the v1.6 codes natively.. Once the official module has been updated, it is advisable to migrate back to the default module data to avoid conflicts when upgrading Odoo in the future.
Other Things to Consider for the Implementation Team
1. Audit the UoM Category before go-live.Do not assume the default UoM Category provided by Odoo is sufficient. Inventory all UoMs that are actually used in the product master, and ensure each category has the correct e-Faktur code before the product data is imported in bulk.
2. Understand the nature of XML that cannot be edited.The downloaded e-Faktur file cannot be edited. Any changes to the invoice afterwards do not automatically update the XML that has been created, and only the first version is considered valid. If there are revisions to the price, quantity, or UoM after the first XML is downloaded, the only way is to create and confirm a new invoice — not to edit the old invoice.
3. Do not rely on fallback/auto-mapping for rarely used UOMs.Some similar systems implement auto-mapping based on unit names if the tax code reference field is empty. Although Odoo's mechanism is different (mapping at the UoM Category level), the principle is the same: always perform a manual verification when a new UoM enters the master data, do not rely on the system default.
4. Align with the product naming provisions in PER-11/PJ/2025.If the quantity of a certain unit or item is known, the PKP must include the description of the quantity and unit in the Taxable Goods/Services name column — not just in a separate quantity column. Official DJP example: "ABC brand computer totaling 3 (three) units at a selling price of Rp5,000,000.00 per unit."
5. Test with batch scenarios, not just single invoices.The batch download feature is useful for high transaction volumes, but it is also prone to hiding inconsistent UOM mapping issues. UAT should include batch scenarios with varying UoM combinations, including new codes from v1.6.
Quick Summary (for Checklist)
- All UoMs used in the product master have been mapped to the correct e-Faktur codes at the UoM Category level.
- The new UOM codes v1.6 (UM.0034–UM.0039) have been reviewed and included if relevant to the client's products — via UI or SQL insert into l10n_id_efaktur_coretax_uom_code.
- If using SQL insert, existing data has been checked first to avoid code duplication, and it has been tested in staging before production.
- The version of the Excel-to-XML converter used has been checked for compatibility.
- The related customer already has the country "Indonesia" and the "Is PKP" checkbox is active.
- UAT has included batch scenarios with variations in UOM.
- The internal SOP states the rule "new invoice, not edit" for revisions after the XML is issued.
Frequently Asked Questions
Does the UOM code in Odoo automatically follow the DJP updates?Not automatically. The e-Faktur UOM code in Odoo is manually configured per UoM Category, so when the DJP releases a new code (like in v1.6), the implementation team needs to update the mapping manually.
Can an invoice that has been downloaded be revised if the UOM is incorrect?No. The e-Faktur XML is final after being downloaded. If there is a UOM error, the solution is to create and confirm a new invoice, not to edit the same invoice.
Do all UoM Categories need to have an e-Faktur code?Ideally yes, especially for categories that are actually used in products sold to PKP Indonesia customers. Categories that are not relevant to VAT-based sales can be skipped, but still need to be verified during UAT.
Reference :https://www.odoo.com/documentation/19.0/applications/finance/fiscal_localizations/indonesia.html