brutils 2.3.0__tar.gz → 2.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. {brutils-2.3.0 → brutils-2.5.0}/PKG-INFO +278 -11
  2. {brutils-2.3.0 → brutils-2.5.0}/README.md +275 -8
  3. {brutils-2.3.0 → brutils-2.5.0}/brutils/__init__.py +36 -1
  4. {brutils-2.3.0 → brutils-2.5.0}/brutils/cep.py +10 -8
  5. brutils-2.5.0/brutils/cnh.py +86 -0
  6. {brutils-2.3.0 → brutils-2.5.0}/brutils/cnpj.py +71 -16
  7. {brutils-2.3.0 → brutils-2.5.0}/brutils/cpf.py +9 -9
  8. {brutils-2.3.0 → brutils-2.5.0}/brutils/email.py +1 -1
  9. {brutils-2.3.0 → brutils-2.5.0}/brutils/ibge/uf.py +59 -0
  10. brutils-2.5.0/brutils/legal_nature.py +165 -0
  11. {brutils-2.3.0 → brutils-2.5.0}/brutils/legal_process.py +11 -8
  12. {brutils-2.3.0 → brutils-2.5.0}/brutils/license_plate.py +14 -12
  13. brutils-2.5.0/brutils/passport.py +107 -0
  14. {brutils-2.3.0 → brutils-2.5.0}/brutils/phone.py +13 -13
  15. brutils-2.5.0/brutils/renavam.py +56 -0
  16. {brutils-2.3.0 → brutils-2.5.0}/brutils/voter_id.py +11 -10
  17. {brutils-2.3.0 → brutils-2.5.0}/pyproject.toml +4 -4
  18. {brutils-2.3.0 → brutils-2.5.0}/LICENSE +0 -0
  19. {brutils-2.3.0 → brutils-2.5.0}/brutils/currency.py +0 -0
  20. {brutils-2.3.0 → brutils-2.5.0}/brutils/data/cities_code.json +0 -0
  21. {brutils-2.3.0 → brutils-2.5.0}/brutils/data/enums/__init__.py +0 -0
  22. {brutils-2.3.0 → brutils-2.5.0}/brutils/data/enums/better_enum.py +0 -0
  23. {brutils-2.3.0 → brutils-2.5.0}/brutils/data/enums/months.py +0 -0
  24. {brutils-2.3.0 → brutils-2.5.0}/brutils/data/enums/uf.py +0 -0
  25. {brutils-2.3.0 → brutils-2.5.0}/brutils/data/legal_process_ids.json +0 -0
  26. {brutils-2.3.0 → brutils-2.5.0}/brutils/date_utils.py +0 -0
  27. {brutils-2.3.0 → brutils-2.5.0}/brutils/exceptions/__init__.py +0 -0
  28. {brutils-2.3.0 → brutils-2.5.0}/brutils/exceptions/cep.py +0 -0
  29. {brutils-2.3.0 → brutils-2.5.0}/brutils/ibge/__init__.py +0 -0
  30. {brutils-2.3.0 → brutils-2.5.0}/brutils/ibge/municipality.py +0 -0
  31. {brutils-2.3.0 → brutils-2.5.0}/brutils/pis.py +0 -0
  32. {brutils-2.3.0/brutils/types → brutils-2.5.0/brutils/schemas}/__init__.py +0 -0
  33. {brutils-2.3.0/brutils/types → brutils-2.5.0/brutils/schemas}/address.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brutils
3
- Version: 2.3.0
3
+ Version: 2.5.0
4
4
  Summary: Utils library for specific Brazilian businesses
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -24,17 +24,19 @@ Classifier: Topic :: Office/Business
24
24
  Classifier: Topic :: Software Development :: Internationalization
25
25
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
26
  Requires-Dist: coverage (>=7.2.7,<8.0.0)
27
- Requires-Dist: holidays (>=0.58,<0.59)
27
+ Requires-Dist: holidays (>=0.58,<0.99)
28
28
  Requires-Dist: num2words (==0.5.14)
29
- Project-URL: Repository, https://github.com/brazilian-utils/brutils
29
+ Project-URL: Repository, https://github.com/brazilian-utils/python
30
30
  Description-Content-Type: text/markdown
31
31
 
