120 lines
3.2 KiB
TypeScript
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[]>;
|
|
}
|