bo

package
v0.0.14 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2021 License: MIT Imports: 25 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RechnungStructLevelValidation added in v0.0.9

func RechnungStructLevelValidation(sl validator.StructLevel)

RechnungStructLevelValidation combines all the single validators

func RechnungStructLevelValidationGesamtBrutto added in v0.0.9

func RechnungStructLevelValidationGesamtBrutto(sl validator.StructLevel)

RechnungStructLevelValidationGesamtBrutto verifies that the sum of all Rechnungsposition. equals the Rechnung.GesamtBrutto

func RechnungStructLevelValidationGesamtNetto added in v0.0.9

func RechnungStructLevelValidationGesamtNetto(sl validator.StructLevel)

RechnungStructLevelValidationGesamtNetto verifies that the sum of all Rechnungsposition.Netto equals the Rechnung.GesamtNetto

func RechnungStructLevelValidationGesamtSteuer added in v0.0.9

func RechnungStructLevelValidationGesamtSteuer(sl validator.StructLevel)

RechnungStructLevelValidationGesamtSteuer verifies that the sum of all Rechnungsposition.Netto equals the Rechnung.GesamtSteuer

func RechnungStructLevelValidationZuZahlen added in v0.0.9

func RechnungStructLevelValidationZuZahlen(sl validator.StructLevel)

RechnungStructLevelValidationZuZahlen verifies that Rechnung.Zuzahlen = Rechnung.GesamtBrutto - Rechnung.Vorausgezahlt - Rechnung.RabattBrutto

Types

type BusinessObject

type BusinessObject interface {
	// GetBoTyp returns the Geschaeftsobjekt.BoTyp
	GetBoTyp() botyp.BOTyp
	// GetVersionStruktur returns the Geschaeftsobjekt.VersionStruktur
	GetVersionStruktur() string
}

BusinessObject is the interface that all Business Objects implement.

func NewBusinessObject added in v0.0.13

func NewBusinessObject(typ botyp.BOTyp) BusinessObject

NewBusinessObject creates an empty BusinessObject based on the provided type; Returns nil if the type is not implemented.

type BusinessObjectSlice added in v0.0.13

type BusinessObjectSlice []BusinessObject

BusinessObjectSlice is a slice that contains 0-n BusinessObject s

func (*BusinessObjectSlice) UnmarshalJSON added in v0.0.13

func (boSlice *BusinessObjectSlice) UnmarshalJSON(data []byte) error

type Energiemenge added in v0.0.4

type Energiemenge struct {
	Geschaeftsobjekt
	LokationsId  string                    `json:"lokationsId" example:"DE0123456789012345678901234567890" validate:"alphanum,required,min=11,max=33"` // ID of the location (either a LokationsTyp MALO ID (11 digits) or a LokationsTyp MELO ID (33 alphanum))
	LokationsTyp lokationstyp.Lokationstyp `json:"lokationsTyp" example:"MELO" validate:"required"`                                                    // type of the location in LokationsId
	Verbrauch    []com.Verbrauch           `json:"energieverbrauch" validate:"required,min=1"`                                                         // consumption data (see Verbrauch)
}

Energiemenge contains information about consumption at a location

type Geschaeftsobjekt added in v0.0.13

type Geschaeftsobjekt struct {
	BoTyp             botyp.BOTyp           `json:"boTyp" validate:"required"`           // type of business object, may be used as discriminator
	VersionStruktur   string                `json:"versionStruktur" validate:"required"` // version of BO4E used
	ExterneReferenzen []com.ExterneReferenz `json:"externeReferenzen"`                   // external references of this object in various systems
}

Geschaeftsobjekt is the common base struct of all Business Objects

func (Geschaeftsobjekt) GetBoTyp added in v0.0.13

func (gob Geschaeftsobjekt) GetBoTyp() botyp.BOTyp

func (Geschaeftsobjekt) GetVersionStruktur added in v0.0.13

func (gob Geschaeftsobjekt) GetVersionStruktur() string

type Geschaeftspartner added in v0.0.5

type Geschaeftspartner struct {
	Geschaeftsobjekt
	Anrede                  anrede.Anrede                                   `json:"anrede"`                                                                         // Die Anrede für den GePa, Z.B. HERR
	Name1                   string                                          `json:"name1" validate:"required" example:"Yellow Strom GmbH,Hagen"`                    // Erster Teil des Namens. Hier kann der Firmenname oder bei Privatpersonen beispielsweise der Nachname dargestellt werden.
	Name2                   string                                          `json:"name2,omitempty" example:"'Bereich Süd','Nina'"`                                 // Zweiter Teil des Namens. Hier kann der eine Erweiterung zum Firmennamen oder bei Privatpersonen beispielsweise der Vorname dargestellt werden.
	Name3                   string                                          `json:"name3,omitempty" example:"Afrika,Sängerin"`                                      // Hier können weitere Ergänzungen zum Firmennamen oder bei Privatpersonen Zusätze zum Namen dargestellt werden
	Gewerbekennzeichnung    bool                                            `json:"gewerbekennzeichnung" validate:"omitempty,required"`                             // Kennzeichnung, ob es sich um einen Gewerbe/Unternehmen (true) oder eine Privatperson handelt (false)
	HrNummer                string                                          `json:"hrnummer,omitempty"`                                                             // Handelsregisternummer des Geschäftspartners
	Amtsgericht             string                                          `json:"amtsgericht,omitempty"`                                                          // Amtsgericht bzw Handelsregistergericht, das die Handelsregisternummer herausgegeben hat
	Kontaktweg              kontaktart.Kontaktart                           `json:"kontaktweg,omitempty"`                                                           // Bevorzugter Kontaktweg des Geschäftspartners.
	UmsatzsteuerId          string                                          `json:"umsatzsteuerId,omitempty" example:"DE 813281825"`                                // Die Steuer-ID des Geschäftspartners
	GlaeubigerId            string                                          `json:"glaeubigerId,omitempty" example:"DE 47116789"`                                   // Die Gläubiger-ID welche im Zahlungsverkehr verwendet wird
	EMailAdresse            string                                          `json:"eMailAdresse,omitempty" validate:"omitempty,email" example:"info@mp-energie.de"` // E-Mail-Adresse des Ansprechpartners
	Website                 string                                          `json:"website,omitempty" validate:"omitempty,url" example:"https://www.mp-energie.de"` // Internetseite des Marktpartners
	Geschaeftspartnerrollen []geschaeftspartnerrolle.Geschaeftspartnerrolle `json:"geschaeftspartnerrollen" validate:"required,min=1"`                              // Rollen die der Geschäftspartner hat
	Partneradresse          com.Adresse                                     `json:"partneradresse" validate:"required"`                                             // Adresse des Geschäftspartners, an der sich der Hauptsitz befindet.
}

Geschaeftspartner models business partners, both companies and private persons.

type Lastgang added in v0.0.4

type Lastgang struct {
	Geschaeftsobjekt
	Sparte       sparte.Sparte               `json:"sparte" example:"STROM" validate:"required"`                                                         // Angabe, ob es sich um einen GAS- oder STROM-Lastgang handelt
	Version      string                      `json:"version,omitempty" validate:"alphanum"`                                                              // Versionsnummer des Lastgangs
	LokationsId  string                      `json:"lokationsId" example:"DE0123456789012345678901234567890" validate:"alphanum,required,min=11,max=33"` // ID of the location (either a LokationsTyp MALO ID (11 digits) or a LokationsTyp MELO ID (33 alphanum))
	LokationsTyp lokationstyp.Lokationstyp   `json:"lokationsTyp" example:"MELO" validate:"required"`                                                    // type of the location in LokationsId
	Messgroesse  mengeneinheit.Mengeneinheit `json:"einheit,omitempty" validate:"required" example:"KWH"`                                                // Definition der gemessenen Größe anhand ihrer Einheit.
	Obiskennzahl string                      `json:"obiskennzahl,omitempty" example:"1-0:1.8.1"`                                                         // Genormte OBIS-Kennzahl zur Kennzeichnung der Messgröße
	Werte        []com.Zeitreihenwert        `json:"energieverbrauch" validate:"required,min=1"`                                                         // Die im Lastgang enthaltenen Messwerte.
}

Lastgang ist ein Modell zur Abbildung eines Lastganges. In diesem Modell werden die Messwerte mit einem vollständigen Zeitintervall angegeben und es bietet daher eine hohe Flexibilität in der Übertragung jeglicher zeitlich veränderlicher Messgrössen.

type Marktteilnehmer added in v0.0.13

