---
openapi: 3.0.3
info:
  title: sabesp-faturas API
  version: 1.0.0
servers:
- url: https://sabesp-faturas.api-hml.rota.sp.gov.br
  description: Homologação
security:
- IdpSP: []
paths:
  /acordos:
    get:
      tags:
      - Agência Virtual
      summary: Consulta os acordos associados ao código de fornecimento.
      parameters:
      - name: codigoFornecimento
        in: query
        description: Código de fornecimento associado ao acordo.
        required: true
        schema:
          type: string
      - name: eCpfDoTitular
        in: query
        description: CPF do titular
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Consultado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Acordos'
        "400":
          $ref: '#/components/responses/ValidationError'
        "401":
          $ref: '#/components/responses/UnauthorizedError'
        "403":
          description: Token informado não tem acesso a informação.
        "500":
          $ref: '#/components/responses/InternalServerError'
      security:
      - IdpSP:
        - api:integrador.sabesp.faturas
  /faturas:
    get:
      tags:
      - Agência Virtual
      summary: Consulta as faturas associadas ao código de fornecimento.
      parameters:
      - name: canal
        in: query
        description: Identificador do canal de consulta.
        required: true
        schema:
          type: string
      - name: codigoFornecimento
        in: query
        description: Código de fornecimento associado ao acordo.
        required: true
        schema:
          type: string
      - name: eCpfDoTitular
        in: query
        description: CPF do titular
        required: true
        schema:
          type: string
      responses:
        default:
          description: Erro inesperado
        "200":
          description: Consultado com sucesso.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Faturas'
        "204":
          description: Consulta realizada com sucesso. Nenhum objeto encontrado com
            os dados informados.
        "400":
          $ref: '#/components/responses/ValidationError'
        "401":
          $ref: '#/components/responses/UnauthorizedError'
        "403":
          description: Token informado não tem acesso a informação.
        "500":
          $ref: '#/components/responses/InternalServerError'
      security:
      - IdpSP:
        - api:integrador.sabesp.faturas
  /acordos/faturas:
    get:
      tags:
      - Agência Virtual
      summary: Consulta as faturas de cada acordo.
      parameters:
      - name: codigoAcordo
        in: query
        description: Código associado ao acordo.
        required: true
        schema:
          type: string
      - name: cpfTitular
        in: query
        description: CPF do titular
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Consultado com sucesso.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Faturas'
        "204":
          description: Consulta realizada com sucesso. Nenhum objeto encontrado com
            os dados informados.
        "400":
          $ref: '#/components/responses/ValidationError'
        "401":
          $ref: '#/components/responses/UnauthorizedError'
        "403":
          description: Token informado não tem acesso a informação.
        "500":
          $ref: '#/components/responses/InternalServerError'
      security:
      - IdpSP:
        - api:integrador.sabesp.faturas
  /situacoes:
    get:
      tags:
      - Agência Virtual
      summary: Valida o acordo conforme o código de fornecimento e valida a associação
        do CPF ao código de fornecimento.
      parameters:
      - name: tipo
        in: query
        description: Tipo de validação.
        required: true
        schema:
          enum:
          - VALIDA_CPF
          - VALIDA_ACORDO
          type: string
      - name: codigoFornecimento
        in: query
        description: Código de fornecimento.
        required: true
        schema:
          type: string
      - name: cpfTitutar
        in: query
        description: CPF do titular
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Consultado com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  valido:
                    type: boolean
                    example: true
        "204":
          description: Consulta realizada com sucesso. Nenhum objeto encontrado com
            os dados informados.
        "400":
          $ref: '#/components/responses/ValidationError'
        "401":
          $ref: '#/components/responses/UnauthorizedError'
        "403":
          description: Token informado não tem acesso a informação.
        "500":
          $ref: '#/components/responses/InternalServerError'
      security:
      - IdpSP:
        - api:integrador.sabesp.faturas
  /segunda-via:
    post:
      tags:
      - Agência Virtual
      summary: Gera a segunda via da fatura nas versões completa e resumida.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SegundaViaRequest'
        required: true
      responses:
        "201":
          description: Consultado com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SegundaViaResponse'
        "206":
          description: Segunda via indisponível para as informações solicitadas.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SegundaViaSemArquivoResponse'
        "400":
          $ref: '#/components/responses/ValidationError'
        "401":
          $ref: '#/components/responses/UnauthorizedError'
        "403":
          description: Token informado não tem acesso a informação.
        "500":
          $ref: '#/components/responses/InternalServerError'
      security:
      - IdpSP:
        - api:integrador.sabesp.faturas
components:
  schemas:
    Acordos:
      type: object
      properties:
        serviceResult:
          type: array
          items:
            type: object
            properties:
              codigoAcordo:
                type: string
                example: string
              numeroAcordo:
                type: string
                example: string
              quantidadeParcelas:
                type: integer
                example: 0
              parcelasPendentes:
                type: integer
                example: 0
              valorTotalAcordo:
                type: integer
                example: 0
              valorPendentes:
                type: integer
                example: 0
              statusAcordo:
                type: string
                example: string
              dataParcelamento:
                type: string
                example: string
    Faturas:
      type: object
      properties:
        codigoPagamento:
          type: string
          example: string
        numeroDocumento:
          type: string
          example: string
        situacaoDocumento:
          type: string
          example: string
        tipoDocumento:
          type: string
          example: string
        statusFatura:
          type: string
          example: string
        estadoSaldoPagamento:
          type: string
          example: string
        contestacao:
          type: string
          example: string
        cobrancaJuridica:
          type: boolean
          example: true
        codigoExtrato:
          type: string
          example: string
        statusExtrato:
          type: boolean
          example: true
        pagamentoInformado:
          type: string
          example: string
        acordo:
          type: string
          example: string
        valor:
          type: number
          example: 12.2
        dataVencimento:
          type: string
          example: 2022-01-24T17:08:02.572Z
        dataInicioCompetencia:
          type: string
          example: 2022-01-24T17:08:02.572Z
        dataFinCompetencia:
          type: string
          example: 2022-01-24T17:08:02.572Z
        dataEmissao:
          type: string
          example: 2022-01-24T17:08:02.572Z
        codigoDeBarras:
          type: string
          example: string
        debitoAutomatico:
          type: boolean
          example: true
        numeroParcela:
          type: integer
          example: 0
        taxaLixo:
          type: number
          example: 12.2
        mensagem:
          type: string
          example: string
        situacaoDaFatura:
          type: string
          example: string
    SegundaViaRequest:
      required:
      - codigoFornecimento
      - codelineFaturas
      type: object
      properties:
        codigoFornecimento:
          type: string
          example: string
        codelineFaturas:
          type: array
          example:
          - string
        motivoSolicitacao:
          type: string
          example: "0"
        formaEntrega:
          type: string
          example: "0"
        email:
          type: string
          example: string
        resume:
          type: boolean
          example: true
        totem:
          type: boolean
          example: true
    SegundaViaResponse:
      type: object
      properties:
        protocolo:
          type: string
          example: "2412689537"
        codigoBarras:
          type: string
          example: string
        documentoLink:
          format: uri
          pattern: "^(https:\\/\\/)?(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\\
            b([-a-zA-Z0-9@:%_\\+.~#?&\\/\\/=]*)$"
          type: string
          example: https://arquivos.api-dev.rota.sp.gov.br/ds/23/86f35a45-ac5e-48ac-b91d-ff1d957ba252
    SegundaViaSemArquivoResponse:
      type: object
      properties:
        protocolo:
          type: string
          example: "2412689537"
        codigoBarras:
          type: string
          example: ""
        documentoLink:
          type: string
          example: ""
        mensagem:
          type: string
          example: ""
  responses:
    NoContent:
      description: Consulta realizada com sucesso. Nenhum objeto encontrado com os
        dados informados.
    UnauthorizedError:
      description: Access token é invalido ou expirado
    ForbiddenError:
      description: Token informado não tem acesso a informação
    ValidationError:
      description: Erro de validação
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                enum:
                - "400"
                type: string
              trace:
                description: Trace ID
                type: string
                example: f2fa5f28-9621-4683-8b93-5bf039ee9470
              codigo:
                description: "Codigo de erro, (código será dinâmico de acordo com\
                  \ erro)"
                type: string
                example: 1
              messages:
                type: array
                items:
                  description: "Mensagens de erro, (mensagem será dinâmica de acordo\
                    \ com erro)"
                  type: string
                  example: Dados informado é inválido
    InternalServerError:
      description: Erro interno.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                enum:
                - "500"
                type: string
              trace:
                description: Trace ID
                type: string
                example: f2fa5f28-9621-4683-8b93-5bf039ee9471
              messages:
                type: array
                items:
                  description: "Mensagens de erro, (mensagem será dinâmica de acordo\
                    \ com erro)"
                  type: string
                  example: Ocorreu um erro ao tentar acessar o recurso
  securitySchemes:
    IdpSP:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://rhsso.idp-hml.sp.gov.br/auth/realms/idpsp/protocol/openid-connect/token
          scopes:
            api:integrador.sabesp.faturas: Scope utilizado para as operações
        authorizationCode:
          authorizationUrl: https://rhsso.idp-hml.sp.gov.br/auth/realms/idpsp/protocol/openid-connect/auth
          tokenUrl: https://rhsso.idp-hml.sp.gov.br/auth/realms/idpsp/protocol/openid-connect/token
          scopes:
            api:integrador.sabesp.faturas: Scope utilizado para as operações
    SecurityScheme:
      type: http
      description: Authentication
      scheme: basic
