Microservice-Architektur für Bilanzkreisverwaltung

Die Bilanzkreisverwaltung ist als Microservice-Architektur implementiert und basiert auf dem Moleculer Framework. Die Kernfunktionalität verteilt sich auf drei Hauptservices: Balance Group (Bilanzkreis), Transaction (Transaktion) und Settlement (Ausgleich). Jeder Service ist für einen spezifischen Geschäftsbereich zuständig und kommuniziert über definierte Schnittstellen mit den anderen Services.

Balance Group Service

Der Balance Group Service verwaltet die Bilanzkreise im System. Ein Bilanzkreis repräsentiert eine energiewirtschaftliche Einheit, für die Strommengen bilanziert werden.

Hauptfunktionen:

  • Erstellen neuer Bilanzkreise
  • Verwalten von Bilanzkreis-Hierarchien
  • Finalisieren von Bilanzkreisen
  • Abfragen von Bilanzkreis-Informationen
// Beispiel: Erstellen eines Bilanzkreises
await broker.call("balance-group.create", {
    name: "Hauptbilanzkreis",
    startTime: new Date("2024-01-01T00:00:00Z"),
    endTime: new Date("2024-12-31T23:59:59Z"),
    tenantId: "tenant-123",
    settlementRule: "parent-balance-group-id"
});

Wichtige Eigenschaften:

  • Mandantenfähigkeit (tenantId)
  • Zeitliche Gültigkeit (startTime, endTime)
  • Status-Management (provisional, final)
  • Hierarchische Struktur durch Settlement Rules

Transaction Service

Der Transaction Service verwaltet die Energiemengen-Transaktionen zwischen Bilanzkreisen. Jede Transaktion repräsentiert eine Energiemenge, die von einem Bilanzkreis zu einem anderen übertragen wird.

Hauptfunktionen:

  • Erstellen von Transaktionen
  • Validierung der Bilanzkreis-Zugehörigkeit
  • Zeitintervall-basierte Energiemengen-Verteilung
  • Finalisierung von Transaktionen
// Beispiel: Erstellen einer Transaktion
await broker.call("transaction.create", {
    name: "Energielieferung",
    sourceId: "source-balance-group-id",
    destinationId: "destination-balance-group-id",
    startTime: new Date("2024-01-01T00:00:00Z"),
    endTime: new Date("2024-01-01T00:15:00Z"),
    energyAmount: 1000,
    tenantId: "tenant-123"
});

Besonderheiten:

  • Automatische 15-Minuten-Intervall-Aufteilung
  • Status-Management (provisional, final)
  • Mandanten-Isolation
  • Event-basierte Kommunikation für Finalisierung

Settlement Service

Der Settlement Service ist für die Ausgleichsbuchungen verantwortlich. Er berechnet und verwaltet die Ausgleichsmengen basierend auf den Transaktionen und Settlement Rules der Bilanzkreise.

Hauptfunktionen:

  • Berechnung von Ausgleichsbuchungen
  • Intervall-basierte Bilanzierung
  • Finalisierung von Settlements
  • Bilanzsummen-Berechnung
// Beispiel: Berechnung von Settlements für eine Transaktion
await broker.call("settlement.calculateSettlement", {
    transactionId: "transaction-id",
    tenantId: "tenant-123"
});

Besonderheiten:

  • Automatische Settlement-Generierung bei Transaktionen
  • 15-Minuten-Intervall-Tracking
  • Bilanzkreis-übergreifende Ausgleichsberechnung
  • Event-basierte Finalisierung

Testabdeckung

Die Implementierung wird durch umfangreiche Tests abgesichert, die sowohl Unit- als auch Integrationstests umfassen.

Balance Group Tests

describe("Balance Group Service Tests", () => {
    // CRUD Operationen
    it("should create a balance group successfully");
    it("should retrieve a balance group by id");
    it("should list all balance groups for a tenant");
    it("should close a balance group");

    // Validierungen
    it("should fail when end time is before start time");
    it("should fail with invalid tenant id");
});

Transaction Tests

describe("Transaction Service Tests", () => {
    // CRUD Operationen
    it("should create a transaction successfully");
    it("should get a transaction by id");
    it("should list transactions for a tenant");
    it("should finalize a transaction");

    // Validierungen
    it("should fail with invalid time range");
    it("should fail with negative energy amount");
});

Settlement Tests

describe("Settlement Service Tests", () => {
    // Settlement Berechnung
    it("should create settlements for a new transaction");
    it("should handle 15-minute intervals correctly");
    
    // Finalisierung
    it("should finalize settlements with transaction");
    
    // Bilanzierung
    it("should calculate settlement balance for a period");
    
    // Validierungen
    it("should prevent settlement calculation for invalid tenant");
    it("should prevent calculation for finalized transaction");
});

Event-basierte Kommunikation

Die Services kommunizieren über Events miteinander, was eine lose Kopplung ermöglicht:

// Event-Handler im Settlement Service
events: {
    "transaction.finalized": {
        async handler(ctx) {
            await this.actions.finalizeSettlement(ctx.params);
        }
    }
}

Fazit

Die microservice-basierte Implementierung der Bilanzkreisverwaltung ermöglicht eine flexible und skalierbare Lösung. Die klare Trennung der Verantwortlichkeiten in separate Services vereinfacht die Wartung und Erweiterung des Systems. Die umfangreiche Testabdeckung stellt sicher, dass das System zuverlässig funktioniert und Änderungen sicher durchgeführt werden können.

Die Verwendung des Moleculer Frameworks bietet dabei:

  • Einfache Service-Discovery
  • Integrierte Event-Kommunikation
  • Robuste Fehlerbehandlung
  • Flexible Skalierbarkeit

Durch die mandantenfähige Implementierung und die strikte Trennung der Daten ist das System auch für Multi-Tenant-Szenarien geeignet.