///|
/// Supplies a caller-owned document identity and scanning policy.
pub(all) struct RomanDocument {
  id : String
  text : String
  config : ScanConfig
} derive(Eq, Debug)

///|
/// Retains either a complete scan or a document-local configuration failure.
pub(all) enum RomanDocumentOutcome {
  CorpusScanned(RomanScanReport)
  CorpusScanFailed(ConfigError)
} derive(Eq, Debug)

///|
/// Retains one corpus result in input order.
pub(all) struct RomanDocumentResult {
  id : String
  text : String
  outcome : RomanDocumentOutcome
} derive(Eq, Debug)

///|
/// Aggregates only evidence produced by completed document scans.
pub(all) struct RomanCorpusStatistics {
  total_documents : Int
  scanned_documents : Int
  configuration_failures : Int
  candidates_examined : Int
  matches : Int
  rejections : Int
} derive(Eq, Debug)

///|
/// Returns stable document results and corpus totals.
pub(all) struct RomanCorpusReport {
  documents : Array[RomanDocumentResult]
  statistics : RomanCorpusStatistics
} derive(Eq, Debug)

///|
/// Reports caller-owned document identity errors.
pub(all) enum CorpusValidationError {
  EmptyDocumentId(Int)
  DuplicateDocumentId(String)
} derive(Eq, Debug)