Skip to content

Conversão de Nome de Estado para UF #396

@camilamaia

Description

@camilamaia

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

Dado o nome completo de um estado brasileiro, quero obter o código de Unidade Federativa (UF) correspondente. Isso é útil para conversão de nomes completos de estados em siglas utilizadas em sistemas e documentos.

Por exemplo, converter "São Paulo" para "SP".

Descreva a solução que você gostaria

  • Uma função convert_text_to_uf, que recebe o nome completo do estado (string) e retorna o código UF correspondente.
  • A função deve ignorar maiúsculas e minúsculas, e também deve desconsiderar acentos e o caractere especial ç (considerando c também).
  • A função deve verificar se o nome completo é válido e retornar o código UF correspondente.
  • Se o nome completo não for válido, a função deve retornar None.
  • A função deve lidar com todos os estados e o Distrito Federal do Brasil.
  • A lista das UFs e seus nomes completos já existe no arquivo brutils/data/enums/uf.py. Ela deve ser reutilizada.

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/ibge/uf.py.

    def convert_text_to_uf(state_name): # type: (str) -> str | None
        """
        Converts a given Brazilian state full name to its corresponding UF code.
    
        This function takes the full name of a Brazilian state and returns the corresponding 
        2-letter UF code. It handles all Brazilian states and the Federal District. 
    
        Args:
            state_name (str): The full name of the state to be converted.
    
        Returns:
            str or None: The UF code corresponding to the full state name, 
                or None if the full state name is invalid.
    
        Example:
            >>> convert_text_to_uf('São Paulo')
            "SP"
            >>> convert_text_to_uf('Rio de Janeiro')
            "RJ"
            >>> convert_text_to_uf('Minas Gerais')
            "MG"
            >>> convert_text_to_uf('Distrito Federal')
            "DF"
            >>> convert_text_to_uf('Estado Inexistente')
            None
        """
        # implementar a lógica da função aqui

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

    # UF Imports    
    from brutils.ibge.uf import (
        convert_text_to_uf,
    )

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

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

    from unittest import TestCase
    from brutils.ibge.uf import convert_text_to_uf
    
    class TestUF(TestCase):
        def test_convert_text_to_uf(self):
            # Testes para nomes válidos
            self.assertEqual(convert_text_to_uf('São Paulo'), "SP")
            self.assertEqual(convert_text_to_uf('Rio de Janeiro'), "RJ")
            self.assertEqual(convert_text_to_uf('Minas Gerais'), "MG")
            self.assertEqual(convert_text_to_uf('Distrito Federal'), "DF")
            self.assertEqual(convert_text_to_uf('são paulo'), "SP")  # Teste com minúsculas
            self.assertEqual(convert_text_to_uf('riO de janeiRo'), "RJ")  # Teste com misturas de maiúsculas e minúsculas
            self.assertEqual(convert_text_to_uf('minas gerais'), "MG")  # Teste com minúsculas
            self.assertEqual(convert_text_to_uf('sao paulo'), "SP") # Teste sem acento
            
            # Testes para nomes inválidos
            self.assertIsNone(convert_text_to_uf('Estado Inexistente'))  # Nome não existe
            self.assertIsNone(convert_text_to_uf(''))  # Nome vazio
            self.assertIsNone(convert_text_to_uf('123'))  # Nome com números
            self.assertIsNone(convert_text_to_uf('São Paulo SP'))  # Nome com sigla incluída
            self.assertIsNone(convert_text_to_uf('A'))  # Nome com letra não mapeada
            self.assertIsNone(convert_text_to_uf('ZZZ'))  # Nome com mais de 2 letras
    
            # implementar mais casos de teste aqui se necessário
  4. Seguir os passos seguintes do guia de contribuição.

Contexto adicional

  • A lista de estados e suas siglas é definida pelo Instituto Brasileiro de Geografia e Estatística (IBGE). Para mais detalhes, consulte o site do IBGE.
  • A função deve lidar com a normalização de texto, incluindo a remoção de acentos e a conversão para minúsculas para garantir que o texto seja comparado de forma consistente.

Metadata

Metadata

Labels

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions