aeat.application.modelo._projection module

Projection and year-comparison services for modelo calculations.

The Modelo 100 projection path reads persisted CalculationRevision rows from quarterly Modelo 130 work units, resolves the annual RegistrySnapshot, injects the latest cumulative Modelo 130 income at the annual Renta input leaf, threads pagos fraccionados through the relation channel, overlays decimal, enum, and date profile facts from resolve_profile_sourced_bindings(), and runs calculate_registry_snapshot() without persisting the synthetic result.

The comparison path selects the best draft or verified CalculationRevision for each requested year, grounds each delta row in the compared registry snapshots, and returns either a ModeloProjectServiceResult or ModeloCompareServiceResult.

exception ModeloProjectionError(message=None, *, context=None, suggestion=None, translated_message=None)[source]

Bases: AeatError

Base class for application-level projection failures.

Parameters:
  • message (str | None)

  • context (Mapping[str, object] | None)

  • suggestion (str | None)

  • translated_message (str | None)

Return type:

None

code: ClassVar[ErrorCode]
exception ModeloProjectNoM130UnitsError(message=None, *, context=None, suggestion=None, translated_message=None)[source]

Bases: ModeloProjectionError

Raised when a year-end projection has no quarterly Modelo 130 work units.

Parameters:
  • message (str | None)

  • context (Mapping[str, object] | None)

  • suggestion (str | None)

  • translated_message (str | None)

Return type:

None

code: ClassVar[ErrorCode]
exception ModeloProjectNoM130RevisionsError(message=None, *, context=None, suggestion=None, translated_message=None)[source]

Bases: ModeloProjectionError

Raised when Modelo 130 work units exist but have no calculation revisions.

Parameters:
  • message (str | None)

  • context (Mapping[str, object] | None)

  • suggestion (str | None)

  • translated_message (str | None)

Return type:

None

code: ClassVar[ErrorCode]
exception ModeloProjectInvalidDecimalOverrideError(message=None, *, context=None, suggestion=None, translated_message=None)[source]

Bases: ModeloProjectionError

Raised when a projection override cannot be parsed as a decimal.

Parameters:
  • message (str | None)

  • context (Mapping[str, object] | None)

  • suggestion (str | None)

  • translated_message (str | None)

Return type:

None

code: ClassVar[ErrorCode]
exception ModeloCompareNeedTwoYearsError(message=None, *, context=None, suggestion=None, translated_message=None)[source]

Bases: ModeloProjectionError

Raised when comparison is not addressed to exactly two filing years.

Parameters:
  • message (str | None)

  • context (Mapping[str, object] | None)

  • suggestion (str | None)

  • translated_message (str | None)

Return type:

None

code: ClassVar[ErrorCode]
exception ModeloCompareNoWorkUnitsError(message=None, *, context=None, suggestion=None, translated_message=None)[source]

Bases: ModeloProjectionError

Raised when comparison finds no work units for a filing year.

Parameters:
  • message (str | None)

  • context (Mapping[str, object] | None)

  • suggestion (str | None)

  • translated_message (str | None)

Return type:

None

code: ClassVar[ErrorCode]
exception ModeloCompareNoRevisionsError(message=None, *, context=None, suggestion=None, translated_message=None)[source]

Bases: ModeloProjectionError

Raised when comparison finds work units but no calculation revisions.

Parameters:
  • message (str | None)

  • context (Mapping[str, object] | None)

  • suggestion (str | None)

  • translated_message (str | None)

Return type:

None

code: ClassVar[ErrorCode]
exception ModeloCompareNoUsableRevisionsError(message=None, *, context=None, suggestion=None, translated_message=None)[source]

Bases: ModeloProjectionError

Raised when comparison finds no verified or draft revisions.

Parameters:
  • message (str | None)

  • context (Mapping[str, object] | None)

  • suggestion (str | None)

  • translated_message (str | None)

Return type:

None

code: ClassVar[ErrorCode]
class ModeloProjectionCasillaObservation(**data)[source]

Bases: BaseModel

One computed casilla emitted by a projection service.

Parameters:
  • casilla_id (CasillaId)

  • value (Decimal)

  • formula_id (FormulaId | None)

  • legal_refs (tuple[LegalRefId, ...])

  • source_refs (tuple[SourceRefId, ...])

casilla_id: CasillaId
value: Decimal
formula_id: FormulaId | None
legal_refs: tuple[LegalRefId, ...]
source_refs: tuple[SourceRefId, ...]
class ModeloProjectM130Accumulated(**data)[source]

Bases: BaseModel

Accumulated Modelo 130 source values for a Modelo 100 projection.

Parameters:
ingresos: Decimal
gastos: Decimal
rendimiento_neto: Decimal
pagos_fraccionados: Decimal
class ModeloProjectM100Projection(**data)[source]

Bases: BaseModel

Projected Modelo 100 output values.

Parameters:
  • base_liquidable_general_0505 (Decimal)

  • pagos_fraccionados_0604 (Decimal)

  • cuota_integra_estatal_0545 (Decimal)

  • cuota_integra_autonomica_0546 (Decimal)

  • cuota_liquida_estatal_0595 (Decimal)

  • cuota_liquida_autonomica_0596 (Decimal)

  • cuota_resultante_0597 (Decimal)

base_liquidable_general_0505: Decimal
pagos_fraccionados_0604: Decimal
cuota_integra_estatal_0545: Decimal
cuota_integra_autonomica_0546: Decimal
cuota_liquida_estatal_0595: Decimal
cuota_liquida_autonomica_0596: Decimal
cuota_resultante_0597: Decimal
class ModeloProjectServiceResult(**data)[source]

Bases: BaseModel

Year-end Modelo 100 projection from quarterly Modelo 130 revisions.

Parameters:
year: int
ccaa: str
quarters_filed: int
quarters_available: tuple[str, ...]
is_extrapolated: bool
m130_accumulated: ModeloProjectM130Accumulated
casilla_observations: tuple[ModeloProjectionCasillaObservation, ...]
m100_projection: ModeloProjectM100Projection
class ModeloCompareDeltaRow(**data)[source]

Bases: BaseModel

One casilla delta row in a modelo year comparison.

Parameters:
  • casilla_id (CasillaId)

  • label (str)

  • section (str)

  • year_a_value (Decimal)

  • year_b_value (Decimal)

  • delta (Decimal)

  • pct_change (Decimal | None)

  • formula_id (FormulaId | None)

  • legal_refs (tuple[LegalRefId, ...])

  • source_refs (tuple[SourceRefId, ...])

casilla_id: CasillaId
label: str
section: str
year_a_value: Decimal
year_b_value: Decimal
delta: Decimal
pct_change: Decimal | None
formula_id: FormulaId | None
legal_refs: tuple[LegalRefId, ...]
source_refs: tuple[SourceRefId, ...]
class ModeloCompareSection(**data)[source]

Bases: BaseModel

One section grouping for a modelo comparison.

Parameters:
section: str
rows: tuple[ModeloCompareDeltaRow, ...]
class ModeloCompareServiceResult(**data)[source]

Bases: BaseModel

Year-over-year comparison result for one modelo.

Parameters:
modelo: str
year_a: int
year_b: int
year_a_revision_id: str
year_b_revision_id: str
year_a_is_draft: bool
year_b_is_draft: bool
sections: tuple[ModeloCompareSection, ...]
delta_rows: tuple[ModeloCompareDeltaRow, ...]
project_modelo_100_from_m130(*, year, ccaa, casilla_overrides=None, binding_overrides=None)[source]

Project annual Modelo 100 values from quarterly M130 revisions.

The service reads stored CalculationRevision rows, uses the latest cumulative Modelo 130 figures for annual income, sums casilla 19 as the paid instalment relation, resolves the annual RegistrySnapshot, and returns a ModeloProjectServiceResult without writing a new revision.

Return type:

ModeloProjectServiceResult

Parameters:
compare_modelo_years(*, modelo, years)[source]

Compare the best persisted revision for two filing years.

Verified CalculationRevision rows win over drafts. Each emitted ModeloCompareDeltaRow is grounded against the compared RegistrySnapshot metadata or the revision’s recorded observation provenance before the ModeloCompareServiceResult is returned.

Return type:

ModeloCompareServiceResult

Parameters: