"""Pydantic schemas para la API JSON.""" from __future__ import annotations from typing import Any from pydantic import BaseModel, Field class HealthResponse(BaseModel): ok: bool nn_enabled: bool preprocessed_cached: bool = False git_commit: str | None = None class MatchCandidate(BaseModel): match_id: str date: str home_team: str away_team: str status: str # "played" | "future" | "no_data" class FigureSummary(BaseModel): name: str title: str section: str png_url: str svg_url: str | None = None interactive_url: str | None = None class TableSummary(BaseModel): name: str title: str section: str csv_url: str preview_html: str = "" class BundleSummary(BaseModel): report_type: str html_url: str figures: list[FigureSummary] tables: list[TableSummary] warnings: list[str] = Field(default_factory=list) meta: dict[str, Any] = Field(default_factory=dict) class JobStatus(BaseModel): id: str kind: str title: str status: str message: str progress: int error: str warnings: list[str] = Field(default_factory=list) bundles: dict[str, BundleSummary] = Field(default_factory=dict) manifest_url: str | None = None class FilterPayload(BaseModel): date_from: str | None = None date_to: str | None = None last_n: int | None = None side: str | None = None # "home" | "away" | "both" (legacy, == side_a) side_a: str | None = None # local/visitante del equipo A side_b: str | None = None # local/visitante del equipo B state_a: str | None = None # condición A: "Ganando"|"Empatando"|"Perdiendo"|"both" state_b: str | None = None # condición B rival: str | None = None block_type: str | None = None # "low" | "medium" | "high" metric: str | None = None class RunRequest(BaseModel): league: str season: str team_a: str = "" team_b: str = "" match_id: str = "" match_date: str = "" filters: FilterPayload = Field(default_factory=FilterPayload) only: list[str] = Field(default_factory=list) # nombres de figuras/tablas específicas class RunResponse(BaseModel): job_id: str status_url: str class CatalogResponse(BaseModel): report_type: str figures: list[dict[str, Any]] tables: list[dict[str, Any]]