Source code for nse_xbrl_parser.core.context

"""
nse_xbrl_parser.core.context

XBRL Context representation (entity, period, and dimensions).
"""
from __future__ import annotations

from datetime import date
from enum import Enum
from typing import Any, Dict, Optional
from pydantic import BaseModel, Field

from ..utils.dates import parse_date


class PeriodType(str, Enum):
    INSTANT = "instant"
    DURATION = "duration"
    FOREVER = "forever"


class ExplicitMember(BaseModel):
    """Represents a dimensional explicit member axis/member pair."""
    dimension: str
    member: str


[docs] class XBRLContext(BaseModel): """Represents an XBRL context element.""" context_id: str entity_id: str = "" entity_scheme: str = "" period_type: PeriodType = PeriodType.DURATION instant: Optional[date] = None start_date: Optional[date] = None end_date: Optional[date] = None dimensions: Dict[str, str] = Field(default_factory=dict) scenario_dimensions: Dict[str, str] = Field(default_factory=dict) @property def is_instant(self) -> bool: return self.period_type == PeriodType.INSTANT @property def is_duration(self) -> bool: return self.period_type == PeriodType.DURATION @property def is_standalone(self) -> bool: """Check if context explicitly targets Standalone filing.""" for dim, member in self.dimensions.items(): if "standalone" in member.lower() or "standalone" in dim.lower(): return True return False @property def is_consolidated(self) -> bool: """Check if context explicitly targets Consolidated filing.""" for dim, member in self.dimensions.items(): if "consolidated" in member.lower() or "consolidated" in dim.lower(): return True return False