31 lines
846 B
Python
31 lines
846 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from decimal import Decimal
|
|
from typing import Any, Literal, Optional
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class ResolvedInvoiceItem:
|
|
canonical_name: str
|
|
tool_category: Optional[Literal["cancelar_vas_avulso", "vas_estrategico", "pro_rata"]]
|
|
item_type: Literal["avulso", "estrategico", "bundle", "plano", "out_of_scope"]
|
|
msisdn: str
|
|
value: Optional[Decimal]
|
|
section: str
|
|
charge_date: Optional[str] = None
|
|
raw_entry: dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class MentionedItem:
|
|
desc: str
|
|
msisdn: Optional[str] = None
|
|
value: Optional[str] = None
|
|
date: Optional[str] = None
|
|
|
|
|
|
def is_period_range(period: Any) -> bool:
|
|
text = str(period)
|
|
return " a " in text or "~" in text
|