openapi: 3.0.3
info:
  title: AppAdm - API REST
  description: |
    Essa API fornece endpoints Administrativas
  version: 1.0.0
  contact:
    name: API Support

servers:
  - url: http://wf.coplan.inf.br/appadm/rest
    description: Servidor de Homologação

tags:
  - name: Solicitações
    description: Endpoints para gerenciar solicitações de diária
  - name: Auxiliares
    description: Endpoints auxiliares para obter dados de referência

security:
  - gxToken: []

paths:
  /ws_setSolicAdiantDiaria:
    post:
      tags:
        - Solicitações
      summary: Criar Solicitação de Diária
      description: Cria uma nova solicitação de diária
      operationId: criarSolicitacaoDiaria
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CriarSolicitacaoEnvelope'
            example:
              solicitacao:
                solicitacao_data: "2025-11-28"
                solicitacao_tipo_processo_id: 2
                servidorResponsavelId: 8
                solicitacao_tipo_beneficiado: 1
                servidorBeneficiarioId: 8
                diaria_tipo_id: 455
                cidadeOrigem_id: 13931
                cidadeDestino_id: 13931
                solicitacao_diaria_data_saida: "2025-11-28T13:47:31.153Z"
                solicitacao_diaria_data_retorn: "2025-11-28T13:47:31.153Z"
                solicitacao_diaria_meio_trans: 1
                solicitacao_diaria_quantidade: 123456
                solicitacao_diaria_veiid: 6
                solicitacao_descricao: "string"
                solicitacao_justificativa: "string"
                solicitacao_ug_id: 1
                solicitacao_setor_id: 101
                solicitacao_id: 123456
                solicitacao_data_limite_prest: "2025-11-28"
                solicitacao_diaria_trans_desc: "string"
                solicitacao_produto_id: 44569
              acao: "INS"
      responses:
        '201':
          description: Solicitação criada com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CriarSolicitacaoResponse'
              example:
                solicitacao_numero_ano: "114/2025"
                solicitacao_id: 114
                solicitacao_numero: 114
                solicitacao_ano: 2025
                solicitacao_status: 1
                solicitacao_valor_total: 500.0
                mensagem: "Solicitação criada com sucesso"
        '400':
          description: Dados inválidos - Campos obrigatórios ausentes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Erro de validação de negócio
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws_Solicitacao_Diaria:
    get:
      tags:
        - Solicitações
      summary: Listar Solicitações de Diária
      description: Lista as solicitações de diária com filtros opcionais
      operationId: listarSolicitacoesDiaria
      parameters:
        - name: Ugid
          in: query
          description: "ID da Unidade Gestora (obrigatório)"
          required: true
          schema:
            type: integer
            format: int64
          example: 1
        - name: Servidorid
          in: query
          description: "ID do servidor (obrigatório)"
          required: true
          schema:
            type: integer
            format: int64
          example: 1573
        - name: Soldesc
          in: query
          description: "Filtrar por descrição da solicitação"
          required: false
          schema:
            type: string
        - name: Ano
          in: query
          description: "Filtrar por ano"
          required: false
          schema:
            type: integer
            format: int32
        - name: Numero
          in: query
          description: "Filtrar por número da solicitação"
          required: false
          schema:
            type: integer
            format: int64
        - name: Solicitacaostatus
          in: query
          description: "Filtrar por status da solicitação (1 = Pendente, 2 = Deferida, 3 = Deferida Parc, 4 = Indeferida)"
          required: false
          schema:
            type: integer
            format: int32
            enum: [1, 2, 3, 4]
          example: 1
        - name: Datainicio
          in: query
          description: "Data inicial (formato YYYY-MM-DD)"
          required: false
          schema:
            type: string
            format: date
        - name: Datafim
          in: query
          description: "Data final (formato YYYY-MM-DD)"
          required: false
          schema:
            type: string
            format: date
        - name: Offset
          in: query
          description: "Número de registros a pular (para paginação)"
          required: false
          schema:
            type: integer
        - name: Limit
          in: query
          description: "Número máximo de registros a retornar (para paginação)"
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: "Lista de solicitações de diária"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListaSolicitacoesDiariaResponse'
              example:
                response:
                  Mensagens: []
                  isErro: false
                  isFirstPage: true
                  isLastPage: true
                  page: "1"
                  pageSize: "2"
                  solicitacao:
                    - servidorBeneficiadoNome: "ANA MARIA DE SOUZA"
                      solicitacao_data: "2025-11-28"
                      solicitacao_id: "67313"
                      solicitacao_numero_ano: "00001278/2025"
                      solicitacao_status: 1
                      solicitacao_status_nome: "Pendente"
                      solicitacao_valor_total: "137.0000"
                  totalPage: "1"
                  totalRows: "2"
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws_getSolicitacao:
    get:
      tags:
        - Solicitações
      summary: Consultar Solicitação Específica
      description: Consulta os detalhes completos de uma solicitação de diária específica
      operationId: consultarSolicitacaoEspecifica
      parameters:
        - name: Solicitacaoid
          in: query
          description: "ID da solicitação (obrigatório)"
          required: true
          schema:
            type: integer
            format: int64
          example: 67313
      responses:
        '200':
          description: "Detalhes da solicitação"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SolicitacaoDetalhadaResponse'
              example:
                response:
                  diaria:
                    solicitacao_diaria_natureza: "00"
                    solicitacao_diaria_natureza_nome: "00 - Diária Única"
                    solicitacao_diaria_quantidade: "1.0000"
                    solicitacao_diaria_tipo: 1
                    solicitacao_diaria_tipo_nome: "1- Dentro do Estado"
                    solicitacao_diaria_valor: "137.00"
                    valorTotal: "137.00"
                  mensagem: "Sucess"
                  produto:
                    solicitacao_produto_codigo: "59279"
                    solicitacao_produto_descricao: "DIARIA - DENTRO DO ESTADO PARA SUPERINTENDENCIA, GESTORES, SERVIDORES E CONSELHEIROS"
                    solicitacao_produto_id: "44569"
                  servidorBeneficiado:
                    solicitacao_benef_serv_id: "1573"
                    solicitacao_benef_serv_pes_nom: "ANA MARIA DE SOUZA"
                  servidorResponsavel:
                    solicitacao_req_serv_id: "1573"
                    solicitacao_req_serv_pes_nom: "ANA MARIA DE SOUZA"
                  setor:
                    solicitacao_setor_descricao: "04-001-2 - TELEFONISTA"
                    solicitacao_setor_id: "101"
                  solicitacao_ano: 2025
                  solicitacao_descricao: "string"
                  solicitacao_id: "67313"
                  solicitacao_justificativa: "string"
                  solicitacao_numero: "1278"
                  solicitacao_numero_ano: "00001278/2025"
                  solicitacao_status: 1
                  solicitacao_status_nome: "Pendente"
                  solicitacao_tipo_processo_desc: "DIÁRIA"
                  solicitacao_valor_total: "137.0000"
                  tipoBeneficiado: "1 - Servidor"
                  viagem:
                    destino:
                      cidade_id: "4333"
                      cidade_nome: "CLAUDIA"
                      estado: "MATO GROSSO"
                    origem:
                      cidade_id: "4333"
                      cidade_nome: "CLAUDIA"
                      estado: "MATO GROSSO"
                    solicitacao_diaria_data_retorn: "2025-11-28T13:47:31"
                    solicitacao_diaria_data_saida: "2025-11-28T13:47:31"
                    solicitacao_diaria_meio_trans: "Veículo Oficial"
                    veiculo:
                      veiculo_bens_descricao: "ONIBUS ESCOLAR MERCEDES BENZ 1113, PLACA AFB 4769/1980."
                      veiculo_id: "6"
        '400':
          description: Parâmetro Solicitacaoid obrigatório
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          $ref: '#/components/responses/NotFound'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws_TipoSolicitacao:
    get:
      tags:
        - Auxiliares
      summary: Listar Tipos de Solicitação
      description: Lista os tipos de solicitação disponíveis para uma unidade gestora
      operationId: listarTiposSolicitacao
      parameters:
        - name: Ugid
          in: query
          description: "ID da Unidade Gestora (obrigatório)"
          required: true
          schema:
            type: integer
            format: int64
          example: 1
      responses:
        '200':
          description: Lista de tipos de solicitação
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TipoSolicitacaoResponse'
        '400':
          description: Parâmetro Ugid obrigatório
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws_TipoBeneficiario:
    get:
      tags:
        - Auxiliares
      summary: Listar Tipos de Beneficiado
      description: Lista os tipos de beneficiado disponíveis
      operationId: listarTiposBeneficiado
      responses:
        '200':
          description: Lista de tipos de beneficiado
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TipoBeneficiado'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws/ws_TiposDiaria:
    get:
      tags:
        - Auxiliares
      summary: Listar Tipos de Diária
      description: Lista os tipos de diária disponíveis para um cargo específico
      operationId: listarTiposDiaria
      parameters:
        - name: Cargoid
          in: query
          description: "ID do cargo (obrigatório)"
          required: true
          schema:
            type: integer
            format: int64
          example: 1
        - name: Offset
          in: query
          description: "Número de registros a pular (para paginação)"
          required: false
          schema:
            type: integer
        - name: Limit
          in: query
          description: "Número máximo de registros a retornar (para paginação)"
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: Lista de tipos de diária
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TiposDiariaResponse'
        '400':
          description: Parâmetro Cargoid obrigatório
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws_Cidade:
    get:
      tags:
        - Auxiliares
      summary: Listar Cidades
      description: Lista as cidades disponíveis, com filtros opcionais
      operationId: listarCidades
      parameters:
        - name: Cidadenome
          in: query
          description: "Filtrar por nome da cidade"
          required: false
          schema:
            type: string
          example: "varzea grande"
        - name: Cidadecodigoibge
          in: query
          description: "Filtrar por código IBGE da cidade"
          required: false
          schema:
            type: string
          example: "2"
        - name: Estadonome
          in: query
          description: "Filtrar por nome do estado"
          required: false
          schema:
            type: string
          example: "mato grosso"
        - name: Estadosigla
          in: query
          description: "Filtrar por sigla do estado"
          required: false
          schema:
            type: string
          example: "mt"
        - name: Paisnome
          in: query
          description: "Filtrar por nome do país"
          required: false
          schema:
            type: string
          example: "brasil"
        - name: Paissigla
          in: query
          description: "Filtrar por sigla do país"
          required: false
          schema:
            type: string
          example: "br"
        - name: Offset
          in: query
          description: "Número de registros a pular (para paginação)"
          required: false
          schema:
            type: integer
          example: 1
        - name: Limit
          in: query
          description: "Número máximo de registros a retornar (para paginação)"
          required: false
          schema:
            type: integer
          example: 1
      responses:
        '200':
          description: Lista de cidades
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CidadesResponse'
              example:
                response:
                  Mensagens: []
                  cidade:
                    - cidade_codigo_ibge: "1200013"
                      cidade_id: "1"
                      cidade_nome: "ACRELANDIA"
                      estado_nome: "ACRE"
                      estado_sigla: "AC"
                      pais_codigo_esocial: ""
                      pais_nome: "BRASIL"
                      pais_sigla: "BR"
                    - cidade_codigo_ibge: "1200054"
                      cidade_id: "2"
                      cidade_nome: "ASSIS BRASIL"
                      estado_nome: "ACRE"
                      estado_sigla: "AC"
                      pais_codigo_esocial: ""
                      pais_nome: "BRASIL"
                      pais_sigla: "BR"
                  isErro: false
                  isFirstPage: true
                  isLastPage: false
                  page: "1"
                  pageSize: "5"
                  totalPage: "2242"
                  totalRows: "11210"
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws_DiariaMeioTransporte:
    get:
      tags:
        - Auxiliares
      summary: Listar Meios de Transporte
      description: Lista os meios de transporte disponíveis
      operationId: listarMeiosTransporte
      responses:
        '200':
          description: Lista de meios de transporte
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MeioTransporte'
              example:
                - key: "Veículo Oficial"
                  value: "1"
                - key: "Passagens Aéreas (avião)"
                  value: "2"
                - key: "Passagens Terrestres (ônibus)"
                  value: "3"
                - key: "Outros"
                  value: "4"
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws_Veiculos:
    get:
      tags:
        - Auxiliares
      summary: Listar Veículos
      description: Lista os veículos disponíveis para um meio de transporte e unidade gestora
      operationId: listarVeiculos
      parameters:
        - name: Ugid
          in: query
          description: "ID da Unidade Gestora (obrigatório)"
          required: true
          schema:
            type: integer
            format: int64
          example: 1
        - name: Meiotransporte
          in: query
          description: "Código do meio de transporte (obrigatório)"
          required: true
          schema:
            type: integer
            format: int32
          example: 1
        - name: Veiculodescricao
          in: query
          description: "Filtrar por descrição do veículo"
          required: false
          schema:
            type: string
        - name: Veiculocodigo
          in: query
          description: "Filtrar por código do bem"
          required: false
          schema:
            type: string
        - name: Placa
          in: query
          description: "Filtrar por placa do veículo"
          required: false
          schema:
            type: string
        - name: Offset
          in: query
          description: "Número de registros a pular (para paginação)"
          required: false
          schema:
            type: integer
        - name: Limit
          in: query
          description: "Número máximo de registros a retornar (para paginação)"
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: Lista de veículos
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VeiculosResponse'
              example:
                response:
                  Mensagens: []
                  isErro: false
                  isFirstPage: true
                  isLastPage: false
                  page: "1"
                  pageSize: "5"
                  totalPage: "17"
                  totalRows: "82"
                  veiculo:
                    - veiculo_bens_codigo: "1382"
                      veiculo_bens_descricao: "FORD F4000"
                      veiculo_bens_placa: "KEO8802"
                      veiculo_id: "1"
                    - veiculo_bens_codigo: "1385"
                      veiculo_bens_descricao: "MERCEDES BENS MB 1620"
                      veiculo_bens_placa: "KAU9E11"
                      veiculo_id: "4"
                    - veiculo_bens_codigo: "1386"
                      veiculo_bens_descricao: "MERCEDES BENS MB 1620"
                      veiculo_bens_placa: "KAU9451"
                      veiculo_id: "5"
                    - veiculo_bens_codigo: "1387"
                      veiculo_bens_descricao: "CATERPILLAR MOTONIVELADORA 120K N° MOTOR KHX56315"
                      veiculo_bens_placa: ""
                      veiculo_id: "6"
                    - veiculo_bens_codigo: "1388"
                      veiculo_bens_descricao: "MERCEDES BENS ATRON 2729 K 4X4"
                      veiculo_bens_placa: "QBI2C25"
                      veiculo_id: "7"
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws_produto:
    get:
      tags:
        - Auxiliares
      summary: Listar Produtos/Serviços
      description: Lista os produtos/serviços utilizados na composição da solicitação de diária
      operationId: listarProdutos
      parameters:
        - name: Ugid
          in: query
          description: "ID da Unidade Gestora (obrigatório)"
          required: true
          schema:
            type: integer
            format: int64
          example: 1
        - name: Tipobenificario
          in: query
          description: "Tipo de beneficiário (obrigatório). Deve usar o mesmo value retornado por /rest/ws_TipoBeneficiario e corresponder ao campo solicitacao_tipo_beneficiado."
          required: true
          schema:
            type: integer
            format: int32
          example: 1
        - name: Proddesc
          in: query
          description: "Filtrar por descrição do produto/serviço"
          required: false
          schema:
            type: string
          example: "Diaria"
        - name: Prodcodigo
          in: query
          description: "Filtrar por código do produto/serviço"
          required: false
          schema:
            type: string
          example: "0"
        - name: Offset
          in: query
          description: "Número de registros a pular (para paginação)"
          required: false
          schema:
            type: integer
        - name: Limit
          in: query
          description: "Número máximo de registros a retornar (para paginação)"
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: Lista de produtos/serviços
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProdutosResponse'
              example:
                response:
                  Mensagens: []
                  isErro: false
                  isFirstPage: true
                  isLastPage: false
                  page: "1"
                  pageSize: "1"
                  totalPage: "2"
                  totalRows: "2"
                  produto:
                    - produto_servico_codigo: "59279"
                      produto_servico_descricao: "DIARIA - DENTRO DO ESTADO PARA SUPERINTENDENCIA, GESTORES, SERVIDORES E CONSELHEIROS"
                      produto_servico_descricao_red: "DIARIA - DENTRO DO ESTADO PARA SUPERINTENDENCIA, GESTORES, S"
                      produto_servico_id: "44569"
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

  /ws_setores:
    get:
      tags:
        - Auxiliares
      summary: Listar Setores
      description: Lista os setores administrativos disponíveis
      operationId: listarSetores
      parameters:
        - name: unidadeCodigo
          in: query
          description: Filtrar por código da unidade
          required: false
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Lista de setores
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'

components:
  securitySchemes:
    gxToken:
      type: apiKey
      in: header
      name: GX-Token
      description: Token de autenticação customizado

  schemas:
    CriarSolicitacaoEnvelope:
      type: object
      required:
        - solicitacao
        - acao
      properties:
        solicitacao:
          $ref: '#/components/schemas/CriarSolicitacaoRequest'
        acao:
          type: string
          description: "Ação a ser executada sobre a solicitação. Valores: INS (incluir), UPD (atualizar), DLT (excluir). Para criação utilizar sempre INS."
          enum:
            - INS
            - UPD
            - DLT
          example: INS

    CriarSolicitacaoRequest:
      type: object
      required:
        - solicitacao_data
        - solicitacao_tipo_processo_id
        - servidorResponsavelId
        - servidorBeneficiarioId
        - diaria_tipo_id
        - cidadeOrigem_id
        - cidadeDestino_id
        - solicitacao_diaria_data_saida
        - solicitacao_diaria_data_retorn
        - solicitacao_diaria_meio_trans
        - solicitacao_diaria_quantidade
        - solicitacao_descricao
        - solicitacao_justificativa
        - solicitacao_ug_id
        - solicitacao_setor_id
        - solicitacao_produto_id
      properties:
        solicitacao_data:
          type: string
          format: date
          description: "Data da solicitação (formato YYYY-MM-DD)"
          example: "2025-11-25"
        solicitacao_tipo_processo_id:
          type: integer
          format: int64
          description: "ID do tipo de processo (consultar via endpoint GET /rest/ws_TipoSolicitacao?Ugid={ugid})"
          example: 1
        servidorResponsavelId:
          type: integer
          format: int64
          description: ID do servidor responsável
          example: 81
        solicitacao_tipo_beneficiado:
          type: integer
          format: int32
          description: "Tipo de beneficiado (consultar via endpoint GET /rest/ws_TipoBeneficiario). Obrigatório apenas quando o tipo de solicitação for Diária."
          example: 1
        servidorBeneficiarioId:
          type: integer
          format: int64
          description: ID do servidor beneficiário
          example: 81
        diaria_tipo_id:
          type: integer
          format: int64
          description: "Tipo de diária (consultar via endpoint GET /rest/ws/ws_TiposDiaria?Cargoid={cargoid})"
          example: 1
        cidadeOrigem_id:
          type: integer
          format: int64
          description: "Cidade de origem (consultar via endpoint GET /rest/ws_Cidade)"
          example: 13931
        cidadeDestino_id:
          type: integer
          format: int64
          description: "Cidade de destino (consultar via endpoint GET /rest/ws_Cidade)"
          example: 4347
        solicitacao_diaria_data_saida:
          type: string
          format: date-time
          description: "Data e hora da saída (formato ISO 8601)"
          example: "2025-11-25T10:28:00.000Z"
        solicitacao_diaria_data_retorn:
          type: string
          format: date-time
          description: "Data e hora do retorno (formato ISO 8601)"
          example: "2025-11-26T10:28:00.000Z"
        solicitacao_diaria_meio_trans:
          type: integer
          format: int32
          description: "Meio de transporte (consultar via endpoint GET /rest/ws_DiariaMeioTransporte)"
          example: 1
        solicitacao_diaria_quantidade:
          type: number
          format: double
          description: Quantidade de diárias
          example: 2.0
        solicitacao_diaria_trans_desc:
          type: string
          description: "Descrição do meio de transporte. Obrigatório quando o meio de transporte selecionado for \"Outros\" (value = 4 no endpoint /rest/ws_DiariaMeioTransporte)."
          example: "Carona"
        solicitacao_diaria_veiid:
          type: integer
          format: int64
          nullable: true
          description: "ID do veículo (obrigatório quando meio de transporte for \"Veículo Oficial\") (consultar via endpoint GET /rest/ws_Veiculos)"
          example: 6081
        solicitacao_descricao:
          type: string
          description: Descrição da solicitação
          example: "Participação em reunião técnica"
        solicitacao_justificativa:
          type: string
          description: Justificativa da solicitação
          example: "Necessário para participação em reunião técnica"
        solicitacao_ug_id:
          type: integer
          format: int64
          description: ID da unidade gestora da solicitação
          example: 1
        solicitacao_setor_id:
          type: integer
          format: int64
          description: "Setor administrativo (consultar via endpoint GET /rest/ws_setores)"
          example: 112
        solicitacao_data_limite_prest:
          type: string
          format: date
          description: "Data limite para prestação de contas"
          example: "2025-11-28"
        solicitacao_produto_id:
          type: integer
          format: int64
          description: "ID do produto/serviço (consultar via endpoint GET /rest/ws_produto)."
          example: 44569
        solicitacao_id:
          type: integer
          format: int64
          description: "ID da solicitação. Obrigatório para operações UPD e DLT."

    CriarSolicitacaoResponse:
      type: object
      properties:
        solicitacao_numero_ano:
          type: string
          description: "Número e ano da solicitação (formato XXX/YYYY)"
          example: "114/2025"
        solicitacao_id:
          type: integer
          format: int64
          description: ID interno da solicitação
          example: 114
        solicitacao_numero:
          type: integer
          format: int64
          description: Número da solicitação
          example: 114
        solicitacao_ano:
          type: integer
          format: int32
          description: Ano da solicitação
          example: 2025
        solicitacao_status:
          type: integer
          format: int32
          description: "Status da solicitação (código numérico)"
          example: 1
        solicitacao_valor_total:
          type: number
          format: double
          description: Valor total da solicitação
          example: 500.0
        mensagem:
          type: string
          description: Mensagem de retorno
          example: "Solicitação criada com sucesso"

    ListaSolicitacoes:
      type: object
      properties:
        items:
          type: array
          items:
            type: object
            properties:
              numero:
                type: string
              data:
                type: string
                format: date
              status:
                type: string
              servidorBeneficiadoNome:
                type: string
              valorTotal:
                type: number
                format: double
              origem:
                type: string
              destino:
                type: string
        total:
          type: integer
        page:
          type: integer
        pageSize:
          type: integer
        totalPages:
          type: integer

    ListaSolicitacoesDiariaResponse:
      type: object
      properties:
        response:
          $ref: '#/components/schemas/ListaSolicitacoesDiariaResponseData'

    ListaSolicitacoesDiariaResponseData:
      type: object
      properties:
        Mensagens:
          type: array
          items:
            $ref: '#/components/schemas/Mensagem'
        solicitacao:
          type: array
          items:
            $ref: '#/components/schemas/SolicitacaoItem'
        isErro:
          type: boolean
        isFirstPage:
          type: boolean
        isLastPage:
          type: boolean
        page:
          type: string
        pageSize:
          type: string
        totalPage:
          type: string
        totalRows:
          type: string

    SolicitacaoItem:
      type: object
      properties:
        servidorBeneficiadoNome:
          type: string
          description: "Nome do servidor beneficiário"
        solicitacao_data:
          type: string
          format: date
          description: "Data da solicitação"
        solicitacao_id:
          type: string
          description: "ID da solicitação"
        solicitacao_numero_ano:
          type: string
          description: "Número e ano da solicitação (formato XXX/YYYY)"
        solicitacao_status:
          type: integer
          format: int32
          description: "Código do status da solicitação"
        solicitacao_status_nome:
          type: string
          description: "Nome do status da solicitação"
        solicitacao_valor_total:
          type: string
          description: "Valor total da solicitação (formato decimal como string)"

    SolicitacaoDetalhadaResponse:
      type: object
      properties:
        response:
          $ref: '#/components/schemas/SolicitacaoDetalhada'

    SolicitacaoDetalhada:
      type: object
      properties:
        mensagem:
          type: string
          example: "Sucess"
        solicitacao_id:
          type: string
          description: "ID da solicitação"
          example: "67313"
        solicitacao_numero:
          type: string
          description: "Número da solicitação"
          example: "1278"
        solicitacao_numero_ano:
          type: string
          description: "Número e ano da solicitação (formato XXX/YYYY)"
          example: "00001278/2025"
        solicitacao_ano:
          type: integer
          format: int32
          description: "Ano da solicitação"
          example: 2025
        solicitacao_status:
          type: integer
          format: int32
          description: "Código do status da solicitação"
          example: 1
        solicitacao_status_nome:
          type: string
          description: "Nome do status da solicitação"
          example: "Pendente"
        solicitacao_tipo_processo_desc:
          type: string
          description: "Descrição do tipo de processo"
          example: "DIÁRIA"
        solicitacao_descricao:
          type: string
          description: "Descrição da solicitação"
          example: "string"
        solicitacao_justificativa:
          type: string
          description: "Justificativa da solicitação"
          example: "string"
        solicitacao_valor_total:
          type: string
          description: "Valor total da solicitação (formato decimal como string)"
          example: "137.0000"
        tipoBeneficiado:
          type: string
          description: "Tipo de beneficiado (formato: \"{código} - {nome}\")"
          example: "1 - Servidor"
        servidorResponsavel:
          $ref: '#/components/schemas/ServidorResponsavelDetalhado'
        servidorBeneficiado:
          $ref: '#/components/schemas/ServidorBeneficiadoDetalhado'
        setor:
          $ref: '#/components/schemas/SetorDetalhado'
        produto:
          $ref: '#/components/schemas/ProdutoDetalhado'
        diaria:
          $ref: '#/components/schemas/DiariaDetalhada'
        viagem:
          $ref: '#/components/schemas/ViagemDetalhada'

    ServidorResponsavelDetalhado:
      type: object
      properties:
        solicitacao_req_serv_id:
          type: string
          description: "ID do servidor responsável"
          example: "1573"
        solicitacao_req_serv_pes_nom:
          type: string
          description: "Nome do servidor responsável"
          example: "ANA MARIA DE SOUZA"

    ServidorBeneficiadoDetalhado:
      type: object
      properties:
        solicitacao_benef_serv_id:
          type: string
          description: "ID do servidor beneficiário"
          example: "1573"
        solicitacao_benef_serv_pes_nom:
          type: string
          description: "Nome do servidor beneficiário"
          example: "ANA MARIA DE SOUZA"

    SetorDetalhado:
      type: object
      properties:
        solicitacao_setor_id:
          type: string
          description: "ID do setor"
          example: "101"
        solicitacao_setor_descricao:
          type: string
          description: "Descrição do setor"
          example: "04-001-2 - TELEFONISTA"

    ProdutoDetalhado:
      type: object
      properties:
        solicitacao_produto_id:
          type: string
          description: "ID do produto/serviço"
          example: "44569"
        solicitacao_produto_codigo:
          type: string
          description: "Código do produto/serviço"
          example: "59279"
        solicitacao_produto_descricao:
          type: string
          description: "Descrição do produto/serviço"
          example: "DIARIA - DENTRO DO ESTADO PARA SUPERINTENDENCIA, GESTORES, SERVIDORES E CONSELHEIROS"

    DiariaDetalhada:
      type: object
      properties:
        solicitacao_diaria_tipo:
          type: integer
          format: int32
          description: "Código do tipo de diária"
          example: 1
        solicitacao_diaria_tipo_nome:
          type: string
          description: "Nome do tipo de diária"
          example: "1- Dentro do Estado"
        solicitacao_diaria_natureza:
          type: string
          description: "Código da natureza da diária"
          example: "00"
        solicitacao_diaria_natureza_nome:
          type: string
          description: "Nome da natureza da diária"
          example: "00 - Diária Única"
        solicitacao_diaria_quantidade:
          type: string
          description: "Quantidade de diárias (formato decimal como string)"
          example: "1.0000"
        solicitacao_diaria_valor:
          type: string
          description: "Valor unitário da diária (formato decimal como string)"
          example: "137.00"
        valorTotal:
          type: string
          description: "Valor total calculado (formato decimal como string)"
          example: "137.00"

    ViagemDetalhada:
      type: object
      properties:
        solicitacao_diaria_data_saida:
          type: string
          format: date-time
          description: "Data e hora da saída (formato ISO 8601)"
          example: "2025-11-28T13:47:31"
        solicitacao_diaria_data_retorn:
          type: string
          format: date-time
          description: "Data e hora do retorno (formato ISO 8601)"
          example: "2025-11-28T13:47:31"
        solicitacao_diaria_meio_trans:
          type: string
          description: "Nome do meio de transporte"
          example: "Veículo Oficial"
        origem:
          $ref: '#/components/schemas/CidadeDetalhada'
        destino:
          $ref: '#/components/schemas/CidadeDetalhada'
        veiculo:
          $ref: '#/components/schemas/VeiculoDetalhado'

    CidadeDetalhada:
      type: object
      properties:
        cidade_id:
          type: string
          description: "ID da cidade"
          example: "4333"
        cidade_nome:
          type: string
          description: "Nome da cidade"
          example: "CLAUDIA"
        estado:
          type: string
          description: "Nome do estado"
          example: "MATO GROSSO"

    VeiculoDetalhado:
      type: object
      properties:
        veiculo_id:
          type: string
          description: "ID do veículo"
          example: "6"
        veiculo_bens_descricao:
          type: string
          description: "Descrição do veículo"
          example: "ONIBUS ESCOLAR MERCEDES BENZ 1113, PLACA AFB 4769/1980."

    Servidor:
      type: object
      properties:
        codigo:
          type: integer
          format: int64
        nome:
          type: string
        cargo:
          type: string

    TipoBeneficiadoResumo:
      type: object
      properties:
        codigo:
          type: integer
        nome:
          type: string

    Diaria:
      type: object
      properties:
        tipoDiaria:
          type: integer
        tipoDiariaNome:
          type: string
        naturezaCodigo:
          type: integer
        natureza:
          type: string
        quantidade:
          type: number
          format: double
        valor:
          type: number
          format: double
        valorTotal:
          type: number
          format: double

    Viagem:
      type: object
      properties:
        origem:
          $ref: '#/components/schemas/Cidade'
        destino:
          $ref: '#/components/schemas/Cidade'
        dataHoraSaida:
          type: string
          format: date-time
        dataHoraRetorno:
          type: string
          format: date-time
        meioTransporteCodigo:
          type: integer
        meioTransporte:
          type: string
        veiculo:
          $ref: '#/components/schemas/Veiculo'

    Cidade:
      type: object
      properties:
        estado:
          type: string
        codigo:
          type: integer
          format: int64
        nome:
          type: string

    Veiculo:
      type: object
      properties:
        codigo:
          type: integer
          format: int64
        descricao:
          type: string

    Requerente:
      type: object
      properties:
        codigo:
          type: integer
          format: int64
        nome:
          type: string

    Orgao:
      type: object
      properties:
        codigo:
          type: integer
          format: int64
        nome:
          type: string

    Unidade:
      type: object
      properties:
        codigo:
          type: integer
          format: int64
        nome:
          type: string

    Setor:
      type: object
      properties:
        codigo:
          type: integer
          format: int64
        nome:
          type: string

    TipoSolicitacaoResponse:
      type: object
      properties:
        response:
          type: array
          items:
            $ref: '#/components/schemas/TipoSolicitacao'

    TipoSolicitacao:
      type: object
      properties:
        tipo_processo_descricao:
          type: string
          example: "SOLICITAÇÃO DE DIÁRIA"
        tipo_processo_id:
          type: string
          description: "ID do tipo de processo (usar como integer no request)"
          example: "2"
        tipo_processo_status:
          type: string
          example: "A"
        tipo_processo_tipo:
          type: integer
          example: 1

    TipoBeneficiado:
      type: object
      properties:
        key:
          type: string
          description: "Descrição do tipo (formato: \"{código} - {nome}\")"
          example: "1 - Servidor"
        value:
          type: string
          description: "Código do tipo (usar como integer no request)"
          example: "1"

    TiposDiariaResponse:
      type: object
      properties:
        response:
          $ref: '#/components/schemas/TiposDiariaResponseData'

    TiposDiariaResponseData:
      type: object
      properties:
        Mensagens:
          type: array
          items:
            $ref: '#/components/schemas/Mensagem'
        diaria_tipo:
          type: array
          items:
            $ref: '#/components/schemas/TipoDiaria'
        isErro:
          type: boolean
        isFirstPage:
          type: boolean
        isLastPage:
          type: boolean
        page:
          type: string
        pageSize:
          type: string
        totalPage:
          type: string
        totalRows:
          type: string

    Mensagem:
      type: object
      properties:
        Description:
          type: string
        Id:
          type: string
        Type:
          type: integer

    TipoDiaria:
      type: object
      properties:
        diaria_codigo:
          type: integer
        diaria_descricao:
          type: string
        diaria_status:
          type: string
        diaria_tipo:
          type: integer
          description: "Tipo de diária (usar no campo diaria_tipo_id do request)"
        diaria_tipo_id:
          type: string
          description: "ID do tipo de diária (identificador único)"
        diaria_tipo_natureza:
          type: string
          description: Código da natureza
        diaria_tipo_natureza_nome:
          type: string
          description: "Nome da natureza (formato: \"{código} - {nome}\")"
        diaria_tipo_nome:
          type: string
          description: "Nome do tipo (formato: \"{código} - {nome}\")"
        diaria_valor:
          type: string
          description: "Valor da diária (formato decimal como string)"

    CidadesResponse:
      type: object
      properties:
        response:
          $ref: '#/components/schemas/CidadesResponseData'

    CidadesResponseData:
      type: object
      properties:
        Mensagens:
          type: array
          items:
            $ref: '#/components/schemas/Mensagem'
        cidade:
          type: array
          items:
            $ref: '#/components/schemas/CidadeItem'
        isErro:
          type: boolean
        isFirstPage:
          type: boolean
        isLastPage:
          type: boolean
        page:
          type: string
        pageSize:
          type: string
        totalPage:
          type: string
        totalRows:
          type: string

    CidadeItem:
      type: object
      properties:
        cidade_codigo_ibge:
          type: string
          description: "Código IBGE da cidade"
        cidade_id:
          type: string
          description: "ID da cidade"
        cidade_nome:
          type: string
          description: "Nome da cidade"
        estado_nome:
          type: string
          description: "Nome do estado"
        estado_sigla:
          type: string
          description: "Sigla do estado"
        pais_codigo_esocial:
          type: string
          description: "Código eSocial do país"
        pais_nome:
          type: string
          description: "Nome do país"
        pais_sigla:
          type: string
          description: "Sigla do país"

    MeioTransporte:
      type: object
      properties:
        key:
          type: string
          description: "Descrição do meio de transporte"
          example: "Veículo Oficial"
        value:
          type: string
          description: "Código do meio de transporte (usar como integer no request)"
          example: "1"

    VeiculosResponse:
      type: object
      properties:
        response:
          $ref: '#/components/schemas/VeiculosResponseData'

    VeiculosResponseData:
      type: object
      properties:
        Mensagens:
          type: array
          items:
            $ref: '#/components/schemas/Mensagem'
        isErro:
          type: boolean
        isFirstPage:
          type: boolean
        isLastPage:
          type: boolean
        page:
          type: string
        pageSize:
          type: string
        totalPage:
          type: string
        totalRows:
          type: string
        veiculo:
          type: array
          items:
            $ref: '#/components/schemas/VeiculoItem'

    VeiculoItem:
      type: object
      properties:
        veiculo_bens_codigo:
          type: string
          description: "Código do bem (veículo)"
        veiculo_bens_descricao:
          type: string
          description: "Descrição do veículo"
        veiculo_bens_placa:
          type: string
          description: "Placa do veículo"
        veiculo_id:
          type: string
          description: "ID do veículo (usar como integer no request)"

    ProdutosResponse:
      type: object
      properties:
        response:
          $ref: '#/components/schemas/ProdutosResponseData'

    ProdutosResponseData:
      type: object
      properties:
        Mensagens:
          type: array
          items:
            $ref: '#/components/schemas/Mensagem'
        isErro:
          type: boolean
        isFirstPage:
          type: boolean
        isLastPage:
          type: boolean
        page:
          type: string
        pageSize:
          type: string
        totalPage:
          type: string
        totalRows:
          type: string
        produto:
          type: array
          items:
            $ref: '#/components/schemas/ProdutoItem'

    ProdutoItem:
      type: object
      properties:
        produto_servico_codigo:
          type: string
        produto_servico_descricao:
          type: string
        produto_servico_descricao_red:
          type: string
        produto_servico_id:
          type: string
          description: "ID do produto/serviço (usar como integer no campo solicitacao_produto_id)"

    ErrorResponse:
      type: object
      properties:
        status_code:
          type: string
          example: "400"
        message:
          type: object
          properties:
            erro:
              type: string
              example: "Dados inválidos"
            detalhes:
              type: array
              items:
                type: object
                properties:
                  campo:
                    type: string
                    example: "solicitacao_tipo_processo_id"
                  mensagem:
                    type: string
                    example: "Campo obrigatório ausente"
        request_uri:
          type: string
          example: "/rest/ws_setSolicAdiantDiaria"

  responses:
    Unauthorized:
      description: Não autenticado - Token inválido ou ausente
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status_code: "401"
            message:
              erro: "Não autenticado"
              detalhes:
                - campo: "GX-Token"
                  mensagem: "Token inválido ou ausente"
            request_uri: "/rest/ws_setSolicAdiantDiaria"

    NotFound:
      description: Recurso não encontrado
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status_code: "404"
            message:
              erro: "Recurso não encontrado"
              detalhes:
                - campo: "solicitacao"
                  mensagem: "Solicitação não encontrada"
            request_uri: "/api/solicitacao-diaria"

    InternalServerError:
      description: Erro interno do servidor
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status_code: "500"
            message:
              erro: "Erro interno do servidor"
              detalhes:
                - campo: "sistema"
                  mensagem: "Erro inesperado ao processar a solicitação"
            request_uri: "/rest/ws_setSolicAdiantDiaria"

