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

Formatação de RG

Open camilamaia opened this issue 1 year ago • 6 comments

Seu pedido de recurso está relacionado a um problema? Por favor, descreva.

Queremos uma função que formate o Registro Geral (RG) brasileiro de acordo com o estado (UF) correspondente. Cada estado pode ter um formato diferente, e a formatação correta é crucial para a padronização e validação de documentos.

Descreva a solução que você gostaria

  • Uma função format_rg, que recebe como entrada o RG (string) e a Unidade Federativa (UF) (string) e retorna o RG formatado (string).
  • Caso a entrada seja inválida, a função deve retornar None.
  • A função deve considerar os formatos de RG de todos os estados brasileiros e lidar com possíveis edge cases, como:
    • RGs com espaços extras.
    • RGs com caracteres especiais ou inválidos.
    • RGs que já estão parcialmente formatados.
    • RGs com tamanhos fora do padrão.
  • A função deve garantir que o RG esteja no formato correto antes de ser retornado.

Descreva alternativas que você considerou

  1. Seguir até o passo 8 do guia de contribuição.

  2. Como parte do passo 8, criar o arquivo: brutils-python/brutils/rg.py.

    def format_rg(rg, uf):  # type: (str, str) -> str | None
        """
        Formats a Brazilian RG (Registro Geral) based on the state (UF).
    
        This function takes a Brazilian RG and formats it according to the specific
        requirements of the given UF. It should handle various input formats and
        ensure the output is standardized.
    
        Args:
            rg (str): The RG to be formatted.
            uf (str): The state (UF) for which the RG should be formatted.
    
        Returns:
            str or None: The formatted RG if valid, or None if the input is invalid.
    
        Example:
            >>> format_rg('12.345.678-9', 'SP')
            "12.345.678-9"
            >>> format_rg('MG-12.345.678', 'MG')
            "MG-12.345.678"
            >>> format_rg('123456789', 'RJ')
            "12.345.678-9"
            >>> format_rg('A12345678', 'SP')
            None
            >>> format_rg('12.345.678', 'SP')
            None
        """
        # implementar a lógica da função aqui
    

    Importar a nova função no arquivo brutils-python/brutils/__init__.py:

    # RG Imports
    from brutils.rg import (
        format_rg,
    )
    

    E adicionar o nome da nova função na lista __all__ do mesmo arquivo brutils-python/brutils/__init__.py:

    __all__ = [
        ...
        # RG
        'format_rg',
    ]
    
  3. Como parte do passo 9, criar o arquivo de teste: brutils-python/tests/test_rg.py.

    from unittest import TestCase
    from brutils.rg import format_rg
    
    class TestRG(TestCase):
        def test_format_rg(self):
            # Testes para RGs válidos
            self.assertEqual(format_rg('12.345.678-9', 'SP'), "12.345.678-9")
            self.assertEqual(format_rg('MG-12.345.678', 'MG'), "MG-12.345.678")
            self.assertEqual(format_rg('123456789', 'RJ'), "12.345.678-9")
    
            # Testes para RGs inválidos
            self.assertIsNone(format_rg('A12345678', 'SP'))  # Letras não permitidas
            self.assertIsNone(format_rg('1234567890', 'SP'))  # RG longo demais
            self.assertIsNone(format_rg('12.345.678-10', 'SP'))  # Dígito verificador incorreto
    
            # Testes para entradas malformadas
            self.assertIsNone(format_rg('', 'SP'))  # Entrada vazia
            self.assertIsNone(format_rg('12.345.678', 'SP'))  # Formato incorreto sem dígito verificador
            self.assertIsNone(format_rg('12.345.678-9', 'XX'))  # UF inválida
            self.assertIsNone(format_rg('12 345 678-9', 'SP'))  # RG com espaços extras
            self.assertIsNone(format_rg('12.34.5678', 'SP'))  # RG com formato incorreto
    
            # Adicionar mais casos de teste se necessário
    
  4. Seguir os passos seguintes do guia de contribuição.

Contexto adicional

  • A formatação de RG é importante para garantir a padronização dos documentos e facilitar a validação em sistemas que dependem de informações precisas.
  • A função deve lidar com a normalização de texto, garantindo que o RG seja processado de maneira consistente antes da formatação final.

camilamaia avatar Oct 21 '24 14:10 camilamaia

@camilamaia já tem alguém trabalhando nisso?

lbmello avatar Oct 21 '24 15:10 lbmello

@lbmello vai que é atua!

camilamaia avatar Oct 21 '24 15:10 camilamaia

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

:warning: [EN] This issue has been inactive for 204 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!

jpviguini avatar Sep 11 '25 20:09 jpviguini

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

github-actions[bot] avatar Sep 11 '25 20:09 github-actions[bot]

Essa issue é um problema pois não existe nenhuma documentação pública disponível que defina a regra de negócio sobre os campos e os dígitos validadores. Eu abri uma solicitação de dados no Fala.br (00137.010117/2025-12) que deve ser respondida até 11/11/25. Assim que tiver alguma resposta eu atualizo por aqui.

lbmello avatar Oct 27 '25 13:10 lbmello

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