Cliente y CLI de la API interna del buscador PETETE de la DGT (consultas vinculantes de Tributos)
Project description
dgt-petete
Client and CLI for PETETE, the binding-rulings search engine of the Spanish tax authority (DGT). Docs are in Spanish, as is the subject matter.
Cliente + CLI para el buscador PETETE de la Dirección General de Tributos
(petete.tributos.hacienda.gob.es), que publica las consultas vinculantes
del sistema tributario español. Busca y descarga el texto oficial de las
consultas (p. ej. las del Art. 36 / 39.7 LIS que fundamentan la deducibilidad de
gastos en incentivos fiscales culturales).
PETETE no expone una API pública; este paquete replica los tres endpoints internos de su buscador por HTTP, así que no hace falta navegador ni servidor.
Instalación
Nada que instalar si usas uv: ejecútalo al vuelo
desde este repo.
uvx --from git+https://github.com/hulahoop-media/dgt-petete dgt-petete search \
--normativa "Ley 27/2014" --freetext "producciones cinematográficas"
O instálalo como paquete:
pip install git+https://github.com/hulahoop-media/dgt-petete
# después:
dgt-petete download V2144-18 V0189-20 --out ./corpus
Uso: CLI
# Buscar (combina campos; devuelve una línea "Nº<TAB>docid" por consulta)
dgt-petete search --normativa "Ley 27/2014" --freetext "artes escénicas y musicales"
# Descargar el texto verbatim de una o más consultas a .txt
dgt-petete download V2144-18 V0189-20 --out ./corpus
Flags de search: --freetext, --normativa, --cuestion, --hechos,
--num, --tab (1=generales, 2=vinculantes, por defecto 2).
Uso: librería
from dgt_petete import search, download
hits = search(normativa="Ley 27/2014", freetext="producciones cinematográficas")
# -> [("V0006-17", "54874"), ("V0018-17", "54885"), ...]
texto = download("V2144-18") # texto oficial completo de la consulta
Plugin de Claude Code
El repo es también un marketplace de plugins de Claude Code. Instala el plugin y tu Claude podrá buscar y descargar consultas DGT a demanda (sin MCP):
/plugin marketplace add hulahoop-media/dgt-petete
/plugin install dgt-petete@dgt-petete
El plugin (plugins/dgt-petete/) empaqueta un skill que envuelve esta CLI y
la ejecuta vía uvx desde este mismo repo, sin que haga falta clonar nada.
Cómo funciona (API interna, ingeniería inversa)
El buscador de PETETE (Knosys) llama a tres endpoints:
| Endpoint | Qué hace |
|---|---|
GET /consultas/do/form |
Establece la sesión (cookie) |
POST /consultas/do/search |
Busca. Devuelve HTML con viewDocument(<docid>, <tab>) y updateNumResults("2","<total>") |
POST /consultas/do/document |
Texto completo de una consulta (requiere el docid) |
Detalles no obvios (sin ellos no funciona):
/do/documentresponde 401 sin cabeceras de AJAX (X-Requested-With: XMLHttpRequest+Referer).- El operador entre campos es
OPCMP_n=.Y(con punto inicial), noY. - Los valores van doble-codificados: el JS hace
encodeURIsobre un string ya serializado, así que hay quequote_plus(v)y luego escapar los%. Sin esto, combinar dos campos devuelve HTTP 400. tab:1= consultas generales,2= consultas vinculantes.- El servidor no envía el certificado intermedio de su cadena TLS (FNMT-RCM),
así que
curlyrequestsno lo validan de serie. El paquete incluye la cadena pública de la FNMT (dgt_petete/fnmt-chain.pem) y verifica contra ella por defecto; se puede sobrescribir connew_session(verify=...).
Desarrollo
git clone https://github.com/hulahoop-media/dgt-petete
cd dgt-petete
uv sync # instala el paquete + dependencias de desarrollo
uv run pytest # tests
uv run ruff check .
Ver CONTRIBUTING.md para la convención de commits y cómo proponer cambios.
Aviso
Herramienta no oficial que consulta datos públicos de la sede electrónica de la Agencia Tributaria. Úsala con moderación (las descargas ya espacian las peticiones). No afiliada a la AEAT ni a la DGT.
Licencia
MIT. Ver LICENSE.
Hecho por Hulahoop Media 🎪
Project details
Release history Release notifications | RSS feed
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 dgt_petete-0.2.0.tar.gz.
File metadata
- Download URL: dgt_petete-0.2.0.tar.gz
- Upload date:
- Size: 15.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b786279bb6347710a5f7f3d04f4c6b6eafc74159e32ce8f61b8b18a6cb13c81
|
|
| MD5 |
56f08f8cb50b6fcc8bb5a491069ae48c
|
|
| BLAKE2b-256 |
60e1d10a1b2a8b276e461ad254846358380be25bcfe5b530baa22c89c66bc1ef
|
File details
Details for the file dgt_petete-0.2.0-py3-none-any.whl.
File metadata
- Download URL: dgt_petete-0.2.0-py3-none-any.whl
- Upload date:
- Size: 12.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60bdad3548ced583fe59e741bb566b3748808c88d34d7a92ac9cafab70bc3b32
|
|
| MD5 |
8051361f3217a3594ff374e4e039159d
|
|
| BLAKE2b-256 |
fe450a921889f18ba6117e2c52ba38472ee190df476d479e5569fa7ffeb3691b
|