David Malinowski 0fa8c70655 fix(msp): Kundenrechnung mit Listpreis, Einkaufspreis + Marge separat
Wichtige Semantik-Korrektur: Der Distributor-Rabatt in ADN-CSVs (z. B.
17,5 %) ist die Wiederverkäufer-Marge von itsdave und darf NICHT an den
Endkunden durchgereicht werden. Der Kunde zahlt den LISTPREIS; itsdave
bezahlt an ADN den EINZELPREIS (= Listpreis × (1 − Rabatt)).

Bisher hat der Builder fälschlich den Einzelpreis als Sales-Invoice-Rate
verwendet — der Kunde hätte dadurch rund 17,5 % zu wenig berechnet
bekommen.

Änderungen:
- builder.py: rate = row.list_price (Fallback: unit_price, amount/qty)
- subscriptions.py: Supply Subscription Event trägt jetzt sowohl
  Kundensicht (rate, amount) als auch Einkaufssicht (cost_rate,
  cost_amount, reseller_discount_pct).
- supply_subscription_event: neue Sektion „Einkauf & Marge" mit
  cost_rate, cost_amount, reseller_discount_pct, margin_amount
  (automatisch berechnet: amount − cost_amount).

Diff-Test Feb-2026-CSV:
50 von 57 Kunden nun deckungsgleich mit adnconnect.
7 verbleibende Diffs:
  5 echte adnconnect-Bugs (Split-Logik / leere SIs) — in Summe 762 €
    Unterabrechnung gegenüber korrektem Listpreis
  2 Testsystem-Tax-Template-Drift (Power BI Pro) — kein Code-Problem
2026-04-14 12:56:42 +02:00
2024-05-31 10:53:56 +01:00
2021-03-24 01:36:20 +01:00
2021-03-24 01:36:20 +01:00
2021-03-24 01:36:20 +01:00
2021-03-24 01:36:20 +01:00

MSP

App for Managed Service Providers

License

GPLv3# msp

S
Description
ERPNext App for Managed Service Providers and IT-Service Companys
Readme
681 KiB
Languages
Python 65.7%
JavaScript 30.5%
PowerShell 3.8%