Source code for aeat.domain.calculations.registry._validate_registry_scope
"""Registry-wide validation gates.Applies corpus-wide invariants across all :class:`ModeloDefinition` instances,including duplicate-id checks, relation closure, and semantic-role consistency."""from__future__importannotationsfromcollections.abcimportIterablefrom._schemaimportModeloDefinitionfrom._validate_cross_revisionimport(_validate_cross_revision_casilla_consistency,_validate_strict_cross_revision_casilla_continuity,)from._validate_label_artifactsimportvalidate_no_label_artifactsfrom._validate_relation_sourcesimport(validate_previous_filing_binding_closure,validate_relation_closure,validate_slot_source_hygiene,)from._validate_revision_identityimport_duplicatesfrom._validate_semantic_role_requiredimport_validate_required_role_declarationsfrom._validate_semantic_rolesimport(_validate_semantic_role_cardinality,_validate_semantic_role_consistency,_validate_semantic_role_typo_twins,)
[docs]defvalidate_registry_scope(modelos:Iterable[ModeloDefinition])->tuple[str,...]:"""Validate cross-model and corpus-wide registry invariants. Args: modelos: Iterable of :class:`ModeloDefinition` entries to validate. """modelo_tuple=tuple(modelos)failures:list[str]=[]modelo_ids=[modelo.idformodeloinmodelo_tuple]forduplicateinsorted(_duplicates(modelo_ids)):failures.append(f"registry: duplicate modelo id {duplicate!r}")modelos_by_id={modelo.id:modeloformodeloinmodelo_tuple}iflen(modelos_by_id)==len(modelo_tuple):failures.extend(_validate_dependency_classification_source_modelos(modelo_tuple,modelos_by_id))failures.extend(validate_relation_closure(modelo_tuple,modelos_by_id))failures.extend(validate_previous_filing_binding_closure(modelo_tuple,modelos_by_id))failures.extend(validate_slot_source_hygiene(modelo_tuple,modelos_by_id))failures.extend(_validate_binding_selector_shapes(modelo_tuple))failures.extend(_validate_semantic_role_consistency(modelo_tuple))failures.extend(_validate_semantic_role_cardinality(modelo_tuple))failures.extend(_validate_required_role_declarations(modelo_tuple))failures.extend(_validate_cross_revision_casilla_consistency(modelo_tuple))# This is the surface-scoped strict continuity gate; it complements,# but does not replace, the overlap-aware repeated-id hard gate above.failures.extend(_validate_strict_cross_revision_casilla_continuity(modelo_tuple))failures.extend(validate_no_label_artifacts(modelo_tuple))failures.extend(_validate_semantic_role_typo_twins(modelo_tuple))returntuple(failures)