# 🛣️ PavDedutor
## Descrição
Biblioteca python voltada para otimização do cálculo de valores deduzíveis de patologias de pavimentos **rígidos** e **flexíveis** com base nas disposições normativas da [DNIT 062/2004 PRO](https://www.gov.br/dnit/pt-br/assuntos/planejamento-e-pesquisa/ipr/coletanea-de-normas/coletanea-de-normas/procedimento-pro/dnit_062_2004_pro.pdf) e [ASTMD6433](https://pages.mtu.edu/~balkire/CE5403/ASTMD6433.pdf).
Entendendo a necessidade de automação dos processo manuais presentes nas normas [DNIT 062/2004 PRO](https://www.gov.br/dnit/pt-br/assuntos/planejamento-e-pesquisa/ipr/coletanea-de-normas/coletanea-de-normas/procedimento-pro/dnit_062_2004_pro.pdf) e [ASTMD6433](https://pages.mtu.edu/~balkire/CE5403/ASTMD6433.pdf), a `pavdedutor` propõe a substiuição da consulta manual aos *ábacos de valores de deduzíveis* pelo uso de funções programáticas rápidas e precisas - desenvolvidad
Para isso, as curvas presentes nos ábacos das normas foram *vetorizadas* e a partir dos *pontos conhecidos* de cada uma, foram aplicadas *regressões polinomiais* ou *regressões logaritimicas* (a depender do tipo de pavimento), resultando na obtenção de coeficientes capazes de reproduzir com alta fidelidade os valores originais, dispensando a necessidade de consultas manuais.
A biblioteca possibilita:
- Cálculo direto dos valores deduzíveis por tipo de defeito e tipo de pavimento;
- Correção automática do valor total deduzível com base na diversidade de patologias;
- Integração com `pandas` para análises em lote.
## Instalação
#### Instalação com pip
```bash
pip install pavdedutor
```
## Uso
#### Cálculo de valor deduzível unitário
```python
import pavdedutor as pav # Importa a biblioteca
# Cálculo de valor deduzível
exemplo = pav.deduzivel(1, 'a', 30, 'rígido') # Chama a função deduzivel passando: patologia 1, severidade 'a', densidade 30 e pavimento rígido
print(exemplo) # Imprime o valor deduzível calculado
```
#### Cálculo de valor deduzível em lote
```python
import pavdedutor as pav # Importa a biblioteca
import pandas as pd # Importa a biblioteca pandas
# Criação de um dicionário com dados genéricos de patologias
dic_patologias = {
'Patologias': [1, 2, 3, 4, 5, 6, 7, 8, 9], # Lista de códigos de patologias
'Severidades': ['a','b','m','a','b','m','a','b','m'], # Severidades correspondentes
'Densidades': [10, 20, 30, 10, 20, 30, 10, 20, 30], # Densidades para cada patologia
'Tipo de pavimento': ['rígido']*9, # Tipo de pavimento (todos rígidos)
'Número da amostra': [1, 1, 1, 2, 2, 2, 3, 3, 3] # Identifica a qual amostra cada linha pertence
}
df = pd.DataFrame(dic_patologias) # Cria um DataFrame a partir do dicionário
resultado = [] # Lista para armazenar os resultados
# Loop para calcular o valor deduzível de cada linha
for i in range(len(df)):
resultado.append(pav.deduzivel(
df.loc[i, 'Patologias'], # Nome da coluna com as patologias
df.loc[i, 'Severidades'], # Nome da coluna com as severidades correspondentes
df.loc[i, 'Densidades'], # Nome da coluna com as densidades correspondentes
df.loc[i, 'Tipo de pavimento'] # Nome da coluna com os tipos de pavimentos
)
)
df['Valores deduziveis'] = resultado # Adiciona os valores deduzíveis calculados ao DataFrame
df # Exibe o DataFrame final
```
#### Cálculo de valor deduzível corrigido total
```python
import pavdedutor as pav # Importa a biblioteca pavdedutor
import pandas as pd # Importa a biblioteca pandas
# Criação de um dicionário com dados genéricos
dic_patologias = {
'Patologias': [1, 2, 3], # Códigos das patologias
'Severidades': ['a','b','m'], # Severidades correspondentes
'Densidades': [10, 20, 30], # Densidades para cada patologia
'Tipo de pavimento': ['rígido']*3, # Tipo de pavimento (todos rígidos)
'Valores deduziveis': [54, 17, 39] # Valores deduzíveis previamente calculados
}
df = pd.DataFrame(dic_patologias) # Converte o dicionário em DataFrame
# Cálculo de valor deduzível total com correção por diversidade de patologias
exemplo = pav.deduzivel_total(
df, # DataFrame com os dados genéricos
'Patologias', # Nome da coluna com os códigos das patologias
'Valores deduziveis', # Nome da coluna com os valores deduzíveis
'rígido' # Tipo de pavimento
)
print(exemplo) # Exibe o valor deduzível total corrigido
```
#### Cálculo de valor deduzível corrigido total em lote
```python
import pavdedutor as pav # Importa a biblioteca pavdedutor
import pandas as pd # Importa a biblioteca pandas
# Criação do dicionário com dados simulados de patologias por amostra
dic_patologias = {
'Patologias': [1, 2, 3, 4, 5, 6, 7, 8, 9], # Códigos das patologias
'Severidades': ['a','b','m','a','b','m','a','b','m'], # Severidades correspondentes
'Densidades': [10,20,30,10,20,30,10,20,30], # Densidades para cada patologia
'Tipo de pavimento': ['rígido']*9, # Tipo de pavimento (todos rígidos)
'Número da amostra': [1,1,1,2,2,2,3,3,3], # Identificador da amostra
'Valores deduzíveis': [54,17,39,16,2,10,18,7,7] # Valores deduzíveis previamente calculados
}
df = pd.DataFrame(dic_patologias) # Cria o DataFrame com os dados
resultado = [] # Lista para armazenar os resultados corrigidos
# Loop para calcular o valor deduzível total corrigido por amostra
for amostra in df['Número da amostra'].unique():
resultado.append(pav.deduzivel_corrigido_total(
df[df['Número da amostra'] == amostra], # Filtra os dados da amostra atual
'Patologias', # Nome da coluna de patologias
'Valores deduzíveis', # Nome da coluna com os valores deduzíveis
'rígido' # Tipo de pavimento
)
)
resultado # Exibe os resultados finais corrigidos por amostra
```
#### Com os valores deduzíveis corrigidos, o usuário já pode obter o **ICP/IPC**
```python
import pandas as pd # Importa a biblioteca pandas
amostras = [1, 2, 3] # Lista com os números das amostras
resultado = [66, 22, 20] # Lista com os valores deduzíveis corrigidos por amostra
tabela_final = dict(zip(amostras, resultado)) # Cria um dicionário associando cada amostra ao seu resultado
df_final = pd.DataFrame(tabela_final.items(), columns=['Amostra', 'VDC']) # Converte em DataFrame com colunas Amostra e VDC
df_final['ICP'] = 100 - df_final['VDC'] # Calcula o ICP como 100 - VDC
df_final # Exibe a tabela final com VDC e ICP por amostra
```
#### Desenvolvimento do projeto
A biblioteca ainda está em processo de desenvolvimento, com novas funcionalidades a serem implementadas, assim como sua documentação. Fique a vontade para me contatar e dar sua opnião sobre o projeto no meu [Linkedin](www.linkedin.com/in/wmoural), [GitHub](https://github.com/wmoural) ou [Email](pro.wmoura@gmail.com).
#### Licença
Copyright (c) 2025 Wellington Moura
O uso é fornecido sob a Licença do MIT.
Raw data
{
"_id": null,
"home_page": null,
"name": "pavdedutor",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "dnit pavimento norma \u00e1baco r\u00edgido flex\u00edvel",
"author": "['Wellington Moura', 'Francisco Macedo']",
"author_email": "pro.wmoura@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/0a/f8/9fdf884c25426a4ea028eee3f8d3af863bd9679774a7c598d8c92f27253c/pavdedutor-0.0.4.tar.gz",
"platform": null,
"description": "# \ud83d\udee3\ufe0f PavDedutor \r\n\r\n## Descri\u00e7\u00e3o\r\n\r\nBiblioteca python voltada para otimiza\u00e7\u00e3o do c\u00e1lculo de valores deduz\u00edveis de patologias de pavimentos **r\u00edgidos** e **flex\u00edveis** com base nas disposi\u00e7\u00f5es normativas da [DNIT 062/2004 PRO](https://www.gov.br/dnit/pt-br/assuntos/planejamento-e-pesquisa/ipr/coletanea-de-normas/coletanea-de-normas/procedimento-pro/dnit_062_2004_pro.pdf) e [ASTMD6433](https://pages.mtu.edu/~balkire/CE5403/ASTMD6433.pdf).\r\n\r\nEntendendo a necessidade de automa\u00e7\u00e3o dos processo manuais presentes nas normas [DNIT 062/2004 PRO](https://www.gov.br/dnit/pt-br/assuntos/planejamento-e-pesquisa/ipr/coletanea-de-normas/coletanea-de-normas/procedimento-pro/dnit_062_2004_pro.pdf) e [ASTMD6433](https://pages.mtu.edu/~balkire/CE5403/ASTMD6433.pdf), a `pavdedutor` prop\u00f5e a substiui\u00e7\u00e3o da consulta manual aos *\u00e1bacos de valores de deduz\u00edveis* pelo uso de fun\u00e7\u00f5es program\u00e1ticas r\u00e1pidas e precisas - desenvolvidad\r\nPara isso, as curvas presentes nos \u00e1bacos das normas foram *vetorizadas* e a partir dos *pontos conhecidos* de cada uma, foram aplicadas *regress\u00f5es polinomiais* ou *regress\u00f5es logaritimicas* (a depender do tipo de pavimento), resultando na obten\u00e7\u00e3o de coeficientes capazes de reproduzir com alta fidelidade os valores originais, dispensando a necessidade de consultas manuais.\r\n\r\nA biblioteca possibilita:\r\n- C\u00e1lculo direto dos valores deduz\u00edveis por tipo de defeito e tipo de pavimento;\r\n- Corre\u00e7\u00e3o autom\u00e1tica do valor total deduz\u00edvel com base na diversidade de patologias;\r\n- Integra\u00e7\u00e3o com `pandas` para an\u00e1lises em lote.\r\n\r\n## Instala\u00e7\u00e3o\r\n\r\n#### Instala\u00e7\u00e3o com pip\r\n```bash\r\npip install pavdedutor\r\n```\r\n\r\n## Uso\r\n#### C\u00e1lculo de valor deduz\u00edvel unit\u00e1rio\r\n```python\r\nimport pavdedutor as pav # Importa a biblioteca\r\n\r\n# C\u00e1lculo de valor deduz\u00edvel\r\nexemplo = pav.deduzivel(1, 'a', 30, 'r\u00edgido') # Chama a fun\u00e7\u00e3o deduzivel passando: patologia 1, severidade 'a', densidade 30 e pavimento r\u00edgido\r\nprint(exemplo) # Imprime o valor deduz\u00edvel calculado\r\n```\r\n\r\n#### C\u00e1lculo de valor deduz\u00edvel em lote\r\n```python\r\nimport pavdedutor as pav # Importa a biblioteca\r\nimport pandas as pd # Importa a biblioteca pandas\r\n\r\n# Cria\u00e7\u00e3o de um dicion\u00e1rio com dados gen\u00e9ricos de patologias\r\ndic_patologias = {\r\n 'Patologias': [1, 2, 3, 4, 5, 6, 7, 8, 9], # Lista de c\u00f3digos de patologias\r\n 'Severidades': ['a','b','m','a','b','m','a','b','m'], # Severidades correspondentes\r\n 'Densidades': [10, 20, 30, 10, 20, 30, 10, 20, 30], # Densidades para cada patologia\r\n 'Tipo de pavimento': ['r\u00edgido']*9, # Tipo de pavimento (todos r\u00edgidos)\r\n 'N\u00famero da amostra': [1, 1, 1, 2, 2, 2, 3, 3, 3] # Identifica a qual amostra cada linha pertence\r\n}\r\n\r\ndf = pd.DataFrame(dic_patologias) # Cria um DataFrame a partir do dicion\u00e1rio\r\n\r\nresultado = [] # Lista para armazenar os resultados\r\n\r\n# Loop para calcular o valor deduz\u00edvel de cada linha\r\nfor i in range(len(df)):\r\n resultado.append(pav.deduzivel(\r\n df.loc[i, 'Patologias'], # Nome da coluna com as patologias\r\n df.loc[i, 'Severidades'], # Nome da coluna com as severidades correspondentes\r\n df.loc[i, 'Densidades'], # Nome da coluna com as densidades correspondentes\r\n df.loc[i, 'Tipo de pavimento'] # Nome da coluna com os tipos de pavimentos\r\n )\r\n)\r\n\r\ndf['Valores deduziveis'] = resultado # Adiciona os valores deduz\u00edveis calculados ao DataFrame\r\n\r\ndf # Exibe o DataFrame final\r\n```\r\n\r\n#### C\u00e1lculo de valor deduz\u00edvel corrigido total \r\n```python\r\nimport pavdedutor as pav # Importa a biblioteca pavdedutor\r\nimport pandas as pd # Importa a biblioteca pandas\r\n\r\n# Cria\u00e7\u00e3o de um dicion\u00e1rio com dados gen\u00e9ricos\r\ndic_patologias = {\r\n 'Patologias': [1, 2, 3], # C\u00f3digos das patologias\r\n 'Severidades': ['a','b','m'], # Severidades correspondentes\r\n 'Densidades': [10, 20, 30], # Densidades para cada patologia\r\n 'Tipo de pavimento': ['r\u00edgido']*3, # Tipo de pavimento (todos r\u00edgidos)\r\n 'Valores deduziveis': [54, 17, 39] # Valores deduz\u00edveis previamente calculados\r\n}\r\n\r\ndf = pd.DataFrame(dic_patologias) # Converte o dicion\u00e1rio em DataFrame\r\n\r\n# C\u00e1lculo de valor deduz\u00edvel total com corre\u00e7\u00e3o por diversidade de patologias\r\nexemplo = pav.deduzivel_total(\r\n df, # DataFrame com os dados gen\u00e9ricos\r\n 'Patologias', # Nome da coluna com os c\u00f3digos das patologias\r\n 'Valores deduziveis', # Nome da coluna com os valores deduz\u00edveis\r\n 'r\u00edgido' # Tipo de pavimento\r\n)\r\n\r\nprint(exemplo) # Exibe o valor deduz\u00edvel total corrigido\r\n\r\n```\r\n\r\n#### C\u00e1lculo de valor deduz\u00edvel corrigido total em lote\r\n```python\r\nimport pavdedutor as pav # Importa a biblioteca pavdedutor\r\nimport pandas as pd # Importa a biblioteca pandas\r\n\r\n# Cria\u00e7\u00e3o do dicion\u00e1rio com dados simulados de patologias por amostra\r\ndic_patologias = {\r\n 'Patologias': [1, 2, 3, 4, 5, 6, 7, 8, 9], # C\u00f3digos das patologias\r\n 'Severidades': ['a','b','m','a','b','m','a','b','m'], # Severidades correspondentes\r\n 'Densidades': [10,20,30,10,20,30,10,20,30], # Densidades para cada patologia\r\n 'Tipo de pavimento': ['r\u00edgido']*9, # Tipo de pavimento (todos r\u00edgidos)\r\n 'N\u00famero da amostra': [1,1,1,2,2,2,3,3,3], # Identificador da amostra\r\n 'Valores deduz\u00edveis': [54,17,39,16,2,10,18,7,7] # Valores deduz\u00edveis previamente calculados\r\n}\r\n\r\ndf = pd.DataFrame(dic_patologias) # Cria o DataFrame com os dados\r\n\r\nresultado = [] # Lista para armazenar os resultados corrigidos\r\n\r\n# Loop para calcular o valor deduz\u00edvel total corrigido por amostra\r\nfor amostra in df['N\u00famero da amostra'].unique():\r\n \r\n resultado.append(pav.deduzivel_corrigido_total(\r\n df[df['N\u00famero da amostra'] == amostra], # Filtra os dados da amostra atual\r\n 'Patologias', # Nome da coluna de patologias\r\n 'Valores deduz\u00edveis', # Nome da coluna com os valores deduz\u00edveis\r\n 'r\u00edgido' # Tipo de pavimento\r\n )\r\n)\r\n\r\nresultado # Exibe os resultados finais corrigidos por amostra\r\n\r\n```\r\n#### Com os valores deduz\u00edveis corrigidos, o usu\u00e1rio j\u00e1 pode obter o **ICP/IPC**\r\n```python\r\nimport pandas as pd # Importa a biblioteca pandas\r\n\r\namostras = [1, 2, 3] # Lista com os n\u00fameros das amostras\r\nresultado = [66, 22, 20] # Lista com os valores deduz\u00edveis corrigidos por amostra\r\n\r\ntabela_final = dict(zip(amostras, resultado)) # Cria um dicion\u00e1rio associando cada amostra ao seu resultado\r\n\r\ndf_final = pd.DataFrame(tabela_final.items(), columns=['Amostra', 'VDC']) # Converte em DataFrame com colunas Amostra e VDC\r\ndf_final['ICP'] = 100 - df_final['VDC'] # Calcula o ICP como 100 - VDC\r\n\r\ndf_final # Exibe a tabela final com VDC e ICP por amostra\r\n```\r\n\r\n#### Desenvolvimento do projeto\r\nA biblioteca ainda est\u00e1 em processo de desenvolvimento, com novas funcionalidades a serem implementadas, assim como sua documenta\u00e7\u00e3o. Fique a vontade para me contatar e dar sua opni\u00e3o sobre o projeto no meu [Linkedin](www.linkedin.com/in/wmoural), [GitHub](https://github.com/wmoural) ou [Email](pro.wmoura@gmail.com).\r\n\r\n#### Licen\u00e7a\r\nCopyright (c) 2025 Wellington Moura\r\n\r\nO uso \u00e9 fornecido sob a Licen\u00e7a do MIT.\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Otimizador de uso de \u00e1bacos de valores deduz\u00edveis para an\u00e1lise de patologias em pavimentos r\u00edgidos e flex\u00edveis",
"version": "0.0.4",
"project_urls": null,
"split_keywords": [
"dnit",
"pavimento",
"norma",
"\u00e1baco",
"r\u00edgido",
"flex\u00edvel"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0af89fdf884c25426a4ea028eee3f8d3af863bd9679774a7c598d8c92f27253c",
"md5": "41a8df2772a9833aec313d9a8ef2c4c8",
"sha256": "2137f66d0172e0426f0d8d2fc11d90e41376ff360cba74f501da093b42a7056b"
},
"downloads": -1,
"filename": "pavdedutor-0.0.4.tar.gz",
"has_sig": false,
"md5_digest": "41a8df2772a9833aec313d9a8ef2c4c8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 18369,
"upload_time": "2025-08-05T02:16:02",
"upload_time_iso_8601": "2025-08-05T02:16:02.416901Z",
"url": "https://files.pythonhosted.org/packages/0a/f8/9fdf884c25426a4ea028eee3f8d3af863bd9679774a7c598d8c92f27253c/pavdedutor-0.0.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-05 02:16:02",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pavdedutor"
}