- 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>