<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="businessPartnersIngestion" nillable="true" type="BusinessPartnersIngestion" />
  <xs:complexType name="BusinessPartnersIngestion">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="version" type="xs:string">
        <xs:annotation>
          <xs:documentation>1.0</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="1" maxOccurs="1" name="businessPartners" type="ArrayOfBusinessPartner" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ArrayOfBusinessPartner">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="businessPartner" nillable="true" type="BusinessPartner" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="BusinessPartner">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="activeFrom" nillable="true" type="xs:string">
        <xs:annotation>
          <xs:documentation>ActiveFrom of the version to be created. Attention: this will remove the possibility to create a version before this ActiveFrom later on. If left empty, the new version will become active as of the moment of ingestion (recommended).</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="1" maxOccurs="1" name="identification" type="xs:string">
        <xs:annotation>
          <xs:documentation>A unique id as it is identified by the client, in the client's system(s).</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="1" maxOccurs="1" name="type" type="xs:string">
        <xs:annotation>
          <xs:documentation>Type of business partner. If a business partner fulfills multiple types, multiple businessPartner entries should be ingested. The combination of Identification and Type is unique.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="1" maxOccurs="1" name="name" type="xs:string">
        <xs:annotation>
          <xs:documentation>The name of the business partner</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="address" type="Address" />
      <xs:element minOccurs="0" maxOccurs="1" name="pointsOfContact" type="ArrayOfPointOfContact" />
      <xs:element minOccurs="0" maxOccurs="1" name="referenceNumbers" type="ArrayOfReferenceNumber" />
      <xs:element minOccurs="1" maxOccurs="1" name="storageLocations" type="StorageLocations" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Address">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="street" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="number" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="box" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="zipCode" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="city" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="region" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="countryCode" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ArrayOfPointOfContact">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="pointOfContact" nillable="true" type="PointOfContact" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="PointOfContact">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="name" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="phoneNumber" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="faxNumber" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="emailAddress" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="language" type="xs:string" />
      <xs:element minOccurs="0" maxOccurs="1" name="directions" nillable="true" type="ArrayOfDirection" />
      <xs:element minOccurs="1" maxOccurs="1" name="storageLocations" type="StorageLocations">
        <xs:annotation>
          <xs:documentation>Indicates for which organisational structure entities this point of contact can be used.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ArrayOfDirection">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="direction" type="Direction" />
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="Direction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="IN" />
      <xs:enumeration value="OUT" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="StorageLocations">
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="1" name="level" type="StorageLocationLevel">
        <xs:annotation>
          <xs:documentation>Level of the organization structure to which the values of ExternalIds refer. For level 'Enterprise', no externalIds are needed.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" maxOccurs="1" name="externalIds" type="ArrayOfString">
        <xs:annotation>
          <xs:documentation>Unique references of organization structure elements for which the business partner is applicable. Required for levels Company, Plant &amp; StorageLocation.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="StorageLocationLevel">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Enterprise" />
      <xs:enumeration value="Company" />
      <xs:enumeration value="Plant" />
      <xs:enumeration value="StorageLocation" />
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="ArrayOfString">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="externalId" nillable="true" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ArrayOfReferenceNumber">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="referenceNumber" nillable="true" type="ReferenceNumber" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ReferenceNumber">
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="1" name="code" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" name="type" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>