<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">

  <!--
    CustomsHive Canonical Client Masterdata Schema (XSD)
    ===================================================
    XML body for an ingestion-queue message carrying the application property
    MessageType = "Client". Sent by Business Central.

    Element names match C# property names (PascalCase). The import is case-insensitive
    for both JSON and XML inputs.
    Equivalent JSON schema: client.schema.json

    Only the fields Business Central owns appear here. The customs fields (default
    procedure, C503, FR1, 4007, ET14000, CBAM, air transport rate and minimum) and the
    email address are owned by CustomsHive and are never overwritten by an import.
  -->

  <xs:element name="CanonicalClientBatch" type="CanonicalClientBatchType"/>

  <xs:complexType name="CanonicalClientBatchType">
    <xs:sequence>
      <xs:element name="Clients">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Client" type="CanonicalClientType" minOccurs="1" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="CanonicalClientType">
    <xs:sequence>
      <!-- Required. The key the import upserts on. -->
      <xs:element name="Code" type="Code20"/>
      <xs:element name="Name" type="Text200"/>
      <!-- Optional -->
      <xs:element name="IdentificationNumber" type="Text35" minOccurs="0"/>
      <xs:element name="StreetAndNumber"      type="Text70" minOccurs="0"/>
      <xs:element name="Postcode"             type="Text17" minOccurs="0"/>
      <xs:element name="City"                 type="Text35" minOccurs="0"/>
      <xs:element name="Country"              type="Country2" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="Code20">
    <xs:restriction base="xs:string"><xs:minLength value="1"/><xs:maxLength value="20"/></xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Text200">
    <xs:restriction base="xs:string"><xs:minLength value="1"/><xs:maxLength value="200"/></xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Text70">
    <xs:restriction base="xs:string"><xs:maxLength value="70"/></xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Text35">
    <xs:restriction base="xs:string"><xs:maxLength value="35"/></xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Text17">
    <xs:restriction base="xs:string"><xs:maxLength value="17"/></xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Country2">
    <xs:restriction base="xs:string"><xs:pattern value="[A-Za-z]{2}"/></xs:restriction>
  </xs:simpleType>

</xs:schema>
