@firela/api-types 0.0.0-canary.209967 → 0.0.0-canary.6feee68d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +1959 -1127
- package/dist/index.d.ts +1959 -1127
- package/dist/index.js +102 -125
- package/dist/index.mjs +102 -125
- package/package.json +1 -6
- package/src/generated/schemas.gen.ts +1650 -297
- package/src/generated/services.gen.ts +909 -941
- package/src/generated/types.gen.ts +2246 -1324
|
@@ -8,6 +8,12 @@ export const $CreateAccountDto = {
|
|
|
8
8
|
description: 'Account path (hierarchical, colon-separated)',
|
|
9
9
|
example: 'Assets:CN:Bank:ICBC:Checking'
|
|
10
10
|
},
|
|
11
|
+
displayName: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
description:
|
|
14
|
+
'Display name to distinguish accounts at the same path (default: "")',
|
|
15
|
+
example: '工资卡'
|
|
16
|
+
},
|
|
11
17
|
openDate: {
|
|
12
18
|
format: 'date-time',
|
|
13
19
|
type: 'string',
|
|
@@ -86,6 +92,12 @@ export const $AccountResponseDto = {
|
|
|
86
92
|
description: 'Account path (hierarchical, colon-separated)',
|
|
87
93
|
example: 'Assets:CN:Bank:ICBC:Checking'
|
|
88
94
|
},
|
|
95
|
+
displayName: {
|
|
96
|
+
type: 'string',
|
|
97
|
+
description:
|
|
98
|
+
'Display name distinguishing multiple accounts at the same path',
|
|
99
|
+
example: '工资卡'
|
|
100
|
+
},
|
|
89
101
|
type: {
|
|
90
102
|
type: 'string',
|
|
91
103
|
description: 'Account type (root segment)',
|
|
@@ -180,6 +192,7 @@ export const $AccountResponseDto = {
|
|
|
180
192
|
required: [
|
|
181
193
|
'id',
|
|
182
194
|
'path',
|
|
195
|
+
'displayName',
|
|
183
196
|
'type',
|
|
184
197
|
'status',
|
|
185
198
|
'openDate',
|
|
@@ -212,6 +225,11 @@ export const $AccountListResponseDto = {
|
|
|
212
225
|
export const $UpdateAccountDto = {
|
|
213
226
|
type: 'object',
|
|
214
227
|
properties: {
|
|
228
|
+
displayName: {
|
|
229
|
+
type: 'string',
|
|
230
|
+
description: 'Display name to distinguish accounts at the same path',
|
|
231
|
+
example: '招行工资卡'
|
|
232
|
+
},
|
|
215
233
|
currencies: {
|
|
216
234
|
description: 'Allowed currencies (null = no restriction)',
|
|
217
235
|
example: ['CNY', 'USD'],
|
|
@@ -251,7 +269,7 @@ export const $UpdateAccountDto = {
|
|
|
251
269
|
}
|
|
252
270
|
},
|
|
253
271
|
platformId: {
|
|
254
|
-
type: '
|
|
272
|
+
type: 'string',
|
|
255
273
|
description:
|
|
256
274
|
'Platform ID (references Platform.id), null to clear association',
|
|
257
275
|
example: 'c98e5d4a-2f71-4a5a-bb3c-92c9f231d5e2',
|
|
@@ -292,6 +310,162 @@ export const $ReopenAccountDto = {
|
|
|
292
310
|
}
|
|
293
311
|
} as const;
|
|
294
312
|
|
|
313
|
+
export const $AccountStandardResponseDto = {
|
|
314
|
+
type: 'object',
|
|
315
|
+
properties: {
|
|
316
|
+
path: {
|
|
317
|
+
type: 'string',
|
|
318
|
+
description: 'Account path (hierarchical, colon-separated)',
|
|
319
|
+
example: 'Assets:CN:Bank:ICBC:Checking'
|
|
320
|
+
},
|
|
321
|
+
type: {
|
|
322
|
+
type: 'string',
|
|
323
|
+
description: 'Account type in Beancount hierarchy',
|
|
324
|
+
enum: ['Assets', 'Liabilities', 'Income', 'Expenses', 'Equity'],
|
|
325
|
+
example: 'Assets'
|
|
326
|
+
},
|
|
327
|
+
i18nKey: {
|
|
328
|
+
type: 'string',
|
|
329
|
+
description: 'i18n key for localized display name',
|
|
330
|
+
example: 'account.assets.cn.bank.icbc.checking'
|
|
331
|
+
},
|
|
332
|
+
name: {
|
|
333
|
+
type: 'string',
|
|
334
|
+
description: 'Short localized display name',
|
|
335
|
+
example: 'Housing Fund'
|
|
336
|
+
},
|
|
337
|
+
description: {
|
|
338
|
+
type: 'string',
|
|
339
|
+
description: 'Account description (stable semantics only)',
|
|
340
|
+
example: 'ICBC checking account for daily transactions'
|
|
341
|
+
},
|
|
342
|
+
tags: {
|
|
343
|
+
description: 'Account tags for categorization',
|
|
344
|
+
example: ['bank', 'checking', 'primary'],
|
|
345
|
+
type: 'array',
|
|
346
|
+
items: {
|
|
347
|
+
type: 'string'
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
icon: {
|
|
351
|
+
type: 'string',
|
|
352
|
+
description: 'Icon identifier for UI display',
|
|
353
|
+
example: 'bank-icbc'
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
required: ['path', 'type', 'i18nKey', 'description', 'tags', 'icon']
|
|
357
|
+
} as const;
|
|
358
|
+
|
|
359
|
+
export const $AccountStandardListResponseDto = {
|
|
360
|
+
type: 'object',
|
|
361
|
+
properties: {
|
|
362
|
+
items: {
|
|
363
|
+
description: 'Array of account templates',
|
|
364
|
+
type: 'array',
|
|
365
|
+
items: {
|
|
366
|
+
$ref: '#/components/schemas/AccountStandardResponseDto'
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
total: {
|
|
370
|
+
type: 'number',
|
|
371
|
+
description: 'Total number of account templates',
|
|
372
|
+
example: 150
|
|
373
|
+
},
|
|
374
|
+
region: {
|
|
375
|
+
type: 'string',
|
|
376
|
+
description: 'Region code',
|
|
377
|
+
example: 'CN'
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
required: ['items', 'total', 'region']
|
|
381
|
+
} as const;
|
|
382
|
+
|
|
383
|
+
export const $TemplateMetadataDto = {
|
|
384
|
+
type: 'object',
|
|
385
|
+
properties: {
|
|
386
|
+
extendable: {
|
|
387
|
+
type: 'boolean',
|
|
388
|
+
description: 'Whether this path can be extended',
|
|
389
|
+
example: true
|
|
390
|
+
},
|
|
391
|
+
rootType: {
|
|
392
|
+
type: 'string',
|
|
393
|
+
description: 'Root account type',
|
|
394
|
+
example: 'Assets'
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
required: ['extendable', 'rootType']
|
|
398
|
+
} as const;
|
|
399
|
+
|
|
400
|
+
export const $TemplateMetadataResponseDto = {
|
|
401
|
+
type: 'object',
|
|
402
|
+
properties: {
|
|
403
|
+
metadata: {
|
|
404
|
+
$ref: '#/components/schemas/TemplateMetadataDto'
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
} as const;
|
|
408
|
+
|
|
409
|
+
export const $RegionConfigDto = {
|
|
410
|
+
type: 'object',
|
|
411
|
+
properties: {
|
|
412
|
+
currency: {
|
|
413
|
+
type: 'string',
|
|
414
|
+
example: 'EUR'
|
|
415
|
+
},
|
|
416
|
+
dateFormat: {
|
|
417
|
+
type: 'string',
|
|
418
|
+
example: 'DD.MM.YYYY'
|
|
419
|
+
},
|
|
420
|
+
locale: {
|
|
421
|
+
type: 'string',
|
|
422
|
+
example: 'de-DE'
|
|
423
|
+
}
|
|
424
|
+
},
|
|
425
|
+
required: ['currency', 'dateFormat', 'locale']
|
|
426
|
+
} as const;
|
|
427
|
+
|
|
428
|
+
export const $RegionInfoDto = {
|
|
429
|
+
type: 'object',
|
|
430
|
+
properties: {
|
|
431
|
+
code: {
|
|
432
|
+
type: 'string',
|
|
433
|
+
example: 'de'
|
|
434
|
+
},
|
|
435
|
+
displayName: {
|
|
436
|
+
type: 'string',
|
|
437
|
+
example: 'Germany'
|
|
438
|
+
},
|
|
439
|
+
parent: {
|
|
440
|
+
type: 'string'
|
|
441
|
+
},
|
|
442
|
+
chain: {
|
|
443
|
+
example: ['de'],
|
|
444
|
+
type: 'array',
|
|
445
|
+
items: {
|
|
446
|
+
type: 'string'
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
config: {
|
|
450
|
+
$ref: '#/components/schemas/RegionConfigDto'
|
|
451
|
+
}
|
|
452
|
+
},
|
|
453
|
+
required: ['code', 'displayName', 'chain', 'config']
|
|
454
|
+
} as const;
|
|
455
|
+
|
|
456
|
+
export const $RegionsMetadataResponseDto = {
|
|
457
|
+
type: 'object',
|
|
458
|
+
properties: {
|
|
459
|
+
regions: {
|
|
460
|
+
type: 'array',
|
|
461
|
+
items: {
|
|
462
|
+
$ref: '#/components/schemas/RegionInfoDto'
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
required: ['regions']
|
|
467
|
+
} as const;
|
|
468
|
+
|
|
295
469
|
export const $CreatePostingDto = {
|
|
296
470
|
type: 'object',
|
|
297
471
|
properties: {
|
|
@@ -607,6 +781,65 @@ export const $ApiProblemResponseDto = {
|
|
|
607
781
|
required: ['type', 'title', 'status', 'detail']
|
|
608
782
|
} as const;
|
|
609
783
|
|
|
784
|
+
export const $BatchCreateTransactionDto = {
|
|
785
|
+
type: 'object',
|
|
786
|
+
properties: {
|
|
787
|
+
transactions: {
|
|
788
|
+
description: 'Array of transactions to create',
|
|
789
|
+
minItems: 1,
|
|
790
|
+
maxItems: 100,
|
|
791
|
+
type: 'array',
|
|
792
|
+
items: {
|
|
793
|
+
$ref: '#/components/schemas/CreateTransactionDto'
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
},
|
|
797
|
+
required: ['transactions']
|
|
798
|
+
} as const;
|
|
799
|
+
|
|
800
|
+
export const $BatchTransactionErrorDto = {
|
|
801
|
+
type: 'object',
|
|
802
|
+
properties: {
|
|
803
|
+
index: {
|
|
804
|
+
type: 'number',
|
|
805
|
+
description: 'Index of failed transaction in the input array',
|
|
806
|
+
example: 0
|
|
807
|
+
},
|
|
808
|
+
error: {
|
|
809
|
+
type: 'string',
|
|
810
|
+
description: 'Error message describing the failure',
|
|
811
|
+
example: 'Transaction does not balance'
|
|
812
|
+
},
|
|
813
|
+
errorCode: {
|
|
814
|
+
type: 'string',
|
|
815
|
+
description: 'Structured error code for programmatic handling',
|
|
816
|
+
example: 'INSUFFICIENT_QUANTITY'
|
|
817
|
+
}
|
|
818
|
+
},
|
|
819
|
+
required: ['index', 'error']
|
|
820
|
+
} as const;
|
|
821
|
+
|
|
822
|
+
export const $BatchTransactionResponseDto = {
|
|
823
|
+
type: 'object',
|
|
824
|
+
properties: {
|
|
825
|
+
succeeded: {
|
|
826
|
+
description: 'Successfully created transactions',
|
|
827
|
+
type: 'array',
|
|
828
|
+
items: {
|
|
829
|
+
$ref: '#/components/schemas/TransactionResponseDto'
|
|
830
|
+
}
|
|
831
|
+
},
|
|
832
|
+
failed: {
|
|
833
|
+
description: 'Failed transactions with error details',
|
|
834
|
+
type: 'array',
|
|
835
|
+
items: {
|
|
836
|
+
$ref: '#/components/schemas/BatchTransactionErrorDto'
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
},
|
|
840
|
+
required: ['succeeded', 'failed']
|
|
841
|
+
} as const;
|
|
842
|
+
|
|
610
843
|
export const $PostingDetailDto = {
|
|
611
844
|
type: 'object',
|
|
612
845
|
properties: {
|
|
@@ -876,185 +1109,59 @@ export const $UpdateTransactionDto = {
|
|
|
876
1109
|
}
|
|
877
1110
|
} as const;
|
|
878
1111
|
|
|
879
|
-
export const $
|
|
1112
|
+
export const $BalanceResponseDto = {
|
|
880
1113
|
type: 'object',
|
|
881
1114
|
properties: {
|
|
882
|
-
|
|
1115
|
+
account: {
|
|
883
1116
|
type: 'string',
|
|
884
|
-
description: 'Account
|
|
885
|
-
example: 'Assets:
|
|
1117
|
+
description: 'Account name',
|
|
1118
|
+
example: 'Assets:Bank:Checking'
|
|
886
1119
|
},
|
|
887
|
-
|
|
1120
|
+
balance: {
|
|
888
1121
|
type: 'string',
|
|
889
|
-
description: '
|
|
890
|
-
|
|
891
|
-
example: 'Assets'
|
|
1122
|
+
description: 'Balance amount (decimal string for precision)',
|
|
1123
|
+
example: '12345.67'
|
|
892
1124
|
},
|
|
893
|
-
|
|
1125
|
+
currency: {
|
|
894
1126
|
type: 'string',
|
|
895
|
-
description: '
|
|
896
|
-
example: '
|
|
1127
|
+
description: 'Currency code',
|
|
1128
|
+
example: 'USD'
|
|
897
1129
|
},
|
|
898
|
-
|
|
1130
|
+
date: {
|
|
899
1131
|
type: 'string',
|
|
900
|
-
description: '
|
|
901
|
-
example: '
|
|
1132
|
+
description: 'Date of the balance calculation (ISO 8601)',
|
|
1133
|
+
example: '2024-12-31T00:00:00.000Z'
|
|
1134
|
+
}
|
|
1135
|
+
},
|
|
1136
|
+
required: ['account', 'balance', 'currency', 'date']
|
|
1137
|
+
} as const;
|
|
1138
|
+
|
|
1139
|
+
export const $MultiCurrencyBalanceResponseDto = {
|
|
1140
|
+
type: 'object',
|
|
1141
|
+
properties: {
|
|
1142
|
+
account: {
|
|
1143
|
+
type: 'string',
|
|
1144
|
+
description: 'Account name',
|
|
1145
|
+
example: 'Assets:Bank:Checking'
|
|
902
1146
|
},
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
1147
|
+
balances: {
|
|
1148
|
+
type: 'object',
|
|
1149
|
+
description: 'Balances by currency',
|
|
1150
|
+
example: {
|
|
1151
|
+
USD: '12345.67',
|
|
1152
|
+
CNY: '100000.00'
|
|
909
1153
|
}
|
|
910
1154
|
},
|
|
911
|
-
|
|
1155
|
+
date: {
|
|
912
1156
|
type: 'string',
|
|
913
|
-
description: '
|
|
914
|
-
example: '
|
|
1157
|
+
description: 'Date of the balance calculation (ISO 8601)',
|
|
1158
|
+
example: '2024-12-31T00:00:00.000Z'
|
|
915
1159
|
}
|
|
916
1160
|
},
|
|
917
|
-
required: ['
|
|
1161
|
+
required: ['account', 'balances', 'date']
|
|
918
1162
|
} as const;
|
|
919
1163
|
|
|
920
|
-
export const $
|
|
921
|
-
type: 'object',
|
|
922
|
-
properties: {
|
|
923
|
-
items: {
|
|
924
|
-
description: 'Array of account templates',
|
|
925
|
-
type: 'array',
|
|
926
|
-
items: {
|
|
927
|
-
$ref: '#/components/schemas/AccountStandardResponseDto'
|
|
928
|
-
}
|
|
929
|
-
},
|
|
930
|
-
total: {
|
|
931
|
-
type: 'number',
|
|
932
|
-
description: 'Total number of account templates',
|
|
933
|
-
example: 150
|
|
934
|
-
},
|
|
935
|
-
region: {
|
|
936
|
-
type: 'string',
|
|
937
|
-
description: 'Region code',
|
|
938
|
-
example: 'CN'
|
|
939
|
-
}
|
|
940
|
-
},
|
|
941
|
-
required: ['items', 'total', 'region']
|
|
942
|
-
} as const;
|
|
943
|
-
|
|
944
|
-
export const $RegionConfigDto = {
|
|
945
|
-
type: 'object',
|
|
946
|
-
properties: {
|
|
947
|
-
currency: {
|
|
948
|
-
type: 'string',
|
|
949
|
-
example: 'EUR'
|
|
950
|
-
},
|
|
951
|
-
dateFormat: {
|
|
952
|
-
type: 'string',
|
|
953
|
-
example: 'DD.MM.YYYY'
|
|
954
|
-
},
|
|
955
|
-
locale: {
|
|
956
|
-
type: 'string',
|
|
957
|
-
example: 'de-DE'
|
|
958
|
-
}
|
|
959
|
-
},
|
|
960
|
-
required: ['currency', 'dateFormat', 'locale']
|
|
961
|
-
} as const;
|
|
962
|
-
|
|
963
|
-
export const $RegionInfoDto = {
|
|
964
|
-
type: 'object',
|
|
965
|
-
properties: {
|
|
966
|
-
code: {
|
|
967
|
-
type: 'string',
|
|
968
|
-
example: 'de'
|
|
969
|
-
},
|
|
970
|
-
displayName: {
|
|
971
|
-
type: 'string',
|
|
972
|
-
example: 'Germany'
|
|
973
|
-
},
|
|
974
|
-
parent: {
|
|
975
|
-
type: 'string',
|
|
976
|
-
example: 'eu-core'
|
|
977
|
-
},
|
|
978
|
-
chain: {
|
|
979
|
-
example: ['eu-core', 'de'],
|
|
980
|
-
type: 'array',
|
|
981
|
-
items: {
|
|
982
|
-
type: 'string'
|
|
983
|
-
}
|
|
984
|
-
},
|
|
985
|
-
config: {
|
|
986
|
-
$ref: '#/components/schemas/RegionConfigDto'
|
|
987
|
-
}
|
|
988
|
-
},
|
|
989
|
-
required: ['code', 'displayName', 'chain', 'config']
|
|
990
|
-
} as const;
|
|
991
|
-
|
|
992
|
-
export const $RegionsMetadataResponseDto = {
|
|
993
|
-
type: 'object',
|
|
994
|
-
properties: {
|
|
995
|
-
regions: {
|
|
996
|
-
type: 'array',
|
|
997
|
-
items: {
|
|
998
|
-
$ref: '#/components/schemas/RegionInfoDto'
|
|
999
|
-
}
|
|
1000
|
-
}
|
|
1001
|
-
},
|
|
1002
|
-
required: ['regions']
|
|
1003
|
-
} as const;
|
|
1004
|
-
|
|
1005
|
-
export const $BalanceResponseDto = {
|
|
1006
|
-
type: 'object',
|
|
1007
|
-
properties: {
|
|
1008
|
-
account: {
|
|
1009
|
-
type: 'string',
|
|
1010
|
-
description: 'Account name',
|
|
1011
|
-
example: 'Assets:Bank:Checking'
|
|
1012
|
-
},
|
|
1013
|
-
balance: {
|
|
1014
|
-
type: 'string',
|
|
1015
|
-
description: 'Balance amount (decimal string for precision)',
|
|
1016
|
-
example: '12345.67'
|
|
1017
|
-
},
|
|
1018
|
-
currency: {
|
|
1019
|
-
type: 'string',
|
|
1020
|
-
description: 'Currency code',
|
|
1021
|
-
example: 'USD'
|
|
1022
|
-
},
|
|
1023
|
-
date: {
|
|
1024
|
-
type: 'string',
|
|
1025
|
-
description: 'Date of the balance calculation (ISO 8601)',
|
|
1026
|
-
example: '2024-12-31T00:00:00.000Z'
|
|
1027
|
-
}
|
|
1028
|
-
},
|
|
1029
|
-
required: ['account', 'balance', 'currency', 'date']
|
|
1030
|
-
} as const;
|
|
1031
|
-
|
|
1032
|
-
export const $MultiCurrencyBalanceResponseDto = {
|
|
1033
|
-
type: 'object',
|
|
1034
|
-
properties: {
|
|
1035
|
-
account: {
|
|
1036
|
-
type: 'string',
|
|
1037
|
-
description: 'Account name',
|
|
1038
|
-
example: 'Assets:Bank:Checking'
|
|
1039
|
-
},
|
|
1040
|
-
balances: {
|
|
1041
|
-
type: 'object',
|
|
1042
|
-
description: 'Balances by currency',
|
|
1043
|
-
example: {
|
|
1044
|
-
USD: '12345.67',
|
|
1045
|
-
CNY: '100000.00'
|
|
1046
|
-
}
|
|
1047
|
-
},
|
|
1048
|
-
date: {
|
|
1049
|
-
type: 'string',
|
|
1050
|
-
description: 'Date of the balance calculation (ISO 8601)',
|
|
1051
|
-
example: '2024-12-31T00:00:00.000Z'
|
|
1052
|
-
}
|
|
1053
|
-
},
|
|
1054
|
-
required: ['account', 'balances', 'date']
|
|
1055
|
-
} as const;
|
|
1056
|
-
|
|
1057
|
-
export const $TransactionSummaryDto = {
|
|
1164
|
+
export const $TransactionSummaryDto = {
|
|
1058
1165
|
type: 'object',
|
|
1059
1166
|
properties: {
|
|
1060
1167
|
id: {
|
|
@@ -1139,9 +1246,18 @@ export const $ReviewSummaryDto = {
|
|
|
1139
1246
|
description: 'Confidence level derived from score',
|
|
1140
1247
|
enum: ['HIGH', 'MEDIUM', 'LOW']
|
|
1141
1248
|
},
|
|
1142
|
-
|
|
1249
|
+
summaryKey: {
|
|
1143
1250
|
type: 'string',
|
|
1144
|
-
description:
|
|
1251
|
+
description:
|
|
1252
|
+
'i18n message key for summary (e.g., review.summary.duplicate). Translate on frontend with summaryParams.'
|
|
1253
|
+
},
|
|
1254
|
+
summaryParams: {
|
|
1255
|
+
type: 'object',
|
|
1256
|
+
description:
|
|
1257
|
+
'Parameters for summary message interpolation (e.g., { date: "2024-01-15", amount: "50" })',
|
|
1258
|
+
additionalProperties: {
|
|
1259
|
+
type: 'string'
|
|
1260
|
+
}
|
|
1145
1261
|
},
|
|
1146
1262
|
matchReasons: {
|
|
1147
1263
|
description: 'Human-readable reasons for branching',
|
|
@@ -1201,7 +1317,7 @@ export const $ReviewSummaryDto = {
|
|
|
1201
1317
|
'status',
|
|
1202
1318
|
'confidence',
|
|
1203
1319
|
'confidenceLevel',
|
|
1204
|
-
'
|
|
1320
|
+
'summaryKey',
|
|
1205
1321
|
'matchReasons',
|
|
1206
1322
|
'sourceType',
|
|
1207
1323
|
'createdAt'
|
|
@@ -1313,9 +1429,18 @@ export const $ReviewDetailDto = {
|
|
|
1313
1429
|
description: 'Confidence level derived from score',
|
|
1314
1430
|
enum: ['HIGH', 'MEDIUM', 'LOW']
|
|
1315
1431
|
},
|
|
1316
|
-
|
|
1432
|
+
summaryKey: {
|
|
1317
1433
|
type: 'string',
|
|
1318
|
-
description:
|
|
1434
|
+
description:
|
|
1435
|
+
'i18n message key for summary (e.g., review.summary.duplicate). Translate on frontend with summaryParams.'
|
|
1436
|
+
},
|
|
1437
|
+
summaryParams: {
|
|
1438
|
+
type: 'object',
|
|
1439
|
+
description:
|
|
1440
|
+
'Parameters for summary message interpolation (e.g., { date: "2024-01-15", amount: "50" })',
|
|
1441
|
+
additionalProperties: {
|
|
1442
|
+
type: 'string'
|
|
1443
|
+
}
|
|
1319
1444
|
},
|
|
1320
1445
|
matchReasons: {
|
|
1321
1446
|
description: 'Human-readable reasons for branching',
|
|
@@ -1391,7 +1516,7 @@ export const $ReviewDetailDto = {
|
|
|
1391
1516
|
'status',
|
|
1392
1517
|
'confidence',
|
|
1393
1518
|
'confidenceLevel',
|
|
1394
|
-
'
|
|
1519
|
+
'summaryKey',
|
|
1395
1520
|
'matchReasons',
|
|
1396
1521
|
'sourceType',
|
|
1397
1522
|
'createdAt',
|
|
@@ -1400,154 +1525,495 @@ export const $ReviewDetailDto = {
|
|
|
1400
1525
|
]
|
|
1401
1526
|
} as const;
|
|
1402
1527
|
|
|
1403
|
-
export const $
|
|
1528
|
+
export const $ResolveReviewDto = {
|
|
1404
1529
|
type: 'object',
|
|
1405
1530
|
properties: {
|
|
1406
|
-
|
|
1531
|
+
action: {
|
|
1407
1532
|
type: 'string',
|
|
1408
|
-
description:
|
|
1409
|
-
|
|
1533
|
+
description:
|
|
1534
|
+
'Decision action. Available actions vary by review type: DUPLICATE: UPGRADE_REPLACE, KEEP_EXISTING, KEEP_BOTH | PAYEE_MATCH: ACCEPT, REJECT, ACCEPT_AND_LEARN | ACCOUNT_VALIDATION: FIX, REJECT | RULE_MATCH: ACCEPT, REJECT, ACCEPT_AND_LEARN',
|
|
1535
|
+
example: 'ACCEPT'
|
|
1410
1536
|
},
|
|
1411
|
-
|
|
1412
|
-
type: '
|
|
1413
|
-
description:
|
|
1414
|
-
|
|
1537
|
+
data: {
|
|
1538
|
+
type: 'object',
|
|
1539
|
+
description:
|
|
1540
|
+
'Additional data for the decision (e.g., selected account ID)',
|
|
1541
|
+
example: {
|
|
1542
|
+
accountId: 'acc-123'
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
},
|
|
1546
|
+
required: ['action']
|
|
1547
|
+
} as const;
|
|
1548
|
+
|
|
1549
|
+
export const $ResolveResultDto = {
|
|
1550
|
+
type: 'object',
|
|
1551
|
+
properties: {
|
|
1552
|
+
success: {
|
|
1553
|
+
type: 'boolean',
|
|
1554
|
+
description: 'Whether resolution was successful'
|
|
1415
1555
|
},
|
|
1416
|
-
|
|
1556
|
+
messageKey: {
|
|
1417
1557
|
type: 'string',
|
|
1418
|
-
description: "User's original payee name (e.g., 'Starbucks', 'McDonald')",
|
|
1419
|
-
example: 'Starbucks'
|
|
1420
|
-
},
|
|
1421
|
-
payeeProfileId: {
|
|
1422
|
-
type: 'object',
|
|
1423
1558
|
description:
|
|
1424
|
-
'
|
|
1425
|
-
example: 'uuid-789',
|
|
1426
|
-
nullable: true
|
|
1559
|
+
'i18n message key for result message (e.g., review.payee.result.mapped)'
|
|
1427
1560
|
},
|
|
1428
|
-
|
|
1561
|
+
messageParams: {
|
|
1429
1562
|
type: 'object',
|
|
1430
1563
|
description:
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
nullable: true
|
|
1434
|
-
},
|
|
1435
|
-
customTags: {
|
|
1436
|
-
description: "User's custom tags (e.g., ['favorite', 'work_meal'])",
|
|
1437
|
-
example: ['favorite', 'work_meal'],
|
|
1438
|
-
type: 'array',
|
|
1439
|
-
items: {
|
|
1564
|
+
'Parameters for message interpolation (e.g., { name: "PayeeName" })',
|
|
1565
|
+
additionalProperties: {
|
|
1440
1566
|
type: 'string'
|
|
1441
1567
|
}
|
|
1442
1568
|
},
|
|
1443
|
-
|
|
1444
|
-
type: 'number',
|
|
1445
|
-
description:
|
|
1446
|
-
'Usage count (number of times this payee was used in transactions)',
|
|
1447
|
-
example: 42
|
|
1448
|
-
},
|
|
1449
|
-
lastUsedAt: {
|
|
1450
|
-
format: 'date-time',
|
|
1569
|
+
resolutionId: {
|
|
1451
1570
|
type: 'string',
|
|
1452
|
-
description: '
|
|
1453
|
-
example: '2024-11-20T10:00:00Z'
|
|
1454
|
-
},
|
|
1455
|
-
meta: {
|
|
1456
|
-
type: 'object',
|
|
1457
|
-
description: 'Extended metadata (location, notes, contact info, etc.)',
|
|
1458
|
-
example: {
|
|
1459
|
-
location: 'Zhongguancun',
|
|
1460
|
-
note: 'Near subway station',
|
|
1461
|
-
favorite: true
|
|
1462
|
-
}
|
|
1571
|
+
description: 'Resolution ID for undo'
|
|
1463
1572
|
},
|
|
1464
|
-
|
|
1573
|
+
canUndo: {
|
|
1465
1574
|
type: 'boolean',
|
|
1466
|
-
description: '
|
|
1467
|
-
example: true
|
|
1575
|
+
description: 'Whether this decision can be undone'
|
|
1468
1576
|
},
|
|
1469
|
-
|
|
1577
|
+
undoDeadline: {
|
|
1470
1578
|
format: 'date-time',
|
|
1471
1579
|
type: 'string',
|
|
1472
|
-
description: '
|
|
1473
|
-
example: '2024-01-01T10:00:00Z'
|
|
1580
|
+
description: 'Deadline for undo (24h from resolution)'
|
|
1474
1581
|
},
|
|
1475
|
-
|
|
1476
|
-
format: 'date-time',
|
|
1582
|
+
learnedRuleId: {
|
|
1477
1583
|
type: 'string',
|
|
1478
|
-
description:
|
|
1479
|
-
|
|
1584
|
+
description:
|
|
1585
|
+
'Rule ID if learning was triggered (ACCEPT_AND_LEARN actions). Use this to deep-link to the rule management page.',
|
|
1586
|
+
example: 'rule_01HXK5V8N2M3P4Q5R6S7T8U9V0'
|
|
1480
1587
|
}
|
|
1481
1588
|
},
|
|
1482
|
-
required: [
|
|
1483
|
-
'id',
|
|
1484
|
-
'userId',
|
|
1485
|
-
'payee',
|
|
1486
|
-
'customTags',
|
|
1487
|
-
'useCount',
|
|
1488
|
-
'lastUsedAt',
|
|
1489
|
-
'meta',
|
|
1490
|
-
'isActive',
|
|
1491
|
-
'createdAt',
|
|
1492
|
-
'updatedAt'
|
|
1493
|
-
]
|
|
1589
|
+
required: ['success', 'resolutionId', 'canUndo', 'undoDeadline']
|
|
1494
1590
|
} as const;
|
|
1495
1591
|
|
|
1496
|
-
export const $
|
|
1592
|
+
export const $UndoResultDto = {
|
|
1497
1593
|
type: 'object',
|
|
1498
1594
|
properties: {
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
items: {
|
|
1503
|
-
$ref: '#/components/schemas/PayeeResponseDto'
|
|
1504
|
-
}
|
|
1595
|
+
success: {
|
|
1596
|
+
type: 'boolean',
|
|
1597
|
+
description: 'Whether undo was successful'
|
|
1505
1598
|
},
|
|
1506
|
-
|
|
1507
|
-
type: '
|
|
1508
|
-
description: '
|
|
1509
|
-
|
|
1599
|
+
message: {
|
|
1600
|
+
type: 'string',
|
|
1601
|
+
description: 'Message'
|
|
1602
|
+
},
|
|
1603
|
+
reviewId: {
|
|
1604
|
+
type: 'string',
|
|
1605
|
+
description: 'Review item ID that was restored'
|
|
1510
1606
|
}
|
|
1511
1607
|
},
|
|
1512
|
-
required: ['
|
|
1608
|
+
required: ['success', 'reviewId']
|
|
1513
1609
|
} as const;
|
|
1514
1610
|
|
|
1515
|
-
export const $
|
|
1611
|
+
export const $BatchResolveDto = {
|
|
1516
1612
|
type: 'object',
|
|
1517
1613
|
properties: {
|
|
1518
|
-
|
|
1519
|
-
description: '
|
|
1520
|
-
example: ['
|
|
1614
|
+
reviewIds: {
|
|
1615
|
+
description: 'Review item IDs to resolve',
|
|
1616
|
+
example: ['review-1', 'review-2', 'review-3'],
|
|
1521
1617
|
type: 'array',
|
|
1522
1618
|
items: {
|
|
1523
1619
|
type: 'string'
|
|
1524
1620
|
}
|
|
1525
|
-
}
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1621
|
+
},
|
|
1622
|
+
action: {
|
|
1623
|
+
type: 'string',
|
|
1624
|
+
description: 'Decision action to apply to all items',
|
|
1625
|
+
example: 'ACCEPT'
|
|
1626
|
+
},
|
|
1627
|
+
data: {
|
|
1628
|
+
type: 'object',
|
|
1629
|
+
description: 'Additional data for the decision'
|
|
1630
|
+
}
|
|
1631
|
+
},
|
|
1632
|
+
required: ['reviewIds', 'action']
|
|
1633
|
+
} as const;
|
|
1634
|
+
|
|
1635
|
+
export const $BatchResolveResultDto = {
|
|
1636
|
+
type: 'object',
|
|
1637
|
+
properties: {
|
|
1638
|
+
successCount: {
|
|
1639
|
+
type: 'number',
|
|
1640
|
+
description: 'Number of successfully resolved items'
|
|
1641
|
+
},
|
|
1642
|
+
failedCount: {
|
|
1643
|
+
type: 'number',
|
|
1644
|
+
description: 'Number of failed items'
|
|
1645
|
+
},
|
|
1646
|
+
results: {
|
|
1647
|
+
description: 'Details for each item',
|
|
1648
|
+
type: 'array',
|
|
1649
|
+
items: {
|
|
1650
|
+
type: 'string'
|
|
1651
|
+
}
|
|
1652
|
+
}
|
|
1653
|
+
},
|
|
1654
|
+
required: ['successCount', 'failedCount', 'results']
|
|
1655
|
+
} as const;
|
|
1656
|
+
|
|
1657
|
+
export const $CreatePayeeDto = {
|
|
1658
|
+
type: 'object',
|
|
1659
|
+
properties: {
|
|
1660
|
+
payee: {
|
|
1661
|
+
type: 'string',
|
|
1662
|
+
description:
|
|
1663
|
+
"User's original payee name (e.g., 'Starbucks', 'McDonald'). This is the raw payee string as entered by the user.",
|
|
1664
|
+
example: 'Starbucks',
|
|
1665
|
+
maxLength: 200
|
|
1666
|
+
},
|
|
1667
|
+
payeeProfileId: {
|
|
1668
|
+
type: 'string',
|
|
1669
|
+
description:
|
|
1670
|
+
'Optional reference to global PayeeProfile for standardized data (merchant info, i18n keys, categories)',
|
|
1671
|
+
example: 'uuid-123',
|
|
1672
|
+
format: 'uuid'
|
|
1673
|
+
},
|
|
1674
|
+
customCategory: {
|
|
1675
|
+
type: 'string',
|
|
1676
|
+
description:
|
|
1677
|
+
"User's custom category for this payee (overrides PayeeProfile category)",
|
|
1678
|
+
example: 'Dining:Coffee',
|
|
1679
|
+
maxLength: 100
|
|
1680
|
+
},
|
|
1681
|
+
customTags: {
|
|
1682
|
+
description:
|
|
1683
|
+
"User's custom tags for this payee (e.g., ['favorite', 'work_meal'])",
|
|
1684
|
+
example: ['favorite', 'work_meal'],
|
|
1685
|
+
type: 'array',
|
|
1686
|
+
items: {
|
|
1687
|
+
type: 'string'
|
|
1688
|
+
}
|
|
1689
|
+
},
|
|
1690
|
+
meta: {
|
|
1691
|
+
type: 'object',
|
|
1692
|
+
description:
|
|
1693
|
+
'Metadata for extended information (location, notes, contact info, etc.)',
|
|
1694
|
+
example: {
|
|
1695
|
+
location: 'Zhongguancun',
|
|
1696
|
+
note: 'Near subway station',
|
|
1697
|
+
favorite: true
|
|
1698
|
+
}
|
|
1699
|
+
}
|
|
1700
|
+
},
|
|
1701
|
+
required: ['payee']
|
|
1702
|
+
} as const;
|
|
1703
|
+
|
|
1704
|
+
export const $PayeeResponseDto = {
|
|
1705
|
+
type: 'object',
|
|
1706
|
+
properties: {
|
|
1707
|
+
id: {
|
|
1708
|
+
type: 'string',
|
|
1709
|
+
description: 'Unique identifier (UUID)',
|
|
1710
|
+
example: 'uuid-123-456'
|
|
1711
|
+
},
|
|
1712
|
+
userId: {
|
|
1713
|
+
type: 'string',
|
|
1714
|
+
description: 'User ID (owner of this payee mapping)',
|
|
1715
|
+
example: 'user-123'
|
|
1716
|
+
},
|
|
1717
|
+
payee: {
|
|
1718
|
+
type: 'string',
|
|
1719
|
+
description: "User's original payee name (e.g., 'Starbucks', 'McDonald')",
|
|
1720
|
+
example: 'Starbucks'
|
|
1721
|
+
},
|
|
1722
|
+
payeeProfileId: {
|
|
1723
|
+
type: 'string',
|
|
1724
|
+
description:
|
|
1725
|
+
'Reference to global PayeeProfile (merchant info, i18n keys, categories)',
|
|
1726
|
+
example: 'uuid-789',
|
|
1727
|
+
nullable: true
|
|
1728
|
+
},
|
|
1729
|
+
customCategory: {
|
|
1730
|
+
type: 'string',
|
|
1731
|
+
description:
|
|
1732
|
+
"User's custom category (overrides PayeeProfile category if set)",
|
|
1733
|
+
example: 'Dining:Coffee',
|
|
1734
|
+
nullable: true
|
|
1735
|
+
},
|
|
1736
|
+
customTags: {
|
|
1737
|
+
description: "User's custom tags (e.g., ['favorite', 'work_meal'])",
|
|
1738
|
+
example: ['favorite', 'work_meal'],
|
|
1739
|
+
type: 'array',
|
|
1740
|
+
items: {
|
|
1741
|
+
type: 'string'
|
|
1742
|
+
}
|
|
1743
|
+
},
|
|
1744
|
+
useCount: {
|
|
1745
|
+
type: 'number',
|
|
1746
|
+
description:
|
|
1747
|
+
'Usage count (number of times this payee was used in transactions)',
|
|
1748
|
+
example: 42
|
|
1749
|
+
},
|
|
1750
|
+
lastUsedAt: {
|
|
1751
|
+
format: 'date-time',
|
|
1752
|
+
type: 'string',
|
|
1753
|
+
description: 'Last used timestamp',
|
|
1754
|
+
example: '2024-11-20T10:00:00Z'
|
|
1755
|
+
},
|
|
1756
|
+
meta: {
|
|
1757
|
+
type: 'object',
|
|
1758
|
+
description: 'Extended metadata (location, notes, contact info, etc.)',
|
|
1759
|
+
example: {
|
|
1760
|
+
location: 'Zhongguancun',
|
|
1761
|
+
note: 'Near subway station',
|
|
1762
|
+
favorite: true
|
|
1763
|
+
}
|
|
1764
|
+
},
|
|
1765
|
+
isActive: {
|
|
1766
|
+
type: 'boolean',
|
|
1767
|
+
description: 'Active status (inactive payees hidden from autocomplete)',
|
|
1768
|
+
example: true
|
|
1769
|
+
},
|
|
1770
|
+
createdAt: {
|
|
1771
|
+
format: 'date-time',
|
|
1772
|
+
type: 'string',
|
|
1773
|
+
description: 'Creation timestamp (first time this payee was used)',
|
|
1774
|
+
example: '2024-01-01T10:00:00Z'
|
|
1775
|
+
},
|
|
1776
|
+
updatedAt: {
|
|
1777
|
+
format: 'date-time',
|
|
1778
|
+
type: 'string',
|
|
1779
|
+
description: 'Last update timestamp',
|
|
1780
|
+
example: '2024-11-20T10:00:00Z'
|
|
1781
|
+
}
|
|
1782
|
+
},
|
|
1783
|
+
required: [
|
|
1784
|
+
'id',
|
|
1785
|
+
'userId',
|
|
1786
|
+
'payee',
|
|
1787
|
+
'customTags',
|
|
1788
|
+
'useCount',
|
|
1789
|
+
'lastUsedAt',
|
|
1790
|
+
'meta',
|
|
1791
|
+
'isActive',
|
|
1792
|
+
'createdAt',
|
|
1793
|
+
'updatedAt'
|
|
1794
|
+
]
|
|
1795
|
+
} as const;
|
|
1796
|
+
|
|
1797
|
+
export const $PayeeListResponseDto = {
|
|
1798
|
+
type: 'object',
|
|
1799
|
+
properties: {
|
|
1800
|
+
items: {
|
|
1801
|
+
description: 'List of payees',
|
|
1802
|
+
type: 'array',
|
|
1803
|
+
items: {
|
|
1804
|
+
$ref: '#/components/schemas/PayeeResponseDto'
|
|
1805
|
+
}
|
|
1806
|
+
},
|
|
1807
|
+
total: {
|
|
1808
|
+
type: 'number',
|
|
1809
|
+
description: 'Total number of payees',
|
|
1810
|
+
example: 42
|
|
1811
|
+
}
|
|
1812
|
+
},
|
|
1813
|
+
required: ['items', 'total']
|
|
1814
|
+
} as const;
|
|
1815
|
+
|
|
1816
|
+
export const $PayeeAutocompleteResponseDto = {
|
|
1817
|
+
type: 'object',
|
|
1818
|
+
properties: {
|
|
1819
|
+
suggestions: {
|
|
1820
|
+
description: 'List of matching payee names',
|
|
1821
|
+
example: ['Starbucks', 'Starbucks Coffee', 'Starbucks Reserve'],
|
|
1822
|
+
type: 'array',
|
|
1823
|
+
items: {
|
|
1824
|
+
type: 'string'
|
|
1825
|
+
}
|
|
1826
|
+
}
|
|
1827
|
+
},
|
|
1828
|
+
required: ['suggestions']
|
|
1829
|
+
} as const;
|
|
1529
1830
|
|
|
1530
1831
|
export const $PayeeStatsResponseDto = {
|
|
1531
1832
|
type: 'object',
|
|
1532
1833
|
properties: {
|
|
1533
1834
|
payee: {
|
|
1534
1835
|
type: 'string',
|
|
1535
|
-
description: 'Payee name',
|
|
1536
|
-
example: 'Starbucks'
|
|
1836
|
+
description: 'Payee name',
|
|
1837
|
+
example: 'Starbucks'
|
|
1838
|
+
},
|
|
1839
|
+
transactionCount: {
|
|
1840
|
+
type: 'number',
|
|
1841
|
+
description: 'Total transaction count',
|
|
1842
|
+
example: 42
|
|
1843
|
+
},
|
|
1844
|
+
lastUsedAt: {
|
|
1845
|
+
format: 'date-time',
|
|
1846
|
+
type: 'string',
|
|
1847
|
+
description: 'Last used timestamp',
|
|
1848
|
+
example: '2024-11-20T10:00:00Z'
|
|
1849
|
+
}
|
|
1850
|
+
},
|
|
1851
|
+
required: ['payee', 'transactionCount', 'lastUsedAt']
|
|
1852
|
+
} as const;
|
|
1853
|
+
|
|
1854
|
+
export const $UpdatePayeeDto = {
|
|
1855
|
+
type: 'object',
|
|
1856
|
+
properties: {
|
|
1857
|
+
payeeProfileId: {
|
|
1858
|
+
type: 'string',
|
|
1859
|
+
description:
|
|
1860
|
+
'Optional reference to global PayeeProfile for standardized data (merchant info, i18n keys, categories)',
|
|
1861
|
+
example: 'uuid-123',
|
|
1862
|
+
format: 'uuid'
|
|
1863
|
+
},
|
|
1864
|
+
customCategory: {
|
|
1865
|
+
type: 'string',
|
|
1866
|
+
description:
|
|
1867
|
+
"User's custom category for this payee (overrides PayeeProfile category)",
|
|
1868
|
+
example: 'Dining:Coffee',
|
|
1869
|
+
maxLength: 100
|
|
1870
|
+
},
|
|
1871
|
+
customTags: {
|
|
1872
|
+
description:
|
|
1873
|
+
"User's custom tags for this payee (e.g., ['favorite', 'work_meal'])",
|
|
1874
|
+
example: ['favorite', 'work_meal'],
|
|
1875
|
+
type: 'array',
|
|
1876
|
+
items: {
|
|
1877
|
+
type: 'string'
|
|
1878
|
+
}
|
|
1879
|
+
},
|
|
1880
|
+
meta: {
|
|
1881
|
+
type: 'object',
|
|
1882
|
+
description:
|
|
1883
|
+
'Metadata for extended information (location, notes, contact info, etc.). Will merge with existing metadata.',
|
|
1884
|
+
example: {
|
|
1885
|
+
location: 'Zhongguancun',
|
|
1886
|
+
note: 'Updated note',
|
|
1887
|
+
favorite: true
|
|
1888
|
+
}
|
|
1889
|
+
},
|
|
1890
|
+
isActive: {
|
|
1891
|
+
type: 'boolean',
|
|
1892
|
+
description:
|
|
1893
|
+
'Enable or disable this payee. Disabled payees will not appear in autocomplete suggestions.',
|
|
1894
|
+
example: true
|
|
1895
|
+
}
|
|
1896
|
+
}
|
|
1897
|
+
} as const;
|
|
1898
|
+
|
|
1899
|
+
export const $CreatePayeeProfileDto = {
|
|
1900
|
+
type: 'object',
|
|
1901
|
+
properties: {
|
|
1902
|
+
canonical: {
|
|
1903
|
+
type: 'string',
|
|
1904
|
+
description:
|
|
1905
|
+
'Canonical payee name (unique, case-insensitive). This is the primary identifier for the payee.',
|
|
1906
|
+
example: 'Starbucks',
|
|
1907
|
+
maxLength: 200
|
|
1908
|
+
},
|
|
1909
|
+
aliases: {
|
|
1910
|
+
description:
|
|
1911
|
+
'Multi-language aliases for the payee. Used for matching user input in different languages.',
|
|
1912
|
+
example: ['Starbucks Coffee', 'SBUX'],
|
|
1913
|
+
type: 'array',
|
|
1914
|
+
items: {
|
|
1915
|
+
type: 'string'
|
|
1916
|
+
}
|
|
1917
|
+
},
|
|
1918
|
+
i18nKey: {
|
|
1919
|
+
type: 'string',
|
|
1920
|
+
description:
|
|
1921
|
+
'Translation key for i18n integration (XLIFF translation system)',
|
|
1922
|
+
example: 'payee.starbucks',
|
|
1923
|
+
maxLength: 100
|
|
1924
|
+
},
|
|
1925
|
+
category: {
|
|
1926
|
+
type: 'string',
|
|
1927
|
+
description: 'Payee category classification',
|
|
1928
|
+
enum: [
|
|
1929
|
+
'RESTAURANT',
|
|
1930
|
+
'CAFE',
|
|
1931
|
+
'FAST_FOOD',
|
|
1932
|
+
'BAR',
|
|
1933
|
+
'SUPERMARKET',
|
|
1934
|
+
'CONVENIENCE_STORE',
|
|
1935
|
+
'SHOPPING_MALL',
|
|
1936
|
+
'ONLINE_SHOPPING',
|
|
1937
|
+
'TAXI',
|
|
1938
|
+
'RIDE_SHARING',
|
|
1939
|
+
'PUBLIC_TRANSPORT',
|
|
1940
|
+
'PARKING',
|
|
1941
|
+
'GAS_STATION',
|
|
1942
|
+
'UTILITIES',
|
|
1943
|
+
'TELECOM',
|
|
1944
|
+
'STREAMING',
|
|
1945
|
+
'HEALTHCARE',
|
|
1946
|
+
'EDUCATION',
|
|
1947
|
+
'ENTERTAINMENT',
|
|
1948
|
+
'SPORTS',
|
|
1949
|
+
'TRAVEL',
|
|
1950
|
+
'HOTEL',
|
|
1951
|
+
'OTHER'
|
|
1952
|
+
],
|
|
1953
|
+
example: 'CAFE'
|
|
1954
|
+
},
|
|
1955
|
+
subCategory: {
|
|
1956
|
+
type: 'string',
|
|
1957
|
+
description: 'Sub-category for more specific classification',
|
|
1958
|
+
example: 'coffee_chain',
|
|
1959
|
+
maxLength: 100
|
|
1960
|
+
},
|
|
1961
|
+
countries: {
|
|
1962
|
+
description:
|
|
1963
|
+
'Country/region codes where the payee operates (ISO 3166-1 alpha-2)',
|
|
1964
|
+
example: ['CN', 'US', 'JP'],
|
|
1965
|
+
type: 'array',
|
|
1966
|
+
items: {
|
|
1967
|
+
type: 'string'
|
|
1968
|
+
}
|
|
1969
|
+
},
|
|
1970
|
+
primaryCountry: {
|
|
1971
|
+
type: 'string',
|
|
1972
|
+
description: 'Primary operating country (ISO 3166-1 alpha-2)',
|
|
1973
|
+
example: 'US',
|
|
1974
|
+
maxLength: 2
|
|
1975
|
+
},
|
|
1976
|
+
keywords: {
|
|
1977
|
+
description: 'Search keywords for fuzzy matching',
|
|
1978
|
+
example: ['coffee', 'cafe', 'drinks'],
|
|
1979
|
+
type: 'array',
|
|
1980
|
+
items: {
|
|
1981
|
+
type: 'string'
|
|
1982
|
+
}
|
|
1983
|
+
},
|
|
1984
|
+
logoUrl: {
|
|
1985
|
+
type: 'string',
|
|
1986
|
+
description: 'Payee logo URL',
|
|
1987
|
+
example: 'https://example.com/logo.png'
|
|
1537
1988
|
},
|
|
1538
|
-
|
|
1539
|
-
type: '
|
|
1540
|
-
description: '
|
|
1541
|
-
example:
|
|
1989
|
+
website: {
|
|
1990
|
+
type: 'string',
|
|
1991
|
+
description: 'Official website URL',
|
|
1992
|
+
example: 'https://www.starbucks.com'
|
|
1542
1993
|
},
|
|
1543
|
-
|
|
1544
|
-
format: 'date-time',
|
|
1994
|
+
description: {
|
|
1545
1995
|
type: 'string',
|
|
1546
|
-
description: '
|
|
1547
|
-
example: '
|
|
1996
|
+
description: 'Payee description',
|
|
1997
|
+
example: 'Global coffeehouse chain headquartered in Seattle',
|
|
1998
|
+
maxLength: 1000
|
|
1999
|
+
},
|
|
2000
|
+
meta: {
|
|
2001
|
+
type: 'object',
|
|
2002
|
+
description:
|
|
2003
|
+
'Extended metadata (business hours, contact info, additional details)',
|
|
2004
|
+
example: {
|
|
2005
|
+
businessHours: '07:00-22:00',
|
|
2006
|
+
phone: '+1-800-782-7282'
|
|
2007
|
+
}
|
|
2008
|
+
},
|
|
2009
|
+
dataSource: {
|
|
2010
|
+
type: 'string',
|
|
2011
|
+
description: 'Data source for this profile',
|
|
2012
|
+
enum: ['MANUAL', 'IMPORT', 'API', 'CROWDSOURCED'],
|
|
2013
|
+
default: 'MANUAL'
|
|
1548
2014
|
}
|
|
1549
2015
|
},
|
|
1550
|
-
required: ['
|
|
2016
|
+
required: ['canonical', 'category']
|
|
1551
2017
|
} as const;
|
|
1552
2018
|
|
|
1553
2019
|
export const $PayeeProfileResponseDto = {
|
|
@@ -1572,7 +2038,7 @@ export const $PayeeProfileResponseDto = {
|
|
|
1572
2038
|
}
|
|
1573
2039
|
},
|
|
1574
2040
|
i18nKey: {
|
|
1575
|
-
type: '
|
|
2041
|
+
type: 'string',
|
|
1576
2042
|
description: 'Translation key for i18n',
|
|
1577
2043
|
example: 'payee.starbucks',
|
|
1578
2044
|
nullable: true
|
|
@@ -1608,7 +2074,7 @@ export const $PayeeProfileResponseDto = {
|
|
|
1608
2074
|
example: 'CAFE'
|
|
1609
2075
|
},
|
|
1610
2076
|
subCategory: {
|
|
1611
|
-
type: '
|
|
2077
|
+
type: 'string',
|
|
1612
2078
|
description: 'Sub-category',
|
|
1613
2079
|
example: 'coffee_chain',
|
|
1614
2080
|
nullable: true
|
|
@@ -1622,7 +2088,7 @@ export const $PayeeProfileResponseDto = {
|
|
|
1622
2088
|
}
|
|
1623
2089
|
},
|
|
1624
2090
|
primaryCountry: {
|
|
1625
|
-
type: '
|
|
2091
|
+
type: 'string',
|
|
1626
2092
|
description: 'Primary operating country',
|
|
1627
2093
|
example: 'US',
|
|
1628
2094
|
nullable: true
|
|
@@ -1636,19 +2102,19 @@ export const $PayeeProfileResponseDto = {
|
|
|
1636
2102
|
}
|
|
1637
2103
|
},
|
|
1638
2104
|
logoUrl: {
|
|
1639
|
-
type: '
|
|
2105
|
+
type: 'string',
|
|
1640
2106
|
description: 'Logo URL',
|
|
1641
2107
|
example: 'https://example.com/logo.png',
|
|
1642
2108
|
nullable: true
|
|
1643
2109
|
},
|
|
1644
2110
|
website: {
|
|
1645
|
-
type: '
|
|
2111
|
+
type: 'string',
|
|
1646
2112
|
description: 'Official website',
|
|
1647
2113
|
example: 'https://www.starbucks.com',
|
|
1648
2114
|
nullable: true
|
|
1649
2115
|
},
|
|
1650
2116
|
description: {
|
|
1651
|
-
type: '
|
|
2117
|
+
type: 'string',
|
|
1652
2118
|
description: 'Description',
|
|
1653
2119
|
example: 'Global coffeehouse chain',
|
|
1654
2120
|
nullable: true
|
|
@@ -1664,9 +2130,10 @@ export const $PayeeProfileResponseDto = {
|
|
|
1664
2130
|
example: 'MANUAL'
|
|
1665
2131
|
},
|
|
1666
2132
|
verifiedAt: {
|
|
1667
|
-
type: '
|
|
2133
|
+
type: 'string',
|
|
1668
2134
|
description: 'Verification timestamp (null if not verified)',
|
|
1669
2135
|
example: '2025-01-01T00:00:00.000Z',
|
|
2136
|
+
format: 'date-time',
|
|
1670
2137
|
nullable: true
|
|
1671
2138
|
},
|
|
1672
2139
|
isActive: {
|
|
@@ -1721,6 +2188,164 @@ export const $PayeeProfileListResponseDto = {
|
|
|
1721
2188
|
required: ['items', 'total']
|
|
1722
2189
|
} as const;
|
|
1723
2190
|
|
|
2191
|
+
export const $UpdatePayeeProfileDto = {
|
|
2192
|
+
type: 'object',
|
|
2193
|
+
properties: {
|
|
2194
|
+
aliases: {
|
|
2195
|
+
description:
|
|
2196
|
+
'Multi-language aliases for the payee. Used for matching user input in different languages.',
|
|
2197
|
+
example: ['Starbucks Coffee', 'SBUX'],
|
|
2198
|
+
type: 'array',
|
|
2199
|
+
items: {
|
|
2200
|
+
type: 'string'
|
|
2201
|
+
}
|
|
2202
|
+
},
|
|
2203
|
+
i18nKey: {
|
|
2204
|
+
type: 'string',
|
|
2205
|
+
description:
|
|
2206
|
+
'Translation key for i18n integration (XLIFF translation system)',
|
|
2207
|
+
example: 'payee.starbucks',
|
|
2208
|
+
maxLength: 100
|
|
2209
|
+
},
|
|
2210
|
+
category: {
|
|
2211
|
+
type: 'string',
|
|
2212
|
+
description: 'Payee category classification',
|
|
2213
|
+
enum: [
|
|
2214
|
+
'RESTAURANT',
|
|
2215
|
+
'CAFE',
|
|
2216
|
+
'FAST_FOOD',
|
|
2217
|
+
'BAR',
|
|
2218
|
+
'SUPERMARKET',
|
|
2219
|
+
'CONVENIENCE_STORE',
|
|
2220
|
+
'SHOPPING_MALL',
|
|
2221
|
+
'ONLINE_SHOPPING',
|
|
2222
|
+
'TAXI',
|
|
2223
|
+
'RIDE_SHARING',
|
|
2224
|
+
'PUBLIC_TRANSPORT',
|
|
2225
|
+
'PARKING',
|
|
2226
|
+
'GAS_STATION',
|
|
2227
|
+
'UTILITIES',
|
|
2228
|
+
'TELECOM',
|
|
2229
|
+
'STREAMING',
|
|
2230
|
+
'HEALTHCARE',
|
|
2231
|
+
'EDUCATION',
|
|
2232
|
+
'ENTERTAINMENT',
|
|
2233
|
+
'SPORTS',
|
|
2234
|
+
'TRAVEL',
|
|
2235
|
+
'HOTEL',
|
|
2236
|
+
'OTHER'
|
|
2237
|
+
],
|
|
2238
|
+
example: 'CAFE'
|
|
2239
|
+
},
|
|
2240
|
+
subCategory: {
|
|
2241
|
+
type: 'string',
|
|
2242
|
+
description: 'Sub-category for more specific classification',
|
|
2243
|
+
example: 'coffee_chain',
|
|
2244
|
+
maxLength: 100
|
|
2245
|
+
},
|
|
2246
|
+
countries: {
|
|
2247
|
+
description:
|
|
2248
|
+
'Country/region codes where the payee operates (ISO 3166-1 alpha-2)',
|
|
2249
|
+
example: ['CN', 'US', 'JP'],
|
|
2250
|
+
type: 'array',
|
|
2251
|
+
items: {
|
|
2252
|
+
type: 'string'
|
|
2253
|
+
}
|
|
2254
|
+
},
|
|
2255
|
+
primaryCountry: {
|
|
2256
|
+
type: 'string',
|
|
2257
|
+
description: 'Primary operating country (ISO 3166-1 alpha-2)',
|
|
2258
|
+
example: 'US',
|
|
2259
|
+
maxLength: 2
|
|
2260
|
+
},
|
|
2261
|
+
keywords: {
|
|
2262
|
+
description: 'Search keywords for fuzzy matching',
|
|
2263
|
+
example: ['coffee', 'cafe', 'drinks'],
|
|
2264
|
+
type: 'array',
|
|
2265
|
+
items: {
|
|
2266
|
+
type: 'string'
|
|
2267
|
+
}
|
|
2268
|
+
},
|
|
2269
|
+
logoUrl: {
|
|
2270
|
+
type: 'string',
|
|
2271
|
+
description: 'Payee logo URL',
|
|
2272
|
+
example: 'https://example.com/logo.png'
|
|
2273
|
+
},
|
|
2274
|
+
website: {
|
|
2275
|
+
type: 'string',
|
|
2276
|
+
description: 'Official website URL',
|
|
2277
|
+
example: 'https://www.starbucks.com'
|
|
2278
|
+
},
|
|
2279
|
+
description: {
|
|
2280
|
+
type: 'string',
|
|
2281
|
+
description: 'Payee description',
|
|
2282
|
+
example: 'Global coffeehouse chain headquartered in Seattle',
|
|
2283
|
+
maxLength: 1000
|
|
2284
|
+
},
|
|
2285
|
+
meta: {
|
|
2286
|
+
type: 'object',
|
|
2287
|
+
description:
|
|
2288
|
+
'Extended metadata (business hours, contact info, additional details)',
|
|
2289
|
+
example: {
|
|
2290
|
+
businessHours: '07:00-22:00',
|
|
2291
|
+
phone: '+1-800-782-7282'
|
|
2292
|
+
}
|
|
2293
|
+
},
|
|
2294
|
+
dataSource: {
|
|
2295
|
+
type: 'string',
|
|
2296
|
+
description: 'Data source for this profile',
|
|
2297
|
+
enum: ['MANUAL', 'IMPORT', 'API', 'CROWDSOURCED'],
|
|
2298
|
+
default: 'MANUAL'
|
|
2299
|
+
},
|
|
2300
|
+
isActive: {
|
|
2301
|
+
type: 'boolean',
|
|
2302
|
+
description: 'Whether the payee profile is active (soft delete)',
|
|
2303
|
+
example: true
|
|
2304
|
+
},
|
|
2305
|
+
verifiedAt: {
|
|
2306
|
+
type: 'string',
|
|
2307
|
+
description:
|
|
2308
|
+
'Verification timestamp. Set to current time to verify, or null to unverify.',
|
|
2309
|
+
example: '2025-01-01T00:00:00.000Z',
|
|
2310
|
+
format: 'date-time',
|
|
2311
|
+
nullable: true
|
|
2312
|
+
}
|
|
2313
|
+
}
|
|
2314
|
+
} as const;
|
|
2315
|
+
|
|
2316
|
+
export const $CreateCommodityDto = {
|
|
2317
|
+
type: 'object',
|
|
2318
|
+
properties: {
|
|
2319
|
+
symbol: {
|
|
2320
|
+
type: 'string',
|
|
2321
|
+
description:
|
|
2322
|
+
'Commodity symbol (e.g., AAPL, USD, BTC) - corresponds to Beancount currency field',
|
|
2323
|
+
example: 'AAPL',
|
|
2324
|
+
maxLength: 50
|
|
2325
|
+
},
|
|
2326
|
+
date: {
|
|
2327
|
+
type: 'string',
|
|
2328
|
+
description:
|
|
2329
|
+
'Commodity definition date (ISO 8601, required per Beancount spec). Represents when this commodity was first defined in the accounting system.',
|
|
2330
|
+
example: '2024-01-01',
|
|
2331
|
+
format: 'date'
|
|
2332
|
+
},
|
|
2333
|
+
metadata: {
|
|
2334
|
+
type: 'object',
|
|
2335
|
+
description:
|
|
2336
|
+
'Metadata (corresponds to Beancount meta field). Can contain name, assetClass, precision, note, tags, etc.',
|
|
2337
|
+
example: {
|
|
2338
|
+
name: 'Apple Inc.',
|
|
2339
|
+
assetClass: 'stock',
|
|
2340
|
+
precision: 2,
|
|
2341
|
+
note: 'Long-term investment',
|
|
2342
|
+
tags: ['tech', 'dividend']
|
|
2343
|
+
}
|
|
2344
|
+
}
|
|
2345
|
+
},
|
|
2346
|
+
required: ['symbol', 'date']
|
|
2347
|
+
} as const;
|
|
2348
|
+
|
|
1724
2349
|
export const $CommodityResponseDto = {
|
|
1725
2350
|
type: 'object',
|
|
1726
2351
|
properties: {
|
|
@@ -1730,7 +2355,7 @@ export const $CommodityResponseDto = {
|
|
|
1730
2355
|
example: 'uuid-123-456'
|
|
1731
2356
|
},
|
|
1732
2357
|
userId: {
|
|
1733
|
-
type: '
|
|
2358
|
+
type: 'string',
|
|
1734
2359
|
description: 'User ID (owner of the commodity)',
|
|
1735
2360
|
example: 'user-123',
|
|
1736
2361
|
nullable: true
|
|
@@ -1759,13 +2384,6 @@ export const $CommodityResponseDto = {
|
|
|
1759
2384
|
source: 'AUTO_CREATED'
|
|
1760
2385
|
}
|
|
1761
2386
|
},
|
|
1762
|
-
symbolProfileId: {
|
|
1763
|
-
type: 'object',
|
|
1764
|
-
description:
|
|
1765
|
-
'Reference to SymbolProfile (market data integration, SaaS feature)',
|
|
1766
|
-
example: 'uuid-789',
|
|
1767
|
-
nullable: true
|
|
1768
|
-
},
|
|
1769
2387
|
createdAt: {
|
|
1770
2388
|
format: 'date-time',
|
|
1771
2389
|
type: 'string',
|
|
@@ -1792,13 +2410,137 @@ export const $CommodityListResponseDto = {
|
|
|
1792
2410
|
$ref: '#/components/schemas/CommodityResponseDto'
|
|
1793
2411
|
}
|
|
1794
2412
|
},
|
|
1795
|
-
total: {
|
|
1796
|
-
type: 'number',
|
|
1797
|
-
description: 'Total number of commodities',
|
|
1798
|
-
example: 42
|
|
2413
|
+
total: {
|
|
2414
|
+
type: 'number',
|
|
2415
|
+
description: 'Total number of commodities',
|
|
2416
|
+
example: 42
|
|
2417
|
+
}
|
|
2418
|
+
},
|
|
2419
|
+
required: ['items', 'total']
|
|
2420
|
+
} as const;
|
|
2421
|
+
|
|
2422
|
+
export const $UpdateCommodityDto = {
|
|
2423
|
+
type: 'object',
|
|
2424
|
+
properties: {
|
|
2425
|
+
date: {
|
|
2426
|
+
type: 'string',
|
|
2427
|
+
description:
|
|
2428
|
+
'Commodity definition date (ISO 8601). Represents when this commodity was first defined in the accounting system.',
|
|
2429
|
+
example: '2024-01-01',
|
|
2430
|
+
format: 'date'
|
|
2431
|
+
},
|
|
2432
|
+
metadata: {
|
|
2433
|
+
type: 'object',
|
|
2434
|
+
description:
|
|
2435
|
+
'Metadata (corresponds to Beancount meta field). Will merge with existing metadata. Can contain name, assetClass, precision, note, tags, etc.',
|
|
2436
|
+
example: {
|
|
2437
|
+
name: 'Updated Apple Inc.',
|
|
2438
|
+
assetClass: 'equity',
|
|
2439
|
+
precision: 4,
|
|
2440
|
+
note: 'Updated investment strategy',
|
|
2441
|
+
lastReviewed: '2024-11-03'
|
|
2442
|
+
}
|
|
2443
|
+
}
|
|
2444
|
+
}
|
|
2445
|
+
} as const;
|
|
2446
|
+
|
|
2447
|
+
export const $CreateRecurringRuleDto = {
|
|
2448
|
+
type: 'object',
|
|
2449
|
+
properties: {
|
|
2450
|
+
name: {
|
|
2451
|
+
type: 'string',
|
|
2452
|
+
description: 'Rule name (unique per user)',
|
|
2453
|
+
maxLength: 100
|
|
2454
|
+
},
|
|
2455
|
+
icon: {
|
|
2456
|
+
type: 'string',
|
|
2457
|
+
description: 'Icon emoji',
|
|
2458
|
+
maxLength: 10
|
|
2459
|
+
},
|
|
2460
|
+
frequency: {
|
|
2461
|
+
type: 'string',
|
|
2462
|
+
description: 'Recurring frequency',
|
|
2463
|
+
enum: [
|
|
2464
|
+
'WEEKLY',
|
|
2465
|
+
'BIWEEKLY',
|
|
2466
|
+
'MONTHLY',
|
|
2467
|
+
'BIMONTHLY',
|
|
2468
|
+
'QUARTERLY',
|
|
2469
|
+
'YEARLY',
|
|
2470
|
+
'CUSTOM'
|
|
2471
|
+
]
|
|
2472
|
+
},
|
|
2473
|
+
expectedAmount: {
|
|
2474
|
+
type: 'number',
|
|
2475
|
+
description: 'Expected amount (positive number)',
|
|
2476
|
+
minimum: 0
|
|
2477
|
+
},
|
|
2478
|
+
expectedDay: {
|
|
2479
|
+
type: 'number',
|
|
2480
|
+
description: 'Expected day of month (1-31)',
|
|
2481
|
+
minimum: 1,
|
|
2482
|
+
maximum: 31
|
|
2483
|
+
},
|
|
2484
|
+
customIntervalDays: {
|
|
2485
|
+
type: 'number',
|
|
2486
|
+
description: 'Custom interval in days (required for CUSTOM frequency)',
|
|
2487
|
+
minimum: 1
|
|
2488
|
+
},
|
|
2489
|
+
currency: {
|
|
2490
|
+
type: 'string',
|
|
2491
|
+
description: 'Currency code',
|
|
2492
|
+
default: 'CNY',
|
|
2493
|
+
maxLength: 10
|
|
2494
|
+
},
|
|
2495
|
+
matchPayeePattern: {
|
|
2496
|
+
type: 'string',
|
|
2497
|
+
description: 'Payee matching pattern (supports wildcards)',
|
|
2498
|
+
maxLength: 200
|
|
2499
|
+
},
|
|
2500
|
+
matchAmountTolerance: {
|
|
2501
|
+
type: 'number',
|
|
2502
|
+
description: 'Amount tolerance percentage (0-1)',
|
|
2503
|
+
default: 0.075,
|
|
2504
|
+
minimum: 0,
|
|
2505
|
+
maximum: 1
|
|
2506
|
+
},
|
|
2507
|
+
defaultExpenseAccount: {
|
|
2508
|
+
type: 'string',
|
|
2509
|
+
description: 'Default expense account for auto-create',
|
|
2510
|
+
maxLength: 200
|
|
2511
|
+
},
|
|
2512
|
+
defaultPaymentAccount: {
|
|
2513
|
+
type: 'string',
|
|
2514
|
+
description: 'Default payment account for auto-create',
|
|
2515
|
+
maxLength: 200
|
|
2516
|
+
},
|
|
2517
|
+
defaultPayee: {
|
|
2518
|
+
type: 'string',
|
|
2519
|
+
description: 'Default payee for auto-create',
|
|
2520
|
+
maxLength: 200
|
|
2521
|
+
},
|
|
2522
|
+
autoCreate: {
|
|
2523
|
+
type: 'boolean',
|
|
2524
|
+
description: 'Auto-create transaction when expected date arrives',
|
|
2525
|
+
default: false
|
|
2526
|
+
},
|
|
2527
|
+
startDate: {
|
|
2528
|
+
type: 'string',
|
|
2529
|
+
description: 'Rule start date (ISO format)'
|
|
2530
|
+
},
|
|
2531
|
+
endDate: {
|
|
2532
|
+
type: 'string',
|
|
2533
|
+
description: 'Rule end date (ISO format)'
|
|
1799
2534
|
}
|
|
1800
2535
|
},
|
|
1801
|
-
required: [
|
|
2536
|
+
required: [
|
|
2537
|
+
'name',
|
|
2538
|
+
'frequency',
|
|
2539
|
+
'expectedAmount',
|
|
2540
|
+
'currency',
|
|
2541
|
+
'matchAmountTolerance',
|
|
2542
|
+
'autoCreate'
|
|
2543
|
+
]
|
|
1802
2544
|
} as const;
|
|
1803
2545
|
|
|
1804
2546
|
export const $RecurringRuleResponseDto = {
|
|
@@ -1912,6 +2654,37 @@ export const $RecurringRuleResponseDto = {
|
|
|
1912
2654
|
]
|
|
1913
2655
|
} as const;
|
|
1914
2656
|
|
|
2657
|
+
export const $CreateRuleFromTransactionDto = {
|
|
2658
|
+
type: 'object',
|
|
2659
|
+
properties: {
|
|
2660
|
+
frequency: {
|
|
2661
|
+
type: 'string',
|
|
2662
|
+
description: 'Recurring frequency',
|
|
2663
|
+
enum: [
|
|
2664
|
+
'WEEKLY',
|
|
2665
|
+
'BIWEEKLY',
|
|
2666
|
+
'MONTHLY',
|
|
2667
|
+
'BIMONTHLY',
|
|
2668
|
+
'QUARTERLY',
|
|
2669
|
+
'YEARLY',
|
|
2670
|
+
'CUSTOM'
|
|
2671
|
+
],
|
|
2672
|
+
example: 'MONTHLY'
|
|
2673
|
+
},
|
|
2674
|
+
name: {
|
|
2675
|
+
type: 'string',
|
|
2676
|
+
description: 'Optional name override (default: transaction payee)',
|
|
2677
|
+
maxLength: 100
|
|
2678
|
+
},
|
|
2679
|
+
icon: {
|
|
2680
|
+
type: 'string',
|
|
2681
|
+
description: 'Optional icon emoji',
|
|
2682
|
+
maxLength: 10
|
|
2683
|
+
}
|
|
2684
|
+
},
|
|
2685
|
+
required: ['frequency']
|
|
2686
|
+
} as const;
|
|
2687
|
+
|
|
1915
2688
|
export const $RecurringRuleWithStatsResponseDto = {
|
|
1916
2689
|
type: 'object',
|
|
1917
2690
|
properties: {
|
|
@@ -2070,6 +2843,94 @@ export const $RecurringRuleWithStatsResponseDto = {
|
|
|
2070
2843
|
]
|
|
2071
2844
|
} as const;
|
|
2072
2845
|
|
|
2846
|
+
export const $UpdateRecurringRuleDto = {
|
|
2847
|
+
type: 'object',
|
|
2848
|
+
properties: {
|
|
2849
|
+
name: {
|
|
2850
|
+
type: 'string',
|
|
2851
|
+
description: 'Rule name',
|
|
2852
|
+
maxLength: 100
|
|
2853
|
+
},
|
|
2854
|
+
icon: {
|
|
2855
|
+
type: 'string',
|
|
2856
|
+
description: 'Icon emoji',
|
|
2857
|
+
maxLength: 10
|
|
2858
|
+
},
|
|
2859
|
+
frequency: {
|
|
2860
|
+
type: 'string',
|
|
2861
|
+
description: 'Recurring frequency',
|
|
2862
|
+
enum: [
|
|
2863
|
+
'WEEKLY',
|
|
2864
|
+
'BIWEEKLY',
|
|
2865
|
+
'MONTHLY',
|
|
2866
|
+
'BIMONTHLY',
|
|
2867
|
+
'QUARTERLY',
|
|
2868
|
+
'YEARLY',
|
|
2869
|
+
'CUSTOM'
|
|
2870
|
+
]
|
|
2871
|
+
},
|
|
2872
|
+
expectedAmount: {
|
|
2873
|
+
type: 'number',
|
|
2874
|
+
description: 'Expected amount',
|
|
2875
|
+
minimum: 0
|
|
2876
|
+
},
|
|
2877
|
+
expectedDay: {
|
|
2878
|
+
type: 'number',
|
|
2879
|
+
description: 'Expected day of month (1-31)',
|
|
2880
|
+
minimum: 1,
|
|
2881
|
+
maximum: 31
|
|
2882
|
+
},
|
|
2883
|
+
customIntervalDays: {
|
|
2884
|
+
type: 'number',
|
|
2885
|
+
description: 'Custom interval in days',
|
|
2886
|
+
minimum: 1
|
|
2887
|
+
},
|
|
2888
|
+
currency: {
|
|
2889
|
+
type: 'string',
|
|
2890
|
+
description: 'Currency code',
|
|
2891
|
+
maxLength: 10
|
|
2892
|
+
},
|
|
2893
|
+
matchPayeePattern: {
|
|
2894
|
+
type: 'string',
|
|
2895
|
+
description: 'Payee matching pattern',
|
|
2896
|
+
maxLength: 200
|
|
2897
|
+
},
|
|
2898
|
+
matchAmountTolerance: {
|
|
2899
|
+
type: 'number',
|
|
2900
|
+
description: 'Amount tolerance percentage (0-1)',
|
|
2901
|
+
minimum: 0,
|
|
2902
|
+
maximum: 1
|
|
2903
|
+
},
|
|
2904
|
+
defaultExpenseAccount: {
|
|
2905
|
+
type: 'string',
|
|
2906
|
+
description: 'Default expense account',
|
|
2907
|
+
maxLength: 200
|
|
2908
|
+
},
|
|
2909
|
+
defaultPaymentAccount: {
|
|
2910
|
+
type: 'string',
|
|
2911
|
+
description: 'Default payment account',
|
|
2912
|
+
maxLength: 200
|
|
2913
|
+
},
|
|
2914
|
+
defaultPayee: {
|
|
2915
|
+
type: 'string',
|
|
2916
|
+
description: 'Default payee',
|
|
2917
|
+
maxLength: 200
|
|
2918
|
+
},
|
|
2919
|
+
autoCreate: {
|
|
2920
|
+
type: 'boolean',
|
|
2921
|
+
description: 'Auto-create transaction'
|
|
2922
|
+
},
|
|
2923
|
+
isActive: {
|
|
2924
|
+
type: 'boolean',
|
|
2925
|
+
description: 'Rule active status'
|
|
2926
|
+
},
|
|
2927
|
+
endDate: {
|
|
2928
|
+
type: 'string',
|
|
2929
|
+
description: 'Rule end date (ISO format)'
|
|
2930
|
+
}
|
|
2931
|
+
}
|
|
2932
|
+
} as const;
|
|
2933
|
+
|
|
2073
2934
|
export const $ExpectedTransactionRuleDto = {
|
|
2074
2935
|
type: 'object',
|
|
2075
2936
|
properties: {
|
|
@@ -2186,6 +3047,50 @@ export const $ExpectedTransactionListResponseDto = {
|
|
|
2186
3047
|
required: ['items', 'total']
|
|
2187
3048
|
} as const;
|
|
2188
3049
|
|
|
3050
|
+
export const $ConfirmMatchDto = {
|
|
3051
|
+
type: 'object',
|
|
3052
|
+
properties: {
|
|
3053
|
+
transactionId: {
|
|
3054
|
+
type: 'string',
|
|
3055
|
+
description: 'Transaction ID to match with'
|
|
3056
|
+
}
|
|
3057
|
+
},
|
|
3058
|
+
required: ['transactionId']
|
|
3059
|
+
} as const;
|
|
3060
|
+
|
|
3061
|
+
export const $EnterNowDto = {
|
|
3062
|
+
type: 'object',
|
|
3063
|
+
properties: {
|
|
3064
|
+
expenseAccount: {
|
|
3065
|
+
type: 'string',
|
|
3066
|
+
description:
|
|
3067
|
+
'Override expense account (uses rule default if not provided)',
|
|
3068
|
+
maxLength: 200
|
|
3069
|
+
},
|
|
3070
|
+
paymentAccount: {
|
|
3071
|
+
type: 'string',
|
|
3072
|
+
description:
|
|
3073
|
+
'Override payment account (uses rule default if not provided)',
|
|
3074
|
+
maxLength: 200
|
|
3075
|
+
},
|
|
3076
|
+
amount: {
|
|
3077
|
+
type: 'number',
|
|
3078
|
+
description: 'Override amount (uses expected amount if not provided)',
|
|
3079
|
+
minimum: 0
|
|
3080
|
+
},
|
|
3081
|
+
payee: {
|
|
3082
|
+
type: 'string',
|
|
3083
|
+
description: 'Override payee (uses rule default if not provided)',
|
|
3084
|
+
maxLength: 200
|
|
3085
|
+
},
|
|
3086
|
+
narration: {
|
|
3087
|
+
type: 'string',
|
|
3088
|
+
description: 'Optional narration',
|
|
3089
|
+
maxLength: 500
|
|
3090
|
+
}
|
|
3091
|
+
}
|
|
3092
|
+
} as const;
|
|
3093
|
+
|
|
2189
3094
|
export const $ForecastItemDto = {
|
|
2190
3095
|
type: 'object',
|
|
2191
3096
|
properties: {
|
|
@@ -2210,7 +3115,7 @@ export const $ForecastItemDto = {
|
|
|
2210
3115
|
example: '2024-04-01'
|
|
2211
3116
|
},
|
|
2212
3117
|
icon: {
|
|
2213
|
-
type: '
|
|
3118
|
+
type: 'string',
|
|
2214
3119
|
description: 'Rule icon emoji',
|
|
2215
3120
|
example: '🏠',
|
|
2216
3121
|
nullable: true
|
|
@@ -2310,6 +3215,107 @@ export const $ForecastResponseDto = {
|
|
|
2310
3215
|
]
|
|
2311
3216
|
} as const;
|
|
2312
3217
|
|
|
3218
|
+
export const $CreateTransactionRuleDto = {
|
|
3219
|
+
type: 'object',
|
|
3220
|
+
properties: {
|
|
3221
|
+
name: {
|
|
3222
|
+
type: 'string',
|
|
3223
|
+
minLength: 1,
|
|
3224
|
+
maxLength: 100
|
|
3225
|
+
},
|
|
3226
|
+
description: {
|
|
3227
|
+
type: 'string',
|
|
3228
|
+
maxLength: 500
|
|
3229
|
+
},
|
|
3230
|
+
narrationKeywords: {
|
|
3231
|
+
items: {
|
|
3232
|
+
type: 'array'
|
|
3233
|
+
},
|
|
3234
|
+
maxItems: 50,
|
|
3235
|
+
type: 'array'
|
|
3236
|
+
},
|
|
3237
|
+
payeeKeywords: {
|
|
3238
|
+
items: {
|
|
3239
|
+
type: 'array'
|
|
3240
|
+
},
|
|
3241
|
+
maxItems: 50,
|
|
3242
|
+
type: 'array'
|
|
3243
|
+
},
|
|
3244
|
+
categoryKeywords: {
|
|
3245
|
+
items: {
|
|
3246
|
+
type: 'array'
|
|
3247
|
+
},
|
|
3248
|
+
maxItems: 50,
|
|
3249
|
+
type: 'array'
|
|
3250
|
+
},
|
|
3251
|
+
methodKeywords: {
|
|
3252
|
+
items: {
|
|
3253
|
+
type: 'array'
|
|
3254
|
+
},
|
|
3255
|
+
maxItems: 50,
|
|
3256
|
+
description: 'Payment method keywords (e.g., HuaBei, YuEBao)',
|
|
3257
|
+
type: 'array'
|
|
3258
|
+
},
|
|
3259
|
+
categoryAccount: {
|
|
3260
|
+
type: 'string',
|
|
3261
|
+
maxLength: 200,
|
|
3262
|
+
description:
|
|
3263
|
+
'Destination account for expenses/income (e.g., Expenses:Food:Coffee)'
|
|
3264
|
+
},
|
|
3265
|
+
matchLogic: {
|
|
3266
|
+
type: 'string',
|
|
3267
|
+
enum: ['OR', 'AND'],
|
|
3268
|
+
default: 'OR'
|
|
3269
|
+
},
|
|
3270
|
+
amountMin: {
|
|
3271
|
+
type: 'number',
|
|
3272
|
+
minimum: 0,
|
|
3273
|
+
description: 'Minimum transaction amount (inclusive)'
|
|
3274
|
+
},
|
|
3275
|
+
amountMax: {
|
|
3276
|
+
type: 'number',
|
|
3277
|
+
minimum: 0,
|
|
3278
|
+
description: 'Maximum transaction amount (inclusive)'
|
|
3279
|
+
},
|
|
3280
|
+
priority: {
|
|
3281
|
+
type: 'number',
|
|
3282
|
+
default: 50,
|
|
3283
|
+
minimum: 0,
|
|
3284
|
+
maximum: 1000
|
|
3285
|
+
},
|
|
3286
|
+
additionalTags: {
|
|
3287
|
+
items: {
|
|
3288
|
+
type: 'array'
|
|
3289
|
+
},
|
|
3290
|
+
maxItems: 20,
|
|
3291
|
+
type: 'array'
|
|
3292
|
+
},
|
|
3293
|
+
additionalMetadata: {
|
|
3294
|
+
type: 'object'
|
|
3295
|
+
},
|
|
3296
|
+
upsertByPayee: {
|
|
3297
|
+
type: 'boolean',
|
|
3298
|
+
description:
|
|
3299
|
+
'If true, update existing rule with matching payeeKeywords[0] instead of creating new rule'
|
|
3300
|
+
}
|
|
3301
|
+
},
|
|
3302
|
+
required: ['name', 'matchLogic', 'priority']
|
|
3303
|
+
} as const;
|
|
3304
|
+
|
|
3305
|
+
export const $AmountRangeDto = {
|
|
3306
|
+
type: 'object',
|
|
3307
|
+
properties: {
|
|
3308
|
+
min: {
|
|
3309
|
+
type: 'number',
|
|
3310
|
+
description: 'Minimum amount'
|
|
3311
|
+
},
|
|
3312
|
+
max: {
|
|
3313
|
+
type: 'number',
|
|
3314
|
+
description: 'Maximum amount'
|
|
3315
|
+
}
|
|
3316
|
+
}
|
|
3317
|
+
} as const;
|
|
3318
|
+
|
|
2313
3319
|
export const $TransactionRuleResponseDto = {
|
|
2314
3320
|
type: 'object',
|
|
2315
3321
|
properties: {
|
|
@@ -2364,12 +3370,12 @@ export const $TransactionRuleResponseDto = {
|
|
|
2364
3370
|
example: 'OR'
|
|
2365
3371
|
},
|
|
2366
3372
|
amountRange: {
|
|
2367
|
-
type: 'object',
|
|
2368
3373
|
description: 'Amount range for matching',
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
3374
|
+
allOf: [
|
|
3375
|
+
{
|
|
3376
|
+
$ref: '#/components/schemas/AmountRangeDto'
|
|
3377
|
+
}
|
|
3378
|
+
]
|
|
2373
3379
|
},
|
|
2374
3380
|
priority: {
|
|
2375
3381
|
type: 'number',
|
|
@@ -2384,6 +3390,7 @@ export const $TransactionRuleResponseDto = {
|
|
|
2384
3390
|
type: 'string',
|
|
2385
3391
|
description: 'Learning source: NLP, REVIEW_CENTER, or null for manual',
|
|
2386
3392
|
enum: ['NLP', 'REVIEW_CENTER'],
|
|
3393
|
+
nullable: true,
|
|
2387
3394
|
example: 'REVIEW_CENTER'
|
|
2388
3395
|
},
|
|
2389
3396
|
autoApplyEnabled: {
|
|
@@ -2405,7 +3412,9 @@ export const $TransactionRuleResponseDto = {
|
|
|
2405
3412
|
additionalMetadata: {
|
|
2406
3413
|
type: 'object',
|
|
2407
3414
|
description: 'Additional metadata',
|
|
2408
|
-
|
|
3415
|
+
additionalProperties: {
|
|
3416
|
+
type: 'string'
|
|
3417
|
+
}
|
|
2409
3418
|
},
|
|
2410
3419
|
createdAt: {
|
|
2411
3420
|
format: 'date-time',
|
|
@@ -2578,6 +3587,64 @@ export const $ValidateRuleResponseDto = {
|
|
|
2578
3587
|
required: ['valid', 'errors', 'warnings']
|
|
2579
3588
|
} as const;
|
|
2580
3589
|
|
|
3590
|
+
export const $BulkCreateRulesDto = {
|
|
3591
|
+
type: 'object',
|
|
3592
|
+
properties: {
|
|
3593
|
+
rules: {
|
|
3594
|
+
items: {
|
|
3595
|
+
type: 'array'
|
|
3596
|
+
},
|
|
3597
|
+
description: 'Array of rules to import',
|
|
3598
|
+
type: 'array'
|
|
3599
|
+
},
|
|
3600
|
+
conflictStrategy: {
|
|
3601
|
+
type: 'string',
|
|
3602
|
+
enum: ['replace', 'skip'],
|
|
3603
|
+
default: 'skip',
|
|
3604
|
+
description:
|
|
3605
|
+
'Conflict handling strategy: skip (default) ignores duplicates, replace soft-deletes existing rule'
|
|
3606
|
+
}
|
|
3607
|
+
},
|
|
3608
|
+
required: ['rules', 'conflictStrategy']
|
|
3609
|
+
} as const;
|
|
3610
|
+
|
|
3611
|
+
export const $BulkCreateRulesResponseDto = {
|
|
3612
|
+
type: 'object',
|
|
3613
|
+
properties: {
|
|
3614
|
+
successCount: {
|
|
3615
|
+
type: 'number',
|
|
3616
|
+
description: 'Number of successfully created rules'
|
|
3617
|
+
},
|
|
3618
|
+
failureCount: {
|
|
3619
|
+
type: 'number',
|
|
3620
|
+
description: 'Number of failed rules'
|
|
3621
|
+
},
|
|
3622
|
+
errors: {
|
|
3623
|
+
type: 'array',
|
|
3624
|
+
description: 'Error details for failed rules',
|
|
3625
|
+
items: {
|
|
3626
|
+
type: 'object',
|
|
3627
|
+
properties: {
|
|
3628
|
+
index: {
|
|
3629
|
+
type: 'number'
|
|
3630
|
+
},
|
|
3631
|
+
message: {
|
|
3632
|
+
type: 'string'
|
|
3633
|
+
}
|
|
3634
|
+
}
|
|
3635
|
+
}
|
|
3636
|
+
},
|
|
3637
|
+
createdRuleIds: {
|
|
3638
|
+
description: 'IDs of successfully created rules',
|
|
3639
|
+
type: 'array',
|
|
3640
|
+
items: {
|
|
3641
|
+
type: 'string'
|
|
3642
|
+
}
|
|
3643
|
+
}
|
|
3644
|
+
},
|
|
3645
|
+
required: ['successCount', 'failureCount', 'errors', 'createdRuleIds']
|
|
3646
|
+
} as const;
|
|
3647
|
+
|
|
2581
3648
|
export const $ExportRulesResponseDto = {
|
|
2582
3649
|
type: 'object',
|
|
2583
3650
|
properties: {
|
|
@@ -2658,6 +3725,89 @@ export const $RuleStatisticsResponseDto = {
|
|
|
2658
3725
|
]
|
|
2659
3726
|
} as const;
|
|
2660
3727
|
|
|
3728
|
+
export const $UpdateTransactionRuleDto = {
|
|
3729
|
+
type: 'object',
|
|
3730
|
+
properties: {
|
|
3731
|
+
name: {
|
|
3732
|
+
type: 'string',
|
|
3733
|
+
minLength: 1,
|
|
3734
|
+
maxLength: 100
|
|
3735
|
+
},
|
|
3736
|
+
description: {
|
|
3737
|
+
type: 'string',
|
|
3738
|
+
maxLength: 500
|
|
3739
|
+
},
|
|
3740
|
+
narrationKeywords: {
|
|
3741
|
+
items: {
|
|
3742
|
+
type: 'array'
|
|
3743
|
+
},
|
|
3744
|
+
maxItems: 50,
|
|
3745
|
+
type: 'array'
|
|
3746
|
+
},
|
|
3747
|
+
payeeKeywords: {
|
|
3748
|
+
items: {
|
|
3749
|
+
type: 'array'
|
|
3750
|
+
},
|
|
3751
|
+
maxItems: 50,
|
|
3752
|
+
type: 'array'
|
|
3753
|
+
},
|
|
3754
|
+
categoryKeywords: {
|
|
3755
|
+
items: {
|
|
3756
|
+
type: 'array'
|
|
3757
|
+
},
|
|
3758
|
+
maxItems: 50,
|
|
3759
|
+
type: 'array'
|
|
3760
|
+
},
|
|
3761
|
+
methodKeywords: {
|
|
3762
|
+
items: {
|
|
3763
|
+
type: 'array'
|
|
3764
|
+
},
|
|
3765
|
+
maxItems: 50,
|
|
3766
|
+
description: 'Payment method keywords (e.g., HuaBei, YuEBao)',
|
|
3767
|
+
type: 'array'
|
|
3768
|
+
},
|
|
3769
|
+
categoryAccount: {
|
|
3770
|
+
type: 'string',
|
|
3771
|
+
maxLength: 200,
|
|
3772
|
+
description:
|
|
3773
|
+
'Destination account for expenses/income (e.g., Expenses:Food:Coffee)'
|
|
3774
|
+
},
|
|
3775
|
+
matchLogic: {
|
|
3776
|
+
type: 'string',
|
|
3777
|
+
enum: ['OR', 'AND']
|
|
3778
|
+
},
|
|
3779
|
+
amountMin: {
|
|
3780
|
+
type: 'number',
|
|
3781
|
+
minimum: 0,
|
|
3782
|
+
description: 'Minimum transaction amount (inclusive)'
|
|
3783
|
+
},
|
|
3784
|
+
amountMax: {
|
|
3785
|
+
type: 'number',
|
|
3786
|
+
minimum: 0,
|
|
3787
|
+
description: 'Maximum transaction amount (inclusive)'
|
|
3788
|
+
},
|
|
3789
|
+
priority: {
|
|
3790
|
+
type: 'number',
|
|
3791
|
+
minimum: 0,
|
|
3792
|
+
maximum: 1000
|
|
3793
|
+
},
|
|
3794
|
+
enabled: {
|
|
3795
|
+
type: 'boolean',
|
|
3796
|
+
description: 'Enable or disable the rule'
|
|
3797
|
+
},
|
|
3798
|
+
additionalTags: {
|
|
3799
|
+
items: {
|
|
3800
|
+
type: 'array'
|
|
3801
|
+
},
|
|
3802
|
+
maxItems: 20,
|
|
3803
|
+
type: 'array'
|
|
3804
|
+
},
|
|
3805
|
+
additionalMetadata: {
|
|
3806
|
+
type: 'object'
|
|
3807
|
+
}
|
|
3808
|
+
}
|
|
3809
|
+
} as const;
|
|
3810
|
+
|
|
2661
3811
|
export const $TestRuleDto = {
|
|
2662
3812
|
type: 'object',
|
|
2663
3813
|
properties: {
|
|
@@ -2850,6 +4000,17 @@ export const $UpdateUserSettingDto = {
|
|
|
2850
4000
|
}
|
|
2851
4001
|
} as const;
|
|
2852
4002
|
|
|
4003
|
+
export const $UpdatePropertyDto = {
|
|
4004
|
+
type: 'object',
|
|
4005
|
+
properties: {
|
|
4006
|
+
value: {
|
|
4007
|
+
type: 'string',
|
|
4008
|
+
description: 'Property value'
|
|
4009
|
+
}
|
|
4010
|
+
},
|
|
4011
|
+
required: ['value']
|
|
4012
|
+
} as const;
|
|
4013
|
+
|
|
2853
4014
|
export const $FileImportDto = {
|
|
2854
4015
|
type: 'object',
|
|
2855
4016
|
properties: {
|
|
@@ -3149,7 +4310,8 @@ export const $ImporterConfigDto = {
|
|
|
3149
4310
|
'cmbc-credit',
|
|
3150
4311
|
'icbc',
|
|
3151
4312
|
'icbc-credit',
|
|
3152
|
-
'hsbc-hk'
|
|
4313
|
+
'hsbc-hk-credit',
|
|
4314
|
+
'hsbc-hk-debit'
|
|
3153
4315
|
]
|
|
3154
4316
|
},
|
|
3155
4317
|
version: {
|
|
@@ -3195,6 +4357,181 @@ export const $ImporterConfigDto = {
|
|
|
3195
4357
|
]
|
|
3196
4358
|
} as const;
|
|
3197
4359
|
|
|
4360
|
+
export const $UpdateMapperDefaultsDto = {
|
|
4361
|
+
type: 'object',
|
|
4362
|
+
properties: {
|
|
4363
|
+
sourceAccount: {
|
|
4364
|
+
type: 'string',
|
|
4365
|
+
description: 'Source account for transactions (Beancount format)',
|
|
4366
|
+
example: 'Assets:Alipay:Balance',
|
|
4367
|
+
pattern: '^[A-Z][a-zA-Z0-9-]*:[a-zA-Z0-9-:]+$'
|
|
4368
|
+
},
|
|
4369
|
+
currency: {
|
|
4370
|
+
type: 'string',
|
|
4371
|
+
description: 'Default currency (ISO 4217 code)',
|
|
4372
|
+
example: 'CNY',
|
|
4373
|
+
minLength: 3,
|
|
4374
|
+
maxLength: 3,
|
|
4375
|
+
pattern: '^[A-Z]{3}$'
|
|
4376
|
+
},
|
|
4377
|
+
expenseAccount: {
|
|
4378
|
+
type: 'string',
|
|
4379
|
+
description: 'Default expense account (optional)',
|
|
4380
|
+
example: 'Expenses:Unknown',
|
|
4381
|
+
pattern: '^[A-Z][a-zA-Z0-9-]*:[a-zA-Z0-9-:]+$'
|
|
4382
|
+
},
|
|
4383
|
+
incomeAccount: {
|
|
4384
|
+
type: 'string',
|
|
4385
|
+
description: 'Default income account (optional)',
|
|
4386
|
+
example: 'Income:Unknown',
|
|
4387
|
+
pattern: '^[A-Z][a-zA-Z0-9-]*:[a-zA-Z0-9-:]+$'
|
|
4388
|
+
},
|
|
4389
|
+
methodAccountMapping: {
|
|
4390
|
+
type: 'object',
|
|
4391
|
+
description:
|
|
4392
|
+
'Payment method to source account mapping. Maps payment method keywords to Beancount account paths. Used by Alipay/WeChat importers to determine sourceAccount based on payment method (e.g., HuaBei, CreditCard).',
|
|
4393
|
+
example: {
|
|
4394
|
+
HuaBei: 'Liabilities:Alipay:Huabei',
|
|
4395
|
+
CreditCard: 'Liabilities:CreditCard'
|
|
4396
|
+
}
|
|
4397
|
+
}
|
|
4398
|
+
}
|
|
4399
|
+
} as const;
|
|
4400
|
+
|
|
4401
|
+
export const $UpdateConfigDataDto = {
|
|
4402
|
+
type: 'object',
|
|
4403
|
+
properties: {
|
|
4404
|
+
defaults: {
|
|
4405
|
+
description: 'Mapper defaults configuration',
|
|
4406
|
+
allOf: [
|
|
4407
|
+
{
|
|
4408
|
+
$ref: '#/components/schemas/UpdateMapperDefaultsDto'
|
|
4409
|
+
}
|
|
4410
|
+
]
|
|
4411
|
+
}
|
|
4412
|
+
}
|
|
4413
|
+
} as const;
|
|
4414
|
+
|
|
4415
|
+
export const $UpdateImporterConfigDto = {
|
|
4416
|
+
type: 'object',
|
|
4417
|
+
properties: {
|
|
4418
|
+
data: {
|
|
4419
|
+
description: 'Configuration data (v1 schema)',
|
|
4420
|
+
allOf: [
|
|
4421
|
+
{
|
|
4422
|
+
$ref: '#/components/schemas/UpdateConfigDataDto'
|
|
4423
|
+
}
|
|
4424
|
+
]
|
|
4425
|
+
}
|
|
4426
|
+
}
|
|
4427
|
+
} as const;
|
|
4428
|
+
|
|
4429
|
+
export const $CreatePlatformDto = {
|
|
4430
|
+
type: 'object',
|
|
4431
|
+
properties: {
|
|
4432
|
+
name: {
|
|
4433
|
+
type: 'string',
|
|
4434
|
+
description: 'Platform name',
|
|
4435
|
+
example: 'Binance'
|
|
4436
|
+
},
|
|
4437
|
+
canonical: {
|
|
4438
|
+
type: 'string',
|
|
4439
|
+
description: 'Platform canonical identifier (lowercase, kebab-case)',
|
|
4440
|
+
example: 'binance'
|
|
4441
|
+
},
|
|
4442
|
+
aliases: {
|
|
4443
|
+
description: 'Platform aliases (multi-language names for lookup)',
|
|
4444
|
+
example: ['Binance', 'Binance Exchange', 'BNB'],
|
|
4445
|
+
type: 'array',
|
|
4446
|
+
items: {
|
|
4447
|
+
type: 'string'
|
|
4448
|
+
}
|
|
4449
|
+
},
|
|
4450
|
+
url: {
|
|
4451
|
+
type: 'string',
|
|
4452
|
+
description: 'Platform URL',
|
|
4453
|
+
example: 'https://www.binance.com'
|
|
4454
|
+
},
|
|
4455
|
+
type: {
|
|
4456
|
+
type: 'string',
|
|
4457
|
+
description: 'Platform type',
|
|
4458
|
+
enum: [
|
|
4459
|
+
'BANK',
|
|
4460
|
+
'BROKERAGE',
|
|
4461
|
+
'CRYPTO_EXCHANGE',
|
|
4462
|
+
'PAYMENT',
|
|
4463
|
+
'INVESTMENT',
|
|
4464
|
+
'INSURANCE',
|
|
4465
|
+
'OTHER'
|
|
4466
|
+
],
|
|
4467
|
+
example: 'CRYPTO_EXCHANGE'
|
|
4468
|
+
},
|
|
4469
|
+
logoUrl: {
|
|
4470
|
+
type: 'string',
|
|
4471
|
+
description: 'Platform logo URL',
|
|
4472
|
+
example: 'https://example.com/logos/binance.png'
|
|
4473
|
+
},
|
|
4474
|
+
isActive: {
|
|
4475
|
+
type: 'boolean',
|
|
4476
|
+
description: 'Whether the platform is active',
|
|
4477
|
+
default: true
|
|
4478
|
+
}
|
|
4479
|
+
},
|
|
4480
|
+
required: ['name', 'canonical', 'aliases', 'url', 'type']
|
|
4481
|
+
} as const;
|
|
4482
|
+
|
|
4483
|
+
export const $UpdatePlatformDto = {
|
|
4484
|
+
type: 'object',
|
|
4485
|
+
properties: {
|
|
4486
|
+
name: {
|
|
4487
|
+
type: 'string',
|
|
4488
|
+
description: 'Platform name',
|
|
4489
|
+
example: 'Binance'
|
|
4490
|
+
},
|
|
4491
|
+
canonical: {
|
|
4492
|
+
type: 'string',
|
|
4493
|
+
description: 'Platform canonical identifier (lowercase, kebab-case)',
|
|
4494
|
+
example: 'binance'
|
|
4495
|
+
},
|
|
4496
|
+
aliases: {
|
|
4497
|
+
description: 'Platform aliases (multi-language names for lookup)',
|
|
4498
|
+
example: ['Binance', 'Binance Exchange', 'BNB'],
|
|
4499
|
+
type: 'array',
|
|
4500
|
+
items: {
|
|
4501
|
+
type: 'string'
|
|
4502
|
+
}
|
|
4503
|
+
},
|
|
4504
|
+
url: {
|
|
4505
|
+
type: 'string',
|
|
4506
|
+
description: 'Platform URL',
|
|
4507
|
+
example: 'https://www.binance.com'
|
|
4508
|
+
},
|
|
4509
|
+
type: {
|
|
4510
|
+
type: 'string',
|
|
4511
|
+
description: 'Platform type',
|
|
4512
|
+
enum: [
|
|
4513
|
+
'BANK',
|
|
4514
|
+
'BROKERAGE',
|
|
4515
|
+
'CRYPTO_EXCHANGE',
|
|
4516
|
+
'PAYMENT',
|
|
4517
|
+
'INVESTMENT',
|
|
4518
|
+
'INSURANCE',
|
|
4519
|
+
'OTHER'
|
|
4520
|
+
],
|
|
4521
|
+
example: 'CRYPTO_EXCHANGE'
|
|
4522
|
+
},
|
|
4523
|
+
logoUrl: {
|
|
4524
|
+
type: 'string',
|
|
4525
|
+
description: 'Platform logo URL',
|
|
4526
|
+
example: 'https://example.com/logos/binance.png'
|
|
4527
|
+
},
|
|
4528
|
+
isActive: {
|
|
4529
|
+
type: 'boolean',
|
|
4530
|
+
description: 'Whether the platform is active'
|
|
4531
|
+
}
|
|
4532
|
+
}
|
|
4533
|
+
} as const;
|
|
4534
|
+
|
|
3198
4535
|
export const $ProviderSyncConfigDto = {
|
|
3199
4536
|
type: 'object',
|
|
3200
4537
|
properties: {
|
|
@@ -3329,7 +4666,8 @@ export const $SupportedProvidersResponseDto = {
|
|
|
3329
4666
|
'gocardless',
|
|
3330
4667
|
'simplefin',
|
|
3331
4668
|
'yodlee',
|
|
3332
|
-
'beancount-direct'
|
|
4669
|
+
'beancount-direct',
|
|
4670
|
+
'parsed-bill'
|
|
3333
4671
|
],
|
|
3334
4672
|
type: 'array',
|
|
3335
4673
|
items: {
|
|
@@ -3340,6 +4678,11 @@ export const $SupportedProvidersResponseDto = {
|
|
|
3340
4678
|
required: ['providers']
|
|
3341
4679
|
} as const;
|
|
3342
4680
|
|
|
4681
|
+
export const $ParserTelemetryReportDto = {
|
|
4682
|
+
type: 'object',
|
|
4683
|
+
properties: {}
|
|
4684
|
+
} as const;
|
|
4685
|
+
|
|
3343
4686
|
export const $ProcessNlpDto = {
|
|
3344
4687
|
type: 'object',
|
|
3345
4688
|
properties: {
|
|
@@ -3354,6 +4697,16 @@ export const $ProcessNlpDto = {
|
|
|
3354
4697
|
description:
|
|
3355
4698
|
'Session ID for multi-turn conversation (auto-generated if not provided)',
|
|
3356
4699
|
example: 'session_abc123'
|
|
4700
|
+
},
|
|
4701
|
+
parsedData: {
|
|
4702
|
+
type: 'object',
|
|
4703
|
+
description:
|
|
4704
|
+
'Parsed data from previous NLP response for session recovery. Send back the parsedData received in confirm_payee/confirm responses.',
|
|
4705
|
+
example: {
|
|
4706
|
+
amount: 35,
|
|
4707
|
+
currency: 'CNY',
|
|
4708
|
+
payee: 'Starbucks'
|
|
4709
|
+
}
|
|
3357
4710
|
}
|
|
3358
4711
|
},
|
|
3359
4712
|
required: ['message']
|