cadrumo.application.calculations.errors module¶
Typed exception hierarchy for the calculations application layer.
These exceptions are raised by previous-filing, binding-prefill, IVA
compensation, and encrypted observation-repository services at the application
boundary. Every class inherits from CoreError;
validation failures use CoreValidationError so CLI
and API callers receive registry-backed envelopes instead of generic
ValueError or TypeError failures.
Every refusal raised across this package carries a registered locale key plus
machine facts; no raise site authors an operator-facing sentence, so
str(exc) renders the key and the prose is resolved once, per locale, at the
presentation boundary.
A narrow subset is additionally a safety disposition: the calculation
observed evidence whose contradiction cannot be resolved by choosing one side,
because either choice silently changes a declared amount. Those raise sites
attach a PreconditionVerdict whose
no_recovery_outcome is SAFETY, so the CLI
boundary projects an explicit “there is deliberately no recovery here” instead
of manufacturing a retry that would re-derive the same contradiction.
See also
application.calculations.binding_prefill:Previous-filing binding readers that raise
BindingPrefillTypeError.application.calculations.iva_compensation_history:Modelo 303 IVA compensation carry-forward readers that raise
IvaCompensationModeloError.application.calculations.observations_repository:Encrypted observation storage that raises
ObservationKeyErrorandObservationCasillaReferenceError.
- class CalculationRefusalPrecondition(*values)[source]¶
Bases:
StrEnumClosed failed-condition identities for calculation safety dispositions.
Membership is deliberately narrow. A condition earns a place here only when the refusal reports two sources of the same declared amount that disagree, so no automatic remedy exists: resolving it means deciding which figure the taxpayer actually declared, which is an operator judgement made against AEAT’s own record. An evidence-incomplete refusal an operator fixes by supplying better evidence is not a safety disposition and stays a plain typed refusal.
- M303_CARRY_DISPOSITION_CONSISTENT¶
- M303_CARRY_DERIVATION_CONSISTENT¶
- M303_CARRY_MATCHES_REGISTRY_FORMULA¶
- calculation_no_recovery_verdict(condition, *, facts, outcome=NoRecoveryOutcome.SAFETY)[source]¶
Return one explicitly non-actionable outcome for a calculation refusal.
The facts name exactly what the two disagreeing sources reported; the closed outcome is what stops a downstream boundary from manufacturing a recovery command that would simply re-derive the same contradiction. No action is bound because none of these conditions has a safe automatic remedy.
- Parameters:
condition (
CalculationRefusalPrecondition) – The calculation condition that failed.facts (
Mapping[str,str|int|bool]) – Stable machine facts, never prose, describing the observation.outcome (
NoRecoveryOutcome) – The closed no-recovery reason. Defaults toSAFETY.
- Return type:
- Returns:
The
PreconditionVerdictcarrying the failed condition and its explicit no-recovery outcome.
- exception IvaCompensationModeloError(message=None, *, context=None, translated_message=None)[source]¶
Bases:
CoreErrorRaised when a non-Modelo 303 observation is passed to IVA compensation history.
The IVA compensation carry-forward pipeline is exclusively sourced from Modelo 303 filed observations. Passing any other modelo to
iva_compensation_state_from_observation_envelope()violates the calculation boundary contract.- Parameters:
- Return type:
None
- code¶
- exception BindingPrefillTypeError(message=None, *, context=None, translated_message=None)[source]¶
Bases:
CoreValidationErrorRaised when a binding selector field carries an unexpected runtime type.
Binding selectors flow through pydantic with a union value type, so static analysis loses the per-key shape. This error is raised by the selector narrowing helpers in
application.calculations.binding_prefill. It protectsresolve_bindings_from_local_store()from selector values that do not match the expectedint | strorstr | tuple[str, ...]shape.- Parameters:
- Return type:
None
- code¶
- exception ObservationKeyError(message=None, *, context=None, translated_message=None)[source]¶
Bases:
CoreValidationErrorRaised when an observation key component fails its repository contract.
The repository key for a
(modelo, filing_year, period)triple must satisfysafe_repository_id()for string components and fall within the supported year range[2000, 2099]for the integer year component. The key builders inapplication.calculations.observations_repositoryraise this error instead of a bareValueErrorso failures propagate through the typed error registry and produce structured envelopes.- Parameters:
- Return type:
None
- code¶
- exception ObservationCasillaReferenceError(message=None, *, context=None, translated_message=None)[source]¶
Bases:
CoreValidationErrorRaised when a persisted filing observation names undeclared casillas.
CalculationObservationRepositoryProtocolis the encrypted calculation-history substrate for cross-period and cross-modelo reads. It must not persist aRegistryModeloObservationwhose casilla keys are only syntactically validCasillaIdstrings; every key must be declared by the resolvedRegistrySnapshotfor that modelo, year, and period viaundeclared_casilla_ids().- Parameters:
- Return type:
None
- code¶