<?xml version="1.0" encoding="UTF-8"?>
<!--
  Feed de vagas Remotar — versão 1.0

  Esquema do XML que um ATS publica para enviar vagas à Remotar.
  Guia completo: README.md, na mesma pasta.

  Os filhos de <job> e de <company> podem vir em qualquer ordem.
  Elementos fora deste esquema tornam o feed inválido: se precisar de um
  campo novo, fale com a Remotar.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <xs:element name="remotarFeed">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="generatedAt" type="xs:dateTime"/>
        <xs:element name="jobs">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="job" type="Job" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
          </xs:complexType>
          <xs:unique name="jobIdUnico">
            <xs:selector xpath="job"/>
            <xs:field xpath="id"/>
          </xs:unique>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="version" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="1\.[0-9]+"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="Job">
    <xs:all>
      <!-- Obrigatórios -->
      <xs:element name="id" type="Identificador"/>
      <xs:element name="title" type="TextoCurto"/>
      <xs:element name="description" type="TextoLongo"/>
      <xs:element name="applyUrl" type="UrlHttps"/>
      <xs:element name="workplace" type="Workplace"/>
      <xs:element name="company" type="Company"/>

      <!-- Obrigatório quando workplace = hybrid ou onsite -->
      <xs:element name="location" type="Location" minOccurs="0"/>

      <!-- Opcionais -->
      <xs:element name="publishedAt" type="xs:dateTime" minOccurs="0"/>
      <xs:element name="contractType" type="ContractType" minOccurs="0"/>
      <xs:element name="seniority" type="Seniority" minOccurs="0"/>
      <xs:element name="salary" type="Salary" minOccurs="0"/>
      <xs:element name="category" type="TextoCurto" minOccurs="0"/>
      <xs:element name="pcd" type="xs:boolean" minOccurs="0"/>
      <xs:element name="benefits" type="Benefits" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="Company">
    <xs:all>
      <xs:element name="id" type="Identificador"/>
      <xs:element name="name" type="TextoCurto"/>
      <xs:element name="website" type="UrlHttp" minOccurs="0"/>
      <xs:element name="logoUrl" type="UrlHttp" minOccurs="0"/>
      <xs:element name="description" type="TextoLongo" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="Location">
    <xs:all>
      <xs:element name="city" type="TextoCurto"/>
      <xs:element name="state" type="UF"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="Salary">
    <xs:all>
      <xs:element name="min" type="xs:nonNegativeInteger" minOccurs="0"/>
      <xs:element name="max" type="xs:positiveInteger"/>
      <xs:element name="currency" type="Currency"/>
      <xs:element name="period" type="SalaryPeriod"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="Benefits">
    <xs:sequence>
      <xs:element name="benefit" type="TextoCurto" maxOccurs="50"/>
    </xs:sequence>
  </xs:complexType>

  <!-- Tipos simples -->

  <xs:simpleType name="Identificador">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="100"/>
      <xs:pattern value="[A-Za-z0-9._:\-]+"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="TextoCurto">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="255"/>
      <xs:pattern value=".*\S.*"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="TextoLongo">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:maxLength value="50000"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="UrlHttps">
    <xs:restriction base="xs:anyURI">
      <xs:pattern value="https://.+"/>
      <xs:maxLength value="2000"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="UrlHttp">
    <xs:restriction base="xs:anyURI">
      <xs:pattern value="https?://.+"/>
      <xs:maxLength value="2000"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Workplace">
    <xs:restriction base="xs:string">
      <xs:enumeration value="remote"/>
      <xs:enumeration value="hybrid"/>
      <xs:enumeration value="onsite"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="UF">
    <xs:restriction base="xs:string">
      <xs:enumeration value="AC"/><xs:enumeration value="AL"/><xs:enumeration value="AP"/>
      <xs:enumeration value="AM"/><xs:enumeration value="BA"/><xs:enumeration value="CE"/>
      <xs:enumeration value="DF"/><xs:enumeration value="ES"/><xs:enumeration value="GO"/>
      <xs:enumeration value="MA"/><xs:enumeration value="MT"/><xs:enumeration value="MS"/>
      <xs:enumeration value="MG"/><xs:enumeration value="PA"/><xs:enumeration value="PB"/>
      <xs:enumeration value="PR"/><xs:enumeration value="PE"/><xs:enumeration value="PI"/>
      <xs:enumeration value="RJ"/><xs:enumeration value="RN"/><xs:enumeration value="RS"/>
      <xs:enumeration value="RO"/><xs:enumeration value="RR"/><xs:enumeration value="SC"/>
      <xs:enumeration value="SP"/><xs:enumeration value="SE"/><xs:enumeration value="TO"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="ContractType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="clt"/>
      <xs:enumeration value="pj"/>
      <xs:enumeration value="internship"/>
      <xs:enumeration value="temporary"/>
      <xs:enumeration value="freelancer"/>
      <xs:enumeration value="other"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Seniority">
    <xs:restriction base="xs:string">
      <xs:enumeration value="internship"/>
      <xs:enumeration value="junior"/>
      <xs:enumeration value="mid"/>
      <xs:enumeration value="senior"/>
      <xs:enumeration value="specialist"/>
      <xs:enumeration value="lead"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="Currency">
    <xs:restriction base="xs:string">
      <xs:enumeration value="BRL"/>
      <xs:enumeration value="USD"/>
      <xs:enumeration value="EUR"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="SalaryPeriod">
    <xs:restriction base="xs:string">
      <xs:enumeration value="hour"/>
      <xs:enumeration value="month"/>
      <xs:enumeration value="year"/>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>
