#037 Rabatt je Position und der tatsächliche Ablauf
Status: erledigt Meilenstein: v0.22.0 Labels: backend, ui Geschätzt: 3 h Tatsächlich: 0 h 55 min
Auslöser
Florian zeigte eine echte Proxmox-Rechnung (#291017) und beschrieb den Ablauf:
Proxmox VE Standard Subscription 2 CPUs/year - pve2s-3ef3be4d75 € 1.100,00
Proxmox VE Standard Subscription 2 CPUs/year - pve2s-b7a0d516af € 1.100,00
Client Discount - … pve2s-3ef3be4d75 € -110,00
Client Discount - … pve2s-b7a0d516af € -110,00
Sub Total € 1.980,00
Dazu: Man bekommt die Rechnung zuerst als UNPAID. Erst wenn der Kunde seine Rechnung bezahlt hat,
zahlt man selbst bei Proxmox – und bekommt dieselbe Rechnung dann als PAID mit Transaktion.
Was falsch war
Der Rabatt hing an der Rechnung, nicht an der Position. Bei einer Sammelrechnung über zwei
Hosts ließe sich ein Rabatt keinem Host zuordnen; die Marge je Host wäre falsch.
Er wurde nirgends abgezogen – weder in der Summe noch in der Marge. Ein Feld, das aussieht wie
eine Rechengröße und keine ist.
Vorgabe 19 % USt für den Einkauf. Proxmox sitzt in Österreich und rechnet gegenüber Unternehmen
mit USt-IdNr. über Reverse Charge ab – richtig sind 0 %.
Behebung
rabatt wandert an ProxmoxRechnungPosition; die Migration verteilt vorhandene Werte anteilig auf
die Positionen und rechnet die Rechnungssummen neu. Nichts geht verloren.
Rechnungsbetrag = Summe der Positionen nach Abzug ihrer Rabatte – wie das „Sub Total“ auf der
echten Rechnung.
Marge und alle Summen rechnen mit dem Betrag nach Abzug.
Das Formular heißt jetzt „Listenpreis netto“ und zeigt beim Tippen, womit gerechnet wird.
Eigener Steuersatz für den Einkauf, Vorgabe 0 (Reverse Charge).
Die Sammelrechnung listet je Position „1.100,00 € − 110,00 € = 990,00 €“.
Neue Warnregel
kunde-bezahlt-einkauf-offen: Der Kunde hat bezahlt, die Proxmox-Rechnung ist noch offen. Genau der
Zustand aus Florians Ablauf – das Geld ist da, die Rechnung auch, jetzt kann gezahlt werden. Bewusst
unabhängig vom Fälligkeitsdatum, denn die Reihenfolge ist Absicht und keine Nachlässigkeit.
Zum PDF
Die PAID-Fassung ersetzt beim erneuten Hochladen einfach die UNPAID-Fassung – gleiche Rechnungsnummer,
gleiche Rechnung. Gleiche Dateien werden an ihrer Prüfsumme erkannt und nicht doppelt abgelegt.
Quelle: docs/issues/037-rabatt-und-ablauf.md – dort wird dieses Issue gepflegt.
# #037 Rabatt je Position und der tatsächliche Ablauf
**Status:** erledigt
**Meilenstein:** v0.22.0
**Labels:** backend, ui
**Geschätzt:** 3 h **Tatsächlich:** 0 h 55 min
## Auslöser
Florian zeigte eine echte Proxmox-Rechnung (#291017) und beschrieb den Ablauf:
```
Proxmox VE Standard Subscription 2 CPUs/year - pve2s-3ef3be4d75 € 1.100,00
Proxmox VE Standard Subscription 2 CPUs/year - pve2s-b7a0d516af € 1.100,00
Client Discount - … pve2s-3ef3be4d75 € -110,00
Client Discount - … pve2s-b7a0d516af € -110,00
Sub Total € 1.980,00
```
Dazu: Man bekommt die Rechnung zuerst als **UNPAID**. Erst wenn der Kunde seine Rechnung bezahlt hat,
zahlt man selbst bei Proxmox – und bekommt dieselbe Rechnung dann als **PAID** mit Transaktion.
## Was falsch war
1. **Der Rabatt hing an der Rechnung, nicht an der Position.** Bei einer Sammelrechnung über zwei
Hosts ließe sich ein Rabatt keinem Host zuordnen; die Marge je Host wäre falsch.
2. **Er wurde nirgends abgezogen** – weder in der Summe noch in der Marge. Ein Feld, das aussieht wie
eine Rechengröße und keine ist.
3. **Vorgabe 19 % USt** für den Einkauf. Proxmox sitzt in Österreich und rechnet gegenüber Unternehmen
mit USt-IdNr. über Reverse Charge ab – richtig sind 0 %.
## Behebung
- `rabatt` wandert an `ProxmoxRechnungPosition`; die Migration verteilt vorhandene Werte anteilig auf
die Positionen und rechnet die Rechnungssummen neu. Nichts geht verloren.
- Rechnungsbetrag = Summe der Positionen **nach Abzug ihrer Rabatte** – wie das „Sub Total“ auf der
echten Rechnung.
- Marge und alle Summen rechnen mit dem Betrag nach Abzug.
- Das Formular heißt jetzt „Listenpreis netto“ und zeigt beim Tippen, womit gerechnet wird.
- Eigener Steuersatz für den Einkauf, Vorgabe 0 (Reverse Charge).
- Die Sammelrechnung listet je Position „1.100,00 € − 110,00 € = 990,00 €“.
## Neue Warnregel
`kunde-bezahlt-einkauf-offen`: Der Kunde hat bezahlt, die Proxmox-Rechnung ist noch offen. Genau der
Zustand aus Florians Ablauf – das Geld ist da, die Rechnung auch, jetzt kann gezahlt werden. Bewusst
unabhängig vom Fälligkeitsdatum, denn die Reihenfolge ist Absicht und keine Nachlässigkeit.
## Zum PDF
Die PAID-Fassung ersetzt beim erneuten Hochladen einfach die UNPAID-Fassung – gleiche Rechnungsnummer,
gleiche Rechnung. Gleiche Dateien werden an ihrer Prüfsumme erkannt und nicht doppelt abgelegt.
---
Quelle: `docs/issues/037-rabatt-und-ablauf.md` – dort wird dieses Issue gepflegt.
florian.wilde
added this to the v0.22.0 milestone 2026-10-03 14:42:25 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
#037 Rabatt je Position und der tatsächliche Ablauf
Status: erledigt
Meilenstein: v0.22.0
Labels: backend, ui
Geschätzt: 3 h Tatsächlich: 0 h 55 min
Auslöser
Florian zeigte eine echte Proxmox-Rechnung (#291017) und beschrieb den Ablauf:
Dazu: Man bekommt die Rechnung zuerst als UNPAID. Erst wenn der Kunde seine Rechnung bezahlt hat,
zahlt man selbst bei Proxmox – und bekommt dieselbe Rechnung dann als PAID mit Transaktion.
Was falsch war
Hosts ließe sich ein Rabatt keinem Host zuordnen; die Marge je Host wäre falsch.
eine Rechengröße und keine ist.
mit USt-IdNr. über Reverse Charge ab – richtig sind 0 %.
Behebung
rabattwandert anProxmoxRechnungPosition; die Migration verteilt vorhandene Werte anteilig aufdie Positionen und rechnet die Rechnungssummen neu. Nichts geht verloren.
echten Rechnung.
Neue Warnregel
kunde-bezahlt-einkauf-offen: Der Kunde hat bezahlt, die Proxmox-Rechnung ist noch offen. Genau derZustand aus Florians Ablauf – das Geld ist da, die Rechnung auch, jetzt kann gezahlt werden. Bewusst
unabhängig vom Fälligkeitsdatum, denn die Reihenfolge ist Absicht und keine Nachlässigkeit.
Zum PDF
Die PAID-Fassung ersetzt beim erneuten Hochladen einfach die UNPAID-Fassung – gleiche Rechnungsnummer,
gleiche Rechnung. Gleiche Dateien werden an ihrer Prüfsumme erkannt und nicht doppelt abgelegt.
Quelle:
docs/issues/037-rabatt-und-ablauf.md– dort wird dieses Issue gepflegt.