Taiwan - E-invoicing

l10n_tw_edi_ecpay
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/l10n_tw_edi_ecpay
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSOdoo Translation Bot, Moens Alexandre, Dylan Kiss (dyki), Claire (clbr), prep-odoo, tau, Victor Miguel Armenta Carrillo, hatr-odoo, Ayush Modi, Arnav Varshney, Jonathan Swales, tau-odoo, erle
WEBSITE
WEBSITEhttps://www.odoo.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_tw
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_address_extended
    - contacts
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        Taiwan - E-invoicing
        =====================
        This module allows the user to send their invoices to the Ecpay system.
    

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
ec_view_tax_form_inherit ec_view_tax_form_inherit account.tax xpath Inherits account.view_tax_form
l10n_tw_edi_invoice_cancel_form l10n_tw_edi.invoice.cancel.form l10n_tw_edi.invoice.cancel form New
l10n_tw_edi_invoice_print_form l10n_tw_edi.invoice.print.form l10n_tw_edi.invoice.print form New
res_config_settings_view_form res.config.settings.view.form.inherit.ecpay res.config.settings xpath Inherits account.res_config_settings_view_form
view_account_move_reversal_inherit_ecpay ec_account_invoice_refund_form_inherit account.move.reversal xpath Inherits account.view_account_move_reversal
view_move_form_inherit_ecpay ecpay_invoice_view_form account.move xpath Inherits account.view_move_form
Models touched (10)

New fields (21)
  • l10n_tw_edi_allowance_notify_way Selection
    copy=False selection=[('email', 'Email'), ('phone', 'Phone')] string='Allowance Notify Way'
  • l10n_tw_edi_carrier_number Char
    compute='_compute_carrier_info' copy=False readonly=False store=True string='Carrier Number'
  • l10n_tw_edi_carrier_number_2 Char
    compute='_compute_carrier_info' copy=False readonly=False store=True string='Carrier Number 2'
  • l10n_tw_edi_carrier_type Selection
    compute='_compute_carrier_info' copy=False help='\n - Citizen Digital Certificate: The carrier number format is 2 capital letters following 14 digits.\n - Mobile Barcode: The carrier number format is / following 7 alphanumeric or +-. string.\n - EasyCard or iPass: The carrier number is the card hidden code, the carrier number 2 is the card visible code.\n ' readonly=False selection=[('1', 'ECpay e-invoice carrier'), ('2', 'Citizen Digital Certificate'), ('3', 'Mobile Barcode'), ('4', 'EasyCard'), ('5', 'iPass')] store=True string='Carrier Type'
  • l10n_tw_edi_clearance_mark Selection
    copy=False selection=[('1', 'NOT via the customs'), ('2', 'Via the customs')] string='Clearance Mark'
  • l10n_tw_edi_ecpay_invoice_id Char
    copy=False readonly=True string='Ecpay Invoice Number'
  • l10n_tw_edi_file Binary
    copy=False export_string_translation=False readonly=True string='Ecpay JSON File'
  • l10n_tw_edi_file_id Many2one → ir.attachment
    comodel_name='ir.attachment' compute=<expr> copy=False depends=['l10n_tw_edi_file'] export_string_translation=False
  • l10n_tw_edi_invalidate_reason Char
    copy=False readonly=True string='Invalidate Reason'
  • l10n_tw_edi_invoice_create_date Datetime
    copy=False readonly=True string='Creation Date'
  • l10n_tw_edi_invoice_type Selection
    compute='_compute_l10n_tw_edi_invoice_type' copy=False readonly=False selection=[('07', 'General Invoice'), ('08', 'Special Invoice')] store=True string='Ecpay Invoice Type'
  • l10n_tw_edi_is_b2b Boolean
    compute='_compute_l10n_tw_edi_is_b2b' string='Is B2B'
  • l10n_tw_edi_is_print Boolean
    compute='_compute_is_print' readonly=False store=True string='Get Printed Version'
  • l10n_tw_edi_is_zero_tax_rate Boolean
    compute='_compute_l10n_tw_edi_is_zero_tax_rate' copy=False string='Is Zero Tax Rate'
  • l10n_tw_edi_love_code Char
    compute='_compute_love_code' readonly=False store=True string='Love Code'
  • l10n_tw_edi_refund_agreement_type Selection
    copy=False selection=[('offline', 'Offline Agreement'), ('online', 'Online Agreement')] string='Refund invoice Agreement Type'
  • l10n_tw_edi_refund_invoice_number Char
    copy=False readonly=True string='Refund Invoice Number'
  • l10n_tw_edi_refund_state Selection
    copy=False readonly=True selection=[('to_be_agreed', 'To be agreed'), ('agreed', 'Agreed'), ('disagreed', 'Disagreed')] string='Refund State'
  • l10n_tw_edi_related_number Char
    copy=False readonly=True store=True string='Related Number'
  • l10n_tw_edi_state Selection
    copy=False readonly=True selection=[('invoiced', 'Invoiced'), ('valid', 'Valid'), ('invalid', 'Invalid')] string='Invoice Status' tracking=True
  • l10n_tw_edi_zero_tax_rate_reason Selection
    copy=False selection=[('71', '71: No.1 export goods'), ('72', '72: No.2 Services related to export sales, or services provided domestically but used abroad'), ('73', '73: No.3 Duty-free shops established by law for the sale and transit or departure of passengers'), ('74', '74: No.4 Sale of goods or services for operation by the operator of the FREE Trade Zone'), ('75', "75: No.5 International transportation. However, foreign transport undertakings operating international transport business in Taiwan shall be limited to those whose countries shall give equal treatment to Taiwan's international transport undertakings or be exempt from similar taxes"), ('76', '76: No.6 Ships, aircraft and distant-water fishing vessels for international transportation'), ('77', '77: No.7 Goods or repair services used by ships, aircraft and distant-water fishing vessels for sale and international transport'), ('78', '78: No.8 The bonded area operator sells goods that are not directly exported by the taxable area operator and the taxable area operator is not exported to the taxation area'), ('79', '79: No.9 The bonded area operator sells the goods that the taxable area operator deposits into the bonded warehouse or logistics center managed by the free port area or customs administration for export')] string='Zero Tax Rate Reason'
