33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
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<RegulatoryFindingRetrievalResult> {
|
|
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 };
|
|
}
|
|
}
|