# Sequenzdiagramm Daten Intermediär
## Definitionen
### Beispiel
Die Verwendung eines Daten Intermediärs wird anhand des folgendem Beispiels demonstriert: Eine Energiegemeinschaft stellt Stromerzeugungs- und Verbrauchsdaten via Daten Intermediär zur Verfügung. Ein Service verwendet die Daten im Intermediär, um einen Forecast zu erstellen. Sowohl die Energiegemeinschaft als auch eine Forschungseinrichtung möchten auf die Ergebnisse zugreifen.
### Stakeholder
* Energiegemeinschaft
* tritt als Datenquelle und als Datenempfänger auf
* Komponenten:
* :bust_in_silhouette: vertreten durch den Vereinsvorsitz
* :briefcase: Vereinsvorsitz hat ID Austria Zugang und ein privates Mobile SSI Wallet
* :cd: igecos Geräte fungieren als Datenquelle
* Daten Intermediär
* verwaltet Verträge zwischen den Stakeholdern
* listet verfügbare Services (führt diese aber nicht aus!)
* Komponenten:
* :bust_in_silhouette: juristische Person
* :briefcase: verwendet Online Wallet zum Speichern von Identitäten & Credentials
* :cd: Datenbank zum (Zwischen-)Speichern von Daten
* Service Anbieter
* bietet Verfahren zur Datenvearbeitung
* Komponenten:
* :bust_in_silhouette: natürliche oder juristische Person
* :briefcase: hat ID Austria Zugang und ein Mobile SSI Wallet
* :potable_water: datenverarbeitendes Service
* Forschungseinrichtung
* tritt als Datenempfänger/Datenkonsument auf
* Komponenten:
* :bust_in_silhouette: vertreten durch autorisierten Mitarbeiter
* :briefcase: hat ID Austria Zugang und ein Mobile SSI Wallet
* :cd: Datenbank zum Speichern von Daten
### Interaktionen zwischen Stakeholdern
```plantuml
@startuml
Alice -> Bob : **Data**: Datenaustausch
Alice --> Bob : **Process**: Prozessebene (Aktion)
Alice -[#red]->> Bob : **Legal**: rechtliche Vereinbarung
```
## Sequenzdiagramm
### Datenaustausch ohne Persistierung der Daten
```plantuml
@startuml
box "\nDatenquelle" #LightBlue
database " Datenquelle " as provider_store
end box
box "\nDaten Intermediär" #Yellow
database " Daten Speicher " as di_store
end box
box "\n Service Provider " #Orange
queue " Service " as service
box "\nDatenempfänger" #LightGreen
database " Data \nSink" as consumer_store
end box
== Setup ==
provider_store -> di_store : Datenquelle registrieren
service -> di_store: Service registrieren
di_store -> service : Konfiguration
== Servicenutzung==
provider_store -> service : igecos Daten
== Datenzugriff==
provider_store -> consumer_store: igecos Daten (Rohdaten)
service -> provider_store : Ergebnisse
service -> consumer_store : Ergebnisse
@enduml
```
### Datenaustausch mit Persistierung der Daten
```plantuml
@startuml
box "\nDatenquelle" #LightBlue
database " Datenquelle " as provider_store
end box
box "\nDaten Intermediär" #Yellow
database " Daten Speicher " as di_store
end box
box "\n Service Provider " #Orange
queue " Service " as service
box "\n Datenempfänger " #LightGreen
database "Data\nSink" as consumer_store
end box
== Setup ==
provider_store -> di_store : Datenquelle registrieren
service -> di_store: Service registrieren
di_store -> service : Konfiguration
== Datenbereitstellung==
provider_store -> di_store : igecos Daten
== Servicenutzung==
di_store -> service : Service Request
di_store <- service : Service Response
== Datenzugriff==
di_store -> consumer_store : Rohdaten
di_store -> consumer_store : Ergebnisse
@enduml
```
### Prozessebene
```plantuml
@startuml
box "\nDatenquelle" #LightBlue
actor " Kontaktperson " as provider
database " Datenquelle " as provider_store
end box
box "\nDaten Intermediär" #Yellow
actor "Intermediär\nDienst" as intermediary
database " Datenspeicher " as di_store
end box
box "\nService Provider" #Orange
queue " Service " as service
actor "Anbieter" as sp
box "\nDatenempfänger" #LightGreen
database "Datenkonsument" as consumer_store
actor "Research\nInstitute" as consumer
end box
== Setup==
provider --> intermediary: möchte Daten rechtskonform teilen
sp --> intermediary: möchte Forecast-Service anbieten
provider --> intermediary: möchte Zugriff auf Forecast-Daten
consumer --> intermediary: möchte Zugriff auf Rohdaten & Forecast-Daten
== Datenbereitstellung==
provider --> provider_store: stelle Daten bereit
provider_store --> di_store: speichere Daten
== Servicenutzung==
intermediary --> di_store: schicke Daten an\nService Provider
di_store --> sp: verarbeite Daten
sp --> di_store: speichere\nverarbeitete Daten
== Datenzugriff==
intermediary --> consumer: Rohdaten verfügbar
intermediary --> provider: verarbeitete Daten verfügbar
intermediary --> consumer: verarbeitete Daten verfügbar
@enduml
```
### Rechtliche Vereinbarungen
```plantuml
@startuml
box "\nDatenquelle" #LightBlue
participant "SSI\n Wallet " as provider_wallet
actor "EEG\n Kontakt " as eeg
end box
box "\nDaten Intermediär" #Yellow
participant "DID FlexCo\n Online Wallet " as di_wallet
database "Data\nStorage" as di_store
end box
box "\n Service Provider " #Orange
participant "SSI\nWallet" as service_wallet
actor "Forecast\nService" as service
box "\nDatenempfänger" #LightGreen
participant "SSI\nWallet" as consumer_wallet
actor "Research\nInstitute" as consumer
end box
box "\nStaatliche ID" #LightGray
participant "ID Austria" as ida
== Setup==
provider_wallet -[#red]->> ida: Anmeldung
ida -[#red]->> di_wallet : staatliche Identität und Verknüpfung zu Identität im SSI Wallet
provider_wallet -[#red]->> di_wallet: Zustimmung für\nDatennutzung
provider_wallet -[#red]->> di_wallet: Bestätigung der\nDatenverwendung
====
service_wallet -[#red]->> ida: Anmeldung
ida -[#red]->> di_wallet : staatliche Identität & SSI Link
service_wallet -[#red]->> di_wallet: Bestätigung der\nDatenauftragsverarbeitung
====
consumer_wallet -[#red]->> ida: Anmeldung
ida -[#red]->> di_wallet : staatliche Identität & SSI Link
consumer_wallet -[#red]->> di_wallet: Bestätigung der\nDatenweitergabe
== Servicenutzung==
di_wallet -[#red]->> di_store : Vertrag zur\nServicenutzung
di_wallet -[#red]->> di_store : Vertrag zum Speichern\nder Ergebnisse
== Datenzugriff==
di_wallet -[#red]->> di_store : Vertrag zur\nDatenbereitstellung (EEG)
di_wallet -[#red]->> di_store : Vertrag zur Datenbereitstellung\n(Research Institute)
@enduml
```
### Alles Kombiniert (mit Datenpersistierung im Intermediär)
```plantuml
@startuml
box "\nDatenquelle" #LightBlue
actor "Kontaktperson" as provider
participant "SSI\n Wallet " as provider_wallet
database "Datenquelle" as provider_store
end box
box "\nDaten Intermediär" #Yellow
actor "Intermediär\nDienst" as intermediary
participant "DID FlexCo\n Online Wallet " as di_wallet
database " Datenspeicher " as di_store
end box
box "\nService Provider" #Orange
queue " Service " as service
participant "SSI\nWallet" as service_wallet
actor "Anbieter" as sp
box "\nDatenempfänger" #LightGreen
database "Datenkonsument" as consumer_store
participant "SSI\nWallet" as consumer_wallet
actor "Research\nInstitute" as consumer
end box
box "\nStaatliche ID" #LightGray
participant "ID Austria" as ida
== Setup==
provider --> intermediary: möchte Daten rechtskonform teilen
provider_wallet -[#red]->> ida: Anmeldung
ida -[#red]->> di_wallet : staatliche Identität und Verknüpfung zu Identität im SSI Wallet
provider_wallet -[#red]->> di_wallet: Zustimmung für\nDatennutzung
provider_store -> di_store : Datenquelle registrieren
provider_wallet -[#red]->> di_wallet: Bestätigung der\nDatenverwendung
====
sp --> intermediary: möchte Forecast-Service anbieten
service_wallet -[#red]->> ida: Anmeldung
ida -[#red]->> di_wallet : staatliche Identität & SSI Link
service_wallet -[#red]->> di_wallet: Bestätigung der\nDatenauftragsverarbeitung
service -> di_store: Service registrieren
di_store -> service : Konfiguration
====
consumer --> intermediary: möchte Zugriff auf Rohdaten & Forecast-Daten
consumer_wallet -[#red]->> ida: Anmeldung
ida -[#red]->> di_wallet : staatliche Identität & SSI Link
consumer_wallet -[#red]->> di_wallet: Bestätigung der\nDatenweitergabe
== Datenbereitstellung==
provider --> provider_store: stelle Daten bereit
provider_store --> di_store: speichere Daten
provider_store -> di_store : igecos Daten
== Servicenutzung==
intermediary --> di_store: schicke Daten an\nService Provider
di_wallet -[#red]->> di_store : Vertrag zur\nServicenutzung
di_store --> sp: verarbeite Daten
di_store -> service : Service Request
di_wallet -[#red]->> di_store : Vertrag zum Speichern\nder Ergebnisse
sp --> di_store: speichere\nverarbeitete Daten
di_store <- service : Service Response
== Datenzugriff==
intermediary --> consumer: Information über verfügbare Rohdaten
di_wallet -[#red]->> di_store : Vertrag zur Datenbereitstellung\nder Rohdaten (Research Institute)
di_store -> consumer_store : Rohdaten
intermediary --> provider: Info: verarbeitete Daten verfügbar
intermediary --> consumer: Info: verarbeitete Daten verfügbar
di_wallet -[#red]->> di_store : Vertrag zur\nDatenbereitstellung\nder Ergebnisse (EEG)
di_wallet -[#red]->> di_store : Vertrag zur Datenbereitstellung\nder Ergebnisse\n(Research Institute)
di_store -> provider_store : Ergebnisse
di_store -> consumer_store : Ergebnisse
@enduml
```