openapi: 3.0.3
info:
  title: AppCentral - API REST
  description: Documentação da API REST do AppCentral
  version: 1.0.0

servers:
  - url: https://wf.coplan.inf.br/appcentral/rest
    description: Servidor HOMOLOGACAO

paths:
  /clientes:
    post:
      summary: Listar cliente
      description: |
        POST para Listar clientes.
        Requer os headers clientID, chave e GX-SYSTEM-NAME.
      operationId: listarCliente
      tags:
        - Clientes
      parameters:
        - name: clientID
          in: header
          required: true
          description: Identificador do cliente
          schema:
            type: integer
            example: 123
        - name: chave
          in: header
          required: true
          description: Chave de autenticação (criptografada)
          schema:
            type: string
            example: "abc123"
        - name: GX-SYSTEM-NAME
          in: header
          required: true
          description: Nome do cliente/sistema de origem. Valores aceitos - PORTALFORNECEDOR, ADMINISTRATIVO, TRIBUTARIO
          schema:
            type: string
            enum:
              - PORTALFORNECEDOR
              - ADMINISTRATIVO
              - TRIBUTARIO
            example: PORTALFORNECEDOR
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: OK
        '400':
          description: Requisição inválida
        '401':
          description: Não autorizado
        '500':
          description: Erro interno do servidor

  /auth:
    post:
      summary: Autenticação
      description: |
        Autenticação com dbName, usuário e senha.
        Requer os headers clientID, chave e GX-SYSTEM-NAME.
      operationId: auth
      tags:
        - Autenticação
      parameters:
        - name: clientID
          in: header
          required: true
          description: Identificador do cliente
          schema:
            type: integer
            example: 123
        - name: chave
          in: header
          required: true
          description: Chave de autenticação (criptografada)
          schema:
            type: string
            example: "abc123"
        - name: GX-SYSTEM-NAME
          in: header
          required: true
          description: Nome do cliente/sistema de origem. Valores aceitos - PORTALFORNECEDOR, ADMINISTRATIVO, TRIBUTARIO
          schema:
            type: string
            enum:
              - PORTALFORNECEDOR
              - ADMINISTRATIVO
              - TRIBUTARIO
            example: TRIBUTARIO
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestAuth'
      responses:
        '200':
          description: Autenticação realizada com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseAuth'
        '400':
          description: Requisição inválida
        '401':
          description: Não autorizado
        '500':
          description: Erro interno do servidor

  /Ws_Unidade_Gestora_Lista:
    post:
      summary: Listar unidades gestoras
      description: Retorna a lista de unidades gestoras conforme parâmetros enviados.
      operationId: listaUnidadeGestora
      tags:
        - Unidade Gestora
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestUnidadeGestoraLista'
      responses:
        '200':
          description: Lista de unidades gestoras
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseUnidadeGestoraLista'
        '400':
          description: Requisição inválida
        '401':
          description: Não autorizado
        '500':
          description: Erro interno do servidor

  /Ws_IntegraGovBr:
    post:
      summary: Integração Gov.br
      description: Endpoint para integração com Gov.br.
      operationId: integraGovBr
      tags:
        - Integra Gov.br
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestIntegraGovBr'
      responses:
        '200':
          description: Retorno da integração Gov.br
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseIntegraGovBr'
        '400':
          description: Requisição inválida
        '401':
          description: Não autorizado
        '500':
          description: Erro interno do servidor

components:
  schemas:
    RequestAuth:
      type: object
      required:
        - dbName
        - user
        - pass
      properties:
        dbName:
          type: string
          example: ponteselacerda
        user:
          type: string
          example: "61423195000177"
        pass:
          type: string
          example: "123"

    TokenUgItem:
      type: object
      properties:
        token:
          type: string
        md5:
          type: string
        unidade_gestora_id:
          type: integer
          example: 0
        unidade_gestora_descricao:
          type: string

    ResponseAuth:
      type: object
      properties:
        token:
          type: string
        md5:
          type: string
        token_ug:
          type: array
          items:
            $ref: '#/components/schemas/TokenUgItem'
        isErro:
          type: boolean
          example: true
        Mensagens:
          type: array
          items:
            $ref: '#/components/schemas/Mensagem'

    Sdt_Parm_IntegraGovBr:
      type: object
      required:
        - clienteID
        - chave
        - cliente
        - nomeParametro
        - ug_id
      properties:
        clienteID:
          type: integer
          example: 0
        chave:
          type: string
          example: "string"
        cliente:
          type: string
          example: "string"
        nomeParametro:
          type: string
          example: "string"
        ug_id:
          type: integer
          example: 0

    RequestIntegraGovBr:
      type: object
      required:
        - Sdt_Parm_IntegraGovBr
      properties:
        Sdt_Parm_IntegraGovBr:
          $ref: '#/components/schemas/Sdt_Parm_IntegraGovBr'

    Sdt_Retorno_IntegraGovBr:
      type: object
      properties:
        retorno:
          type: string

    ResponseIntegraGovBr:
      type: object
      properties:
        Sdt_Retorno_IntegraGovBr:
          $ref: '#/components/schemas/Sdt_Retorno_IntegraGovBr'
        isErro:
          type: boolean
          example: true
        Mensagens:
          type: array
          items:
            $ref: '#/components/schemas/Mensagem'

    Sdt_Parm_Unidade_Gestora:
      type: object
      required:
        - clienteID
        - chave
        - cliente
        - login
        - senha
        - ug_id
      properties:
        clienteID:
          type: integer
          example: 123
        chave:
          type: string
          example: "abc123"
        cliente:
          type: string
          example: tapurah
        login:
          type: string
          example: "012345678901"
        senha:
          type: string
          example: "123"
        ug_id:
          type: integer
          example: 1

    RequestUnidadeGestoraLista:
      type: object
      required:
        - Sdt_Parm_Unidade_Gestora
      properties:
        Sdt_Parm_Unidade_Gestora:
          $ref: '#/components/schemas/Sdt_Parm_Unidade_Gestora'

    UnidadeGestoraItem:
      type: object
      properties:
        unidade_gestora_id:
          type: integer
          example: 0
        unidade_gestora_descricao:
          type: string
        unidade_gestora_cnpj:
          type: string
        unidade_gestora_tipo_entidade:
          type: integer
          example: 0
        unidade_gestora_logo:
          type: string
        unidade_gestora_brasao:
          type: string
        ug_logradouro_id:
          type: integer
          example: 0
        ug_logradouro_cep:
          type: string
        ug_logradouro_end:
          type: string
        ug_logradouro_bairro_id:
          type: integer
          example: 0
        ug_logradouro_bairro_nome:
          type: string
        ug_logradouro_cidade_id:
          type: integer
          example: 0
        ug_logradouro_cidade_nome:
          type: string
        ug_logradouro_cidade_ibge:
          type: string
        ug_logradouro_estado_id:
          type: integer
          example: 0
        ug_logradouro_estado_nome:
          type: string
        ug_logradouro_estado_sigla:
          type: string
        ug_logradouro_pais_id:
          type: integer
          example: 0
        ug_logradouro_pais_nome:
          type: string
        unidade_gestora_end_numero:
          type: string
        unidade_gestora_telefone:
          type: string
        unidade_gestora_email:
          type: string
        unidade_gestora_cnpj_mascarado:
          type: string
        unidade_gestora_website:
          type: string
        unidade_gestora_status:
          type: integer
          example: 0
        unidade_gestora_img_app_path:
          type: string
        unidade_gestora_img_cab_path:
          type: string
        unidade_gestora_logo_rod_path:
          type: string
        unidade_gestora_brasao_path:
          type: string

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

    ResponseUnidadeGestoraLista:
      type: object
      properties:
        Sdt_Retorno_Unidade_Gestora:
          type: array
          items:
            $ref: '#/components/schemas/UnidadeGestoraItem'
        isErro:
          type: boolean
          example: true
        Mensagens:
          type: array
          items:
            $ref: '#/components/schemas/Mensagem'
