first commit

This commit is contained in:
root
2026-03-14 09:42:12 +00:00
commit 0adbd20c2c
10991 changed files with 1646955 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,22 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.model import fields
from trytond.pool import PoolMeta
class InvoiceEdocumentStart(metaclass=PoolMeta):
__name__ = 'account.invoice.edocument.start'
@classmethod
def __setup__(cls):
super().__setup__()
cls.format.selection.append(
('edocument.ubl.invoice', "UBL"))
@fields.depends('format')
def get_templates(self):
templates = super().get_templates()
if self.format == 'edocument.ubl.invoice':
templates.append(('2', '2'))
return templates

View File

@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data depends="account_invoice">
<record model="ir.action.wizard" id="account_invoice.edocument">
<field name="active" eval="True"/>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,19 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.pool import Pool, PoolMeta
class Incoming(metaclass=PoolMeta):
__name__ = 'document.incoming'
@classmethod
def __setup__(cls):
super().__setup__()
cls.type.selection.append(
('ubl_invoice', "UBL Invoice/Credit Note"))
def _process_ubl_invoice(self):
pool = Pool()
Invoice = pool.get('edocument.ubl.invoice')
return Invoice.parse(self.data)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.exceptions import UserError
class InvoiceError(UserError):
pass

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,72 @@
#
#, fuzzy
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr "Edocument Factura UBL"
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
"No s'ha pogut trobar l'empresa per:\n"
"%(company)s"
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr "Tipus de codi d'abonament no soportat: \"%(type_code)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr "No s'ha pogut trobar una moneda amb codi \"%(code)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
"L'import de l'impost %(tax_amount)s de la factura \"%(invoice)s\" és "
"diferent del total d'impostos %(tax_total)s."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
"L'import total %(total_amount)s de la factura \"%(invoice)s\" és diferent de"
" l'import %(amount)s."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr "Tipus de codi de factura no suportat: \"%(type_code)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
"No s'ha trobat un imopst per:\n"
"%(tax_category)s"
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr "No s'ha pogut trobar una unitat amb codi UNECE \"%(code)s."
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr "UBL"
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr "Factura/Abonament UBL"

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,71 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr "E-Dokument UBL-Rechnung"
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
"Das Unternehmen konnte nicht gefunden werden:\n"
"%(company)s"
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr "Nicht unterstützter Storno-Rechnungstyp \"%(type_code)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr "Es konnte keine Währung mit dem Code \"%(code)s\" gefunden werden."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
"Der Steuerbetrag %(tax_amount)s der Rechnung \"%(invoice)s\" weicht vom "
"Steuergesamtbetrag %(tax_total)s ab."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
"Der Gesamtbetrag %(total_amount)s der Rechnung \"%(invoice)s\" weicht vom "
"Betrag %(amount)s ab."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr "Nicht unterstützter Rechnungstyp \"%(type_code)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
"Keine Steuer gefunden für:\n"
"%(tax_category)s"
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr "Es konnte keine Einheit mit dem UNECE-Code \"%(code)s\" gefunden werden."
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr "UBL"
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr "UBL-Rechnung/Storno-Rechnung"

View File

@@ -0,0 +1,72 @@
#
#, fuzzy
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr "Edocumento Factura UBL"
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
"No se ha podido encontrar la empresa para:\n"
"%(company)s"
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr "Tipo de código de abono no soportado: \"%(type_code)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr "No se ha podido encontrar una moneda con código \"%(code)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
"El importe del impuesto %(tax_amount)s de la factura \"%(invoice)s\" es "
"distinto del total de impuestos %(tax_total)s."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
"El importe total %(total_amount)s de la factura \"%(invoice)s\" es distinto "
"del importe %(amount)s."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr "Tipo de código de factura no soportado: \"%(type_code)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
"No se ha podido encontrar un impuesto para:\n"
"%(tax_category)s"
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr "No se ha podido encontrar una unidad con código UNECE \"%(code)s\"."
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr "UBL"
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr "Factura/Abono UBL"

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,72 @@
#
#, fuzzy
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr "Facture électronique UBL"
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
"Impossible de trouver la société pour :\n"
"%(company)s"
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr "Code de type de note de crédit non pris en charge « %(type_code)s »."
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr "Impossible de trouver une devise avec le code « %(code)s »."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
"Le montant de la taxe %(tax_amount)s de la facture « %(invoice)s » est "
"différent du total de la taxe %(tax_total)s."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
"Le montant total %(total_amount)s de la facture « %(invoice)s » est "
"différent du montant %(amount)s."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr "Code de type de facture non pris en charge « %(type_code)s »."
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
"Impossible de trouver la taxe pour :\n"
"%(tax_category)s"
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr "Impossible de trouver une unité avec le code UNECE « %(code)s »."
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr "UBL"
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr "Facture/Note de crédit UBL"

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,72 @@
#
#, fuzzy
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr "E-document UBL Factuur"
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
"Kan het bedrijf niet vinden voor:\n"
"%(company)s"
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr "Creditnota code \"%(type_code)s\" is niet ondersteund."
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr "Er kon geen valuta gevonden worden met code \"%(code)s\"."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
"Het belastingbedrag %(tax_amount)s van de factuur \"%(invoice)s\" verschilt "
"van het totale belastingbedrag %(tax_total)s."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
"Het totaalbedrag %(total_amount)s van de factuur \"%(invoice)s\" verschilt "
"van het bedrag %(amount)s."
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr "Factuur code \"%(type_code)s\" is niet ondersteund."
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
"Geen belasting gevonden voor:\n"
"%(tax_category)s"
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr "Er kon geen eenheid met UNECE-code \"%(code)s\" worden gevonden."
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr "UBL"
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr "UBL-factuur/creditnota"

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,63 @@
#
msgid ""
msgstr "Content-Type: text/plain; charset=utf-8\n"
msgctxt "model:edocument.ubl.invoice,string:"
msgid "Edocument Ubl Invoice"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_company_not_found"
msgid ""
"Could not find the company for:\n"
"%(company)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_credit_note_type_code_unsupported"
msgid "Unsupported credit note type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_currency_not_found"
msgid "Could not find a currency with code \"%(code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_tax_amount_different"
msgid ""
"The tax amount %(tax_amount)s of the invoice \"%(invoice)s\" is different "
"from the tax total %(tax_total)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_total_amount_different"
msgid ""
"The total amount %(total_amount)s of the invoice \"%(invoice)s\" is "
"different from the amount %(amount)s."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_invoice_type_code_unsupported"
msgid "Unsupported invoice type code \"%(type_code)s\"."
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_tax_not_found"
msgid ""
"Could not find tax for:\n"
"%(tax_category)s"
msgstr ""
#, python-format
msgctxt "model:ir.message,text:msg_unit_not_found"
msgid "Could not find a unit with UNECE code \"%(code)s\"."
msgstr ""
msgctxt "selection:account.invoice.edocument.start,format:"
msgid "UBL"
msgstr ""
msgctxt "selection:document.incoming,type:"
msgid "UBL Invoice/Credit Note"
msgstr ""

View File

@@ -0,0 +1,33 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data grouped="1">
<record model="ir.message" id="msg_invoice_type_code_unsupported">
<field name="text">Unsupported invoice type code "%(type_code)s".</field>
</record>
<record model="ir.message" id="msg_credit_note_type_code_unsupported">
<field name="text">Unsupported credit note type code "%(type_code)s".</field>
</record>
<record model="ir.message" id="msg_company_not_found">
<field name="text">Could not find the company for:
%(company)s</field>
</record>
<record model="ir.message" id="msg_currency_not_found">
<field name="text">Could not find a currency with code "%(code)s".</field>
</record>
<record model="ir.message" id="msg_unit_not_found">
<field name="text">Could not find a unit with UNECE code "%(code)s".</field>
</record>
<record model="ir.message" id="msg_tax_not_found">
<field name="text">Could not find tax for:
%(tax_category)s</field>
</record>
<record model="ir.message" id="msg_invoice_total_amount_different">
<field name="text">The total amount %(total_amount)s of the invoice "%(invoice)s" is different from the amount %(amount)s.</field>
</record>
<record model="ir.message" id="msg_invoice_tax_amount_different">
<field name="text">The tax amount %(tax_amount)s of the invoice "%(invoice)s" is different from the tax total %(tax_total)s.</field>
</record>
</data>
</tryton>

View File

