Phase 4: Past appointments + AI prediction demo data
- Appointments: add ~25 past appointments (last 90 days) with Completed, Cancelled, No Show, and Rescheduled statuses; completed records carry ActualStartTime/ActualEndTime with realistic variance; cancel/no-show notes explain why; customer label falls back to ContactFirst/LastName for residential customers - Fix future appointment title for residential customers (was always using CompanyName which is null for individuals) - New SeedDataService.AiPredictions.cs: seeds 8 AiItemPrediction records (varied complexity/confidence/tags/reasoning) and attaches them to the first 8 eligible QuoteItems, marking those items IsAiItem=true; 3 of 8 have UserOverrodeEstimate=true for AI Accuracy report demo - SeedDataService.cs: wire SeedAiPredictionsAsync after Invoices - Remove.cs: collect QuoteItem.AiPredictionId FKs before deleting items, then delete orphaned AiItemPrediction records after quotes are removed Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -425,6 +425,7 @@ public partial class SeedDataService : ISeedDataService
|
||||
await RunSeeder("Time entries", details, errors, result, () => SeedJobTimeEntriesAsync(company));
|
||||
await RunSeeder("Inv. txns", details, errors, result, () => SeedInventoryTransactionsAsync(company));
|
||||
await RunSeeder("Invoices", details, errors, result, () => SeedInvoicesAsync(company));
|
||||
await RunSeeder("AI predictions", details, errors, result, () => SeedAiPredictionsAsync(company));
|
||||
await RunSeeder("Vendor bills", details, errors, result, () => SeedBillsAsync(company));
|
||||
await RunSeeder("Expenses", details, errors, result, () => SeedExpensesAsync(company));
|
||||
await RunSeeder("Appointments", details, errors, result, () => SeedAppointmentsAsync(company));
|
||||
|
||||
Reference in New Issue
Block a user