Add 4 AI bookkeeping features

Feature 7: Bank Rec Auto-Match — AiSuggestMatches endpoint scores uncleared
transactions vs statement ending balance; AI Auto-Match panel in Reconcile.cshtml
with confidence highlights and Apply All button.

Feature 8: Late Payment Prediction — PredictLatePayments endpoint scores open AR
customers by risk (high/medium/low) using historical avg-days-to-pay + late rate;
rendered as badge table in AR Aging view via ar-aging-ai.js.

Feature 9: Natural Language Financial Queries — FinancialQuery GET page + RunFinancialQuery
POST; 12-month context snapshot pre-loaded; answers grounded in real data with
supporting facts, follow-up suggestions, session history, and example chips.

Feature 10: Recurring Bill Detection — RunRecurringDetection scans 12 months of bills
for vendor payment patterns (monthly/quarterly/annual); card grid view in Bills/RecurringDetection.cshtml
with confidence badges, next-expected-date, and suggested actions.

Supporting: 4 new DTO groups in AccountingAiDtos.cs, 4 method signatures in
IAccountingAiService.cs, 4 implementations in AccountingAiService.cs, 4 new
AiFeatures constants, 2 new Landing page AI report cards.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-10 19:22:49 -04:00
parent e2f9e9ae4f
commit 959e323f3a
16 changed files with 1679 additions and 4 deletions
@@ -101,8 +101,12 @@ public static class AppConstants
public const string AccountSuggest = "AccountSuggest";
public const string ArFollowUp = "ArFollowUp";
public const string FinancialSummary = "FinancialSummary";
public const string CashFlowForecast = "CashFlowForecast";
public const string AnomalyDetection = "AnomalyDetection";
public const string CashFlowForecast = "CashFlowForecast";
public const string AnomalyDetection = "AnomalyDetection";
public const string BankRecAutoMatch = "BankRecAutoMatch";
public const string LatePaymentPrediction = "LatePaymentPrediction";
public const string FinancialQuery = "FinancialQuery";
public const string RecurringBillDetection = "RecurringBillDetection";
}
public static class Legal