feat(cma): treasury stage-1 MVP - migration, models, endpoints, rules, 2 pages

G1 review fixes P0-1/P0-2/P1-3/P1-4/P1-5/P2-6/P2-7/P2-8 applied:
- up() filters comment lines then asserts missing_tables == [] (CREATE hits 6/6)
- created counter = new-object diff via information_schema (idempotent second run = 0)
- down() drops columns per-column, dumps via write-path creds + fail-closed
- seeds expanded to 8 rules + 6 limits; data_status DEFAULT estimated
- no physical FK (app-layer checks), amount FLOAT wan-yuan, round(x,4)

Scope: 6 treasury_* tables + cash_plans 4 added columns; cash.py untouched.
Not pushed: deploy is approval-gated (de851257).
This commit is contained in:
Hermes CI Fix
2026-09-15 20:02:56 +08:00
parent fdf805ab8f
commit e5eb092d20
12 changed files with 3472 additions and 4 deletions
+32
View File
@@ -493,4 +493,36 @@ export const aiSuggestionApi = {
preview: (id: number) => api.get(`/ai/suggestions/${id}/preview`),
}
// ── 资金管理(账户池/头寸/支付内控 2026-09-15)──
export const treasuryApi = {
// 账户池
listAccounts: (params?: any) => api.get('/treasury/accounts', { params }),
createAccount: (data: any) => api.post('/treasury/accounts', data),
updateAccount: (id: number, data: any) => api.put(`/treasury/accounts/${id}`, data),
deleteAccount: (id: number) => api.delete(`/treasury/accounts/${id}`),
importAccounts: (rows: any[]) => api.post('/treasury/accounts/import', rows),
// 头寸
listBalances: (params?: any) => api.get('/treasury/balances', { params }),
upsertBalance: (data: any) => api.post('/treasury/balances', data),
importBalances: (rows: any[]) => api.post('/treasury/balances/import', rows),
positionsSummary: (params?: any) => api.get('/treasury/positions/summary', { params }),
dashboard: () => api.get('/treasury/dashboard'),
// 规则库 / 授权矩阵
listRules: (params?: any) => api.get('/treasury/control-rules', { params }),
updateRule: (id: number, data: any) => api.put(`/treasury/control-rules/${id}`, data),
testRules: (data: any) => api.post('/treasury/control-rules/test', data),
listLimits: (params?: any) => api.get('/treasury/limits', { params }),
updateLimit: (id: number, data: any) => api.put(`/treasury/limits/${id}`, data),
// 支付单
listPayments: (params?: any) => api.get('/treasury/payments', { params }),
createPayment: (data: any) => api.post('/treasury/payments', data),
updatePayment: (id: number, data: any) => api.put(`/treasury/payments/${id}`, data),
precheckPayment: (id: number) => api.post(`/treasury/payments/${id}/precheck`),
approvePayment: (id: number, data: any) => api.post(`/treasury/payments/${id}/approve`, data),
payPayment: (id: number) => api.post(`/treasury/payments/${id}/pay`),
waivePayment: (id: number, data: any) => api.post(`/treasury/payments/${id}/waive`, data),
// 规则命中留痕
listHits: (params?: any) => api.get('/treasury/control-hits', { params }),
}
export default api