{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://rifa-erp.de/schemas/dataact-sales-document-1.0.json",
  "title": "RIFA Data Act Export – Verkaufsbeleg",
  "description": "Gemeinsames Schema fuer Angebote, Auftraege, Rechnungen, Gutschriften und Lieferscheine. Typspezifische Felder sind optional (null, wenn fuer die Belegart nicht anwendbar).",
  "type": "array",
  "items": {
    "type": "object",
    "required": ["documentType", "id", "netTotal", "taxTotal", "grossTotal", "positions"],
    "properties": {
      "documentType": { "type": "string", "enum": ["Quote", "SalesOrder", "Invoice", "CreditNote", "DeliveryNote"], "description": "Belegart." },
      "id": { "type": "integer", "description": "Interne Datenbank-Id des Belegs." },
      "documentNumber": { "type": ["string", "null"], "description": "Belegnummer." },
      "documentDate": { "type": ["string", "null"], "format": "date-time", "description": "Belegdatum (UTC)." },
      "subject": { "type": ["string", "null"], "description": "Betreff." },
      "notes": { "type": ["string", "null"], "description": "Bemerkungen." },
      "status": { "type": ["string", "null"], "description": "Belegstatus (Klartext des Status-Enums)." },
      "customerId": { "type": ["integer", "null"], "description": "Referenz auf den Kunden (siehe stammdaten/customers.json)." },
      "customerDisplayName": { "type": ["string", "null"], "description": "Anzeigename des Kunden zum Beleg." },
      "netTotal": { "type": "number", "description": "Nettosumme." },
      "taxTotal": { "type": "number", "description": "Steuersumme." },
      "grossTotal": { "type": "number", "description": "Bruttosumme." },
      "finalizedAt": { "type": ["string", "null"], "format": "date-time", "description": "Zeitpunkt der Finalisierung (UTC), sofern finalisiert." },
      "validUntil": { "type": ["string", "null"], "format": "date-time", "description": "Gueltig bis (nur Angebot)." },
      "dueDate": { "type": ["string", "null"], "format": "date-time", "description": "Faelligkeit (nur Rechnung)." },
      "paidAmount": { "type": ["number", "null"], "description": "Bezahlter Betrag (nur Rechnung)." },
      "openAmount": { "type": ["number", "null"], "description": "Offener Betrag (nur Rechnung)." },
      "sourceInvoiceId": { "type": ["integer", "null"], "description": "Referenz auf die Ursprungsrechnung (nur Gutschrift)." },
      "reason": { "type": ["string", "null"], "description": "Grund (nur Gutschrift)." },
      "shippingDate": { "type": ["string", "null"], "format": "date-time", "description": "Versanddatum (nur Lieferschein)." },
      "trackingNumber": { "type": ["string", "null"], "description": "Sendungsnummer (nur Lieferschein)." },
      "positions": { "type": "array", "description": "Belegpositionen (Kopf-zu-Positionen-Hierarchie)." }
    },
    "additionalProperties": true
  }
}