@@ -0,0 +1,133 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import re
from trytond.pool import PoolMeta
ISO6523_TYPES = {
'fr_siren': '0002',
'se_orgnr': '0007',
'fr_siret': '0009',
'fi_ytunnus': '0037',
'ch_uid': '0183',
'ee_registrikood': '0191',
'is_kennitala': '0196',
'lt_pvm': '0200',
'be_businessid': '0208',
'fi_associationid': '0212',
'fi_vat': '0213',
'lv_vat': '0218',
'eu_vat': '0223',
}
EAS_TYPES = {
'fr_siren': '0002',
'se_orgnr': '0007',
'fr_siret': '0009',
'fi_ytunnus': '0037',
'ch_uid': '0183',
'ee_registrikood': '0191',
'is_kennitala': '0196',
'lt_pvm': '0200',
'be_businessid': '0208',
'it_codicefiscale': '210',
'fi_associationid': '0212',
'fi_vat': '0213',
'lv_vat': '0218',
'hu_vat': '9910',
'ad_vat': '9922',
'al_vat': '9923',
'be_vat': '9925',
'bg_vat': '9926',
'ch_vat': '9927',
'cy_vat': '9928',
'cz_vat': '9929',
'de_vat': '9930',
'ee_vat': '9931',
'gb_vat': '9932',
'gr_vat': '9933',
'hr_vat': '9934',
'ie_vat': '9935',
'li_vat': '9936',
'lt_vat': '9937',
'lu_vat': '9938',
'mc_vat': '9940',
'me_vat': '9941',
'mk_vat': '9942',
'mt_vat': '9943',
'nl_vat': '9944',
'pl_vat': '9945',
'pt_vat': '9946',
'ro_vat': '9947',
'rs_vat': '9948',
'si_vat': '9949',
'sk_vat': '9950',
'sm_vat': '9951',
'tr_vat': '9952',
'va_vat': '9953',
'fr_vat': '9957',
'us_ein': '9959',
}
class Party(metaclass=PoolMeta):
__name__ = 'party.party'
@property
def identifier_iso6523(self):
for identifier in self.identifiers:
if identifier.iso_6523:
return identifier
@property
def identifier_eas(self):
for identifier in self.identifiers:
if identifier.eas:
return identifier
class Identifier(metaclass=PoolMeta):
__name__ = 'party.identifier'
@property
def iso_6523(self):
return ISO6523_TYPES.get(self.type, '')
@property
def _eas_type(self):
if self.type == 'eu_vat':
code = self.code[:2].lower()
code = (code
.replace('xi', 'gb')
.replace('el', 'gr'))
return f'{code}_vat'
else:
return self.type
@property
def eas_code(self):
return EAS_TYPES.get(self._eas_type, '')
@property
def eas(self):
if self.eas_code:
if re.match(r'[a-z]{2}_vat', self._eas_type):
country = self._eas_type[:2].replace('gr', 'el')
if self.type == 'eu_vat':
code = self.code[2:]
else:
code = self.code
return f'{country}{code}'.lower()
else:
return self.code
@property
def vatin(self):
if re.match(r'[a-z]{2}_vat', self._eas_type):
country = self._eas_type[:2].replace('gr', 'el')
if self.type == 'eu_vat':
code = self.code[2:]
else:
code = self.code
return f'{country}{code}'.upper()

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<CreditNote
xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:py="http://genshi.edgewall.org/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xi:include href="base.xml"/>
<cbc:UBLVersionID py:if="not (specification or '').startswith('peppol')">2.4</cbc:UBLVersionID>
<py:if test="specification == 'peppol-bis-3'">
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
</py:if>
<cbc:ID>${this.invoice.number}</cbc:ID>
<cbc:IssueDate>${this.invoice.invoice_date}</cbc:IssueDate>
<cbc:DueDate>${max(l.maturity_date for l in this.invoice.lines_to_pay if l.maturity_date)}</cbc:DueDate>
<cbc:CreditNoteTypeCode>${this.type_code}</cbc:CreditNoteTypeCode>
<cbc:DocumentCurrencyCode>${this.invoice.currency.code}</cbc:DocumentCurrencyCode>
<cbc:BuyerReference py:if="this.invoice.reference">${this.invoice.reference}</cbc:BuyerReference>
<cac:OrderReference>
<cbc:ID>${this.sale_reference or 'NA'}</cbc:ID>
<cbc:SalesOrderID py:if="this.sale_number">${this.sale_number}</cbc:SalesOrderID>
</cac:OrderReference>
<cac:AdditionalDocumentReference py:for="document in this.additional_documents">
<cbc:ID>${document['id']}</cbc:ID>
<cbc:DocumentTypeCode py:if="document.get('code')">${document['code']}</cbc:DocumentTypeCode>
<cbc:DocumentDescription py:if="document.get('description')">${document['description']}</cbc:DocumentDescription>
<cac:Attachment py:if="document.get('code') != '130'">
<py:choose test="document['type']">
<py:when test="'binary'">
<cbc:EmbeddedDocumentBinaryObject py:attrs="{'mimeCode': document['mimetype'], 'filename': document.get('filename')}">${document['binary']}</cbc:EmbeddedDocumentBinaryObject>
</py:when>
<py:when test="'text'">
<cbc:EmbeddedDocument>${document['text']}</cbc:EmbeddedDocument>
</py:when>
<py:when test="'reference'">
<cac:ExternalReference>
<cbc:URI>${document['reference']}</cbc:URI>
<cbc:FileName py:if="document.get('filename')">${document['filename']}</cbc:FileName>
</cac:ExternalReference>
</py:when>
</py:choose>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AccountingSupplierParty>
${Party(this.accounting_supplier_party, this.accounting_supplier_address, this.accounting_supplier_tax_identifier, specification=specification)}
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
${Party(this.accounting_customer_party, this.accounting_customer_address, this.accounting_customer_tax_identifier, identifications=[this.accounting_customer_party.identifier_iso6523] if (specification or '').startswith('peppol') else None, specification=specification)}
</cac:AccountingCustomerParty>
<py:choose test="(specification or '').startswith('peppol')">
<py:when test="True">
<cac:PaymentTerms py:if="this.invoice.payment_term and this.invoice.payment_term.description">
<cbc:Note>${this.invoice.payment_term.description}</cbc:Note>
</cac:PaymentTerms>
</py:when>
<py:otherwise>
<cac:PaymentTerms py:for="line in this.invoice.lines_to_pay">
<cbc:Note py:if="this.invoice.payment_term and this.invoice.payment_term.description">${this.invoice.payment_term.description}</cbc:Note>
<cbc:Amount py:attrs="{'currencyID': this.invoice.currency.code}">${line.amount}</cbc:Amount>
<cbc:PaymentDueDate>${line.maturity_date}</cbc:PaymentDueDate>
</cac:PaymentTerms>
</py:otherwise>
</py:choose>
<cac:TaxTotal py:for="group, lines, amount in this.taxes">
<cbc:TaxAmount py:attrs="{'currencyID': this.invoice.currency.code}">${-amount}</cbc:TaxAmount>
<cac:TaxSubtotal py:for="line in lines">
<cbc:TaxableAmount py:attrs="{'currencyID': this.invoice.currency.code}">${-line.base}</cbc:TaxableAmount>
<cbc:TaxAmount py:attrs="{'currencyID': this.invoice.currency.code}">${-line.amount}</cbc:TaxAmount>
<cbc:Percent py:if="line.tax.type == 'percentage' and not (specification or '').startswith('peppol')">${format((line.tax.rate * 100).normalize(), 'f')}</cbc:Percent>
<cac:TaxCategory>
<cbc:ID py:if="line.tax.unece_category_code">${line.tax.unece_category_code}</cbc:ID>
<cbc:Percent py:if="line.tax.type == 'percentage'">${format((line.tax.rate * 100).normalize(), 'f')}</cbc:Percent>
<cbc:TaxExemptionReason py:if="line.tax.legal_notice">${line.tax.legal_notice}</cbc:TaxExemptionReason>
<cac:TaxScheme py:if="line.tax.unece_code">
<cbc:ID>${line.tax.unece_code}</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount py:attrs="{'currencyID': this.invoice.currency.code}">${-this.invoice.untaxed_amount}</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount py:attrs="{'currencyID': this.invoice.currency.code}">${-this.invoice.untaxed_amount}</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount py:attrs="{'currencyID': this.invoice.currency.code}">${-(this.invoice.untaxed_amount + this.invoice.tax_amount)}</cbc:TaxInclusiveAmount>
<py:if test="this.invoice.total_amount != (this.invoice.untaxed_amount + this.invoice.tax_amount)">
<cbc:PayableRoundingAmount py:attrs="{'currencyID': this.invoice.currency.code}">${-(this.invoice.total_amount - this.invoice.untaxed_amount - this.invoice.tax_amount)}</cbc:PayableRoundingAmount>
</py:if>
<cbc:PayableAmount py:attrs="{'currencyID': this.invoice.currency.code}">${-this.invoice.total_amount}</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:CreditNoteLine py:for="line_id, line in enumerate(this.lines, 1)">
<cbc:ID>${line_id}</cbc:ID>
<cbc:CreditedQuantity py:attrs="{'unitCode': line.unit.unece_code if line.unit and line.unit.unece_code else 'ZZ'}">${format(-Decimal(str(line.quantity)), 'f')}</cbc:CreditedQuantity>
<cbc:LineExtensionAmount py:attrs="{'currencyID': this.invoice.currency.code}">${-line.amount}</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Description py:if="line.description">${line.description}</cbc:Description>
<cbc:Name>${line.product_name or line.summary}</cbc:Name>
<py:if test="line.product">
<cac:SellersItemIdentification py:if="line.product.code">
<cbc:ID>${line.product.code}</cbc:ID>
</cac:SellersItemIdentification>
<py:with vars="gtin=line.product.identifier_get(['ean', 'isbn', 'ismn'])">
<cac:StandardItemIdentification py:if="gtin">
<cbc:ID schemeID="0160">${gtin}</cbc:ID>
</cac:StandardItemIdentification>
</py:with>
</py:if>
<cac:ClassifiedTaxCategory py:for="tax_line in line.invoice_taxes">
<cbc:ID py:if="tax_line.tax.unece_category_code">${tax_line.tax.unece_category_code}</cbc:ID>
<cbc:Percent py:if="tax_line.tax.type == 'percentage'">${format((tax_line.tax.rate * 100).normalize(), 'f')}</cbc:Percent>
<cbc:TaxExemptionReason py:if="tax_line.tax.legal_notice">${tax_line.tax.legal_notice}</cbc:TaxExemptionReason>
<cac:TaxScheme py:if="tax_line.tax.unece_code">
<cbc:ID>${tax_line.tax.unece_code}</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount py:attrs="{'currencyID': this.invoice.currency.code}">${line.unit_price}</cbc:PriceAmount>
</cac:Price>
</cac:CreditNoteLine>
</CreditNote>

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<Invoice
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:py="http://genshi.edgewall.org/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xi:include href="base.xml"/>
<cbc:UBLVersionID py:if="not (specification or '').startswith('peppol')">2.4</cbc:UBLVersionID>
<py:if test="specification == 'peppol-bis-3'">
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
</py:if>
<cbc:ID>${this.invoice.number}</cbc:ID>
<cbc:IssueDate>${this.invoice.invoice_date}</cbc:IssueDate>
<cbc:DueDate>${min(l.maturity_date for l in this.invoice.lines_to_pay if l.maturity_date)}</cbc:DueDate>
<cbc:InvoiceTypeCode>${this.type_code}</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>${this.invoice.currency.code}</cbc:DocumentCurrencyCode>
<cbc:BuyerReference py:if="this.invoice.reference">${this.invoice.reference}</cbc:BuyerReference>
<cac:OrderReference>
<cbc:ID>${this.sale_reference or 'NA'}</cbc:ID>
<cbc:SalesOrderID py:if="this.sale_number">${this.sale_number}</cbc:SalesOrderID>
</cac:OrderReference>
<cac:AdditionalDocumentReference py:for="document in this.additional_documents">
<cbc:ID>${document['id']}</cbc:ID>
<cbc:DocumentTypeCode py:if="document.get('code')">${document['code']}</cbc:DocumentTypeCode>
<cbc:DocumentDescription py:if="document.get('description')">${document['description']}</cbc:DocumentDescription>
<cac:Attachment py:if="document.get('code') != '130'">
<py:choose test="document['type']">
<py:when test="'binary'">
<cbc:EmbeddedDocumentBinaryObject py:attrs="{'mimeCode': document['mimetype'], 'filename': document.get('filename')}">${document['binary']}</cbc:EmbeddedDocumentBinaryObject>
</py:when>
<py:when test="'text'">
<cbc:EmbeddedDocument>${document['text']}</cbc:EmbeddedDocument>
</py:when>
<py:when test="'reference'">
<cac:ExternalReference>
<cbc:URI>${document['reference']}</cbc:URI>
<cbc:FileName py:if="document.get('filename')">${document['filename']}</cbc:FileName>
</cac:ExternalReference>
</py:when>
</py:choose>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AccountingSupplierParty>
${Party(this.accounting_supplier_party, this.accounting_supplier_address, this.accounting_supplier_tax_identifier, specification=specification)}
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
${Party(this.accounting_customer_party, this.accounting_customer_address, this.accounting_customer_tax_identifier, identifications=[this.accounting_customer_party.identifier_iso6523] if (specification or '').startswith('peppol') else None, specification=specification)}
</cac:AccountingCustomerParty>
<py:choose test="(specification or '').startswith('peppol')">
<py:when test="True">
<cac:PaymentTerms py:if="this.invoice.payment_term and this.invoice.payment_term.description">
<cbc:Note>${this.invoice.payment_term.description}</cbc:Note>
</cac:PaymentTerms>
</py:when>
<py:otherwise>
<cac:PaymentTerms py:for="line in this.invoice.lines_to_pay">
<cbc:Note py:if="this.invoice.payment_term and this.invoice.payment_term.description">${this.invoice.payment_term.description}</cbc:Note>
<cbc:Amount py:attrs="{'currencyID': this.invoice.currency.code}">${line.amount}</cbc:Amount>
<cbc:PaymentDueDate>${line.maturity_date}</cbc:PaymentDueDate>
</cac:PaymentTerms>
</py:otherwise>
</py:choose>
<cac:TaxTotal py:for="group, lines, amount in this.taxes">
<cbc:TaxAmount py:attrs="{'currencyID': this.invoice.currency.code}">${amount}</cbc:TaxAmount>
<cac:TaxSubtotal py:for="line in lines">
<cbc:TaxableAmount py:attrs="{'currencyID': this.invoice.currency.code}">${line.base}</cbc:TaxableAmount>
<cbc:TaxAmount py:attrs="{'currencyID': this.invoice.currency.code}">${line.amount}</cbc:TaxAmount>
<cbc:Percent py:if="line.tax.type == 'percentage' and not (specification or '').startswith('peppol')">${format((line.tax.rate * 100).normalize(), 'f')}</cbc:Percent>
<cac:TaxCategory>
<cbc:ID py:if="line.tax.unece_category_code">${line.tax.unece_category_code}</cbc:ID>
<cbc:Percent py:if="line.tax.type == 'percentage'">${format((line.tax.rate * 100).normalize(), 'f')}</cbc:Percent>
<cbc:TaxExemptionReason py:if="line.tax.legal_notice">${line.tax.legal_notice}</cbc:TaxExemptionReason>
<cac:TaxScheme py:if="line.tax.unece_code">
<cbc:ID>${line.tax.unece_code}</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount py:attrs="{'currencyID': this.invoice.currency.code}">${this.invoice.untaxed_amount}</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount py:attrs="{'currencyID': this.invoice.currency.code}">${this.invoice.untaxed_amount}</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount py:attrs="{'currencyID': this.invoice.currency.code}">${this.invoice.untaxed_amount + this.invoice.tax_amount}</cbc:TaxInclusiveAmount>
<py:if test="this.invoice.total_amount != (this.invoice.untaxed_amount + this.invoice.tax_amount)">
<cbc:PayableRoundingAmount py:attrs="{'currencyID': this.invoice.currency.code}">${this.invoice.total_amount - this.invoice.untaxed_amount - this.invoice.tax_amount}</cbc:PayableRoundingAmount>
</py:if>
<cbc:PayableAmount py:attrs="{'currencyID': this.invoice.currency.code}">${this.invoice.total_amount}</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine py:for="line_id, line in enumerate(this.lines, 1)">
<cbc:ID>${line_id}</cbc:ID>
<cbc:InvoicedQuantity py:attrs="{'unitCode': line.unit.unece_code if line.unit and line.unit.unece_code else 'ZZ'}">${format(Decimal(str(line.quantity)), 'f')}</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount py:attrs="{'currencyID': this.invoice.currency.code}">${line.amount}</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Description py:if="line.description">${line.description}</cbc:Description>
<cbc:Name>${line.product_name or line.summary}</cbc:Name>
<py:if test="line.product">
<cac:SellersItemIdentification py:if="line.product.code">
<cbc:ID>${line.product.code}</cbc:ID>
</cac:SellersItemIdentification>
<py:with vars="gtin=line.product.identifier_get(['ean', 'isbn', 'ismn'])">
<cac:StandardItemIdentification py:if="gtin">
<cbc:ID schemeID="0160">${gtin}</cbc:ID>
</cac:StandardItemIdentification>
</py:with>
</py:if>
<cac:ClassifiedTaxCategory py:for="tax_line in line.invoice_taxes">
<cbc:ID py:if="tax_line.tax.unece_category_code">${tax_line.tax.unece_category_code}</cbc:ID>
<cbc:Percent py:if="tax_line.tax.type == 'percentage'">${format((tax_line.tax.rate * 100).normalize(), 'f')}</cbc:Percent>
<cbc:TaxExemptionReason py:if="tax_line.tax.legal_notice">${tax_line.tax.legal_notice}</cbc:TaxExemptionReason>
<cac:TaxScheme py:if="tax_line.tax.unece_code">
<cbc:ID>${tax_line.tax.unece_code}</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount py:attrs="{'currencyID': this.invoice.currency.code}">${line.unit_price}</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<py:strip xmlns:py="http://genshi.edgewall.org/"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<py:def function="Party(party, address=None, tax_identifier=None, identifications=None, specification='')">
<cac:Party>
<py:with vars="identifier = party.identifier_eas">
<py:if test="identifier">
<cbc:EndpointID py:attrs="{'schemeID': identifier.eas_code}">${identifier.eas}</cbc:EndpointID>
</py:if>
</py:with>
<py:for each="identifier in identifications or party.identifiers">
<cac:PartyIdentification py:if="identifier and identifier.iso_6523">
<cbc:ID py:attrs="{'schemeID': identifier.iso_6523}">${identifier.code}</cbc:ID>
</cac:PartyIdentification>
</py:for>
<cac:PostalAddress py:if="address">${Address(address, specification=specification)}</cac:PostalAddress>
<cac:PartyTaxScheme py:if="tax_identifier and tax_identifier.unece_code">
<py:choose>
<py:when test="tax_identifier.vatin">
<cbc:CompanyID>${tax_identifier.vatin}</cbc:CompanyID>
</py:when>
<py:otherwise>
<cbc:CompanyID py:attrs="{'schemeID': tax_identifier.iso_6523}">${tax_identifier.code}</cbc:CompanyID>
</py:otherwise>
</py:choose>
<cac:TaxScheme>
<cbc:ID>${tax_identifier.unece_code}</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>${party.name}</cbc:RegistrationName>
<py:with vars="identifier = party.identifier_iso6523">
<py:if test="identifier">
<cbc:CompanyID py:attrs="{'schemeID': identifier.iso_6523}">${identifier.code}</cbc:CompanyID>
</py:if>
</py:with>
</cac:PartyLegalEntity>
</cac:Party>
</py:def>
<py:def function="Address(address, specification='')">
<py:choose>
<py:when test="(specification or '').startswith('peppol')">
<py:with vars="streets = (address.street or '').splitlines()">
<cbc:StreetName py:if="len(streets) >= 1">${streets[0]}</cbc:StreetName>
<cbc:AdditionalStreetName py:if="len(streets) >= 2">${streets[1]}</cbc:AdditionalStreetName>
<cbc:CityName py:if="address.city">${address.city}</cbc:CityName>
<cbc:PostalZone py:if="address.postal_code">${address.postal_code}</cbc:PostalZone>
<cbc:CountrySubentity py:if="address.subdivision">${address.subdivision.name}</cbc:CountrySubentity>
<cac:AddressLine py:if="len(streets) >= 3">
<cbc:Line>
${streets[2]}
</cbc:Line>
</cac:AddressLine>
</py:with>
</py:when>
<py:otherwise>
<cbc:Postbox py:if="address.post_box">${address.post_box}</cbc:Postbox>
<cbc:Floor py:if="address.floor_number">${address.floor_number}</cbc:Floor>
<cbc:Room py:if="address.room_number">${address.room_number}</cbc:Room>
<cbc:StreetName py:if="address.street_name">${address.street_name}</cbc:StreetName>
<cbc:BuildingName py:if="address.building_name">${address.building_name}</cbc:BuildingName>
<cbc:BuildingNumber py:if="address.building_number">${address.building_number}</cbc:BuildingNumber>
<cbc:CityName py:if="address.city">${address.city}</cbc:CityName>
<cbc:PostalZone py:if="address.postal_code">${address.postal_code}</cbc:PostalZone>
<cbc:CountrySubentity py:if="address.subdivision">${address.subdivision.name}</cbc:CountrySubentity>
<cbc:CountrySubentityCode py:if="address.subdivision">${address.subdivision.code}</cbc:CountrySubentityCode>
<py:if test="address.street_unstructured">
<cac:AddressLine py:for="line in address.street_unstructured.splitlines()">
<cbc:Line>
${line}
</cbc:Line>
</cac:AddressLine>
</py:if>
</py:otherwise>
</py:choose>
<cac:Country py:if="address.country">
<cbc:IdentificationCode>${address.country.code}</cbc:IdentificationCode>
<cbc:Name py:if="not (specification or '').startswith('peppol')">${address.country.name}</cbc:Name>
</cac:Country>
</py:def>
</py:strip>

