diff --git a/src/Purrse.Api/Services/ChatService.cs b/src/Purrse.Api/Services/ChatService.cs index f9aae7e..3d3d685 100644 --- a/src/Purrse.Api/Services/ChatService.cs +++ b/src/Purrse.Api/Services/ChatService.cs @@ -525,10 +525,16 @@ public class ChatService : IChatService if (match != null) categoryId = match.Id; } + // When the AI passes a date-only end date (midnight), bump to end of day + // so "2026-02-11" means the entire day, not just midnight. + var endDate = ParseDateArg(args, "end_date"); + if (endDate.HasValue && endDate.Value.TimeOfDay == TimeSpan.Zero) + endDate = endDate.Value.Date.AddDays(1).AddTicks(-1); + var searchRequest = new TransactionSearchRequest( AccountId: null, StartDate: ParseDateArg(args, "start_date"), - EndDate: ParseDateArg(args, "end_date"), + EndDate: endDate, MinAmount: ParseDecimalArg(args, "min_amount"), MaxAmount: ParseDecimalArg(args, "max_amount"), PayeeName: ParseStringArg(args, "payee_name"), @@ -555,6 +561,7 @@ public class ChatService : IChatService { var startDate = ParseDateArg(args, "start_date") ?? new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1, 0, 0, 0, DateTimeKind.Utc); var endDate = ParseDateArg(args, "end_date") ?? DateTime.UtcNow; + if (endDate.TimeOfDay == TimeSpan.Zero) endDate = endDate.Date.AddDays(1).AddTicks(-1); var report = await _reportService.GetSpendingByCategoryAsync(userId, startDate, endDate); @@ -572,6 +579,7 @@ public class ChatService : IChatService { var startDate = ParseDateArg(args, "start_date") ?? DateTime.UtcNow.AddMonths(-6); var endDate = ParseDateArg(args, "end_date") ?? DateTime.UtcNow; + if (endDate.TimeOfDay == TimeSpan.Zero) endDate = endDate.Date.AddDays(1).AddTicks(-1); var report = await _reportService.GetIncomeVsExpenseAsync(userId, startDate, endDate);