/** Data Hub BSI catalog tile: which BSI Kernel catalog and ISO 27001 mapping are active, and where from. */ export interface BsiCatalogState { version: 1; /** `bundled`: the pinned snapshots shipped with ASSESSOR; `bsi`: stored by `Update from BSI`. */ origin: 'bundled' | 'bsi'; updatedAt?: string; catalogVersion: string; crosswalkVersion: string; requirementCount: number; crosswalkEntryCount: number; catalogSha256: string; crosswalkSha256: string; /** Mapping targets the active catalog does not contain; they are reported, never reinterpreted. */ missingTargets: string[]; } export interface BsiCatalogRefreshResult extends BsiCatalogState { updated: boolean; } /** * Data Hub BSI tile: the retrieval index of the active Kernel catalog for direct BSI mappings (user decision * 2026-10-09). `outdated` means only an index of another catalog state exists; `unavailable` means embedding or * Qdrant is not configured. A BSI mapping still builds a missing index itself. */ export interface BsiSearchIndexStatus { version: 1; state: 'unavailable' | 'not-built' | 'outdated' | 'building' | 'built' | 'failed'; catalogVersion: string; corpusVersion: string; requirementCount: number; /** Indexed chunks of the active catalog state; a requirement with long guidance has several. */ indexedChunks: number; /** While building: embedded chunks of all chunks. */ progress?: { completed: number; total: number }; builtAt?: string; error?: string; disabledReason?: string; }