View File

@@ -0,0 +1,409 @@
<?xml version="1.0" encoding="UTF-8"?>
<CreditNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:ID>TOSL108</cbc:ID>
<cbc:IssueDate>2009-12-15</cbc:IssueDate>
<cbc:Note languageID="en">Ordered in our booth at the convention.</cbc:Note>
<cbc:DocumentCurrencyCode listID="ISO 4217 Alpha" listAgencyID="6">EUR</cbc:DocumentCurrencyCode>
<cbc:AccountingCost>Project cost code 123</cbc:AccountingCost>
<cac:InvoicePeriod>
<cbc:StartDate>2009-11-01</cbc:StartDate>
<cbc:EndDate>2009-11-30</cbc:EndDate>
</cac:InvoicePeriod>
<cac:OrderReference>
<cbc:ID>123</cbc:ID>
</cac:OrderReference>
<cac:ContractDocumentReference>
<cbc:ID>Contract321</cbc:ID>
<cbc:DocumentType>Framework agreement</cbc:DocumentType>
</cac:ContractDocumentReference>
<cac:AdditionalDocumentReference>
<cbc:ID>Doc1</cbc:ID>
<cbc:DocumentType>Timesheet</cbc:DocumentType>
<cac:Attachment>
<cac:ExternalReference>
<cbc:URI>http://www.suppliersite.eu/sheet001.html</cbc:URI>
</cac:ExternalReference>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AdditionalDocumentReference>
<cbc:ID>Doc2</cbc:ID>
<cbc:DocumentType>Drawing</cbc:DocumentType>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf">UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="GLN" schemeAgencyID="9">1234567890123</cbc:EndpointID>
<cac:PartyIdentification>
<cbc:ID schemeID="ZZZ">Supp123</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Salescompany ltd.</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:ID schemeID="GLN" schemeAgencyID="9">1231412341324</cbc:ID>
<cbc:Postbox>5467</cbc:Postbox>
<cbc:StreetName>Main street</cbc:StreetName>
<cbc:AdditionalStreetName>Suite 123</cbc:AdditionalStreetName>
<cbc:BuildingNumber>1</cbc:BuildingNumber>
<cbc:Department>Revenue department</cbc:Department>
<cbc:CityName>Big city</cbc:CityName>
<cbc:PostalZone>54321</cbc:PostalZone>
<cbc:CountrySubentityCode>RegionA</cbc:CountrySubentityCode>
<cac:Country>
<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">DK</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID schemeID="DKVAT" schemeAgencyID="ZZZ">DK12345</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>The Sellercompany Incorporated</cbc:RegistrationName>
<cbc:CompanyID schemeID="CVR" schemeAgencyID="ZZZ">5402697509</cbc:CompanyID>
<cac:RegistrationAddress>
<cbc:CityName>Big city</cbc:CityName>
<cbc:CountrySubentity>RegionA</cbc:CountrySubentity>
<cac:Country>
<cbc:IdentificationCode>DK</cbc:IdentificationCode>
</cac:Country>
</cac:RegistrationAddress>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Telephone>4621230</cbc:Telephone>
<cbc:Telefax>4621231</cbc:Telefax>
<cbc:ElectronicMail>antonio@salescompany.dk</cbc:ElectronicMail>
</cac:Contact>
<cac:Person>
<cbc:FirstName>Antonio</cbc:FirstName>
<cbc:FamilyName>M</cbc:FamilyName>
<cbc:MiddleName>Salemacher</cbc:MiddleName>
<cbc:JobTitle>Sales manager</cbc:JobTitle>
</cac:Person>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="GLN" schemeAgencyID="9">1234567987654</cbc:EndpointID>
<cac:PartyIdentification>
<cbc:ID schemeID="ZZZ">345KS5324</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Buyercompany ltd</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:ID schemeID="GLN" schemeAgencyID="9">1238764941386</cbc:ID>
<cbc:Postbox>123</cbc:Postbox>
<cbc:StreetName>Anystreet</cbc:StreetName>
<cbc:AdditionalStreetName>Back door</cbc:AdditionalStreetName>
<cbc:BuildingNumber>8</cbc:BuildingNumber>
<cbc:Department>Accounting department</cbc:Department>
<cbc:CityName>Anytown</cbc:CityName>
<cbc:PostalZone>101</cbc:PostalZone>
<cbc:CountrySubentity>RegionB</cbc:CountrySubentity>
<cac:Country>
<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID schemeID="BEVAT" schemeAgencyID="ZZZ">BE54321</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>The buyercompany inc.</cbc:RegistrationName>
<cbc:CompanyID schemeAgencyID="ZZZ" schemeID="ZZZ">5645342123</cbc:CompanyID>
<cac:RegistrationAddress>
<cbc:CityName>Mainplace</cbc:CityName>
<cbc:CountrySubentity>RegionB</cbc:CountrySubentity>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:RegistrationAddress>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Telephone>5121230</cbc:Telephone>
<cbc:Telefax>5121231</cbc:Telefax>
<cbc:ElectronicMail>john@buyercompany.eu</cbc:ElectronicMail>
</cac:Contact>
<cac:Person>
<cbc:FirstName>John</cbc:FirstName>
<cbc:FamilyName>X</cbc:FamilyName>
<cbc:MiddleName>Doe</cbc:MiddleName>
<cbc:JobTitle>Purchasing manager</cbc:JobTitle>
</cac:Person>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:PayeeParty>
<cac:PartyIdentification>
<cbc:ID schemeID="GLN" schemeAgencyID="9">098740918237</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Ebeneser Scrooge Inc.</cbc:Name>
</cac:PartyName>
<cac:PartyLegalEntity>
<cbc:CompanyID schemeID="UK:CH" schemeAgencyID="ZZZ">6411982340</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:PayeeParty>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Packing cost</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">100</cbc:Amount>
</cac:AllowanceCharge>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Promotion discount</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">100</cbc:Amount>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">292.20</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">1460.5</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">292.1</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">1</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0.1</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">AA</cbc:ID>
<cbc:Percent>10</cbc:Percent>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">-25</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">E</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cbc:TaxExemptionReasonCode listID="CWA 15577" listAgencyID="ZZZ">AAM</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Exempt New Means of Transport</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">1436.5</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">1436.5</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">1729</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="EUR">100</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="EUR">100</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="EUR">1000</cbc:PrepaidAmount>
<cbc:PayableRoundingAmount currencyID="EUR">0.30</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="EUR">729</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:CreditNoteLine>
<cbc:ID>1</cbc:ID>
<cbc:Note>Scratch on box</cbc:Note>
<cbc:CreditedQuantity unitCode="C62">1</cbc:CreditedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1273</cbc:LineExtensionAmount>
<cbc:AccountingCost>BookingCode001</cbc:AccountingCost>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">254.6</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Description languageID="EN">Processor: Intel Core 2 Duo SU9400 LV (1.4GHz). RAM:
3MB. Screen 1440x900</cbc:Description>
<cbc:Name>Labtop computer</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB007</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890124</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">12344321</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434568</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
<cac:AdditionalItemProperty>
<cbc:Name>Color</cbc:Name>
<cbc:Value>black</cbc:Value>
</cac:AdditionalItemProperty>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">1273</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Contract</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>0.15</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="EUR">225</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">1500</cbc:BaseAmount>
</cac:AllowanceCharge>
</cac:Price>
</cac:CreditNoteLine>
<cac:CreditNoteLine>
<cbc:ID>2</cbc:ID>
<cbc:Note>Cover is slightly damaged.</cbc:Note>
<cbc:CreditedQuantity unitCode="C62">-1</cbc:CreditedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">-3.96</cbc:LineExtensionAmount>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">-0.396</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Name>Returned "Advanced computing" book</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB008</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890125</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">32344324</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434567</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">AA</cbc:ID>
<cbc:Percent>10</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">3.96</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:CreditNoteLine>
<cac:CreditNoteLine>
<cbc:ID>3</cbc:ID>
<cbc:CreditedQuantity unitCode="C62">2</cbc:CreditedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">4.96</cbc:LineExtensionAmount>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0.496</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Name>"Computing for dummies" book</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB009</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890126</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">32344324</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434566</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">AA</cbc:ID>
<cbc:Percent>10</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">2.48</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Contract</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>0.1</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="EUR">0.275</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">2.75</cbc:BaseAmount>
</cac:AllowanceCharge>
</cac:Price>
</cac:CreditNoteLine>
<cac:CreditNoteLine>
<cbc:ID>4</cbc:ID>
<cbc:CreditedQuantity unitCode="C62">-1</cbc:CreditedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">-25</cbc:LineExtensionAmount>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Name>Returned IBM 5150 desktop</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB010</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890127</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">12344322</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434565</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">E</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">25</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:CreditNoteLine>
<cac:CreditNoteLine>
<cbc:ID>5</cbc:ID>
<cbc:CreditedQuantity unitCode="C62">250</cbc:CreditedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">187.5</cbc:LineExtensionAmount>
<cbc:AccountingCost>BookingCode002</cbc:AccountingCost>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">37.5</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Name>Network cable</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB011</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890128</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">12344325</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434564</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
<cac:AdditionalItemProperty>
<cbc:Name>Type</cbc:Name>
<cbc:Value>Cat5</cbc:Value>
</cac:AdditionalItemProperty>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">0.75</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:CreditNoteLine>
</CreditNote>

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:ID>123</cbc:ID>
<cbc:IssueDate>2011-09-22</cbc:IssueDate>
<cac:InvoicePeriod>
<cbc:StartDate>2011-08-01</cbc:StartDate>
<cbc:EndDate>2011-08-31</cbc:EndDate>
</cac:InvoicePeriod>
<cac:AccountingSupplierParty>
<cac:Party>
<cac:PartyName>
<cbc:Name>Custom Cotter Pins</cbc:Name>
</cac:PartyName>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cac:PartyName>
<cbc:Name>North American Veeblefetzer</cbc:Name>
</cac:PartyName>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:LegalMonetaryTotal>
<cbc:PayableAmount currencyID="CAD">100.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:LineExtensionAmount currencyID="CAD">100.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Description>Cotter pin, MIL-SPEC</cbc:Description>
</cac:Item>
</cac:InvoiceLine>
</Invoice>

