Indonesia E-faktur

l10n_id_efaktur
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/l10n_id_efaktur
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Xavier ALT, Xavier Morel, Brice bib Bartoletti, Gorash, odoo, Jigar Vaghela, Ruben Gomes, nni-odoo, Habib (ayh), alsh-odoo, Gauthier Wala (gawa), Claire Bretton (clbr), Dylan Kiss (dyki), Sarah Bellefroid, Nicolas Viseur (vin), mega, nni@odoo.com, kaju-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:57
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_id
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
E-Faktur Menu(Indonesia)
Format: 010.000-16.00000001
* 2 (dua) digit pertama adalah Kode Transaksi
* 1 (satu) digit berikutnya adalah Kode Status
* 3 (tiga) digit berikutnya adalah Kode Cabang
* 2 (dua) digit pertama adalah Tahun Penerbitan
* 8 (delapan) digit berikutnya adalah Nomor Urut

To be able to export customer invoices as e-Faktur,
you need to put the ranges of numbers you were assigned
by the government in Accounting > Customers > e-Faktur

When you validate an invoice, where the partner has the ID PKP
field checked, a tax number will be assigned to that invoice.
Afterwards, you can filter the invoices still to export in the
invoices list and click on Action > Download e-Faktur to download
the csv and upload it to the site of the government.

You can replace an already sent invoice by another by indicating
the replaced invoice and the new one and you can reset an invoice
you have not already sent to the government to reuse its number.
    

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
account_move_efaktur_form_view account.move.efaktur.form.view account.move field Inherits account.view_move_form
account_move_efaktur_tree_view account.move.efaktur.list.view account.move field Inherits account.view_invoice_tree
efaktur_tree_view l10n_id_efaktur.efaktur.range.list.view l10n_id_efaktur.efaktur.range list New
l10n_id_efaktur_document_filter_view l10n_id.efaktur.document.filter.view l10n_id_efaktur.document search New
l10n_id_efaktur_document_form_view l10n_id.efaktur.document.form.view l10n_id_efaktur.document form New
l10n_id_efaktur_document_list_view l10n_id.efaktur.document.list.view l10n_id_efaktur.document list New
res_config_settings_view_form res.config.settings.view.form.chilean.loc res.config.settings xpath Inherits account.res_config_settings_view_form
res_partner_tax_form_view res.partner.tax.form.view res.partner xpath Inherits base.view_partner_form
view_account_invoice_filter account.move.select.l10n_id.inherit account.move field Inherits account.view_account_invoice_filter
Models touched (5)

New fields (8)
  • l10n_id_available_range_count Integer
    compute='_compute_available_range_count' compute_sudo=True
  • l10n_id_efaktur_document Many2one → l10n_id_efaktur.document
    copy=False readonly=True string='e-Faktur Document' args: 'l10n_id_efaktur.document'
  • l10n_id_efaktur_range Many2one → l10n_id_efaktur.efaktur.range
    copy=False domain="[('company_id', '=', company_id), ('available', '>', 0)]" string='E-faktur Range' args: 'l10n_id_efaktur.efaktur.range'
  • l10n_id_kode_transaksi Selection
    compute='_compute_kode_transaksi' copy=False help='Dua digit pertama nomor pajak' readonly=False store=True string='Kode Transaksi' args: [('01', '01 To the Parties that is not VAT Collector (Regular Customers)'), ('02', '02 To the Treasurer'), ('03', '03 To other VAT Collectors other than the Treasurer'), ('04', '04 Other Value of VAT Imposition Base'), ('05', '05 Specified Amount (Article 9A Paragraph (1) VAT Law)'), ('06', '06 to individuals holding foreign passports'), ('07', '07 Deliveries that the VAT is not Collected'), ('08', '08 Deliveries that the VAT is Exempted'), ('09', '09 Deliveries of Assets (Article 16D of VAT Law)')]
  • l10n_id_need_kode_transaksi Boolean
    compute='_compute_need_kode_transaksi'
  • l10n_id_replace_invoice_id Many2one → account.move
    copy=False domain="['|', '&', '&', ('state', '=', 'posted'), ('partner_id', '=', partner_id), ('reversal_move_ids', '!=', False), ('state', '=', 'cancel')]" index='btree_not_null' string='Replace Invoice' args: 'account.move'
  • l10n_id_show_kode_transaksi Boolean
    compute='_compute_show_kode_transaksi'
  • l10n_id_tax_number Char
    copy=False string='Tax Number'
