Source code for aeat.application.modelo._registry_discovery

"""Application facades for modelo registry discovery queries.

CLI discovery commands call this module instead of constructing
:class:`RegistryQueryService` or reading the registry authority directly. Each
facade delegates to the central validated authority exposed by
``resources().modelos.authority`` and returns the domain query report unchanged.

The ``*_for_scope`` helpers accept a concrete :class:`~core.Period` and
pass its filing year plus bare registry token into the query service, so
revision selection stays inside the authority-backed registry layer.
"""

from __future__ import annotations

from datetime import date

from ...core import Period, TaxDomain
from ...core.resources import resources
from ...domain.calculations.registry import InputKind, ModeloSupportMatrixReport, RegistryQueryService


def _service() -> RegistryQueryService:
    return RegistryQueryService(resources().modelos.authority)


[docs] def declared_modelo_period_tokens(modelo: str | None) -> tuple[str, ...]: """Return every period token declared by any revision of one modelo.""" if not modelo or not modelo.strip(): return () definition = resources().modelos.authority.validate_modelo(modelo.strip()) return tuple( sorted({token for revision in definition.revisions.values() for token in revision.period_selector.periods}), )
[docs] def registry_modelo_codes() -> tuple[str, ...]: """Return registry-backed modelo codes in authority order.""" return tuple(str(modelo.id) for modelo in _service()._authority.modelos)
[docs] def registry_support_matrix() -> ModeloSupportMatrixReport: """Return the registry-wide per-modelo support/capability matrix. Every :class:`~domain.calculations.registry.ModeloEntry` is derived directly from the loaded registry authority (calc-grade, manifest, export formats, extractor, declared casilla renames, declared deprecation decisions, and declared AEAT-portal cross-references) — never hand-maintained. """ return _service().support_matrix()
[docs] def registry_list_modelos(*, year: int | None = None, domain: TaxDomain | None = None): """Return the registry modelo list report, optionally filtered by tax family.""" return _service().list_modelos(year=year, domain=domain)
[docs] def registry_describe_modelo(modelo: str, *, period: str | None = None, as_of: date | None = None): """Return the registry modelo description report.""" return _service().describe_modelo(modelo, period=period, as_of=as_of)
[docs] def registry_describe_modelo_for_scope(modelo: str, *, period: Period, as_of: date | None = None): """Return the registry modelo description report for an exact :class:`Period`.""" return _service().describe_modelo_for_scope( modelo, filing_year=period.year, period=period.registry_token, as_of=as_of, )
[docs] def registry_describe_modelo_for_registry_scope( modelo: str, *, filing_year: int, period: str, as_of: date | None = None, ): return _service().describe_modelo_for_scope( modelo, filing_year=filing_year, period=period, as_of=as_of, )
[docs] def registry_casillas( modelo: str, *, period: str | None = None, as_of: date | None = None, input_kind: InputKind | None = None, required: bool | None = None, form_number: str | None = None, ): """Return the registry casilla report.""" return _service().casillas( modelo, period=period, as_of=as_of, input_kind=input_kind, required=required, form_number=form_number, )
[docs] def registry_casillas_for_scope( modelo: str, *, period: Period, as_of: date | None = None, input_kind: InputKind | None = None, required: bool | None = None, form_number: str | None = None, ): """Return the registry casilla report for an exact :class:`Period`.""" return _service().casillas_for_scope( modelo, filing_year=period.year, period=period.registry_token, as_of=as_of, input_kind=input_kind, required=required, form_number=form_number, )
[docs] def registry_casillas_for_registry_scope( modelo: str, *, filing_year: int, period: str, as_of: date | None = None, input_kind: InputKind | None = None, required: bool | None = None, form_number: str | None = None, ): return _service().casillas_for_scope( modelo, filing_year=filing_year, period=period, as_of=as_of, input_kind=input_kind, required=required, form_number=form_number, )
[docs] def registry_casilla( modelo: str, casilla: str, *, period: str | None = None, as_of: date | None = None, ): """Return the single-casilla semantic detail report.""" return _service().casilla(modelo, casilla, period=period, as_of=as_of)
[docs] def registry_casilla_for_registry_scope( modelo: str, casilla: str, *, filing_year: int, period: str, as_of: date | None = None, ): return _service().casilla_for_scope( modelo, casilla, filing_year=filing_year, period=period, as_of=as_of, )
[docs] def registry_bindings(modelo: str, *, period: str | None = None, as_of: date | None = None): """Return the registry bindings report for a modelo and optional period.""" return _service().bindings(modelo, period=period, as_of=as_of)
[docs] def registry_bindings_for_year(modelo: str, *, filing_year: int, as_of: date | None = None): """Return the registry bindings report for a filing year.""" return _service().bindings_for_year(modelo, filing_year=filing_year, as_of=as_of)
[docs] def registry_bindings_for_scope(modelo: str, *, period: Period, as_of: date | None = None): """Return the registry bindings report for an exact :class:`Period`.""" return _service().bindings_for_scope( modelo, filing_year=period.year, period=period.registry_token, as_of=as_of, )
[docs] def registry_formulas(modelo: str, *, period: str | None = None, as_of: date | None = None): """Return the registry formulas report.""" return _service().formulas(modelo, period=period, as_of=as_of)
[docs] def registry_formulas_for_scope(modelo: str, *, period: Period, as_of: date | None = None): """Return the registry formulas report for an exact :class:`Period`.""" return _service().formulas_for_scope( modelo, filing_year=period.year, period=period.registry_token, as_of=as_of, )
[docs] def registry_formulas_for_registry_scope( modelo: str, *, filing_year: int, period: str, as_of: date | None = None, ): return _service().formulas_for_scope( modelo, filing_year=filing_year, period=period, as_of=as_of, )
__all__ = [ "declared_modelo_period_tokens", "registry_bindings", "registry_bindings_for_scope", "registry_bindings_for_year", "registry_casilla", "registry_casilla_for_registry_scope", "registry_casillas", "registry_casillas_for_registry_scope", "registry_casillas_for_scope", "registry_describe_modelo", "registry_describe_modelo_for_registry_scope", "registry_describe_modelo_for_scope", "registry_formulas", "registry_formulas_for_registry_scope", "registry_formulas_for_scope", "registry_list_modelos", "registry_modelo_codes", "registry_support_matrix", ]