88 lines
4.0 KiB
Python
88 lines
4.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from odoo import models
|
|
|
|
|
|
class AccountEdiXmlUBLNL(models.AbstractModel):
|
|
_inherit = "account.edi.xml.ubl_bis3"
|
|
_name = 'account.edi.xml.ubl_nl'
|
|
_description = "SI-UBL 2.0 (NLCIUS)"
|
|
|
|
"""
|
|
SI-UBL 2.0 (NLCIUS) and UBL Bis 3 are 2 different formats used in the Netherlands.
|
|
(source: https://github.com/peppolautoriteit-nl/publications/tree/master/NLCIUS-PEPPOLBIS-Differences)
|
|
NLCIUS defines a set of rules
|
|
(source: https://www.softwarepakketten.nl/wiki_uitleg/60&bronw=7/Nadere_specificaties_EN_16931_1_norm_voor_de_Europese_kernfactuur.htm)
|
|
Fortunately, some of these rules are already present in UBL Bis 3, but some are missing.
|
|
|
|
For instance, Bis 3 states that the customizationID should be
|
|
"urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0".
|
|
while in NLCIUS:
|
|
"urn:cen.eu:en16931:2017#compliant#urn:fdc:nen.nl:nlcius:v1.0".
|
|
|
|
Bis 3 and NLCIUS are thus incompatible. Hence, the two separate formats and the additional rules in this file.
|
|
|
|
The trick is to understand which rules are only NLCIUS specific and which are applied to the Bis 3 format.
|
|
"""
|
|
|
|
# -------------------------------------------------------------------------
|
|
# EXPORT
|
|
# -------------------------------------------------------------------------
|
|
|
|
def _export_invoice_filename(self, invoice):
|
|
return f"{invoice.name.replace('/', '_')}_nlcius.xml"
|
|
|
|
def _export_invoice_ecosio_schematrons(self):
|
|
return {
|
|
'invoice': 'org.simplerinvoicing:invoice:2.0.3.3',
|
|
'credit_note': 'org.simplerinvoicing:creditnote:2.0.3.3',
|
|
}
|
|
|
|
def _get_tax_category_list(self, invoice, taxes):
|
|
# EXTENDS account.edi.xml.ubl_bis3
|
|
vals_list = super()._get_tax_category_list(invoice, taxes)
|
|
for tax in vals_list:
|
|
# [BR-NL-35] The use of a tax exemption reason code (cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory
|
|
# /cbc:TaxExemptionReasonCode) is not recommended
|
|
tax.pop('tax_exemption_reason_code')
|
|
return vals_list
|
|
|
|
def _get_partner_address_vals(self, partner):
|
|
# EXTENDS account.edi.xml.ubl_bis3
|
|
vals = super()._get_partner_address_vals(partner)
|
|
# [BR-NL-28] The use of a country subdivision (cac:AccountingCustomerParty/cac:Party/cac:PostalAddress
|
|
# /cbc:CountrySubentity) is not recommended
|
|
vals.pop('country_subentity')
|
|
return vals
|
|
|
|
def _get_invoice_line_allowance_vals_list(self, line, tax_values_list=None):
|
|
# EXTENDS account.edi.xml.ubl_bis3
|
|
vals_list = super()._get_invoice_line_allowance_vals_list(line, tax_values_list=tax_values_list)
|
|
# [BR-NL-32] Use of Discount reason code ( AllowanceChargeReasonCode ) is not recommended.
|
|
# [BR-EN-34] Use of Charge reason code ( AllowanceChargeReasonCode ) is not recommended.
|
|
# Careful! [BR-42]-Each Invoice line allowance (BG-27) shall have an Invoice line allowance reason (BT-139)
|
|
# or an Invoice line allowance reason code (BT-140).
|
|
for vals in vals_list:
|
|
if vals.get('allowance_charge_reason'):
|
|
vals.pop('allowance_charge_reason_code')
|
|
return vals_list
|
|
|
|
def _get_invoice_payment_means_vals_list(self, invoice):
|
|
# EXTENDS account.edi.xml.ubl_bis3
|
|
vals_list = super()._get_invoice_payment_means_vals_list(invoice)
|
|
# [BR-NL-29] The use of a payment means text (cac:PaymentMeans/cbc:PaymentMeansCode/@name) is not recommended
|
|
for vals in vals_list:
|
|
vals.pop('payment_means_code_attrs')
|
|
return vals_list
|
|
|
|
def _export_invoice_vals(self, invoice):
|
|
# EXTENDS account.edi.xml.ubl_bis3
|
|
vals = super()._export_invoice_vals(invoice)
|
|
|
|
vals['vals']['customization_id'] = 'urn:cen.eu:en16931:2017#compliant#urn:fdc:nen.nl:nlcius:v1.0'
|
|
|
|
# [BR-NL-24] Use of previous invoice date ( IssueDate ) is not recommended.
|
|
# vals['vals'].pop('issue_date') # careful, this causes other errors from the validator...
|
|
|
|
return vals
|