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

Validação do PIS/Pasep

Open camilamaia opened this issue 1 year ago • 10 comments

Título da Issue: Validação do PIS/Pasep

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

Gostaria de validar números de PIS/Pasep, retornando um valor booleano que indica se o número é válido ou não. Isso é útil para garantir que os dados inseridos estejam corretos e possam ser utilizados em processos que exigem validação desses registros.

Descreva a solução que você gostaria

  • Uma função is_valid_pis_pasep, que recebe um número de PIS/Pasep (string) e retorna True se o número for válido e False caso contrário.
  • A função deve considerar todos os formatos válidos do PIS/Pasep e implementar a lógica de validação específica.
  • A função deve lidar com números que tenham sido formatados com símbolos (como pontos ou traços) e garantir que a validação funcione corretamente.

Regras de Validação

A validação do PIS/Pasep é realizada da seguinte forma:

  1. Formato: O PIS pode ser composto por 11 dígitos, que podem ser apresentados em formato como 123.45678.90-1 ou 12345678901. O dígito de controle é o último dígito, que é calculado com base nos 10 primeiros dígitos.

  2. Cálculo do Dígito de Controle:

    • Multiplicar os 10 primeiros dígitos do PIS por uma sequência de pesos que vai de 3 a 1.
    • Somar os resultados das multiplicações.
    • Dividir a soma por 11 e considerar o resto da divisão.
    • O dígito de controle é obtido subtraindo o resto de 11. Se o resultado for maior que 9, o dígito de controle deve ser 0.
  3. Validação: A função deve retornar True se o PIS/Pasep for válido de acordo com as regras acima e False caso contrário.

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/pis.py.

    def is_valid_pis_pasep(pis_pasep):  # type: (str) -> bool
        """
        Validates a given PIS/Pasep number.
    
        This function checks if the provided PIS/Pasep number is valid according to the official
        validation rules. It returns True if the number is valid, and False otherwise.
    
        Args:
            pis_pasep (str): The PIS/Pasep number to be validated.
    
        Returns:
            bool: True if the PIS/Pasep number is valid, False otherwise.
    
        Example:
            >>> is_valid_pis_pasep('123.45678.90-1')
            True
            >>> is_valid_pis_pasep('12345678901')
            False
            >>> is_valid_pis_pasep('PIS inválido')
            False
        """
        # implementar a lógica da função aqui
    

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

    # PIS Imports
    from brutils.pis import (
        is_valid_pis_pasep,
    )
    

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

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

    from unittest import TestCase
    from brutils.pis import is_valid_pis_pasep
    
    class TestPIS(TestCase):
        def test_is_valid_pis_pasep(self):
            # Testes para PIS válidos
            self.assertTrue(is_valid_pis_pasep('123.45678.90-1'))  # Formato com símbolos
            self.assertTrue(is_valid_pis_pasep('12345678901'))      # Formato sem símbolos
    
            # Testes para PIS inválidos
            self.assertFalse(is_valid_pis_pasep('1234567890'))  # Falta um dígito
            self.assertFalse(is_valid_pis_pasep(''))             # Vazio
            self.assertFalse(is_valid_pis_pasep('invalid pis'))  # Texto não numérico
            self.assertFalse(is_valid_pis_pasep('123.45678.90-0'))  # PIS com dígito de controle inválido
    
            # implementar mais casos de teste aqui se necessário
    
  4. Seguir os passos seguintes do guia de contribuição.

Contexto adicional

camilamaia avatar Oct 21 '24 16:10 camilamaia

Bora!

BeneBr avatar Dec 29 '24 16:12 BeneBr

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

github-actions[bot] avatar Dec 29 '24 16:12 github-actions[bot]

Reerência mais detalhada parra o cálculo de validação do digito verificador:

  • https://macoratti.net/alg_pis.htm
  • http://www.cjdinfo.com.br/publicacao-calculo-digito-verificador

BeneBr avatar Jan 07 '25 15:01 BeneBr

Lendo a codebase do projeto, percebi que já existe uma função chamada is_valid_pis no qual já verifica se um pis é valido. Acredito que ao invés de criarmos toda uma outra função, apenas incrementar essa para aceitar números, e mudar o seu nome para o que foi solicitado na issue.

BeneBr avatar Jan 08 '25 02:01 BeneBr

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

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

laistdomiciano avatar Jun 11 '25 14:06 laistdomiciano

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

github-actions[bot] avatar Jun 11 '25 14:06 github-actions[bot]

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

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

github-actions[bot] avatar Aug 17 '25 01:08 github-actions[bot]

Bora!

Cardan04 avatar Oct 27 '25 16:10 Cardan04

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

🇬🇧 English ✅ Issue #432 assigned to @Cardan04. Check the contributing guide for instructions on submitting your Pull Request.

github-actions[bot] avatar Oct 27 '25 16:10 github-actions[bot]

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