Public methods (2)
  • button_draft(self)
  • button_request_cancel(self)

New fields (1)
  • l10n_tw_edi_ecpay_item_sequence Integer
    readonly=True string='Item Sequence'
Public methods (0)

No public methods.

New fields (4)
  • l10n_tw_edi_allowance_notify_way Selection
    selection=[('email', 'Email'), ('phone', 'Phone')] string='Allowance Notify Way'
  • l10n_tw_edi_ecpay_invoice_id Char
    compute='_compute_from_moves'
  • l10n_tw_edi_is_b2b Boolean
    compute='_compute_from_moves'
  • l10n_tw_edi_refund_agreement_type Selection
    selection=[('offline', 'Offline'), ('online', 'Online')] string='Agreement Type'
Public methods (1)
  • reverse_moves(self, is_modify=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • l10n_tw_edi_special_tax_type Selection
    selection=[('1', 'Saloons and tea rooms, coffee shops and bars offering companionship services: Tax rate is 25%'), ('2', 'Night clubs or restaurants providing entertaining show programs: Tax rate is 15%'), ('3', 'Banking businesses, insurance businesses, trust investment businesses, securities businesses, futures businesses, commercial paper businesses and pawn-broking businesses: Tax rate is 2%'), ('4', 'The sales amounts from reinsurance premiums shall be taxed at 1%'), ('5', 'Banking businesses, insurance businesses, trust investment businesses, securities businesses, futures businesses, commercial paper businesses and pawn-broking businesses: Tax rate is 5%'), ('6', 'Core business revenues from the banking and insurance business of the banking and insurance industries (Applicable to sales after July 2014): Tax rate is 5%'), ('7', 'Core business revenues from the banking and insurance business of the banking and insurance industries (Applicable to sales after June 2014): Tax rate is 5%'), ('8', 'Duty free or non-output data')] string='Ecpay Special Tax Type'
  • l10n_tw_edi_tax_type Selection
    compute='_compute_l10n_tw_edi_tax_type' readonly=False selection=[('1', 'Taxable'), ('2', 'Zero tax rate'), ('3', 'Duty free'), ('4', 'Taxable (special tax rate)')] store=True string='Ecpay Tax Type'
Public methods (0)

No public methods.

New fields (2)
  • invoice_id Many2one → account.move
    comodel_name='account.move' readonly=True required=True string='Document To Cancel'
  • reason Char
    help='Reason for cancelling the document.' required=True
Public methods (1)
  • button_request_cancel(self)

New fields (4)
  • invoice_id Many2one → account.move
    comodel_name='account.move' readonly=True required=True string='Document To Print'
  • l10n_tw_edi_is_b2b Boolean
    related='invoice_id.l10n_tw_edi_is_b2b' string='Is B2B'
  • print_format_b2b Selection
    default='1' selection=[('1', 'A4 printing '), ('2', 'A5 printing ')] string='Print Format (B2B)'
  • print_format_b2c Selection
    default='1' selection=[('1', 'single-sided printing'), ('2', 'double-sided printing'), ('3', 'printing with thermal paper')] string='Print Format (B2C)'
Public methods (1)
  • button_print(self)

New fields (4)
  • l10n_tw_edi_ecpay_hashIV Char
    groups='base.group_system' string='HashIV'
  • l10n_tw_edi_ecpay_hashkey Char
    groups='base.group_system' string='Hashkey'
  • l10n_tw_edi_ecpay_merchant_id Char
    groups='base.group_system' string='MerchantID'
  • l10n_tw_edi_ecpay_staging_mode Boolean
    groups='base.group_system' string='Staging mode'
Public methods (0)

No public methods.

New fields (4)
  • l10n_tw_edi_ecpay_hashIV Char
    readonly=False related='company_id.l10n_tw_edi_ecpay_hashIV'
  • l10n_tw_edi_ecpay_hashkey Char
    readonly=False related='company_id.l10n_tw_edi_ecpay_hashkey'
  • l10n_tw_edi_ecpay_merchant_id Char
    readonly=False related='company_id.l10n_tw_edi_ecpay_merchant_id'
  • l10n_tw_edi_ecpay_staging_mode Boolean
    readonly=False related='company_id.l10n_tw_edi_ecpay_staging_mode'
Public methods (0)

No public methods.

New fields (1)
  • invoice_edi_format Selection
    selection_add=[('tw_ecpay', 'ECPay')]
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/18.0/l10n_tw_edi_ecpay
VERSION
VERSION 1.0
CATEGORY
CATEGORYAccounting/Localizations/EDI
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Jairo Llopis, Moens Alexandre, Dylan Kiss (dyki), prep-odoo, tau, hatr-odoo, Arnav Varshney, Jonathan Swales, tau-odoo, erle
WEBSITE
WEBSITEhttps://www.odoo.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:54
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - l10n_tw
    - 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_address_extended
    - contacts
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
        Taiwan - E-invoicing
        =====================
        This module allows the user to send their invoices to the Ecpay system.
    

Code Analysis

Views touched (6)
XML IDNameModelTypeStatus
ec_view_tax_form_inherit ec_view_tax_form_inherit account.tax xpath Inherits account.view_tax_form
l10n_tw_edi_invoice_cancel_form l10n_tw_edi.invoice.cancel.form l10n_tw_edi.invoice.cancel form New
l10n_tw_edi_invoice_print_form l10n_tw_edi.invoice.print.form l10n_tw_edi.invoice.print form New
res_config_settings_view_form res.config.settings.view.form.inherit.ecpay res.config.settings xpath Inherits account.res_config_settings_view_form
view_account_move_reversal_inherit_ecpay ec_account_invoice_refund_form_inherit account.move.reversal xpath Inherits account.view_account_move_reversal
view_move_form_inherit_ecpay ecpay_invoice_view_form account.move xpath Inherits account.view_move_form
Models touched (10)

New fields (21)
  • l10n_tw_edi_allowance_notify_way Selection
    copy=False selection=[('email', 'Email'), ('phone', 'Phone')] string='Allowance Notify Way'
  • l10n_tw_edi_carrier_number Char
    compute='_compute_carrier_info' copy=False readonly=False store=True string='Carrier Number'
  • l10n_tw_edi_carrier_number_2 Char
    compute='_compute_carrier_info' copy=False readonly=False store=True string='Carrier Number 2'
  • l10n_tw_edi_carrier_type Selection
    compute='_compute_carrier_info' copy=False help='\n - Citizen Digital Certificate: The carrier number format is 2 capital letters following 14 digits.\n - Mobile Barcode: The carrier number format is / following 7 alphanumeric or +-. string.\n - EasyCard or iPass: The carrier number is the card hidden code, the carrier number 2 is the card visible code.\n ' readonly=False selection=[('1', 'ECpay e-invoice carrier'), ('2', 'Citizen Digital Certificate'), ('3', 'Mobile Barcode'), ('4', 'EasyCard'), ('5', 'iPass')] store=True string='Carrier Type'
  • l10n_tw_edi_clearance_mark Selection
    copy=False selection=[('1', 'NOT via the customs'), ('2', 'Via the customs')] string='Clearance Mark'
  • l10n_tw_edi_ecpay_invoice_id Char
    copy=False readonly=True string='Ecpay Invoice Number'
  • l10n_tw_edi_file Binary
    copy=False export_string_translation=False readonly=True string='Ecpay JSON File'
  • l10n_tw_edi_file_id Many2one → ir.attachment
    comodel_name='ir.attachment' compute=<expr> copy=False depends=['l10n_tw_edi_file'] export_string_translation=False
  • l10n_tw_edi_invalidate_reason Char
    copy=False readonly=True string='Invalidate Reason'
  • l10n_tw_edi_invoice_create_date Datetime
    copy=False readonly=True string='Creation Date'
  • l10n_tw_edi_invoice_type Selection
    compute='_compute_l10n_tw_edi_invoice_type' copy=False readonly=False selection=[('07', 'General Invoice'), ('08', 'Special Invoice')] store=True string='Ecpay Invoice Type'
  • l10n_tw_edi_is_b2b Boolean
    compute='_compute_l10n_tw_edi_is_b2b' string='Is B2B'
  • l10n_tw_edi_is_print Boolean
    compute='_compute_is_print' readonly=False store=True string='Get Printed Version'
  • l10n_tw_edi_is_zero_tax_rate Boolean
    compute='_compute_l10n_tw_edi_is_zero_tax_rate' copy=False string='Is Zero Tax Rate'
  • l10n_tw_edi_love_code Char
    compute='_compute_love_code' readonly=False store=True string='Love Code'
  • l10n_tw_edi_refund_agreement_type Selection
    copy=False selection=[('offline', 'Offline Agreement'), ('online', 'Online Agreement')] string='Refund invoice Agreement Type'
  • l10n_tw_edi_refund_invoice_number Char
    copy=False readonly=True string='Refund Invoice Number'
  • l10n_tw_edi_refund_state Selection
    copy=False readonly=True selection=[('to_be_agreed', 'To be agreed'), ('agreed', 'Agreed'), ('disagreed', 'Disagreed')] string='Refund State'
  • l10n_tw_edi_related_number Char
    copy=False readonly=True store=True string='Related Number'
  • l10n_tw_edi_state Selection
    copy=False readonly=True selection=[('invoiced', 'Invoiced'), ('valid', 'Valid'), ('invalid', 'Invalid')] string='Invoice Status' tracking=True
  • l10n_tw_edi_zero_tax_rate_reason Selection
    copy=False selection=[('71', '71: No.1 export goods'), ('72', '72: No.2 Services related to export sales, or services provided domestically but used abroad'), ('73', '73: No.3 Duty-free shops established by law for the sale and transit or departure of passengers'), ('74', '74: No.4 Sale of goods or services for operation by the operator of the FREE Trade Zone'), ('75', "75: No.5 International transportation. However, foreign transport undertakings operating international transport business in Taiwan shall be limited to those whose countries shall give equal treatment to Taiwan's international transport undertakings or be exempt from similar taxes"), ('76', '76: No.6 Ships, aircraft and distant-water fishing vessels for international transportation'), ('77', '77: No.7 Goods or repair services used by ships, aircraft and distant-water fishing vessels for sale and international transport'), ('78', '78: No.8 The bonded area operator sells goods that are not directly exported by the taxable area operator and the taxable area operator is not exported to the taxation area'), ('79', '79: No.9 The bonded area operator sells the goods that the taxable area operator deposits into the bonded warehouse or logistics center managed by the free port area or customs administration for export')] string='Zero Tax Rate Reason'
Public methods (2)
  • button_draft(self)
  • button_request_cancel(self)

New fields (1)
  • l10n_tw_edi_ecpay_item_sequence Integer
    readonly=True string='Item Sequence'
Public methods (0)

No public methods.

New fields (4)
  • l10n_tw_edi_allowance_notify_way Selection
    selection=[('email', 'Email'), ('phone', 'Phone')] string='Allowance Notify Way'
  • l10n_tw_edi_ecpay_invoice_id Char
    compute='_compute_from_moves'
  • l10n_tw_edi_is_b2b Boolean
    compute='_compute_from_moves'
  • l10n_tw_edi_refund_agreement_type Selection
    selection=[('offline', 'Offline'), ('online', 'Online')] string='Agreement Type'
Public methods (1)
  • reverse_moves(self, is_modify=False)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (2)
  • l10n_tw_edi_special_tax_type Selection
    selection=[('1', 'Saloons and tea rooms, coffee shops and bars offering companionship services: Tax rate is 25%'), ('2', 'Night clubs or restaurants providing entertaining show programs: Tax rate is 15%'), ('3', 'Banking businesses, insurance businesses, trust investment businesses, securities businesses, futures businesses, commercial paper businesses and pawn-broking businesses: Tax rate is 2%'), ('4', 'The sales amounts from reinsurance premiums shall be taxed at 1%'), ('5', 'Banking businesses, insurance businesses, trust investment businesses, securities businesses, futures businesses, commercial paper businesses and pawn-broking businesses: Tax rate is 5%'), ('6', 'Core business revenues from the banking and insurance business of the banking and insurance industries (Applicable to sales after July 2014): Tax rate is 5%'), ('7', 'Core business revenues from the banking and insurance business of the banking and insurance industries (Applicable to sales after June 2014): Tax rate is 5%'), ('8', 'Duty free or non-output data')] string='Ecpay Special Tax Type'
  • l10n_tw_edi_tax_type Selection
    compute='_compute_l10n_tw_edi_tax_type' readonly=False selection=[('1', 'Taxable'), ('2', 'Zero tax rate'), ('3', 'Duty free'), ('4', 'Taxable (special tax rate)')] store=True string='Ecpay Tax Type'
Public methods (0)

No public methods.

New fields (2)
  • invoice_id Many2one → account.move
    comodel_name='account.move' readonly=True required=True string='Document To Cancel'
  • reason Char
    help='Reason for cancelling the document.' required=True
Public methods (1)
  • button_request_cancel(self)

New fields (4)
  • invoice_id Many2one → account.move
    comodel_name='account.move' readonly=True required=True string='Document To Print'
  • l10n_tw_edi_is_b2b Boolean
    related='invoice_id.l10n_tw_edi_is_b2b' string='Is B2B'
  • print_format_b2b Selection
    default='1' selection=[('1', 'A4 printing '), ('2', 'A5 printing ')] string='Print Format (B2B)'
  • print_format_b2c Selection
    default='1' selection=[('1', 'single-sided printing'), ('2', 'double-sided printing'), ('3', 'printing with thermal paper')] string='Print Format (B2C)'
Public methods (1)
  • button_print(self)

New fields (4)
  • l10n_tw_edi_ecpay_hashIV Char
    groups='base.group_system' string='HashIV'
  • l10n_tw_edi_ecpay_hashkey Char
    groups='base.group_system' string='Hashkey'
  • l10n_tw_edi_ecpay_merchant_id Char
    groups='base.group_system' string='MerchantID'
  • l10n_tw_edi_ecpay_staging_mode Boolean
    groups='base.group_system' string='Staging mode'
Public methods (0)

No public methods.

New fields (4)
  • l10n_tw_edi_ecpay_hashIV Char
    readonly=False related='company_id.l10n_tw_edi_ecpay_hashIV'
  • l10n_tw_edi_ecpay_hashkey Char
    readonly=False related='company_id.l10n_tw_edi_ecpay_hashkey'
  • l10n_tw_edi_ecpay_merchant_id Char
    readonly=False related='company_id.l10n_tw_edi_ecpay_merchant_id'
  • l10n_tw_edi_ecpay_staging_mode Boolean
    readonly=False related='company_id.l10n_tw_edi_ecpay_staging_mode'
Public methods (0)

No public methods.

New fields (1)
  • invoice_edi_format Selection
    selection_add=[('tw_ecpay', 'ECPay')]
Public methods (0)

No public methods.