64 lines
2.2 KiB
TypeScript
64 lines
2.2 KiB
TypeScript
// Filtros globales del dashboard (sidebar)
|
||
export interface DashboardFilters {
|
||
depto?: string
|
||
genero?: string[]
|
||
etario?: string[]
|
||
modalidad?: string[]
|
||
}
|
||
|
||
// Estado de cada widget
|
||
export type WidgetStatus = 'loading' | 'ok' | 'suppressed' | 'error'
|
||
|
||
// Payloads de cada RPC
|
||
export interface KpiData {
|
||
status: 'ok'
|
||
n: number
|
||
pct_cuidadores: number
|
||
score_bienestar: number | null // avg raw 4.3 (1.0–5.0)
|
||
pct_ausencias: number
|
||
}
|
||
|
||
export interface DeptoData {
|
||
depto: string
|
||
n: number | null
|
||
pct_cuidadores: number | null
|
||
suppressed: boolean
|
||
}
|
||
export interface PrevalenciaData { status: 'ok'; n_total: number; data: DeptoData[] }
|
||
|
||
export interface HeatmapCell { horas: string; ausencias: string; n: number | null; suppressed: boolean }
|
||
export interface HeatmapData { status: 'ok'; n_total: number; data: HeatmapCell[] }
|
||
|
||
export interface DistribucionData {
|
||
status: 'ok'; n: number
|
||
disc_propia: number; familiar: number; adulto_mayor: number; ninguno: number
|
||
}
|
||
|
||
export interface ApoyoItem { politica: string; n: number; pct: number }
|
||
export interface ApoyosData { status: 'ok'; n_total: number; data: ApoyoItem[] }
|
||
|
||
export interface ScoreData { status: 'ok'; n: number; score: number; zona: 'baja' | 'desarrollo' | 'consciente' }
|
||
|
||
export interface PiramideCell { etario: string; genero: string; n: number | null; suppressed: boolean }
|
||
export interface PiramideData { status: 'ok'; n_total: number; data: PiramideCell[] }
|
||
|
||
export interface IntensidadCell { horas: string; bienestar: string; n: number | null; suppressed: boolean }
|
||
export interface IntensidadData { status: 'ok'; n_total: number; data: IntensidadCell[] }
|
||
|
||
export interface SaturacionSegmento {
|
||
segmento: string
|
||
n: number | null
|
||
pct: number | null
|
||
apoyo: string | null
|
||
suppressed: boolean
|
||
}
|
||
export interface SaturacionData { status: 'ok'; n_total: number; segmentos: SaturacionSegmento[] }
|
||
|
||
export type SuppressedPayload = { status: 'suppressed'; min_n: number; n: number }
|
||
|
||
export type RpcResult<T> = T | SuppressedPayload
|
||
|
||
export function isSuppressed(r: unknown): r is SuppressedPayload {
|
||
return typeof r === 'object' && r !== null && (r as Record<string, unknown>)['status'] === 'suppressed'
|
||
}
|