Source code for aeat.domain.calculations.registry._validate_source_casilla_ids
"""Shared source-casilla-id helpers for cross-model validation.Returns the canonical :class:`~domain.calculations.registry.CasillaId`values a :class:`~domain.calculations.registry.ModeloRevision` can exposeto cross-model relation validators.See Also: :mod:`domain.calculations.registry._casilla_membership` Declared-id membership and non-canonical metadata-token lookup. :mod:`domain.calculations.registry._validate_relation_sources` Relation source validation that consumes these canonical outputs. :mod:`domain.calculations.registry._validate_previous_filing_sources` Previous-filing binding validation that shares the same source check."""from__future__importannotationsfrom._casilla_membershipimportcasilla_noncanonical_reference_targets,declared_casilla_idsfrom._idsimportCasillaIdfrom._schemaimportModeloRevision
[docs]defrevision_output_ids(revision:ModeloRevision)->set[CasillaId]:"""Return canonical source ids exposed by one registry revision. The returned :class:`~domain.calculations.registry.CasillaId` set includes declared casillas plus algorithm-binding outputs from the supplied :class:`~domain.calculations.registry.ModeloRevision`. """outputs=set(declared_casilla_ids(revision))outputs.update(outputforbindinginrevision.algorithm_bindingsforoutputinbinding.output_casilla_ids.values())returnoutputs
[docs]defsource_casilla_id_reference_failure(revision:ModeloRevision,source_casilla_id:CasillaId,*,source_scope:str,missing_failure:str,)->str|None:"""Return a closure failure for a source casilla reference, if invalid. Cross-revision source references consume only canonical ``casilla.id`` values. Display numbers, form numbers, and export refs are refused even when they map to exactly one source casilla; the diagnostic names the canonical candidate so the author fixes the registry source instead of treating the token as unknown. Args: revision: Source :class:`~domain.calculations.registry.ModeloRevision` whose canonical outputs are available to relation or previous-filing closure. source_casilla_id: Candidate :class:`~domain.calculations.registry.CasillaId` source reference token to validate. source_scope: Human-readable scope prefix for the emitted failure. missing_failure: Failure message to reuse for a truly unknown source id. """ifsource_casilla_idinrevision_output_ids(revision):returnNonenoncanonical_targets=casilla_noncanonical_reference_targets(revision,source_casilla_id)ifnoncanonical_targets:rendered_targets=", ".join(noncanonical_targets)iflen(noncanonical_targets)>1:return(f"{source_scope} source casilla id {source_casilla_id!r} is not a canonical casilla.id "f"and is ambiguous; candidate casilla.id values: {rendered_targets}")return(f"{source_scope} source casilla id {source_casilla_id!r} is not a canonical casilla.id; "f"use canonical casilla.id {rendered_targets!r}")returnmissing_failure