Source code for cadrumo.domain.calculations.registry.m303_exonerado_390_projection
"""Typed DP30304 projection from canonical exonerado-390 filing evidence."""from__future__importannotationsfromtypingimportTYPE_CHECKINGfrompydanticimportBaseModel,Fieldfrom....core.filing_projection_refimport(FilingProjectionRef,M303Exonerado390ActivityField,M303Exonerado390ActivityProjectionRef,M303Exonerado390OperacionesTercerosProjectionRef,)from....core.modelsimportSTRICT_FROZEN_CONFIGfrom.errorsimportRegistryValidationErrorifTYPE_CHECKING:from...modelos.calculation_revision_m303_evidenceimport(M303Exonerado390ActivityRowEvidence,M303Exonerado390FilingEvidence,)type_ExoneradoProjectionRef=M303Exonerado390ActivityProjectionRef|M303Exonerado390OperacionesTercerosProjectionRef
[docs]classM303Exonerado390FieldProjection(BaseModel):"""One exact typed reference and its canonical projected value."""model_config=STRICT_FROZEN_CONFIGprojection_ref:FilingProjectionRefvalue:str|None
[docs]classM303Exonerado390RecordProjection(BaseModel):"""The complete exonerado-390 activity and Modelo 347 population."""model_config=STRICT_FROZEN_CONFIGfields:tuple[M303Exonerado390FieldProjection,...]=Field(min_length=13,max_length=13)
[docs]defproject_m303_exonerado_390_activity_rows(*,projection_refs:tuple[_ExoneradoProjectionRef,...],evidence:M303Exonerado390FilingEvidence,)->M303Exonerado390RecordProjection|None:"""Project ordered evidence rows through exact authored references."""refs=_validate_projection_refs(projection_refs)ifnotevidence.applicable:returnNone_require_operaciones_terceros_decision(evidence)rows_by_slot={row.slot:rowforrowinevidence.activity_rows}projected=tuple(_project_exonerado_field(ref,evidence,rows_by_slot)forrefinprojection_refs)_require_projected_reference_population(refs,projected)returnM303Exonerado390RecordProjection(fields=projected)
def_require_operaciones_terceros_decision(evidence:M303Exonerado390FilingEvidence)->None:"""Require an applicable filing to carry the evidenced Modelo 347 decision."""ifevidence.operaciones_terceros_declarablesisNoneorevidence.operaciones_terceros_referenceisNone:raiseRegistryValidationError("applicable exonerado-390 projection requires an evidenced Modelo 347 decision")def_project_exonerado_field(ref:_ExoneradoProjectionRef,evidence:M303Exonerado390FilingEvidence,rows_by_slot:dict[int,M303Exonerado390ActivityRowEvidence],)->M303Exonerado390FieldProjection:"""Project one authored exonerado-390 reference through typed evidence."""ifisinstance(ref,M303Exonerado390OperacionesTercerosProjectionRef):value="X"ifevidence.operaciones_terceros_declarableselseNoneelse:row=rows_by_slot.get(ref.slot)value=NoneifrowisNoneelse_project_activity_field(ref,row)returnM303Exonerado390FieldProjection(projection_ref=ref,value=value)def_project_activity_field(ref:M303Exonerado390ActivityProjectionRef,row:M303Exonerado390ActivityRowEvidence)->str:"""Project one activity pair field from its matching evidence row."""ifref.fieldisM303Exonerado390ActivityField.ACTIVITY_CODE:returnrow.codigo_actividadifref.fieldisM303Exonerado390ActivityField.IAE_EPIGRAFE:returnrow.epigrafe_iaeraiseRegistryValidationError(f"unsupported exonerado-390 activity field {ref.field!r}")def_require_projected_reference_population(refs:tuple[FilingProjectionRef,...],projected:tuple[M303Exonerado390FieldProjection,...],)->None:"""Ensure projection preserves the authored reference population exactly."""projected_refs=tuple(field.projection_refforfieldinprojected)iflen(projected_refs)!=len(refs)orany(refnotinrefsforrefinprojected_refs):raiseRegistryValidationError("DP30304 projection reference population changed during projection")def_validate_projection_refs(refs:tuple[_ExoneradoProjectionRef,...])->tuple[FilingProjectionRef,...]:ifany(refs.count(ref)>1forrefinrefs):raiseRegistryValidationError("DP30304 contains duplicate exonerado-390 projection references")expected:tuple[FilingProjectionRef,...]=(*(M303Exonerado390ActivityProjectionRef(projection_kind="m303_exonerado_390_activity",slot=slot,field=field,)forslotinrange(1,7)forfieldinM303Exonerado390ActivityField),M303Exonerado390OperacionesTercerosProjectionRef(projection_kind="m303_exonerado_390_operaciones_terceros",),)iflen(refs)!=len(expected)orany(refnotinexpectedforrefinrefs):raiseRegistryValidationError("DP30304 requires six activity-code/IAE pairs and one Modelo 347 marker")returnrefs__all__=["M303Exonerado390FieldProjection","M303Exonerado390RecordProjection","project_m303_exonerado_390_activity_rows",]