View File

@@ -0,0 +1,470 @@
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:ID>TOSL108</cbc:ID>
<cbc:IssueDate>2009-12-15</cbc:IssueDate>
<cbc:InvoiceTypeCode listID="UN/ECE 1001 Subset" listAgencyID="6">380</cbc:InvoiceTypeCode>
<cbc:Note languageID="en">Ordered in our booth at the convention.</cbc:Note>
<cbc:TaxPointDate>2009-11-30</cbc:TaxPointDate>
<cbc:DocumentCurrencyCode listID="ISO 4217 Alpha" listAgencyID="6">EUR</cbc:DocumentCurrencyCode>
<cbc:AccountingCost>Project cost code 123</cbc:AccountingCost>
<cac:InvoicePeriod>
<cbc:StartDate>2009-11-01</cbc:StartDate>
<cbc:EndDate>2009-11-30</cbc:EndDate>
</cac:InvoicePeriod>
<cac:OrderReference>
<cbc:ID>123</cbc:ID>
</cac:OrderReference>
<cac:ContractDocumentReference>
<cbc:ID>Contract321</cbc:ID>
<cbc:DocumentType>Framework agreement</cbc:DocumentType>
</cac:ContractDocumentReference>
<cac:AdditionalDocumentReference>
<cbc:ID>Doc1</cbc:ID>
<cbc:DocumentType>Timesheet</cbc:DocumentType>
<cac:Attachment>
<cac:ExternalReference>
<cbc:URI>http://www.suppliersite.eu/sheet001.html</cbc:URI>
</cac:ExternalReference>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AdditionalDocumentReference>
<cbc:ID>Doc2</cbc:ID>
<cbc:DocumentType>Drawing</cbc:DocumentType>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf">UjBsR09EbGhjZ0dTQUxNQUFBUUNBRU1tQ1p0dU1GUXhEUzhi</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="GLN" schemeAgencyID="9">1234567890123</cbc:EndpointID>
<cac:PartyIdentification>
<cbc:ID schemeID="ZZZ">Supp123</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Salescompany ltd.</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:ID schemeID="GLN" schemeAgencyID="9">1231412341324</cbc:ID>
<cbc:Postbox>5467</cbc:Postbox>
<cbc:StreetName>Main street</cbc:StreetName>
<cbc:AdditionalStreetName>Suite 123</cbc:AdditionalStreetName>
<cbc:BuildingNumber>1</cbc:BuildingNumber>
<cbc:Department>Revenue department</cbc:Department>
<cbc:CityName>Big city</cbc:CityName>
<cbc:PostalZone>54321</cbc:PostalZone>
<cbc:CountrySubentityCode>RegionA</cbc:CountrySubentityCode>
<cac:Country>
<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">DK</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID schemeID="DKVAT" schemeAgencyID="ZZZ">DK12345</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>The Sellercompany Incorporated</cbc:RegistrationName>
<cbc:CompanyID schemeID="CVR" schemeAgencyID="ZZZ">5402697509</cbc:CompanyID>
<cac:RegistrationAddress>
<cbc:CityName>Big city</cbc:CityName>
<cbc:CountrySubentity>RegionA</cbc:CountrySubentity>
<cac:Country>
<cbc:IdentificationCode>DK</cbc:IdentificationCode>
</cac:Country>
</cac:RegistrationAddress>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Telephone>4621230</cbc:Telephone>
<cbc:Telefax>4621231</cbc:Telefax>
<cbc:ElectronicMail>antonio@salescompany.dk</cbc:ElectronicMail>
</cac:Contact>
<cac:Person>
<cbc:FirstName>Antonio</cbc:FirstName>
<cbc:FamilyName>Salemacher</cbc:FamilyName>
<cbc:MiddleName>M</cbc:MiddleName>
<cbc:JobTitle>Sales manager</cbc:JobTitle>
</cac:Person>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="GLN" schemeAgencyID="9">1234567987654</cbc:EndpointID>
<cac:PartyIdentification>
<cbc:ID schemeID="ZZZ">345KS5324</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Buyercompany ltd</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:ID schemeID="GLN" schemeAgencyID="9">1238764941386</cbc:ID>
<cbc:Postbox>123</cbc:Postbox>
<cbc:StreetName>Anystreet</cbc:StreetName>
<cbc:AdditionalStreetName>Back door</cbc:AdditionalStreetName>
<cbc:BuildingNumber>8</cbc:BuildingNumber>
<cbc:Department>Accounting department</cbc:Department>
<cbc:CityName>Anytown</cbc:CityName>
<cbc:PostalZone>101</cbc:PostalZone>
<cbc:CountrySubentity>RegionB</cbc:CountrySubentity>
<cac:Country>
<cbc:IdentificationCode listID="ISO3166-1" listAgencyID="6">BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID schemeID="BEVAT" schemeAgencyID="ZZZ">BE54321</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>The buyercompany inc.</cbc:RegistrationName>
<cbc:CompanyID schemeAgencyID="ZZZ" schemeID="ZZZ">5645342123</cbc:CompanyID>
<cac:RegistrationAddress>
<cbc:CityName>Mainplace</cbc:CityName>
<cbc:CountrySubentity>RegionB</cbc:CountrySubentity>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:RegistrationAddress>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Telephone>5121230</cbc:Telephone>
<cbc:Telefax>5121231</cbc:Telefax>
<cbc:ElectronicMail>john@buyercompany.eu</cbc:ElectronicMail>
</cac:Contact>
<cac:Person>
<cbc:FirstName>John</cbc:FirstName>
<cbc:FamilyName>Doe</cbc:FamilyName>
<cbc:MiddleName>X</cbc:MiddleName>
<cbc:JobTitle>Purchasing manager</cbc:JobTitle>
</cac:Person>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:PayeeParty>
<cac:PartyIdentification>
<cbc:ID schemeID="GLN" schemeAgencyID="9">098740918237</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Ebeneser Scrooge Inc.</cbc:Name>
</cac:PartyName>
<cac:PartyLegalEntity>
<cbc:CompanyID schemeID="UK:CH" schemeAgencyID="ZZZ">6411982340</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:PayeeParty>
<cac:Delivery>
<cbc:ActualDeliveryDate>2009-12-15</cbc:ActualDeliveryDate>
<cac:DeliveryLocation>
<cbc:ID schemeID="GLN" schemeAgencyID="9">6754238987648</cbc:ID>
<cac:Address>
<cbc:StreetName>Deliverystreet</cbc:StreetName>
<cbc:AdditionalStreetName>Side door</cbc:AdditionalStreetName>
<cbc:BuildingNumber>12</cbc:BuildingNumber>
<cbc:CityName>DeliveryCity</cbc:CityName>
<cbc:PostalZone>523427</cbc:PostalZone>
<cbc:CountrySubentity>RegionC</cbc:CountrySubentity>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:Address>
</cac:DeliveryLocation>
</cac:Delivery>
<cac:PaymentMeans>
<cbc:PaymentMeansCode listID="UN/ECE 4461">31</cbc:PaymentMeansCode>
<cbc:PaymentDueDate>2009-12-31</cbc:PaymentDueDate>
<cbc:PaymentChannelCode>IBAN</cbc:PaymentChannelCode>
<cbc:PaymentID>Payref1</cbc:PaymentID>
<cac:PayeeFinancialAccount>
<cbc:ID>DK1212341234123412</cbc:ID>
<cac:FinancialInstitutionBranch>
<cac:FinancialInstitution>
<cbc:ID>DKDKABCD</cbc:ID>
</cac:FinancialInstitution>
</cac:FinancialInstitutionBranch>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
<cac:PaymentTerms>
<cbc:Note>Penalty percentage 10% from due date</cbc:Note>
</cac:PaymentTerms>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Packing cost</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">100</cbc:Amount>
</cac:AllowanceCharge>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Promotion discount</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">100</cbc:Amount>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">292.20</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">1460.5</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">292.1</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">1</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0.1</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">AA</cbc:ID>
<cbc:Percent>10</cbc:Percent>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">-25</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">E</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cbc:TaxExemptionReasonCode listID="CWA 15577" listAgencyID="ZZZ">AAM</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Exempt New Means of Transport</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">1436.5</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">1436.5</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">1729</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="EUR">100</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="EUR">100</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="EUR">1000</cbc:PrepaidAmount>
<cbc:PayableRoundingAmount currencyID="EUR">0.30</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="EUR">729</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:Note>Scratch on box</cbc:Note>
<cbc:InvoicedQuantity unitCode="C62">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">1273</cbc:LineExtensionAmount>
<cbc:AccountingCost>BookingCode001</cbc:AccountingCost>
<cac:OrderLineReference>
<cbc:LineID>1</cbc:LineID>
</cac:OrderLineReference>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Damage</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">12</cbc:Amount>
</cac:AllowanceCharge>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Testing</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">10</cbc:Amount>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">254.6</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Description languageID="EN">Processor: Intel Core 2 Duo SU9400 LV (1.4GHz). RAM:
3MB. Screen 1440x900</cbc:Description>
<cbc:Name>Labtop computer</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB007</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890124</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">12344321</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434568</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
<cac:AdditionalItemProperty>
<cbc:Name>Color</cbc:Name>
<cbc:Value>black</cbc:Value>
</cac:AdditionalItemProperty>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">1273</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Contract</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>0.15</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="EUR">225</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">1500</cbc:BaseAmount>
</cac:AllowanceCharge>
</cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>2</cbc:ID>
<cbc:Note>Cover is slightly damaged.</cbc:Note>
<cbc:InvoicedQuantity unitCode="C62">-1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">-3.96</cbc:LineExtensionAmount>
<cac:OrderLineReference>
<cbc:LineID>5</cbc:LineID>
</cac:OrderLineReference>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">-0.396</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Name>Returned "Advanced computing" book</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB008</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890125</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">32344324</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434567</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">AA</cbc:ID>
<cbc:Percent>10</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">3.96</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>3</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">4.96</cbc:LineExtensionAmount>
<cac:OrderLineReference>
<cbc:LineID>3</cbc:LineID>
</cac:OrderLineReference>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0.496</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Name>"Computing for dummies" book</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB009</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890126</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">32344324</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434566</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">AA</cbc:ID>
<cbc:Percent>10</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">2.48</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Contract</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>0.1</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="EUR">0.275</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">2.75</cbc:BaseAmount>
</cac:AllowanceCharge>
</cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>4</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">-1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">-25</cbc:LineExtensionAmount>
<cac:OrderLineReference>
<cbc:LineID>2</cbc:LineID>
</cac:OrderLineReference>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Name>Returned IBM 5150 desktop</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB010</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890127</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">12344322</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434565</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">E</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">25</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>5</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">250</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">187.5</cbc:LineExtensionAmount>
<cbc:AccountingCost>BookingCode002</cbc:AccountingCost>
<cac:OrderLineReference>
<cbc:LineID>4</cbc:LineID>
</cac:OrderLineReference>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">37.5</cbc:TaxAmount>
</cac:TaxTotal>
<cac:Item>
<cbc:Name>Network cable</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>JB011</cbc:ID>
</cac:SellersItemIdentification>
<cac:StandardItemIdentification>
<cbc:ID schemeID="GTIN" schemeAgencyID="9">1234567890128</cbc:ID>
</cac:StandardItemIdentification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="113" listID="UNSPSC">12344325</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listAgencyID="2" listID="CPV">65434564</cbc:ItemClassificationCode>
</cac:CommodityClassification>
<ClassifiedTaxCategory xmlns="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:ID schemeID="UN/ECE 5305" schemeAgencyID="6">S</cbc:ID>
<cbc:Percent>20</cbc:Percent>
<TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">VAT</cbc:ID>
</TaxScheme>
</ClassifiedTaxCategory>
<cac:AdditionalItemProperty>
<cbc:Name>Type</cbc:Name>
<cbc:Value>Cat5</cbc:Value>
</cac:AdditionalItemProperty>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">0.75</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

