Hallo zusammen,
ich würde gerne den relativen Anteil von zwei Datümer auf Monatsebene umrechnen.
Als Usecase wofür ich das benötige ist das Upgrade / Downgrade eines Vertrags.
Bei einem monatlichen und jährlichen Gebührenintervall wird immer der relative Anteil auf Monatsebene umgerechnet.
Als Beispiel:
- Kunde schließt einen 1 Jahresvertrag am 05.05.2019 um 16 Uhr ab.
- Ein Kunde hat vom 05.05.2019 16:00 Uhr - 07.07.2019 11:00 Produkt1 verwendet.
- Am 07.07.2019 11:00 erfolgt dann aber das Upgrade auf Produkt2.
-> Die Vertragslaufzeit ändert sich nicht, allerdings muss der Kunde für das Upgrade etwas draufzahlen
-> Kunde hat jedoch nicht die vollen 12 Monate von Produkt2 verwendet, sodass der genutzte Anteil von Produkt1 gutgeschrieben wird.
Das wären dann:
2 Monate + (1 +(19/24 ))
-> Der hintere Teil der Formel berechnet sich aus der Anzahl an Tagen zwischen 05.07.2019:16:00 - 07.07.2019:11:00, also 1 Tag + 19 von 24 Stunden = 1 + (19/24)
Erklärung:
1 = 1 Tag
19 = Differenz von 16:00 - 11:00 Uhr
24 = von 24 Stunden
31 = Tage vom 05.07.-05.08.2019 = 31
Dieser Wert soll dann auf den relativen Anteil an einem Monat normiert werden.
Anzahl an Tagen zwischen 05.07. und demselben Tag einen Monat später (05.08.) herangezogen. Daraus ergibt sich:
#Tage vom 05.07.-05.08.2019 = 31
-> Ergibt dann einen relativen Anteil von: 2,06451612903
-> Der relativ zum Jahr genutzte Teil von Produkt1 wäre dann eben:
2,06451612903 / 12 = 0,171483
Das heißt also, dass folgender Betrag gutgeschrieben würde:
1 - 0,171483 = -0,828517
Die Frage, die ich mir nun stelle, wie ich das programmiertechnisch am Besten umsetze?
Hier meine Idee:
a) "Differenz an Monaten" ausrechnen anhand dem StartDatum und dem UpgradeDatum
b) Neues Datum berechnen anhand der ausgerechneten Monate. Also startDate + 2 Monate = "Neues Datum"
c) Von "neues Datum" die Differenz an Millisekunden ausrechnen vom EndeDatum (anstatt Stunden) = "Fehlende Tage"
d) "Differenz an Monaten" + "Fehlende Tage" = "relativerAnteil"
e) Wenn Jahresvertrag = "relativerAnteil" / 12 = "GenutzterTeil"
f) 1 - "GenutzterTeil" = "Gutschreiben"
g) "JahresbetragTarif1" * "Gutschreiben" + "JahresbetragTarif2"
-> Wenn negativ, dann bekommt Kunde eine Gutschrift
-> Wenn positiv, dann bekommt Kunde eine Rechnung
Fragen:
Passt das so? Oder wie sollte man es sonst machen?
ich würde gerne den relativen Anteil von zwei Datümer auf Monatsebene umrechnen.
Als Usecase wofür ich das benötige ist das Upgrade / Downgrade eines Vertrags.
Bei einem monatlichen und jährlichen Gebührenintervall wird immer der relative Anteil auf Monatsebene umgerechnet.
Als Beispiel:
- Kunde schließt einen 1 Jahresvertrag am 05.05.2019 um 16 Uhr ab.
- Ein Kunde hat vom 05.05.2019 16:00 Uhr - 07.07.2019 11:00 Produkt1 verwendet.
- Am 07.07.2019 11:00 erfolgt dann aber das Upgrade auf Produkt2.
-> Die Vertragslaufzeit ändert sich nicht, allerdings muss der Kunde für das Upgrade etwas draufzahlen
-> Kunde hat jedoch nicht die vollen 12 Monate von Produkt2 verwendet, sodass der genutzte Anteil von Produkt1 gutgeschrieben wird.
Das wären dann:
2 Monate + (1 +(19/24 ))
-> Der hintere Teil der Formel berechnet sich aus der Anzahl an Tagen zwischen 05.07.2019:16:00 - 07.07.2019:11:00, also 1 Tag + 19 von 24 Stunden = 1 + (19/24)
Erklärung:
1 = 1 Tag
19 = Differenz von 16:00 - 11:00 Uhr
24 = von 24 Stunden
31 = Tage vom 05.07.-05.08.2019 = 31
Dieser Wert soll dann auf den relativen Anteil an einem Monat normiert werden.
Anzahl an Tagen zwischen 05.07. und demselben Tag einen Monat später (05.08.) herangezogen. Daraus ergibt sich:
#Tage vom 05.07.-05.08.2019 = 31
-> Ergibt dann einen relativen Anteil von: 2,06451612903
-> Der relativ zum Jahr genutzte Teil von Produkt1 wäre dann eben:
2,06451612903 / 12 = 0,171483
Das heißt also, dass folgender Betrag gutgeschrieben würde:
1 - 0,171483 = -0,828517
Die Frage, die ich mir nun stelle, wie ich das programmiertechnisch am Besten umsetze?
Hier meine Idee:
a) "Differenz an Monaten" ausrechnen anhand dem StartDatum und dem UpgradeDatum
b) Neues Datum berechnen anhand der ausgerechneten Monate. Also startDate + 2 Monate = "Neues Datum"
c) Von "neues Datum" die Differenz an Millisekunden ausrechnen vom EndeDatum (anstatt Stunden) = "Fehlende Tage"
d) "Differenz an Monaten" + "Fehlende Tage" = "relativerAnteil"
e) Wenn Jahresvertrag = "relativerAnteil" / 12 = "GenutzterTeil"
f) 1 - "GenutzterTeil" = "Gutschreiben"
g) "JahresbetragTarif1" * "Gutschreiben" + "JahresbetragTarif2"
-> Wenn negativ, dann bekommt Kunde eine Gutschrift
-> Wenn positiv, dann bekommt Kunde eine Rechnung
Fragen:
Passt das so? Oder wie sollte man es sonst machen?