{bill.name}
+ {bill.computedStatus} + {bill.autopay && autopay} ++ {money(bill.amount, bill.currency)} due {new Date(bill.dueDate).toLocaleDateString()} · {bill.recurrence} +
+ {bill.payee &&Payee: {bill.payee.name}
} +From f0e6405b1172f29384624ecb7dd1270702e3e10b Mon Sep 17 00:00:00 2001
From: MOHAN
Active bills
+{summary?.activeCount ?? 0}
+Due next 30 days
+{summary?.upcomingCount ?? 0}
+Overdue
+{summary?.overdueCount ?? 0}
+Total due next 30 days
+{money(summary?.totalDueNext30 ?? 0)}
+Payees
+No payees yet.
} + {payees.map((payee) => ( +{payee.name}
+{payee.category || "Uncategorized"}{payee.accountNumberLast4 ? ` · ${payee.accountNumberLast4}` : ""}
+New Bill
+{status}
} +Bill Schedule
+ +No bills for this view.
} + {filteredBills.map((bill) => ( +{bill.name}
+ {bill.computedStatus} + {bill.autopay && autopay} ++ {money(bill.amount, bill.currency)} due {new Date(bill.dueDate).toLocaleDateString()} · {bill.recurrence} +
+ {bill.payee &&Payee: {bill.payee.name}
} +Latest score
+{summary?.latest?.score ?? "--"}
+{scoreBand(summary?.latest?.score)}
+Last change
++ {summary?.change === null || summary?.change === undefined ? "--" : `${summary.change > 0 ? "+" : ""}${summary.change}`} +
+Compared with previous same-bureau entry
+Average score
+{summary?.averageScore ?? "--"}
+Across saved entries
+Entries
+{summary?.entryCount ?? 0}
+Manual or imported history
+Add Score Entry
+{status}
} +Bureau Snapshot
+ +{entry.bureau}
+{entry.score}
+{new Date(entry.scoreDate).toLocaleDateString()}
+No bureau scores yet.
} +Score History
+No score entries for this view.
} + {filteredEntries.map((entry) => { + const factors = entry.factors ?? {}; + const positive = Array.isArray(factors.positive) ? factors.positive : []; + const negative = Array.isArray(factors.negative) ? factors.negative : []; + return ( +{entry.score}
+ {entry.bureau} + {entry.model} +{new Date(entry.scoreDate).toLocaleDateString()} · {entry.source}
+ {(positive.length > 0 || negative.length > 0) && ( ++ {positive.length > 0 ? `Positive: ${positive.join(", ")}` : ""} + {positive.length > 0 && negative.length > 0 ? " · " : ""} + {negative.length > 0 ? `Negative: ${negative.join(", ")}` : ""} +
+ )} +{scoreBand(entry.score)}
+SMTP Email
+Send important LedgerOne alerts through the configured SMTP transport.
+ +Browser Push
++ {vapid.enabled ? "Register this browser for web push alerts." : "Backend VAPID keys are not configured."} +
+ +Delivery Threshold
+Email and push delivery only run at or above this severity.
+ +Notification Center
+{unreadCount} unread alert{unreadCount === 1 ? "" : "s"}
+{status}
} + +Loading notifications...
} + {!loading && notifications.length === 0 &&No notifications yet.
} + {!loading && notifications.map((item) => ( +{item.title}
+ {item.severity} +{item.body}
++ {new Date(item.createdAt).toLocaleString()} · {item.channels.join(", ") || "in_app"} +
+Preview: {csvPreview.fileName}
+Columns: {csvPreview.fileName}
+{csvPreview.rowCount} detected row{csvPreview.rowCount === 1 ? "" : "s"}
| {header} | - ))} +Column | +Mapped as |
|---|---|---|
| {row[header] ?? ""} | - ))} -||
| {header} | +{mapped ?? "Not mapped"} | +