<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Wingman.Application</name>
    </assembly>
    <members>
        <member name="T:Wingman.Application.BackgroundJobs.DocumentIntegrationSyncJob">
            <summary>
            Hangfire job that runs one document sync for a single integration.
            Invoked by a recurring job per integration (schedule from integration's SyncIntervalMinutes).
            </summary>
        </member>
        <member name="M:Wingman.Application.BackgroundJobs.DocumentIntegrationSyncJob.ExecuteAsync(System.Guid,System.String,System.Threading.CancellationToken)">
            <summary>
            Runs sync for the given integration. Sets tenant context for the scope so repository uses correct tenant.
            </summary>
        </member>
        <member name="T:Wingman.Application.BackgroundJobs.GoogleDriveAutoSyncJob">
            <summary>
            Background job that polls for Google Drive integrations ready for auto-sync
            and enqueues sync jobs based on their configured SyncIntervalMinutes.
            
            This job runs continuously (every 5 minutes) and dynamically schedules syncs
            based on the NextSyncAt timestamp and SyncIntervalMinutes configuration.
            </summary>
        </member>
        <member name="M:Wingman.Application.BackgroundJobs.GoogleDriveAutoSyncJob.ProcessReadyIntegrationsAsync(System.Threading.CancellationToken)">
            <summary>
            Polls for Google Drive integrations ready for auto-sync and enqueues sync jobs.
            This method is called by Hangfire on a recurring schedule (every 5 minutes).
            </summary>
        </member>
        <member name="T:Wingman.Application.BackgroundJobs.JotformFormsSyncJob">
            <summary>
            Background job to sync Jotform forms from API to database for all operators
            Runs every 15-30 minutes to keep cache fresh
            Syncs forms per operator using their respective Jotform integrations
            </summary>
        </member>
        <member name="M:Wingman.Application.BackgroundJobs.JotformFormsSyncJob.SyncFormsAsync(System.Threading.CancellationToken)">
            <summary>
            Sync all Jotform forms from API to database for all operators with active integrations
            This job runs periodically to keep the cache fresh
            </summary>
        </member>
        <member name="M:Wingman.Application.BackgroundJobs.JotformFormsSyncJob.SyncStaleFormsAsync(System.Threading.CancellationToken)">
            <summary>
            Sync only stale forms (older than cutoff time) for all operators
            This is a lighter operation that only updates forms that need refreshing
            </summary>
        </member>
        <member name="T:Wingman.Application.BackgroundJobs.SyncLogCleanupJob">
            <summary>
            Background job to clean up old sync logs based on configurable retention period.
            Retains only the last N days of sync logs (default 7); runs on a configurable cron (default every 5 days).
            </summary>
        </member>
        <member name="M:Wingman.Application.BackgroundJobs.SyncLogCleanupJob.CleanupOldLogsAsync(System.Nullable{System.Int32},System.Threading.CancellationToken)">
            <summary>
            Clean up sync logs older than retention period (from config; default 7 days).
            Schedule is configured via SyncLogCleanupSettings.CronSchedule (e.g. every 5 days).
            </summary>
        </member>
        <member name="M:Wingman.Application.BackgroundJobs.SyncLogCleanupJob.CleanupAbandonedSyncLogsAsync(System.Threading.CancellationToken)">
            <summary>
            Clean up abandoned sync logs that are stuck in "Started" status for too long
            These are likely from crashed processes or failed background jobs
            </summary>
        </member>
        <member name="M:Wingman.Application.BackgroundJobs.SyncLogCleanupJob.ArchiveOldLogsAsync(System.Int32,System.Threading.CancellationToken)">
            <summary>
            Archive old sync logs to separate storage (future enhancement)
            </summary>
        </member>
        <member name="T:Wingman.Application.BackgroundJobs.GetOldSyncLogsSpecification">
            <summary>
            Specification to get old sync logs for cleanup
            </summary>
        </member>
        <member name="T:Wingman.Application.BackgroundJobs.GetAbandonedSyncLogsSpecification">
            <summary>
            Specification to get abandoned sync logs stuck in "Started" status
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IBackgroundJobTenantSetter">
            <summary>
            Sets the current tenant for the current async context when running a background job.
            Used so repository and DbContext use the correct tenant when the job has no HTTP context.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IBackgroundJobTenantSetter.SetTenantId(System.String)">
            <summary>
            Set the tenant id for the current async context (e.g. for this job execution).
            Pass null to clear.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IBackgroundJobTenantSetter.GetCurrentTenantId">
            <summary>
            Get the tenant id currently set for the current async context, or null.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.ICredentialEncryptionService">
            <summary>
            Service for encrypting and decrypting sensitive credentials
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.ICredentialEncryptionService.Encrypt(System.String)">
            <summary>
            Encrypt plain text credentials
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.ICredentialEncryptionService.Decrypt(System.String)">
            <summary>
            Decrypt encrypted credentials
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IDocumentAssignedRolesLookup">
            <summary>
            Resolves operator roles assigned to synced documents via role–document mappings.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentAssignedRolesLookup.GetRolesByDocumentIdsAsync(System.Collections.Generic.IReadOnlyCollection{System.Guid},System.String,System.Threading.CancellationToken)">
            <summary>
            Returns roles grouped by document id for the current tenant. Missing document ids are omitted from the dictionary.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentAssignedRolesLookup.GetDocumentIdsForRoleAsync(System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Document ids that have a role–document mapping for <paramref name="roleId"/> in <paramref name="tenantId"/>.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IDocumentSourceAdapter">
            <summary>
            Interface for document source adapters (ClickHelp, SharePoint, Google Drive, etc.)
            NOTE: This interface does NOT extend ITransientService because adapters are created by the factory with a DocumentIntegration instance
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSourceAdapter.GetAvailableDocumentsAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Get all available documents from the source for a specific operator
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSourceAdapter.DownloadDocumentAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Download a specific document from the source
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSourceAdapter.CheckForUpdatesAsync(System.String,System.DateTime,System.Threading.CancellationToken)">
            <summary>
            Check for document updates since the last sync
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSourceAdapter.ValidateConnectionAsync(System.Threading.CancellationToken)">
            <summary>
            Validate the connection and credentials
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.IDocumentSourceAdapter.ProviderName">
            <summary>
            Provider name (ClickHelp, SharePoint, GoogleDrive, etc.)
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.DocumentMetadata">
            <summary>
            Metadata for a document from an external source
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.SyncResult">
            <summary>
            Result of a sync operation
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.ConnectionValidationResult">
            <summary>
            Result of connection validation
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IDocumentSourceAdapterFactory">
            <summary>
            Factory for creating document source adapters
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSourceAdapterFactory.CreateAdapter(Wingman.Core.Domain.Schema.DocumentIntegration)">
            <summary>
            Create an adapter for the given integration
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IDocumentSourceValidationFactory">
            <summary>
            Factory for creating document source adapters for validation purposes (with plain text credentials)
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSourceValidationFactory.CreateValidationAdapter(System.String,System.String,System.String,System.String,System.String)">
            <summary>
            Create an adapter for validation using plain text credentials
            </summary>
            <param name="provider">Provider name (ClickHelp, SharePoint, GoogleDrive)</param>
            <param name="baseUrl">Base URL for the integration</param>
            <param name="username">Username or service account email</param>
            <param name="password">Plain text password or private key</param>
            <param name="apiKey">Optional API key</param>
            <returns>Document source adapter for validation</returns>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IDocumentSyncNotificationService">
            <summary>
            Sends push notifications to operator users when a document integration sync completes with file changes (new, updated, or deleted).
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSyncNotificationService.NotifySyncCompletedAsync(Wingman.Core.Domain.Schema.DocumentIntegration,System.Collections.Generic.IReadOnlyList{System.Guid},System.Collections.Generic.IReadOnlyList{System.Guid},System.Collections.Generic.IReadOnlyList{System.Guid},System.Guid,System.Threading.CancellationToken)">
            <summary>
            Notifies all users of the integration's operator that documents were synced (new/updated/deleted).
            Call only when sync succeeded and at least one change was applied.
            Does not throw; push failures are logged and do not affect sync result.
            </summary>
            <summary>
            Notifies users that a sync completed with file changes.
            Recipient selection is expected to use RoleDocumentAccess mappings (so pushes align with mobile visibility rules).
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSyncNotificationService.NotifyDocumentsAssignedToRoleAsync(System.String,System.String,System.Guid,System.Collections.Generic.IReadOnlyList{System.Guid},System.Threading.CancellationToken)">
            <summary>
            Notifies users when one or more documents were newly assigned to an Identity operator-scoped role.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSyncNotificationService.NotifyDocumentCategoryChangedAsync(System.String,System.Guid,System.Guid,System.Collections.Generic.IReadOnlyList{System.Guid},System.Threading.CancellationToken)">
            <summary>
            Notifies users when a document publication category changed.
            Recipients should be users mapped to the document via RoleDocumentAccess (after the change).
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IDocumentSyncService">
            <summary>
            Service for synchronizing documents from external sources
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSyncService.ExecuteSyncAsync(System.Guid,System.String,System.Threading.CancellationToken)">
            <summary>
            Execute a sync operation for a specific integration
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSyncService.ProcessFileChangesAsync(Wingman.Core.Domain.Schema.DocumentIntegration,System.Collections.Generic.List{Wingman.Application.Common.Interfaces.DocumentMetadata},System.Threading.CancellationToken)">
            <summary>
            Process file changes (detect new, updated, deleted files). Uses integration.AllowedFileTypes when set to filter which files to sync.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSyncService.DownloadAndStoreFileAsync(System.Guid,Wingman.Application.Common.Interfaces.DocumentMetadata,System.Threading.CancellationToken)">
            <summary>
            Download a file and store it
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IDocumentSyncService.UpdateFileIndexAsync(System.Guid,System.Guid,Wingman.Application.Common.Interfaces.FileChanges,System.Threading.CancellationToken)">
            <summary>
            Update the file index with changes
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.SyncExecutionResult">
            <summary>
            Result of a sync execution
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.SyncErrorCategories">
            <summary>
            Error categories for sync failures
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.SyncErrorCodes">
            <summary>
            Error codes for specific error scenarios
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.FileChanges">
            <summary>
            Detected file changes
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.StoredFileInfo">
            <summary>
            Information about a stored file
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IEntityNotificationService">
            <summary>
            Service for sending push notifications when entities are created.
            Provides a generic, reusable way to notify users about new entities.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IEntityNotificationService.NotifyEntityCreatedAsync``1(``0,System.Guid,Wingman.Application.Common.Interfaces.EntityNotificationConfig,System.Threading.CancellationToken)">
            <summary>
            Sends push notifications to all users of an operator when an entity is created.
            </summary>
            <typeparam name="TEntity">The entity type</typeparam>
            <param name="entity">The created entity</param>
            <param name="operatorId">The operator ID associated with the entity</param>
            <param name="config">Configuration for the notification (title, body, data, etc.)</param>
            <param name="cancellationToken">Cancellation token</param>
            <returns>Results of the push notification sends</returns>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.EntityNotificationConfig">
            <summary>
            Configuration for entity-created notifications
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.EntityNotificationConfig.Title">
            <summary>
            Notification title (e.g., "New link available")
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.EntityNotificationConfig.BodyTemplate">
            <summary>
            Notification body template. Use {PropertyName} to reference entity properties.
            Example: "A new link '{Title}' is now available."
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.EntityNotificationConfig.BuildData">
            <summary>
            Function to build notification data dictionary from the entity.
            Should return a dictionary with keys like "entity_id", "type", etc.
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.EntityNotificationConfig.GetImageUrl">
            <summary>
            Function to get the image URL from the entity (e.g., IconUrl, LogoUrl)
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.EntityNotificationConfig.GetActionUrl">
            <summary>
            Function to get the action URL from the entity (e.g., Url, LinkUrl)
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.EntityNotificationConfig.ShouldNotify">
            <summary>
            Function to determine if notification should be sent (e.g., check IsActive)
            Returns true by default if not specified.
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.EntityNotificationConfig.Module">
            <summary>
            Module for the notification (e.g., Contact, Link, Form, Training, Publication, General)
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.EntityNotificationConfig.MessageType">
            <summary>
            Message type for the notification (e.g., Alert, Update)
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IJobManagementService">
            <summary>
            Service for managing and monitoring Hangfire background jobs
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.GetJobByIdAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Get job information by job ID
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.GetJobsAsync(System.Int32,System.Int32,System.String,System.Threading.CancellationToken)">
            <summary>
            Get list of jobs with optional filtering
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.GetJobsByStateAsync(System.String,System.Int32,System.Int32,System.Threading.CancellationToken)">
            <summary>
            Get jobs by state (e.g., "Succeeded", "Failed", "Processing", "Enqueued")
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.GetFailedJobsAsync(System.Int32,System.Int32,System.Threading.CancellationToken)">
            <summary>
            Get failed jobs
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.GetSucceededJobsAsync(System.Int32,System.Int32,System.Threading.CancellationToken)">
            <summary>
            Get succeeded jobs
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.GetProcessingJobsAsync(System.Int32,System.Int32,System.Threading.CancellationToken)">
            <summary>
            Get processing (running) jobs
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.GetScheduledJobsAsync(System.Int32,System.Int32,System.Threading.CancellationToken)">
            <summary>
            Get scheduled jobs
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.DeleteJobAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Delete a job
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.RequeueJobAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Requeue a failed job
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJobManagementService.GetJobStatisticsAsync(System.Threading.CancellationToken)">
            <summary>
            Get job statistics
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IJotformService">
            <summary>
            Service interface for interacting with Jotform API
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJotformService.GetFormsAsync(System.Guid,System.Int32,System.Int32,System.Boolean,System.Nullable{System.Boolean},System.Nullable{System.Boolean},System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Get all forms from database (no API sync). Forms must be synced separately using the sync endpoint.
            </summary>
            <param name="operatorId">Operator ID to scope forms to</param>
            <param name="offset">Pagination offset</param>
            <param name="limit">Pagination limit</param>
            <param name="forceRefresh">Ignored - kept for backward compatibility</param>
            <param name="isTraining">Filter by IsTraining flag (null = no filter)</param>
            <param name="isForm">Filter by IsForm flag (null = no filter)</param>
            <param name="apiKey">Ignored - kept for backward compatibility</param>
            <param name="baseUrl">Ignored - kept for backward compatibility</param>
            <param name="cancellationToken">Cancellation token</param>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJotformService.SyncFormsFromApiAsync(System.Guid,System.String,System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Sync forms from Jotform API to database
            </summary>
            <param name="operatorId">Operator ID to sync forms for</param>
            <param name="apiKey">API key from integration</param>
            <param name="baseUrl">Base URL from integration</param>
            <param name="cancellationToken">Cancellation token</param>
            <returns>Number of forms synced and API limit remaining</returns>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJotformService.GetFormDetailsAsync(System.String,System.Guid,System.String,System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Get form details by ID including analytics
            </summary>
            <param name="formId">External form ID from Jotform</param>
            <param name="operatorId">Operator ID to scope the form lookup</param>
            <param name="apiKey">API key from integration</param>
            <param name="baseUrl">Base URL from integration</param>
            <param name="cancellationToken">Cancellation token</param>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJotformService.GetFormSubmissionsAsync(System.String,System.Guid,System.Int32,System.Int32,System.Collections.Generic.Dictionary{System.String,System.String},System.String,System.String,System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Get form submissions with pagination and filtering
            </summary>
            <param name="formId">External form ID from Jotform</param>
            <param name="operatorId">Operator ID to scope the form lookup</param>
            <param name="offset">Pagination offset</param>
            <param name="limit">Pagination limit</param>
            <param name="filter">Optional filter dictionary</param>
            <param name="orderBy">Optional order by clause</param>
            <param name="apiKey">API key from integration</param>
            <param name="baseUrl">Base URL from integration</param>
            <param name="cancellationToken">Cancellation token</param>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJotformService.GetSubmissionAsync(System.String,System.Guid,System.String,System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Get a single submission by ID
            </summary>
            <param name="submissionId">Submission ID from Jotform</param>
            <param name="operatorId">Operator ID to scope the submission lookup</param>
            <param name="apiKey">API key from integration</param>
            <param name="baseUrl">Base URL from integration</param>
            <param name="cancellationToken">Cancellation token</param>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IJotformService.GetFormReportsAsync(System.String,System.Guid,System.String,System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Get form reports/analytics
            </summary>
            <param name="formId">External form ID from Jotform</param>
            <param name="operatorId">Operator ID to scope the form lookup</param>
            <param name="apiKey">API key from integration</param>
            <param name="baseUrl">Base URL from integration</param>
            <param name="cancellationToken">Cancellation token</param>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IOccurrenceReportNumberService">
            <summary>
            Service for generating sequential occurrence report numbers per operator
            Format: OR-YYYY-00001, OR-YYYY-00002, etc.
            Each operator maintains their own sequence counter per year
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IOccurrenceReportNumberService.GenerateNextReportNumberAsync(System.Guid,System.Threading.CancellationToken)">
            <summary>
            Generates the next sequential report number for the specified operator
            Format: OR-YYYY-00001
            Thread-safe operation that ensures unique sequential numbering per operator per year
            </summary>
            <param name="operatorId">The operator ID</param>
            <param name="cancellationToken">Cancellation token</param>
            <returns>The next report number in sequence</returns>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IOccurrenceReportNumberService.GetCurrentSequenceAsync(System.Guid,System.Int32,System.Threading.CancellationToken)">
            <summary>
            Gets the current sequence number for an operator in a specific year (for informational purposes)
            </summary>
            <param name="operatorId">The operator ID</param>
            <param name="year">The year to check</param>
            <param name="cancellationToken">Cancellation token</param>
            <returns>Current sequence number, or 0 if no reports have been created</returns>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IOperatorDefaultRoleService">
            <summary>
            Ensures and resolves the default operator-scoped role used for
            automatic user role assignment and default document access.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IOperatorDefaultRoleService.GetDefaultRoleForDocumentMappingAsync(System.Guid,System.Threading.CancellationToken)">
            <summary>
            Resolves the operator role for <see cref="!:RoleDocumentAccess"/> only when
            <c>default_role_id</c> is set and the role exists. Does not create roles or update the operator.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IPublicationCategoryRoleDocumentCountService">
            <summary>
            Batch-counts synced documents per publication category for a given operator and Identity role (via RoleDocumentAccess).
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IPublicationCategoryRoleDocumentCountService.GetDocumentCountsByCategoryAsync(System.Guid,System.String,System.Collections.Generic.IReadOnlyCollection{System.Guid},System.String,System.Threading.CancellationToken)">
            <summary>
            Returns counts keyed by publication category id. Categories with no matching documents are omitted from the dictionary.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IPushNotificationService.SendToDeviceAsync(System.String,System.String,System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.String},System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Sends a push notification to a specific device using its push token
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IPushNotificationService.SendToDevicesAsync(System.Collections.Generic.IEnumerable{System.ValueTuple{System.String,System.String}},System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.String},System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Sends a push notification to multiple devices
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IPushNotificationService.SendToUserAsync(System.String,System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.String},System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Sends a push notification to all devices of a specific user
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IPushNotificationService.SendToUsersAsync(System.Collections.Generic.IEnumerable{System.String},System.String,System.String,System.Collections.Generic.Dictionary{System.String,System.String},System.String,System.String,System.Threading.CancellationToken)">
            <summary>
            Sends a push notification to all devices of multiple users
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IPushNotificationService.SendNotificationAsync(Wingman.Domain.Schema.Notification,System.Threading.CancellationToken)">
            <summary>
            Sends a push notification based on Notification entity
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IRateLimiter">
            <summary>
            Rate limiter for throttling API calls per integration type
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IRateLimiter.WaitIfNeededAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            Wait if necessary to respect rate limits for the given provider
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IRecurringJobScheduler">
            <summary>
            Schedules or unschedules a Hangfire recurring job for a document integration's auto-sync.
            Used when integration is created/updated with auto-sync, or when auto-sync is disabled or integration is deleted.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IRecurringJobScheduler.ScheduleSyncJob(System.Guid,System.String,System.Int32)">
            <summary>
            Register or update the recurring sync job for the integration using its <paramref name="syncIntervalMinutes"/>.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IRecurringJobScheduler.UnscheduleSyncJob(System.Guid)">
            <summary>
            Remove the recurring sync job for the integration.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.ISyncLockService">
            <summary>
            Service for managing sync locks to prevent concurrent syncs
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.ISyncLockService.AcquireLockAsync(System.Guid,System.TimeSpan,System.Threading.CancellationToken)">
            <summary>
            Acquires a lock for a sync operation
            </summary>
            <param name="integrationId">Integration ID to lock</param>
            <param name="timeout">Timeout for lock acquisition</param>
            <param name="cancellationToken">Cancellation token</param>
            <returns>Disposable lock handle</returns>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.ISyncLock">
            <summary>
            Represents an acquired sync lock
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.ISyncLock.IntegrationId">
            <summary>
            Integration ID that is locked
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.ISyncLock.IsHeld">
            <summary>
            Whether the lock is still held
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.ITransactionManager">
            <summary>
            Manages database transactions
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.ITransactionManager.BeginTransactionAsync(System.Threading.CancellationToken)">
            <summary>
            Begins a new transaction
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.ITransactionManager.ExecuteInTransactionAsync(System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task},System.Threading.CancellationToken)">
            <summary>
            Executes the given action inside a transaction as a retriable unit.
            Use this when using a retrying execution strategy (e.g. EnableRetryOnFailure) so the entire transaction is retried on transient failures.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.ITransaction">
            <summary>
            Represents a database transaction
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.ITransaction.CommitAsync(System.Threading.CancellationToken)">
            <summary>
            Commits the transaction
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.ITransaction.RollbackAsync(System.Threading.CancellationToken)">
            <summary>
            Rolls back the transaction
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.IUserDocumentAccessService">
            <summary>
            Resolves which synced documents the current user may access (non-admin: union of role-document mappings).
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IUserDocumentAccessService.GetAllowedDocumentIdsAsync(System.Threading.CancellationToken)">
            <summary>
            Returns null if the user has full document access (Admin).
            Otherwise returns the set of allowed document IDs (may be empty).
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Interfaces.IUserDocumentAccessService.HasUnrestrictedDocumentAccessAsync(System.Threading.CancellationToken)">
            <summary>
            True if the current user may access all documents for their operator (Admin).
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.SyncLogCleanupSettings">
            <summary>
            Configuration settings for the sync log cleanup background job.
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.SyncLogCleanupSettings.RetentionDays">
            <summary>
            Number of days of sync logs to retain. Logs older than this are deleted.
            Default: 7 (retain last 7 days only).
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.SyncLogCleanupSettings.CronSchedule">
            <summary>
            Cron expression for how often the cleanup job runs (e.g. every 5 days).
            Default: "0 2 */5 * *" (every 5 days at 2:00 AM UTC).
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.SyncLogCleanupSettings.BatchSize">
            <summary>
            Batch size for deleting old sync logs per iteration (avoids memory issues).
            Default: 1000.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Interfaces.SyncSettings">
            <summary>
            Configuration settings for document synchronization
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.SyncSettings.BatchSize">
            <summary>
            Batch size for processing files
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.SyncSettings.BatchDelayMs">
            <summary>
            Delay between batches in milliseconds
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.SyncSettings.CheckpointUpdateInterval">
            <summary>
            Interval for updating checkpoint (every N files)
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.SyncSettings.MaxFileSizeBytes">
            <summary>
            Maximum file size in bytes (0 = no limit)
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.SyncSettings.SyncLockTimeoutMinutes">
            <summary>
            Timeout for sync lock acquisition in minutes
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Interfaces.SyncSettings.EnableTransactions">
            <summary>
            Enable transaction support for sync operations
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Mailing.OccurrenceEmailModel">
            <summary>
            Model for occurrence notification email template
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Models.BaseFilter.AdvancedSearch">
            <summary>
            Column Wise Search is Supported.
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Models.BaseFilter.Keyword">
            <summary>
            Keyword to Search in All the available columns of the Resource.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Persistence.IBypassTenantFilter">
            <summary>
            Marker interface for specifications that need to bypass Finbuckle's automatic tenant filtering.
            Used by background jobs that need to query across all tenants.
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Persistence.IDapperRepository.QueryAsync``1(System.String,System.Object,System.Data.IDbTransaction,System.Threading.CancellationToken)">
            <summary>
            Get an <see cref="T:System.Collections.Generic.IReadOnlyList`1"/> using raw sql string with parameters.
            </summary>
            <typeparam name="T">The type of the entity.</typeparam>
            <param name="sql">The sql string.</param>
            <param name="param">The paramters in the sql string.</param>
            <param name="transaction">The transaction to be performed.</param>
            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to observe while waiting for the task to complete.</param>
            <returns>Returns <see cref="T:System.Threading.Tasks.Task"/> of <see cref="T:System.Collections.Generic.IReadOnlyCollection`1"/>.</returns>
        </member>
        <member name="M:Wingman.Application.Common.Persistence.IDapperRepository.QueryFirstOrDefaultAsync``1(System.String,System.Object,System.Data.IDbTransaction,System.Threading.CancellationToken)">
            <summary>
            Get a <typeparamref name="T"/> using raw sql string with parameters.
            </summary>
            <typeparam name="T">The type of the entity.</typeparam>
            <param name="sql">The sql string.</param>
            <param name="param">The paramters in the sql string.</param>
            <param name="transaction">The transaction to be performed.</param>
            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to observe while waiting for the task to complete.</param>
            <returns>Returns <see cref="T:System.Threading.Tasks.Task"/> of <typeparamref name="T"/>.</returns>
        </member>
        <member name="M:Wingman.Application.Common.Persistence.IDapperRepository.QuerySingleAsync``1(System.String,System.Object,System.Data.IDbTransaction,System.Threading.CancellationToken)">
            <summary>
            Get a <typeparamref name="T"/> using raw sql string with parameters.
            </summary>
            <typeparam name="T">The type of the entity.</typeparam>
            <param name="sql">The sql string.</param>
            <param name="param">The paramters in the sql string.</param>
            <param name="transaction">The transaction to be performed.</param>
            <param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to observe while waiting for the task to complete.</param>
            <returns>Returns <see cref="T:System.Threading.Tasks.Task"/> of <typeparamref name="T"/>.</returns>
        </member>
        <member name="T:Wingman.Application.Common.Persistence.IRepository`1">
            <summary>
            The regular read/write repository for an aggregate root.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Persistence.IReadRepository`1">
            <summary>
            The read-only repository for an aggregate root.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Persistence.IRepositoryWithEvents`1">
            <summary>
            A special (read/write) repository for an aggregate root,
            that also adds EntityCreated, EntityUpdated or EntityDeleted
            events to the DomainEvents of the entities before adding,
            updating or deleting them.
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Response.ApiResponse`1">
            <summary>
            Unified API response structure for all endpoints ensuring consistent JSON format.
            All API responses will follow this structure: { succeeded, message, type, data }
            </summary>
            <typeparam name="T">The type of data being returned</typeparam>
        </member>
        <member name="P:Wingman.Application.Common.Response.ApiResponse`1.Succeeded">
            <summary>
            Indicates whether the operation was successful
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.ApiResponse`1.Message">
            <summary>
            Human-readable message describing the result
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.ApiResponse`1.Type">
            <summary>
            Message type for UI presentation (Success=0, Info=1, Warning=2, Error=3)
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.ApiResponse`1.Data">
            <summary>
            The response data (can be an object, list, ID, or null)
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.ApiResponse`1.Success(`0,System.String)">
            <summary>
            Creates a successful response with data
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.ApiResponse`1.Success(System.String)">
            <summary>
            Creates a successful response without data
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.ApiResponse`1.Error(System.String,`0)">
            <summary>
            Creates an error response
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.ApiResponse`1.Info(`0,System.String)">
            <summary>
            Creates an info response
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.ApiResponse`1.Warning(`0,System.String)">
            <summary>
            Creates a warning response
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Response.ApiResponse">
            <summary>
            Non-generic ApiResponse for operations that don't return data
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Response.MessageType">
            <summary>
            Message type enumeration for UI presentation
            </summary>
        </member>
        <member name="F:Wingman.Application.Common.Response.MessageType.Success">
            <summary>Success message (green UI)</summary>
        </member>
        <member name="F:Wingman.Application.Common.Response.MessageType.Info">
            <summary>Informational message (blue UI)</summary>
        </member>
        <member name="F:Wingman.Application.Common.Response.MessageType.Warning">
            <summary>Warning message (yellow UI)</summary>
        </member>
        <member name="F:Wingman.Application.Common.Response.MessageType.Error">
            <summary>Error message (red UI)</summary>
        </member>
        <member name="T:Wingman.Application.Common.Response.MessageResponse">
            <summary>
            Response type for operations that return a simple success/error message with optional data.
            Commonly used in MediatR handlers for Create, Update, Delete operations.
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.MessageResponse.Succeeded">
            <summary>
            Indicates whether the operation was successful
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.MessageResponse.Message">
            <summary>
            The response message
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.MessageResponse.Type">
            <summary>
            Message type (for UI presentation)
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.MessageResponse.Data">
            <summary>
            Optional data payload (e.g., created entity ID)
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.MessageResponse.Success(System.String,System.Object)">
            <summary>
            Creates a success response
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.MessageResponse.Error(System.String,System.Object)">
            <summary>
            Creates an error response
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.MessageResponse.Info(System.String,System.Object)">
            <summary>
            Creates an info response
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.MessageResponse.Warning(System.String,System.Object)">
            <summary>
            Creates a warning response
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Response.StandardResponse`1">
            <summary>
            Standard API response wrapper providing consistent structure for all endpoints.
            </summary>
            <typeparam name="T">The type of data being returned</typeparam>
        </member>
        <member name="P:Wingman.Application.Common.Response.StandardResponse`1.Succeeded">
            <summary>
            Indicates whether the operation was successful
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.StandardResponse`1.Data">
            <summary>
            The response data (null for errors or operations with no return value)
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.StandardResponse`1.Message">
            <summary>
            Primary message describing the result
            </summary>
        </member>
        <member name="P:Wingman.Application.Common.Response.StandardResponse`1.Errors">
            <summary>
            Collection of error messages (empty for successful operations)
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.StandardResponse`1.Success(`0,System.String)">
            <summary>
            Creates a successful response with data
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.StandardResponse`1.Success(System.String)">
            <summary>
            Creates a successful response without data
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.StandardResponse`1.Error(System.String)">
            <summary>
            Creates an error response with a single message
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.StandardResponse`1.Error(System.Collections.Generic.Dictionary{System.String,System.String[]},System.String)">
            <summary>
            Creates an error response with multiple errors (typically validation errors)
            </summary>
        </member>
        <member name="M:Wingman.Application.Common.Response.StandardResponse`1.Error(System.Exception,System.String)">
            <summary>
            Creates an error response from an exception
            </summary>
        </member>
        <member name="T:Wingman.Application.Common.Specification.OrderedSpecificationBuilder`1">
            <summary>
            Wrapper class that implements IOrderedSpecificationBuilder to allow chaining of ThenBy operations
            </summary>
        </member>
        <member name="P:Wingman.Application.Identity.Roles.CreateOrUpdateRoleRequest.Name">
            <summary>User-visible role name. The same value is allowed for different operators (uniqueness is per operator).</summary>
        </member>
        <member name="P:Wingman.Application.Identity.Roles.CreateOrUpdateRoleRequest.OperatorId">
            <summary>
            Required when creating a new operator-scoped custom role (not Admin/Operator). Roles with the same
            <see cref="P:Wingman.Application.Identity.Roles.CreateOrUpdateRoleRequest.Name"/> may exist for different operator ids.
            </summary>
        </member>
        <member name="M:Wingman.Application.Identity.Roles.IRoleService.GetListAsync(System.String,System.Nullable{System.Guid},System.Boolean,System.Threading.CancellationToken)">
            <param name="operatorScopedOnly">When true, only roles with <c>OperatorId</c> set (custom operator roles) are returned.</param>
        </member>
        <member name="M:Wingman.Application.Identity.Roles.IRoleService.SetDefaultAsync(System.String,System.Threading.CancellationToken)">
            <summary>Marks an operator-scoped role as the operator default role.</summary>
        </member>
        <member name="M:Wingman.Application.Identity.Roles.IRoleService.AssignDocumentsAsync(System.String,System.Collections.Generic.IReadOnlyList{System.Guid},System.Threading.CancellationToken)">
            <summary>Maps synced documents to an operator-scoped custom role (skips duplicates).</summary>
        </member>
        <member name="M:Wingman.Application.Identity.Roles.IRoleService.RemoveDocumentsAsync(System.String,System.Collections.Generic.IReadOnlyList{System.Guid},System.Threading.CancellationToken)">
            <summary>Removes document mappings from a role.</summary>
        </member>
        <member name="M:Wingman.Application.Identity.Roles.IRoleService.GetRoleDocumentIdsAsync(System.String,System.Threading.CancellationToken)">
            <summary>Returns synced document IDs mapped to the role.</summary>
        </member>
        <member name="T:Wingman.Application.Identity.Roles.OperatorRoleNames">
            <summary>
            Builds Identity role names for operator-scoped custom roles. The internal name embeds the operator id,
            so the same display label (e.g. "Engineers") may exist for Operator 1 and Operator 2; only duplicates for the
            <b>same</b> operator and the same alphanumeric slug collide.
            </summary>
        </member>
        <member name="M:Wingman.Application.Identity.Roles.OperatorRoleNames.BuildInternalName(System.Guid,System.String)">
            <summary>
            Returns <c>{operatorId:N}_{slug}</c> where <paramref name="slug"/> is alphanumeric from <paramref name="displayName"/>.
            Different operators always get different prefixes, so display names can repeat across operators.
            </summary>
        </member>
        <member name="M:Wingman.Application.Identity.Roles.OperatorRoleNames.GetUserFacingLabel(System.Nullable{System.Guid},System.String,System.String)">
            <summary>
            Label suitable for UI and APIs. For operator-scoped roles uses stored <paramref name="displayName"/> when set;
            otherwise derives the slug portion from the internal Identity name (<c>{operatorId:N}_{slug}</c>).
            </summary>
        </member>
        <member name="M:Wingman.Application.Identity.Roles.OperatorRoleNames.TryExtractSlugAfterOperatorPrefix(System.String,System.Guid)">
            <summary>
            Returns the segment after <c>{operatorId:N}_</c> when <paramref name="internalName"/> matches that pattern.
            </summary>
        </member>
        <member name="P:Wingman.Application.Identity.Roles.RoleDto.Name">
            <summary>User-visible role name. For operator custom roles this matches what the user entered, not the internal Identity key.</summary>
        </member>
        <member name="P:Wingman.Application.Identity.Roles.RoleDto.IdentityName">
            <summary>
            ASP.NET Identity role name (e.g. <c>{operatorId}_{slug}</c>). Set when <see cref="P:Wingman.Application.Identity.Roles.RoleDto.OperatorId"/> is set; use with assign-role APIs if not sending role id.
            </summary>
        </member>
        <member name="P:Wingman.Application.Identity.Roles.RoleDto.DisplayName">
            <summary>Same as <see cref="P:Wingman.Application.Identity.Roles.RoleDto.Name"/> for operator roles when stored; may duplicate <see cref="P:Wingman.Application.Identity.Roles.RoleDto.Name"/> in responses.</summary>
        </member>
        <member name="P:Wingman.Application.Identity.Roles.RoleDto.OperatorId">
            <summary>When set, the role applies only to this operator.</summary>
        </member>
        <member name="P:Wingman.Application.Identity.Roles.RoleDto.OperatorName">
            <summary>Name of the operator when <see cref="P:Wingman.Application.Identity.Roles.RoleDto.OperatorId"/> is set.</summary>
        </member>
        <member name="P:Wingman.Application.Identity.Roles.RoleDto.IsDefault">
            <summary>True when this role is configured as default for its operator.</summary>
        </member>
        <member name="T:Wingman.Application.Identity.Tokens.TokenOperatorDto">
            <summary>
            Operator branding information for mobile app theming.
            </summary>
        </member>
        <member name="M:Wingman.Application.Identity.Tokens.TokenOperatorDto.#ctor(System.Guid,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Boolean,System.Boolean,Wingman.Application.Dto.MobileAppTabLabelsDto,System.Nullable{System.Guid})">
            <summary>
            Operator branding information for mobile app theming.
            </summary>
        </member>
        <member name="T:Wingman.Application.Identity.Tokens.TokenRoleDto">
            <summary>
            User role with detailed information.
            </summary>
        </member>
        <member name="M:Wingman.Application.Identity.Tokens.TokenRoleDto.#ctor(System.String,System.String,System.Boolean,System.String,Wingman.Shared.Authorization.RoleAccountType)">
            <summary>
            User role with detailed information.
            </summary>
        </member>
        <member name="T:Wingman.Application.Identity.Tokens.TokenUserDto">
            <summary>
            Logged-in user information.
            </summary>
        </member>
        <member name="M:Wingman.Application.Identity.Tokens.TokenUserDto.#ctor(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Boolean,System.Boolean,System.Collections.Generic.IList{Wingman.Application.Identity.Tokens.TokenRoleDto})">
            <summary>
            Logged-in user information.
            </summary>
        </member>
        <member name="T:Wingman.Application.Identity.Tokens.TokenResponse">
            <summary>
            Login response containing token, operator, and user information.
            </summary>
        </member>
        <member name="M:Wingman.Application.Identity.Tokens.TokenResponse.#ctor(System.String,System.String,System.DateTime,Wingman.Application.Identity.Tokens.TokenOperatorDto,Wingman.Application.Identity.Tokens.TokenUserDto)">
            <summary>
            Login response containing token, operator, and user information.
            </summary>
        </member>
        <member name="P:Wingman.Application.Identity.Users.CreateUserRequest.RoleName">
            <summary>
            When <c>Admin</c>, the user is created in the admin email lane (same mailbox may also exist as an operator/custom-role user).
            When empty, the user gets the default Operator role and the operator email lane.
            </summary>
        </member>
        <member name="M:Wingman.Application.Identity.Users.IUserService.ExistsWithEmailInLaneAsync(System.String,System.Byte,System.String,System.Threading.CancellationToken)">
            <summary>True if an account already uses this email in the same lane (admin vs operator/custom role).</summary>
        </member>
        <member name="M:Wingman.Application.Identity.Users.IUserService.GetEmailUniquenessLaneAsync(System.String,System.Threading.CancellationToken)">
            <summary>Lane for an existing user (for email change validation).</summary>
        </member>
        <member name="M:Wingman.Application.Identity.Users.IUserService.GetOperatorUserActiveInactiveCountsAsync(System.Guid,System.Threading.CancellationToken)">
            <summary>Counts users assigned to <paramref name="operatorId"/> (same scope as operator user lists).</summary>
        </member>
        <member name="M:Wingman.Application.Identity.Users.IUserService.GetIdentityRoleMetadataAsync(System.String,System.Threading.CancellationToken)">
            <summary>Whether the Identity role exists and, if it does, its operator scope (null for system roles).</summary>
        </member>
        <member name="P:Wingman.Application.Identity.Users.UserRoleDto.RoleName">
            <summary>ASP.NET Identity role name (internal key for operator custom roles). Prefer <see cref="P:Wingman.Application.Identity.Users.UserRoleDto.RoleId"/> or this value for assign-role APIs, not <see cref="P:Wingman.Application.Identity.Users.UserRoleDto.DisplayName"/>.</summary>
        </member>
        <member name="P:Wingman.Application.Identity.Users.UserRoleDto.DisplayName">
            <summary>User-visible role title (what the operator entered, not the internal <c>{operatorId}_{slug}</c> key).</summary>
        </member>
        <member name="P:Wingman.Application.Identity.Users.UserRolesRequest.OperatorId">
            <summary>
            OperatorId is required when assigning the Operator role. This will be updated in the user table.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.BulletinDropdownDto">
            <summary>
            Lightweight DTO for bulletin dropdown (ID and display label).
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.BulletinDto">
            <summary>
            DTO for Bulletin entity - operator-scoped PDF bulletins with enable/disable.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.DashboardIntegrationsOverviewDto">
            <summary>
            Response for GET /dashboard/integrations-overview. Groups integration issues, banner, health top 5, and operator summary.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.SyncedDocumentDto.AssignedRoles">
            <summary>Operator-scoped roles that can access this document (via role–document mapping).</summary>
        </member>
        <member name="T:Wingman.Application.Dto.DocumentAssignedRoleDto">
            <summary>Role assigned to a synced document for access control.</summary>
        </member>
        <member name="P:Wingman.Application.Dto.DocumentAssignedRoleDto.Name">
            <summary>User-visible role name (same semantics as role list APIs).</summary>
        </member>
        <member name="P:Wingman.Application.Dto.DocumentAssignedRoleDto.IdentityName">
            <summary>ASP.NET Identity role name when the role is operator-scoped (internal key).</summary>
        </member>
        <member name="T:Wingman.Application.Dto.EmergencyContentDto">
            <summary>
            DTO for EmergencyContent entity.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.JobInfoDto">
            <summary>
            Information about a Hangfire job
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.JobListDto">
            <summary>
            List of jobs with pagination
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.JobStatisticsDto">
            <summary>
            Job statistics
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.LoginHistoryDto">
            <summary>
            DTO for LoginHistory entity - tracks all login attempts for security and auditing.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.LoginHistoryDto.UserId">
            <summary>
            User ID from ASP.NET Identity (ApplicationUser.Id)
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.MobileAppTabLabelsDto">
            <summary>
            Mobile app main navigation tab labels (fixed tab order, per-operator overrides).
            </summary>
        </member>
        <member name="M:Wingman.Application.Dto.MobileAppTabLabelsDto.#ctor(System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.String)">
            <summary>
            Mobile app main navigation tab labels (fixed tab order, per-operator overrides).
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.Mobile.MobileDocumentDto">
            <summary>
            Document metadata for mobile app
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.Mobile.MobileDocumentDto.FileType">
            <summary>
            Simple file type for mobile (e.g. "pdf", "zip") derived from file extension. Use this to decide how to open or display the file.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.Mobile.MobileDocumentDto.Checksum">
            <summary>
            SHA256 checksum (Base64 encoded) for comparing local file with source
            Used to determine GREEN (matches) vs AMBER (differs) status indicators
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.Mobile.MobileSyncRequestDto">
            <summary>
            Request for mobile delta sync
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.Mobile.MobileSyncResponseDto">
            <summary>
            Response for mobile delta sync
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.NotificationDto">
            <summary>
            DTO for Notification entity (FR-NOTIF).
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.NotificationDto.ActionUrl">
            <summary>
            Deep link URL (FR-NOTIF-004)
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.NotificationDto.TargetRoles">
            <summary>
            Target roles for notification delivery
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.NotificationDto.TargetUserIds">
            <summary>
            Target user IDs for notification delivery
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.NotificationDto.Recipients">
            <summary>
            List of users who received the notification with their platform types
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.NotificationRecipientDto">
            <summary>
            DTO for notification recipient information
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OccurrenceCategoryDropdownDto">
            <summary>
            Lightweight DTO for dropdown/select components - contains only ID and Name.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OccurrenceCategoryDto">
            <summary>
            DTO for OccurrenceCategory entity - supports hierarchical categorization of occurrences.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OccurrenceCategoryTreeDto">
            <summary>
            DTO for hierarchical tree structure of occurrence categories with nested children.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OccurrenceCategoryTreeDto.Children">
            <summary>
            Nested children categories for tree structure
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OccurrenceDto">
            <summary>
            DTO for Occurrence entity - safety/occurrence reporting.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OccurrenceDto.Files">
            <summary>
            Related files
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OccurrenceDto.Categories">
            <summary>
            Related categories
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OccurrenceFileDto">
            <summary>
            DTO for OccurrenceFile entity.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OccurrenceReportTypeDropdownDto">
            <summary>
            Lightweight DTO for dropdown/select components - contains only ID and Name.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OccurrenceReportTypeDto">
            <summary>
            DTO for OccurrenceReportType entity - classification types for safety occurrences.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorAdminDashboardDto">
            <summary>Operator web dashboard for operator administrators (RoleAccountType.OperatorAdmin).</summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorAdminDashboardIntegrationDto.IntegrationType">
            <summary>Provider / integration type (e.g. ClickHelp).</summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorAdminDashboardIntegrationDto.HealthStatus">
            <summary>Computed health label for UI (e.g. Healthy, Degraded, Error, Inactive, Pending).</summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorAdminDashboardRecentOccurrenceDto.ReportedByUserName">
            <summary>Display name for <c>Occurrence.ReportedByUserId</c>, when resolvable.</summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorUserActiveInactiveCountsDto">
            <summary>Active / inactive user counts for an operator (mobile app users).</summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorContactDto">
            <summary>
            DTO for OperatorContact entity - supports Contacts, Quick Calls, and Emergency contacts.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorContactDto.Type">
            <summary>
            Contact type: Contact, QuickCall, or Emergency
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorContactDto.ShortLabel">
            <summary>
            Short label for Quick Call buttons (FR-QUICK-002)
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorContactDto.IconUrl">
            <summary>
            Icon URL for Quick Call buttons
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorContactDto.GridPosition">
            <summary>
            Grid position for Quick Call buttons (0-8 for 3x3 grid)
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorDashboardCountsDto">
            <summary>
            DTO for operator mobile dashboard counts.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorDropdownDto">
            <summary>
            Lightweight DTO for dropdown/select components - contains only ID and Name.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorDto">
            <summary>
            DTO for Operator entity - aviation operator/company.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorDto.DocumentDownloadEnabled">
            <summary>
            When false, mobile users cannot download synced documents for this operator.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorDto.MobileTabLabels">
            <summary>
            Resolved mobile tab labels (defaults applied when operator has no override).
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorEmergencyPlanDto">
            <summary>
            DTO for OperatorEmergencyPlan entity (FR-EMERG-001).
            Emergency Response Plan content for operators.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorEmergencyPlanDto.Content">
            <summary>
            Rich text/HTML content for the ERP section
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorEmergencyPlanDto.FileUrl">
            <summary>
            URL to PDF document if ERP is file-based
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorFeatureDto">
            <summary>
            DTO for OperatorFeature entity - feature flags for operators.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.OperatorFeatureDto.FeatureValue">
            <summary>
            JSON feature value/configuration
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorLinkDto">
            <summary>
            DTO for OperatorLink entity (FR-LINK).
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.OperatorNewsDto">
            <summary>
            DTO for OperatorNews entity (FR-AUTH-023, FR-AUTH-024).
            News and announcements displayed on mobile app home screen.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.PublicationCategoryDropdownDto">
            <summary>
            Lightweight DTO for dropdown/select - ID and Name only.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.PublicationCategoryDto">
            <summary>
            DTO for PublicationCategory entity - categories for publications within an operator and integration.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.PublicationCategoryDto.TotalDocumentsForRole">
            <summary>
            When the list request includes <c>roleId</c>, count of non-deleted synced documents in this category for that operator and role (RoleDocumentAccess), with a publication category assigned.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.SubscriptionPlanDropdownDto">
            <summary>
            Lightweight DTO for dropdown/select components - contains only ID and Name.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.SubscriptionPlanDto">
            <summary>
            DTO for SubscriptionPlan entity - subscription tier definitions.
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.TrainingBulletinDto">
            <summary>
            DTO for TrainingBulletin entity (FR-TRAIN).
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.TrainingBulletinDto.TargetRoles">
            <summary>
            Target roles for this training bulletin
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.TrainingUserStatusDto">
            <summary>
            DTO for TrainingUserStatus entity - tracks user acknowledgment of training bulletins.
            </summary>
        </member>
        <member name="P:Wingman.Application.Dto.TrainingUserStatusDto.EmailDeliveryLog">
            <summary>
            Email delivery log details
            </summary>
        </member>
        <member name="T:Wingman.Application.Dto.TranslationDto">
            <summary>
            DTO for Translation entity - localization strings.
            </summary>
        </member>
        <member name="M:Wingman.Application.Mapping.SchemaMappingConfig.ConfigureGlobalTenantMappings">
            <summary>
            Applies global tenant mapping configuration for all TenantEntity types
            This ensures consistent PascalCase TenantId property usage across all mappings
            </summary>
        </member>
        <member name="T:Wingman.Application.Operators.OperatorMobileTabLabels">
            <summary>
            Default mobile tab labels and helpers to resolve effective labels from <see cref="T:Wingman.Domain.Schema.Operator"/> storage.
            </summary>
        </member>
        <member name="F:Wingman.Application.Operators.OperatorMobileTabLabels.DefaultsDto">
            <summary>
            Used when no operator is resolved (e.g. token fallback).
            </summary>
        </member>
        <member name="M:Wingman.Application.Operators.OperatorMobileTabLabels.ResolveEffective(Wingman.Domain.Schema.Operator)">
            <summary>
            Effective labels for API/token: null or empty stored values fall back to defaults (8th tab falls back to empty).
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Dashboard.DashboardQueryService.GetSyncHealthFromLogs(System.Collections.Generic.List{Wingman.Core.Domain.Schema.DocumentSyncLog})">
            <summary>
            Computes success rate from sync logs. Excludes "Started" (in-progress) from the denominator.
            Treats "Cancelled" with "abandoned" in the message as success (benign cleanup when starting a new sync).
            Uses >= 95% for Connected so integrations with 19/20 or 20/20 success are not marked Degraded.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.ActivateContactRequest">
            <summary>
            Activate a contact
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Contacts.ActivateContactRequest.#ctor(System.Guid)">
            <summary>
            Activate a contact
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.CreateContactRequest">
            <summary>
            Create a new contact.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.DeactivateContactRequest">
            <summary>
            Deactivate a contact
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Contacts.DeactivateContactRequest.#ctor(System.Guid)">
            <summary>
            Deactivate a contact
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.DeleteContactRequest">
            <summary>
            Delete a contact
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Contacts.DeleteContactRequest.#ctor(System.Guid)">
            <summary>
            Delete a contact
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.GetContactByIdRequest">
            <summary>
            Get contact by ID
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Contacts.GetContactByIdRequest.#ctor(System.Guid)">
            <summary>
            Get contact by ID
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.GetContactsByTypeRequest">
            <summary>
            Get contacts by type (Contact, Quick, Emergency)
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Contacts.GetContactsByTypeRequest.#ctor(System.Guid,System.String)">
            <summary>
            Get contacts by type (Contact, Quick, Emergency)
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.GetContactsRequest">
            <summary>
            Get paginated list of contacts with filtering
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.GetEmergencyContactsRequest">
            <summary>
            Get emergency contacts (FR-EMERG).
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Contacts.GetEmergencyContactsRequest.#ctor(System.Guid)">
            <summary>
            Get emergency contacts (FR-EMERG).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.GetOperatorContactsRequest">
            <summary>
            Get all operator contacts (Contact type)
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Contacts.GetOperatorContactsRequest.#ctor(System.Guid)">
            <summary>
            Get all operator contacts (Contact type)
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.GetQuickCallContactsRequest">
            <summary>
            Get quick call contacts for speed dial grid (FR-QUICK)
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Contacts.GetQuickCallContactsRequest.#ctor(System.Guid)">
            <summary>
            Get quick call contacts for speed dial grid (FR-QUICK)
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Contacts.UpdateContactRequest">
            <summary>
            Update an existing contact
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.EmergencyContent.CreateEmergencyContentRequest">
            <summary>
            Create emergency content.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.EmergencyContent.DeleteEmergencyContentRequest">
            <summary>
            Delete emergency content.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.EmergencyContent.DeleteEmergencyContentRequest.#ctor(System.Guid)">
            <summary>
            Delete emergency content.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.EmergencyContent.GetEmergencyContentByIdRequest">
            <summary>
            Get emergency content by ID.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.EmergencyContent.GetEmergencyContentByIdRequest.#ctor(System.Guid)">
            <summary>
            Get emergency content by ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.EmergencyContent.GetEmergencyContentsRequest">
            <summary>
            Get paginated list of emergency content.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Directory.EmergencyContent.GetEmergencyContentsRequest.IsActive">
            <summary>When set, filters by active/inactive. Omit to return all.</summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.EmergencyContent.ToggleEmergencyContentActiveRequest">
            <summary>
            Toggle emergency content IsActive (switch between active and inactive).
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.EmergencyContent.ToggleEmergencyContentActiveRequest.#ctor(System.Guid)">
            <summary>
            Toggle emergency content IsActive (switch between active and inactive).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.EmergencyContent.UpdateEmergencyContentRequest">
            <summary>
            Update emergency content.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Links.ActivateLinkRequest">
            <summary>
            Activate a link
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Links.ActivateLinkRequest.#ctor(System.Guid)">
            <summary>
            Activate a link
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Links.CreateLinkRequest">
            <summary>
            Create a new link
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Links.DeactivateLinkRequest">
            <summary>
            Deactivate a link
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Links.DeactivateLinkRequest.#ctor(System.Guid)">
            <summary>
            Deactivate a link
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Links.DeleteLinkRequest">
            <summary>
            Delete a link
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Links.DeleteLinkRequest.#ctor(System.Guid)">
            <summary>
            Delete a link
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Links.GetLinkByIdRequest">
            <summary>
            Get link by ID
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Links.GetLinkByIdRequest.#ctor(System.Guid)">
            <summary>
            Get link by ID
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Links.GetLinksByCategoryRequest">
            <summary>
            Get links by category
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Directory.Links.GetLinksByCategoryRequest.#ctor(System.Guid,System.String)">
            <summary>
            Get links by category
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Links.GetLinksRequest">
            <summary>
            Get paginated list of links
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Directory.Links.UpdateLinkRequest">
            <summary>
            Update an existing link
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetDocumentIntegrationsRequestHandler">
            <summary>
            Handler for paginated list of document integrations
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetDocumentIntegrationSyncLogsRequestHandler">
            <summary>
            Handler for sync logs list
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetDocumentIntegrationFoldersRequestHandler">
            <summary>
            Handler for folders list
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetSyncedDocumentsRequestHandler">
            <summary>
            Handler for synced documents list
            </summary>
        </member>
        <member name="F:Wingman.Application.Requests.DocumentIntegrations.TriggerDocumentSyncRequestHandler.AbandonedSyncWindowMinutes">
            <summary>
            Minutes after which a sync still in "Started" is considered abandoned and cleaned up before allowing a new trigger.
            Kept short so stuck/hung syncs don't block manual sync for hours.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.DocumentIntegrations.TriggerDocumentSyncRequestHandler.CleanupAbandonedSyncsForIntegrationAsync(System.Guid,System.Int32,System.Threading.CancellationToken)">
            <summary>
            Clean up abandoned sync logs for a specific integration (Status=Started and older than the window).
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.DocumentIntegrations.CreateDocumentIntegrationRequest.AllowedFileTypes">
            <summary>Comma-separated file types to sync (e.g. PDF,WebHelp,URL). Empty = sync all.</summary>
        </member>
        <member name="P:Wingman.Application.Requests.DocumentIntegrations.UpdateDocumentIntegrationRequest.AllowedFileTypes">
            <summary>Comma-separated file types to sync (e.g. PDF,WebHelp,URL). Empty = sync all.</summary>
        </member>
        <member name="P:Wingman.Application.Requests.DocumentIntegrations.GetAllSyncedDocumentsRequest.RoleId">
            <summary>When set, only documents mapped to this Identity role id (via role–document access) are returned.</summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetDocumentIntegrationByIdSpecification">
            <summary>
            Loads a single DocumentIntegration by id and tenant. Does not include Folders, Documents, or SyncLogs
            to avoid a single huge JOIN that times out when an integration has many records. Use the dedicated
            paginated endpoints for folders (GetIntegrationFolders) and documents (GetSyncedDocuments) when needed.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetActiveIntegrationByOperatorSpecification">
            <summary>
            Specification to check if an operator already has an active integration
            Used to enforce single integration per operator constraint
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetSyncedDocumentsByIdsSpecification">
            <summary>
            Loads all synced documents by a set of IDs for the given tenant.
            Used by bulk operations that update multiple documents at once.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetAllActiveIntegrationsSpecification">
            <summary>
            Specification to get all active document integrations
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetAutoSyncDocumentIntegrationsSpecification">
            <summary>
            Specification to get all document integrations that have auto-sync enabled (for bootstrap of per-integration recurring jobs).
            Implements IBypassTenantFilter to load across all tenants.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetReadyForAutoSyncSpecification">
            <summary>
            Specification to get Google Drive integrations that are ready for auto-sync
            This specification is used by background jobs that need to process all tenants
            Implements IBypassTenantFilter to bypass Finbuckle's automatic tenant filtering
            Includes Operator navigation property for better logging and context
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.ResumeDocumentSyncRequest">
            <summary>
            Request to resume a failed or interrupted sync from checkpoint
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.GetLatestCheckpointSpecification">
            <summary>
            Specification to get the latest checkpoint for a sync log
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.SetDocumentPublicationCategoryRequest">
            <summary>
            Request to assign a publication category to a synced document.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.DocumentIntegrations.SetDocumentPublicationCategoryRequest.#ctor(System.Guid,System.Nullable{System.Guid})">
            <summary>
            Request to assign a publication category to a synced document.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.SetDocumentsPublicationCategoryBulkRequest">
            <summary>
            Bulk request to assign a publication category to multiple synced documents.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.DocumentIntegrations.SetDocumentsPublicationCategoryBulkRequest.DocumentIds">
            <summary>
            Document IDs to update.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.DocumentIntegrations.SetDocumentsPublicationCategoryBulkRequest.PublicationCategoryId">
            <summary>
            Publication category ID to assign. Null clears the category.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.ValidateConnectionRequest">
            <summary>
            Request to validate connection to a document source without saving
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.ValidateExistingIntegrationRequest">
            <summary>
            Request to validate an existing integration by ID
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.DocumentIntegrations.ValidateExistingIntegrationRequestHandler">
            <summary>
            Handler to validate an existing integration's connection
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Forms.GetFreshJotformFormsSpecification">
            <summary>
            Specification to get Jotform forms from database
            Handles all combinations of IsTraining and IsForm (true, false, null)
            If cacheCutoff is DateTime.MinValue, returns all forms regardless of LastSyncedAt
            If operatorId is provided and not Guid.Empty, filters by operatorId; otherwise returns all forms
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Forms.GetJotformFormByExternalIdSpecification">
            <summary>
            Specification to get a Jotform form by external form ID and operator
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Forms.GetJotformFormByExternalIdOnlySpecification">
            <summary>
            Specification to get a Jotform form by external form ID only (for finding forms without operatorId)
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Forms.GetStaleJotformFormsSpecification">
            <summary>
            Specification to get all Jotform forms that need syncing (older than specified time) for an operator
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Forms.GetJotformFormsWithEmptyOperatorIdSpecification">
            <summary>
            Specification to get Jotform forms with empty operatorId (for fallback when no forms found)
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.JotformIntegrations.GetAllActiveJotformIntegrationsSpecification">
            <summary>
            Specification to get all active Jotform integrations (for background jobs)
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.DownloadDocumentRequest">
            <summary>
            Request to download a document
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Mobile.DownloadDocumentRequest.#ctor(System.Guid)">
            <summary>
            Request to download a document
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.DocumentDownloadResult">
            <summary>
            Result of document download
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.GetDeltaSyncRequest">
            <summary>
            Request to get delta sync for mobile
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Mobile.GetDeltaSyncRequest.#ctor(System.Nullable{System.DateTime},System.String,System.Int32,System.String)">
            <summary>
            Request to get delta sync for mobile
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Mobile.GetDeltaSyncRequestHandler.GetFileTypeFromFileName(System.String)">
            <summary>
            Derives simple file type (e.g. "pdf", "zip") from file name for mobile to know how to open/display the file.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.GetDocumentsSyncedAfterSpecification">
            <summary>
            Specification to get documents synced after a specific timestamp
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.GetSyncedDocumentWithIntegrationSpecification">
            <summary>
            Specification to get SyncedDocument with Integration navigation property for operator validation
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.GetDeviceSyncStateSpecification">
            <summary>
            Specification to get device sync state by user and device
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.GetUserDocumentStatusesSpecification">
            <summary>
            Specification to get user document statuses
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.GetFavoriteDocumentsRequest">
            <summary>
            Request to get favorite documents for the current user
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Mobile.GetFavoriteDocumentsRequest.#ctor(System.Int32,System.String)">
            <summary>
            Request to get favorite documents for the current user
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.GetFavoriteUserDocumentStatusesSpecification">
            <summary>
            Specification to get favorite user document statuses
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.GetDocumentsByIdsSpecification">
            <summary>
            Specification to get documents by IDs for a specific operator
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.FavoriteDocumentsResponseDto">
            <summary>
            Response DTO for favorite documents
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.MarkDocumentCompletedRequest">
            <summary>
            Request to mark a document as completed
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Mobile.MarkDocumentCompletedRequest.#ctor(System.Guid,System.Boolean)">
            <summary>
            Request to mark a document as completed
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.GetUserDocumentStatusSpecification">
            <summary>
            Specification to get user document status
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.MarkDocumentFavoriteRequest">
            <summary>
            Request to mark a document as favorite
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Mobile.MarkDocumentFavoriteRequest.#ctor(System.Guid,System.Boolean)">
            <summary>
            Request to mark a document as favorite
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Mobile.SetDocumentMobileEnabledRequest">
            <summary>
            Request to enable or disable mobile access for a document
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Mobile.SetDocumentMobileEnabledRequest.#ctor(System.Guid,System.Boolean)">
            <summary>
            Request to enable or disable mobile access for a document
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Notifications.SendSupportEmailRequest">
            <summary>
            Send a support/contact email to tech@growing.aero.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Notifications.SupportEmailType">
            <summary>
            Type of support/contact email.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.ArchiveOccurrenceRequest">
            <summary>
            Archive an occurrence. The user who reported the occurrence or an Admin can archive it.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Occurrence.CreateOccurrenceRequestHandler.SendOperatorNotificationEmailAsync(Wingman.Application.Requests.Occurrence.CreateOccurrenceRequest,System.Guid,System.String,System.Threading.CancellationToken)">
            <summary>
            Sends email notification to operator about new occurrence using professional template.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.GetOccurrenceCategoriesByIdsSpecification">
            <summary>
            Specification to get occurrence categories by IDs
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.GetOccurrenceReportTypesByIdsSpecification">
            <summary>
            Specification to get occurrence report types by IDs
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.DeleteOccurrenceRequest">
            <summary>
            Delete an occurrence by ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.GetOccurrenceByIdRequest">
            <summary>
            Get occurrence details by ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.GetOccurrencesRequest">
            <summary>
            Get paginated list of occurrences with filtering.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Occurrence.GetOccurrencesRequest.IsArchived">
            <summary>When set, filter by archived state. Only the reporting user can archive occurrences.</summary>
        </member>
        <member name="M:Wingman.Application.Requests.Occurrence.GetOccurrencesSpecification.EnsureUtc(System.DateTime)">
            <summary>
            Ensures DateTime is in UTC format for PostgreSQL compatibility
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceCategories.CreateOccurrenceCategoryRequest">
            <summary>
            Create a new occurrence category.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceCategories.DeleteOccurrenceCategoryRequest">
            <summary>
            Delete an occurrence category.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceCategories.GetOccurrenceCategoriesRequest">
            <summary>
            Get paginated list of occurrence categories with filtering
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceCategories.GetOccurrenceCategoryByIdRequest">
            <summary>
            Get occurrence category details by ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceCategories.GetOccurrenceCategoryTreeRequest">
            <summary>
            Get hierarchical tree of occurrence categories.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceCategories.GetRootOccurrenceCategoriesRequest">
            <summary>
            Get root occurrence categories (categories without parent ID) for dropdown
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceCategories.UpdateOccurrenceCategoryRequest">
            <summary>
            Update an occurrence category.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceCategories.GetOccurrenceCategoriesDropdownRequest">
            <summary>
            Get all active occurrence categories for dropdown/select components (ID and Name only).
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Occurrence.OccurrenceCategories.GetOccurrenceCategoriesDropdownRequest.IsParent">
            <summary>
            When true, only returns categories that don't have a parent (root/parent categories only).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.SubmitOccurrenceRequest">
            <summary>
            Submit an occurrence by ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.UnarchiveOccurrenceRequest">
            <summary>
            Unarchive an occurrence. The user who reported the occurrence or an Admin can unarchive it.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.UpdateOccurrenceRequest">
            <summary>
            Update an existing occurrence.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Occurrence.UpdateOccurrenceRequest.IsArchived">
            <summary>Set to true to archive, false to unarchive. Only the user who reported the occurrence can change this.</summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceReportTypes.CreateOccurrenceReportTypeRequest">
            <summary>
            Create a new occurrence report type.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceReportTypes.DeleteOccurrenceReportTypeRequest">
            <summary>
            Delete an occurrence report type.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceReportTypes.GetActiveOccurrenceReportTypesRequest">
            <summary>
            Get active occurrence report types only, ordered by sort order
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceReportTypes.GetOccurrenceReportTypeByIdRequest">
            <summary>
            Get occurrence report type by ID
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceReportTypes.GetOccurrenceReportTypesDropdownRequest">
            <summary>
            Get active occurrence report types for dropdown/select components (ID and Name only).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceReportTypes.GetOccurrenceReportTypesRequest">
            <summary>
            Get paginated list of occurrence report types with filtering
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceReportTypes.ToggleOccurrenceReportTypeStatusRequest">
            <summary>
            Toggle the active status of an occurrence report type.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Occurrence.OccurrenceReportTypes.UpdateOccurrenceReportTypeRequest">
            <summary>
            Update an existing occurrence report type.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.ActivateOperatorRequest">
            <summary>
            Activate an operator.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Operators.ActivateOperatorRequest.#ctor(System.Guid)">
            <summary>
            Activate an operator.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.CreateOperatorRequest">
            <summary>
            Create a new operator.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Operators.CreateOperatorRequest.DocumentDownloadEnabled">
            <summary>
            When false, mobile users cannot download synced documents. Defaults to true.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Operators.CreateOperatorRequest.MobileTabLabelPublications">
            <summary>Optional overrides for mobile app tab labels (fixed order). Omit to use defaults.</summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.DeactivateOperatorRequest">
            <summary>
            Deactivate an operator.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Operators.DeactivateOperatorRequest.#ctor(System.Guid)">
            <summary>
            Deactivate an operator.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.DeleteOperatorRequest">
            <summary>
            Delete an operator.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Operators.DeleteOperatorRequest.#ctor(System.Guid)">
            <summary>
            Delete an operator.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.GetOperatorByIdRequest">
            <summary>
            Get operator details by ID.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.Operators.GetOperatorByIdRequest.#ctor(System.Guid)">
            <summary>
            Get operator details by ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.GetOperatorDashboardCountsRequest">
            <summary>
            Request to get mobile dashboard counts for an operator.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Operators.GetOperatorDashboardCountsRequest.RoleId">
            <summary>Identity role id. When set, <see cref="P:Wingman.Application.Dto.OperatorDashboardCountsDto.TotalDocuments"/> counts only documents mapped in RoleDocumentAccess for this role and operator.</summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.GetOperatorsDropdownRequest">
            <summary>
            Get all operators for dropdown/select components (ID and Name only).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.GetOperatorsRequest">
            <summary>
            Get paginated list of operators with filtering.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.CountContactsByOperatorSpecification">
            <summary>
            Specification to count contacts by operator ID (only Quick and Operator types, excluding Emergency).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.CountLinksByOperatorSpecification">
            <summary>
            Specification to count links by operator ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.CountDocumentsByOperatorSpecification">
            <summary>
            Specification to count documents by operator ID (through DocumentIntegration).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.CountDocumentsByOperatorAndRoleSpecification">
            <summary>
            Counts synced documents for an operator that are explicitly allowed for the given Identity role (via RoleDocumentAccess).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.CountTrainingJotformFormsByOperatorSpecification">
            <summary>
            Specification to count training Jotform forms (IsTraining = true)
            for a specific operator (and tenant).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.CountMobileJotformFormsByOperatorSpecification">
            <summary>
            Specification to count Jotform forms (IsForm = true, IsTraining = false)
            for a specific operator (and tenant).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Operators.UpdateOperatorRequest">
            <summary>
            Update an existing operator.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Operators.UpdateOperatorRequest.DocumentDownloadEnabled">
            <summary>
            When set, updates whether mobile users can download synced documents for this operator.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Operators.UpdateOperatorRequest.MobileTabLabelPublications">
            <summary>Optional overrides for mobile app tab labels. Omit a field to leave unchanged; empty clears override (use default).</summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.Bulletins.CreateBulletinRequest">
            <summary>
            Create a new bulletin (PDF upload) for an operator.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.Bulletins.DeleteBulletinRequest">
            <summary>
            Delete a bulletin and remove its file from storage.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.Bulletins.GetBulletinByIdRequest">
            <summary>
            Get a bulletin by ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.Bulletins.GetBulletinsRequest">
            <summary>
            Get paginated list of bulletins with filtering.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Publication.Bulletins.GetBulletinsRequest.Keyword">
            <summary>Keyword to filter bulletins by title (case-insensitive).</summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.Bulletins.ToggleBulletinEnabledRequest">
            <summary>
            Toggle a bulletin's enabled state.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.Bulletins.UpdateBulletinRequest">
            <summary>
            Update an existing bulletin (metadata and optionally replace PDF).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.CreatePublicationCategoryRequest">
            <summary>
            Create a new publication category.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.DeletePublicationCategoryRequest">
            <summary>
            Delete a publication category.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.GetPublicationCategoriesDropdownRequest">
            <summary>
            Get active publication categories for dropdown/select (ID and Name only).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.GetPublicationCategoriesRequest">
            <summary>
            Get paginated list of publication categories with filtering.
            </summary>
        </member>
        <member name="P:Wingman.Application.Requests.Publication.PublicationCategories.GetPublicationCategoriesRequest.RoleId">
            <summary>Identity role id. When set, each category includes <see cref="P:Wingman.Application.Dto.PublicationCategoryDto.TotalDocumentsForRole"/> for that operator and role.</summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.GetPublicationCategoryByIdRequest">
            <summary>
            Get publication category details by ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.GetOtherDefaultPublicationCategoriesSpecification">
            <summary>
            Gets other publication categories that are currently marked as default for the same operator and integration (optionally excluding one by id).
            Used to clear IsDefault on others when setting a single category as default.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.GetDefaultPublicationCategoryByIntegrationSpecification">
            <summary>
            Gets the default publication category for an integration (IsDefault = true).
            Used when syncing new documents to assign them to the default category.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.GetDefaultPublicationCategoryByOperatorSpecification">
            <summary>
            Gets the default publication category for an operator (IsDefault = true).
            Used when assigning category by operator-level default.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.GetPublicationCategoriesByOperatorSpecification">
            <summary>
            Gets publication categories for a specific operator.
            Used as a fallback when no category is explicitly marked as default.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.Publication.PublicationCategories.UpdatePublicationCategoryRequest">
            <summary>
            Update an existing publication category.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.SubscriptionPlans.CreateSubscriptionPlanRequest">
            <summary>
            Create a new subscription plan.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.SubscriptionPlans.DeleteSubscriptionPlanRequest">
            <summary>
            Delete a subscription plan.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.SubscriptionPlans.DeleteSubscriptionPlanRequest.#ctor(System.Guid)">
            <summary>
            Delete a subscription plan.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.SubscriptionPlans.GetSubscriptionPlanByIdRequest">
            <summary>
            Get subscription plan details by ID.
            </summary>
        </member>
        <member name="M:Wingman.Application.Requests.SubscriptionPlans.GetSubscriptionPlanByIdRequest.#ctor(System.Guid)">
            <summary>
            Get subscription plan details by ID.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.SubscriptionPlans.GetSubscriptionPlansDropdownRequest">
            <summary>
            Get all subscription plans for dropdown/select components (ID and Name only).
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.SubscriptionPlans.GetSubscriptionPlansRequest">
            <summary>
            Get paginated list of subscription plans with filtering.
            </summary>
        </member>
        <member name="T:Wingman.Application.Requests.SubscriptionPlans.UpdateSubscriptionPlanRequest">
            <summary>
            Update an existing subscription plan.
            </summary>
        </member>
        <member name="T:Wingman.Application.Services.DocumentSyncService">
            <summary>
            Service for synchronizing documents from external sources
            </summary>
        </member>
        <member name="M:Wingman.Application.Services.DocumentSyncService.NormalizeToUtc(System.DateTime)">
            <summary>
            Normalizes a DateTime to UTC for comparison with stored ExternalUpdatedAt (always UTC).
            </summary>
        </member>
        <member name="M:Wingman.Application.Services.DocumentSyncService.MatchesAllowedFileTypes(Wingman.Application.Common.Interfaces.DocumentMetadata,System.String)">
            <summary>
            Returns true if the document matches the integration's AllowedFileTypes filter.
            When allowedFileTypes is null or empty, all documents are allowed.
            Values are comma-separated: extensions (e.g. PDF) match FileName or ContentType;
            "WebHelp" = ClickHelp WebHelp/PureHtml (HTML5 delivered as ZIP); "URL" = documents with DownloadUrl.
            </summary>
        </member>
        <member name="M:Wingman.Application.Services.DocumentSyncService.MatchesContentType(System.String,System.String)">
            <summary>
            Returns true if contentType matches the given extension token (e.g. PDF -> application/pdf).
            </summary>
        </member>
        <member name="M:Wingman.Application.Services.DocumentSyncService.ProcessFilesInBatchesAsync(System.Collections.Generic.List{Wingman.Application.Common.Interfaces.DocumentMetadata},Wingman.Core.Domain.Schema.DocumentIntegration,System.Guid,System.Guid,Wingman.Core.Domain.Schema.SyncCheckpoint,System.Boolean,System.Threading.CancellationToken)">
            <summary>
            Processes files in batches (common logic for new and updated files)
            </summary>
        </member>
        <member name="M:Wingman.Application.Services.DocumentSyncService.CategorizeHttpError(System.Net.Http.HttpRequestException)">
            <summary>
            Categorizes HTTP errors to determine error category and code
            </summary>
        </member>
        <member name="M:Wingman.Application.Services.DocumentSyncService.CheckForCancellationAsync(Wingman.Core.Domain.Schema.DocumentSyncLog,System.Threading.CancellationToken)">
            <summary>
            Check if the sync log has been cancelled and throw if so
            </summary>
        </member>
        <member name="T:Wingman.Application.Services.OccurrenceReportNumberService">
            <summary>
            Service for generating sequential occurrence report numbers per operator
            Thread-safe implementation ensuring unique sequential numbering
            </summary>
        </member>
        <member name="T:Wingman.Application.Services.GetOperatorYearSequenceSpecification">
            <summary>
            Specification for finding an operator's report sequence for a specific year
            </summary>
        </member>
    </members>
</doc>
