brutils 2.3.0__tar.gz → 2.4.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.4.0}/PKG-INFO +262 -7
  2. {brutils-2.3.0 → brutils-2.4.0}/README.md +259 -4
  3. {brutils-2.3.0 → brutils-2.4.0}/brutils/__init__.py +36 -1
  4. {brutils-2.3.0 → brutils-2.4.0}/brutils/cep.py +10 -8
  5. brutils-2.4.0/brutils/cnh.py +86 -0
  6. {brutils-2.3.0 → brutils-2.4.0}/brutils/cnpj.py +9 -9
  7. {brutils-2.3.0 → brutils-2.4.0}/brutils/cpf.py +9 -9
  8. {brutils-2.3.0 → brutils-2.4.0}/brutils/email.py +1 -1
  9. {brutils-2.3.0 → brutils-2.4.0}/brutils/ibge/uf.py +59 -0
  10. brutils-2.4.0/brutils/legal_nature.py +165 -0
  11. {brutils-2.3.0 → brutils-2.4.0}/brutils/legal_process.py +11 -8
  12. {brutils-2.3.0 → brutils-2.4.0}/brutils/license_plate.py +14 -12
  13. brutils-2.4.0/brutils/passport.py +107 -0
  14. {brutils-2.3.0 → brutils-2.4.0}/brutils/phone.py +13 -13
  15. brutils-2.4.0/brutils/renavam.py +56 -0
  16. {brutils-2.3.0 → brutils-2.4.0}/brutils/voter_id.py +11 -10
  17. {brutils-2.3.0 → brutils-2.4.0}/pyproject.toml +4 -4
  18. {brutils-2.3.0 → brutils-2.4.0}/LICENSE +0 -0
  19. {brutils-2.3.0 → brutils-2.4.0}/brutils/currency.py +0 -0
  20. {brutils-2.3.0 → brutils-2.4.0}/brutils/data/cities_code.json +0 -0
  21. {brutils-2.3.0 → brutils-2.4.0}/brutils/data/enums/__init__.py +0 -0
  22. {brutils-2.3.0 → brutils-2.4.0}/brutils/data/enums/better_enum.py +0 -0
  23. {brutils-2.3.0 → brutils-2.4.0}/brutils/data/enums/months.py +0 -0
  24. {brutils-2.3.0 → brutils-2.4.0}/brutils/data/enums/uf.py +0 -0
  25. {brutils-2.3.0 → brutils-2.4.0}/brutils/data/legal_process_ids.json +0 -0
  26. {brutils-2.3.0 → brutils-2.4.0}/brutils/date_utils.py +0 -0
  27. {brutils-2.3.0 → brutils-2.4.0}/brutils/exceptions/__init__.py +0 -0
  28. {brutils-2.3.0 → brutils-2.4.0}/brutils/exceptions/cep.py +0 -0
  29. {brutils-2.3.0 → brutils-2.4.0}/brutils/ibge/__init__.py +0 -0
  30. {brutils-2.3.0 → brutils-2.4.0}/brutils/ibge/municipality.py +0 -0
  31. {brutils-2.3.0 → brutils-2.4.0}/brutils/pis.py +0 -0
  32. {brutils-2.3.0/brutils/types → brutils-2.4.0/brutils/schemas}/__init__.py +0 -0
  33. {brutils-2.3.0/brutils/types → brutils-2.4.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.4.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.95)
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
 
@@ -695,6 +710,37 @@ None
695
710
  "Primeiro de agosto de dois mil e vinte e quatro"
696
711
  ````
697
712
 
713
+ ## CNH
714
+
715
+ ### is_valid_cnh
716
+
717
+ Verifica se o número de registro de CNH (Carteira de Habilitação Nacional) brasileiro é válido.
718
+ Para que um número de CNH seja considerado válido, a entrada deve ser uma string contendo
719
+ exatamente 11 dígitos numéricos. Esta função não verifica se o número da CNH é real, apenas
720
+ valida os dígitos verificadores.
721
+
722
+ Argumentos:
723
+
724
+ - cnh (str): A string contendo o número de registro de CNH a ser verificado.
725
+
726
+ Retorno:
727
+
728
+ - bool: True se o número de registro da CNHN for válido (11 dígitos), False caso contrário.
729
+
730
+ Exemplo:
731
+
732
+ ```python
733
+ >>> from brutils import is_valid_cnh
734
+ >>> is_valid_cnh("12345678901")
735
+ False
736
+ >>> is_valid_cnh("A2C45678901")
737
+ False
738
+ >>> is_valid_cnh("98765432100")
739
+ True
740
+ >>> is_valid_cnh("987654321-00")
741
+ True
742
+ ```
743
+
698
744
 