Public methods (4)
  • button_draft(self)
  • download_csv(self)
  • download_efaktur(self)
    Collect the data and execute function _generate_efaktur.
  • reset_efaktur(self)
    Reset E-Faktur, so it can be use for other invoice.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • active Boolean
    default=True string='Active'
  • attachment_id Many2one → ir.attachment
    comodel_name='ir.attachment' readonly=True
  • company_id Many2one → res.company
    default=<expr> readonly=True required=True args: 'res.company'
  • invoice_ids One2many → account.move
    comodel_name='account.move' domain="[('move_type', 'in', ['out_invoice', 'out_refund']), ('company_id', '=', company_id), ('l10n_id_efaktur_document', '=', False), ('l10n_id_tax_number', '!=', False), ('state', '=', 'posted')]" inverse_name='l10n_id_efaktur_document' tracking=True
  • name Char
    compute='_compute_name' precompute=True readonly=False required=True store=True
Public methods (2)
  • action_download(self)
    Download the e-faktur related attachment
  • action_regenerate(self)
    Regenerate the e-faktur csv file, based on the invoice in the document. All new file generation will log a copy of the attachment to keep track of past generations.

New fields (5)
  • available Integer
    readonly=True
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • max Char
    required=True
  • min Char
    required=True
  • next_num Integer
    compute='_compute_next_num'
Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • pop_number(self)
    Consume the availability of a specific range to generate the eTax number for an invoice
  • push_number(self, company_id, number)
    @api.model
    Restoring the eTax number that got released after doing reset eFaktur on an invoice so that it can be reused :param company_id (int): company ID :param number (str): number to be restored
  • write(self, vals)
    Override to determine behaviour of changing min and max of an e-Faktur range For unused ranges, availability lowers when minimum is increased or maximum is decreased. Vice versa applies. For used ranges, minimum is fixed while maximum can only be udpated to a value above the used number. Availability decreases when the maximum is decreased and vice versa.

New fields (3)
  • l10n_id_kode_transaksi Selection
    default='01' help='Dua digit pertama nomor pajak' string='Invoice Transaction Code' tracking=True args: [('01', '01 To the Parties that is not VAT Collector (Regular Customers)'), ('02', '02 To the Treasurer'), ('03', '03 To other VAT Collectors other than the Treasurer'), ('04', '04 Other Value of VAT Imposition Base'), ('05', '05 Specified Amount (Article 9A Paragraph (1) VAT Law)'), ('06', '06 to individuals holding foreign passports'), ('07', '07 Deliveries that the VAT is not Collected'), ('08', '08 Deliveries that the VAT is Exempted'), ('09', '09 Deliveries of Assets (Article 16D of VAT Law)')]
  • l10n_id_nik Char
    string='NIK'
  • l10n_id_pkp Boolean
    compute='_compute_l10n_id_pkp' help='Denoting whether the following partner is taxable' readonly=False store=True string='Is PKP'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/l10n_id_efaktur
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Josse Colpaert, Laurent Smet, Jorge Pinna Puissant, Andrea Grazioso (agr-odoo), Gorash, william-andre, nni-odoo, Habib (ayh), alsh-odoo, Louis Wicket (wil), Claire Bretton (clbr), Dylan Kiss (dyki), arsi, hupo-odoo, paso-odoo, Sarah Bellefroid, Nicolas Viseur (vin), Jordan D. (Joda), mega, nni@odoo.com, Mohammed Erradi (moer), kaju-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_id
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
E-Faktur Menu(Indonesia)
Format: 010.000-16.00000001
* 2 (dua) digit pertama adalah Kode Transaksi
* 1 (satu) digit berikutnya adalah Kode Status
* 3 (tiga) digit berikutnya adalah Kode Cabang
* 2 (dua) digit pertama adalah Tahun Penerbitan
* 8 (delapan) digit berikutnya adalah Nomor Urut

To be able to export customer invoices as e-Faktur,
you need to put the ranges of numbers you were assigned
by the government in Accounting > Customers > e-Faktur

When you validate an invoice, where the partner has the ID PKP
field checked, a tax number will be assigned to that invoice.
Afterwards, you can filter the invoices still to export in the
invoices list and click on Action > Download e-Faktur to download
the csv and upload it to the site of the government.

You can replace an already sent invoice by another by indicating
the replaced invoice and the new one and you can reset an invoice
you have not already sent to the government to reuse its number.
    

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
account_move_efaktur_form_view account.move.efaktur.form.view account.move field Inherits account.view_move_form
account_move_efaktur_tree_view account.move.efaktur.tree.view account.move field Inherits account.view_invoice_tree
efaktur_tree_view l10n_id_efaktur.efaktur.range.tree.view l10n_id_efaktur.efaktur.range tree New
res_config_settings_view_form res.config.settings.view.form.chilean.loc res.config.settings xpath Inherits account.res_config_settings_view_form
res_partner_tax_form_view res.partner.tax.form.view res.partner xpath Inherits base.view_partner_form
view_account_invoice_filter account.move.select.l10n_id.inherit account.move field Inherits account.view_account_invoice_filter
Models touched (4)

New fields (6)
  • l10n_id_attachment_id Many2one → ir.attachment
    copy=False readonly=True args: 'ir.attachment'
  • l10n_id_csv_created Boolean
    compute='_compute_csv_created' copy=False args: 'CSV Created'
  • l10n_id_kode_transaksi Selection
    compute='_compute_kode_transaksi' copy=False help='Dua digit pertama nomor pajak' readonly=False store=True string='Kode Transaksi' args: [('01', '01 To the Parties that is not VAT Collector (Regular Customers)'), ('02', '02 To the Treasurer'), ('03', '03 To other VAT Collectors other than the Treasurer'), ('04', '04 Other Value of VAT Imposition Base'), ('05', '05 Specified Amount (Article 9A Paragraph (1) VAT Law)'), ('06', '06 to individuals holding foreign passports'), ('07', '07 Deliveries that the VAT is not Collected'), ('08', '08 Deliveries that the VAT is Exempted'), ('09', '09 Deliveries of Assets (Article 16D of VAT Law)')]
  • l10n_id_need_kode_transaksi Boolean
    compute='_compute_need_kode_transaksi'
  • l10n_id_replace_invoice_id Many2one → account.move
    copy=False domain="['|', '&', '&', ('state', '=', 'posted'), ('partner_id', '=', partner_id), ('reversal_move_id', '!=', False), ('state', '=', 'cancel')]" index='btree_not_null' string='Replace Invoice' args: 'account.move'
  • l10n_id_tax_number Char
    copy=False string='Tax Number'
Public methods (3)
  • download_csv(self)
  • download_efaktur(self)
    Collect the data and execute function _generate_efaktur.
  • reset_efaktur(self)
    Reset E-Faktur, so it can be use for other invoice.

New fields (4)
  • available Integer
    compute='_compute_available' store=True
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • max Char
    compute='_compute_default' readonly=False store=True
  • min Char
    compute='_compute_default' readonly=False store=True
Public methods (3)
  • pop_number(self, company_id)
    @api.model
  • push_number(self, company_id, number)
    @api.model
  • push_numbers(self, company_id, min, max)
    @api.model

New fields (2)
  • l10n_id_tax_address Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Address'
  • l10n_id_tax_name Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Name'
Public methods (0)

No public methods.

New fields (5)
  • l10n_id_kode_transaksi Selection
    default='01' help='Dua digit pertama nomor pajak' string='Kode Transaksi' args: [('01', '01 To the Parties that is not VAT Collector (Regular Customers)'), ('02', '02 To the Treasurer'), ('03', '03 To other VAT Collectors other than the Treasurer'), ('04', '04 Other Value of VAT Imposition Base'), ('05', '05 Specified Amount (Article 9A Paragraph (1) VAT Law)'), ('06', '06 to individuals holding foreign passports'), ('07', '07 Deliveries that the VAT is not Collected'), ('08', '08 Deliveries that the VAT is Exempted'), ('09', '09 Deliveries of Assets (Article 16D of VAT Law)')]
  • l10n_id_nik Char
    string='NIK'
  • l10n_id_pkp Boolean
    compute='_compute_l10n_id_pkp' readonly=False store=True string='ID PKP'
  • l10n_id_tax_address Char
    args: 'Tax Address'
  • l10n_id_tax_name Char
    args: 'Tax Name'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/l10n_id_efaktur
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSJosse Colpaert, Laurent Smet, Victor Feyens, Andrea Grazioso (agr-odoo), william-andre, Merlin (megu), John Laterre (jol), nni-odoo, alsh-odoo, Claire Bretton (clbr), arsi, paso-odoo, Sarah Bellefroid, Nicolas Viseur (vin), Jordan D. (Joda), mega, bt-ojossen, nni@odoo.com, Mohammed Erradi (moer)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:51
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_id
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
    - l10n_multilang
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        E-Faktur Menu(Indonesia)
        Format : 010.000-16.00000001
        * 2 (dua) digit pertama adalah Kode Transaksi
        * 1 (satu) digit berikutnya adalah Kode Status
        * 3 (tiga) digit berikutnya adalah Kode Cabang
        * 2 (dua) digit pertama adalah Tahun Penerbitan
        * 8 (delapan) digit berikutnya adalah Nomor Urut

        To be able to export customer invoices as e-Faktur,
        you need to put the ranges of numbers you were assigned
        by the government in Accounting > Customers > e-Faktur

        When you validate an invoice, where the partner has the ID PKP
        field checked, a tax number will be assigned to that invoice.
        Afterwards, you can filter the invoices still to export in the
        invoices list and click on Action > Download e-Faktur to download
        the csv and upload it to the site of the government.

        You can replace an already sent invoice by another by indicating
        the replaced invoice and the new one and you can reset an invoice
        you have not already sent to the government to reuse its number.
    

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
account_move_efaktur_form_view account.move.efaktur.form.view account.move field Inherits account.view_move_form
account_move_efaktur_tree_view account.move.efaktur.tree.view account.move field Inherits account.view_invoice_tree
efaktur_tree_view l10n_id_efaktur.efaktur.range.tree.view l10n_id_efaktur.efaktur.range tree New
res_config_settings_view_form res.config.settings.view.form.chilean.loc res.config.settings xpath Inherits account.res_config_settings_view_form
res_partner_tax_form_view res.partner.tax.form.view res.partner xpath Inherits base.view_partner_form
view_account_invoice_filter account.move.select.l10n_id.inherit account.move field Inherits account.view_account_invoice_filter
Models touched (4)

