@CurrentPageTitle
+@CurrentPageSummary
+@CurrentPageSummary
+Loading configuration data...
The app now stores configuration in SQLite tables instead of a single JSON document. Use the section screens to manage runtime settings, merchants, file profiles, and contract mappings.
+Authentication, file-processing, generation, and polling values.
+Schedule and estate definitions for each merchant.
+Profiles and their field tables for file generation.
+Contract IDs mapped to file profiles.
+Loading contracts...
Select a contract from the table to edit it in the detail pane.
+Select a row to edit it.
+| Contract ID | +File profile ID | +
|---|---|
| + @contract.ContractId + | +@contract.FileProfileId | +
@(selectedContract is null ? "Select a contract on the left." : selectedContract.FileProfileId)
+Create a new contract-to-profile mapping.
+Loading file profile...
The requested file profile does not exist.
+ +@profile.FileProcessorFileProfileId
+Manage the file profile metadata and the three field tables that define the file layout.
+These are the file columns used by the main file layout.
+Header rows for delimited files.
+Trailer rows for delimited files.
+Loading file profiles...
Select a profile from the table to edit its metadata. Use the detail link to open the field tables for the selected profile.
+Select a row to edit it.
+| File profile | +Processor profile | +Format | +Layout | +Fields | +
|---|---|---|---|---|
| + @profile.FileProfileId + | +@profile.FileProcessorFileProfileId | +@profile.Format | +@DescribeLayout(profile) | +@profile.Fields.Count | +
@(selectedProfile is null ? "Select a profile on the left." : selectedProfile.FileProcessorFileProfileId)
+Create a new profile, then open it to manage fields.
+Loading merchants...
Select a merchant from the table to edit it in the detail pane. The table stays focused on scanning; the editor handles changes.
+Select a row to edit it.
+| Merchant | +Enabled | +Estate | +Run times | +
|---|---|---|---|
|
+ @merchant.Name + @merchant.MerchantId + |
+ @((merchant.Enabled) ? "Enabled" : "Disabled") | +@merchant.EstateId | +@FormatRunTimes(merchant) | +
@(selectedMerchant is null ? "Select a merchant on the left." : selectedMerchant.MerchantId)
+Create a new merchant entry.
+Loading operations data...
Live configuration, scheduling, and processing visibility for the worker, driven directly from the loaded appsettings and database state.
+Schedules are evaluated in UTC and aligned to the configured merchant run slots.
+| Merchant | +Enabled | +Estate | +Run times (UTC) | +Last merchant run | +Next run | +Success | +Failed | +Pending checks | +Status | +
|---|---|---|---|---|---|---|---|---|---|
|
+ @merchant.MerchantName + @merchant.MerchantId + |
+ @((merchant.Enabled) ? "Enabled" : "Disabled") | +@merchant.EstateId | +@merchant.RunTimesUtc | +@((merchant.LastMerchantRunUtc?.ToString("u")) ?? "Never") | +@((merchant.NextScheduledUtc?.ToString("u")) ?? "Disabled") | +@merchant.SuccessfulFiles | +@merchant.FailedFiles | +@merchant.PendingStatusChecks | +View status | +
These profiles drive file construction for each contract mapping.
+| Profile | +Format | +Layout | +Fields | +
|---|---|---|---|
|
+ @profile.FileProfileId + @profile.FileProcessorFileProfileId + |
+ @profile.Format | +@profile.LayoutSummary .@profile.FileExtension@if (!string.IsNullOrWhiteSpace(profile.ContentType)) { |
+ @profile.FieldCount total @profile.HeaderFieldCount header, @profile.TrailerFieldCount trailer |
+
Each contract resolves to the file profile used at generation time.
+| Contract | +File profile | +
|---|---|
| @contract.ContractId | +@contract.FileProfileId | +
Latest completed runs pulled from the local audit database.
+| Merchant | +Scheduled | +Completed | +Status | +Error | +
|---|---|---|---|---|
|
+ @run.MerchantName + @run.MerchantId + |
+ @run.ScheduledRunUtc.ToString("u") | +@run.CompletedUtc.ToString("u") | +@run.Status | +@run.ErrorMessage | +
Loading run history...
Each row captures the scheduled slot, completion time, and final outcome for a merchant processing cycle.
+Most recent entries appear first, with the latest processing outcome at the top.
+| Merchant | +Scheduled | +Completed | +Status | +Error | +
|---|---|---|---|---|
|
+ @run.MerchantName + @run.MerchantId + |
+ @run.ScheduledRunUtc.ToString("u") | +@run.CompletedUtc.ToString("u") | +@run.Status | +@RenderError(run.ErrorMessage) | +
Loading runtime settings...
These settings feed the service at startup and are stored as individual SQLite rows rather than a JSON blob.
+Saving replaces the runtime rows in SQLite and refreshes the live in-memory snapshot.
+Loading file details...
The selected file could not be found for the current merchant.
+ +@report.Merchant.MerchantName / @report.Merchant.MerchantId
+This page shows the full audit trail for one generated merchant file and its individual line statuses.
+Generated file metadata and status tracking.
+Back out to the merchant or the overall status board.
+Line-level processing statuses captured by the polling worker.
+| Line | +Content | +Status | +Transaction | +Rejection | +
|---|---|---|---|---|
| @line.LineNumber | +@line.Content | +@line.ProcessingStatus | +@line.TransactionId | +@line.RejectionReason | +
@(string.IsNullOrWhiteSpace(report.File.ErrorMessage) ? "No error recorded." : report.File.ErrorMessage)+
Loading merchant status...
The selected merchant ID does not exist in the current configuration.
+ +@report.Merchant.MerchantId
+This merchant-specific page shows the run history and file activity for the selected merchant.
+Current aggregated counts from the audit trail.
+Jump back to the overall status board or drill into a file.
+Latest file records for this merchant.
+| Processed | +Contract | +Status | +Profile | +Details | +
|---|---|---|---|---|
No file activity has been recorded for this merchant yet. | ||||
| @file.ProcessedUtc.ToString("u") | +
+ @file.ContractName + @file.ContractId + |
+ @RenderStatus(file) | +@file.FileProfileId | +View file | +
Loading status board...
Live operational view of merchant file processing, including merchant rollups and the latest file activity.
+Success and failure counts are aggregated from the local file audit store.
+| Merchant | +Enabled | +Successful files | +Failed files | +Last processed | +Next scheduled send | +Details | +
|---|---|---|---|---|---|---|
No merchants are configured. | ||||||
|
+ @merchant.MerchantName + @merchant.MerchantId + |
+ @((merchant.Enabled) ? "Enabled" : "Disabled") | +@merchant.SuccessfulFilesSent | +@merchant.FailedFiles | +@((merchant.LastProcessedUtc?.ToString("u")) ?? "Never") | +@((merchant.NextScheduledUtc?.ToString("u")) ?? "Disabled") | +View details | +
Latest files recorded by the processor, sorted by processing time.
+| Processed | +Merchant | +Contract | +Status | +Profile | +Details | +
|---|---|---|---|---|---|
No recent file activity has been recorded yet. | |||||
| @file.ProcessedUtc.ToString("u") | +
+ @file.MerchantName + @file.MerchantId + |
+
+ @file.ContractName + @file.ContractId + |
+ @RenderStatus(file) | +@file.FileProfileId | +View file | +