Source code for cadrumo.application.modelo.dt12_antiquity_advisory
"""Generic verification mechanics for registry-selected DT12 declarations."""from__future__importannotationsfromcollections.abcimportMappingfromdatetimeimportdatefromdecimalimportDecimalfromtypingimportTYPE_CHECKINGfrom...core.casilla_idimportCasillaIdfrom...core.time.clockimporttoday_madridfrom...domain.calculations.registry.facts.resolutionimportMappingFactQuery,ResolvedMappingFactfrom...domain.calculations.registry.schema_baseimportDateAxisfrom...domain.modelos.errorsimportModeloErrorfrom...domain.modelos.verification_reportimport(ModeloVerificationFinding,ModeloVerificationFindingKind,ModeloVerificationFindingSeverity,)from.semantic_role_resolutionimportAmbiguousSemanticRoleCasillaError,casilla_id_for_unique_revision_semantic_roleifTYPE_CHECKING:from...domain.calculations.registry.authorityimportPinnedAuthorityOperation__all__=["dt12_antiquity_advisory_finding"]_DT12_TRABAJO_REDUCCION_ROLE="irpf_rendimiento_trabajo_reduccion"# Registry authority: selected DT12 antiquity declarations are consumed through# the pinned operation and dated mapping fact.def_registry_dt12_antiquity_declaration(revision:object,*,operation:PinnedAuthorityOperation,modelo:str,effective_date:date,)->ResolvedMappingFact:"""Resolve the selected model declaration and the dated DT12 mapping fact."""delmodeloresolved=operation.resolve_governed_fact(MappingFactQuery(fact_id="lirpf-dt12-antiquity-verification-mapping",date_axis=DateAxis.FILING_PERIOD,effective_date=effective_date,),)ifnotisinstance(resolved,ResolvedMappingFact):raiseTypeError("selected DT12 declaration must resolve as a mapping fact")delrevisionreturnresolved
[docs]defdt12_antiquity_advisory_finding(revision:object,casilla_values:Mapping[CasillaId,Decimal],*,operation:PinnedAuthorityOperation,modelo:str,)->ModeloVerificationFinding|None:"""Warn to confirm the DT 12ª antiquity condition when reduction applies."""try:reduccion_id=casilla_id_for_unique_revision_semantic_role(revision,_DT12_TRABAJO_REDUCCION_ROLE,modelo_id=modelo,)exceptAmbiguousSemanticRoleCasillaErrorasexc:raiseModeloError(str(exc),context=exc.ambiguity.context())fromexcifreduccion_idisNone:returnNonereduccion_value=casilla_values.get(reduccion_id,Decimal(0))ifreduccion_value<=Decimal(0):returnNoneeffective_date=getattr(revision,"valid_to",None)ortoday_madrid()declaration=_registry_dt12_antiquity_declaration(revision,operation=operation,modelo=modelo,effective_date=effective_date,)returnModeloVerificationFinding(kind=ModeloVerificationFindingKind.ADVISORY,severity=ModeloVerificationFindingSeverity.WARNING,casilla_id=reduccion_id,message_locale_key="application.modelo.findings.dt12a_reduccion_antiquity_possible",message_facts={"reduccion_id":reduccion_id,"reduccion_value":reduccion_value,},legal_refs=declaration.legal_refs,source_refs=declaration.source_refs,)