Private
Public Access
1
0

Implement Phase 5: reconciliation, SignalR notifications, payees, splits & plugins

Add full frontend UI for five backend features: bank reconciliation (3-step
stepper workflow), payee management (CRUD with alias chips), transaction splits
(expandable rows + split editor), plugins (card grid), and real-time SignalR
notifications (bell dropdown with badge). Fix backend PayeeResponse to expose
alias IDs for deletion.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Catherine Renelle
2026-02-08 14:14:23 -05:00
parent d0c3e3913c
commit eb49147080
14 changed files with 1084 additions and 18 deletions
+12
View File
@@ -0,0 +1,12 @@
import api from './api'
import type { Payee, CreatePayeeRequest, UpdatePayeeRequest } from '@/types'
export const payeesApi = {
getAll: () => api.get<Payee[]>('/payees'),
getById: (id: string) => api.get<Payee>(`/payees/${id}`),
create: (data: CreatePayeeRequest) => api.post<Payee>('/payees', data),
update: (id: string, data: UpdatePayeeRequest) => api.put<Payee>(`/payees/${id}`, data),
delete: (id: string) => api.delete(`/payees/${id}`),
addAlias: (payeeId: string, alias: string) => api.post(`/payees/${payeeId}/aliases`, { alias }),
removeAlias: (payeeId: string, aliasId: string) => api.delete(`/payees/${payeeId}/aliases/${aliasId}`),
}
+6
View File
@@ -0,0 +1,6 @@
import api from './api'
import type { Plugin } from '@/types'
export const pluginsApi = {
getAll: () => api.get<Plugin[]>('/plugins'),
}
+11
View File
@@ -0,0 +1,11 @@
import api from './api'
import type { ReconciliationResponse, StartReconciliationRequest } from '@/types'
export const reconciliationApi = {
start: (accountId: string, data: StartReconciliationRequest) =>
api.post<ReconciliationResponse>(`/reconciliation/${accountId}/start`, data),
complete: (accountId: string, reconciliationId: string) =>
api.post(`/reconciliation/${accountId}/complete`, null, { params: { reconciliationId } }),
cancel: (accountId: string, reconciliationId: string) =>
api.post(`/reconciliation/${accountId}/cancel`, null, { params: { reconciliationId } }),
}