diff --git a/eu_einvoice/european_e_invoice/custom/sales_invoice.py b/eu_einvoice/european_e_invoice/custom/sales_invoice.py
index da4ba878..e57ef6e3 100644
--- a/eu_einvoice/european_e_invoice/custom/sales_invoice.py
+++ b/eu_einvoice/european_e_invoice/custom/sales_invoice.py
@@ -127,6 +127,7 @@ def __init__(
self.doc = None
self.item_tax_rates = set()
self.delivery_dates = []
+ self.vat_exemption_reason_text = ""
def get_einvoice(self) -> Document | None:
"""Return the einvoice document as a Python object."""
@@ -135,6 +136,9 @@ def get_einvoice(self) -> Document | None:
def create_einvoice(self):
"""Create the einvoice document as a Python object."""
self.doc = Document()
+ self.vat_exemption_reason_text = str(
+ frappe.db.get_single_value("E Invoice Settings", "vat_exemption_reason_text") or ""
+ ).strip()
self._set_context()
self._set_header()
@@ -273,7 +277,10 @@ def _set_seller(self):
self._set_seller_address()
def _set_seller_id(self):
- for row in self.customer.supplier_numbers:
+ supplier_numbers = getattr(self.customer, "supplier_numbers", None)
+ if not supplier_numbers:
+ return
+ for row in supplier_numbers:
if row.company == self.invoice.company and row.supplier_number:
self.doc.trade.agreement.seller.id = row.supplier_number
break
@@ -486,6 +493,7 @@ def _add_line_item(self, item: SalesInvoiceItem):
("Sales Taxes and Charges Template", self.invoice.taxes_and_charges),
]
).upper()
+ self._set_optional_vat_exemption_reason_text(li.settlement.trade_tax)
li.settlement.monetary_summation.total_amount = flt(item.net_amount, item.precision("net_amount"))
self.doc.trade.items.add(li)
@@ -614,8 +622,13 @@ def _add_empty_tax(self):
("Sales Taxes and Charges Template", self.invoice.taxes_and_charges),
]
).upper()
+ self._set_optional_vat_exemption_reason_text(trade_tax)
self.doc.trade.settlement.trade_tax.add(trade_tax)
+ def _set_optional_vat_exemption_reason_text(self, trade_tax: ApplicableTradeTax) -> None:
+ if self.vat_exemption_reason_text:
+ trade_tax.exemption_reason = self.vat_exemption_reason_text
+
def _add_delivery_date(self):
if self.delivery_dates:
delivery_date = sorted(self.delivery_dates)[-1]
diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py b/eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py
index fdd68a2d..58f7838b 100644
--- a/eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py
+++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py
@@ -1,6 +1,7 @@
# Copyright (c) 2024, ALYF GmbH and contributors
# For license information, please see license.txt
+from __future__ import annotations
from pathlib import Path
from typing import TYPE_CHECKING
@@ -279,6 +280,8 @@ def parse_tax(self, tax: ApplicableTradeTax):
t.basis_amount = flt_or_none(tax.basis_amount._value)
t.rate_applicable_percent = flt_or_none(tax.rate_applicable_percent._value)
t.calculated_amount = flt_or_none(tax.calculated_amount._value)
+ reason_text = tax.exemption_reason._text
+ t.vat_exemption_reason_text = str(reason_text).strip() if reason_text else None
def parse_payment_term(self, term: PaymentTerms):
if not term.partial_amount.children:
diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json b/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
index 9b5f467f..5a38368f 100644
--- a/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
+++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
@@ -12,6 +12,8 @@
"error_action_on_save",
"error_action_on_submit",
"sales_invoice_number_field",
+ "section_break_bt120",
+ "vat_exemption_reason_text",
"section_break_yldr",
"auto_attach_xml",
"attach_field_for_xml_file"
@@ -74,13 +76,24 @@
"fieldname": "sales_invoice_number_field",
"fieldtype": "Autocomplete",
"label": "Sales Invoice Number Field"
+ },
+ {
+ "fieldname": "section_break_bt120",
+ "fieldtype": "Section Break",
+ "label": "VAT exemption (e-invoice)"
+ },
+ {
+ "description": "If set, written to BT-120 (ram:ExemptionReason) on VAT breakdowns where an exemption reason code is emitted. Left unset in the XML when empty.",
+ "fieldname": "vat_exemption_reason_text",
+ "fieldtype": "Small Text",
+ "label": "Default VAT exemption reason"
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"issingle": 1,
"links": [],
- "modified": "2026-02-06 17:52:09.990716",
+ "modified": "2026-06-08 17:22:50.000159",
"modified_by": "Administrator",
"module": "European e-Invoice",
"name": "E Invoice Settings",
@@ -101,4 +114,4 @@
"sort_field": "creation",
"sort_order": "DESC",
"states": []
-}
\ No newline at end of file
+}
diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py b/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py
index f61bdfcf..48197706 100644
--- a/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py
+++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py
@@ -23,6 +23,7 @@ class EInvoiceSettings(Document):
sales_invoice_number_field: DF.Autocomplete | None
validate_sales_invoice_on_save: DF.Check
validate_sales_invoice_on_submit: DF.Check
+ vat_exemption_reason_text: DF.SmallText | None
# end: auto-generated types
def before_validate(self):
diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json b/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json
index 8a631c44..1d58a7a2 100644
--- a/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json
+++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json
@@ -9,6 +9,7 @@
"basis_amount",
"rate_applicable_percent",
"calculated_amount",
+ "vat_exemption_reason_text",
"tax_account"
],
"fields": [
@@ -35,6 +36,12 @@
"options": "currency",
"read_only": 1
},
+ {
+ "fieldname": "vat_exemption_reason_text",
+ "fieldtype": "Small Text",
+ "label": "VAT exemption reason",
+ "read_only": 1
+ },
{
"fieldname": "tax_account",
"fieldtype": "Link",
@@ -45,13 +52,14 @@
"index_web_pages_for_search": 1,
"istable": 1,
"links": [],
- "modified": "2024-09-26 21:18:13.837830",
+ "modified": "2026-06-08 17:23:25.953878",
"modified_by": "Administrator",
"module": "European e-Invoice",
"name": "E Invoice Trade Tax",
"owner": "Administrator",
"permissions": [],
+ "row_format": "Dynamic",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
-}
\ No newline at end of file
+}
diff --git a/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.py b/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.py
index c63ad54f..76032038 100644
--- a/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.py
+++ b/eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.py
@@ -21,6 +21,7 @@ class EInvoiceTradeTax(Document):
parenttype: DF.Data
rate_applicable_percent: DF.Percent
tax_account: DF.Link | None
+ vat_exemption_reason_text: DF.SmallText | None
# end: auto-generated types
pass
diff --git a/eu_einvoice/locale/de.po b/eu_einvoice/locale/de.po
index 7050e587..55f0576f 100644
--- a/eu_einvoice/locale/de.po
+++ b/eu_einvoice/locale/de.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: European e-Invoice VERSION\n"
"Report-Msgid-Bugs-To: hallo@alyf.de\n"
-"POT-Creation-Date: 2026-05-12 20:34+0053\n"
+"POT-Creation-Date: 2026-06-08 13:47+0053\n"
"PO-Revision-Date: 2026-02-05 11:13+0100\n"
"Last-Translator: hallo@alyf.de\n"
"Language: de\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.16.0\n"
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:790
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:803
msgid "A document level discount is currently not supported in the e-invoice."
msgstr "Ein Rabatt auf der Dokumentebene wird in der E-Rechnung derzeit nicht unterstützt."
@@ -55,7 +55,7 @@ msgstr "Vereinbarung"
msgid "Allowance Total"
msgstr "Abschläge gesamt"
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:105
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:106
msgid "An E Invoice Import with the same Invoice ID and Supplier already exists."
msgstr "Eine E-Rechnung mit der gleichen Rechnungs-ID und Lieferanten existiert bereits."
@@ -73,7 +73,7 @@ msgstr "XML-Datei automatisch anhängen"
#. Label of the payee_bic (Data) field in DocType 'E Invoice Import'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
msgid "BIC"
-msgstr ""
+msgstr "BIC"
#. Label of the basis_amount (Currency) field in DocType 'E Invoice Trade Tax'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json
@@ -165,11 +165,11 @@ msgstr "Käufer-Referenz"
msgid "Calculation Percent"
msgstr "Berechnung Prozentsatz"
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:821
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:834
msgid "Cannot create E Invoice."
msgstr "E-Rechnung konnte nicht erstellt werden."
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:835
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:848
msgid "Cannot validate E Invoice schematron."
msgstr "E-Rechnung konnte nicht validiert werden."
@@ -184,7 +184,7 @@ msgstr "Zuschläge gesamt"
msgid "Configure this if you are storing custom invoice numbers in a field other than name."
msgstr "Konfigurieren Sie dies, wenn Sie benutzerdefinierte Rechnungsnummern in einem anderen Feld als name speichern."
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:211
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:212
msgid "Could not validate E Invoice schematron. See Error Log for details."
msgstr "E-Rechnung konnte nicht validiert werden. Details im Fehlerlog."
@@ -194,6 +194,12 @@ msgstr "E-Rechnung konnte nicht validiert werden. Details im Fehlerlog."
msgid "Create Supplier Address"
msgstr "Lieferanten-Adresse erstellen"
+#. Label of the vat_exemption_reason_text (Small Text) field in DocType 'E
+#. Invoice Settings'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
+msgid "Default VAT exemption reason"
+msgstr "Standard Grund für die Umsatzsteuerbefreiung"
+
#: eu_einvoice/european_e_invoice/custom/sales_invoice.js:14
msgid "Download eInvoice"
msgstr "E-Rechnung herunterladen"
@@ -217,7 +223,7 @@ msgstr "Fälliger Betrag"
msgid "E Invoice Import"
msgstr "E-Rechnungs-Import"
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:650
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:653
msgid "E Invoice Import {0} does not exist"
msgstr "E-Rechnungs-Import {0} existiert nicht"
@@ -254,7 +260,7 @@ msgstr "E-Rechnungs-Einstellungen"
msgid "E Invoice Trade Tax"
msgstr "E-Rechnungs-Steuer"
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:803
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:816
msgid "E Invoice is not correct"
msgstr "E-Rechnung ist nicht korrekt"
@@ -273,7 +279,7 @@ msgstr "E-Rechnung"
#: eu_einvoice/desktop_icon/e_invoicing.json
#: eu_einvoice/workspace_sidebar/e_invoicing.json
msgid "E-Invoicing"
-msgstr "E-Rechnungen"
+msgstr ""
#: eu_einvoice/custom_fields.py:63 eu_einvoice/custom_fields.py:85
#: eu_einvoice/custom_fields.py:107
@@ -289,11 +295,11 @@ msgstr "Schema der elektronischen Adresse"
msgid "Embedded Document"
msgstr "Eingebettetes Dokument"
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:50
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:51
msgid "Field '{0}' does not exist on Sales Invoice doctype"
msgstr "Feld '{0}' existiert nicht im DocType 'Sales Invoice'"
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:58
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:59
msgid "Field '{0}' must be of type 'Attach'. Current type: {1}"
msgstr "Feld '{0}' muss vom Typ 'Anhängen' sein. Aktueller Typ: {1}"
@@ -303,6 +309,17 @@ msgstr "Feld '{0}' muss vom Typ 'Anhängen' sein. Aktueller Typ: {1}"
msgid "File Section"
msgstr "Datei-Abschnitt"
+#. Description of the 'Default VAT exemption reason' (Small Text) field in
+#. DocType 'E Invoice Settings'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
+msgid "If set, written to BT-120 (ram:ExemptionReason) on VAT breakdowns where an exemption reason code is emitted. Left unset in the XML when empty."
+msgstr "Wenn ausgefüllt, wird der Text als BT-120 (ram:ExemptionReason) in der Steueraufschlüsselung geschrieben, sobald ein Befreiungsgrundcode ausgegeben wird. Bleibt das Feld leer, wird BT-120 im XML nicht gesetzt."
+
+#. Label of the id (Data) field in DocType 'E Invoice Import'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
+msgid "Invoice ID"
+msgstr "Rechnungs-ID"
+
#. Label of the line_total (Currency) field in DocType 'E Invoice Import'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
msgid "Line Total"
@@ -318,11 +335,11 @@ msgstr "Mit {0} verknüpfen"
msgid "Monetary Summation"
msgstr "Gesamtbeträge"
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:443
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:446
msgid "No machine-readable data was found in the PDF file. You can create a regular Purchase Invoice manually instead."
msgstr "In der PDF-Datei wurden keine maschinenlesbaren Daten gefunden. Sie können stattdessen eine reguläre Eingangsrechnung manuell erstellen."
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:446
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:449
msgid "Not an E-Invoice"
msgstr "Keine E-Rechnung"
@@ -344,11 +361,11 @@ msgstr "Teilbetrag"
msgid "Payment Means"
msgstr "Zahlungsmittel"
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:119
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:120
msgid "Please create or select a supplier before submitting"
msgstr "Bitte vor dem Buchen einen Lieferanten auswählen oder erstellen."
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:125
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:126
msgid "Please map all invoice lines to an item before submitting"
msgstr "Bitte vor dem Buchen alle Positionen einem Artikel zuordnen."
@@ -356,7 +373,7 @@ msgstr "Bitte vor dem Buchen alle Positionen einem Artikel zuordnen."
msgid "Please note the validation errors of the e-invoice."
msgstr "Bitte beachten Sie die Validierungsfehler der E-Rechnung."
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:122
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:123
msgid "Please select a company before submitting"
msgstr "Bitte vor dem Buchen ein Unternehmen auswählen."
@@ -371,7 +388,7 @@ msgstr "Produktbeschreibung"
msgid "Product Name"
msgstr "Produktname"
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:644
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:647
msgid "Purchase Invoice {0} is already linked to E Invoice Import {1}"
msgstr "Eingangsrechnung {0} ist bereits mit E-Rechnungs-Import {1} verknüpft"
@@ -468,11 +485,11 @@ msgstr "Lieferantenrechnungsdatei"
msgid "Tax Basis Total"
msgstr "Steuerbasis gesamt"
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:453
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:456
msgid "The format of the uploaded file ({0}) is not supported for E-Invoices. Please upload a valid E-Invoice file or create a regular Purchase Invoice manually instead."
msgstr "Das Format der hochgeladenen Datei ({0}) wird für E-Rechnungen nicht unterstützt. Bitte laden Sie eine gültige E-Rechnungsdatei hoch oder erstellen Sie stattdessen eine reguläre Eingangsrechnung manuell."
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:160
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:161
msgid "The uploaded file does not contain valid XML data."
msgstr "Die hochgeladene Datei enthält keine gültige XML-Daten."
@@ -486,7 +503,7 @@ msgstr "Vorausbezahlt"
msgid "Unit Code"
msgstr "Einheits-Code"
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:456
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:459
msgid "Unsupported file format"
msgstr "Nicht unterstütztes Dateiformat"
@@ -495,6 +512,18 @@ msgstr "Nicht unterstütztes Dateiformat"
msgid "Upload the .xml or .pdf file provided by your supplier."
msgstr "Laden Sie die von Ihrem Lieferanten bereitgestellte .xml- oder .pdf-Datei hoch."
+#. Label of the section_break_bt120 (Section Break) field in DocType 'E Invoice
+#. Settings'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
+msgid "VAT exemption (e-invoice)"
+msgstr "Umsatzsteuerbefreiung (E-Rechnung)"
+
+#. Label of the vat_exemption_reason_text (Small Text) field in DocType 'E
+#. Invoice Trade Tax'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json
+msgid "VAT exemption reason"
+msgstr "Grund für Umsatzsteuerbefreiung"
+
#. Label of the validate_sales_invoice_on_save (Check) field in DocType 'E
#. Invoice Settings'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
@@ -532,19 +561,19 @@ msgstr "Validierungswarnungen"
msgid "Warning Message"
msgstr "Warnung"
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:769
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:782
msgid "{0} row #{1}: Discount Date should be after Posting Date"
msgstr "{0} Zeile {1}: Rabatt-Datum sollte nach Buchungsdatum liegen"
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:758
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:771
msgid "{0} row #{1}: The charge type 'Actual' is only supported in the eInvoice profiles 'EXTENDED' and 'XRECHNUNG'."
msgstr "Die Gebührenart 'Tatsächlich' wird nur in den E-Rechnungs-Profilen 'EXTENDED' und 'XRECHNUNG' unterstützt."
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:746
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:759
msgid "{0} row #{1}: Type '{2}' is not supported in e-invoice"
msgstr "{0} Zeile #{1}: Typ '{2}' wird in der E-Rechnung nicht unterstützt"
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:781
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:794
msgid "{0}: Only one mode of payment will be considered in the e-invoice."
msgstr "{0}: Nur eine Zahlungsart wird in der E-Rechnung berücksichtigt."
diff --git a/eu_einvoice/locale/main.pot b/eu_einvoice/locale/main.pot
index 8de6ba93..82c42aea 100644
--- a/eu_einvoice/locale/main.pot
+++ b/eu_einvoice/locale/main.pot
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: European e-Invoice VERSION\n"
"Report-Msgid-Bugs-To: hallo@alyf.de\n"
-"POT-Creation-Date: 2026-05-12 20:34+0053\n"
-"PO-Revision-Date: 2026-05-12 20:34+0053\n"
+"POT-Creation-Date: 2026-06-08 13:47+0053\n"
+"PO-Revision-Date: 2026-06-08 13:47+0053\n"
"Last-Translator: hallo@alyf.de\n"
"Language-Team: hallo@alyf.de\n"
"MIME-Version: 1.0\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.16.0\n"
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:790
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:803
msgid "A document level discount is currently not supported in the e-invoice."
msgstr ""
@@ -53,7 +53,7 @@ msgstr ""
msgid "Allowance Total"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:105
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:106
msgid "An E Invoice Import with the same Invoice ID and Supplier already exists."
msgstr ""
@@ -163,11 +163,11 @@ msgstr ""
msgid "Calculation Percent"
msgstr ""
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:821
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:834
msgid "Cannot create E Invoice."
msgstr ""
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:835
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:848
msgid "Cannot validate E Invoice schematron."
msgstr ""
@@ -182,7 +182,7 @@ msgstr ""
msgid "Configure this if you are storing custom invoice numbers in a field other than name."
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:211
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:212
msgid "Could not validate E Invoice schematron. See Error Log for details."
msgstr ""
@@ -192,6 +192,12 @@ msgstr ""
msgid "Create Supplier Address"
msgstr ""
+#. Label of the vat_exemption_reason_text (Small Text) field in DocType 'E
+#. Invoice Settings'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
+msgid "Default VAT exemption reason"
+msgstr ""
+
#: eu_einvoice/european_e_invoice/custom/sales_invoice.js:14
msgid "Download eInvoice"
msgstr ""
@@ -215,7 +221,7 @@ msgstr ""
msgid "E Invoice Import"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:650
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:653
msgid "E Invoice Import {0} does not exist"
msgstr ""
@@ -252,7 +258,7 @@ msgstr ""
msgid "E Invoice Trade Tax"
msgstr ""
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:803
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:816
msgid "E Invoice is not correct"
msgstr ""
@@ -287,11 +293,11 @@ msgstr ""
msgid "Embedded Document"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:50
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:51
msgid "Field '{0}' does not exist on Sales Invoice doctype"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:58
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.py:59
msgid "Field '{0}' must be of type 'Attach'. Current type: {1}"
msgstr ""
@@ -301,6 +307,17 @@ msgstr ""
msgid "File Section"
msgstr ""
+#. Description of the 'Default VAT exemption reason' (Small Text) field in
+#. DocType 'E Invoice Settings'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
+msgid "If set, written to BT-120 (ram:ExemptionReason) on VAT breakdowns where an exemption reason code is emitted. Left unset in the XML when empty."
+msgstr ""
+
+#. Label of the id (Data) field in DocType 'E Invoice Import'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
+msgid "Invoice ID"
+msgstr ""
+
#. Label of the line_total (Currency) field in DocType 'E Invoice Import'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.json
msgid "Line Total"
@@ -316,11 +333,11 @@ msgstr ""
msgid "Monetary Summation"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:443
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:446
msgid "No machine-readable data was found in the PDF file. You can create a regular Purchase Invoice manually instead."
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:446
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:449
msgid "Not an E-Invoice"
msgstr ""
@@ -342,11 +359,11 @@ msgstr ""
msgid "Payment Means"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:119
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:120
msgid "Please create or select a supplier before submitting"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:125
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:126
msgid "Please map all invoice lines to an item before submitting"
msgstr ""
@@ -354,7 +371,7 @@ msgstr ""
msgid "Please note the validation errors of the e-invoice."
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:122
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:123
msgid "Please select a company before submitting"
msgstr ""
@@ -369,7 +386,7 @@ msgstr ""
msgid "Product Name"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:644
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:647
msgid "Purchase Invoice {0} is already linked to E Invoice Import {1}"
msgstr ""
@@ -466,11 +483,11 @@ msgstr ""
msgid "Tax Basis Total"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:453
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:456
msgid "The format of the uploaded file ({0}) is not supported for E-Invoices. Please upload a valid E-Invoice file or create a regular Purchase Invoice manually instead."
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:160
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:161
msgid "The uploaded file does not contain valid XML data."
msgstr ""
@@ -484,7 +501,7 @@ msgstr ""
msgid "Unit Code"
msgstr ""
-#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:456
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_import/e_invoice_import.py:459
msgid "Unsupported file format"
msgstr ""
@@ -493,6 +510,18 @@ msgstr ""
msgid "Upload the .xml or .pdf file provided by your supplier."
msgstr ""
+#. Label of the section_break_bt120 (Section Break) field in DocType 'E Invoice
+#. Settings'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
+msgid "VAT exemption (e-invoice)"
+msgstr ""
+
+#. Label of the vat_exemption_reason_text (Small Text) field in DocType 'E
+#. Invoice Trade Tax'
+#: eu_einvoice/european_e_invoice/doctype/e_invoice_trade_tax/e_invoice_trade_tax.json
+msgid "VAT exemption reason"
+msgstr ""
+
#. Label of the validate_sales_invoice_on_save (Check) field in DocType 'E
#. Invoice Settings'
#: eu_einvoice/european_e_invoice/doctype/e_invoice_settings/e_invoice_settings.json
@@ -531,19 +560,19 @@ msgstr ""
msgid "Warning Message"
msgstr ""
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:769
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:782
msgid "{0} row #{1}: Discount Date should be after Posting Date"
msgstr ""
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:758
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:771
msgid "{0} row #{1}: The charge type 'Actual' is only supported in the eInvoice profiles 'EXTENDED' and 'XRECHNUNG'."
msgstr ""
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:746
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:759
msgid "{0} row #{1}: Type '{2}' is not supported in e-invoice"
msgstr ""
-#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:781
+#: eu_einvoice/european_e_invoice/custom/sales_invoice.py:794
msgid "{0}: Only one mode of payment will be considered in the e-invoice."
msgstr ""