Source code for aeat.domain.currency._models

"""Currency normalization value models.

Defines :class:`MonetaryAmount`, :class:`NormalizedAmount`, and
:class:`CurrencyNormalizationStatus` for the EUR conversion results produced by
:class:`CurrencyNormalizationService`.
"""

from __future__ import annotations

from datetime import date
from decimal import Decimal
from enum import StrEnum

from pydantic import BaseModel, Field

from ...core import STRICT_FROZEN_CONFIG


[docs] class CurrencyNormalizationStatus(StrEnum): """Status of currency normalization.""" NATIVE_EUR = "native_eur" NORMALIZED = "normalized" MISSING_RATE = "missing_rate" UNSUPPORTED_CURRENCY = "unsupported_currency"
[docs] class MonetaryAmount(BaseModel): """A monetary amount with its currency.""" model_config = STRICT_FROZEN_CONFIG amount: Decimal currency: str = Field(min_length=3, max_length=3)
[docs] class NormalizedAmount(BaseModel): """A EUR-normalized monetary amount with provenance.""" model_config = STRICT_FROZEN_CONFIG original: MonetaryAmount eur_amount: Decimal status: CurrencyNormalizationStatus rate: Decimal | None = None rate_source: str | None = None rate_date: date | None = None