New fields (6)
  • l10n_id_attachment_id Many2one → ir.attachment
    copy=False readonly=True args: 'ir.attachment'
  • l10n_id_csv_created Boolean
    compute='_compute_csv_created' copy=False args: 'CSV Created'
  • l10n_id_kode_transaksi Selection
    compute='_compute_kode_transaksi' copy=False help='Dua digit pertama nomor pajak' readonly=False states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Kode Transaksi' args: [('01', '01 To the Parties that is not VAT Collector (Regular Customers)'), ('02', '02 To the Treasurer'), ('03', '03 To other VAT Collectors other than the Treasurer'), ('04', '04 Other Value of VAT Imposition Base'), ('05', '05 Specified Amount (Article 9A Paragraph (1) VAT Law)'), ('06', '06 to individuals holding foreign passports'), ('07', '07 Deliveries that the VAT is not Collected'), ('08', '08 Deliveries that the VAT is Exempted'), ('09', '09 Deliveries of Assets (Article 16D of VAT Law)')]
  • l10n_id_need_kode_transaksi Boolean
    compute='_compute_need_kode_transaksi'
  • l10n_id_replace_invoice_id Many2one → account.move
    copy=False domain="['|', '&', '&', ('state', '=', 'posted'), ('partner_id', '=', partner_id), ('reversal_move_id', '!=', False), ('state', '=', 'cancel')]" index='btree_not_null' string='Replace Invoice' args: 'account.move'
  • l10n_id_tax_number Char
    copy=False string='Tax Number'
Public methods (3)
  • download_csv(self)
  • download_efaktur(self)
    Collect the data and execute function _generate_efaktur.
  • reset_efaktur(self)
    Reset E-Faktur, so it can be use for other invoice.

New fields (4)
  • available Integer
    compute='_compute_available' store=True
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • max Char
    compute='_compute_default' readonly=False store=True
  • min Char
    compute='_compute_default' readonly=False store=True
Public methods (3)
  • pop_number(self, company_id)
    @api.model
  • push_number(self, company_id, number)
    @api.model
  • push_numbers(self, company_id, min, max)
    @api.model

New fields (2)
  • l10n_id_tax_address Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Address'
  • l10n_id_tax_name Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Name'
Public methods (0)

No public methods.

New fields (5)
  • l10n_id_kode_transaksi Selection
    default='01' help='Dua digit pertama nomor pajak' string='Kode Transaksi' args: [('01', '01 To the Parties that is not VAT Collector (Regular Customers)'), ('02', '02 To the Treasurer'), ('03', '03 To other VAT Collectors other than the Treasurer'), ('04', '04 Other Value of VAT Imposition Base'), ('05', '05 Specified Amount (Article 9A Paragraph (1) VAT Law)'), ('06', '06 to individuals holding foreign passports'), ('07', '07 Deliveries that the VAT is not Collected'), ('08', '08 Deliveries that the VAT is Exempted'), ('09', '09 Deliveries of Assets (Article 16D of VAT Law)')]
  • l10n_id_nik Char
    string='NIK'
  • l10n_id_pkp Boolean
    compute='_compute_l10n_id_pkp' readonly=False store=True string='ID PKP'
  • l10n_id_tax_address Char
    args: 'Tax Address'
  • l10n_id_tax_name Char
    args: 'Tax Name'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/l10n_id_efaktur
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSJosse Colpaert, Nicolas Lempereur, Yannick Tivisse, Xavier-Do, Andrea Grazioso (agr-odoo), Adrien Widart, Djamel (otd), Benjamin Frantzen (bfr), Nicolas (vin), Merlin (megu), John Laterre (jol), nni-odoo, paso-odoo, Sarah Bellefroid, Nicolas Viseur (vin), mega
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:28
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_id
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
    - l10n_multilang
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        E-Faktur Menu(Indonesia)
        Format : 010.000-16.00000001
        * 2 (dua) digit pertama adalah Kode Transaksi
        * 1 (satu) digit berikutnya adalah Kode Status
        * 3 (tiga) digit berikutnya adalah Kode Cabang
        * 2 (dua) digit pertama adalah Tahun Penerbitan
        * 8 (delapan) digit berikutnya adalah Nomor Urut

        To be able to export customer invoices as e-Faktur,
        you need to put the ranges of numbers you were assigned
        by the government in Accounting > Customers > e-Faktur

        When you validate an invoice, where the partner has the ID PKP
        field checked, a tax number will be assigned to that invoice.
        Afterwards, you can filter the invoices still to export in the
        invoices list and click on Action > Download e-Faktur to download
        the csv and upload it to the site of the government.

        You can replace an already sent invoice by another by indicating
        the replaced invoice and the new one and you can reset an invoice
        you have not already sent to the government to reuse its number.
    

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
account_move_efaktur_form_view account.move.efaktur.form.view account.move field Inherits account.view_move_form
account_move_efaktur_tree_view account.move.efaktur.tree.view account.move field Inherits account.view_invoice_tree
efaktur_tree_view l10n_id_efaktur.efaktur.range.tree.view l10n_id_efaktur.efaktur.range tree New
res_config_settings_view_form res.config.settings.view.form.chilean.loc res.config.settings xpath Inherits account.res_config_settings_view_form
res_partner_tax_form_view res.partner.tax.form.view res.partner xpath Inherits base.view_partner_form
view_account_invoice_filter account.move.select.l10n_id.inherit account.move field Inherits account.view_account_invoice_filter
Models touched (4)

New fields (6)
  • l10n_id_attachment_id Many2one → ir.attachment
    copy=False readonly=True args: 'ir.attachment'
  • l10n_id_csv_created Boolean
    compute='_compute_csv_created' copy=False args: 'CSV Created'
  • l10n_id_kode_transaksi Selection
    compute='_compute_kode_transaksi' copy=False help='Dua digit pertama nomor pajak' readonly=False states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Kode Transaksi' args: [('01', '01 Kepada Pihak yang Bukan Pemungut PPN (Customer Biasa)'), ('02', '02 Kepada Pemungut Bendaharawan (Dinas Kepemerintahan)'), ('03', '03 Kepada Pemungut Selain Bendaharawan (BUMN)'), ('04', '04 DPP Nilai Lain (PPN 1%)'), ('05', '05 Besaran Tertentu'), ('06', '06 Penyerahan Lainnya (Turis Asing)'), ('07', '07 Penyerahan yang PPN-nya Tidak Dipungut (Kawasan Ekonomi Khusus/ Batam)'), ('08', '08 Penyerahan yang PPN-nya Dibebaskan (Impor Barang Tertentu)'), ('09', '09 Penyerahan Aktiva ( Pasal 16D UU PPN )')]
  • l10n_id_need_kode_transaksi Boolean
    compute='_compute_need_kode_transaksi'
  • l10n_id_replace_invoice_id Many2one → account.move
    copy=False domain="['|', '&', '&', ('state', '=', 'posted'), ('partner_id', '=', partner_id), ('reversal_move_id', '!=', False), ('state', '=', 'cancel')]" string='Replace Invoice' args: 'account.move'
  • l10n_id_tax_number Char
    copy=False string='Tax Number'
Public methods (3)
  • download_csv(self)
  • download_efaktur(self)
    Collect the data and execute function _generate_efaktur.
  • reset_efaktur(self)
    Reset E-Faktur, so it can be use for other invoice.

New fields (4)
  • available Integer
    compute='_compute_available' store=True
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • max Char
    compute='_compute_default' readonly=False store=True
  • min Char
    compute='_compute_default' readonly=False store=True
Public methods (3)
  • pop_number(self, company_id)
    @api.model
  • push_number(self, company_id, number)
    @api.model
  • push_numbers(self, company_id, min, max)
    @api.model

New fields (2)
  • l10n_id_tax_address Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Address'
  • l10n_id_tax_name Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Name'
Public methods (0)

No public methods.

New fields (5)
  • l10n_id_kode_transaksi Selection
    default='01' help='Dua digit pertama nomor pajak' string='Kode Transaksi' args: [('01', '01 Kepada Pihak yang Bukan Pemungut PPN (Customer Biasa)'), ('02', '02 Kepada Pemungut Bendaharawan (Dinas Kepemerintahan)'), ('03', '03 Kepada Pemungut Selain Bendaharawan (BUMN)'), ('04', '04 DPP Nilai Lain (PPN 1%)'), ('05', '05 Besaran Tertentu'), ('06', '06 Penyerahan Lainnya (Turis Asing)'), ('07', '07 Penyerahan yang PPN-nya Tidak Dipungut (Kawasan Ekonomi Khusus/ Batam)'), ('08', '08 Penyerahan yang PPN-nya Dibebaskan (Impor Barang Tertentu)'), ('09', '09 Penyerahan Aktiva ( Pasal 16D UU PPN )')]
  • l10n_id_nik Char
    string='NIK'
  • l10n_id_pkp Boolean
    compute='_compute_l10n_id_pkp' readonly=False store=True string='ID PKP'
  • l10n_id_tax_address Char
    args: 'Tax Address'
  • l10n_id_tax_name Char
    args: 'Tax Name'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/l10n_id_efaktur
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSMartin Trigaux, Josse Colpaert, Nicolas Martinelli, Nicolas Lempereur, wan, Xavier-Do, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Widart, Djamel (otd), Nicolas (vin), Merlin (megu), william, John Laterre (jol), nni-odoo, paso-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_id
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
    - l10n_multilang
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        E-Faktur Menu(Indonesia)
        Format : 010.000-16.00000001
        * 2 (dua) digit pertama adalah Kode Transaksi
        * 1 (satu) digit berikutnya adalah Kode Status
        * 3 (tiga) digit berikutnya adalah Kode Cabang
        * 2 (dua) digit pertama adalah Tahun Penerbitan
        * 8 (delapan) digit berikutnya adalah Nomor Urut

        To be able to export customer invoices as e-Faktur,
        you need to put the ranges of numbers you were assigned
        by the government in Accounting > Customers > e-Faktur

        When you validate an invoice, where the partner has the ID PKP
        field checked, a tax number will be assigned to that invoice.
        Afterwards, you can filter the invoices still to export in the
        invoices list and click on Action > Download e-Faktur to download
        the csv and upload it to the site of the government.

        You can replace an already sent invoice by another by indicating
        the replaced invoice and the new one and you can reset an invoice
        you have not already sent to the government to reuse its number.
    

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
account_move_efaktur_form_view account.move.efaktur.form.view account.move field Inherits account.view_move_form
account_move_efaktur_tree_view account.move.efaktur.tree.view account.move field Inherits account.view_invoice_tree
efaktur_tree_view l10n_id_efaktur.efaktur.range.tree.view l10n_id_efaktur.efaktur.range tree New
res_config_settings_view_form res.config.settings.view.form.chilean.loc res.config.settings xpath Inherits account.res_config_settings_view_form
res_partner_tax_form_view res.partner.tax.form.view res.partner field Inherits base.view_partner_form
view_account_invoice_filter account.move.select.l10n_id.inherit account.move field Inherits account.view_account_invoice_filter
Models touched (4)

