From 11a34a8522a6a9be0d1ce33881d3a57c4d185e41 Mon Sep 17 00:00:00 2001 From: Marcel Fox Date: Mon, 16 Oct 2023 17:48:35 -0300 Subject: [PATCH] =?UTF-8?q?Adicionando=20fun=C3=A7=C3=A3o=20is=5Fvalid=5Fp?= =?UTF-8?q?rocesso=5Fjuridico=20#207=20(#248)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marcel Cattaneo --- CHANGELOG.md | 1 + README.md | 18 ++++++++++++++++++ README_EN.md | 18 ++++++++++++++++++ brutils/__init__.py | 1 + brutils/legal_process.py | 26 ++++++++++++++++++++++++++ tests/test_legal_process.py | 14 ++++++++++++++ 6 files changed, 78 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15b3cd7..4ae6efd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Utilitário `is_valid_titulo_eleitoral` [#235](https://github.com/brazilian-utils/brutils-python/pull/235) - Suporte ao Python 3.12 [#245](https://github.com/brazilian-utils/brutils-python/pull/245) +- Utilitário `is_valid_processo_juridico` [#207](https://github.com/brazilian-utils/brutils-python/pull/207) - Utilitário `generate_processo_juridico` [#208](https://github.com/brazilian-utils/brutils-python/pull/208) - Utilitário `get_license_plate_format` [#243](https://github.com/brazilian-utils/brutils-python/pull/243) - Utilitário `is_valid_license_plate` [#237](https://github.com/brazilian-utils/brutils-python/pull/237) diff --git a/README.md b/README.md index 62b8a6e..3b6c505 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,7 @@ False - [format_processo_juridico](#format_processo_juridico) - [remove\_symbols\_processo\_juridico](#remove_symbols_processo_juridico) - [generate_processo_juridico](#generate_processo_juridico) + - [is_valid_processo_juridico](#is_valid_processo_juridico) ## CPF @@ -538,6 +539,23 @@ Gera um número de processo válido de acordo com o ano informado e o órgão. P >>> ``` +## is_valid_processo_juridico + +Verifica se o número de um processo informado por string é válido ou não. + +```python +>>> from brutils import is_valid_processo_juridico +>>> is_valid_processo_juridico('10188748220234018200') +True +>>> is_valid_processo_juridico('45532346920234025107') +True +>>> is_valid_processo_juridico('00000000000000000000') +False +>>> is_valid_processo_juridico('455323423QQWEQWSsasd&*(()') +False +>>> +``` + # Novos Utilitários e Reportar Bugs Caso queira sugerir novas funcionalidades ou reportar bugs, basta criar diff --git a/README_EN.md b/README_EN.md index bdc58ae..9058de2 100644 --- a/README_EN.md +++ b/README_EN.md @@ -84,6 +84,7 @@ False - [format_processo_juridico](#format_processo_juridico) - [remove\_symbols\_processo\_juridico](#remove_symbols_processo_juridico) - [generate_processo_juridico](#generate_processo_juridico) + - [is_valid_processo_juridico](#is_valid_processo_juridico) ## CPF @@ -546,6 +547,23 @@ Generates a valid legal process number according to the arguments of _ano_ which >>> ``` +## is_valid_processo_juridico + +Checks if a string containing a legal process number is valid or not. + +```python +>>> from brutils import is_valid_processo_juridico +>>> is_valid_processo_juridico('10188748220234018200') +True +>>> is_valid_processo_juridico('45532346920234025107') +True +>>> is_valid_processo_juridico('00000000000000000000') +False +>>> is_valid_processo_juridico('455323423QQWEQWSsasd&*(()') +False +>>> +``` + # Feature Request and Bug Report If you want to suggest new features or report bugs, simply create diff --git a/brutils/__init__.py b/brutils/__init__.py index 9b2ba46..8f4ea93 100644 --- a/brutils/__init__.py +++ b/brutils/__init__.py @@ -51,5 +51,6 @@ from brutils.legal_process import ( format_processo_juridico, generate_processo_juridico, + is_valid_processo_juridico, remove_symbols as remove_symbols_processo_juridico, ) diff --git a/brutils/legal_process.py b/brutils/legal_process.py index e311ae0..3eb5715 100644 --- a/brutils/legal_process.py +++ b/brutils/legal_process.py @@ -62,3 +62,29 @@ def _checksum(basenum): # type: (int) -> str `basenum` needs to be a digit without the verification id. """ return str(97 - ((int(basenum) * 100) % 97)).zfill(2) + + +def is_valid_processo_juridico(legal_process_id): # type: (str) -> bool + """ + Returns whether or not the verifying checksum digits of the given Legal + Process ID number match it's varification digit and if the numbers match + a valid ID from a legal process. + """ + clean_legal_process_id = remove_symbols(legal_process_id) + DD = clean_legal_process_id[7:9] + J = clean_legal_process_id[13:14] + TR = clean_legal_process_id[14:16] + OOOO = clean_legal_process_id[16:] + with open("brutils/data/legal_process_ids.json") as file: + legal_process_ids = json.load(file) + process = legal_process_ids.get(f"orgao_{J}") + if not process: + return False + valid_process = int(TR) in process.get("id_tribunal") and int( + OOOO + ) in process.get("id_foro") + + return ( + _checksum(int(clean_legal_process_id[0:7] + clean_legal_process_id[9:])) + == DD + ) and valid_process diff --git a/tests/test_legal_process.py b/tests/test_legal_process.py index d4e9c82..a76fa4d 100644 --- a/tests/test_legal_process.py +++ b/tests/test_legal_process.py @@ -6,6 +6,7 @@ remove_symbols, generate_processo_juridico, _checksum, + is_valid_processo_juridico, ) @@ -61,6 +62,19 @@ def test_check_sum(self): self.assertEqual(_checksum(546611720238150014), "77") self.assertEqual(_checksum(403818720238230498), "50") + def test_is_valid_processo_juridico(self): + self.assertTrue(is_valid_processo_juridico("10188748220234018200")) + self.assertTrue(is_valid_processo_juridico("45532346920234025107")) + self.assertFalse(is_valid_processo_juridico("10188748220239918200")) + self.assertFalse(is_valid_processo_juridico("00000000000000000000")) + self.assertFalse(is_valid_processo_juridico("455323469202340251")) + self.assertFalse( + is_valid_processo_juridico("455323469202340257123123123") + ) + self.assertFalse( + is_valid_processo_juridico("455323423QQWEQWSsasd&*(()") + ) + if __name__ == "__main__": unittest.main()