699
745
  ## Placa de Carro
700
746
 
@@ -1249,6 +1295,33 @@ Exemplo:
1249
1295
  'Rio de Janeiro'
1250
1296
  ```
1251
1297
 
1298
+ ### convert_name_to_uf
1299
+ Converte o nome completo de um estado brasileiro para seu código UF.
1300
+
1301
+ 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.
1302
+
1303
+ Argumentos:
1304
+ * state_name (str): O nome completo do estado (por exemplo, 'São Paulo', 'sao paulo').
1305
+
1306
+ Retorna:
1307
+ * str | None: O código UF se encontrado, ou None se o nome do estado for inválido.
1308
+
1309
+ Exemplo:
1310
+
1311
+ ```python
1312
+ >>> from brutils.ibge.uf import convert_name_to_uf
1313
+ >>> convert_name_to_uf('São Paulo')
1314
+ 'SP'
1315
+ >>> convert_name_to_uf('sao paulo')
1316
+ 'SP'
1317
+ >>> convert_name_to_uf('Rio de Janeiro')
1318
+ 'RJ'
1319
+ >>> convert_name_to_uf('rio de janeiro')
1320
+ 'RJ'
1321
+ >>> convert_name_to_uf('Estado Inválido')
1322
+ >>>
1323
+ ```
1324
+
1252
1325
  ## Feriados
1253
1326
 
1254
1327
  ### is_holiday
@@ -1344,6 +1417,188 @@ Exemplo:
1344
1417
  None
1345
1418
  ```
1346
1419
 
1420
+ ## Natureza Jurídica
1421
+
1422
+ ### is_valid_legal_nature
1423
+
1424
+ Valida se o código informado existe na tabela oficial. Aceita `NNNN` ou `NNN-N`.
1425
+ 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.
1426
+
1427
+ **Argumentos**
1428
+ - `code (str)`: Código de 4 dígitos (ex.: `"2062"` ou `"206-2"`)
1429
+
1430
+ **Retorna**
1431
+ - `bool`: `True` se existir na tabela, `False` caso contrário.
1432
+
1433
+ **Exemplo**
1434
+ ```python
1435
+ >>> from brutils import legal_nature
1436
+ >>> legal_nature.is_valid("2062")
1437
+ True
1438
+ >>> legal_nature.is_valid("206-2")
1439
+ True
1440
+ >>> legal_nature.is_valid("9999")
1441
+ False
1442
+ ```
1443
+
1444
+ ### get_legal_nature_description
1445
+
1446
+ 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`.
1447
+
1448
+ **Argumentos**
1449
+
1450
+ * `code (str)`: Código de 4 dígitos
1451
+
1452
+ **Retorna**
1453
+
1454
+ * `str | None`: Descrição correspondente ou `None` se o código for inválido ou inexistente.
1455
+
1456
+ **Exemplo**
1457
+
1458
+ ```python
1459
+ >>> from brutils import legal_nature
1460
+ >>> legal_nature.get_description("2062")
1461
+ 'Sociedade Empresária Limitada'
1462
+ >>> legal_nature.get_description("101-5")
1463
+ 'Órgão Público do Poder Executivo Federal'
1464
+ >>> legal_nature.get_description("0000")
1465
+ None
1466
+ ```
1467
+
1468
+ ### list_all_legal_nature
1469
+
1470
+ Retorna uma cópia do dicionário completo `{codigo: descricao}`.
1471
+
1472
+ **Retorna**
1473
+
1474
+ * `dict[str, str]`: Mapeamento de todos os códigos para suas descrições.
1475
+
1476
+ **Exemplo**
1477
+
1478
+ ```python
1479
+ >>> from brutils import legal_nature
1480
+ >>> data = legal_nature.list_all()
1481
+ >>> len(data) > 0
1482
+ True
1483
+ >>> data["2062"]
1484
+ 'Sociedade Empresária Limitada'
1485
+ ```
1486
+
1487
+ ## RENAVAM
1488
+
1489
+ ### is_valid_renavam
1490
+
1491
+ Valida se os dígitos de verificação do RENAVAM fornecido
1492
+ correspondem aos seus 10 dígitos iniciais. Esta função não verifica a existência do veículo;
1493
+ ela apenas valida o formato da string e o dígito verificador.
1494
+
1495
+ Argumentos:
1496
+
1497
+ - renavam (str): O RENAVAM a ser validado, uma string de 11 dígitos.
1498
+
1499
+ Retorna:
1500
+
1501
+ - bool: Verdadeiro se o RENAVAM for válido
1502
+ Falso caso contrário.
1503
+
1504
+ Exemplo:
1505
+
1506
+ ```python
1507
+ >>> from brutils import is_valid_renavam
1508
+ >>> is_valid_renavam("86769597308")
1509
+ True
1510
+ >>> is_valid_renavam("12345678901")
1511
+ False
1512
+ ```
1513
+
1514
+ ## Passaporte
1515
+
1516
+ ### is_valid_passport
1517
+
1518
+ Verifica se um número de passaporte brasileiro é válido.
1519
+
1520
+ 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.
1521
+
1522
+ 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.
1523
+
1524
+ Argumentos:
1525
+ - passport (str): A string contendo o número do passaporte a ser verificado.
1526
+
1527
+ Retorna:
1528
+ - bool: True se o número do passaporte for válido (2 letras seguidas de 6 dígitos). False caso contrário.
1529
+
1530
+ Exemplo:
1531
+ ```python
1532
+ >>> from brutils import is_valid_passport
1533
+ >>> is_valid_passport("Ab123456")
1534
+ True
1535
+ >>> is_valid_passport("12345678")
1536
+ False
1537
+ >>> is_valid_passport("DC-221345")
1538
+ False
1539
+ ```
1540
+ ### format_passport
1541
+
1542
+ Formata um número de passaporte brasileiro para exibição.
1543
+
1544
+ Esta função recebe uma string representando um número de passaporte válido e o retorna formatado (maiúsculas, sem símbolos).
1545
+
1546
+ Argumentos:
1547
+ - passport (str | None): Um número de passaporte brasileiro (minúsculas ou maiúsculas, possivelmente incluindo símbolos)
1548
+
1549
+ Retorna:
1550
+ - str: O número do passaporte formatado (maiúsculas, sem símbolos) ou None se a entrada for inválida
1551
+
1552
+ Exemplo:
1553
+ ```python
1554
+ >>> from brutils import format_passport
1555
+ >>> format_passport("Ab123456")
1556
+ AB123456
1557
+ >>> format_passport("Ab-123456")
1558
+ AB123456
1559
+ >>> format_passport("111111")
1560
+ None
1561
+ ```
1562
+ ### remove_symbols_passport
1563
+
1564
+ Remove símbolos ('-', '.' e espaços em branco) de um número de passaporte.
1565
+
1566
+ 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.
1567
+
1568
+ Argumentos:
1569
+ - passport (str): A string contendo um número de passaporte
1570
+
1571
+ Retorna:
1572
+ - str: O número do passaporte com hífens (-), pontos (.) e espaços em branco ( ) removidos.
1573
+
1574
+ Exemplo:
1575
+ ```python
1576
+ >>> from brutils import remove_symbols_passport
1577
+ >>> remove_symbols_passport("Ab123456")
1578
+ Ab123456
1579
+ >>> remove_symbols_passport("Ab-123456")
1580
+ Ab123456
1581
+ >>> remove_symbols_passport("Ab -. 123456")
1582
+ Ab123456
1583
+ ```
1584
+ ### generate_passport
1585
+
1586
+ Gera uma string com um número de passaporte brasileiro válido aleatório.
1587
+
1588
+ Esta função gera uma string com um número de passaporte brasileiro aleatório.
1589
+
1590
+ Retorna:
1591
+ - str: Uma string com um número de passaporte válido aleatório.
1592
+
1593
+ Exemplo:
1594
+ ```python
1595
+ >>> from brutils import generate_passport
1596
+ >>> generate_passport()
1597
+ "RY393097"
1598
+ >>> generate_passport()
1599
+ "ZS840088"
1600
+ ```
1601
+
1347
1602
  # Novos Utilitários e Reportar Bugs
1348
1603
 
1349
1604
  Caso queira sugerir novas funcionalidades ou reportar bugs, basta criar
@@ -1,9 +1,11 @@
1
+ ![Logo do Brazilian Utils](https://github.com/brazilian-utils/brand/raw/main/github-hero/github-hero-python.png)
2
+
1
3
  <div align="center">
2
- <h1>🇧🇷 Brazilian Utils</h1>
3
4
 
4
- <p>Utils library for Brazilian-specific businesses.</p>
5
+ <p>Biblioteca de utilitários projetada para validar, gerar e manipular dados de acordo com as particularidades do Brasil</p>
5
6
 
6
- [![codecov](https://codecov.io/gh/brazilian-utils/brutils-python/branch/main/graph/badge.svg?token=5KNECS8JYF)](https://codecov.io/gh/brazilian-utils/brutils-python)
7
+ [![codecov](https://codecov.io/gh/brazilian-utils/python/branch/main/graph/badge.svg)](https://codecov.io/gh/brazilian-utils/python)
8
+ [![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)
7
9
  [![Downloads per Month](https://shields.io/pypi/dm/brutils)](https://pypistats.org/packages/brutils)
8
10
  [![Package version](https://shields.io/pypi/v/brutils)](https://pypi.org/project/brutils/)
9
11
 
@@ -40,7 +42,6 @@ False
40
42
  ```