type Marktteilnehmer struct {
	Geschaeftspartner
	Marktrolle       marktrolle.Marktrolle       `json:"marktrolle" validate:"required"`                             // Gibt im Klartext die Bezeichnung der Marktrolle an. Details siehe ENUM Marktrolle
	Rollencodenummer string                      `json:"rollencodenummer" validate:"required,numeric,min=13,max=13"` // Gibt die Codenummer der Marktrolle an (13 digits)
	Rollencodetyp    rollencodetyp.Rollencodetyp `json:"rollencodetyp" validate:"required"`                          // Gibt den Typ des Codes an/Vergabestelle. Details siehe ENUM Rollencodetyp
	Makoadresse      string                      `json:"makoadresse,omitempty" validate:"omitempty"`                 // Die 1:1-Kommunikationsadresse des Marktteilnehmers. Diese wird in der Marktkommunikation verwendet.
}

Marktteilnehmer models participants of the German energy market

type Messlokation

type Messlokation struct {
	Geschaeftsobjekt
	MesslokationsId              string              `json:"messlokationsId" example:"DE0123456789012345678901234567890" validate:"alphanum,required,len=33"` // ID of the metering location
	Sparte                       sparte.Sparte       `json:"sparte" validate:"required"`                                                                      // division
	NetzebeneMessung             netzebene.Netzebene `json:"netzebeneMessung,omitempty"`                                                                      // grid level of measurement
	MessgebietNr                 string              `json:"messgebietNr,omitempty"`                                                                          // number of the measurement area in ene't database
	Gerate                       []com.Hardware      `json:"geraete,omitempty"`                                                                               // list of devices
	Messdienstleistung           *com.Dienstleistung `json:"messdienstleistung,omitempty"`                                                                    // list of metering services
	GrundzustaendigerMsbCodeNr   string              `json:"grundzustaendigerMSBCodeNr,omitempty" validate:"omitempty,numeric"`                               // Code number of the "grundzuständige Messstellenbetreiber", responsitble for this MeLo
	GrundzustaendigerMsbImCodeNr string              `json:"GrundzustaendigerMsbImCodeNr,omitempty" validate:"omitempty,numeric"`                             // Code number of the "grundzuständige Messsstellenbetreiber", responsible for intelligent meters at this MeLo
	Messlokationszaehler         []Zaehler           `json:"messlokationszaehler,omitempty"`                                                                  // meters associated to this Messlokation
	// only one of the following three optional address attributes can be set
	Messadresse         *com.Adresse         `json:"messadresse" validate:"required_without_all=Geoadresse KatasterInformation"` // address of the melo
	Geoadresse          *com.Geokoordinaten  `json:"geoadresse" validate:"required_without_all=Messadresse KatasterInformation"` // gps coordinates
	Katasterinformation *com.Katasteradresse `json:"katasterinformation" validate:"required_without_all=Messadresse Geoadresse"` // cadastre address
}

Messlokation contains information about a metering location aka "MeLo"

type Netznutzungsrechnung added in v0.0.12

type Netznutzungsrechnung struct {
	Rechnung
	Sparte               sparte.Sparte                 `json:"sparte" validate:"required"`                                        // Sparte (STROM, GAS ...) für die die Rechnung ausgestellt ist
	Absendercodenummer   string                        `json:"absendercodenummer" validate:"required,numeric,min=13,max=13"`      // Absendercodenummer ist die Rollencodenummer des Absenders (Rechnung.Rechnungsersteller). Über die Nummer können weitere Informationen zum Marktteilnehmer ermittelt werden.
	Empfaengercodenummer string                        `json:"empfaengercodenummer" validate:"required,numeric,min=13,max=13"`    // Absendercodenummer ist die Rollencodenummer des Empfängers (Rechnung.Rechnungsempfaenger). Über die Nummer können weitere Informationen zum Marktteilnehmer ermittelt werden.
	Nnrechnungsart       nnrechnungsart.NNRechnungsart `json:"nnrechnungsart" validate:"required"`                                // Aus der INVOIC entnommen
	Nnrechnungstyp       nnrechnungstyp.NNRechnungstyp `json:"nnrechnungstyp" validate:"required"`                                // Aus der INVOIC entnommen
	Original             bool                          `json:"original"`                                                          // Original ist ein Kennzeichen, ob es sich um ein Original (true) oder eine Kopie handelt (false).
	Simuliert            bool                          `json:"simuliert"`                                                         // Simuliert ist ein Kennzeichen, ob es sich um eine simulierte Rechnung, z.B. zur Rechnungsprüfung handelt.
	LokationsId          string                        `json:"lokationsId,omitempty" validate:"omitempty,alphanum,max=33,min=11"` // LokationsId ist die Markt- oder Messlokations-Identifikation (als Malo/Melo-Id) der Lokation, auf die sich die Rechnung bezieht.
}