View File

@@ -0,0 +1,2 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.

View File

@@ -0,0 +1,4 @@
[
{"cash_rounding": true}
,{"cash_rounding": false}
]

View File

@@ -0,0 +1,90 @@
=======================
UBL 2 Credit Note Parse
=======================
Imports::
>>> import datetime as dt
>>> from decimal import Decimal
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import create_chart, create_tax
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.modules.currency.tests.tools import get_currency
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> from trytond.tools import file_open
>>> cash_rounding = globals().get('cash_rounding', False)
Activate modules::
>>> modules = ['edocument_ubl', 'account_invoice']
>>> if cash_rounding:
... modules.append('account_cash_rounding')
>>> config = activate_modules(modules, create_company, create_chart)
>>> Attachment = Model.get('ir.attachment')
>>> EInvoice = Model.get('edocument.ubl.invoice')
>>> Invoice = Model.get('account.invoice')
Setup company::
>>> company = get_company()
>>> company.party.name = 'Buyercompany ltd'
>>> company.party.save()
Create currency::
>>> eur = get_currency('EUR')
>>> if cash_rounding:
... eur.cash_rounding = Decimal('1')
>>> eur.save()
Create tax::
>>> tax20 = create_tax(Decimal('.2'))
>>> tax20.unece_category_code = 'S'
>>> tax20.unece_code = 'VAT'
>>> tax20.save()
>>> tax10 = create_tax(Decimal('.1'))
>>> tax10.unece_category_code = 'AA'
>>> tax10.unece_code = 'VAT'
>>> tax10.save()
>>> tax0 = create_tax(Decimal('0'))
>>> tax0.unece_category_code = 'E'
>>> tax0.unece_code = 'VAT'
>>> tax0.save()
Parse the UBL invoice::
>>> with file_open(
... 'edocument_ubl/tests/UBL-CreditNote-2.1-Example.xml',
... mode='rb') as fp:
... invoice_id = EInvoice.parse(fp.read(), config.context)
>>> invoice = Invoice(invoice_id)
>>> invoice.reference
'TOSL108'
>>> assertEqual(invoice.invoice_date, dt.date(2009, 12, 15))
>>> invoice.party.name
'The Sellercompany Incorporated'
>>> invoice.invoice_address.rec_name
'The Sellercompany Incorporated, Main street 1 5467, 54321, Big city'
>>> assertEqual(invoice.company, company)
>>> assertEqual(
... invoice.total_amount,
... Decimal('-1729.00') if cash_rounding else Decimal('-1728.70'))
>>> invoice.tax_amount
Decimal('-292.20')
>>> len(invoice.lines)
7
>>> attachments = Attachment.find([])
>>> len(attachments)
3
>>> assertEqual({a.resource for a in attachments}, {invoice})
>>> sorted((a.name, a.type) for a in attachments)
[('Drawing Doc2.pdf', 'data'), ('Framework agreement Contract321', 'data'), ('Timesheet Doc1', 'link')]

