openapi: 3.1.0

info:
  title: API Publicação de vagas
  version: "1.0.0"
  description: |
    A API de publicação de vagas permite aos clientes do Vagas for Business publicarem vagas por meio de uma chamada HTTP no formato JSON.

    ## Autenticação

    A autenticação para utilização desta API pode ser feita de 02 maneiras:

    - Client Credencials
      - A vaga será criada com o usuário de identificação _Admin_ como responsável
    - Autorization Code (3-legged)
      - A vaga será criada com o usuário informado na autorização como responsável

    ### Client Credencials

    Esse processo consiste em uma chamada POST direto ao gateway indicando as credencias para obter o token de acesso.

    Considerando que as credencias foram criadas no gateway, basta realizar uma chamada conforme o exemplo:

    ```
    curl -X POST -k -H 'Content-Type: application/x-www-form-urlencoded' -i 'https://apigateway.vagas.com.br/oauth/token' --data 'grant_type=client_credentials' -u 'client_id:client_secret'
    ```

    O retorno dessa execução será:

    ```json
    {
      "access_token": "asd23sde12e123sd",
      "expires_in": 2591999,
      "token_type": "Bearer"
    }
    ```

    Para todas as demais requisições abaixo, o __access\_token__ deve ser
    incluído na requisição como um atributo do HEADER em formato BEARER

    Lembrando que o __access\_token__ tem um limite de tempo para uso, a informação retornada
    na chave __expires\_in__ indica a quantidades de segundos que o token será expirado a partir de sua data de geração.

    __Exemplo de chamada usando o __access\_token__:__

    ```shell
    # Valor exemplo que deve ser incluido no HEADER da requisição:
    # Authorization: Bearer asd23sde12e123sd
    CURL example:
    curl -XGET <URL TBD>
        --header “Authorization: Bearer asd23sde12e123sd”
    ```

    ### Autorization Code (3-legged)

    Esse processo implementa a especificação OAuth 2.0 para autenticação e autorização.

    Esta autenticação segue o padrão de "three leg":

    - O __serviço remoto__ requisita ao __usuário__ (funcionário do Vagas For Business)
      para que faça a autenticação em um servidor do __VAGAS API__

    #### Como obter o token

    O serviço remoto inicia o processo chamando uma URL para /oauth/authorize
    do servidor do VAGAS API, enviando como parametros:

    - __client_id__: Identificador da aplicação (Fornecido pela VAGAS)
    - __login_type__: Identificador do tipo de login (deve ser enviado o valor "empresa")
    - __response_type__: Identificador do tipo de resposta (deve ser enviado o valor "code")
    - __redirect_uri__: URI que será redirecionado quando a ação de login for sucesso ou não

    __Exemplo:__
    ```
    https://apigateway.vagas.com.br/oauth/authorize?response_type=code&client_id=some_application_id&login_type=empresa&redirect_uri=http%3A%2F%2Flocalhost%2Foauth%2Fcode_callback
    ```

    O usuário irá autenticar com suas credencias e autorizará o uso de suas informações
    pelo serviço remoto.

    Quando o usuário aceitar a autorização, o servidor VAGAS API irá redirecionar de volta
    ao serviço remoto usando o endereço indicado pelo parametro redirect_uri
    com um código de autorização.

    __Exemplo:__
    ```
    http://localhost/oauth/code_callback?code=AixUbVTop239876
    ```

    No caso de requisição não autorizada, a chamada será para o mesmo URI
    informado no parametro redirect_uri com o parametro de erro.

    __Exemplo:__
    ```
    http://localhost/oauth/code_callback?error=unauthorized-request
    ```

    Usando o código retornado acima, o serviço remoto deve requisitar
    um token de acesso que será usado para todas as demais requisições.

    Fazendo uma nova requisição através de um HTTP POST para a rota
    /oauth/token usando o formato "application/x-www-form-urlencoded" com os seguintes parametros:

    - __code__: O código de autorização (recebido na chamada anterior)
    - __grant_type__: Com o valor "authorization_code"

    Também deve ser incluido no cabeçalho da requisição (HEADER)
    um atributo com as informações de client\_id e client\_secret concatenados
    por dois pontos (:) e codificado em Base64

    __Exemplo:__

    - Tendo o client\_id igual a __"exemplo"__ e um client\_secret igual a __"emi40QrBjUiPaVC2eGK5"__
    - Devem ser concatenados: __exemplo:emi40QrBjUiPaVC2eGK5__
    - Aplicado Base64 no valor acima: __ZXhlbXBsbzplbWk0MFFyQmpVaVBhVkMyZUdLNQ==__
    - Incluído no HEADER da requisição: __Authorization: Basic ZXhlbXBsbzplbWk0MFFyQmpVaVBhVkMyZUdLNQ==__

    __Curl Exemplo:__

    ```shell
    curl -XPOST https://apigateway.vagas.com.br/oauth/token \
        --header “Authorization: Basic ZXhlbXBsbzplbWk0MFFyQmpVaVBhVkMyZUdLNQ==” \
        --data “code=AixUbVTop239876&grant_type=authorization_code”
    ```

    __O retorno da requisição, se bem sucedida será:__
    ```json
     {
       "access_token": "asd23sde12e123sd",
       "expired_in": 2591999
     }
    ```

    Para todas as demais requisições abaixo, o __access\_token__ deve ser
    incluído na requisição como um atributo do HEADER em formato BEARER

    Lembrando que o __access\_token__ tem um limite de tempo para uso, a informação retornada
    na chave __expires\_in__ indica a quantidades de segundos que o token será expirado a partir de sua data de geração.

    __Exemplo de chamada usando o __access\_token__:__

    ```shell
    # Valor exemplo que deve ser incluido no HEADER da requisição:
    # Authorization: Bearer asd23sde12e123sd
    CURL example:
    curl -XGET <URL TBD>
        --header “Authorization: Bearer asd23sde12e123sd”
    ```

