Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Formatação de RG #429

Open
camilamaia opened this issue Oct 21, 2024 · 2 comments
Open

Formatação de RG #429

camilamaia opened this issue Oct 21, 2024 · 2 comments

Comments

@camilamaia
Copy link
Member

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.
@lbmello
Copy link

lbmello commented Oct 21, 2024

@camilamaia já tem alguém trabalhando nisso?

@camilamaia
Copy link
Member Author

@lbmello vai que é atua!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants