Assessor_2.0/src/compliance/regulatory-rag.ts

120 lines
3.2 KiB
TypeScript

export const REGULATORY_CHUNK_SCHEMA_VERSION = 2 as const;
export const REGULATORY_FINDING_QUERY_SCHEMA_VERSION = 1 as const;
export type RegulatoryDocumentSchemaVersion = 1 | 2;
export type RegulatoryControlTheme = 'organizational' | 'people' | 'physical' | 'technological';
export type RegulatorySectionKind = 'attributes' | 'control' | 'purpose' | 'guidance' | 'other-information';
export type RegulatoryRetrievalRole = 'semantic' | 'reference';
export interface RegulatoryControlDocument {
schemaVersion: RegulatoryDocumentSchemaVersion;
corpusId: string;
corpusVersion: string;
documentId: string;
framework: string;
frameworkVersion: string;
controlId: string;
language: string;
title: string;
text: string;
sourceUri?: string;
annexAControlId?: string;
controlTheme?: RegulatoryControlTheme;
sourceStandard?: 'ISO/IEC 27001' | 'ISO/IEC 27002';
sourceEdition?: string;
nationalEdition?: string;
sectionKind?: RegulatorySectionKind;
sourcePageStart?: number;
sourcePageEnd?: number;
retrievalRole?: RegulatoryRetrievalRole;
parserVersion?: string;
sourceSha256?: string;
}
export interface RegulatoryCorpusSource {
standard: 'ISO/IEC 27001' | 'ISO/IEC 27002';
sourceEdition: string;
nationalEdition: string;
sha256: string;
pageCount: number;
}
export interface RegulatoryCorpusV2 {
schemaVersion: 2;
corpusId: string;
corpusVersion: string;
language: string;
parserVersion: string;
generatedAt: string;
sources: RegulatoryCorpusSource[];
documents: RegulatoryControlDocument[];
}
export interface RegulatoryChunk {
schemaVersion: RegulatoryDocumentSchemaVersion;
corpusId: string;
corpusVersion: string;
documentId: string;
framework: string;
frameworkVersion: string;
controlId: string;
chunkId: string;
chunkIndex: number;
language: string;
title: string;
text: string;
textSha256: string;
sourceUri?: string;
annexAControlId?: string;
controlTheme?: RegulatoryControlTheme;
sourceStandard?: 'ISO/IEC 27001' | 'ISO/IEC 27002';
sourceEdition?: string;
nationalEdition?: string;
sectionKind?: RegulatorySectionKind;
sourcePageStart?: number;
sourcePageEnd?: number;
retrievalRole?: RegulatoryRetrievalRole;
parserVersion?: string;
sourceSha256?: string;
}
export interface RegulatoryRetrievalFilters {
corpusId?: string;
corpusVersion?: string;
framework?: string;
frameworkVersion?: string;
controlId?: string;
language?: string;
sourceStandard?: string;
sectionKind?: RegulatorySectionKind;
retrievalRole?: RegulatoryRetrievalRole;
}
export interface RegulatoryRetrievalRequest {
query: string;
limit: number;
filters?: RegulatoryRetrievalFilters;
}
export interface RegulatoryRetrievalCandidate {
score: number;
chunk: RegulatoryChunk;
}
export interface RegulatoryRetriever {
retrieve(request: RegulatoryRetrievalRequest): Promise<RegulatoryRetrievalCandidate[]>;
}
export interface RegulatoryFindingQuery {
schemaVersion: 1;
query: string;
specificity: 'rule' | 'topic';
publicTool?: string;
publicRuleId?: string;
publicTopics: string[];
}
export interface RegulatoryReranker {
rerank(query: string, candidates: RegulatoryRetrievalCandidate[]): Promise<RegulatoryRetrievalCandidate[]>;
}