Source code for pypix_api.banks.methods.cob_methods

"""
pypix_api.banks.cob_methods
---------------------------

Este módulo implementa a classe `CobMethods`, que fornece métodos para operações de cobrança imediata (COB) do PIX, conforme especificação do Banco Central do Brasil.

A classe `CobMethods` é utilizada como base para integração com APIs bancárias que suportam o PIX, permitindo criar, revisar, consultar e listar cobranças imediatas. Os métodos abstraem detalhes de requisições HTTP, tratamento de erros e montagem de parâmetros, facilitando a integração de sistemas Python com provedores bancários.

Principais funcionalidades:
- Criação de cobrança imediata (com txid definido ou automático)
- Revisão de cobrança existente
- Consulta de cobrança por txid
- Consulta de múltiplas cobranças por período e filtros

Esta classe é herdada por implementações específicas de bancos (ex: Banco do Brasil, Sicoob).

Dependências:
- session HTTP compatível (ex: requests.Session)
- Métodos auxiliares: `_create_headers()`, `get_base_url()`

Exemplo de uso:
    class MeuBanco(CobMethods):
        ...

    banco = MeuBanco()
    resposta = banco.criar_cob(txid="meu-txid", body={...})

"""

from typing import Any


[docs] class CobMethods: # pylint: disable=E1101 """ Classe que implementa os métodos para operações de cobrança imediata (COB) do PIX. Esta classe é herdada pela BankPixAPIBase. """
[docs] def criar_cob(self, txid: str, body: dict[str, Any]) -> dict[str, Any]: """ Criar cobrança imediata com txid específico. Endpoint para criar uma cobrança imediata com um txid definido. Args: txid: Identificador da transação body: Dados da cobrança imediata Returns: dict contendo os dados da cobrança criada Raises: HTTPError: Para erros 400, 403, 404, 503 """ headers = self._create_headers() url = f'{self.get_base_url()}/cob/{txid}' resp = self.session.put(url, headers=headers, json=body) self._handle_error_response(resp) return resp.json()
[docs] def criar_cob_auto_txid(self, body: dict[str, Any]) -> dict[str, Any]: """ Criar cobrança imediata com txid automático. Endpoint para criar uma cobrança imediata onde o txid é definido pelo PSP. Args: body: Dados da cobrança imediata Returns: dict contendo os dados da cobrança criada Raises: HTTPError: Para erros 400, 403, 503 """ headers = self._create_headers() url = f'{self.get_base_url()}/cob' resp = self.session.post(url, headers=headers, json=body) self._handle_error_response(resp) return resp.json()
[docs] def revisar_cob(self, txid: str, body: dict[str, Any]) -> dict[str, Any]: """ Revisar cobrança imediata. Endpoint para revisar uma cobrança imediata existente. A revisão deve ser incrementada em 1. Args: txid: Identificador da transação body: Dados da cobrança revisada Returns: dict contendo os dados da cobrança revisada Raises: HTTPError: Para erros 400, 403, 404, 503 """ headers = self._create_headers() url = f'{self.get_base_url()}/cob/{txid}' resp = self.session.patch(url, headers=headers, json=body) self._handle_error_response(resp) return resp.json()
[docs] def consultar_cob(self, txid: str, revisao: int | None = None) -> dict[str, Any]: """ Consultar cobrança imediata. Endpoint para consultar uma cobrança através de um determinado txid. Args: txid: Identificador da transação revisao: Número da revisão (opcional) Returns: dict contendo os dados da cobrança Raises: HTTPError: Para erros 403, 404, 503 """ headers = self._create_headers() url = f'{self.get_base_url()}/cob/{txid}' params = {} if revisao is not None: params['revisao'] = revisao resp = self.session.get(url, headers=headers, params=params) self._handle_error_response(resp) return resp.json()
[docs] def consultar_cobs( self, inicio: str, fim: str, cpf: str | None = None, cnpj: str | None = None, location_presente: bool | None = None, status: str | None = None, pagina_atual: int | None = None, itens_por_pagina: int | None = None, ) -> dict[str, Any]: """ Consultar lista de cobranças imediatas. Endpoint para consultar cobranças imediatas através de parâmetros como início, fim, cpf, cnpj e status. Args: inicio: Data de início da consulta (formato ISO) fim: Data de fim da consulta (formato ISO) cpf: CPF do devedor (11 dígitos). Não pode ser usado com CNPJ cnpj: CNPJ do devedor (14 dígitos). Não pode ser usado com CPF location_presente: Filtro por presença de location status: Status da cobrança para filtro pagina_atual: Página atual para paginação itens_por_pagina: Quantidade de itens por página Returns: dict contendo a lista de cobranças Raises: HTTPError: Para erros 403, 503 ValueError: Se CPF e CNPJ forem informados simultaneamente """ if cpf and cnpj: raise ValueError('CPF e CNPJ não podem ser utilizados simultaneamente') headers = self._create_headers() url = f'{self.get_base_url()}/cob' params = {'inicio': inicio, 'fim': fim} # Adiciona parâmetros opcionais se fornecidos if cpf: params['cpf'] = cpf if cnpj: params['cnpj'] = cnpj if location_presente is not None: params['locationPresente'] = str(location_presente).lower() if status: params['status'] = status if pagina_atual is not None: params['paginacao.paginaAtual'] = str(pagina_atual) if itens_por_pagina is not None: params['paginacao.itensPorPagina'] = str(itens_por_pagina) resp = self.session.get(url, headers=headers, params=params) self._handle_error_response(resp) return resp.json()