"""Parsea un datetime ISO 8601 tolerando fracciones de segundo con mas de 6 digitos."""

import re
from datetime import datetime

_FRAC_RE = re.compile(r"(\.\d{6})\d+")


def parse_iso_datetime(value: str) -> datetime:
    """Parsea un datetime ISO 8601 tolerando fracciones de segundo con >6 digitos.

    Windows produce timestamps como ``2026-02-21T13:20:23.1470042+08:00`` donde
    la fraccion de segundo excede los 6 digitos que acepta ``datetime.fromisoformat``.
    Esta funcion trunca la fraccion a 6 digitos antes de parsear.

    Args:
        value: String ISO 8601. Puede contener 'Z' como offset UTC o
               fracciones de segundo con mas de 6 digitos.

    Returns:
        datetime parseado, con tzinfo si el string incluia offset.
    """
    normalized = _FRAC_RE.sub(r"\1", value)
    normalized = normalized.replace("Z", "+00:00")
    return datetime.fromisoformat(normalized)
