HTTP automation package for DTP and DAMSP portals.
Project description
botdtp
Pacote de automação para os portais SGPT e DAMSP.
O que o projeto entrega
SGPTBot: login, alteração e atualização de senhas, comprovantes de inspeção, aprovação e reprovação de inspeções e emissão de relatórios.DAMSPBot: fluxo CPF/CNPJ, emissao de licenca PF/PJ e guia PF.HTTPClient+HTTPConfig: retry, timeout, proxy, sleep entre requests e sessao.- Persistencia de sessao em arquivo (
SessionStore) com TTL. - Janela de acesso configuravel por dia/hora/fuso.
Requisitos
- Python
>=3.11
Instalacao
pip install botdtp
Dependencias
Dependencias diretas do pacote (em pyproject.toml):
requests>=2.32.0beautifulsoup4>=4.12.0lxml>=5.2.0pillow>=10.0.0langchain-core>=0.3.0langchain-openai>=0.2.0validate-docbr>=1.11.1xhtml2pdf>=0.2.17
Contrato padrao de retorno
Toda operacao retorna Operacao:
ok: boolmensagem: strdata: dict
Comportamento em falha:
- Operacoes publicas de
BoteClientretornam imediatamenteOperacao(ok=False, ...). - Nao ha propagacao de excecao para o chamador nesse contrato padrao.
- Em erros,
datainclui:operacao: nome do metodo executadoclasse: classe da excecao interna capturadadetalhe: mensagem/detalhe tecnico da falha
Uso de alto nivel (recomendado)
SGPTBot
from botdtp import SGPTBot
from botdtp.sgpt import (
SGPTLoginInput,
SGPTAlterarSenhaInput,
SGPTComprovanteInspecaoInput,
SGPTAprovacaoEscolarAnualInput,
SGPTAprovacaoEscolarSemestralInput,
SGPTAprovacaoTaxiInput,
SGPTReprovacaoEscolarAnualInput,
SGPTReprovacaoEscolarSemestralInput,
SGPTReprovacaoTaxiInput,
SGPTReprovacaoItemInput,
SGPTRelatorioInput,
)
def build_login() -> SGPTLoginInput:
return SGPTLoginInput(
base_url="https://vistoriadtp.prefeitura.sp.gov.br",
codigo_empresa="CODIGO_DA_EMPRESA",
usuario="USUARIO",
senha="SUA_SENHA",
)
sgpt = SGPTBot(
login=build_login(),
reautenticar=True,
)
# 1) Autenticar
sgpt.autenticar(
build_login()
)
# 2) Alterar senha
sgpt.alterar_senha(
SGPTAlterarSenhaInput(
base_url="https://vistoriadtp.prefeitura.sp.gov.br",
codigo_empresa="0035",
usuario="123456",
senha_atual="SENHA_ATUAL",
nova_senha="SENHA_NOVA",
confirmacao_nova_senha="SENHA_NOVA",
)
)
# 3) Gerar comprovante de inspecao
sgpt.gerar_comprovante_inspecao(
SGPTComprovanteInspecaoInput(
numero_guia="055721",
ano_guia="2026",
resultado="APROVADA", # APROVADA ou REPROVADA
),
destino="tmp",
)
# 4) Aprovar inspecoes
sgpt.aprovar_escolar_anual(
SGPTAprovacaoEscolarAnualInput(
placa="ABC1234",
licenca="12345678",
inspetor_codigo="111",
inspetor_nome="INSPETOR",
rt_codigo="222",
rt_nome="RESPONSAVEL TECNICO",
ano_guia="0000",
numero_guia="00000",
validade_extintor="00/0000",
sn_tacografo="S",
),
destino_comprovante="tmp",
)
sgpt.aprovar_escolar_semestral(
SGPTAprovacaoEscolarSemestralInput(
placa="ABC1D23",
licenca="12345678",
inspetor_codigo="111",
inspetor_nome="INSPETOR",
rt_codigo="222",
rt_nome="RESPONSAVEL TECNICO",
validade_extintor="12/2026",
sn_tacografo="S",
),
destino_comprovante="tmp",
)
sgpt.aprovar_taxi(
SGPTAprovacaoTaxiInput(
placa="ABC1234",
licenca="12345678",
inspetor_codigo="111",
inspetor_nome="INSPETOR",
rt_codigo="222",
rt_nome="RESPONSAVEL TECNICO",
ano_guia="2026",
numero_guia="055721",
radio_taxi_cod="",
radio_taxi_nome="",
),
destino_comprovante="tmp",
)
# 5) Reprovar inspecoes
itens = [
SGPTReprovacaoItemInput(
grupo="X",
item="X",
subitem="X",
valor="X",
opcao="X",
descricao="XXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
)
]
sgpt.reprovar_escolar_anual(
SGPTReprovacaoEscolarAnualInput(
placa="ABC1234",
licenca="12345678",
inspetor_codigo="111",
inspetor_nome="INSPETOR",
rt_codigo="222",
rt_nome="RESPONSAVEL TECNICO",
ano_guia="2026",
numero_guia="055721",
itens_reprovacao=itens,
)
)
sgpt.reprovar_escolar_semestral(
SGPTReprovacaoEscolarSemestralInput(
placa="ABC1D23",
licenca="12345678",
inspetor_codigo="111",
inspetor_nome="INSPETOR",
rt_codigo="222",
rt_nome="RESPONSAVEL TECNICO",
itens_reprovacao=itens,
)
)
sgpt.reprovar_taxi(
SGPTReprovacaoTaxiInput(
placa="ABC1234",
licenca="12345678",
inspetor_codigo="111",
inspetor_nome="INSPETOR",
rt_codigo="222",
rt_nome="RESPONSAVEL TECNICO",
ano_guia="2026",
numero_guia="055721",
itens_reprovacao=itens,
)
)
# 6) Gerar relatorio
sgpt.gerar_relatorio_inspecoes(
SGPTRelatorioInput(
mes=5,
ano=2026,
modalidade="E", # C, E, F, T ou M
resultado="", # "", A, P ou R
),
destino="tmp",
nome_arquivo="relatorio_sgpt_maio_2026",
salvar_html=True,
)
Politica de autenticacao SGPT:
- Login obrigatorio: passe
login=SGPTLoginInput(...)ao instanciar o bot. - Manual: use
sgpt.autenticar(...)quando quiser renovar explicitamente a sessao. - Gerenciada: com
reautenticar=True, o bot tenta reautenticar automaticamente quando detectarSGPTAuthenticationError. - Sessao:
SGPTBotcontinua restaurando/salvando cookies viaSessionStore.
DAMSPBot
from botdtp import DAMSPBot
from botdtp.damsp import (
DAMSPCPFInput,
DAMSPCPFGuiaInput,
DAMSPCNPJInput,
DAMSPCategoriaServicoEnum,
DAMSPModalidadeVeiculoEnum,
OpenAICaptchaSolver,
)
damsp = DAMSPBot(captcha_solver=OpenAICaptchaSolver(api_key="SUA_OPENAI_KEY"))
# 1) Iniciar fluxo CPF
damsp.iniciar_fluxo_cpf(
DAMSPCPFInput(
cpf="529.982.247-25",
licenca="123.456-78",
modalidade=DAMSPModalidadeVeiculoEnum.TAXI,
)
)
# 2) Iniciar fluxo CNPJ
damsp.iniciar_fluxo_cnpj(
DAMSPCNPJInput(
cpf_responsavel="529.982.247-25",
numero_empresa="123456",
licenca="123.456-78",
modalidade=DAMSPModalidadeVeiculoEnum.ESCOLAR,
)
)
# 3) Gerar licenca PF
damsp.gerar_licenca_pf(
DAMSPCPFInput(
cpf="529.982.247-25",
licenca="123.456-78",
modalidade=DAMSPModalidadeVeiculoEnum.TAXI,
),
destino="tmp",
)
# 4) Gerar licenca PJ
damsp.gerar_licenca_pj(
DAMSPCNPJInput(
cpf_responsavel="529.982.247-25",
numero_empresa="123456",
licenca="123.456-78",
modalidade=DAMSPModalidadeVeiculoEnum.ESCOLAR,
),
destino="tmp",
)
# 5) Gerar guia CPF
damsp.gerar_guia_cpf(
DAMSPCPFGuiaInput(
cpf="529.982.247-25",
licenca="123.456-78",
codigo_servico=DAMSPCategoriaServicoEnum.RENOVACAO_ALVARA,
modalidade=DAMSPModalidadeVeiculoEnum.TAXI,
),
destino="tmp",
)
Observacao atual: gerar_guia_cnpj (DAMSPBot) e gerar_guia_pj (DAMSPClient) estao declarados, mas ainda sem implementacao.
Uso de baixo nivel (clients)
import requests
from botdtp import HTTPClient, HTTPConfig
from botdtp.damsp import DAMSPClient
from botdtp.sgpt import SGPTClient
http = HTTPClient(config=HTTPConfig(), session=requests.Session())
damsp_client = DAMSPClient(http=http)
sgpt_client = SGPTClient(http=http)
Captcha DAMSP
botdtp.damsp.captcha contem:
OpenAICaptchaSolver(automatico via OpenAI/LangChain)ManualCaptchaSolver(entrada manual)OpenAICaptchaConfigconverter_para_bytes_png
Configuracao recomendada:
- Forneca
api_keyexplicitamente emOpenAICaptchaSolver. - Ajuste preset do modelo via
OpenAICaptchaConfig(model=..., max_tokens=..., temperature=...). - Se usar env, resolva no bootstrap da aplicacao e injete os valores no construtor.
Janela de acesso e sessao persistida
Janela padrao: segunda a sabado (1,2,3,4,5,6), 07:00 ate 20:00, fuso America/Sao_Paulo.
Personalizacao via codigo:
- Janela: passe
ControleAcessoConfig(...)ao criarSGPTBot/DAMSPBot. - Persistencia: passe
SessionPersistenceConfig(...)ao criar o bot. - HTTP: use
HTTPConfig(...)com timeout, retry, proxy e trace conforme necessidade.
Scripts de runtime e testes
Exemplos de runtime:
examples/runtime_sgpt_smoke.pyexamples/runtime_sgpt_alterar_senha_smoke.pyexamples/runtime_sgpt_relatorio_smoke.pyexamples/runtime_damsp_licenca_pf_smoke.pyexamples/runtime_damsp_licenca_pj_smoke.pycli/sgpt_menu_cli.py(menu interativo para teste real do SGPT)cli/sgpt_menu_config.example.json(modelo de configuracao)cli/damsp_menu_cli.py(menu interativo para teste real do DAMSP)cli/damsp_menu_config.example.json(modelo de configuracao)examples/django_adapter_example.py
Testes:
pytest -q
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file botdtp-0.2.0.tar.gz.
File metadata
- Download URL: botdtp-0.2.0.tar.gz
- Upload date:
- Size: 62.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
216b85b052ccf347d961c71ca3460f363d8e570db816b28e4225cc65cd7ed61d
|
|
| MD5 |
50f8c66100a7ead415a1b498f31e6231
|
|
| BLAKE2b-256 |
2dc5cf6ec48f34cac4c481f4512ad8862380fdda3898be605b54625249070e27
|
File details
Details for the file botdtp-0.2.0-py3-none-any.whl.
File metadata
- Download URL: botdtp-0.2.0-py3-none-any.whl
- Upload date:
- Size: 62.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64170bc037c3bb24e291f268fc2823e63256700862910772dbbe323aa5acb0ed
|
|
| MD5 |
377cd526a64c291a30bcee1cc05fd131
|
|
| BLAKE2b-256 |
9189864d52b3061f3d1c43eaea729de6b934af87e32814379caf691ee129f0c2
|