← Files Public Equity InvestingARCHIVED FILE

skills/earnings-deep-dive/scripts/utils/validation_utils.py

1.05 KB · Oct 2, 2026 · 00:03 UTC

↓ Download file

from __future__ import annotations

from dataclasses import dataclass
from typing import Any, Sequence


@dataclass
class ValidationIssue:
    level: str  # "ERROR" or "WARN"
    message: str


def is_missing(val: Any) -> bool:
    if val is None:
        return True
    if isinstance(val, float):
        # NaN
        return val != val
    if isinstance(val, str) and val.strip() == "":
        return True
    if isinstance(val, str) and val.strip().upper() == "MISSING":
        return True
    return False


def as_float_or_none(val: Any) -> float | None:
    """Parse a numeric value; return None if MISSING or unparsable."""
    if is_missing(val):
        return None
    try:
        return float(str(val).replace(",", ""))
    except Exception:
        return None


def require_columns(df, required: Sequence[str]) -> list[str]:
    missing = [c for c in required if c not in df.columns]
    return missing


def enum_check(value: Any, allowed: Sequence[str]) -> bool:
    if is_missing(value):
        return False
    return str(value).strip() in set(allowed)

SHA-256: 49da9afdc23ab47452a8c605fa2df995ccf41952ebbd595988cc3a20c9c72cbe