Netznutzungsrechnung models grid usage invoices

type Rechnung added in v0.0.9

type Rechnung struct {
	Geschaeftsobjekt
	Rechnungstitel          string                          `json:"rechnungstitel"`                                             // Bezeichnung für die vorliegende Rechnung.
	Rechnungsstatus         rechnungsstatus.Rechnungsstatus `json:"rechnungsstatus"`                                            // Status der Rechnung zur Kennzeichnung des Bearbeitungsstandes
	Storno                  bool                            `json:"storno" validate:"required"`                                 // Kennzeichnung, ob es sich um eine Stornorechnung handelt. Im Falle "true" findet sich im Attribut "originalrechnungsnummer" die Nummer der Originalrechnung
	Rechnungsnummer         string                          `json:"rechnungsnummer" validate:"required"`                        // Eine im Verwendungskontext eindeutige Nummer für die Rechnung
	Rechnungsdatum          time.Time                       `json:"rechnungsdatum" validate:"required"`                         // Ausstellungsdatum der Rechnung
	Faelligkeitsdatum       time.Time                       `json:"faelligkeitsdatum" validate:"required"`                      // Zu diesem Datum ist die Zahlung fällig
	Rechnungstyp            rechnungstyp.Rechnungstyp       `json:"rechnungstyp" validate:"required"`                           // Ein kontextbezogener Rechnungstyp
	OriginalRechnungsnummer string                          `json:"originalRechnungsnummer" validate:"required_if=Storno true"` // Im Falle einer Stornorechnung (Storno = true) steht hier die Rechnungsnummer der stornierten Rechnung
	Rechnungsperiode        com.Zeitraum                    `json:"rechnungsperiode" validate:"required"`                       // Der Zeitraum der zugrunde liegenden Lieferung zur Rechnung
	Rechnungsersteller      Geschaeftspartner               `json:"rechnungsersteller" validate:"required"`                     // Der Aussteller der Rechnung
	Rechnungsempfaenger     Geschaeftspartner               `json:"rechnungsempfaenger" validate:"required"`                    // Der Empfänger der Rechnung
	GesamtNetto             com.Betrag                      `json:"gesamtnetto" validate:"required"`                            // Die Summe der Nettobeträge der Rechnungsteile
	GesamtSteuer            com.Betrag                      `json:"gesamtsteuer" validate:"required"`                           // Die Summe der Steuerbeträge der Rechnungsteile
	GesamtBrutto            com.Betrag                      `json:"gesamtbrutto" validate:"required"`                           // Die Summe aus Netto- und Steuerbeträge
	Vorausgezahlt           *com.Betrag                     `json:"vorausgezahlt"`                                              // Die Summe evtl. vorausbezahlter Beträge, z.B. Abschläge. Angabe als Bruttowert.
	RabattBrutto            *com.Betrag                     `json:"rabattBrutto"`                                               // Gesamtrabatt auf den Bruttobetrag
	Zuzahlen                com.Betrag                      `json:"zuzahlen" validate:"required"`                               // Der zu zahlende Betrag, der sich aus (gesamtbrutto - vorausbezahlt - rabattBrutto) ergibt
	Steuerbetraege          []com.Steuerbetrag              `json:"steuerbetraege"`                                             // Eine Liste mit Steuerbeträgen pro Steuerkennzeichen/Steuersatz. Die Summe dieser Beträge ergibt den Wert für GesamtSteuer
	Rechnungspositionen     []com.Rechnungsposition         `json:"rechnungspositionen" validate:"required,min=1"`              // Die Rechnungspositionen
}

Rechnung ist ein Modell für die Abbildung von Rechnungen im Kontext der Energiewirtschaft. Ausgehend von diesem Basismodell werden weitere spezifische Formen abgeleitet.

type Vertrag added in v0.0.5