41
43
 
42
44
  # Utilitários
43
-
44
45
  - [CPF](#cpf)
45
46
  - [is\_valid\_cpf](#is_valid_cpf)
46
47
  - [format\_cpf](#format_cpf)
@@ -68,6 +69,8 @@ False
68
69
  - [is\_valid\_email](#is_valid_email)
69
70
  - [Data](#date)
70
71
  - [convert\_date\_to_text](#convert_date_to_text)
72
+ - [CNH](#cnh)
73
+ - [is\_valid\_cnh](#is_valid_cnh)
71
74
  - [Placa de Carro](#placa-de-carro)
72
75
  - [is\_valid\_license\_plate](#is_valid_license_plate)
73
76
  - [format\_license\_plate](#format_license_plate)
@@ -85,6 +88,8 @@ False
85
88
  - [format\_legal\_process](#format_legal_process)
86
89
  - [remove\_symbols\_legal\_process](#remove_symbols_legal_process)
87
90
  - [generate\_legal\_process](#generate_legal_process)
91
+ - [RENAVAM](#renavam)
92
+ - [is_valid_renavam](#is_valid_renavam)
88
93
  - [Titulo Eleitoral](#titulo-eleitoral)
89
94
  - [is\_valid\_voter\_id](#is_valid_voter_id)
90
95
  - [format\_voter\_id](#format_voter_id)
@@ -92,6 +97,7 @@ False
92
97
  - [IBGE](#ibge)
93
98
  - [convert_code_to_uf](#convert_code_to_uf)
94
99
  - [convert_uf_to_name](#convert_uf_to_name)
100
+ - [convert_name_to_uf](#convert_name_to_uf)
95
101
  - [get_code_by_municipality_name](#get_code_by_municipality_name)
96
102
  - [get\_municipality\_by\_code](#get_municipality_by_code)
97
103
  - [Feriados](#feriados)
@@ -99,6 +105,15 @@ False
99
105
  - [Monetário](#monetário)
100
106
  - [format\_currency](#format_currency)
101
107
  - [convert\_real\_to\_text](#convert_real_to_text)
108
+ - [Natureza Jurídica](#natureza-jurídica)
109
+ - [is_valid_legal_nature](#is_valid_legal_nature)
110
+ - [get_legal_nature_description](#get_legal_nature_description)
111
+ - [list_all_legal_nature](#list_all_legal_nature)
112
+ - [Passaporte](#passaporte)
113
+ - [is_valid_passport](#is_valid_passport)
114
+ - [format_passport](#format_passport)
115
+ - [remove_symbols_passport](#remove_symbols_passport)
116
+ - [generate_passport](#generate_passport)
102
117
 
103
118
  ## CPF
104
119
 
@@ -664,6 +679,37 @@ None
664
679
  "Primeiro de agosto de dois mil e vinte e quatro"
665
680
  ````
666
681
 
682
+ ## CNH
683
+
684
+ ### is_valid_cnh
685
+
686
+ Verifica se o número de registro de CNH (Carteira de Habilitação Nacional) brasileiro é válido.
687
+ Para que um número de CNH seja considerado válido, a entrada deve ser uma string contendo
688
+ exatamente 11 dígitos numéricos. Esta função não verifica se o número da CNH é real, apenas
689
+ valida os dígitos verificadores.
690
+
691
+ Argumentos:
692
+
693
+ - cnh (str): A string contendo o número de registro de CNH a ser verificado.
694
+
695
+ Retorno:
696
+
697
+ - bool: True se o número de registro da CNHN for válido (11 dígitos), False caso contrário.
698
+
699
+ Exemplo:
700
+
701
+ ```python
702
+ >>> from brutils import is_valid_cnh
703
+ >>> is_valid_cnh("12345678901")
704
+ False
705
+ >>> is_valid_cnh("A2C45678901")
706
+ False
707
+ >>> is_valid_cnh("98765432100")
708
+ True
709
+ >>> is_valid_cnh("987654321-00")
710
+ True
711
+ ```
712
+
667
713
 
668
714
  ## Placa de Carro
669
715
 
@@ -1218,6 +1264,33 @@ Exemplo:
1218
1264
  'Rio de Janeiro'
1219
1265
  ```
1220
1266
 
1267
+ ### convert_name_to_uf
1268
+ Converte o nome completo de um estado brasileiro para seu código UF.
1269
+
1270
+ 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.
1271
+
1272
+ Argumentos:
1273
+ * state_name (str): O nome completo do estado (por exemplo, 'São Paulo', 'sao paulo').
1274
+
1275
+ Retorna:
1276
+ * str | None: O código UF se encontrado, ou None se o nome do estado for inválido.
1277
+
1278
+ Exemplo:
1279
+
1280
+ ```python
1281
+ >>> from brutils.ibge.uf import convert_name_to_uf
1282
+ >>> convert_name_to_uf('São Paulo')
1283
+ 'SP'
1284
+ >>> convert_name_to_uf('sao paulo')
1285
+ 'SP'
1286
+ >>> convert_name_to_uf('Rio de Janeiro')
1287
+ 'RJ'
1288
+ >>> convert_name_to_uf('rio de janeiro')
1289
+ 'RJ'
1290
+ >>> convert_name_to_uf('Estado Inválido')
1291
+ >>>
1292
+ ```
1293
+
1221
1294
  ## Feriados
1222
1295
 
1223
1296
  ### is_holiday
@@ -1313,6 +1386,188 @@ Exemplo:
1313
1386
  None
1314
1387
  ```
1315
1388
 
1389
+ ## Natureza Jurídica
1390
+
1391
+ ### is_valid_legal_nature
1392
+
1393
+ Valida se o código informado existe na tabela oficial. Aceita `NNNN` ou `NNN-N`.
1394
+ 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.
1395
+
1396
+ **Argumentos**
1397
+ - `code (str)`: Código de 4 dígitos (ex.: `"2062"` ou `"206-2"`)
1398
+
1399
+ **Retorna**
1400
+ - `bool`: `True` se existir na tabela, `False` caso contrário.
1401
+
1402
+ **Exemplo**
1403
+ ```python
1404
+ >>> from brutils import legal_nature
1405
+ >>> legal_nature.is_valid("2062")
1406
+ True
1407
+ >>> legal_nature.is_valid("206-2")
1408
+ True
1409
+ >>> legal_nature.is_valid("9999")
1410
+ False
1411
+ ```
1412
+
1413
+ ### get_legal_nature_description
1414
+
1415
+ 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`.
1416
+
1417
+ **Argumentos**
1418
+
1419
+ * `code (str)`: Código de 4 dígitos
1420
+
1421
+ **Retorna**
1422
+
1423
+ * `str | None`: Descrição correspondente ou `None` se o código for inválido ou inexistente.
1424
+
1425
+ **Exemplo**
1426
+
1427
+ ```python
1428
+ >>> from brutils import legal_nature
1429
+ >>> legal_nature.get_description("2062")
1430
+ 'Sociedade Empresária Limitada'
1431
+ >>> legal_nature.get_description("101-5")
1432
+ 'Órgão Público do Poder Executivo Federal'
1433
+ >>> legal_nature.get_description("0000")
1434
+ None
1435
+ ```
1436
+
1437
+ ### list_all_legal_nature
1438
+
1439
+ Retorna uma cópia do dicionário completo `{codigo: descricao}`.
1440
+
1441
+ **Retorna**
1442
+
1443
+ * `dict[str, str]`: Mapeamento de todos os códigos para suas descrições.
1444
+
1445
+ **Exemplo**
1446
+
1447
+ ```python
1448
+ >>> from brutils import legal_nature
1449
+ >>> data = legal_nature.list_all()
1450
+ >>> len(data) > 0
1451
+ True
1452
+ >>> data["2062"]
1453
+ 'Sociedade Empresária Limitada'
1454
+ ```
1455
+
1456
+ ## RENAVAM
1457
+
1458
+ ### is_valid_renavam
1459
+
1460
+ Valida se os dígitos de verificação do RENAVAM fornecido
1461
+ correspondem aos seus 10 dígitos iniciais. Esta função não verifica a existência do veículo;
1462
+ ela apenas valida o formato da string e o dígito verificador.
1463
+
1464
+ Argumentos:
1465
+
1466
+ - renavam (str): O RENAVAM a ser validado, uma string de 11 dígitos.
1467
+
1468
+ Retorna:
1469
+
1470
+ - bool: Verdadeiro se o RENAVAM for válido
1471
+ Falso caso contrário.
1472
+
1473
+ Exemplo:
1474
+
1475
+ ```python
1476
+ >>> from brutils import is_valid_renavam
1477
+ >>> is_valid_renavam("86769597308")
1478
+ True
1479
+ >>> is_valid_renavam("12345678901")
1480
+ False
1481
+ ```
1482
+
1483
+ ## Passaporte
1484
+
1485
+ ### is_valid_passport
1486
+
1487
+ Verifica se um número de passaporte brasileiro é válido.
1488
+
1489
+ 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.
1490
+
1491
+ 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.
1492
+
1493
+ Argumentos:
1494
+ - passport (str): A string contendo o número do passaporte a ser verificado.
1495
+
1496
+ Retorna:
1497
+ - bool: True se o número do passaporte for válido (2 letras seguidas de 6 dígitos). False caso contrário.
1498
+
1499
+ Exemplo:
1500
+ ```python
1501
+ >>> from brutils import is_valid_passport
1502
+ >>> is_valid_passport("Ab123456")
1503
+ True
1504
+ >>> is_valid_passport("12345678")
1505
+ False
1506
+ >>> is_valid_passport("DC-221345")
1507
+ False
1508
+ ```
1509
+ ### format_passport
1510
+
1511
+ Formata um número de passaporte brasileiro para exibição.
1512
+
1513
+ Esta função recebe uma string representando um número de passaporte válido e o retorna formatado (maiúsculas, sem símbolos).
1514
+
1515
+ Argumentos:
1516
+ - passport (str | None): Um número de passaporte brasileiro (minúsculas ou maiúsculas, possivelmente incluindo símbolos)
1517
+
1518
+ Retorna:
1519
+ - str: O número do passaporte formatado (maiúsculas, sem símbolos) ou None se a entrada for inválida
1520
+
1521
+ Exemplo:
1522
+ ```python
1523
+ >>> from brutils import format_passport
1524
+ >>> format_passport("Ab123456")
1525
+ AB123456
1526
+ >>> format_passport("Ab-123456")
1527
+ AB123456
1528
+ >>> format_passport("111111")
1529
+ None
1530
+ ```
1531
+ ### remove_symbols_passport
1532
+
1533
+ Remove símbolos ('-', '.' e espaços em branco) de um número de passaporte.
1534
+
1535
+ 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.
1536
+
1537
+ Argumentos:
1538
+ - passport (str): A string contendo um número de passaporte
1539
+
1540
+ Retorna:
1541
+ - str: O número do passaporte com hífens (-), pontos (.) e espaços em branco ( ) removidos.
1542
+
1543
+ Exemplo:
1544
+ ```python
1545
+ >>> from brutils import remove_symbols_passport
1546
+ >>> remove_symbols_passport("Ab123456")
1547
+ Ab123456
1548
+ >>> remove_symbols_passport("Ab-123456")
1549
+ Ab123456
1550
+ >>> remove_symbols_passport("Ab -. 123456")
1551
+ Ab123456
1552
+ ```
1553
+ ### generate_passport
1554
+
1555
+ Gera uma string com um número de passaporte brasileiro válido aleatório.
1556
+
1557
+ Esta função gera uma string com um número de passaporte brasileiro aleatório.
1558
+
1559
+ Retorna:
1560
+ - str: Uma string com um número de passaporte válido aleatório.
1561
+
1562
+ Exemplo:
1563
+ ```python
1564
+ >>> from brutils import generate_passport
1565
+ >>> generate_passport()
1566
+ "RY393097"
1567
+ >>> generate_passport()
1568
+ "ZS840088"
1569
+ ```
1570
+
1316
1571
  # Novos Utilitários e Reportar Bugs
1317
1572
 
1318
1573
  Caso queira sugerir novas funcionalidades ou reportar bugs, basta criar