Skip to content

Formatação de RG #429

@camilamaia

Description

@camilamaia

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions