Skip to content

Commit

Permalink
Add Summenzeitreihe and Mabis-Zaehlpunkt (#425)
Browse files Browse the repository at this point in the history
  • Loading branch information
JoschaMetze authored Mar 4, 2024
1 parent 155173c commit 4655094
Show file tree
Hide file tree
Showing 24 changed files with 5,664 additions and 1,160 deletions.
2 changes: 2 additions & 0 deletions BO4E/BO/BusinessObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ namespace BO4E.BO
[ProtoInclude(29, typeof(Netzlokation))]
[ProtoInclude(30, typeof(SteuerbareRessource))]
[ProtoInclude(31, typeof(TechnischeRessource))]
[ProtoInclude(32, typeof(MabisZaehlpunkt))]
[ProtoInclude(33, typeof(Summenzeitreihe))]
public abstract class BusinessObject : IUserProperties, IOptionalGuid
{
/// <summary>
Expand Down
70 changes: 70 additions & 0 deletions BO4E/BO/MabisZaehlpunkt.cs
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());
}
}
}
168 changes: 168 additions & 0 deletions BO4E/BO/Summenzeitreihe.cs
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; }

}
}
48 changes: 48 additions & 0 deletions BO4E/COM/Zeitreihenprodukt.cs
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
}
}
63 changes: 63 additions & 0 deletions BO4E/ENUM/BezeichnungSummenzeitreihe.cs
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
}
}
Loading

0 comments on commit 4655094

Please sign in to comment.