import type { RegulatoryFindingQuery, RegulatoryRetrievalCandidate, RegulatoryRetrievalFilters, RegulatoryRetriever } from '../../src/domain/regulatory-rag'; import type { UnifiedResultProjection } from '../../src/domain/unified-result'; import { buildRegulatoryFindingQuery } from '../../src/profiles/public-search/regulatory-query'; export interface RegulatoryFindingRetrievalResult { sourceResultId: string; status: 'candidates' | 'insufficient-public-context'; preparedQuery?: RegulatoryFindingQuery; candidates: RegulatoryRetrievalCandidate[]; } export class RegulatoryFindingRetrievalService { constructor(private readonly retriever: RegulatoryRetriever) {} async retrieve( finding: UnifiedResultProjection, limit: number, filters?: RegulatoryRetrievalFilters ): Promise { const preparedQuery = buildRegulatoryFindingQuery(finding); if (!preparedQuery) { return { sourceResultId: finding.sourceResultId, status: 'insufficient-public-context', candidates: [] }; } const candidates = await this.retriever.retrieve({ query: preparedQuery.query, limit, filters }); return { sourceResultId: finding.sourceResultId, status: 'candidates', preparedQuery, candidates }; } }