// Domain types — mirror the JSON returned by the FastAPI backend (main.py). // Keeping these in one place lets TypeScript catch drift between the frontend // and the ClickHouse-backed API (e.g. a renamed or missing field) at build time. /** GET /api/meta */ export interface Meta { cities: string[]; dimensions: string[]; brands: string[]; managers: string[]; statuses: string[]; } /** One row of GET /api/boards (grouped per board_id). */ export interface Board { board_id: string; board_address: string; board_city: string; board_dimension: string; } /** One row of GET /api/bookings. task_id/task_status added in the July 2026 change. */ export interface Booking { board_id: string; task_id: string; task_status: string; start_date: string; // ISO date YYYY-MM-DD end_date: string; // ISO date YYYY-MM-DD brand: string; company_name: string; manager: string[]; // canonical "Фамилия Имя" names (a task may have several) } /** Current filter selection shared by boards/bookings queries. */ export interface Filters { cities: string[]; dimensions: string[]; brands: string[]; managers: string[]; statuses: string[]; search: string; dateStart: string; // YYYY-MM-DD or '' — start_date >= dateStart dateEnd: string; // YYYY-MM-DD or '' — end_date <= dateEnd } /** A booking active "today" attached to a map surface (for the balloon). */ export interface MapBooking { task_id: string; task_status: string; start_date: string; end_date: string; brand: string; company_name: string; } /** One surface returned by GET /api/map (from board_info, joined to bookings). */ export interface MapSurface { board_key: number; board_id: string; city: string; address: string; dimension: string; board_type: string; side: string; lat: number | null; lon: number | null; occupied_now: boolean; bookings: MapBooking[]; } /** task_status value that marks an archived booking (painted slate #708090). */ export const ARCHIVED_STATUS = 'РК. Архив';