4 Stimmen

Rabatt auf der Rechnung: Negative Einzelposten vs. Interne Eigenschaften

Sollen Skonti auf Rechnungsposten und ganze Rechnungen negative Einzelposten o separate Immobilien einer Rechnung?

In einer ähnlichen Frage, Soll ich die Liste der Gebühren/Rabatte in eine Auftragsklasse einbinden oder sollen sie Positionszeilen sein? konzentriert sich der Fragesteller mehr auf Bestellungen als Rechnungen (was eine etwas andere Geschäftseinheit ist). Der Rabatt wird vorgeschlagen als getrennt aus Auftragspositionen, da sie nicht mit einer Gebühr oder einem Produkt gleichzusetzen sind und möglicherweise anderen Meldepflichten unterliegen. Daher sollte der Rabatt nicht einfach ein negativer Posten sein.

Bisher habe ich mit Erfolg negative Einzelposten verwendet, um Skonti deutlich anzugeben und zu berechnen, aber dies erscheint mir aus geschäftlicher Sicht unflexibel und ungenau. Jetzt entscheide ich mich dafür, den Rabatt zu jeder einzelnen Position hinzuzufügen, zusammen mit einem rechnungsweiten Rabatt.

  • Ist das der richtige Weg?
  • Sollte jeder Artikel einen eigenen Rabattbetrag und -prozentsatz haben?

Domänenmodell Codebeispiel

Mein Domänenmodell, das einem SQL-Repository zugeordnet ist, sieht folgendermaßen aus:

public class Invoice
{
    public int ID { get; set; }
    public Guid JobID { get; set; }
    public string InvoiceNumber { get; set; }
    public Guid UserId { get; set; } // user who created it
    public DateTime Date { get; set; }

    public LazyList<InvoiceLine> InvoiceLines { get; set; }
    public LazyList<Payment> Payments { get; set; } // for payments received

    public boolean IsVoided { get; set; }   // Invoices are immutable.
                                            // To change: void -> new invoice.

    public decimal Total
    {
        get {
            return InvoiceLines.Sum(i => i.LineTotal);
        }
    }
}

public class InvoiceLine
{
    public int ID { get; set; }
    public int InvoiceID { get; set; }
    public string Title { get; set; }
    public decimal Quantity { get; set; }
    public decimal LineItemPrice { get; set; }

    public decimal DiscountPercent { get; set; } // line discount %?
    public decimal DiscountAmount { get; set; } // line discount amount?

    public decimal LineTotal {
        get {
            return (1.0M - DiscountPercent)
                    * (this.Quantity * (this.LineItemPrice))
                    - DiscountAmount;
        }
    }
}

1voto

Thomas Punkte 62314

Negative Einzelposten

Wie werden Sie mit Krediten umgehen? D.h. Sie stellen jemandem drei Artikel in Rechnung, aber zwei davon sind fehlerhaft, so dass Sie die Kosten für die beiden fehlerhaften Artikel stornieren. Hierfür gibt es mehrere Möglichkeiten. Eine Lösung ist eine Gutschrift, die eine Variante einer Rechnung ist, mit dem Unterschied, dass die Beträge der Person gutgeschrieben werden, an die die Rechnung ausgestellt wurde. Wenn Sie keine negativen Zahlen zulassen, müssen Sie eine Möglichkeit finden, Gutschriften separat zu speichern oder die Rechnung als Gutschrift zu kennzeichnen. Im letzteren Fall würden sie eine weitere Rechnung ausstellen, die als Gutschrift gekennzeichnet ist. Eine andere Lösung ist natürlich die Möglichkeit, negative Posten zu speichern. Die Art und Weise, wie Gutschriften gehandhabt werden, ist ausschlaggebend dafür, ob die Verwendung negativer Einzelposten der richtige Ansatz ist.

Gebühren und Ermäßigungen

Ein Ansatz besteht darin, Rabatte und Gebühren in zwei Arten zu unterteilen:

  1. Rabatte, die für bestimmte Bestellpositionen gelten
  2. Rabatte, die als Position aufgezählt werden, sich aber nicht auf eine bestimmte Auftragsposition beziehen.

Beachten Sie, dass ich keinen Rabatt für die Bestellung angegeben habe. Das ist beabsichtigt. Jeder Rabatt oder jede Gebühr müsste als Artikel aufgezählt werden (aber nicht unbedingt für ein Produkt gelten). Auf diese Weise ist jeder Rabatt und jede Gebühr in seiner Quelle eindeutig. Damit wird verhindert, dass jemand einen Rabatt auf eine Bestellung gibt, dessen Quelle oder Berechtigung niemand feststellen kann. Das Gleiche gilt für andere Gebühren als Steuern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X