Data Contract

Wenn Du jemandem einen Brief schickst, erwartest Du, dass der Empfänger ihn lesen kann. Ein Data Contract ist wie eine Vereinbarung über die "Sprache" von Daten - er stellt sicher, dass alle Beteiligten die gleichen Informationen gleich verstehen.

Das Problem ohne Vereinbarung

Systeme tauschen ständig Daten aus. Aber was bedeutet "Preis"? Ist das in Euro oder Cent? Mit oder ohne Mehrwertsteuer? Als Ganzzahl oder Dezimalzahl? Ohne klare Definition entstehen subtile Fehler, die oft erst beim Kunden sichtbar werden.

Die Lösung: Der Data Contract

Ein Data Contract definiert präzise:

Vollständiges Beispiel

Ein Data Contract für Bestelldaten im E-Commerce:

# Data Contract: Order Entity
# Version: 2.1.0
# Status: active

contract:
  id: "data-order-v2"
  name: "Order Data Contract"
  version: "2.1.0"
  owner: "team-commerce"
  domain: "orders"

  # Schema-Definition
  schema:
    type: "object"
    required:
      - order_id
      - customer_id
      - items
      - total
      - status

    properties:
      order_id:
        type: "string"
        format: "uuid"
        description: "Eindeutige Bestellnummer"
        example: "550e8400-e29b-41d4-a716-446655440000"

      customer_id:
        type: "integer"
        minimum: 1
        description: "Referenz zum Kunden"

      items:
        type: "array"
        minItems: 1
        items:
          type: "object"
          required: [product_id, quantity, unit_price]
          properties:
            product_id:
              type: "string"
            quantity:
              type: "integer"
              minimum: 1
              maximum: 999
            unit_price:
              type: "number"
              format: "decimal"
              description: "Preis in Euro, netto, 2 Dezimalstellen"
              example: 29.99

      total:
        type: "object"
        required: [net, gross, currency]
        properties:
          net:
            type: "number"
            format: "decimal"
            description: "Summe netto in Euro"
          gross:
            type: "number"
            format: "decimal"
            description: "Summe brutto in Euro"
          tax_rate:
            type: "number"
            enum: [0, 7, 19]
            description: "MwSt-Satz in Prozent"
          currency:
            type: "string"
            const: "EUR"

      status:
        type: "string"
        enum:
          - "draft"
          - "pending"
          - "confirmed"
          - "shipped"
          - "delivered"
          - "cancelled"
        description: "Aktueller Bestellstatus"

      timestamps:
        type: "object"
        properties:
          created_at:
            type: "string"
            format: "date-time"
          updated_at:
            type: "string"
            format: "date-time"

  # Validierungsregeln
  validation_rules:
    - id: "total_matches_items"
      description: "Summe muss mit Einzelposten übereinstimmen"
      formula: "total.net == SUM(items[].quantity * items[].unit_price)"

    - id: "gross_includes_tax"
      description: "Brutto = Netto + MwSt"
      formula: "total.gross == total.net * (1 + total.tax_rate/100)"

  # Prädikate
  predicates:
    - id: "schema_valid"
      check: "json_schema_validates"
    - id: "business_rules_pass"
      check: "all_validation_rules_pass"
    - id: "has_semantic_types"
      check: "all_fields_have_description"

Validierung in der Praxis

Bei jeder Datenübertragung wird der Contract automatisch geprüft:

# Validierungsergebnis
validation_result:
  contract_id: "data-order-v2"
  data_hash: "sha256:a1b2c3..."

  schema_check:
    passed: true
    errors: []

  business_rules:
    - rule: "total_matches_items"
      passed: true
      computed: 89.97
      expected: 89.97

    - rule: "gross_includes_tax"
      passed: true
      computed: 107.06
      expected: 107.06

  verdict: "VALID"
  validated_at: "2024-01-15T14:22:00Z"

Warum ist das wichtig?

Der Data Contract ist das gemeinsame Vokabular aller Systeme. Er verhindert Missverständnisse, macht Datenqualität messbar und ermöglicht automatische Validierung. Im Mensch + KI-Code Prozess ist er die Grundlage für verlässliche Kommunikation.

Im Mensch + KI-Code Prozess: Data Contracts werden gemeinsam mit API Contracts in Phase 3 definiert. Sie sind besonders wichtig für Change Classes "Normal" und "Critical", wo Datenintegrität verifiziert werden muss.