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:
@@ -240,3 +240,42 @@ else
|
||||
<i class="bi bi-info-circle me-1"></i>
|
||||
Generated @DateTime.Now.ToString("MMM d, yyyy h:mm tt") · Includes all open invoices (excluding Draft and Voided). Age calculated from due date.
|
||||
</div>
|
||||
|
||||
@if (Model.Customers.Any())
|
||||
{
|
||||
<!-- AI Late Payment Prediction -->
|
||||
<div class="card shadow-sm mt-4 border-0 no-print" id="aiRiskCard">
|
||||
<div class="card-header d-flex align-items-center gap-2">
|
||||
<i class="bi bi-robot text-primary"></i>
|
||||
<span class="fw-semibold">AI Payment Risk Prediction</span>
|
||||
<button id="aiRiskBtn" class="btn btn-sm btn-outline-primary ms-auto">
|
||||
<i class="bi bi-magic me-1"></i>Predict Payment Risk
|
||||
</button>
|
||||
</div>
|
||||
<div class="card-body d-none" id="aiRiskBody">
|
||||
<div id="aiRiskSpinner" class="text-center py-3 d-none">
|
||||
<div class="spinner-border text-primary" role="status"></div>
|
||||
<p class="text-muted mt-2 small">Claude is analyzing payment behavior…</p>
|
||||
</div>
|
||||
<div id="aiRiskError" class="alert alert-danger alert-permanent d-none"></div>
|
||||
<div id="aiRiskInsights" class="text-muted small mb-3"></div>
|
||||
<div id="aiRiskTable" class="table-responsive d-none">
|
||||
<table class="table table-sm align-middle">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Customer</th>
|
||||
<th>Risk</th>
|
||||
<th>Est. Days to Payment</th>
|
||||
<th>Reasoning</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="aiRiskRows"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
@section Scripts {
|
||||
<script src="/js/ar-aging-ai.js"></script>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user