export type Paginated = { count: number; next: string | null; previous: string | null; results: T[]; }; export type UserStatus = | 'inactive' | 'gm' | 'gm_admin' | 'buh' | 'bu_admin' | 'director' | 'director_admin' | 'account_admin' | 'superuser'; export type User = { id: number; user_name: string; display_name: string; status: UserStatus; is_superuser?: boolean; managed_by?: number | null; managed_by_name?: string | null; managed_by_pending?: number | null; managed_by_pending_name?: string | null; managed_by_requested_at?: string | null; created_at: string; updated_at: string; }; export type UserWrite = { user_name: string; display_name: string; status: UserStatus; password?: string; managed_by?: number | null; }; export type ActiveSite = { id: number; code: string; name: string; api_base_url: string; has_api_key: boolean; registered_by?: number | null; registered_by_name?: string | null; is_active: boolean; last_synced_at: string | null; last_sync_status: string; last_sync_message: string; created_at: string; updated_at: string; }; export type ActiveSiteWrite = { code: string; name: string; api_base_url: string; api_key?: string; is_active?: boolean; }; export type Site = { id: number; site_name: string; user: number; owner_name?: string; active_site?: number | null; created_at: string; updated_at: string; }; export type Kandang = { id: number; kandang_name: string; site: number; created_at: string; updated_at: string; }; export type Flock = { id: number; flock_name: string; kandang: number; created_at: string; updated_at: string; }; export type CycleStatus = 'active' | 'pending_close' | 'closed'; export type Cycle = { id: number; kandang: number; kandang_name: string; total_days: number; current_day: number; visible_through_date: string; soft_end_date?: string; start_date: string; end_date: string | null; chick_in_weight: number; doc_in_count: number; feed_initial_balance: number; feed_initial_balance_date?: string | null; status: CycleStatus; active_site?: number | null; source_cycle_id?: number | null; proposed_end_date?: string | null; close_requested_at?: string | null; close_requested_by?: number | null; close_approved_by?: number | null; close_approved_at?: string | null; created_at: string; updated_at: string; }; export type KPI = { id: number; cycle: number; kandang: number; flock_id: number; date: string; age: number; mortality: number; mortality_total: number; feed: number; feed_total: number; harvest: number; harvest_total: number; harvest_weight: number; harvest_weight_total: number; chicken_life: number; chicken_life_percentage: number; iot_weight: number; average_harvest_day: number; average_harvest_weight: number; fcr: number; eef: number; cc: number; cw: number; fs: number; manual: number; created_at: string; updated_at: string; }; export type ManualInput = { id: number; cycle: number; kandang: number; flock_id: number; date: string; age_manual: number; mortality_manual: number; mortality_manual_total: number; feed_in_manual: number; feed_use_manual: number; feed_in_manual_total: number; feed_use_manual_total: number; feed_out_manual: number; feed_out_manual_total: number; harvest_manual: number; harvest_manual_total: number; harvest_weight_manual: number; harvest_weight_manual_total: number; manual_weight: number; average_harvest_day_manual: number; average_harvest_weight_manual: number; fcr_manual: number; eef_manual: number; created_at: string; updated_at: string; }; export type ChickenCounting = { id: number; cycle: number; kandang: number; flock_id: number; date: string; total_count: number; mortality_count: number; created_at: string; updated_at: string; }; export type ChickenWeight = { id: number; cycle: number; kandang: number; flock_id: number; date: string; age: number; doc_weight: number; average_weight: number; chicken_count: number; uniformity: number; average_daily_gain: number; created_at: string; updated_at: string; }; export type LatestAvg = { average_weight: number; date: string; age: number; uniformity: number; average_daily_gain: number; cycle: number; kandang: number; }; export type Karung = { id: number; cycle: number; kandang: number; flock_id: number; date: string; in_today: number; out_today: number; in_total: number; out_total: number; feed_use_today: number; feed_use_total: number; created_at: string; updated_at: string; }; export type PanelIoT = { id: number; flock: number; flock_id: number; kandang: number | null; date: string; timestamp: string | null; wind_speed: number; humidity: number; water_total: number; average_temperature: number; experience_temperature: number; created_at: string; updated_at: string; }; export type AIInsight = { id: number; cycle: number; kandang: number; flock_id: number; date: string; insight_text: string; alert: string; section: string; session: string; created_at: string; updated_at: string; }; export type KarungRequestResult = { karung: Karung; upstream: Record; }; export type CycleFilter = { cycle_id?: number; kandang_id?: number; site_id?: number; flock_id?: number; date?: string; status?: CycleStatus; }; export type SiteWrite = { site_name: string; user: number }; export type KandangWrite = { kandang_name: string; site: number; }; export type FlockWrite = { flock_name: string; kandang: number; }; export type CycleWrite = { kandang: number; total_days?: number; current_day?: number; start_date: string; end_date?: string | null; chick_in_weight: number; doc_in_count: number; feed_initial_balance?: number; feed_initial_balance_date?: string | null; status?: CycleStatus; }; export type InitialBalanceResult = { cycle: number; date: string; feed_initial_balance: number; feed_initial_balance_date: string | null; manual: number; manual_total: number; iot: number | null; accuracy: number | null; sync_error: string | null; }; export type CountingWrite = { cycle: number; date: string; total_count?: number; mortality_count?: number; }; export type ManualInputWrite = { cycle: number; date?: string; age_manual?: number; mortality_manual?: number; feed_in_manual?: number; feed_use_manual?: number; feed_out_manual?: number; harvest_manual?: number; harvest_weight_manual?: number; manual_weight?: number; };