# ADR002_SOURCE_DELIVERY_MODEL

**Status:** Draft  
**Revision:** Draft V3 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 und werden über unterschiedliche technische Übertragungswege an Reconcilix übergeben.

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

- Aus welchem `SourceSystem` stammt eine Datenlieferung?
- Über welchen `DeliveryChannel` wurde sie verarbeitet?
- Welche `SourceValue` gehören zu derselben `SourceDelivery`?
- Welche Daten wurden gemeinsam verarbeitet?

## 3. Architekturentscheidung

Reconcilix erweitert das Domain Model um die Domain Objects

- `SourceSystem`
- `SourceDelivery`

und berücksichtigt konzeptionell einen technischen

- `DeliveryChannel`.

Das Modell lautet:

```text
SourceSystem
    │
    └── SourceDelivery
            ├── DeliveryChannel (optional)
            └── SourceValue*
```

Dabei gelten folgende Regeln:

- Ein `SourceSystem` beschreibt das fachliche Ursprungssystem.
- Eine `SourceDelivery` gehört genau zu einem `SourceSystem`.
- Ein `DeliveryChannel` beschreibt den technischen Übertragungs- oder Verarbeitungskanal einer `SourceDelivery`.
- 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 Ausgestaltung 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.

### SourceDelivery

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

Sie gruppiert fachlich zusammengehörige `SourceValue` und bildet den organisatorischen Rahmen einer Verarbeitung.

### DeliveryChannel

`DeliveryChannel` beschreibt den technischen Übertragungs- oder Verarbeitungskanal, über den eine `SourceDelivery` Reconcilix erreicht.

Beispiel:

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

Ein `DeliveryChannel` ist ausdrücklich **kein** `SourceSystem`.

Die konkrete Modellierung von `DeliveryChannel` (Identität, Attribute, Persistenz) ist nicht Bestandteil dieses ADR und wird bei Bedarf in DM001 und DM002 konkretisiert.

## 5. Auswirkungen auf das Domain Model

Die bestehenden Aggregate aus ADR001 bleiben unverändert.

`SourceSystem` und `SourceDelivery` ergänzen das Domain Model oberhalb von `SourceValue`.

`SourceDelivery` gruppiert `SourceValue`, übernimmt jedoch nicht deren vollständigen Lebenszyklus.

Es werden keine bestehenden Aggregate zusammengeführt.

## 6. Out of Scope

Nicht Bestandteil dieses ADR sind:

- konkrete Attribute der Domain Objects
- technische Persistenz
- Importprozesse
- Batch-Verarbeitung
- REST-Schnittstellen
- Versionierung
- Löschstrategien
- detaillierte Ausgestaltung von `DeliveryChannel`

## 7. Folgearbeiten

Dieses ADR bildet die Grundlage für

- DM001-Erweiterung,
- DM002-Erweiterung,
- Persistenzmodell für `SourceSystem` und `SourceDelivery`,
- Repository-Unterstützung,
- zukünftige Import- und Batchprozesse,
- spätere Ausgestaltung von `DeliveryChannel`.

## 8. Revision History

| Revision | Status | Beschreibung |
|---|--------|---|
| Draft V1 | Draft  | Erstentwurf |
| Draft V2 ED | Draft  | Aggregate-Grenzen, stabile Identitäten, Abgrenzung SourceSystem |
| Draft V3 ED | Draft  | DeliveryChannel als konzeptionelles Element ergänzt |
