# ADR002_SOURCE_DELIVERY_MODEL

**Status:** Draft  

**Revision:** Draft V2 ED


## 1. Ziel

Reconcilix verarbeitet Daten aus unterschiedlichen externen Systemen. Ziel dieses ADR ist die Einführung eines fachlichen Modells zur Beschreibung der Herkunft von Daten sowie zur Gruppierung einzelner `SourceValue` zu einer gemeinsamen `SourceDelivery`.

## 2. Problemstellung

Bisher wird jeder `SourceValue` unabhängig betrachtet.

Im praktischen Einsatz werden `SourceValue` jedoch als Bestandteil einer Datenlieferung verarbeitet. Gleichzeitig stammen diese Datenlieferungen aus unterschiedlichen Fachanwendungen.

Ohne ein entsprechendes Domain Model können insbesondere folgende Fragen nicht beantwortet werden:

- Aus welchem `SourceSystem` stammt eine Datenlieferung?
- Welche `SourceValue` gehören zu derselben `SourceDelivery`?
- Welche Daten wurden gemeinsam verarbeitet?
- Welche Datenlieferungen wurden bereits analysiert?

## 3. Architekturentscheidung

Reconcilix erweitert das Domain Model um die beiden Domain Objects:

- `SourceSystem`
- `SourceDelivery`

Das resultierende Modell lautet:

```text
SourceSystem
    │
    └── SourceDelivery
            │
            └── SourceValue*
```

Dabei gelten folgende Regeln:

- Ein `SourceSystem` beschreibt die fachliche Herkunft einer Datenlieferung.
- Eine `SourceDelivery` gehört genau zu einem `SourceSystem`.
- Eine `SourceDelivery` gruppiert einen oder mehrere `SourceValue`.
- Jeder `SourceValue` gehört genau einer `SourceDelivery`.
- `SourceValue` bleibt ein eigenständiges Aggregate und referenziert genau eine `SourceDelivery`.
- `SourceSystem` und `SourceDelivery` besitzen jeweils eine stabile Identität.

Die konkrete technische und fachliche Ausgestaltung dieser Identitäten wird in DM001 und DM002 festgelegt.

## 4. Bedeutung der Domain Objects

### SourceSystem

`SourceSystem` beschreibt das fachliche Ursprungssystem einer Datenlieferung.

Beispiele:

- digiCULT.web
- MuseumsPlus
- Adlib

Ein `SourceSystem` beschreibt weder ein Dateiformat noch eine technische Schnittstelle.

Ein Werkzeug oder eine technische Schnittstelle, über die Daten an Reconcilix übertragen werden, ist nicht automatisch das `SourceSystem`.

Beispiel:

```text
SourceSystem:    digiCULT.web
DeliveryChannel: OpenRefine Reconciliation API
```

OpenRefine ist in diesem Fall nicht das fachliche Ursprungssystem, sondern Teil des technischen Übertragungswegs.

### SourceDelivery

`SourceDelivery` repräsentiert eine konkrete Datenlieferung eines `SourceSystem`.

Eine `SourceDelivery` dient der fachlichen und organisatorischen Gruppierung von `SourceValue`.

Sie dokumentiert, dass mehrere `SourceValue` im Rahmen derselben Lieferung an Reconcilix übergeben oder gemeinsam verarbeitet wurden.

Welche weiteren Metadaten zukünftig gespeichert werden, ist nicht Bestandteil dieses ADR.

## 5. DeliveryChannel

Ein technischer Übertragungsweg, beispielsweise die OpenRefine Reconciliation API, ist kein `SourceSystem`.

Falls der Übertragungsweg zukünftig dokumentiert werden soll, kann er der konkreten Verarbeitung einer `SourceDelivery` zugeordnet werden.

Eine spätere Modellierung eines `DeliveryChannel` zwischen `SourceDelivery` und `SourceValue` ist grundsätzlich denkbar, wird mit diesem ADR jedoch weder eingeführt noch strukturell festgelegt.

## 6. Auswirkungen auf das Domain Model

Die bestehenden Aggregate aus ADR001 bleiben unverändert.

`SourceSystem` und `SourceDelivery` ergänzen das Domain Model um eine organisatorische Ebene oberhalb von `SourceValue`.

Dabei gilt:

- `SourceSystem` ist ein eigenständiges Domain Object.
- `SourceDelivery` ist ein eigenständiges Domain Object.
- `SourceValue` bleibt ein eigenständiges Aggregate.
- `SourceDelivery` gruppiert `SourceValue`, übernimmt jedoch nicht deren vollständigen Lebenszyklus.
- Die Beziehung zwischen `SourceDelivery` und `SourceValue` wird über eine stabile Referenz ausgedrückt.

Es werden keine bestehenden Aggregate zusammengeführt.

## 7. Out of Scope

Dieses ADR beschreibt ausdrücklich nicht:

- konkrete Attribute von `SourceSystem` und `SourceDelivery`
- die konkrete Ausgestaltung ihrer stabilen Identitäten
- Importprozesse
- Dateiformate
- REST-Schnittstellen
- Batch-Verarbeitung
- Versionierung
- Löschstrategien
- technische Persistenz
- die konkrete Modellierung eines `DeliveryChannel`

Diese Themen werden bei Bedarf in späteren Domain Models, Persistence Models, Workpackages oder ADRs behandelt.

## 8. Folgearbeiten

Dieses ADR bildet die Grundlage für:

- die Erweiterung von DM001,
- die Erweiterung von DM002,
- das Persistenzmodell für `SourceSystem` und `SourceDelivery`,
- die Repository-Unterstützung,
- zukünftige Import- und Batchprozesse,
- eine mögliche spätere Modellierung technischer Übertragungswege.

## 9. Revision History

| Revision | Status | Beschreibung |
|---|---|---|
| Draft V1 | Draft | Initialer Entwurf von `SourceSystem` und `SourceDelivery` |
| Draft V2 ED | Draft | Präzisierung von fachlichem Ursprungssystem, Aggregate-Grenzen, stabilen Identitäten und zukünftigem `DeliveryChannel` |
