Source code for cadrumo.domain.calculations.registry.deadline_coordinate
"""Canonical semantic identity for registry deadline windows."""from__future__importannotationsfromtypingimportNamedTuplefrom....core.modeloimportModelofrom....core.periodimportPeriod,registry_period_kindfrom....core.result_dispositionimportResultDispositionfrom.irnr_tipo_rentaimportm210_tipo_renta_code_projectionfrom.schema_deadlinesimportDeadlineWindowDefinition
[docs]classDeadlineSemanticCoordinate(NamedTuple):"""Law-fact identity shared by deadline validation and projection. Dates, authored ids, revision ids, and declared cadence are intentionally absent. They describe or own a deadline fact; they cannot make two copies of the same fact semantically distinct. """modelo:strfiling_year:intperiod_token:strresultado_scope:ResultDisposition|Nonetipo_renta_code:str|None
[docs]defdeadline_semantic_coordinate(modelo:str,period:Period,resultado_scope:ResultDisposition|None,tipo_renta_code:str|None,)->DeadlineSemanticCoordinate:"""Project one deadline identity through the canonical typed axes. ``Period`` supplies the filing year and registry token. Calling the shared cadence classifier here keeps the projection on the registry period vocabulary without copying its parser or token map. Qualifier values are atomic: authored scopes are expanded by :func:`deadline_window_semantic_coordinates` before uniqueness checks. """registry_period_kind(period.registry_token)returnDeadlineSemanticCoordinate(modelo=modelo,filing_year=period.filing_year,period_token=period.registry_token,resultado_scope=resultado_scope,tipo_renta_code=tipo_renta_code,)
[docs]defdeadline_window_semantic_coordinates(modelo:str,window:DeadlineWindowDefinition,)->tuple[DeadlineSemanticCoordinate,...]:"""Expand one window into every atomic request identity it can match. ``None`` is a wildcard in deadline resolution. Expanding it here makes an unqualified window collide during registry validation with every qualified window it would shadow at runtime. The expansion reuses the canonical core enum and official M210 code projection; it owns no vocabulary of its own. """resultados:tuple[ResultDisposition|None,...]=((None,*tuple(ResultDisposition))ifwindow.resultado_scopeisNoneelse(window.resultado_scope,))tipos:tuple[str|None,...]ifwindow.tipo_renta_scopeisnotNone:tipos=tuple(sorted(window.tipo_renta_scope))elifmodelo==Modelo("210"):tipos=(None,*tuple(sorted(m210_tipo_renta_code_projection())))else:tipos=(None,)returntuple(deadline_semantic_coordinate(modelo,window.period,resultado,tipo)forresultadoinresultadosfortipointipos)