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.