Skip to content

Commit

Permalink
Merge branch 'main' into nullable-netznutzungsabrechnungsvariante
Browse files Browse the repository at this point in the history
  • Loading branch information
hf-kklein authored Dec 14, 2023
2 parents b196418 + 5886880 commit dcabf6d
Show file tree
Hide file tree
Showing 8 changed files with 28 additions and 25 deletions.
4 changes: 2 additions & 2 deletions bo/bilanzierung_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ var validBilanzierung = bo.Bilanzierung{
Bilanzkreis: internal.Ptr("11XVE-N-GHM----Q"),
Jahresverbrauchsprognose: &com.Menge{
Wert: newDecimalFromString("1500"),
Einheit: mengeneinheit.KWH,
Einheit: internal.Ptr(mengeneinheit.KWH),
},
Kundenwert: &com.Menge{
Wert: newDecimalFromString("0.17"),
Einheit: mengeneinheit.MWH,
Einheit: internal.Ptr(mengeneinheit.MWH),
},
Verbrauchsaufteilung: decimal.NewNullDecimal(newDecimalFromString("0.17")),
Zeitreihentyp: zeitreihentyp.LGS,
Expand Down
2 changes: 1 addition & 1 deletion bo/rechnung_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ var completeValidRechnung = bo.Rechnung{
LokationsId: "54321012345",
PositionsMenge: com.Menge{
Wert: decimal.NewFromFloat(20),
Einheit: mengeneinheit.KWH,
Einheit: internal.Ptr(mengeneinheit.KWH),
},
Einzelpreis: com.Preis{
Wert: decimal.NewFromFloat(12),
Expand Down
4 changes: 2 additions & 2 deletions com/menge.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ import (

// Menge ist die Abbildung einer Menge mit Wert und Einheit.
type Menge struct {
Wert decimal.Decimal `json:"wert" validate:"required"` // Wert gibt den absoluten Wert der Menge an
Einheit mengeneinheit.Mengeneinheit `json:"einheit,omitempty" validate:"required"` // Einheit gibt die Einheit zum jeweiligen Wert an
Wert decimal.Decimal `json:"wert" validate:"required"` // Wert gibt den absoluten Wert der Menge an
Einheit *mengeneinheit.Mengeneinheit `json:"einheit,omitempty" validate:"required"` // Einheit gibt die Einheit zum jeweiligen Wert an
}
7 changes: 4 additions & 3 deletions com/menge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/go-playground/validator/v10"
"github.com/hochfrequenz/go-bo4e/com"
"github.com/hochfrequenz/go-bo4e/enum/mengeneinheit"
"github.com/hochfrequenz/go-bo4e/internal"
"github.com/shopspring/decimal"
"strings"
)
Expand All @@ -15,7 +16,7 @@ import (
func (s *Suite) Test_Menge_Deserialization() {
var menge = com.Menge{
Wert: decimal.NewFromFloat(42),
Einheit: mengeneinheit.KUBIKMETER,
Einheit: internal.Ptr(mengeneinheit.KUBIKMETER),
}
serializedMenge, err := json.Marshal(menge)
jsonString := string(serializedMenge)
Expand All @@ -34,11 +35,11 @@ func (s *Suite) Test_Successful_Menge_Validation() {
validMenges := []interface{}{
com.Menge{
Wert: decimal.NewFromFloat(42),
Einheit: mengeneinheit.KUBIKMETER,
Einheit: internal.Ptr(mengeneinheit.KUBIKMETER),
},
com.Menge{
Wert: decimal.NewFromFloat(0), // 0 is a valid value
Einheit: mengeneinheit.W,
Einheit: internal.Ptr(mengeneinheit.W),
},
}
VerfiySuccessfulValidations(s, validate, validMenges)
Expand Down
3 changes: 2 additions & 1 deletion com/netznutzungsabrechnungsdaten_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/hochfrequenz/go-bo4e/enum/artikelidtyp"
"github.com/hochfrequenz/go-bo4e/enum/mengeneinheit"
"github.com/hochfrequenz/go-bo4e/enum/waehrungseinheit"
"github.com/hochfrequenz/go-bo4e/internal"
"github.com/shopspring/decimal"
)

Expand All @@ -18,7 +19,7 @@ func (s *Suite) Test_Netznutzungsabrechnungsdaten_Deserialization() {
anzahl := 17
singulaereBetriebsmittel := com.Menge{
Wert: decimal.NewFromFloat(12.34),
Einheit: mengeneinheit.KWH,
Einheit: internal.Ptr(mengeneinheit.KWH),
}
preisSingulaereBetriebsmittel := com.Preis{
Wert: decimal.NewFromFloat(12.34),
Expand Down
4 changes: 2 additions & 2 deletions com/rechnungsposition.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@ type Rechnungsposition struct {
// RechnungspositionStructLevelValidation does a cross check on a Rechnungsposition object
func RechnungspositionStructLevelValidation(sl validator.StructLevel) {
rp := sl.Current().Interface().(Rechnungsposition)
if rp.Einzelpreis.Bezugswert != rp.PositionsMenge.Einheit {
if rp.PositionsMenge.Einheit != nil && rp.Einzelpreis.Bezugswert != *rp.PositionsMenge.Einheit {
sl.ReportError(rp.PositionsMenge.Einheit, "Einheit", "PositionsMenge", "PositionsMenge.Einheit==Einzelpreis.Bezugswert", "")
}
expectedTeilsummeNetto := Menge{
Wert: rp.PositionsMenge.Wert.Mul(rp.Einzelpreis.Wert), // anzahl*preis
Einheit: rp.PositionsMenge.Einheit,
}
if rp.ZeitbezogeneMenge != nil {
if rp.ZeitbezogeneMenge.Einheit != rp.Einzelpreis.Bezugswert {
if rp.ZeitbezogeneMenge.Einheit != nil && *rp.ZeitbezogeneMenge.Einheit != rp.Einzelpreis.Bezugswert {
sl.ReportError(rp.ZeitbezogeneMenge.Einheit, "Einheit", "ZeitbezogeneMenge", "ZeitbezogeneMenge.Einheit==Einzelpreis.Bezugswert", "")
// further checks are not meaningful at this point because there is no implicit conversion like: "1 year = 12 months"
return
Expand Down
16 changes: 8 additions & 8 deletions com/rechnungsposition_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ func (s *Suite) Test_Rechnungsposition_Deserialization() {
LokationsId: "54321012345",
PositionsMenge: com.Menge{
Wert: newDecimalFromString("20"),
Einheit: mengeneinheit.KWH,
Einheit: internal.Ptr(mengeneinheit.KWH),
},
ZeitbezogeneMenge: &com.Menge{
Wert: newDecimalFromString("23"),
Einheit: mengeneinheit.KUBIKMETER,
Einheit: internal.Ptr(mengeneinheit.KUBIKMETER),
},
Korrekturfaktor: &korrekturfaktor,
Einzelpreis: com.Preis{
Expand Down Expand Up @@ -98,7 +98,7 @@ func (s *Suite) Test_Failed_RechnungspositionValidation() {
"PositionsMenge.Einheit==Einzelpreis.Bezugswert": {
com.Rechnungsposition{
PositionsMenge: com.Menge{
Einheit: mengeneinheit.KW,
Einheit: internal.Ptr(mengeneinheit.KW),
},
Einzelpreis: com.Preis{
Bezugswert: mengeneinheit.KUBIKMETER,
Expand All @@ -108,21 +108,21 @@ func (s *Suite) Test_Failed_RechnungspositionValidation() {
"ZeitbezogeneMenge.Einheit==Einzelpreis.Bezugswert": {
com.Rechnungsposition{
PositionsMenge: com.Menge{
Einheit: mengeneinheit.KW,
Einheit: internal.Ptr(mengeneinheit.KW),
},
Einzelpreis: com.Preis{
Bezugswert: mengeneinheit.KW,
},
ZeitbezogeneMenge: &com.Menge{
Einheit: mengeneinheit.KUBIKMETER,
Einheit: internal.Ptr(mengeneinheit.KUBIKMETER),
},
},
},
"TeilsummeNetto.Wert==Einzelpreis*Positionsmenge": {
com.Rechnungsposition{
PositionsMenge: com.Menge{
Wert: decimal.NewFromFloat(10),
Einheit: mengeneinheit.KWH,
Einheit: internal.Ptr(mengeneinheit.KWH),
},
Einzelpreis: com.Preis{
Wert: decimal.NewFromFloat(1.5),
Expand All @@ -131,7 +131,7 @@ func (s *Suite) Test_Failed_RechnungspositionValidation() {
},
ZeitbezogeneMenge: &com.Menge{
Wert: decimal.NewFromFloat(3),
Einheit: mengeneinheit.KWH,
Einheit: internal.Ptr(mengeneinheit.KWH),
},
TeilsummeNetto: com.Betrag{
Wert: decimal.NewFromFloat(44), // expected 45 = 3*1.5*10 => validation error
Expand All @@ -158,7 +158,7 @@ func (s *Suite) Test_Successful_RechnungspositionValidation() {
LokationsId: "54321012345",
PositionsMenge: com.Menge{
Wert: decimal.NewFromFloat(20),
Einheit: mengeneinheit.KWH,
Einheit: internal.Ptr(mengeneinheit.KWH),
},
Einzelpreis: com.Preis{
Wert: decimal.NewFromFloat(12),
Expand Down
13 changes: 7 additions & 6 deletions com/vertragsteil_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/go-playground/validator/v10"
"github.com/hochfrequenz/go-bo4e/com"
"github.com/hochfrequenz/go-bo4e/enum/mengeneinheit"
"github.com/hochfrequenz/go-bo4e/internal"
"github.com/shopspring/decimal"
"strings"
"time"
Expand All @@ -20,15 +21,15 @@ func (s *Suite) Test_Vertragsteil_Deserialization() {
Lokation: "DE0123456789012345678901234567890",
VertraglichFixierteMenge: &com.Menge{
Wert: decimal.NewFromFloat(42),
Einheit: mengeneinheit.KUBIKMETER,
Einheit: internal.Ptr(mengeneinheit.KUBIKMETER),
},
MinimaleAbnahmemenge: &com.Menge{
Wert: decimal.NewFromFloat(17),
Einheit: mengeneinheit.MW,
Einheit: internal.Ptr(mengeneinheit.MW),
},
MaximaleAbnahmemenge: &com.Menge{
Wert: decimal.NewFromFloat(-3),
Einheit: mengeneinheit.MONAT,
Einheit: internal.Ptr(mengeneinheit.MONAT),
},
}
serializedVertragsteil, err := json.Marshal(vertraqsteil)
Expand Down Expand Up @@ -97,15 +98,15 @@ func (s *Suite) Test_Successful_Vertragsteil_Validation() {
Lokation: "DE0123456789012345678901234567890",
VertraglichFixierteMenge: &com.Menge{
Wert: decimal.NewFromFloat(42),
Einheit: mengeneinheit.KUBIKMETER,
Einheit: internal.Ptr(mengeneinheit.KUBIKMETER),
},
MinimaleAbnahmemenge: &com.Menge{
Wert: decimal.NewFromFloat(17),
Einheit: mengeneinheit.MW,
Einheit: internal.Ptr(mengeneinheit.MW),
},
MaximaleAbnahmemenge: &com.Menge{
Wert: decimal.NewFromFloat(-3),
Einheit: mengeneinheit.MONAT,
Einheit: internal.Ptr(mengeneinheit.MONAT),
},
},
com.Vertragsteil{
Expand Down

0 comments on commit dcabf6d

Please sign in to comment.