View File

@@ -0,0 +1,4 @@
[
{"cash_rounding": true}
,{"cash_rounding": false}
]

View File

@@ -0,0 +1,90 @@
===================
UBL 2 Invoice Parse
===================
Imports::
>>> import datetime as dt
>>> from decimal import Decimal
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import create_chart, create_tax
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.modules.currency.tests.tools import get_currency
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> from trytond.tools import file_open
>>> cash_rounding = globals().get('cash_rounding', False)
Activate modules::
>>> modules = ['edocument_ubl', 'account_invoice', 'purchase']
>>> if cash_rounding:
... modules.append('account_cash_rounding')
>>> config = activate_modules(modules, create_company, create_chart)
>>> Attachment = Model.get('ir.attachment')
>>> EInvoice = Model.get('edocument.ubl.invoice')
>>> Invoice = Model.get('account.invoice')
Setup company::
>>> company = get_company()
>>> company.party.name = 'Buyercompany ltd'
>>> company.party.save()
Create currency::
>>> eur = get_currency('EUR')
>>> if cash_rounding:
... eur.cash_rounding = Decimal('1')
>>> eur.save()
Create tax::
>>> tax20 = create_tax(Decimal('.2'))
>>> tax20.unece_category_code = 'S'
>>> tax20.unece_code = 'VAT'
>>> tax20.save()
>>> tax10 = create_tax(Decimal('.1'))
>>> tax10.unece_category_code = 'AA'
>>> tax10.unece_code = 'VAT'
>>> tax10.save()
>>> tax0 = create_tax(Decimal('0'))
>>> tax0.unece_category_code = 'E'
>>> tax0.unece_code = 'VAT'
>>> tax0.save()
Parse the UBL invoice::
>>> with file_open(
... 'edocument_ubl/tests/UBL-Invoice-2.1-Example.xml',
... mode='rb') as fp:
... invoice_id = EInvoice.parse(fp.read(), config.context)
>>> invoice = Invoice(invoice_id)
>>> invoice.reference
'TOSL108'
>>> assertEqual(invoice.invoice_date, dt.date(2009, 12, 15))
>>> invoice.party.name
'The Sellercompany Incorporated'
>>> invoice.invoice_address.rec_name
'The Sellercompany Incorporated, Main street 1 5467, 54321, Big city'
>>> assertEqual(invoice.company, company)
>>> assertEqual(
... invoice.total_amount,
... Decimal('1729.00') if cash_rounding else Decimal('1728.70'))
>>> invoice.tax_amount
Decimal('292.20')
>>> len(invoice.lines)
7
>>> attachments = Attachment.find([])
>>> len(attachments)
3
>>> assertEqual({a.resource for a in attachments}, {invoice})
>>> sorted((a.name, a.type) for a in attachments)
[('Drawing Doc2.pdf', 'data'), ('Framework agreement Contract321', 'data'), ('Timesheet Doc1', 'link')]

View File

@@ -0,0 +1,56 @@
===========================
UBL 2 Invoice Parse Trivial
===========================
Imports::
>>> import datetime as dt
>>> from proteus import Model
>>> from trytond.modules.account.tests.tools import create_chart
>>> from trytond.modules.company.tests.tools import create_company, get_company
>>> from trytond.modules.currency.tests.tools import get_currency
>>> from trytond.tests.tools import activate_modules, assertEqual
>>> from trytond.tools import file_open
Activate modules::
>>> config = activate_modules(
... ['edocument_ubl', 'account_invoice'], create_company, create_chart)
>>> EInvoice = Model.get('edocument.ubl.invoice')
>>> Invoice = Model.get('account.invoice')
Setup company::
>>> company = get_company()
>>> company.party.name = 'North American Veeblefetzer'
>>> company.party.save()
Create currency::
>>> eur = get_currency('CAD')
Parse the UBL invoice::
>>> with file_open(
... 'edocument_ubl/tests/UBL-Invoice-2.1-Example-Trivial.xml',
... mode='rb') as fp:
... invoice_id = EInvoice.parse(fp.read(), config.context)
>>> invoice = Invoice(invoice_id)
>>> assertEqual(invoice.invoice_date, dt.date(2011, 9, 22))
>>> invoice.party.name
'Custom Cotter Pins'
>>> assertEqual(invoice.company, company)
>>> invoice.total_amount
Decimal('100.00')
>>> line, = invoice.lines
>>> line.description
'Cotter pin, MIL-SPEC'
>>> line.quantity
1.0
>>> line.unit
>>> line.unit_price
Decimal('100.0000')

View File

