{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api.facturify.io/v1/schema/invoice.json",
  "title": "Facturify Invoice Request",
  "description": "Kanonisches Rechnungsmodell — Eingabe für POST /v1/invoices",
  "type": "object",
  "required": ["outputs", "invoice"],
  "properties": {
    "outputs": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": ["XRECHNUNG_UBL", "XRECHNUNG_CII", "ZUGFERD"]
      },
      "minItems": 1,
      "description": "Gewünschte Ausgabeformate"
    },
    "invoice": {
      "type": "object",
      "required": ["invoiceNumber", "issueDate", "buyer", "lines"],
      "properties": {
        "invoiceNumber": {
          "type": "string",
          "description": "BT-1: Rechnungsnummer (vom Kunden vergeben)"
        },
        "typeCode": {
          "type": "string",
          "enum": ["380", "381", "383", "384", "386", "389", "396"],
          "default": "380",
          "description": "BT-3: UNTDID-1001 Rechnungstyp-Code"
        },
        "issueDate": {
          "type": "string",
          "format": "date",
          "description": "BT-2: Rechnungsdatum (ISO-8601 YYYY-MM-DD)"
        },
        "dueDate": {
          "type": "string",
          "format": "date",
          "description": "BT-9: Fälligkeitsdatum (ISO-8601 YYYY-MM-DD)"
        },
        "currency": {
          "type": "string",
          "default": "EUR",
          "description": "BT-5: Währungscode (ISO-4217)"
        },
        "seller": {
          "type": "object",
          "description": "Optionaler Absender-Override (feld-granular, fehlende Felder vom seller_profile)",
          "properties": {
            "name": { "type": "string" },
            "vatId": { "type": "string", "description": "BT-31: USt-IdNr" },
            "taxNumber": { "type": "string", "description": "BT-32: Steuernummer" },
            "leitwegId": { "type": "string", "description": "BT-34b: Elektronische Adresse (Leitweg-ID)" },
            "iban": { "type": "string" },
            "bic": { "type": "string" },
            "email": { "type": "string", "format": "email" },
            "phone": { "type": "string", "description": "BT-42: Telefon des Absender-Kontakts (BG-6, XRechnung-Pflicht)" },
            "electronicAddress": { "type": "string" },
            "address": { "$ref": "#/$defs/address" }
          }
        },
        "buyer": {
          "type": "object",
          "required": ["name", "address"],
          "description": "BG-7: Käufer",
          "properties": {
            "name": { "type": "string", "description": "BT-44: Käufername" },
            "vatId": { "type": "string", "description": "BT-48: USt-IdNr Käufer" },
            "taxNumber": { "type": "string" },
            "leitwegId": { "type": "string", "description": "BT-49: Elektronische Adresse Käufer" },
            "electronicAddress": { "type": "string" },
            "address": { "$ref": "#/$defs/address" }
          }
        },
        "lines": {
          "type": "array",
          "minItems": 1,
          "description": "BG-25: Rechnungspositionen",
          "items": {
            "type": "object",
            "required": ["id", "name", "quantity", "unit", "unitPrice", "taxCategory", "taxRate"],
            "properties": {
              "id": { "type": "string", "description": "BT-126: Positions-ID" },
              "name": { "type": "string", "description": "BT-153: Artikelname" },
              "description": { "type": "string", "description": "BT-154: Artikelbeschreibung" },
              "quantity": { "type": "number", "exclusiveMinimum": 0 },
              "unit": { "type": "string", "description": "BT-130: Maßeinheit (UN/ECE Rec 20)" },
              "unitPrice": { "type": "number", "description": "BT-146: Nettopreis je Einheit" },
              "taxCategory": {
                "type": "string",
                "enum": ["S", "Z", "E", "AE", "K", "G", "O"],
                "description": "BT-151: Steuerkategorie-Code"
              },
              "taxRate": { "type": "number", "minimum": 0, "description": "BT-152: Steuersatz in Prozent" }
            }
          }
        },
        "paymentMeans": {
          "type": "object",
          "description": "BG-16: Zahlungsangaben",
          "properties": {
            "iban": { "type": "string", "description": "BT-84: IBAN" },
            "bic": { "type": "string", "description": "BT-86: BIC" },
            "paymentReference": { "type": "string", "description": "BT-83: Verwendungszweck" }
          }
        },
        "buyerReference": { "type": "string", "description": "BT-10: Leitweg-ID / Käuferreferenz" },
        "orderReference": { "type": "string", "description": "BT-13: Bestellnummer" },
        "note": { "type": "string", "description": "BT-22: Hinweis" }
      }
    }
  },
  "$defs": {
    "address": {
      "type": "object",
      "required": ["line1", "postalCode", "city", "country"],
      "properties": {
        "line1": { "type": "string" },
        "postalCode": { "type": "string" },
        "city": { "type": "string" },
        "country": { "type": "string", "description": "ISO-3166-1 Alpha-2" }
      }
    }
  }
}
