{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://b2base.eu/schemas/1.0.0-draft.1/person/contactdetails.editor.schema.json",
  "title": "Kontaktmöglichkeiten – Feldübernahme",
  "$comment": "Nur zur Feldübernahme im B2Base-Designer. Struktur-, Listen- und bedingte Regeln sind reduziert; vollständige Prüfung mit https://b2base.eu/schemas/1.0.0-draft.1/person/contactdetails.schema.json. Formate außer date/email werden derzeit nicht durch die Runtime geprüft. Freie Daten-/Erweiterungsobjekte benötigen eigene Feldschemata.",
  "type": "object",
  "description": "Mindestens ein bekannter Kontaktkanal.",
  "properties": {
    "emails": {
      "type": "array",
      "description": "E-Mail-Adressen; Unicode ist zulässig.",
      "items": {
        "type": "object",
        "description": "Ein E-Mail-Kontakt.",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Verwendungszweck."
          },
          "address": {
            "type": "string",
            "minLength": 1,
            "description": "Internationale E-Mail-Adresse; Zustellbarkeit und SMTPUTF8-Unterstützung separat prüfen.",
            "format": "idn-email"
          },
          "language": {
            "$ref": "#/$defs/LanguageTag"
          }
        },
        "required": [
          "address"
        ]
      }
    },
    "phoneNumbers": {
      "type": "array",
      "description": "Internationale Telefonnummern.",
      "items": {
        "type": "object",
        "description": "Eine vollständig normalisierte Rufnummer ohne Durchwahl.",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Verwendungszweck."
          },
          "number": {
            "type": "string",
            "minLength": 1,
            "description": "Pluszeichen und höchstens 15 Ziffern nach E.164; keine Aussage über tatsächliche Vergabe.",
            "pattern": "^\\+[1-9][0-9]{1,14}$"
          },
          "extension": {
            "type": "string",
            "minLength": 1,
            "description": "Durchwahl separat; kein Bestandteil der E.164-Rufnummer."
          },
          "displayNumber": {
            "type": "string",
            "minLength": 1,
            "description": "Optionale ursprüngliche Schreibweise."
          }
        },
        "required": [
          "number"
        ]
      }
    },
    "socialMedia": {
      "type": "array",
      "description": "Weitere Plattformkontakte.",
      "items": {
        "type": "object",
        "description": "Plattform und Kennung.",
        "properties": {
          "platform": {
            "type": "string",
            "minLength": 1,
            "description": "Plattform."
          },
          "handle": {
            "type": "string",
            "minLength": 1,
            "description": "Unveränderter Benutzername."
          },
          "url": {
            "type": "string",
            "minLength": 1,
            "description": "Optionaler Profil-Link.",
            "format": "uri"
          }
        },
        "required": [
          "platform",
          "handle"
        ]
      }
    },
    "websites": {
      "type": "array",
      "description": "Webseiten.",
      "items": {
        "type": "object",
        "description": "Eine Webseite.",
        "properties": {
          "type": {
            "type": "string",
            "minLength": 1,
            "description": "Verwendungszweck."
          },
          "url": {
            "type": "string",
            "minLength": 1,
            "description": "Internationale Webadresse; Abruf gesondert entscheiden.",
            "format": "iri",
            "pattern": "^https?://"
          }
        },
        "required": [
          "url"
        ]
      }
    },
    "extensions": {
      "type": "object",
      "description": "Vereinbarte Erweiterungen; Schlüssel als absolute URI des Herausgebers. Keine stillschweigende Änderung von Kernfeldern.",
      "properties": {}
    }
  },
  "$defs": {
    "LanguageTag": {
      "type": "string",
      "minLength": 1,
      "description": "BCP-47-Sprachtag, etwa de, zh-Hant-TW, sr-Latn oder x-internal. Das Muster prüft nur die Grundform, nicht Registrierung oder alle BCP-47-Regeln.",
      "pattern": "^[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*$"
    }
  },
  "examples": [
    {
      "phoneNumbers": [
        {
          "type": "work",
          "number": "+442079460958",
          "extension": "42"
        }
      ]
    },
    {
      "emails": [
        {
          "address": "δοκιμή@παράδειγμα.δοκιμή"
        }
      ],
      "websites": [
        {
          "url": "https://例え.テスト/"
        }
      ]
    }
  ]
}