@@ -0,0 +1,269 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
import datetime
import os
from decimal import Decimal
from unittest.mock import MagicMock, Mock, patch
from lxml import etree
from trytond.pool import Pool
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
def get_invoice():
pool = Pool()
Address = pool.get('party.address')
Company = pool.get('company.company')
Country = pool.get('country.country')
Currency = pool.get('currency.currency')
Identifier = pool.get('party.identifier')
Invoice = pool.get('account.invoice')
InvoiceLine = pool.get('account.invoice.line')
InvoiceTax = pool.get('account.invoice.tax')
MoveLine = pool.get('account.move.line')
Party = pool.get('party.party')
PaymentTerm = pool.get('account.invoice.payment_term')
Product = pool.get('product.product')
Tax = pool.get('account.tax')
Uom = pool.get('product.uom')
address = Mock(spec=Address,
street_unstructured="St sample, 15",
street="St sample, 15\n2nd floor\nBox 1234\n",
city="Scranton",
postal_code="1000",
subdivision=None,
country=Mock(spec=Country,
code='US'),
)
address.building_name = "Building A"
address.country.name = "United States"
identifier = MagicMock(
spec=Identifier,
type='be_vat',
code='BE123456789')
type(identifier).iso_6523 = Identifier.iso_6523
type(identifier)._eas_type = Identifier._eas_type
type(identifier).eas = Identifier.eas
type(identifier).unece_code = Identifier.unece_code
party = MagicMock(
spec=Party,
addresses=[address],
identifiers=[identifier],
)
type(party).identifier_iso6523 = Party.identifier_iso6523
type(party).identifier_eas = Party.identifier_eas
party.name = "Michael Scott"
company = Mock(spec=Company,
party=Mock(
spec=Party,
addresses=[Mock(spec=Address,
street_unstructured="Main street, 42",
street="Main street, 42",
country=Mock(spec=Country,
code='US'))],
identifiers=[Mock(
spec=Identifier,
type='us_ein',
code='911144442')],
))
company.party.name = "Dunder Mifflin"
company.party.address_get = Mock(return_value=company.party.addresses[0])
taxes = [Mock(spec=InvoiceTax,
tax=Mock(spec=Tax,
legal_notice="Legal Notice",
unece_category_code='S',
unece_code='VAT',
type='percentage',
rate=Decimal('.1'),
),
base=Decimal('100.00'),
amount=Decimal('10.00'),
legal_notice="Legal Notice",
)]
product = Mock(spec=Product,
code="12345",
type='service',
)
product.name = "Product"
product.identifier_get.return_value = '98412345678908'
lines = [Mock(spec=InvoiceLine,
type='line',
product=product,
unit=Mock(spec=Uom,
),
quantity=1,
unit_price=Decimal('100.0000'),
amount=Decimal('100.00'),
description="Description",
invoice_taxes=taxes,
)]
invoice = MagicMock(spec=Invoice,
id=-1,
__int__=Mock(return_value=-1),
type='out',
sequence_type='invoice',
number="001",
party=party,
party_lang='fr',
party_tax_identifier=identifier,
invoice_address=party.addresses[0],
company=company,
currency=Mock(spec=Currency,
code='USD',
round=lambda a: a),
invoice_date=datetime.date.today(),
reference="PO1234",
payment_term=Mock(spec=PaymentTerm, description="Direct"),
lines=lines,
line_lines=lines,
taxes=taxes,
untaxed_amount=Decimal('100.00'),
tax_amount=Decimal('10.00'),
total_amount=Decimal('110.00'),
amount_to_pay=Decimal('110.00'),
lines_to_pay=[Mock(spec=MoveLine,
maturity_date=datetime.date.today(),
amount=Decimal('110.00'),
)],
sales=[],
state='posted',
)
return invoice
class EdocumentUblTestCase(ModuleTestCase):
"Test Edocument Ubl module"
module = 'edocument_ubl'
extras = [
'account_invoice', 'document_incoming_invoice', 'purchase', 'sale']
@with_transaction()
def test_Invoice_2(self):
"Test Invoice-2"
pool = Pool()
Template = pool.get('edocument.ubl.invoice')
InvoiceReport = pool.get('account.invoice', type='report')
with patch.object(InvoiceReport, 'execute') as execute:
execute.return_value = ['pdf', b'data', False, 'Invoice-1234']
invoice = get_invoice()
template = Template(invoice)
invoice_string = template.render('2')
invoice_xml = etree.fromstring(invoice_string)
schema_file = os.path.join(
os.path.dirname(__file__),
'2.4', 'maindoc', 'UBL-Invoice-2.4.xsd')
schema = etree.XMLSchema(etree.parse(schema_file))
schema.assertValid(invoice_xml)
@with_transaction()
def test_Invoice_2_Peppol_BIS_3(self):
"Test Invoice-2"
pool = Pool()
Template = pool.get('edocument.ubl.invoice')
InvoiceReport = pool.get('account.invoice', type='report')
with patch.object(InvoiceReport, 'execute') as execute:
execute.return_value = ['pdf', b'data', False, 'Invoice-1234']
invoice = get_invoice()
template = Template(invoice)
invoice_string = template.render('2', specification='peppol-bis-3')
invoice_xml = etree.fromstring(invoice_string)
schema_file = os.path.join(
os.path.dirname(__file__),
'2.4', 'maindoc', 'UBL-Invoice-2.4.xsd')
schema = etree.XMLSchema(etree.parse(schema_file))
schema.assertValid(invoice_xml)
@with_transaction()
def test_CreditNote_2(self):
"Test CreditNote-2"
pool = Pool()
Template = pool.get('edocument.ubl.invoice')
InvoiceReport = pool.get('account.invoice', type='report')
with patch.object(InvoiceReport, 'execute') as execute:
execute.return_value = ['pdf', b'data', False, 'Invoice-1234']
invoice = get_invoice()
invoice.sequence_type = 'credit_note'
for line in invoice.lines:
line.quantity *= -1
invoice.untaxed_amount *= -1
invoice.tax_amount *= -1
invoice.total_amount *= -1
invoice.amount_to_pay *= -1
for line in invoice.lines_to_pay:
line.amount *= -1
template = Template(invoice)
invoice_string = template.render('2')
invoice_xml = etree.fromstring(invoice_string)
schema_file = os.path.join(
os.path.dirname(__file__),
'2.4', 'maindoc', 'UBL-CreditNote-2.4.xsd')
schema = etree.XMLSchema(etree.parse(schema_file))
schema.assertValid(invoice_xml)
@with_transaction()
def test_CreditNote_2_Peppol_BIS_3(self):
"Test CreditNote-2"
pool = Pool()
Template = pool.get('edocument.ubl.invoice')
InvoiceReport = pool.get('account.invoice', type='report')
with patch.object(InvoiceReport, 'execute') as execute:
execute.return_value = ['pdf', b'data', False, 'Invoice-1234']
invoice = get_invoice()
invoice.sequence_type = 'credit_note'
for line in invoice.lines:
line.quantity *= -1
invoice.untaxed_amount *= -1
invoice.tax_amount *= -1
invoice.total_amount *= -1
invoice.amount_to_pay *= -1
for line in invoice.lines_to_pay:
line.amount *= -1
template = Template(invoice)
invoice_string = template.render('2', specification='peppol-bis-3')
invoice_xml = etree.fromstring(invoice_string)
schema_file = os.path.join(
os.path.dirname(__file__),
'2.4', 'maindoc', 'UBL-CreditNote-2.4.xsd')
schema = etree.XMLSchema(etree.parse(schema_file))
schema.assertValid(invoice_xml)
@with_transaction()
def test_identifier_eas(self):
"Test EAS identifier"
pool = Pool()
Identifier = pool.get('party.identifier')
for type, code, eas_code, eas, vatin in [
('gr_vat', '023456783',
'9933', 'el023456783', 'EL023456783'),
('eu_vat', 'EL023456783',
'9933', 'el023456783', 'EL023456783'),
('eu_vat', 'GR023456783',
'9933', 'el023456783', 'EL023456783'),
('be_vat', '0403019261',
'9925', 'be0403019261', 'BE0403019261'),
('eu_vat', 'BE0403019261',
'9925', 'be0403019261', 'BE0403019261'),
('gb_vat', '980780684',
'9932', 'gb980780684', 'GB980780684'),
('eu_vat', 'GB980780684',
'9932', 'gb980780684', 'GB980780684'),
('eu_vat', 'XI980780684',
'9932', 'gb980780684', 'GB980780684'),
]:
with self.subTest(type=type, code=code):
identifier = Identifier(type=type, code=code)
self.assertEqual(identifier.eas_code, eas_code)
self.assertEqual(identifier.eas, eas)
self.assertEqual(identifier.vatin, vatin)
del ModuleTestCase

View File

@@ -0,0 +1,8 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.tests.test_tryton import load_doc_tests
def load_tests(*args, **kwargs):
return load_doc_tests(__name__, __file__, *args, **kwargs)

View File

@@ -0,0 +1,33 @@
[tryton]
version=7.8.6
depends:
edocument_unece
ir
party
extras_depend:
account_cash_rounding
account_invoice
document_incoming_invoice
purchase
sale
xml:
account.xml
message.xml
[register]
model:
party.Party
party.Identifier
[register account_invoice]
model:
edocument.Invoice
account.InvoiceEdocumentStart
[register account_invoice purchase]
model:
edocument.Invoice_Purchase
[register document_incoming_invoice]
model:
document.Incoming