namespace DocumentAutomation.Shared; public enum TemplateSlotKind { PlainText, RichText, MainBody, Table, RepeatingTableRows, Image, Signature, Date, DocumentField } public enum TemplateRegionKind { Fixed, Variable, Repeating, Ignored } public sealed record TemplateSlotOccurrence { public required string Location { get; init; } public int? Page { get; init; } public string? Story { get; init; } public string? XPath { get; init; } } public sealed record TemplateSlot { public required string Id { get; init; } public required string Name { get; init; } public required TemplateSlotKind Kind { get; init; } public required string ContentControlTag { get; init; } public bool IsRequired { get; init; } public bool IsRepeating { get; init; } public string? PageArchetypeId { get; init; } public string? RepeatGroup { get; init; } public required IReadOnlyList Occurrences { get; init; } } public sealed record FixedRegion { public required string Id { get; init; } public required string Name { get; init; } public required TemplateRegionKind Kind { get; init; } public required IReadOnlyList Pages { get; init; } public required string Fingerprint { get; init; } public string? Story { get; init; } public string? Location { get; init; } public double Confidence { get; init; } } public sealed record RepeatingRegion { public required string Id { get; init; } public required string Name { get; init; } public required IReadOnlyList Pages { get; init; } public required string Fingerprint { get; init; } public required TemplateRegionKind Kind { get; init; } public string? Location { get; init; } } public sealed record PageArchetype { public required string Id { get; init; } public required string Name { get; init; } public bool IsFirstPage { get; init; } public bool IsRepeating { get; init; } public required IReadOnlyList ExamplePages { get; init; } public required IReadOnlyList FixedRegionIds { get; init; } public required IReadOnlyList SlotIds { get; init; } } public sealed record TemplateFieldBinding { public required string SourceField { get; init; } public required string TargetSlot { get; init; } public required string Scope { get; init; } public string? SourceStyle { get; init; } public string? TargetStyle { get; init; } } public sealed record SourceDocumentStructure { public required string SourcePath { get; init; } public required string Sha256 { get; init; } public required string NormalizedPath { get; init; } public required string NormalizedSha256 { get; init; } public required int PageCount { get; init; } public required int SectionCount { get; init; } public required IReadOnlyList Stories { get; init; } public required IReadOnlyList RepeatedFingerprints { get; init; } public required DocumentInspectionResult Inspection { get; init; } } public sealed record TemplateLearningSuggestion { public required string SuggestionType { get; init; } public required string SourceLocation { get; init; } public string? TargetSlot { get; init; } public string? ProposedName { get; init; } public double Confidence { get; init; } public required string Reason { get; init; } public bool RequiresConfirmation { get; init; } = true; } public sealed record LearnedTemplate { public required string TemplateId { get; init; } public required string Name { get; init; } public required string SourceFileName { get; init; } public required string SourceSha256 { get; init; } public required string NormalizedSha256 { get; init; } public required string CreatedAt { get; init; } public string MinimumEngineVersion { get; init; } = "1.0"; public required SourceDocumentStructure Source { get; init; } public required IReadOnlyList PageArchetypes { get; init; } public required IReadOnlyList FixedRegions { get; init; } public required IReadOnlyList RepeatingRegions { get; init; } public required IReadOnlyList Slots { get; init; } public required IReadOnlyList FieldBindings { get; init; } public required IReadOnlyList Suggestions { get; init; } } public sealed record DocumentNormalizationRequest { public required string SourcePath { get; init; } public required string WorkingDirectory { get; init; } public bool OpenReadOnly { get; init; } = true; public bool DisableMacros { get; init; } = true; } public sealed record DocumentNormalizationResult { public required string SourcePath { get; init; } public required string NormalizedPath { get; init; } public required string SourceSha256 { get; init; } public required string NormalizedSha256 { get; init; } public required bool WasConverted { get; init; } public required TimeSpan Duration { get; init; } public int? PageCount { get; init; } } public sealed record TemplateLearningRequest { public required string SourcePath { get; init; } public required string TemplateName { get; init; } public required string OutputPackagePath { get; init; } public bool CreateDefaultSlots { get; init; } = true; } public sealed record TemplateGenerationRequest { public required string TemplatePackagePath { get; init; } public required string ContentSourcePath { get; init; } public required string OutputDocxPath { get; init; } public IReadOnlyDictionary ScalarValues { get; init; } = new Dictionary(StringComparer.OrdinalIgnoreCase); } public sealed record TemplateGenerationResult { public required string OutputDocxPath { get; init; } public required string OutputPdfPath { get; init; } public required string GenerationLogPath { get; init; } public required string ValidationLogPath { get; init; } public required IReadOnlyList Validation { get; init; } }