Assessor_2.0/server/regulatory/regulatory-finding-retrieva...

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 };
}
}