-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Summenzeitreihe and Mabis-Zaehlpunkt (#425)
- Loading branch information
1 parent
155173c
commit 4655094
Showing
24 changed files
with
5,664 additions
and
1,160 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
using BO4E.COM; | ||
using BO4E.ENUM; | ||
using BO4E.meta; | ||
|
||
using Newtonsoft.Json; | ||
|
||
using ProtoBuf; | ||
|
||
using System; | ||
using System.Collections.Generic; | ||
using System.ComponentModel; | ||
using System.Text.Json.Serialization; | ||
using System.Text.RegularExpressions; | ||
|
||
namespace BO4E.BO | ||
{ | ||
|
||
/// Objekt zur Aufnahme der Informationen zu einem MabisZaehlpunkt. | ||
[ProtoContract] | ||
public class MabisZaehlpunkt : BusinessObject | ||
{ | ||
[Newtonsoft.Json.JsonIgnore] | ||
[System.Text.Json.Serialization.JsonIgnore] | ||
private static readonly Regex RegexValidate = new(@"[A-Z\d]{33}", RegexOptions.Compiled); | ||
|
||
/// <summary> | ||
/// Die MABIS-Zaehlpunktbezeichnung, | ||
/// z.B. DE 47108151234567 | ||
/// </summary> | ||
[DefaultValue("|null|")] | ||
[JsonProperty(PropertyName = "Id", Required = Required.Always, Order = 10)] | ||
[JsonPropertyName("Id")] | ||
[JsonPropertyOrder(10)] | ||
[DataCategory(DataCategory.POD)] | ||
[BoKey] | ||
[ProtoMember(4)] | ||
public string Id { get; set; } | ||
|
||
|
||
/// <summary> | ||
/// Test if a <paramref name="id" /> is a valid messlokations ID. | ||
/// </summary> | ||
/// <param name="id">id to test</param> | ||
/// <returns></returns> | ||
public static bool ValidateId(string id) | ||
{ | ||
return !string.IsNullOrWhiteSpace(id) && RegexValidate.IsMatch(id); | ||
} | ||
|
||
/// <summary> | ||
/// Test if the <see cref="MabisZaehlpunkt" /> is valid. | ||
/// </summary> | ||
/// <returns>if id matches the expected format</returns> | ||
public bool HasValidId() | ||
{ | ||
return ValidateId(Id); | ||
} | ||
|
||
/// <summary> | ||
/// same as <see cref="BusinessObject.IsValid()" /> if <paramref name="checkId" /> is false but by default additionally | ||
/// checks if the <see cref="MabisZaehlpunkt" /> is valid using <see cref="HasValidId" />. | ||
/// </summary> | ||
/// <param name="checkId">validate the <see cref="MabisZaehlpunkt" />, too</param> | ||
/// <returns>true if the zaehlpunkt is valid</returns> | ||
public bool IsValid(bool checkId = true) | ||
{ | ||
return base.IsValid() && (!checkId || HasValidId()); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
using BO4E.COM; | ||
using BO4E.EnergyIdentificationCodes; | ||
using BO4E.ENUM; | ||
using BO4E.meta; | ||
|
||
using Newtonsoft.Json; | ||
|
||
using ProtoBuf; | ||
|
||
using System; | ||
using System.Collections.Generic; | ||
using System.Text.Json.Serialization; | ||
|
||
namespace BO4E.BO | ||
{ | ||
/// <summary> | ||
/// Summenzeitreihen BO | ||
/// </summary> | ||
[ProtoContract] | ||
[NonOfficial(NonOfficialCategory.MISSING)] | ||
public class Summenzeitreihe : BusinessObject | ||
{ | ||
/// <summary> | ||
/// Für welchen MABIS-Zaehlpuunkt gelten diese Summenzeitreihendaten | ||
/// </summary> | ||
[JsonProperty(PropertyName = "zaehlpunktId", Required = Required.Default, Order = 10)] | ||
[JsonPropertyName("zaehlpunktId")] | ||
[JsonPropertyOrder(10)] | ||
[NonOfficial(NonOfficialCategory.MISSING)] | ||
[ProtoMember(1000)] | ||
[BoKey] | ||
public string? ZaehlpunktId { get; set; } | ||
|
||
/// <summary> | ||
/// Inklusiver Start der Bilanzierung | ||
/// </summary> | ||
[System.Text.Json.Serialization.JsonIgnore] | ||
[Newtonsoft.Json.JsonIgnore] | ||
[ProtoMember(1002, Name = nameof(Bilanzierungsbeginn))] | ||
[CompatibilityLevel(CompatibilityLevel.Level240)] | ||
private DateTime _Bilanzierungsbeginn | ||
{ | ||
get => Bilanzierungsbeginn?.UtcDateTime ?? DateTime.MinValue; | ||
set => Bilanzierungsbeginn = DateTime.SpecifyKind(value, DateTimeKind.Utc); | ||
} | ||
/// <summary> | ||
/// Inklusiver Start der Bilanzierung | ||
/// </summary> | ||
[JsonProperty(PropertyName = "bilanzierungsbeginn", Required = Required.Default, Order = 12)] | ||
[JsonPropertyName("bilanzierungsbeginn")] | ||
[JsonPropertyOrder(12)] | ||
[NonOfficial(NonOfficialCategory.MISSING)] | ||
[ProtoIgnore] | ||
public DateTimeOffset? Bilanzierungsbeginn { get; set; } | ||
|
||
|
||
/// <summary> | ||
/// Exklusives Ende der Bilanzierung | ||
/// </summary> | ||
[System.Text.Json.Serialization.JsonIgnore] | ||
[Newtonsoft.Json.JsonIgnore] | ||
[ProtoMember(1003, Name = nameof(Bilanzierungsende))] | ||
[CompatibilityLevel(CompatibilityLevel.Level240)] | ||
private DateTime _Bilanzierungsende | ||
{ | ||
get => Bilanzierungsende?.UtcDateTime ?? DateTime.MinValue; | ||
set => Bilanzierungsende = DateTime.SpecifyKind(value, DateTimeKind.Utc); | ||
} | ||
/// <summary> | ||
/// Exklusives Ende der Bilanzierung | ||
/// </summary> | ||
[JsonProperty(PropertyName = "bilanzierungsende", Required = Required.Default, Order = 13)] | ||
[JsonPropertyName("bilanzierungsende")] | ||
[JsonPropertyOrder(13)] | ||
[NonOfficial(NonOfficialCategory.MISSING)] | ||
[ProtoIgnore] | ||
public DateTimeOffset? Bilanzierungsende { get; set; } | ||
|
||
/// <summary> | ||
/// Bilanzkreis, should obey <see cref="EnergyIdentificationCodeExtensions.IsValidEIC"/> | ||
/// </summary> | ||
[JsonProperty(PropertyName = "bilanzkreis", Required = Required.Default, Order = 14)] | ||
[JsonPropertyName("bilanzkreis")] | ||
[JsonPropertyOrder(14)] | ||
[NonOfficial(NonOfficialCategory.MISSING)] | ||
[ProtoMember(1004)] | ||
[BoKey] | ||
public string? Bilanzkreis { get; set; } | ||
|
||
/// <summary>Bilanzierungsgebiet, dem das Netzgebiet zugeordnet ist - im Falle eines Strom Netzes.</summary> | ||
[JsonProperty(Required = Required.Default, Order = 15, PropertyName = "bilanzierungsgebiet")] | ||
[JsonPropertyOrder(15)] | ||
[JsonPropertyName("bilanzierungsgebiet")] | ||
[ProtoMember(1005)] | ||
public string? Bilanzierungsgebiet { get; set; } | ||
|
||
/// <summary> | ||
/// Regelzone | ||
/// </summary> | ||
[JsonProperty(Required = Required.Default, Order = 16, PropertyName = "regelzone")] | ||
[JsonPropertyName("regelzone")] | ||
[JsonPropertyOrder(16)] | ||
[ProtoMember(1006)] | ||
[NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] | ||
public string? Regelzone { get; set; } | ||
|
||
/// <summary> | ||
/// Bezeichnung | ||
/// </summary> | ||
[JsonProperty(Required = Required.Default, Order = 17, PropertyName = "bezeichnung")] | ||
[JsonPropertyName("bezeichnung")] | ||
[JsonPropertyOrder(17)] | ||
[ProtoMember(1007)] | ||
[NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] | ||
public BezeichnungSummenzeitreihe? Bezeichnung { get; set; } | ||
|
||
/// <summary> | ||
/// Bezugszeitraum (TAG,MONAT) | ||
/// </summary> | ||
[JsonProperty(Required = Required.Default, Order = 18, PropertyName = "bezugszeitraum")] | ||
[JsonPropertyName("bezugszeitraum")] | ||
[JsonPropertyOrder(18)] | ||
[ProtoMember(1008)] | ||
[NonOfficial(NonOfficialCategory.CUSTOMER_REQUIREMENTS)] | ||
public Zeiteinheit? Bezugszeitraum { get; set; } | ||
|
||
/// <summary> | ||
/// Zeitreihentyp (SLS, TLS, etc.) | ||
/// </summary> | ||
[JsonProperty(PropertyName = "zeitreihentyp", Required = Required.Default, Order = 19)] | ||
[JsonPropertyName("zeitreihentyp")] | ||
[JsonPropertyOrder(19)] | ||
[NonOfficial(NonOfficialCategory.MISSING)] | ||
[ProtoMember(1019)] | ||
public Zeitreihentyp? Zeitreihentyp { get; set; } | ||
|
||
/// <summary> | ||
/// Verantwortliche Marktrolle | ||
/// </summary> | ||
[JsonProperty(PropertyName = "marktrolle", Required = Required.Default, Order = 20)] | ||
[JsonPropertyName("marktrolle")] | ||
[JsonPropertyOrder(20)] | ||
[NonOfficial(NonOfficialCategory.MISSING)] | ||
[ProtoMember(1020)] | ||
public ENUM.Marktrolle? Marktrolle { get; set; } | ||
|
||
/// <summary> | ||
/// Spannungsebene | ||
/// </summary> | ||
[JsonProperty(PropertyName = "spannungsebene", Required = Required.Default, Order = 21)] | ||
[JsonPropertyName("spannungsebene")] | ||
[JsonPropertyOrder(21)] | ||
[NonOfficial(NonOfficialCategory.MISSING)] | ||
[ProtoMember(1021)] | ||
public Netzebene? Spannungsebene { get; set; } | ||
|
||
|
||
/// <summary> | ||
/// Produkte der Summenzeitreihe | ||
/// </summary> | ||
[JsonProperty(PropertyName = "produkte", Order = 22, Required = Required.Default)] | ||
[JsonPropertyName("produkte")] | ||
[ProtoMember(1022)] | ||
[JsonPropertyOrder(22)] | ||
public List<Zeitreihenprodukt>? Produkte { get; set; } | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
using BO4E.ENUM; | ||
using BO4E.meta; | ||
|
||
using Newtonsoft.Json; | ||
|
||
using ProtoBuf; | ||
|
||
using System; | ||
using System.Collections.Generic; | ||
using System.Text.Json.Serialization; | ||
|
||
namespace BO4E.COM | ||
{ | ||
/// <summary>Mit dieser Komponente werden Produkte von Summenzeitreihen modelliert.</summary> | ||
[ProtoContract] | ||
public class Zeitreihenprodukt : COM | ||
{ | ||
|
||
/// <summary> | ||
/// Die OBIS-Kennzahl für das Produkt, die festlegt, welche auf die gemessene Größe mit dem Stand gemeldet wird. | ||
/// </summary> | ||
[JsonProperty(PropertyName = "identifikation", Order = 6, Required = Required.Default)] | ||
[JsonPropertyName("identifikation")] | ||
[ProtoMember(6)] | ||
[JsonPropertyOrder(6)] | ||
public string? Identifikation { get; set; } | ||
|
||
/// <summary> | ||
/// Korrekturfaktor der Zeitreihe | ||
/// </summary> | ||
[JsonProperty(PropertyName = "korrekturfaktor", Order = 7, Required = Required.Default)] | ||
[JsonPropertyName("korrekturfaktor")] | ||
[ProtoMember(7)] | ||
[JsonPropertyOrder(7)] | ||
public decimal? Korrekturfaktor { get; set; } | ||
|
||
/// <summary>Der Verbrauch der Zeitreihe. Details <see cref="Verbrauch" /></summary> | ||
[JsonProperty(PropertyName = "verbrauch", Order = 8, Required = Required.Default)] | ||
[JsonPropertyName("verbrauch")] | ||
[ProtoMember(8)] | ||
[JsonPropertyOrder(8)] | ||
public Verbrauch? Verbrauch { get; set; } | ||
|
||
|
||
|
||
#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
using BO4E.meta; | ||
|
||
using ProtoBuf; | ||
|
||
using System.Runtime.Serialization; | ||
|
||
namespace BO4E.ENUM | ||
{ | ||
/// <summary>Mögliche Qualifier für die Aggregationsverantwortung</summary> | ||
[NonOfficial(NonOfficialCategory.REGULATORY_REQUIREMENTS)] | ||
public enum BezeichnungSummenzeitreihe | ||
{ | ||
/// <summary>BG-SZR Kategorie B (Z95)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(BG_SZR_B))] | ||
[EnumMember(Value = "BG_SZR_B")] | ||
BG_SZR_B, | ||
|
||
/// <summary>BG-SZR Kategorie C (Z96)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(BG_SZR_C))] | ||
[EnumMember(Value = "BG_SZR_C")] | ||
BG_SZR_C, | ||
/// <summary>BK-SZR Kategorie A (Z97)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(BK_SZR_A))] | ||
[EnumMember(Value = "BK_SZR_A")] | ||
BK_SZR_A, | ||
/// <summary>BK-SZR Kategorie B Ebene Regelzone (Z98)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(BK_SZR_B_RZ))] | ||
[EnumMember(Value = "BK_SZR_B_RZ")] | ||
BK_SZR_B_RZ, | ||
/// <summary>BK-SZR Kategorie B Ebene Bilanzierungsgebiet (Z99)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(BK_SZR_B_BG))] | ||
[EnumMember(Value = "BK_SZR_B_BG")] | ||
BK_SZR_B_BG, | ||
/// <summary>BK-SZR Kategorie C (ZA0)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(BK_SZR_C))] | ||
[EnumMember(Value = "BK_SZR_C")] | ||
BK_SZR_C, | ||
/// <summary>LF-SZR Kategorie A (ZA1)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(LF_SZR_A))] | ||
[EnumMember(Value = "LF_SZR_A")] | ||
LF_SZR_A, | ||
/// <summary>LF-SZR Kategorie B Ebene Regelzone (ZA2)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(LF_SZR_B_RZ))] | ||
[EnumMember(Value = "LF_SZR_B_RZ")] | ||
LF_SZR_B_RZ, | ||
/// <summary>LF-SZR Kategorie B Ebene Bilanzierungsgebiet (ZA3)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(LF_SZR_B_BG))] | ||
[EnumMember(Value = "LF_SZR_B_BG")] | ||
LF_SZR_B_BG, | ||
/// <summary>Deltazeitreihe (ZA4)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(DZUE))] | ||
[EnumMember(Value = "DZUE")] | ||
DZUE, | ||
/// <summary>Netzzeitreihe (ZA5)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(NZR))] | ||
[EnumMember(Value = "NZR")] | ||
NZR, | ||
/// <summary>Abrechnungssummenzeitreih (ZA6)</summary> | ||
[ProtoEnum(Name = nameof(BezeichnungSummenzeitreihe) + "_" + nameof(ASZR))] | ||
[EnumMember(Value = "ASZR")] | ||
ASZR | ||
} | ||
} |
Oops, something went wrong.