brutils-python icon indicating copy to clipboard operation
brutils-python copied to clipboard

Implementar formatação de boletos

Open ramiroluz opened this issue 1 year ago • 7 comments

Título: Implementar formatação de boletos

Descrição:

Proponho a criação de uma nova função, format_boleto, para formatar strings de boletos de acordo com padrões definidos.

Justificativa:

A formatação de boletos é uma tarefa comum em diversas aplicações financeiras e contábeis. Ao incluir essa funcionalidade na biblioteca, facilitamos o desenvolvimento de soluções que envolvam o processamento de boletos.

Funcionalidades:

  • Formatação: Converter um objeto boleto em uma linha digitável.
  • Validação: Verificar se a entrada é válida de acordo com as regras do formato escolhido.
  • Tratamento de erros: Retornar None para entradas inválidas.

Documentação:

A função terá uma docstring detalhada, incluindo:

  • Descrição da função.
  • Parâmetros de entrada.
  • Valor de retorno.
  • Exemplos de uso.
  • Casos de uso.

Testes unitários:

Serão criados testes unitários para cobrir os seguintes cenários:

  • Entradas válidas: Diferentes formatos de boletos válidos.
  • Entradas inválidas: Boletos com dados faltantes, inválidos ou em formatos não suportados.
  • Limites: Testar os limites da função (e.g., tamanho máximo da string, valores numéricos).

Exemplo de implementação (inicial):

def format_boleto(boleto_string: str) -> str:
    """Formata uma string de boleto.

    **Args:**
        boleto_string (str): A string representando o boleto.

    **Returns:**
        str: A string formatada, ou None se a entrada for inválida.

    **Raises:**
        NotImplementedError: A implementação da lógica ainda está pendente.

    **Exemplo:**
        >>> boleto = Boleto(
       ...     data_documento = datetime.date(2000, 7, 4)
       ...     data_vencimento = datetime.date(2000, 7, 4)
       ...     data_processamento = datetime.date(2012, 7, 11)
       ...     valor_documento = 550
       ...     agencia_cedente = '1102'
       ...     conta_cedente = '9000150'
       ...     convenio = 7777777
       ...     nosso_numero = str(22832563 + i)
       ...     numero_documento = str(22832563 + i)
       ... )
        >>> format_boleto(boleto)
        '04192.11107 29000.150226 83256.340593 8 10010000055000'
    """

    # Implementar a lógica da função aqui

    raise NotImplementedError

ramiroluz avatar Oct 21 '24 19:10 ramiroluz

bora!

luizcarlosom avatar Feb 04 '25 17:02 luizcarlosom

Issue 435 atribuida a luizcarlosom :rocket:" "Verifique o guia de contribuição para mais informações sobre como submeter sua Pull Request."

github-actions[bot] avatar Feb 04 '25 17:02 github-actions[bot]

:warning: [PT-BR] Esta issue está inativa há 97 dias. Os assignees serão removidos em 7 dias caso não haja atualizações.

:warning: [EN] This issue has been inactive for 97 days. The assignees will be removed in 7 days if there are no updates.

github-actions[bot] avatar May 13 '25 16:05 github-actions[bot]

bora

Fontebasso-JV avatar Oct 28 '25 03:10 Fontebasso-JV

🇧🇷 Português ✅ Issue #435 atribuída a @Fontebasso-JV. Verifique o guia de contribuição para instruções sobre como submeter sua Pull Request.

🇬🇧 English ✅ Issue #435 assigned to @Fontebasso-JV. Check the contributing guide for instructions on submitting your Pull Request.

github-actions[bot] avatar Oct 28 '25 03:10 github-actions[bot]

Fala @ramiroluz , só para confirmar o entendimento da feature, o parâmetro a ser passado é o código de barras (44 dígitos) e o output esperado é a linha digitavel (47 dígitos) ?

Fontebasso-JV avatar Oct 30 '25 01:10 Fontebasso-JV

Eu acho que a implementação modelo está incorreta. Pela descrição está que deve receber um objeto boleto. Então imagino que o object boleto possa ser criado a partir de uma string, mas não necessariamente, pode ser criado como está na docstring. Aí quando mandar formatar ele deve gerar a linha digitável para colar no campo de pagamento do banco.

Foi isso que entendi relendo a descrição.

ramiroluz avatar Oct 30 '25 15:10 ramiroluz

Boa noite pessoal! Vou deixar essa mensagem como info pois vou fechar essa issue pra gente pesquisar um pouco melhor a regra de negócio e evitar de criar algo que não esteja de acordo e pra que ninguém puxe essa issue até que a gente tenha tudo documentado certinho sobre a regra, beleza? Obrigado galera 🫶

niltonpimentel02 avatar Nov 13 '25 22:11 niltonpimentel02