import type { DatabaseAdapter } from '../db-manager.js'; import type { CaseMembershipSourceType } from './types.js'; export interface CaseMembershipScoreBreakdown { entity_overlap: number | null; embedding_similarity: number | null; temporal_proximity: number | null; explicit_from_wiki: number | null; } export interface CaseMembershipExplanation { case_id: string; terminal_case_id: string; resolved_via_case_id: string | null; chain: string[]; source_type: CaseMembershipSourceType; source_id: string; membership: { status: string; role: string | null; confidence: number | null; reason: string | null; user_locked: boolean; assignment_strategy: string | null; assigned_at: string | null; }; score_breakdown: CaseMembershipScoreBreakdown | null; score_breakdown_reason?: 'breakdown_not_recorded' | 'breakdown_malformed'; source_locator: string | null; explanation_updated_at: string | null; warnings: string[]; } export interface PopulateScoreBreakdownInput { case_id: string; source_type: CaseMembershipSourceType; source_id: string; assignment_strategy?: string | null; source_locator?: string | null; now?: string; } export type ExplainCaseMembershipResult = CaseMembershipExplanation | { kind: 'not_found'; code: 'case.membership_not_found'; message: string; terminal_case_id: string; resolved_via_case_id: string | null; chain: string[]; }; export declare function explainCaseMembership(adapter: DatabaseAdapter, input: { case_id: string; source_type: CaseMembershipSourceType; source_id: string; }): ExplainCaseMembershipResult; export declare function populateScoreBreakdown(adapter: DatabaseAdapter, membershipRow: PopulateScoreBreakdownInput, breakdown: CaseMembershipScoreBreakdown): { kind: 'populated'; changes: number; }; //# sourceMappingURL=membership-explain.d.ts.map