type Vertrag struct {
	Geschaeftsobjekt
	Vertragsnummer      string                        `json:"vertragsnummer" validate:"alphanum,required"`         // Eine im Verwendungskontext eindeutige Nummer für den Vertrag
	Beschreibung        string                        `json:"beschreibung,omitempty"`                              // Beschreibung zum Vertrag
	Vertragsstatus      vertragsstatus.Vertragsstatus `json:"vertragsstatus" validate:"required"`                  // Gibt den Status des Vertrags an
	Vertragsart         vertragsart.Vertragsart       `json:"vertragsart" validate:"required"`                     // Hier ist festgelegt, um welche Art von Vertrag es sich handelt. Z.B. Netznutzungvertrag.
	Sparte              sparte.Sparte                 `json:"sparte" validate:"required"`                          // Unterscheidungsmöglichkeiten für die Sparte
	Vertragsbeginn      time.Time                     `json:"startdatum" validate:"required"`                      // inclusive start
	Vertragsende        time.Time                     `json:"enddatum" validate:"required,gtfield=Vertragsbeginn"` // exclusive end
	Vertragspartner1    Geschaeftspartner             `json:"vertragspartner1" validate:"required"`                // Der "erstgenannte" Vertragspartner. In der Regel der Aussteller des Vertrags. Beispiel: "Vertrag zwischen Vertragspartner 1 ..."
	Vertragspartner2    Geschaeftspartner             `json:"vertragspartner2" validate:"required"`                // Der "zweitgenannte" Vertragspartner. In der Regel der Empfänger des Vertrags. Beispiel "Vertrag zwischen Vertragspartner 1 und Vertragspartner 2"
	UnterzeichnerVp1    []com.Unterschrift            `json:"unterzeichnervp1,omitempty"`                          // Unterzeichner des Vertragspartner1
	UnterzeichnerVp2    []com.Unterschrift            `json:"unterzeichnervp2,omitempty"`                          // Unterzeichner des Vertragspartner2
	Vertragskonditionen *com.Vertragskonditionen      `json:"vertragskonditionen,omitempty"`                       // Festlegungen zu Laufzeiten und Kündigungsfristen
	Vertragsteile       []com.Vertragsteil            `json:"vertragsteile" validate:"required,min=1"`             // Der Vertragsteil wird dazu verwendet, eine vertragliche Leistung in Bezug zu einer Lokation (Markt- oder Messlokation) festzulegen.
}

Vertrag ist ein Modell für die Abbildung von Vertragsbeziehungen. Das Objekt dient dazu, alle Arten von Verträgen, die in der Energiewirtschaft Verwendung finden, abzubilden.

type Zaehler added in v0.0.7

type Zaehler struct {
	Geschaeftsobjekt
	Zaehlernummer      string                                `json:"zahlernummer" validate:"required,alphanum"` // Nummerierung des Zaehlers, vergeben durch den Messstellenbetreiber
	Sparte             sparte.Sparte                         `json:"sparte" validate:"required"`                // Unterscheidungsmöglichkeiten für die Sparte
	Zaehlerauspraegung zaehlerauspraegung.Zaehlerauspraegung `json:"zaehlerauspraegung" validate:"required"`    // Spezifikation die Richtung des Zählers betreffend
	Zaehlertyp         zaehlertyp.Zaehlertyp                 `json:"zaehlertyp" validate:"required"`            // Typisierung des Zählers
	Tarifart           tarifart.Tarifart                     `json:"tarifart" validate:"required"`              // Spezifikation bezüglich unterstützter Tarifarten
	Zaehlerkonstante   decimal.NullDecimal                   `json:"zaehlerkonstante,omitempty"`                // Zählerkonstante auf dem Zähler
	EichungBis         time.Time                             `json:"eichungBis,omitempty"`                      // Bis zu diesem Datum ist der Zähler geeicht
	LetzteEichung      time.Time                             `json:"letzteEichung,omitempty"`                   // Zu diesem Datum fand die letzte Eichprüfung des Zählers statt
	Zaehlwerke         []com.Zaehlwerk                       `json:"zaehlwerke" validate:"required,min=1"`      // Die Zählwerke des Zählers
	Zaehlerhersteller  *Geschaeftspartner                    `json:"zaehlerhersteller,omitempty"`               // Der Hersteller des Zählers
}

Zaehler ist ein Modell für die Abbildung der Informationen zu einem Zähler

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL