openapi: 3.0.4
info:
  title: Acesso Api
  description: "# API de Autenticação e Gestão de Usuários\r\n\r\nA API de Autenticação e Gestão de Usuários foi desenvolvida para oferecer controle abrangente sobre o acesso de usuários e o gerenciamento de suas informações no sistema. Com ela, é possível realizar autenticações, controlar permissões, gerenciar tenants e administrar o ciclo de vida completo dos usuários.\r\n\r\nSimplificando a gestão de acessos e usuários com a robustez e a flexibilidade de uma API de alta performance!\r\n\r\nA seguir, detalhamos as principais funcionalidades oferecidas por cada um dos endpoints."
  contact:
    name: rgbtec
    email: support@rgbtec.com.br
  version: v1.0.0
servers:
  - url: http://rgbsys.dyndns.info/ger2025-acesso-api-desenvolvimento
paths:
  /api/v1/acessos/verificar-permissao/{permissao}/{acao}:
    get:
      tags:
        - Acessos
      summary: Verificar permissão
      description: Verifica se o usuário tem ou não a permissão solicitada.
      parameters:
        - name: permissao
          in: path
          description: Permissão solicitada
          required: true
          schema:
            $ref: '#/components/schemas/PermissaoEnum'
        - name: acao
          in: path
          description: Ação da permissão
          required: true
          schema:
            $ref: '#/components/schemas/PermissaoAcaoEnum'
      responses:
        '200':
          description: OK
          content:
            application/json: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /api/v1/acessos/trocar-tenant/{tenantId}:
    get:
      tags:
        - Acessos
      summary: Trocar tenant
      description: Efetua a troca de tenant para o usuário autenticado.
      parameters:
        - name: tenantId
          in: path
          description: Identificador do tenant
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrocarTenantResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /api/v1/acessos/token:
    patch:
      tags:
        - Acessos
      summary: Gerar token permanente
      description: Gera um token de acesso permanente para o usuário autenticado.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenPermanenteResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    delete:
      tags:
        - Acessos
      summary: Excluir token de acesso
      description: Exclui o token de acesso do usuário autenticado.
      responses:
        '200':
          description: OK
          content:
            application/json: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    post:
      tags:
        - Acessos
      summary: Login via token de acesso
      description: Efetua o login no sistema usando um token de acesso.
      parameters:
        - name: x-token-acesso
          in: header
          description: Token de acesso do usuário
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /api/v1/login:
    post:
      tags:
        - Login
      summary: Efetuar login
      description: >-
        Efetua o login no sistema utilizando login e senha. Pode exigir
        autenticação em dois fatores.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/LoginRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /api/v1/usuarios/{id}:
    get:
      tags:
        - Usuários
      summary: Recuperar um usuário
      description: Recupera os dados de um usuário específico pelo ID.
      parameters:
        - name: id
          in: path
          description: Id do usuário
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UsuarioDadosResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
    put:
      tags:
        - Usuários
      summary: Alterar usuário
      description: Realiza a alteração dos dados de um usuário.
      parameters:
        - name: id
          in: path
          description: Id do usuário a ser alterado
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UsuarioAlterarRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UsuarioAlterarRequest'
        required: true
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    delete:
      tags:
        - Usuários
      summary: Excluir usuário
      description: Exclui um usuário do sistema com base no ID.
      parameters:
        - name: id
          in: path
          description: Id do usuário
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /api/v1/usuarios/ativos:
    get:
      tags:
        - Usuários
      summary: Listar usuários ativos
      description: Lista os usuários ativos do sistema.
      parameters:
        - name: nome
          in: query
          description: Nome ou parte do nome do usuário
          schema:
            type: string
            default: null
        - name: pagina
          in: query
          description: Número da páginação
          schema:
            type: integer
            format: int32
            default: null
        - name: quantidade
          in: query
          description: Quantidade de registros a serem retornados
          schema:
            type: integer
            format: int32
            default: 10
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UsuarioListarAtivosResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
  /api/v1/usuarios:
    get:
      tags:
        - Usuários
      summary: Listar usuários
      description: Lista os usuários cadastrados no sistema com filtros opcionais.
      parameters:
        - name: nome
          in: query
          description: Nome ou parte do nome do usuário
          schema:
            type: string
            default: null
        - name: empresaId
          in: query
          description: Id da empresa
          schema:
            type: array
            items:
              type: string
            default: null
        - name: perfilId
          in: query
          description: Id do perfil
          schema:
            type: array
            items:
              type: string
            default: null
        - name: tipoPessoaFisica
          in: query
          description: Tipo de pessoa física
          schema:
            type: string
            default: null
        - name: setorId
          in: query
          description: Id do setor
          schema:
            type: array
            items:
              type: string
            default: null
        - name: visibilidadeTipo
          in: query
          description: Tipo da visibilidade
          schema:
            type: string
            default: null
        - name: visibilidadeId
          in: query
          description: Id da pessoa física com visibilidade
          schema:
            type: string
            default: null
        - name: hierarquiaTipo
          in: query
          description: Tipo da hierarquia
          schema:
            type: string
            default: null
        - name: hierarquiaId
          in: query
          description: Id da pessoa pai
          schema:
            type: string
            default: null
        - name: pagina
          in: query
          description: Número da páginação
          schema:
            type: integer
            format: int32
            default: null
        - name: quantidade
          in: query
          description: Quantidade de registros a serem retornados
          schema:
            type: integer
            format: int32
            default: 10
        - name: ascendente
          in: query
          description: Ordenação da query
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UsuarioRecuperarResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
    post:
      tags:
        - Usuários
      summary: Cadastrar usuário
      description: Cadastra um novo usuário para acesso ao sistema.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UsuarioCadastrarRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UsuarioCadastrarRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/IdResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/IdResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/IdResponse'
        '206':
          description: Partial Content
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/IdResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/IdResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/IdResponse'
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '403':
          description: Forbidden
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /api/v1/agentes/{id}/usuarios:
    get:
      tags:
        - Usuários
      summary: Listar agentes
      description: Lista os agentes cadastrados no sistema com filtros opcionais.
      parameters:
        - name: id
          in: path
          description: Id da pessoa pai
          required: true
          schema:
            type: string
        - name: pagina
          in: query
          description: Número da páginação
          schema:
            type: integer
            format: int32
            default: null
        - name: quantidade
          in: query
          description: Quantidade de registros a serem retornados
          schema:
            type: integer
            format: int32
            default: 10
        - name: ascendente
          in: query
          description: Ordenação da query
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UsuarioRecuperarResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
  /api/v1/agentes/{id}/usuarios-visao-carteira:
    get:
      tags:
        - Usuários
      summary: Listar visão carteira do agente
      description: Listar cedentes que o agente tem permissão para enxergar
      parameters:
        - name: id
          in: path
          description: Id da pessoa física com visibilidade
          required: true
          schema:
            type: string
        - name: pagina
          in: query
          description: Número da páginação
          schema:
            type: integer
            format: int32
            default: null
        - name: quantidade
          in: query
          description: Quantidade de registros a serem retornados
          schema:
            type: integer
            format: int32
            default: 10
        - name: ascendente
          in: query
          description: Ordenação da query
          schema:
            type: boolean
            default: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UsuarioRecuperarResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
  /api/v1/usuarios/manipular-perfis:
    patch:
      tags:
        - Usuários
      summary: Manipular perfis de usuário
      description: Manipula os perfis atribuídos a um usuário.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UsuarioManipularPerfisRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UsuarioManipularPerfisRequest'
        required: true
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /api/v1/usuarios/{id}/preferencias:
    patch:
      tags:
        - Usuários
      summary: Alterar preferências do usuário
      description: Realiza a alteração das preferências do usuário.
      parameters:
        - name: id
          in: path
          description: Id do usuário
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AlterarPreferenciaRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/AlterarPreferenciaRequest'
        required: true
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            text/plain:
              schema:
                type: array
                items:
                  type: string
            application/json:
              schema:
                type: array
                items:
                  type: string
            text/json:
              schema:
                type: array
                items:
                  type: string
        '404':
          description: Not Found
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
            text/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /api/v1/usuarios/{id}/imagem:
    patch:
      tags:
        - Usuários
      summary: Alterar imagem do usuário
      description: Realiza a alteração da imagem de perfil do usuário.
      parameters:
        - name: id
          in: path
          description: Id do usuário
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                ContentType:
                  type: string
                ContentDisposition:
                  type: string
                Headers:
                  type: object
                  additionalProperties:
                    type: array
                    items:
                      type: string
                Length:
                  type: integer
                  format: int64
                Name:
                  type: string
                FileName:
                  type: string
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdResponseOflong'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /api/v1/usuarios/verificar:
    get:
      tags:
        - Usuários
      summary: Verificar existência de usuário
      description: >-
        Verifica se existe um usuário com o CPF informado e/ou com o CPF e login
        informados.
      parameters:
        - name: cpf
          in: query
          description: Cpf do usuário
          schema:
            type: string
        - name: login
          in: query
          description: E-mail do usuário
          schema:
            type: string
            default: null
      responses:
        '200':
          description: OK
          content:
            application/json: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
components:
  schemas:
    AcessoResponse:
      required:
        - id
        - empresaId
        - tipoPessoaFisica
        - ativo
      type: object
      properties:
        id:
          type: string
          nullable: true
        empresaId:
          type: string
          nullable: true
        tipoPessoaFisica:
          $ref: '#/components/schemas/TipoPessoaFisicaEnum'
        ativo:
          type: boolean
    AcessoUsuarioAlterarRequest:
      required:
        - empresaId
        - tipoPessoaFisica
        - ativo
      type: object
      properties:
        empresaId:
          type: string
          description: Id da empresa a ser enxergada pela pessoa física
          nullable: true
        tipoPessoaFisica:
          $ref: '#/components/schemas/TipoPessoaFisicaEnum2'
        ativo:
          type: boolean
          description: Indica se o acesso está ativo ou não
    AcessoUsuarioCadastrarRequest:
      required:
        - empresaId
        - tipoPessoaFisica
        - ativo
      type: object
      properties:
        empresaId:
          type: string
          description: Id da empresa a ser enxergada pela pessoa física
          nullable: true
        tipoPessoaFisica:
          $ref: '#/components/schemas/TipoPessoaFisicaEnum2'
        ativo:
          type: boolean
          description: Indica se o acesso está ativo ou não
    AlterarPreferenciaRequest:
      required:
        - id
        - tenantIdPadrao
        - preferencias
      type: object
      properties:
        id:
          type: string
          nullable: true
        tenantIdPadrao:
          type: string
          nullable: true
        preferencias:
          $ref: '#/components/schemas/PreferenciaRequest'
    EmpresaResponse:
      required:
        - id
        - apelido
        - tipoPessoaFisica
        - ativo
      type: object
      properties:
        id:
          type: string
          description: Id da empresa cadastrada
          nullable: true
        apelido:
          type: string
          description: Nome da empresa cadastrada
          nullable: true
        tipoPessoaFisica:
          $ref: '#/components/schemas/TipoPessoaFisicaEnum3'
        ativo:
          type: boolean
          description: Exibe se a empresa está ativa ou não
        tipoPessoaFisicaDescricao:
          type: string
          nullable: true
    IdentidadeResponse:
      required:
        - numero
        - emissao
      type: object
      properties:
        numero:
          type: string
          description: Número da identidade
          nullable: true
        emissao:
          type: string
          description: Data de emissão da identidade
          format: date-time
          nullable: true
      description: Identidade do usuário
      nullable: true
    IdResponse:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          nullable: true
    IdResponseOflong:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          format: int64
    LoginRequest:
      required:
        - login
        - senha
      type: object
      properties:
        login:
          type: string
          description: Login do usuário
          nullable: true
        senha:
          type: string
          description: Senha do usuário
          nullable: true
        codigoAutenticacao:
          type: integer
          description: Código de autenticação dois fatores
          format: int32
          default: null
          nullable: true
    LoginResponse:
      required:
        - id
        - nome
        - email
        - preferencias
        - imagem
        - permissoes
        - tenants
      type: object
      properties:
        id:
          type: string
          description: Id do usuário
          nullable: true
        nome:
          type: string
          description: Nome do usuário
          nullable: true
        email:
          type: string
          description: Email do usuário
          nullable: true
        preferencias:
          type: string
          description: Preferências do usuário
          nullable: true
        imagem:
          type: string
          description: Imagem do usuário
          nullable: true
        permissoes:
          type: array
          items:
            $ref: '#/components/schemas/PermissaoResponse'
          description: Lista de permissões dentro de um tenant que o usuário tem acesso
          nullable: true
        tenants:
          type: array
          items:
            $ref: '#/components/schemas/LoginTenantResponse'
          description: Lista de tenants que o usuário tem acesso
          nullable: true
        token:
          type: string
          description: Token para acesso ao sistema
          nullable: true
    LoginTenantResponse:
      required:
        - id
        - apelido
        - empresas
      type: object
      properties:
        id:
          type: string
          description: Id do tenant
          nullable: true
        apelido:
          type: string
          description: Apelido do tenant
          nullable: true
        empresas:
          type: array
          items:
            $ref: '#/components/schemas/TenantEmpresaResponse'
          description: Lista de empresas dentro do tenant que o usuário tem acesso
          nullable: true
    NullableOfPermissaoEnum:
      type: integer
      description: Id da permissão
      nullable: true
    PerfilResponse:
      required:
        - id
        - nome
      type: object
      properties:
        id:
          type: string
          description: Id do perfil cadastrado
          nullable: true
        nome:
          type: string
          description: Nome do perfil cadastrado
          nullable: true
    PermissaoAcaoEnum:
      type: integer
    PermissaoEnum:
      type: integer
    PermissaoResponse:
      required:
        - id
        - acesso
      type: object
      properties:
        id:
          $ref: '#/components/schemas/NullableOfPermissaoEnum'
        acesso:
          type: integer
          description: Nome da permissão
          format: int32
          nullable: true
    PessoaEmailResponse:
      required:
        - id
        - email
        - principal
      type: object
      properties:
        id:
          type: string
          description: Id do email
          nullable: true
        email:
          type: string
          description: Email
          nullable: true
        principal:
          type: boolean
          description: Indica se é o email principal
    PessoaEnderecoResponse:
      required:
        - id
        - principal
        - logradouro
        - numero
        - semNumero
        - complemento
        - cep
        - bairro
        - municipio
        - uf
      type: object
      properties:
        id:
          type: string
          description: Id do endereço
          nullable: true
        principal:
          type: boolean
          description: Indica se é o endereço principal
        logradouro:
          type: string
          description: Endereço da pessoa
          nullable: true
        numero:
          type: string
          description: Número do endereço da pessoa
          nullable: true
        semNumero:
          type: boolean
          description: Indica se o endereço não possui número
        complemento:
          type: string
          description: Complemento do endereço da pessoa
          nullable: true
        cep:
          type: string
          description: CEP do endereço da pessoa
          nullable: true
        bairro:
          type: string
          description: Bairro do endereço da pessoa
          nullable: true
        municipio:
          type: string
          description: Município do endereço da pessoa
          nullable: true
        uf:
          type: string
          description: UF do endereço da pessoa
          nullable: true
    PessoaFisicaEmailAlterarRequest:
      required:
        - id
        - email
        - principal
      type: object
      properties:
        id:
          type: string
          description: Id da entidade PessoaEmail
          nullable: true
        email:
          type: string
          description: Endereço de email
          nullable: true
        principal:
          type: boolean
          description: Indica se é o email principal
        pessoaId:
          type: string
          description: Id da entidade pessoa
          nullable: true
    PessoaFisicaEmailCadastrarRequest:
      required:
        - email
        - principal
      type: object
      properties:
        email:
          type: string
          description: Endereço de email
          nullable: true
        principal:
          type: boolean
          description: Indica se é o email principal
        pessoaId:
          type: string
          description: Id da entidade pessoa
          nullable: true
    PessoaFisicaEnderecoAlterarRequest:
      required:
        - id
        - logradouro
        - numero
        - semNumero
        - complemento
        - cep
        - bairro
        - municipio
        - uf
        - principal
      type: object
      properties:
        id:
          type: string
          description: Id da entidade PessoaEndereco
          nullable: true
        logradouro:
          type: string
          description: Logradouro do endereço
          nullable: true
        numero:
          type: string
          description: Número do endereço
          nullable: true
        semNumero:
          type: boolean
          description: Indica se o endereço possui número ou não
        complemento:
          type: string
          description: Complemento do endereço
          nullable: true
        cep:
          type: string
          description: Cep do endereço
          nullable: true
        bairro:
          type: string
          description: Bairro do endereço
          nullable: true
        municipio:
          type: string
          description: Município do endereço
          nullable: true
        uf:
          type: string
          description: Uf do endereço
          nullable: true
        principal:
          type: boolean
          description: Indica se é o endereço principal
        pessoaId:
          type: string
          description: Id da entidade pessoa
          nullable: true
    PessoaFisicaEnderecoCadastrarRequest:
      required:
        - logradouro
        - numero
        - semNumero
        - complemento
        - cep
        - bairro
        - municipio
        - uf
        - principal
      type: object
      properties:
        logradouro:
          type: string
          description: Logradouro do endereço
          nullable: true
        numero:
          type: string
          description: Número do endereço
          nullable: true
        semNumero:
          type: boolean
          description: Indica se o endereço possui número ou não
        complemento:
          type: string
          description: Complemento do endereço
          nullable: true
        cep:
          type: string
          description: Cep do endereço
          nullable: true
        bairro:
          type: string
          description: Bairro do endereço
          nullable: true
        municipio:
          type: string
          description: Município do endereço
          nullable: true
        uf:
          type: string
          description: Uf do endereço
          nullable: true
        principal:
          type: boolean
          description: Indica se é o endereço principal
        pessoaId:
          type: string
          description: Id da entidade pessoa
          nullable: true
    PessoaFisicaTelefoneAlterarRequest:
      required:
        - id
        - numero
        - tipo
        - principal
        - whatsapp
        - sms
      type: object
      properties:
        id:
          type: string
          description: Id da entidade PessoaTelefone
          nullable: true
        numero:
          type: string
          description: Número do telefone
          nullable: true
        tipo:
          $ref: '#/components/schemas/TipoTelefoneEnum2'
        principal:
          type: boolean
          description: Indica se o telefone é o principal ou não
        whatsapp:
          type: boolean
          description: Indica se o telefone recebe whatsapp ou não
        sms:
          type: boolean
          description: Indica se o telefone recebe sms ou não
        pessoaId:
          type: string
          description: Id da entidade pessoa
          nullable: true
    PessoaFisicaTelefoneCadastrarRequest:
      required:
        - numero
        - tipo
        - principal
        - whatsapp
        - sms
      type: object
      properties:
        numero:
          type: string
          description: Número do telefone
          nullable: true
        tipo:
          $ref: '#/components/schemas/TipoTelefoneEnum2'
        principal:
          type: boolean
          description: Indica se o telefone é o principal ou não
        whatsapp:
          type: boolean
          description: Indica se o telefone recebe whatsapp ou não
        sms:
          type: boolean
          description: Indica se o telefone recebe sms ou não
        pessoaId:
          type: string
          description: Id da entidade pessoa
          nullable: true
    PessoaSetorRequest:
      required:
        - id
      type: object
      properties:
        id:
          type: string
          description: Id da entidade pessoa setor
          nullable: true
    PessoaSetorResponse:
      required:
        - id
        - nome
      type: object
      properties:
        id:
          type: string
          nullable: true
        nome:
          type: string
          nullable: true
    PessoaTelefoneResponse:
      required:
        - id
        - tipo
        - numero
        - principal
        - whatsapp
        - sms
      type: object
      properties:
        id:
          type: string
          description: Id do telefone
          nullable: true
        tipo:
          $ref: '#/components/schemas/TipoTelefoneEnum'
        numero:
          type: string
          description: Número do telefone
          nullable: true
        principal:
          type: boolean
          description: Indica se é o telefone principal
        whatsapp:
          type: boolean
          description: Indica se o telefone tem WhatsApp
        sms:
          type: boolean
          description: Indica se o telefone tem SMS
    PreferenciaRequest:
      required:
        - modoEscuro
        - modoEscuroApenasBarra
        - modoEscuroApenasHeader
        - barraLateralNaDireita
        - barraLateralFlutuante
        - esconderRodape
        - esconderBarraLateral
      type: object
      properties:
        modoEscuro:
          type: boolean
        modoEscuroApenasBarra:
          type: boolean
        modoEscuroApenasHeader:
          type: boolean
        barraLateralNaDireita:
          type: boolean
        barraLateralFlutuante:
          type: boolean
        esconderRodape:
          type: boolean
        esconderBarraLateral:
          type: boolean
      nullable: true
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
    TenantEmpresaResponse:
      required:
        - id
        - nome
      type: object
      properties:
        id:
          type: string
          description: Id da empresa
          nullable: true
        nome:
          type: string
          description: Nome da empresa
          nullable: true
    TipoAutenticacaoDoisFatoresEnum:
      type: integer
      description: Tipo de autenticação dois fatores
    TipoAutenticacaoDoisFatoresEnum2:
      type: integer
    TipoPessoaFisicaEnum:
      type: integer
    TipoPessoaFisicaEnum2:
      type: integer
      description: Tipo de pessoa física
    TipoPessoaFisicaEnum3:
      type: integer
      description: Tipo pessoa fisica cadastrada
    TipoTelefoneEnum:
      type: integer
      description: Tipo do telefone
    TipoTelefoneEnum2:
      type: integer
      description: Tipo de telefone
    TokenPermanenteResponse:
      required:
        - token
      type: object
      properties:
        token:
          type: string
          description: Token permanente
          nullable: true
    TrocarTenantResponse:
      required:
        - permissoes
        - empresas
      type: object
      properties:
        permissoes:
          type: array
          items:
            $ref: '#/components/schemas/PermissaoResponse'
          description: Lista de permissões dentro de um tenant que o usuário tem acesso
          nullable: true
        empresas:
          type: array
          items:
            $ref: '#/components/schemas/TenantEmpresaResponse'
          description: Lista de empresas dentro do tenant que o usuário tem acesso
          nullable: true
    UsuarioAlterarRequest:
      required:
        - id
        - telefones
        - emails
        - enderecos
        - acessos
        - setores
        - nome
        - login
        - perfilsId
        - identidade
        - nascimento
        - site
        - tipoAutenticacaoDoisFatores
      type: object
      properties:
        id:
          type: string
          description: Id do Usuário
          nullable: true
        telefones:
          type: array
          items:
            $ref: '#/components/schemas/PessoaFisicaTelefoneAlterarRequest'
          description: Array de Telefones do Usuário
          nullable: true
        emails:
          type: array
          items:
            $ref: '#/components/schemas/PessoaFisicaEmailAlterarRequest'
          description: Array de E-mails do Usuário
          nullable: true
        enderecos:
          type: array
          items:
            $ref: '#/components/schemas/PessoaFisicaEnderecoAlterarRequest'
          description: Array com Endereços do Usuário
          nullable: true
        acessos:
          type: array
          items:
            $ref: '#/components/schemas/AcessoUsuarioAlterarRequest'
          description: Array com Acessos do Usuário
          nullable: true
        setores:
          type: array
          items:
            $ref: '#/components/schemas/PessoaSetorRequest'
          description: Array com Setores do Usuário
          nullable: true
        nome:
          type: string
          description: Nome do Usuário
          nullable: true
        login:
          type: string
          description: E-mail do Usuário
          nullable: true
        perfilsId:
          type: array
          items:
            type: string
          description: Id do Perfil para o Tenant Selecionado
          nullable: true
        identidade:
          $ref: '#/components/schemas/UsuarioIdentidadeRequest'
        nascimento:
          type: string
          description: Data de Nascimento do Usuário
          format: date-time
          nullable: true
        site:
          type: string
          description: Url do Site do Usuário
          nullable: true
        tipoAutenticacaoDoisFatores:
          type: array
          items:
            $ref: '#/components/schemas/TipoAutenticacaoDoisFatoresEnum2'
          description: Tipo de Autenticação de Dois Fatores
          nullable: true
    UsuarioCadastrarRequest:
      required:
        - cpf
        - telefones
        - emails
        - enderecos
        - acessos
        - setores
        - nome
        - login
        - perfilsId
        - identidade
        - nascimento
        - site
        - tipoAutenticacaoDoisFatores
      type: object
      properties:
        cpf:
          type: string
          description: CPF do Usuário
          nullable: true
        telefones:
          type: array
          items:
            $ref: '#/components/schemas/PessoaFisicaTelefoneCadastrarRequest'
          description: Array de Telefones do Usuário
          nullable: true
        emails:
          type: array
          items:
            $ref: '#/components/schemas/PessoaFisicaEmailCadastrarRequest'
          description: Array de E-mails do Usuário
          nullable: true
        enderecos:
          type: array
          items:
            $ref: '#/components/schemas/PessoaFisicaEnderecoCadastrarRequest'
          description: Array com Endereços do Usuário
          nullable: true
        acessos:
          type: array
          items:
            $ref: '#/components/schemas/AcessoUsuarioCadastrarRequest'
          description: Array com Acessos do Usuário
          nullable: true
        setores:
          type: array
          items:
            $ref: '#/components/schemas/PessoaSetorRequest'
          description: Array com os setores do usuário
          nullable: true
        nome:
          type: string
          description: Nome do Usuário
          nullable: true
        login:
          type: string
          description: E-mail do Usuário
          nullable: true
        perfilsId:
          type: array
          items:
            type: string
          description: Id do Perfil para o Tenant Selecionado
          nullable: true
        identidade:
          $ref: '#/components/schemas/UsuarioIdentidadeRequest'
        nascimento:
          type: string
          description: Data de Nascimento do Usuário
          format: date-time
          nullable: true
        site:
          type: string
          description: Url do Site do Usuário
          nullable: true
        tipoAutenticacaoDoisFatores:
          type: array
          items:
            $ref: '#/components/schemas/TipoAutenticacaoDoisFatoresEnum2'
          description: Tipo de Autenticação de Dois Fatores
          nullable: true
    UsuarioDadosResponse:
      required:
        - id
        - nome
        - cpf
        - login
        - perfis
        - identidade
        - nascimento
        - site
        - tipoAutenticacaoDoisFatores
        - telefones
        - emails
        - enderecos
        - acessos
        - setores
      type: object
      properties:
        id:
          type: string
          description: Id do usuário
          nullable: true
        nome:
          type: string
          description: Nome do usuário
          nullable: true
        cpf:
          type: string
          description: CPF do usuário
          nullable: true
        login:
          type: string
          description: Login do usuário
          nullable: true
        perfis:
          type: array
          items:
            $ref: '#/components/schemas/PerfilResponse'
          description: Perfis associados ao usuário
          nullable: true
        identidade:
          $ref: '#/components/schemas/IdentidadeResponse'
        nascimento:
          type: string
          description: Data de nascimento do usuário
          format: date-time
          nullable: true
        site:
          type: string
          description: Site do usuário
          nullable: true
        tipoAutenticacaoDoisFatores:
          $ref: '#/components/schemas/TipoAutenticacaoDoisFatoresEnum'
        telefones:
          type: array
          items:
            $ref: '#/components/schemas/PessoaTelefoneResponse'
          description: Telefones do usuário
          nullable: true
        emails:
          type: array
          items:
            $ref: '#/components/schemas/PessoaEmailResponse'
          description: Emails do usuário
          nullable: true
        enderecos:
          type: array
          items:
            $ref: '#/components/schemas/PessoaEnderecoResponse'
          description: Endereços do usuário
          nullable: true
        acessos:
          type: array
          items:
            $ref: '#/components/schemas/AcessoResponse'
          description: Acessos do usuário
          nullable: true
        setores:
          type: array
          items:
            $ref: '#/components/schemas/PessoaSetorResponse'
          description: Setores do usuário
          nullable: true
    UsuarioIdentidadeRequest:
      required:
        - numero
        - emissao
      type: object
      properties:
        numero:
          type: string
          description: Número da Identidade do Usuário
          nullable: true
        emissao:
          type: string
          description: Data de Emissão da Identidade do Usuário
          format: date-time
          nullable: true
      description: Número da Identidade do Usuário
      nullable: true
    UsuarioListarAtivosResponse:
      required:
        - id
        - nome
        - setores
      type: object
      properties:
        id:
          type: string
          description: Id do usuário cadastrado
          nullable: true
        nome:
          type: string
          description: Nome do usuário cadastrado
          nullable: true
        setores:
          type: array
          items:
            $ref: '#/components/schemas/PessoaSetorResponse'
          description: Setor do usuário cadastrado
          nullable: true
    UsuarioManipularPerfisRequest:
      required:
        - perfilId
        - usuariosId
      type: object
      properties:
        perfilId:
          type: string
          description: Id do perfil
          nullable: true
        usuariosId:
          type: array
          items:
            type: string
          description: Lista de Ids dos usuários
          nullable: true
    UsuarioRecuperarResponse:
      required:
        - id
        - nome
        - login
        - imagem
        - perfis
        - setores
        - empresas
      type: object
      properties:
        id:
          type: string
          description: Id do usuário cadastrado
          nullable: true
        nome:
          type: string
          description: Nome do usuário cadastrado
          nullable: true
        login:
          type: string
          description: Login do usuário cadastrado
          nullable: true
        imagem:
          type: string
          description: Imagem do usuário cadastrado
          nullable: true
        perfis:
          type: array
          items:
            $ref: '#/components/schemas/PerfilResponse'
          description: Perfil do usuário cadastrado
          nullable: true
        setores:
          type: array
          items:
            $ref: '#/components/schemas/PessoaSetorResponse'
          description: Setor do usuário cadastrado
          nullable: true
        empresas:
          type: array
          items:
            $ref: '#/components/schemas/EmpresaResponse'
          description: Empresa do usuário cadastrado
          nullable: true
  headers:
    Authorization:
      required: true
      schema:
        type: string
        description: Token necessário para autenticação
    x-tenant-id:
      required: true
      schema:
        type: string
        description: ID do locatário para identificação
tags:
  - name: Acessos
    description: "Estes recursos são dedicados ao gerenciamento de permissões e tokens de acesso dos usuários:\r\n\r\n        *   **Verificar Permissão:**\r\n            *   Consulta se o usuário autenticado possui uma permissão específica para determinada ação.\r\n        *   **Trocar Tenant:**\r\n            *   Permite ao usuário autenticado alternar o contexto de tenant.\r\n        *   **Gerar Token Permanente:**\r\n            *   Cria um token de acesso de longa duração para o usuário autenticado.\r\n        *   **Excluir Token de Acesso:**\r\n            *   Revoga o token de acesso permanente do usuário autenticado."
  - name: Login
    description: "Este conjunto de recursos permite a autenticação de usuários e o controle de acesso:\r\n\r\n        *   **Efetuar Login:**\r\n            *   Autentica usuários utilizando credenciais de login e senha, com suporte a autenticação de dois fatores.\r\n        *   **Login via Token de Acesso:**\r\n            *   Permite o login no sistema usando um token de acesso permanente."
  - name: Usuários
    description: "Este conjunto de recursos oferece funcionalidades completas para a administração dos dados dos usuários:\r\n\r\n        *   **Cadastrar Usuário:**\r\n            *   Cria um novo registro de usuário no sistema.\r\n        *   **Listar Usuários:**\r\n            *   Obtenha listas de usuários cadastrados, com opções de filtragem por nome, empresa, perfil, tipo de pessoa, setor e paginação. É possível listar também apenas usuários ativos.\r\n        *   **Listar Agentes:**\r\n            *   Obtenha listas de agentes cadastrados, com opções de filtragem por paginação.\r\n        *   **Listar Visão Carteira Agentes:**\r\n            *   Obtenha lista da visão carteira do agente.\r\n        *   **Recuperar Usuário por ID:**\r\n            *   Recupere os dados detalhados de um usuário específico utilizando seu identificador.\r\n        *   **Alterar Usuário:**\r\n            *   Atualiza as informações cadastrais de um usuário existente.\r\n        *   **Manipular Perfis de Usuário:**\r\n            *   Adiciona ou remove perfis atribuídos a um usuário.\r\n        *   **Alterar Preferências do Usuário:**\r\n            *   Modifica as configurações de preferências individuais de um usuário.\r\n        *   **Alterar Imagem do Usuário:**\r\n            *   Permite a atualização da imagem de perfil do usuário.\r\n        *   **Excluir Usuário:**\r\n            *   Remove um registro de usuário do sistema.\r\n        *   **Verificar Existência de Usuário:**\r\n            *   Verifica a existência de um usuário pelo CPF e/ou login."