32
+ ![Logo do Brazilian Utils](https://github.com/brazilian-utils/brand/raw/main/github-hero/github-hero-python.png)
33
+
32
34
  <div align="center">
33
- <h1>🇧🇷 Brazilian Utils</h1>
34
35
 
35
- <p>Utils library for Brazilian-specific businesses.</p>
36
+ <p>Biblioteca de utilitários projetada para validar, gerar e manipular dados de acordo com as particularidades do Brasil</p>
36
37
 
37
- [![codecov](https://codecov.io/gh/brazilian-utils/brutils-python/branch/main/graph/badge.svg?token=5KNECS8JYF)](https://codecov.io/gh/brazilian-utils/brutils-python)
38
+ [![codecov](https://codecov.io/gh/brazilian-utils/python/branch/main/graph/badge.svg)](https://codecov.io/gh/brazilian-utils/python)
39
+ [![Check Lint](https://github.com/brazilian-utils/python/actions/workflows/check-lint.yml/badge.svg?branch=main)](https://github.com/brazilian-utils/python/actions/workflows/check-lint.yml?query=branch%3Amain)
38
40
  [![Downloads per Month](https://shields.io/pypi/dm/brutils)](https://pypistats.org/packages/brutils)
39
41
  [![Package version](https://shields.io/pypi/v/brutils)](https://pypi.org/project/brutils/)
40
42
 
@@ -71,7 +73,6 @@ False
71
73
  ```
72
74
 
73
75
  # Utilitários
74
-
75
76
  - [CPF](#cpf)
76
77
  - [is\_valid\_cpf](#is_valid_cpf)
77
78
  - [format\_cpf](#format_cpf)
@@ -99,6 +100,8 @@ False
99
100
  - [is\_valid\_email](#is_valid_email)
100
101
  - [Data](#date)
101
102
  - [convert\_date\_to_text](#convert_date_to_text)
103
+ - [CNH](#cnh)
104
+ - [is\_valid\_cnh](#is_valid_cnh)
102
105
  - [Placa de Carro](#placa-de-carro)
103
106
  - [is\_valid\_license\_plate](#is_valid_license_plate)
104
107
  - [format\_license\_plate](#format_license_plate)
@@ -116,6 +119,8 @@ False
116
119
  - [format\_legal\_process](#format_legal_process)
117
120
  - [remove\_symbols\_legal\_process](#remove_symbols_legal_process)
118
121
  - [generate\_legal\_process](#generate_legal_process)
122
+ - [RENAVAM](#renavam)
123
+ - [is_valid_renavam](#is_valid_renavam)
119
124
  - [Titulo Eleitoral](#titulo-eleitoral)
120
125
  - [is\_valid\_voter\_id](#is_valid_voter_id)
121
126
  - [format\_voter\_id](#format_voter_id)
@@ -123,6 +128,7 @@ False
123
128
  - [IBGE](#ibge)
124
129
  - [convert_code_to_uf](#convert_code_to_uf)
125
130
  - [convert_uf_to_name](#convert_uf_to_name)
131
+ - [convert_name_to_uf](#convert_name_to_uf)
126
132
  - [get_code_by_municipality_name](#get_code_by_municipality_name)
127
133
  - [get\_municipality\_by\_code](#get_municipality_by_code)
128
134
  - [Feriados](#feriados)
@@ -130,6 +136,15 @@ False
130
136
  - [Monetário](#monetário)
131
137
  - [format\_currency](#format_currency)
132
138
  - [convert\_real\_to\_text](#convert_real_to_text)
139
+ - [Natureza Jurídica](#natureza-jurídica)
140
+ - [is_valid_legal_nature](#is_valid_legal_nature)
141
+ - [get_legal_nature_description](#get_legal_nature_description)
142
+ - [list_all_legal_nature](#list_all_legal_nature)
143
+ - [Passaporte](#passaporte)
144
+ - [is_valid_passport](#is_valid_passport)
145
+ - [format_passport](#format_passport)
146
+ - [remove_symbols_passport](#remove_symbols_passport)
147
+ - [generate_passport](#generate_passport)
133
148
 
134
149
  ## CPF
135
150
 
@@ -229,7 +244,8 @@ Exemplo:
229
244
 
230
245
  Verifica se os dígitos de verificação do CNPJ (Cadastro Nacional da Pessoa
231
246
  Jurídica) fornecido correspondem ao seu número base. A entrada deve ser uma
232
- string de dígitos com o comprimento apropriado. Esta função não verifica a
247
+ string de 14 caracteres, permitindo dígitos e letras maiúsculas nas 12
248
+ primeiras posições e dígitos nas 2 últimas. Esta função não verifica a
233
249
  existência do CNPJ; ela só valida o formato da string.
234
250
 
235
251
  Argumentos:
@@ -301,12 +317,16 @@ Exemplo:
301
317
 
302
318
  ### generate_cnpj
303
319
 
304
- Gera uma string de dígitos CNPJ válida aleatória. Um número de filial
305
- opcional pode ser fornecido; o padrão é 1.
320
+ Gera uma string de CNPJ válida aleatória. Um número de filial opcional pode ser
321
+ fornecido; o padrão é 1. Use `alphanumeric=True` para gerar um CNPJ cujas 12
322
+ primeiras posições podem conter dígitos e letras maiúsculas.
306
323
 
307
324
  Argumentos:
308
325
 
309
- - branch (int): Um número de filial opcional a ser incluído no CNPJ.
326
+ - branch (int | str): Um número de filial opcional a ser incluído no CNPJ.
327
+ Valores de filial alfanuméricos são aceitos apenas com
328
+ `alphanumeric=True`.
329
+ - alphanumeric (bool): Define se o CNPJ gerado deve ser alfanumérico.
310
330
 
311
331
  Retorna:
312
332
 
@@ -320,6 +340,13 @@ Exemplo:
320
340
  '34665388000161'
321
341
  >>> generate_cnpj(1234)
322
342
  "01745284123455"
343
+ >>> generate_cnpj(alphanumeric=True)
344
+ "9359QAG9000184"
345
+ >>> generate_cnpj(branch="AB12", alphanumeric=True)
346
+ "BR2026UTAB1290"
347
+ >>> generate_cnpj(branch="CD34", alphanumeric=True)
348
+ # CNPJ inválido para exemplos de validação:
349
+ "NX9K79E2CD3400"
323
350
  ```
324
351
 
325
352
  ## CEP
@@ -695,6 +722,37 @@ None
695
722
  "Primeiro de agosto de dois mil e vinte e quatro"
696
723
  ````
697
724
 
725
+ ## CNH
726
+
727
+ ### is_valid_cnh
728
+
729
+ Verifica se o número de registro de CNH (Carteira de Habilitação Nacional) brasileiro é válido.
730
+ Para que um número de CNH seja considerado válido, a entrada deve ser uma string contendo
731
+ exatamente 11 dígitos numéricos. Esta função não verifica se o número da CNH é real, apenas
732
+ valida os dígitos verificadores.
733
+
734
+ Argumentos:
735
+
736
+ - cnh (str): A string contendo o número de registro de CNH a ser verificado.
737
+
738
+ Retorno:
739
+
740
+ - bool: True se o número de registro da CNHN for válido (11 dígitos), False caso contrário.
741
+
742
+ Exemplo:
743
+
744
+ ```python
745
+ >>> from brutils import is_valid_cnh
746
+ >>> is_valid_cnh("12345678901")
747
+ False
748
+ >>> is_valid_cnh("A2C45678901")
749
+ False
750
+ >>> is_valid_cnh("98765432100")
751
+ True
752
+ >>> is_valid_cnh("987654321-00")
753
+ True
754
+ ```
755
+
698
756
 
699
757
  ## Placa de Carro
700
758
 
@@ -1249,6 +1307,33 @@ Exemplo:
1249
1307
  'Rio de Janeiro'
1250
1308
  ```
1251
1309
 
1310
+ ### convert_name_to_uf
1311
+ Converte o nome completo de um estado brasileiro para seu código UF.
1312
+
1313
+ Esta função recebe o nome completo de um estado brasileiro e retorna o código UF de duas letras correspondente. A comparação ignora maiúsculas/minúsculas e acentos.
1314
+
1315
+ Argumentos:
1316
+ * state_name (str): O nome completo do estado (por exemplo, 'São Paulo', 'sao paulo').
1317
+
1318
+ Retorna:
1319
+ * str | None: O código UF se encontrado, ou None se o nome do estado for inválido.
1320
+
1321
+ Exemplo:
1322
+
1323
+ ```python
1324
+ >>> from brutils.ibge.uf import convert_name_to_uf
1325
+ >>> convert_name_to_uf('São Paulo')
1326
+ 'SP'
1327
+ >>> convert_name_to_uf('sao paulo')
1328
+ 'SP'
1329
+ >>> convert_name_to_uf('Rio de Janeiro')
1330
+ 'RJ'
1331
+ >>> convert_name_to_uf('rio de janeiro')
1332
+ 'RJ'
1333
+ >>> convert_name_to_uf('Estado Inválido')
1334
+ >>>
1335
+ ```
1336
+
1252
1337
  ## Feriados
1253
1338
 
1254
1339
  ### is_holiday
@@ -1344,6 +1429,188 @@ Exemplo:
1344
1429
  None
1345
1430
  ```
1346
1431
 
1432
+ ## Natureza Jurídica
1433
+
1434
+ ### is_valid_legal_nature
1435
+
1436
+ Valida se o código informado existe na tabela oficial. Aceita `NNNN` ou `NNN-N`.
1437
+ O valor é **normalizado** antes da checagem: remove espaços, mantém apenas dígitos e aceita hífen entre o 3º e 4º dígitos.
1438
+
1439
+ **Argumentos**
1440
+ - `code (str)`: Código de 4 dígitos (ex.: `"2062"` ou `"206-2"`)
1441
+
1442
+ **Retorna**
1443
+ - `bool`: `True` se existir na tabela, `False` caso contrário.
1444
+
1445
+ **Exemplo**
1446
+ ```python
1447
+ >>> from brutils import legal_nature
1448
+ >>> legal_nature.is_valid("2062")
1449
+ True
1450
+ >>> legal_nature.is_valid("206-2")
1451
+ True
1452
+ >>> legal_nature.is_valid("9999")
1453
+ False
1454
+ ```
1455
+
1456
+ ### get_legal_nature_description
1457
+
1458
+ Retorna a **descrição oficial** do código de Natureza Jurídica. Aceita `NNNN` ou `NNN-N`. Aplica a mesma normalização do `is_valid`.
1459
+
1460
+ **Argumentos**
1461
+
1462
+ * `code (str)`: Código de 4 dígitos
1463
+
1464
+ **Retorna**
1465
+
1466
+ * `str | None`: Descrição correspondente ou `None` se o código for inválido ou inexistente.
1467
+
1468
+ **Exemplo**
1469
+
1470
+ ```python
1471
+ >>> from brutils import legal_nature
1472
+ >>> legal_nature.get_description("2062")
1473
+ 'Sociedade Empresária Limitada'
1474
+ >>> legal_nature.get_description("101-5")
1475
+ 'Órgão Público do Poder Executivo Federal'
1476
+ >>> legal_nature.get_description("0000")
1477
+ None
1478
+ ```
1479
+
1480
+ ### list_all_legal_nature
1481
+
1482
+ Retorna uma cópia do dicionário completo `{codigo: descricao}`.
1483
+
1484
+ **Retorna**
1485
+
1486
+ * `dict[str, str]`: Mapeamento de todos os códigos para suas descrições.
1487
+
1488
+ **Exemplo**
1489
+
1490
+ ```python
1491
+ >>> from brutils import legal_nature
1492
+ >>> data = legal_nature.list_all()
1493
+ >>> len(data) > 0
1494
+ True
1495
+ >>> data["2062"]
1496
+ 'Sociedade Empresária Limitada'
1497
+ ```
1498
+
1499
+ ## RENAVAM
1500
+
1501
+ ### is_valid_renavam
1502
+
1503
+ Valida se os dígitos de verificação do RENAVAM fornecido
1504
+ correspondem aos seus 10 dígitos iniciais. Esta função não verifica a existência do veículo;
1505
+ ela apenas valida o formato da string e o dígito verificador.
1506
+
1507
+ Argumentos:
1508
+
1509
+ - renavam (str): O RENAVAM a ser validado, uma string de 11 dígitos.
1510
+
1511
+ Retorna:
1512
+
1513
+ - bool: Verdadeiro se o RENAVAM for válido
1514
+ Falso caso contrário.
1515
+
1516
+ Exemplo:
1517
+
1518
+ ```python
1519
+ >>> from brutils import is_valid_renavam
1520
+ >>> is_valid_renavam("86769597308")
1521
+ True
1522
+ >>> is_valid_renavam("12345678901")
1523
+ False
1524
+ ```
1525
+
1526
+ ## Passaporte
1527
+
1528
+ ### is_valid_passport
1529
+
1530
+ Verifica se um número de passaporte brasileiro é válido.
1531
+
1532
+ Para ser considerado válido, a entrada deve ser uma string contendo exatamente dois caracteres alfabéticos seguidos de exatamente seis dígitos numéricos.
1533
+
1534
+ Esta função não verifica se a entrada é um número de passaporte real, pois não existem dígitos verificadores para o passaporte brasileiro.
1535
+
1536
+ Argumentos:
1537
+ - passport (str): A string contendo o número do passaporte a ser verificado.
1538
+
1539
+ Retorna:
1540
+ - bool: True se o número do passaporte for válido (2 letras seguidas de 6 dígitos). False caso contrário.
1541
+
1542
+ Exemplo:
1543
+ ```python
1544
+ >>> from brutils import is_valid_passport
1545
+ >>> is_valid_passport("Ab123456")
1546
+ True
1547
+ >>> is_valid_passport("12345678")
1548
+ False
1549
+ >>> is_valid_passport("DC-221345")
1550
+ False
1551
+ ```
1552
+ ### format_passport
1553
+
1554
+ Formata um número de passaporte brasileiro para exibição.
1555
+
1556
+ Esta função recebe uma string representando um número de passaporte válido e o retorna formatado (maiúsculas, sem símbolos).
1557
+
1558
+ Argumentos:
1559
+ - passport (str | None): Um número de passaporte brasileiro (minúsculas ou maiúsculas, possivelmente incluindo símbolos)
1560
+
1561
+ Retorna:
1562
+ - str: O número do passaporte formatado (maiúsculas, sem símbolos) ou None se a entrada for inválida
1563
+
1564
+ Exemplo:
1565
+ ```python
1566
+ >>> from brutils import format_passport
1567
+ >>> format_passport("Ab123456")
1568
+ AB123456
1569
+ >>> format_passport("Ab-123456")
1570
+ AB123456
1571
+ >>> format_passport("111111")
1572
+ None
1573
+ ```
1574
+ ### remove_symbols_passport
1575
+
1576
+ Remove símbolos ('-', '.' e espaços em branco) de um número de passaporte.
1577
+
1578
+ Esta função recebe uma string com um número de passaporte como entrada e remove todas as ocorrências dos caracteres '.', '-' e espaço em branco.
1579
+
1580
+ Argumentos:
1581
+ - passport (str): A string contendo um número de passaporte
1582
+
1583
+ Retorna:
1584
+ - str: O número do passaporte com hífens (-), pontos (.) e espaços em branco ( ) removidos.
1585
+
1586
+ Exemplo:
1587
+ ```python
1588
+ >>> from brutils import remove_symbols_passport
1589
+ >>> remove_symbols_passport("Ab123456")
1590
+ Ab123456
1591
+ >>> remove_symbols_passport("Ab-123456")
1592
+ Ab123456
1593
+ >>> remove_symbols_passport("Ab -. 123456")
1594
+ Ab123456
1595
+ ```
1596
+ ### generate_passport
1597
+
1598
+ Gera uma string com um número de passaporte brasileiro válido aleatório.
1599
+
1600
+ Esta função gera uma string com um número de passaporte brasileiro aleatório.
1601
+
1602
+ Retorna:
1603
+ - str: Uma string com um número de passaporte válido aleatório.
1604
+
1605
+ Exemplo:
1606
+ ```python
1607
+ >>> from brutils import generate_passport
1608
+ >>> generate_passport()
1609
+ "RY393097"
1610
+ >>> generate_passport()
1611
+ "ZS840088"
1612
+ ```
1613
+
1347
1614
  # Novos Utilitários e Reportar Bugs
1348
1615
 
1349
1616
  Caso queira sugerir novas funcionalidades ou reportar bugs, basta criar