"""Schémas Pydantic du socle jobs (spec 2026-08-31 « socle jobs » §3)."""

import uuid
from datetime import datetime
from typing import Any

from pydantic import BaseModel, ConfigDict


class JobOut(BaseModel):
    """État d'un job pour le polling web. `payload`, `attempts` et `dedup_key` sont des
    détails d'exécution : ils ne sortent jamais de l'api."""

    model_config = ConfigDict(from_attributes=True)

    id: uuid.UUID
    type: str
    status: str
    progress: dict[str, Any] | None
    report: dict[str, Any] | None
    error: str | None
    created_at: datetime
    started_at: datetime | None
    finished_at: datetime | None