servers:
  - url: https://apigateway.vagas.com.br/v1

security:
  - OAuth2: []

tags:
  - name: Listas
    description: Endpoints para retorno de informções necessárias para criação da vaga.
  - name: Vagas

paths:
  /job-posting/presentations:
    get:
      tags: [Listas]
      summary: Listar Apresentações
      operationId: listarApresentacoes
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Presentations' }

  /dominios/setores:
    get:
      tags: [Listas]
      summary: Listar Áreas de Atuação
      operationId: listarAreasDeAtuacao
      description: |
        Lista com todas áreas de  atuação de empresa cadastrados
        Alguns exemplos de áreas de atuação são: arquivologia, atendimento ao cliente, compras, etc...
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Area' }

  /job-posting/benefits:
    get:
      tags: [Listas]
      summary: Listar Beneficíos
      operationId: listarBeneficios
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Benefit' }

  /job-posting/partner_channels:
    get:
      tags: [Listas]
      summary: Listar Canais de publicação
      operationId: listarCanaisDePublicacao
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/PartnerChannels' }

  /dominios/paises/{pais_id}/estados/{estado_id}/cidades:
    get:
      tags: [Listas]
      summary: Listar Cidades
      operationId: listarCidades
      description: Lista com todas as cidades pertencentes a um estado
      parameters:
        - name: pais_id
          in: path
          required: true
          description: Identificação do país
          schema: { type: integer }
          example: 999
        - name: estado_id
          in: path
          required: true
          description: Identificação do estado
          schema: { type: integer }
          example: 999
        - name: nome
          in: query
          required: false
          description: busca pelo nome da cidade
          schema: { type: string }
          example: Sao Paulo
        - name: nome_exato
          in: query
          required: false
          description: busca pelo nome exato da cidade
          schema: { type: boolean }
          example: true
        - name: descricao
          in: query
          required: false
          description: busca pela descrição da cidade
          schema: { type: string }
          example: Sao Paulo/SP/BR
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/City' }

  /job-posting/divisions:
    get:
      tags: [Listas]
      summary: Listar Divisões da Empresa
      operationId: listarDivisoes
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Divisions' }

  /dominios/paises/{pais_id}/estados:
    get:
      tags: [Listas]
      summary: Listar Estados
      operationId: listarEstados
      description: Lista com os estados pertencentes ao país informado
      parameters:
        - name: pais_id
          in: path
          required: true
          description: Identificação do país
          schema: { type: integer }
          example: 999
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/StateResponse' }

  /job-posting/phases:
    get:
      tags: [Listas]
      summary: Listar Fases
      operationId: listarFases
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Phases' }

  /job-posting/forms:
    get:
      tags: [Listas]
      summary: Listar Fichas
      operationId: listarFichas
      parameters:
        - name: pagina
          in: query
          required: false
          description: Página desejada pelo cliente
          schema: { type: integer, default: 1 }
          example: 1
        - name: tamanho_pagina
          in: query
          required: false
          description: Quantidade de registros por página
          schema: { type: integer, default: 10 }
          example: 10
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: { $ref: '#/components/schemas/FormsResponse' }

  /dominios/idiomas:
    get:
      tags: [Listas]
      summary: Listar Idiomas
      operationId: listarIdiomas
      description: Lista com todos idiomas cadastrados
      parameters:
        - name: nome
          in: query
          required: false
          description: nome do idioma ou apenas o começo do nome
          schema: { type: string }
          example: Espanhol
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Language' }

  /dominios/modelos-locais-trabalho:
    get:
      tags: [Listas]
      summary: Listar Locais de Trabalho
      operationId: listarLocaisDeTrabalho
      description: Lista com todos os modelos locais de trabalho
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/WorkLocation' }

  /dominios/niveis_de_escolaridade:
    get:
      tags: [Listas]
      summary: Listar Níveis de Escolaridade
      operationId: listarNiveisDeEscolaridade
      description: Consultar níveis de escolaridade (ciclo de estudos) cadastrados
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/LevelOfSchooling' }

  /dominios/niveis_hierarquicos:
    get:
      tags: [Listas]
      summary: Listar Níveis Hierárquicos
      operationId: listarNiveisHierarquicos
      description: Lista com todos os níveis hierárquicos
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/HierarchicalLevels' }

  /v1/job-posting/job_models:
    get:
      tags: [Listas]
      summary: Listar Vagas Modelo
      operationId: listarVagasModelo
      description: Consultar vagas modelo
      parameters:
        - name: pagina
          in: query
          required: false
          description: página desejada pelo cliente
          schema: { type: integer, default: 1 }
          example: 2
        - name: tamanho_pagina
          in: query
          required: false
          description: quantidade de registros por página
          schema: { type: integer, default: 10 }
          example: 15
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/JobModelResponse' }

  /dominios/paises:
    get:
      tags: [Listas]
      summary: Listar Paises
      operationId: listarPaises
      description: Lista com todos os países cadastrados
      parameters:
        - name: associacoes
          in: query
          required: false
          description: |
            Estende as possíveis associações de países: tipos de documento e estados. Por exemplo, se desejar obter os documentos associados a um país, o parâmetro associacoes[]=tipos_de_documento deve ser informado
          schema:
            type: array
            items: { type: string }
          example: ["tipos_de_documento", "estado"]
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Country' }

  /dominios/modelos-contratuais:
    get:
      tags: [Listas]
      summary: Listar Tipo de contratação
      operationId: listarTiposDeContratacao
      description: Lista com todos os tipos de contratação cadastrados
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/ContractModel' }

  /job-posting/jobs:
    post:
      tags: [Vagas]
      summary: Publicar Vaga
      operationId: publicarVaga
      description: |
        Endpoint para publicar vaga no sistema do Vagas for Business

        Os atributos *cargo*, *descrição do anuncio* e *outros requisitos do anúncio* aceitam algumas _tags_ HTML para formatação do texto, as opções permitidas estão listadas abaixo.

        *Tags HTML permitidas*:

        - span
        - br
        - p
        - ul
        - ol
        - li
        - b
        - i
        - u
        - strong
        - em
        - div
        - h1
        - h2
        - h3
        - h4
        - h5
        - h6
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/JobCreateParams' }
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Job' }

  /job-posting/jobs/{id}:
    patch:
      tags: [Vagas]
      summary: Editar Vaga
      operationId: editarVaga
      description: |
        Endpoint para editar vaga no sistema do Vagas for Business

        Os atributos *cargo*, *descrição do anuncio* e *outros requisitos do anúncio* aceitam algumas _tags_ HTML para formatação do texto, as opções permitidas estão listadas abaixo.

        *Tags HTML permitidas*:

        - span
        - br
        - p
        - ul
        - ol
        - li
        - b
        - i
        - u
        - strong
        - em
        - div
        - h1
        - h2
        - h3
        - h4
        - h5
        - h6
      parameters:
        - name: id
          in: path
          required: true
          description: Id da vaga a ser atualizada
          schema: { type: string }
          example: "23423"
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/JobUpdateParams' }
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Job' }

components:
  securitySchemes:
    OAuth2:
      type: oauth2
      description: |
        Ver **Autenticação** acima. O __access\_token__ deve ser incluído na requisição
        como um atributo do HEADER em formato BEARER.
      flows:
        clientCredentials:
          tokenUrl: https://apigateway.vagas.com.br/oauth/token
          scopes: {}
        authorizationCode:
          authorizationUrl: https://apigateway.vagas.com.br/oauth/authorize
          tokenUrl: https://apigateway.vagas.com.br/oauth/token
          scopes: {}

  schemas:
    IdAndDescription:
      type: object
      properties:
        id: { type: integer, example: 999 }
        descricao: { type: string, example: Uma descrição }

    Area:
      $ref: '#/components/schemas/IdAndDescription'

    ContractModel:
      $ref: '#/components/schemas/IdAndDescription'

    HierarchicalLevels:
      $ref: '#/components/schemas/IdAndDescription'

    Benefit:
      type: object
      properties:
        id: { type: integer, example: 34 }
        descricao: { type: string, example: Horário flexível }
        permite_valor: { type: boolean, example: false }

    BenefitParams:
      type: object
      required: [id]
      properties:
        id: { type: integer, example: 2 }
        valor: { type: number, example: 80 }

    City:
      type: object
      properties:
        id: { type: integer, example: 1 }
        nome: { type: string, example: Sao Paulo }
        descricao: { type: string, example: Sao Paulo/SP/BR }
        latitude: { type: number, example: 1.5 }
        longitude: { type: number, example: 1.8 }
        lat: { type: number, example: 23.5475 }
        lng: { type: number, example: 46.63611111111111 }
        capital: { type: boolean, example: true }
        estado_id: { type: integer, example: 128 }
        pais_id: { type: integer, example: 128 }

    Country:
      type: object
      properties:
        id: { type: integer, example: 31 }
        sigla: { type: string, example: BR }
        nome: { type: string, example: Brazil }
        codigo_telefonico: { type: string, example: "55" }
        estados:
          type: array
          items: { $ref: '#/components/schemas/State' }
        tipos_de_documento:
          type: array
          items: { $ref: '#/components/schemas/DocumentType' }

    Divisions:
      type: object
      properties:
        id: { type: integer, example: 72590 }
        nome: { type: string, example: Recrutamento Interno }

    DocumentType:
      type: object
      properties:
        id: { type: integer, example: 38 }
        pais_id: { type: integer, example: 3 }
        nome: { type: string, example: Passport (AFG) }

    Form:
      type: object
      properties:
        id: { type: integer, example: 312065 }
        identificacao:
          type: string
          example: Teste de língua portuguesa - VAGAS - Resultado

    FormsResponse:
      type: object
      properties:
        total: { type: integer, example: 173 }
        total_paginas: { type: integer, example: 18 }
        pagina_atual: { type: integer, example: 5 }
        tamanho_pagina: { type: integer, example: 10 }
        fichas:
          type: array
          items: { $ref: '#/components/schemas/Form' }

    JobModel:
      allOf:
        - $ref: '#/components/schemas/IdAndDescription'
        - type: object
          properties:
            data_criacao: { type: string, example: "2021-09-03T16:58:48-03:00" }
            titulo: { type: string, example: Analista Suporte Teste Aline }

    JobModelResponse:
      type: object
      properties:
        total: { type: integer, example: 173 }
        total_paginas: { type: integer, example: 18 }
        pagina_atual: { type: integer, example: 5 }
        anuncios:
          type: array
          items: { $ref: '#/components/schemas/JobModel' }

    Language:
      type: object
      properties:
        id:
          type: integer
          example: 999
          description: Identificador único do elemento na tabela
        nome:
          type: string
          example: nome de identificação
          description: Nome informado para o item da entidade

    LanguageParams:
      type: object
      required: [id, nivel_id]
      properties:
        id: { type: integer, example: 534 }
        nivel_id:
          type: integer
          enum: [1, 2, 3, 4, 5]
          example: 5
          description: |
            - 1 - não tem
            - 2 - Básico
            - 3 - Intermediário
            - 4 - Avançado
            - 5 - Fluente

    LevelOfSchooling:
      type: object
      properties:
        id: { type: integer, example: 999 }
        descricao: { type: string, example: Uma descrição }
        ordenacao: { type: integer, example: 25 }
        tipo: { type: string, example: ensino_medio }

    PartnerChannels:
      type: object
      properties:
        id: { type: integer, example: 1 }
        nome: { type: string, example: Linkedin }
        texto:
          type: string
          example: Fundado em 2003, o LinkedIn conecta os profissionais do mundo ...

    Phases:
      type: object
      properties:
        id: { type: integer, example: 1 }
        nome: { type: string, example: vaga teste }
        sigla: { type: string, example: VAGTEST }
        ordem: { type: integer, example: 2 }

    Presentations:
      type: object
      properties:
        id: { type: integer, example: 1 }
        nome_template: { type: string, example: Programa de Trainee }
        descricao: { type: string, example: Descrição da empresa }
        nome_empresa: { type: string, example: Empresa XPTO }
        confidencial: { type: boolean, example: false }

    State:
      type: object
      properties:
        id: { type: integer, example: 1 }
        nome: { type: string, example: Acre }
        pais_id: { type: integer, example: 31 }
        sigla_pais: { type: string, example: BR }

    StateResponse:
      type: object
      properties:
        id:
          type: integer
          example: 999
          description: Identificador único do elemento na tabela
        nome:
          type: string
          example: nome de identificação
          description: Nome informado para o item da entidade
        descricao:
          type: string
          example: Uma descrição
          description: |
            Descrição associada com o elemento, pode ter com valores diferentes dependendo da internacionalização, mas é a mesma informação
        sigla: { type: string, example: SP }

    WorkLocation:
      type: object
      properties:
        id: { type: integer, example: 1 }
        tipo: { type: string, example: home_office }
        nome: { type: string, example: 100% Home Office }

    Salario:
      type: object
      required: [exibir_salario_no_anuncio]
      properties:
        tipo_moeda:
          type: string
          enum: [BRL, USD]
          example: BRL
          description: |
            Moeda em que será pago o salário, se `exibir_salario_no_anuncio` for true,
            esse campo é obrigatório
        faixa_salario_min:
          type: number
          example: 999
          description: |
            Valor minimo da faixa de salário, se `exibir_salario_no_anuncio` for true,
            esse campo é obrigatório
        faixa_salario_max:
          type: number
          example: 999
          description: |
            Valor máximo da faixa de salário, se `exibir_salario_no_anuncio` for true,
            esse campo é obrigatório
        exibir_salario_no_anuncio:
          type: boolean
          example: true
          description: Se false o salário será a combinar

    Anuncio:
      type: object
      required: [descricao, outros_requisitos]
      properties:
        descricao: { type: string, example: Descrição da vaga }
        outros_requisitos: { type: string, example: Ter certificação em Inglês }

    LocalDeTrabalhoParams:
      type: object
      properties:
        pais_id:
          type: integer
          example: 999
          description: Id pode ser oobtido no endpoint `/v1/dominios/paises/`.
        estado_id:
          type: integer
          example: 999
          description: Id pode ser oobtido no endpoint `/v1/dominios/paises/:pais_id/estados`.
        cidade_id:
          type: integer
          example: 999
          description: Id pode ser obtido no endpoint `/v1/dominios/paises/:pais_id/estados/:estado_id/cidades`.

    AcessoRestrito:
      type: object
      required: [vaga_restrita]
      properties:
        vaga_restrita:
          type: boolean
          example: false
          description: Se o valor for true apenas pessoas com o link da vaga conseguirão acessá-la.
        senha:
          type: string
          example: S3nh@
          description: |
            Caso a vaga seja restrita, pode-se definir uma senha para garantir que apenas
            quem tenha acesso a url da vaga e saiba a senha, possa acessá-la.

    PeriodoDeInscricao:
      type: object
      properties:
        data_inicio: { type: string, example: "2024/01/01" }
        data_fim: { type: string, example: "2024/01/31" }
        veiculacao_suspensa: { type: boolean, example: false }

    LocalAceitaCandidaturas:
      type: string
      enum: [somente_cidade, cidades_proximas, qualquer_cidade]
      example: cidades_proximas
      description: |
        Enum com o local de onde aceita candidatura, apenas da cidade, cidades próximas ou
        qualquer cidade. Se o valor for `somente_cidade`, aceita candidatos que tenham cadastrado
        a cidade da vaga na região de interesse com a opção "Usar meu endereço" ligada. Se o valor
        for `cidades_proximas`, aceita candidatos que tenham cadastrado a cidade da vaga na região
        de interesse com a opção "Usar meu endereço" ligada que sejam próximas da cidade da vaga
        (distância de até 50 Km). Se o valor for `qualquer_cidade`, aceita candidatos de tenham
        cadastrado a cidade da vaga na região de interesse.

    JobCreateParams:
      type: object
      required: [fases_ids, periodo_de_inscricao]
      properties:
        fases_ids:
          type: array
          items: { type: integer }
          example: [999, 999]
          description: IDs das fases que a vaga terá, os ids podem ser obtidos no endpoint `/v1/job-posting/phases`
        vaga_modelo_id:
          type: integer
          example: 999
          description: |
            ID da vaga modelo que pode ser usada como base para criação da vaga,
            caso a vaga modelo tenha algum atributo que também foi passado na criaçao da vaga,
            o atributo da vaga modelo será ignorado e será usado o atributo passado na requisição
            o id pode ser obtido no endpoint `/v1/job-posting/job_models`
        notificar:
          type: array
          items: { type: string }
          example: ["contato@empresa.com", "rh@email.com"]
          description: Lista de emails para notificar quando a vaga for publicada
        cargo: { type: string, example: Engenheiro, description: Titulo da vaga }
        cargo_exclusivo_pcd: { type: boolean, example: false }
        tipo_de_contratacao_id:
          type: integer
          example: 999
          description: Id do tipo de contratação. Pode ser obtido no endpoint `/v1/dominios/modelos-contratuais`
        numero_de_posicoes:
          type: integer
          example: 1
          description: Número de posições abertas para a vaga
        idiomas:
          type: array
          items: { $ref: '#/components/schemas/LanguageParams' }
          description: |
            Idiomas necessários para a vaga, as opções podem ser obtidas no endpoint
            `/v1/dominios/idiomas`
        beneficios:
          type: array
          items: { $ref: '#/components/schemas/BenefitParams' }
          description: |
            Beneficios oferecidos. Os ids podem ser obtidos no endpoint `v1/job-posting/benefits`.
            Um beneficio não pode ser fornecido duas vezes
        anuncio: { $ref: '#/components/schemas/Anuncio' }
        salario: { $ref: '#/components/schemas/Salario' }
        pre_requisitos:
          type: object
          required: [escolaridade_minima_id, nivel_hierarquico_id, areas_de_atuacao_ids]
          properties:
            escolaridade_minima_id:
              type: integer
              example: 1
              description: |
                Nível mínimo de escolaridade, o id pode ser obtido no endpoint
                `v1/dominios/niveis_de_escolaridade`
                Caso o a escolaridade seja indiferente para a vaga passe o valor "-1"
            nivel_hierarquico_id:
              type: integer
              example: 3
              description: |
                Nivel hieraquico da vaga. O id pode ser obtido no endpoint
                `/v1/dominios/niveis_hierarquicos`
            aceitar_candidaturas_outras_areas:
              type: boolean
              example: true
              description: Se true, a vaga aceitará candidaturas de outras áreas de atuação
            areas_de_atuacao_ids:
              type: array
              items: { type: integer }
              example: [4, 6, 10]
              description: |
                Areas de atuação da vaga. Os ids podem ser obtidos no endpoint
                `/v1/dominios/setores`
        atuacao:
          type: object
          required: [modelo_de_trabalho, local_de_trabalho]
          properties:
            modelo_de_trabalho:
              type: integer
              example: 4
              description: |
                Modelo de local de trabalho. O id pode ser obtido no endpoint
                `/v1/dominios/modelos-locais-trabalho`
            aceitar_candidaturas:
              deprecated: true
              description: DEPRECATED
            local_aceita_candidaturas: { $ref: '#/components/schemas/LocalAceitaCandidaturas' }
            local_de_trabalho: { $ref: '#/components/schemas/LocalDeTrabalhoParams' }
        sobre_a_empresa:
          type: object
          required: [anuncio_confidencial]
          properties:
            anuncio_confidencial:
              type: boolean
              example: false
              description: Se o valor for true, o nome da empresa não aparecerá na descrição da vaga.
            apresentacao_da_empresa: { type: integer, example: 999 }
        periodo_de_inscricao:
          allOf:
            - $ref: '#/components/schemas/PeriodoDeInscricao'
          required: [data_inicio, data_fim]
        acesso_restrito: { $ref: '#/components/schemas/AcessoRestrito' }
        canais_de_divulgacao:
          type: object
          required: [divisao_id, parceiros_ids]
          properties:
            divisao_id:
              type: integer
              example: 999
              description: Divisão da vaga. O id pode ser obtido pelo endpoint `/v1/job-posting/divisions`
            parceiros_ids:
              type: array
              items: { type: integer }
              example: [999]
        vaga_inteligente:
          type: boolean
          example: false
          description: Se o valor for true, a vaga será publicada como vaga inteligente

    JobUpdateParams:
      type: object
      properties:
        cargo: { type: string, example: Engenheiro, description: Titulo da vaga }
        cargo_exclusivo_pcd: { type: boolean, example: false }
        notificar:
          type: array
          items: { type: string }
          example: ["contato@empresa.com", "rh@email.com"]
          description: Lista de emails para notificar quando a vaga for publicada
        tipo_de_contratacao_id:
          type: integer
          example: 999
          description: Id do tipo de contratação. Pode ser obtido no endpoint `/v1/dominios/modelos-contratuais`
        numero_de_posicoes:
          type: integer
          example: 1
          description: Número de posições abertas para a vaga
        idiomas:
          type: array
          items: { $ref: '#/components/schemas/LanguageParams' }
          description: |
            Idiomas necessários para a vaga, as opções podem ser obtidas no endpoint
            `/v1/dominios/idiomas`
        beneficios:
          type: array
          items: { $ref: '#/components/schemas/BenefitParams' }
          description: Beneficios oferecidos. Os ids podem ser obtidos no endpoint `v1/job-posting/job_benefits`
        anuncio: { $ref: '#/components/schemas/Anuncio' }
        salario:
          allOf:
            - $ref: '#/components/schemas/Salario'
          required: []
        pre_requisitos:
          type: object
          properties:
            escolaridade_minima_id:
              type: integer
              example: 1
              description: |
                Nível mínimo de escolaridade, o id pode ser obtido no endpoint
                `v1/dominios/niveis_de_escolaridade`
                Caso o a escolaridade seja indiferente para a vaga passe o valor "-1"
            nivel_hierarquico_id:
              type: integer
              example: 3
              description: |
                Nivel hieraquico da vaga. O id pode ser obtido no endpoint
                `/v1/dominios/niveis_hierarquicos`
            areas_de_atuacao_ids:
              type: array
              items: { type: integer }
              example: [4, 6, 10]
              description: |
                Areas de atuação da vaga. Os ids podem ser obtidos no endpoint
                `/v1/dominios/setores`
        atuacao:
          type: object
          properties:
            modelo_de_trabalho:
              type: integer
              example: 4
              description: |
                Modelo de local de trabalho. O id pode ser obtido no endpoint
                `/v1/dominios/modelos-locais-trabalho`
            aceitar_candidaturas:
              deprecated: true
              description: DEPRECATED
            local_aceita_candidaturas: { $ref: '#/components/schemas/LocalAceitaCandidaturas' }
            local_de_trabalho:
              type: object
              properties:
                pais_id:
                  type: integer
                  example: 31
                  description: Id pode ser oobtido no endpoint `/v1/dominios/paises/`.
                estado_id:
                  type: integer
                  example: 26
                  description: Id pode ser oobtido no endpoint `/v1/dominios/paises/:pais_id/estados`.
                cidade_id:
                  type: integer
                  example: 88412
                  description: Id pode ser obtido no endpoint `/v1/dominios/paises/:pais_id/estados/:estado_id/cidades`.
        sobre_a_empresa:
          type: object
          properties:
            anuncio_confidencial:
              type: boolean
              example: false
              description: Se o valor for true, o nome da empresa não aparecerá na descrição da vaga.
            apresentacao_da_empresa: { type: integer, example: 32 }
        periodo_de_inscricao:
          type: object
          properties:
            data_inicio: { type: string, example: "2024/01/01" }
            data_fim: { type: string, example: "2024/01/01" }
            veiculacao_suspensa: { type: boolean, example: false }
        acesso_restrito: { $ref: '#/components/schemas/AcessoRestrito' }
        canais_de_divulgacao:
          type: object
          required: [divisao_id]
          properties:
            divisao_id:
              type: integer
              example: 999
              description: Divisão da vaga. O id pode ser obtido pelo endpoint `/v1/job-posting/divisions`
            parceiros_ids:
              type: array
              items: { type: integer }
              example: [999]
        vaga_inteligente:
          type: boolean
          example: false
          description: Se o valor for true, a vaga será publicada como vaga inteligente

    Job:
      type: object
      properties:
        id: { type: integer, example: 2505124 }
        cargo_exclusivo_pcd: { type: boolean, example: false }
        cargo: { type: string, example: Analista de crédito }
        numero_de_posicoes: { type: integer, example: 2 }
        tipo_de_contratacao_id: { type: integer, example: 4 }
        funcionario_id: { type: integer, example: 17742 }
        empresa_id: { type: integer, example: 12702 }
        data_criacao: { type: string, example: "2023-05-03T11:13:34-03:00" }
        fases_ids:
          type: array
          items: { type: integer }
          example: [469731, 649710, 641396]
        canais_de_divulgacao:
          type: object
          properties:
            divisao_id: { type: integer, example: 67518 }
            parceiros_ids:
              type: array
              items: { type: integer }
              example: [11, 10]
        acesso_restrito:
          type: object
          properties:
            vaga_restrita: { type: boolean, example: true }
        sobre_a_empresa:
          type: object
          properties:
            anuncio_confidencial: { type: boolean, example: false }
            apresentacao_da_empresa: { type: integer, example: 139 }
        anuncio:
          type: object
          properties:
            descricao: { type: string, example: Descrição da Vaga }
            outros_requisitos: { type: string, example: sem comentários }
        periodo_de_inscricao:
          type: object
          properties:
            data_inicio: { type: string, example: "2023-05-03" }
            data_fim: { type: string, example: "2023-05-03T21:00:00-03:00" }
            veiculacao_suspensa: { type: boolean, example: false }
        salario:
          type: object
          properties:
            tipo_moeda:
              type: string
              enum: [BRL, USD]
              example: BRL
            faixa_salario_min: { type: number, example: 1500 }
            faixa_salario_max: { type: number, example: 2000 }
            exibir_salario_no_anuncio: { type: boolean, example: true }
        idiomas:
          type: array
          items:
            type: object
            properties:
              id: { type: integer, example: 20 }
              nivel_id: { type: integer, example: 2 }
        pre_requisitos:
          type: object
          properties:
            escolaridade_minima_id: { type: integer, example: 60 }
            nivel_hierarquico_id: { type: integer, example: 40 }
            areas_de_atuacao_ids:
              type: array
              items: { type: integer }
              example: [70, 1, 124]
        atuacao:
          type: object
          properties:
            modelo_de_trabalho: { type: integer, example: 2 }
            local_aceita_candidaturas:
              type: string
              enum: [somente_cidade, cidades_proximas, qualquer_cidade]
              example: somente_cidade
            local_de_trabalho:
              type: object
              properties:
                localizacao_completa: { type: string, example: "Angra dos Reis, RJ, Brasil" }
                pais: { type: string, example: Brasil }
                estado: { type: string, example: RJ }
                cidade: { type: string, example: Angra dos Reis }
                cidade_id: { type: integer, example: 60968 }
        fichas_gerenciais:
          type: array
          items:
            type: object
            properties:
              id: { type: integer, example: 23 }
        beneficios:
          type: array
          items:
            type: object
            properties:
              id: { type: integer, example: 2 }
              valor: { type: number, example: 34.5 }
        fichas:
          type: array
          items:
            type: object
            properties:
              id: { type: integer, example: 147637 }
              obrigratoria: { type: boolean, example: true }
        vaga_inteligente: { type: boolean, example: false }
