aeat.domain.manuals package

Public facade for the AEAT Manual práctico handbook corpus.

This package exposes the strict manual schema (Manual, Chapter, Section, Paragraph, Rule, ManualCasillaReference), handbook identifiers (ManualId, ManualPart), file-backed loaders, rule queries, verification reports, and manifest-backed raw-PDF fetch results for the annual Manual práctico de Renta and Manual práctico de IVA handbooks.

Manual records are public authority corpus data, not operator bucket state. Source PDFs are represented by FetchedManualPart manifests; structured rules carry LLMProvenance, source pointers, casilla/legal references, and human review fields before they can pass the manual verification gate. Registry definitions, calculation grounding, and user-facing handbook lookup consume these records as evidence, while live AEAT access and any persisted operator workflow remain outside this domain surface.

Callers outside this subpackage import exclusively from domain.manuals and must not reach into private modules such as domain.manuals._schema, domain.manuals._loader, domain.manuals._verify, domain.manuals._fetch, or domain.manuals._ids.

Registry corpus services project these records into local operator reports and cross-check ManualCasillaReference rows with the same domain.calculations.registry.ValidatedRegistryAuthority used by runtime registry workflows. Registry source catalogues cite manual PDFs as domain.calculations.registry.SourceReference entries and validate the cited structure through this loader before treating the corpus as official source guidance.

See also

application.registry

Read-only application services for listing, showing, and verifying manual corpus material against registry authority.

domain.calculations.registry

Registry legal/source catalogue that consumes manual PDF references as filing-grounding evidence.

core.resources

Resource boundary that exposes the packaged manual catalogue without turning it into mutable operator bucket state.

Examples

>>> from aeat.domain.manuals import (
...     ManualId, ManualPart, fetch_manual_part, load_manual,
... )
>>> result = fetch_manual_part(
...     manual_id=ManualId.RENTA,
...     year=2025,
...     part=ManualPart.PARTE_1,
... )
>>> manual = load_manual(ManualId.RENTA, 2025, ManualPart.PARTE_1)

Submodules