New fields (6)
  • l10n_id_attachment_id Many2one → ir.attachment
    copy=False readonly=True args: 'ir.attachment'
  • l10n_id_csv_created Boolean
    compute='_compute_csv_created' copy=False args: 'CSV Created'
  • l10n_id_kode_transaksi Selection
    compute='_compute_kode_transaksi' copy=False help='Dua digit pertama nomor pajak' readonly=False states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]} store=True string='Kode Transaksi' args: [('01', '01 Kepada Pihak yang Bukan Pemungut PPN (Customer Biasa)'), ('02', '02 Kepada Pemungut Bendaharawan (Dinas Kepemerintahan)'), ('03', '03 Kepada Pemungut Selain Bendaharawan (BUMN)'), ('04', '04 DPP Nilai Lain (PPN 1%)'), ('05', '05 Besaran Tertentu'), ('06', '06 Penyerahan Lainnya (Turis Asing)'), ('07', '07 Penyerahan yang PPN-nya Tidak Dipungut (Kawasan Ekonomi Khusus/ Batam)'), ('08', '08 Penyerahan yang PPN-nya Dibebaskan (Impor Barang Tertentu)'), ('09', '09 Penyerahan Aktiva ( Pasal 16D UU PPN )')]
  • l10n_id_need_kode_transaksi Boolean
    compute='_compute_need_kode_transaksi'
  • l10n_id_replace_invoice_id Many2one → account.move
    copy=False domain="['|', '&', '&', ('state', '=', 'posted'), ('partner_id', '=', partner_id), ('reversal_move_id', '!=', False), ('state', '=', 'cancel')]" string='Replace Invoice' args: 'account.move'
  • l10n_id_tax_number Char
    copy=False string='Tax Number'
Public methods (3)
  • download_csv(self)
  • download_efaktur(self)
    Collect the data and execute function _generate_efaktur.
  • reset_efaktur(self)
    Reset E-Faktur, so it can be use for other invoice.

New fields (4)
  • available Integer
    compute='_compute_available' store=True
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • max Char
    compute='_compute_default' readonly=False store=True
  • min Char
    compute='_compute_default' readonly=False store=True
Public methods (3)
  • pop_number(self, company_id)
    @api.model
  • push_number(self, company_id, number)
    @api.model
  • push_numbers(self, company_id, min, max)
    @api.model

New fields (2)
  • l10n_id_tax_address Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Address'
  • l10n_id_tax_name Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Name'
Public methods (0)

No public methods.

New fields (6)
  • country_code Char
    related='country_id.code' string='Country Code'
  • l10n_id_kode_transaksi Selection
    help='Dua digit pertama nomor pajak' string='Kode Transaksi' args: [('01', '01 Kepada Pihak yang Bukan Pemungut PPN (Customer Biasa)'), ('02', '02 Kepada Pemungut Bendaharawan (Dinas Kepemerintahan)'), ('03', '03 Kepada Pemungut Selain Bendaharawan (BUMN)'), ('04', '04 DPP Nilai Lain (PPN 1%)'), ('05', '05 Besaran Tertentu'), ('06', '06 Penyerahan Lainnya (Turis Asing)'), ('07', '07 Penyerahan yang PPN-nya Tidak Dipungut (Kawasan Ekonomi Khusus/ Batam)'), ('08', '08 Penyerahan yang PPN-nya Dibebaskan (Impor Barang Tertentu)'), ('09', '09 Penyerahan Aktiva ( Pasal 16D UU PPN )')]
  • l10n_id_nik Char
    string='NIK'
  • l10n_id_pkp Boolean
    compute='_compute_l10n_id_pkp' readonly=False store=True string='ID PKP'
  • l10n_id_tax_address Char
    args: 'Tax Address'
  • l10n_id_tax_name Char
    args: 'Tax Name'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/l10n_id_efaktur
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLEYes
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSJosse Colpaert, Nicolas Martinelli, Xavier-Do, Andrea Grazioso (agr-odoo), Merlin (megu), John Laterre (jol), nni-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_id
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        E-Faktur Menu(Indonesia)
        Format : 010.000-16.00000001
        * 2 (dua) digit pertama adalah Kode Transaksi
        * 1 (satu) digit berikutnya adalah Kode Status
        * 3 (tiga) digit berikutnya adalah Kode Cabang
        * 2 (dua) digit pertama adalah Tahun Penerbitan
        * 8 (delapan) digit berikutnya adalah Nomor Urut
        
        To be able to export customer invoices as e-Faktur,
        you need to put the ranges of numbers you were assigned
        by the government in Accounting > Customers > e-Faktur
                    
        When you validate an invoice, where the partner has the ID PKP
        field checked, a tax number will be assigned to that invoice. 
        Afterwards, you can filter the invoices still to export in the
        invoices list and click on Action > Download e-Faktur to download 
        the csv and upload it to the site of the government. 
        
        You can replace an already sent invoice by another by indicating
        the replaced invoice and the new one and you can reset an invoice
        you have not already sent to the government to reuse its number.
    

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
account_move_efaktur_form_view account.move.efaktur.form.view account.move field Inherits account.view_move_form
account_move_efaktur_tree_view account.move.efaktur.tree.view account.move field Inherits account.view_invoice_tree
efaktur_tree_view l10n_id_efaktur.efaktur.range.tree.view l10n_id_efaktur.efaktur.range tree New
res_config_settings_view_form res.config.settings.view.form.chilean.loc res.config.settings xpath Inherits account.res_config_settings_view_form
res_partner_tax_form_view res.partner.tax.form.view res.partner field Inherits base.view_partner_form
view_account_invoice_filter account.move.select.l10n_id.inherit account.move field Inherits account.view_account_invoice_filter
Models touched (4)

New fields (7)
  • country_code Char
    related='company_id.country_id.code' string='Country Code'
  • l10n_id_attachment_id Many2one → ir.attachment
    copy=False readonly=True args: 'ir.attachment'
  • l10n_id_csv_created Boolean
    compute='_compute_csv_created' copy=False args: 'CSV Created'
  • l10n_id_kode_transaksi Selection
    copy=False help='Dua digit pertama nomor pajak' readonly=True states={'draft': [('readonly', False)]} string='Kode Transaksi' args: [('01', '01 Kepada Pihak yang Bukan Pemungut PPN (Customer Biasa)'), ('02', '02 Kepada Pemungut Bendaharawan (Dinas Kepemerintahan)'), ('03', '03 Kepada Pemungut Selain Bendaharawan (BUMN)'), ('04', '04 DPP Nilai Lain (PPN 1%)'), ('05', '05 Besaran Tertentu'), ('06', '06 Penyerahan Lainnya (Turis Asing)'), ('07', '07 Penyerahan yang PPN-nya Tidak Dipungut (Kawasan Ekonomi Khusus/ Batam)'), ('08', '08 Penyerahan yang PPN-nya Dibebaskan (Impor Barang Tertentu)'), ('09', '09 Penyerahan Aktiva ( Pasal 16D UU PPN )')]
  • l10n_id_need_kode_transaksi Boolean
    compute='_compute_need_kode_transaksi'
  • l10n_id_replace_invoice_id Many2one → account.move
    copy=False domain="['|', '&', '&', ('state', '=', 'posted'), ('partner_id', '=', partner_id), ('reversal_move_id', '!=', False), ('state', '=', 'cancel')]" string='Replace Invoice' args: 'account.move'
  • l10n_id_tax_number Char
    copy=False string='Tax Number'
Public methods (4)
  • download_csv(self)
  • download_efaktur(self)
    Collect the data and execute function _generate_efaktur.
  • post(self)
    Set E-Faktur number after validation.
  • reset_efaktur(self)
    Reset E-Faktur, so it can be use for other invoice.

New fields (4)
  • available Integer
    compute='_compute_available' store=True
  • company_id Many2one → res.company
    default=<expr> required=True args: 'res.company'
  • max Char
    compute='_compute_default' readonly=False store=True
  • min Char
    compute='_compute_default' readonly=False store=True
Public methods (3)
  • pop_number(self, company_id)
    @api.model
  • push_number(self, company_id, number)
    @api.model
  • push_numbers(self, company_id, min, max)
    @api.model

New fields (2)
  • l10n_id_tax_address Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Address'
  • l10n_id_tax_name Char
    readonly=False related='company_id.partner_id.l10n_id_tax_address' args: 'Tax Name'
Public methods (0)

No public methods.

New fields (6)
  • country_code Char
    related='country_id.code' string='Country Code'
  • l10n_id_kode_transaksi Selection
    help='Dua digit pertama nomor pajak' string='Kode Transaksi' args: [('01', '01 Kepada Pihak yang Bukan Pemungut PPN (Customer Biasa)'), ('02', '02 Kepada Pemungut Bendaharawan (Dinas Kepemerintahan)'), ('03', '03 Kepada Pemungut Selain Bendaharawan (BUMN)'), ('04', '04 DPP Nilai Lain (PPN 1%)'), ('05', '05 Besaran Tertentu'), ('06', '06 Penyerahan Lainnya (Turis Asing)'), ('07', '07 Penyerahan yang PPN-nya Tidak Dipungut (Kawasan Ekonomi Khusus/ Batam)'), ('08', '08 Penyerahan yang PPN-nya Dibebaskan (Impor Barang Tertentu)'), ('09', '09 Penyerahan Aktiva ( Pasal 16D UU PPN )')]
  • l10n_id_nik Char
    string='NIK'
  • l10n_id_pkp Boolean
    compute='_compute_l10n_id_pkp' readonly=False store=True string='ID PKP'
  • l10n_id_tax_address Char
    args: 'Tax Address'
  • l10n_id_tax_name Char
    args: 'Tax Name'
Public methods (0)

No public methods.