From 23ad5c6945ed2b59c17e291163187ecfe23f288a Mon Sep 17 00:00:00 2001 From: dankito Date: Mon, 25 Nov 2024 17:28:29 +0100 Subject: [PATCH] Added TotalAmounts --- .../net/codinux/invoicing/model/Invoice.kt | 10 +++- .../codinux/invoicing/model/TotalAmounts.kt | 49 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 e-invoice-domain/src/main/kotlin/net/codinux/invoicing/model/TotalAmounts.kt diff --git a/e-invoice-domain/src/main/kotlin/net/codinux/invoicing/model/Invoice.kt b/e-invoice-domain/src/main/kotlin/net/codinux/invoicing/model/Invoice.kt index 2ea6655..e2d4c6f 100644 --- a/e-invoice-domain/src/main/kotlin/net/codinux/invoicing/model/Invoice.kt +++ b/e-invoice-domain/src/main/kotlin/net/codinux/invoicing/model/Invoice.kt @@ -18,6 +18,14 @@ class Invoice( val buyerReference: String? = null, val amountAdjustments: AmountAdjustments? = null, + + /** + * The total amounts of the invoice. + * + * For outgoing invoices: You don't have to calculate them, we do this for you. This ensures that all total amounts + * are in accordance to other data of the invoice like the invoice item amounts and amount adjustments. + */ + var totalAmounts: TotalAmounts? = null ) { - override fun toString() = "$invoicingDate $invoiceNumber to $recipient" + override fun toString() = "$invoicingDate $invoiceNumber to $recipient ${totalAmounts?.duePayableAmount?.let { " (${it.toPlainString()})" } ?: ""}" } \ No newline at end of file diff --git a/e-invoice-domain/src/main/kotlin/net/codinux/invoicing/model/TotalAmounts.kt b/e-invoice-domain/src/main/kotlin/net/codinux/invoicing/model/TotalAmounts.kt new file mode 100644 index 0000000..6ab74f7 --- /dev/null +++ b/e-invoice-domain/src/main/kotlin/net/codinux/invoicing/model/TotalAmounts.kt @@ -0,0 +1,49 @@ +package net.codinux.invoicing.model + +import java.math.BigDecimal + +class TotalAmounts( + /** + * Gesamtbetrag einer einzelnen Rechnungsposition. + */ + val lineTotalAmount: BigDecimal, + + val chargeTotalAmount: BigDecimal = BigDecimal.ZERO, + + /** + * Gesamtbetrag aller gewährten Rabatte, Abzüge oder Nachlässe. + */ + val allowanceTotalAmount: BigDecimal = BigDecimal.ZERO, + + /** + * Der Gesamtbetrag, der als Grundlage für die Steuerberechnung dient, nach Abzug von Rabatten (Allowance) und vor + * Hinzufügen der Steuerbeträge. + */ + val taxBasisTotalAmount: BigDecimal, + + /** + * Die Gesamtsumme der auf der Rechnung anfallenden Steuern. Dies umfasst in der Regel alle Steuerarten, die auf den + * Tax Basis Total Amount angewendet werden (z. B. Mehrwertsteuer oder Umsatzsteuer). + */ + val taxTotalAmount: BigDecimal, + + /** + * Der Gesamtbetrag der Rechnung nach Berücksichtigung aller Kosten, Abzüge und Steuern. Dies ist der Betrag, der + * vor eventuellen Vorauszahlungen oder Gutschriften fällig wäre. + */ + val grandTotalAmount: BigDecimal, + + /** + * Der Betrag, der bereits im Voraus bezahlt wurde. Dieser Betrag wird vom Grand Total Amount abgezogen, um den + * verbleibenden Zahlungsbetrag zu ermitteln. + */ + val totalPrepaidAmount: BigDecimal, + + /** + * Der noch zu zahlende Betrag, den der Kunde begleichen muss. Er ergibt sich aus dem Grand Total Amount abzüglich + * des Total Prepaid Amount und eventueller weiterer Gutschriften oder Anpassungen. + */ + val duePayableAmount: BigDecimal +) { + override fun toString() = "${duePayableAmount.toPlainString()} (net: ${taxBasisTotalAmount.toPlainString()}, tax: ${taxTotalAmount.toPlainString()})" +} \ No newline at end of file