@firela/api-types 0.0.0-canary.feeae929 → 0.0.0-canary.ffdf0021

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.
@@ -595,7 +595,7 @@ export type PostingResponseDto = {
595
595
  */
596
596
  account: string;
597
597
  /**
598
- * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned.
598
+ * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned. Carries the raw Beancount sign (credit-normal accounts such as Income post negative — the accounting truth, ADR-0126); renderers must not infer economic semantics from this sign.
599
599
  */
600
600
  units?: string;
601
601
  /**
@@ -830,7 +830,7 @@ export type PostingDetailDto = {
830
830
  */
831
831
  account: string;
832
832
  /**
833
- * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned.
833
+ * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned. Carries the raw Beancount sign (credit-normal accounts such as Income post negative — the accounting truth, ADR-0126); renderers must not infer economic semantics from this sign.
834
834
  */
835
835
  units?: string;
836
836
  /**
@@ -976,6 +976,101 @@ export type flag2 =
976
976
  */
977
977
  export type status2 = 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
978
978
 
979
+ export type TransactionListItemDto = {
980
+ /**
981
+ * Transaction ID
982
+ */
983
+ id: string;
984
+ /**
985
+ * Transaction date
986
+ */
987
+ date: string;
988
+ /**
989
+ * Transaction flag
990
+ */
991
+ flag?:
992
+ | 'CLEARED'
993
+ | 'PENDING'
994
+ | 'PADDING'
995
+ | 'SUMMARIZE'
996
+ | 'TRANSFER'
997
+ | 'CONVERSIONS';
998
+ /**
999
+ * Custom flag (if not using standard flags)
1000
+ */
1001
+ customFlag?: string;
1002
+ /**
1003
+ * Payee name
1004
+ */
1005
+ payee?: string;
1006
+ /**
1007
+ * Transaction narration
1008
+ */
1009
+ narration: string;
1010
+ /**
1011
+ * Transaction tags
1012
+ */
1013
+ tags: Array<string>;
1014
+ /**
1015
+ * Transaction links
1016
+ */
1017
+ links: Array<string>;
1018
+ /**
1019
+ * Transaction metadata
1020
+ */
1021
+ meta?: {
1022
+ [key: string]: unknown;
1023
+ };
1024
+ /**
1025
+ * Transaction status
1026
+ */
1027
+ status: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
1028
+ /**
1029
+ * Source type (free-form string from transaction metadata, e.g. import, api)
1030
+ */
1031
+ sourceType?: string;
1032
+ /**
1033
+ * Source platform (e.g., alipay, wechat)
1034
+ */
1035
+ sourcePlatform?: string;
1036
+ /**
1037
+ * Transaction postings
1038
+ */
1039
+ postings: Array<PostingDetailDto>;
1040
+ /**
1041
+ * Created at timestamp
1042
+ */
1043
+ createdAt: string;
1044
+ /**
1045
+ * Voided at timestamp (if voided)
1046
+ */
1047
+ voidedAt?: string;
1048
+ /**
1049
+ * User ID who voided this transaction
1050
+ */
1051
+ voidedBy?: string;
1052
+ /**
1053
+ * Correction reason (if voided or superseded)
1054
+ */
1055
+ correctionReason?: string;
1056
+ /**
1057
+ * ID of the transaction that supersedes this one (set when status=SUPERSEDED)
1058
+ */
1059
+ supersededBy?: string;
1060
+ /**
1061
+ * ID of the transaction this one corrected/replaced (back-link on the replacement)
1062
+ */
1063
+ originalTxn?: string;
1064
+ /**
1065
+ * Per-leg sign-normalized row amount for the category viewpoint (ADR-0126): each posting on the category account set contributes its unitsNumber with Income-root legs negated and Expenses-root legs identity. Positive under normal booking but NOT clamped (explicit negative expense legs and net-flip refund months stay negative). Omitted outside the category viewpoint.
1066
+ */
1067
+ viewpointAmount?: string;
1068
+ /**
1069
+ * Currency of viewpointAmount. A row spanning multiple currencies takes the largest-magnitude currency group (known simplification, ADR-0126). Omitted outside the category viewpoint.
1070
+ */
1071
+ viewpointCurrency?: string;
1072
+ };
1073
+
979
1074
  export type BalanceByCurrencyDto = {
980
1075
  /**
981
1076
  * ISO 4217 currency code
@@ -1004,7 +1099,7 @@ export type ExchangeRateWarningDto = {
1004
1099
 
1005
1100
  export type TransactionListSummaryDto = {
1006
1101
  /**
1007
- * Partial converted total in base currency (rated currencies only, raw Beancount sign). When warnings is non-empty this excludes currencies missing an FX rate; may be "0.00" if ALL non-base currencies lack a rate. Converted at the dateTo (or current) available rate.
1102
+ * Partial converted total in base currency (rated currencies only). Sign by viewpoint (ADR-0126): account viewpoint keeps the raw Beancount sign (income negative); category viewpoint is per-leg sign-normalized (Income legs negated, Expenses legs identity — positive under normal booking, not clamped). When warnings is non-empty this excludes currencies missing an FX rate; may be "0.00" if ALL non-base currencies lack a rate. Converted at the dateTo (or current) available rate.
1008
1103
  */
1009
1104
  totalAmount: string;
1010
1105
  /**
@@ -1021,11 +1116,32 @@ export type TransactionListSummaryDto = {
1021
1116
  warnings?: Array<ExchangeRateWarningDto>;
1022
1117
  };
1023
1118
 
1119
+ export type TransactionListViewpointDto = {
1120
+ /**
1121
+ * Viewpoint type (only category drill-down carries a viewpoint today)
1122
+ */
1123
+ type: 'category';
1124
+ /**
1125
+ * Flow root the category account set is restricted to
1126
+ */
1127
+ flow: 'income' | 'expense';
1128
+ };
1129
+
1130
+ /**
1131
+ * Viewpoint type (only category drill-down carries a viewpoint today)
1132
+ */
1133
+ export type type2 = 'category';
1134
+
1135
+ /**
1136
+ * Flow root the category account set is restricted to
1137
+ */
1138
+ export type flow = 'income' | 'expense';
1139
+
1024
1140
  export type TransactionListResponseDto = {
1025
1141
  /**
1026
1142
  * List of transactions
1027
1143
  */
1028
- data: Array<TransactionDetailDto>;
1144
+ data: Array<TransactionListItemDto>;
1029
1145
  /**
1030
1146
  * Total count of matching transactions
1031
1147
  */
@@ -1042,6 +1158,10 @@ export type TransactionListResponseDto = {
1042
1158
  * Amount summary for the full filtered set (#514). Present only when the request has a single account OR category viewpoint; omitted for search-only / plain-list / dual-perspective requests.
1043
1159
  */
1044
1160
  summary?: TransactionListSummaryDto;
1161
+ /**
1162
+ * Viewpoint metadata (ADR-0126). Present only for a single category filter (category + flow, no accountId); dual-perspective requests are viewpoint-less (raw signs, no viewpointAmount).
1163
+ */
1164
+ viewpoint?: TransactionListViewpointDto;
1045
1165
  };
1046
1166
 
1047
1167
  export type TagSuggestionDto = {
@@ -1253,7 +1373,7 @@ export type ReviewSummaryDto = {
1253
1373
  /**
1254
1374
  * Review type
1255
1375
  */
1256
- export type type2 =
1376
+ export type type3 =
1257
1377
  | 'DUPLICATE'
1258
1378
  | 'RULE_MATCH'
1259
1379
  | 'PAYEE_MATCH'
@@ -3016,6 +3136,32 @@ export type DeleteOwnUserDto = {
3016
3136
  accessToken: string;
3017
3137
  };
3018
3138
 
3139
+ export type UserSettingsResponseDto = {
3140
+ /**
3141
+ * Base currency (ISO 4217) for net-worth/report aggregation. Independent of region (ADR-0006).
3142
+ */
3143
+ baseCurrency: string | null;
3144
+ };
3145
+
3146
+ export type UserResponseDto = {
3147
+ /**
3148
+ * User ID
3149
+ */
3150
+ id: string;
3151
+ /**
3152
+ * Assigned user role
3153
+ */
3154
+ role: string;
3155
+ /**
3156
+ * Permission strings
3157
+ */
3158
+ permissions: Array<string>;
3159
+ /**
3160
+ * User settings
3161
+ */
3162
+ settings: UserSettingsResponseDto;
3163
+ };
3164
+
3019
3165
  export type SignupDto = {
3020
3166
  /**
3021
3167
  * Cloudflare Turnstile verification token (optional when Turnstile disabled)
@@ -3502,6 +3648,57 @@ export type TestRuleResponseDto = {
3502
3648
  };
3503
3649
  };
3504
3650
 
3651
+ export type CategoryCatalogEntryDto = {
3652
+ /**
3653
+ * Category slug (single source-of-truth)
3654
+ */
3655
+ slug: string;
3656
+ /**
3657
+ * Display scenario group (maps to frontend picker _scenario)
3658
+ */
3659
+ scenario:
3660
+ | 'expense'
3661
+ | 'income'
3662
+ | 'investment'
3663
+ | 'banking'
3664
+ | 'transfer'
3665
+ | 'payment';
3666
+ /**
3667
+ * Lucide icon name
3668
+ */
3669
+ icon: string;
3670
+ /**
3671
+ * Applicable regions ('*' = all, 'cn' = CN-only)
3672
+ */
3673
+ regions: Array<string>;
3674
+ };
3675
+
3676
+ /**
3677
+ * Display scenario group (maps to frontend picker _scenario)
3678
+ */
3679
+ export type scenario =
3680
+ | 'expense'
3681
+ | 'income'
3682
+ | 'investment'
3683
+ | 'banking'
3684
+ | 'transfer'
3685
+ | 'payment';
3686
+
3687
+ export type CategoryCatalogListResponseDto = {
3688
+ /**
3689
+ * Category entries (region-scoped, query-filtered)
3690
+ */
3691
+ items: Array<CategoryCatalogEntryDto>;
3692
+ /**
3693
+ * Total category entries for the region (before query filtering)
3694
+ */
3695
+ total: number;
3696
+ /**
3697
+ * Region code
3698
+ */
3699
+ region: string;
3700
+ };
3701
+
3505
3702
  export type CreateBeanEventDto = {
3506
3703
  /**
3507
3704
  * Life event date (ISO 8601)
@@ -4183,11 +4380,88 @@ export type ParserTelemetryReportDto = unknown;
4183
4380
 
4184
4381
  export type UncoveredFormatMissDto = unknown;
4185
4382
 
4383
+ export type ClientParsedDataDto = {
4384
+ /**
4385
+ * Transaction amount
4386
+ */
4387
+ amount?: number;
4388
+ /**
4389
+ * Currency code
4390
+ */
4391
+ currency?: string;
4392
+ /**
4393
+ * Transaction date (ISO 8601)
4394
+ */
4395
+ date?: string;
4396
+ /**
4397
+ * Payee/merchant name
4398
+ */
4399
+ payee?: string;
4400
+ /**
4401
+ * Transaction narration
4402
+ */
4403
+ narration?: string;
4404
+ /**
4405
+ * Category slug
4406
+ */
4407
+ category?: string;
4408
+ /**
4409
+ * Income type
4410
+ */
4411
+ incomeType?: string;
4412
+ /**
4413
+ * Income source
4414
+ */
4415
+ incomeSource?: string;
4416
+ /**
4417
+ * Security symbol code (e.g., 600519, AAPL)
4418
+ */
4419
+ symbol?: string;
4420
+ /**
4421
+ * Quantity of shares/units
4422
+ */
4423
+ quantity?: number;
4424
+ /**
4425
+ * Unit price per share/unit
4426
+ */
4427
+ price?: number;
4428
+ /**
4429
+ * Investment action
4430
+ */
4431
+ investmentAction?: 'buy' | 'sell';
4432
+ /**
4433
+ * Payment source: asset (default) or liability (credit card)
4434
+ */
4435
+ paymentSource?: 'asset' | 'liability';
4436
+ /**
4437
+ * Liability account hint (CreditCard/Huabei/Baitiao)
4438
+ */
4439
+ liabilityHint?: string;
4440
+ /**
4441
+ * Display-only warning from the prior response; accepted but ignored.
4442
+ */
4443
+ warning?: string;
4444
+ };
4445
+
4446
+ /**
4447
+ * Investment action
4448
+ */
4449
+ export type investmentAction = 'buy' | 'sell';
4450
+
4451
+ /**
4452
+ * Payment source: asset (default) or liability (credit card)
4453
+ */
4454
+ export type paymentSource = 'asset' | 'liability';
4455
+
4186
4456
  export type ProcessNlpDto = {
4187
4457
  /**
4188
- * Natural language text describing a transaction (Chinese)
4458
+ * Natural language text describing a transaction. Optional when `confirm` is true (structured confirm); otherwise required.
4459
+ */
4460
+ message?: string;
4461
+ /**
4462
+ * Structured confirm signal — bypasses NL confirm-word matching when true. Send parsedData field edits alongside. The NL word-list path is the fallback.
4189
4463
  */
4190
- message: string;
4464
+ confirm?: boolean;
4191
4465
  /**
4192
4466
  * Session ID for multi-turn conversation (auto-generated if not provided)
4193
4467
  */
@@ -4195,9 +4469,7 @@ export type ProcessNlpDto = {
4195
4469
  /**
4196
4470
  * Parsed data from previous NLP response for session recovery. Send back the parsedData received in confirm_payee/confirm responses.
4197
4471
  */
4198
- parsedData?: {
4199
- [key: string]: unknown;
4200
- };
4472
+ parsedData?: ClientParsedDataDto;
4201
4473
  /**
4202
4474
  * confirm_rule echo-back: rule id selected from the prior confirm_rule response (matchedRule.id or alternatives[i].ruleId). Applied directly when the session is confirming_rule — no NL re-parse.
4203
4475
  */
@@ -4302,16 +4574,6 @@ export type NlpParsedDataDto = {
4302
4574
  warning?: string;
4303
4575
  };
4304
4576
 
4305
- /**
4306
- * Investment action
4307
- */
4308
- export type investmentAction = 'buy' | 'sell';
4309
-
4310
- /**
4311
- * Payment source: asset (default) or liability (credit card)
4312
- */
4313
- export type paymentSource = 'asset' | 'liability';
4314
-
4315
4577
  export type NlpSourceTransactionDto = {
4316
4578
  /**
4317
4579
  * Transaction date (ISO format)
@@ -4639,7 +4901,12 @@ export type NlpResponseDto = {
4639
4901
  /**
4640
4902
  * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
4641
4903
  */
4642
- assetSubType?: 'transfer' | 'banking' | 'investment';
4904
+ assetSubType?:
4905
+ | 'transfer'
4906
+ | 'banking'
4907
+ | 'investment'
4908
+ | 'lend'
4909
+ | 'lend_collect';
4643
4910
  /**
4644
4911
  * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
4645
4912
  */
@@ -4756,7 +5023,12 @@ export type intent = 'expense' | 'asset' | 'income' | 'liability' | 'equity';
4756
5023
  /**
4757
5024
  * Asset sub-type (only present when intent is "asset"). Determines which asset-related form to render.
4758
5025
  */
4759
- export type assetSubType = 'transfer' | 'banking' | 'investment';
5026
+ export type assetSubType =
5027
+ | 'transfer'
5028
+ | 'banking'
5029
+ | 'investment'
5030
+ | 'lend'
5031
+ | 'lend_collect';
4760
5032
 
4761
5033
  /**
4762
5034
  * Liability sub-type (only present when intent is "liability"). borrow: borrowing money (Liabilities → Assets), repay: repaying debt (Assets → Liabilities).
@@ -4797,13 +5069,21 @@ export type PlatformListItemDto = {
4797
5069
  */
4798
5070
  canonical: string;
4799
5071
  /**
4800
- * Suggested path segment — canonical with first char uppercased (ACC_COMP_NAME_RE)
5072
+ * Suggested path segment — canonical PascalCased per hyphen-part, hyphens preserved (e.g. "Apple-Pay")
4801
5073
  */
4802
5074
  suggestedSegment: string;
4803
5075
  /**
4804
5076
  * Logo URL
4805
5077
  */
4806
5078
  logoUrl: string | null;
5079
+ /**
5080
+ * ISO 3166-1 alpha-2 (UPPERCASE); null = global platform
5081
+ */
5082
+ countryCode: string | null;
5083
+ /**
5084
+ * Region-aware category (institution vocab, e.g. DigitalWallet/Bank). null = no region-aware suggestion; fall back to type.
5085
+ */
5086
+ category: string | null;
4807
5087
  /**
4808
5088
  * Whether user has accounts using this platform
4809
5089
  */
@@ -4813,7 +5093,7 @@ export type PlatformListItemDto = {
4813
5093
  /**
4814
5094
  * Platform type
4815
5095
  */
4816
- export type type3 =
5096
+ export type type4 =
4817
5097
  | 'BANK'
4818
5098
  | 'BROKERAGE'
4819
5099
  | 'CRYPTO_EXCHANGE'
@@ -4847,13 +5127,21 @@ export type PlatformMatchResultDto = {
4847
5127
  | 'INSURANCE'
4848
5128
  | 'OTHER';
4849
5129
  /**
4850
- * Suggested path segment — canonical, already in ACCOUNT_RE format
5130
+ * Suggested path segment — canonical PascalCased per hyphen-part, hyphens preserved (e.g. "Apple-Pay")
4851
5131
  */
4852
5132
  suggestedSegment: string;
4853
5133
  /**
4854
5134
  * Logo URL
4855
5135
  */
4856
5136
  logoUrl: string | null;
5137
+ /**
5138
+ * ISO 3166-1 alpha-2 (UPPERCASE); null = global platform
5139
+ */
5140
+ countryCode: string | null;
5141
+ /**
5142
+ * Region-aware category (institution vocab, e.g. DigitalWallet/Bank). null = no region-aware suggestion; fall back to type.
5143
+ */
5144
+ category: string | null;
4857
5145
  /**
4858
5146
  * How this row matched: 'exact' > 'prefix' > 'substring'
4859
5147
  */
@@ -5637,7 +5925,7 @@ export type HoldingPnlWarningDto = {
5637
5925
  /**
5638
5926
  * Warning type
5639
5927
  */
5640
- export type type4 =
5928
+ export type type5 =
5641
5929
  | 'MISSING_COST_FX_RATE'
5642
5930
  | 'MISSING_MARKET_FX_RATE'
5643
5931
  | 'MISSING_SALE_PRICE'
@@ -5676,6 +5964,123 @@ export type AnonymousLoginResponseDto = {
5676
5964
  authToken: string;
5677
5965
  };
5678
5966
 
5967
+ export type ParserContributionMetaDto = {
5968
+ /**
5969
+ * Institution slug (lowercase kebab-case)
5970
+ */
5971
+ institution: string;
5972
+ region:
5973
+ | 'cn'
5974
+ | 'us'
5975
+ | 'de'
5976
+ | 'fr'
5977
+ | 'gb'
5978
+ | 'hk'
5979
+ | 'jp'
5980
+ | 'sg'
5981
+ | 'au'
5982
+ | 'ca'
5983
+ | 'other';
5984
+ accountType: 'checking' | 'savings' | 'credit' | 'debit' | 'investment';
5985
+ format: 'csv' | 'xlsx' | 'pdf' | 'ofx' | 'qif';
5986
+ institutionDisplayName?: string;
5987
+ encoding?: string;
5988
+ /**
5989
+ * CSV delimiter character: ",", ";", "\t" or "|"
5990
+ */
5991
+ delimiter?: string;
5992
+ /**
5993
+ * Header row count; the client omits the field when it is 1
5994
+ */
5995
+ headerRows?: number;
5996
+ notes?: string;
5997
+ };
5998
+
5999
+ export type region =
6000
+ | 'cn'
6001
+ | 'us'
6002
+ | 'de'
6003
+ | 'fr'
6004
+ | 'gb'
6005
+ | 'hk'
6006
+ | 'jp'
6007
+ | 'sg'
6008
+ | 'au'
6009
+ | 'ca'
6010
+ | 'other';
6011
+
6012
+ export type accountType =
6013
+ | 'checking'
6014
+ | 'savings'
6015
+ | 'credit'
6016
+ | 'debit'
6017
+ | 'investment';
6018
+
6019
+ export type format = 'csv' | 'xlsx' | 'pdf' | 'ofx' | 'qif';
6020
+
6021
+ export type ParserContributionSamplesDto = {
6022
+ /**
6023
+ * Client-sanitized sample rows (key = column name, value = cell)
6024
+ */
6025
+ rows: Array<{
6026
+ [key: string]: unknown;
6027
+ }>;
6028
+ rawHeaders?: Array<string>;
6029
+ };
6030
+
6031
+ export type FieldHintDto = {
6032
+ columnName: string;
6033
+ /**
6034
+ * Date format, e.g. yyyy-MM-dd HH:mm
6035
+ */
6036
+ format?: string;
6037
+ signConvention?: 'negative-expense' | 'positive-expense' | 'separate-columns';
6038
+ creditColumn?: string;
6039
+ debitColumn?: string;
6040
+ };
6041
+
6042
+ export type signConvention =
6043
+ | 'negative-expense'
6044
+ | 'positive-expense'
6045
+ | 'separate-columns';
6046
+
6047
+ export type ParserContributionFieldHintsDto = {
6048
+ date: FieldHintDto;
6049
+ amount: FieldHintDto;
6050
+ description?: FieldHintDto;
6051
+ balance?: FieldHintDto;
6052
+ payee?: FieldHintDto;
6053
+ reference?: FieldHintDto;
6054
+ category?: FieldHintDto;
6055
+ };
6056
+
6057
+ export type ExpectedTransactionDto = {
6058
+ date: string;
6059
+ amount: number;
6060
+ description: string;
6061
+ payee?: string;
6062
+ category?: string;
6063
+ };
6064
+
6065
+ export type ParserContributionExamplesDto = {
6066
+ expectedTransactions: Array<ExpectedTransactionDto>;
6067
+ };
6068
+
6069
+ export type ParserContributionRequestDto = {
6070
+ meta: ParserContributionMetaDto;
6071
+ samples: ParserContributionSamplesDto;
6072
+ fieldHints: ParserContributionFieldHintsDto;
6073
+ /**
6074
+ * Omitted entirely by the client when empty
6075
+ */
6076
+ examples?: ParserContributionExamplesDto;
6077
+ };
6078
+
6079
+ export type ParserContributionRelayResponseDto = {
6080
+ issueUrl: string;
6081
+ issueNumber: number;
6082
+ };
6083
+
5679
6084
  export type SymbolSearchResultDto = {
5680
6085
  symbol: string;
5681
6086
  name?: {
@@ -6291,7 +6696,7 @@ export type TransactionControllerListData = {
6291
6696
  */
6292
6697
  accountId?: string;
6293
6698
  /**
6294
- * Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
6699
+ * Filter by ADR-0075 functional category (Group segment); matches any posting to an account whose derived Group segment equals this value. Must be accompanied by flow (ADR-0126).
6295
6700
  */
6296
6701
  category?: string;
6297
6702
  /**
@@ -6302,6 +6707,10 @@ export type TransactionControllerListData = {
6302
6707
  * Filter by end date (inclusive), format: YYYY-MM-DD
6303
6708
  */
6304
6709
  dateTo?: string;
6710
+ /**
6711
+ * Required when category is present (400 otherwise) and vice versa (ADR-0126). Restricts the category account set to the flow root (income → Income:, expense → Expenses:) and drives the per-leg sign normalization of row viewpointAmount and the summary. OpenAPI cannot express conditional requiredness — the pairing is enforced at runtime.
6712
+ */
6713
+ flow?: 'income' | 'expense';
6305
6714
  /**
6306
6715
  * Number of items per page (1-100, default: 20)
6307
6716
  */
@@ -8421,7 +8830,7 @@ export type UserControllerGetUserData = {
8421
8830
  acceptLanguage: string;
8422
8831
  };
8423
8832
 
8424
- export type UserControllerGetUserResponse = unknown;
8833
+ export type UserControllerGetUserResponse = UserResponseDto;
8425
8834
 
8426
8835
  export type UserControllerSignupUserData = {
8427
8836
  requestBody: SignupDto;
@@ -8893,6 +9302,55 @@ export type TransactionRuleControllerTestData = {
8893
9302
 
8894
9303
  export type TransactionRuleControllerTestResponse = TestRuleResponseDto;
8895
9304
 
9305
+ export type CategoryCatalogControllerListData = {
9306
+ /**
9307
+ * Region code for tenant context
9308
+ */
9309
+ region:
9310
+ | 'ad'
9311
+ | 'ae'
9312
+ | 'af'
9313
+ | 'ag'
9314
+ | 'al'
9315
+ | 'am'
9316
+ | 'ao'
9317
+ | 'au'
9318
+ | 'br'
9319
+ | 'ca'
9320
+ | 'cn'
9321
+ | 'de'
9322
+ | 'dz'
9323
+ | 'es'
9324
+ | 'fr'
9325
+ | 'gb'
9326
+ | 'hk'
9327
+ | 'in'
9328
+ | 'it'
9329
+ | 'jp'
9330
+ | 'kr'
9331
+ | 'nl'
9332
+ | 'sg'
9333
+ | 'tw'
9334
+ | 'us';
9335
+ /**
9336
+ * Filter by routeBearing (entity-router route() consumes it)
9337
+ */
9338
+ routeBearing?: boolean;
9339
+ /**
9340
+ * Filter by scenario
9341
+ */
9342
+ scenario?:
9343
+ | 'expense'
9344
+ | 'income'
9345
+ | 'investment'
9346
+ | 'banking'
9347
+ | 'transfer'
9348
+ | 'payment';
9349
+ };
9350
+
9351
+ export type CategoryCatalogControllerListResponse =
9352
+ CategoryCatalogListResponseDto;
9353
+
8896
9354
  export type EventControllerCreateData = {
8897
9355
  /**
8898
9356
  * Region code for tenant context (decorative for life events)
@@ -10056,6 +10514,13 @@ export type PlatformControllerCreateData = {
10056
10514
 
10057
10515
  export type PlatformControllerCreateResponse = unknown;
10058
10516
 
10517
+ export type PlatformControllerGetPlatformListData = {
10518
+ /**
10519
+ * Region code (ISO 3166-1 alpha-2) that biases within-type-bucket ordering (local-region platforms first). Case-insensitive — stored/compared UPPERCASE ("cn" == "CN").
10520
+ */
10521
+ region?: string;
10522
+ };
10523
+
10059
10524
  export type PlatformControllerGetPlatformListResponse =
10060
10525
  Array<PlatformListItemDto>;
10061
10526
 
@@ -10065,7 +10530,7 @@ export type PlatformControllerMatchPlatformsData = {
10065
10530
  */
10066
10531
  q: string;
10067
10532
  /**
10068
- * Region code for category override lookup
10533
+ * Region code (ISO 3166-1 alpha-2) that biases within-tier ordering (local-region platforms first); also the intended categoryOverrides key. Case-insensitive — stored/compared UPPERCASE ("cn" == "CN").
10069
10534
  */
10070
10535
  region?: string;
10071
10536
  };
@@ -10321,6 +10786,42 @@ export type AuthControllerAccessTokenLoginData = {
10321
10786
 
10322
10787
  export type AuthControllerAccessTokenLoginResponse = AnonymousLoginResponseDto;
10323
10788
 
10789
+ export type ParserContributionControllerCreateData = {
10790
+ /**
10791
+ * Region code for tenant context (routing only; the institution region rides in the payload meta)
10792
+ */
10793
+ region:
10794
+ | 'ad'
10795
+ | 'ae'
10796
+ | 'af'
10797
+ | 'ag'
10798
+ | 'al'
10799
+ | 'am'
10800
+ | 'ao'
10801
+ | 'au'
10802
+ | 'br'
10803
+ | 'ca'
10804
+ | 'cn'
10805
+ | 'de'
10806
+ | 'dz'
10807
+ | 'es'
10808
+ | 'fr'
10809
+ | 'gb'
10810
+ | 'hk'
10811
+ | 'in'
10812
+ | 'it'
10813
+ | 'jp'
10814
+ | 'kr'
10815
+ | 'nl'
10816
+ | 'sg'
10817
+ | 'tw'
10818
+ | 'us';
10819
+ requestBody: ParserContributionRequestDto;
10820
+ };
10821
+
10822
+ export type ParserContributionControllerCreateResponse =
10823
+ ParserContributionRelayResponseDto;
10824
+
10324
10825
  export type CacheControllerFlushCacheResponse = unknown;
10325
10826
 
10326
10827
  export type ExchangeRateControllerGetExchangeRateData = {
@@ -11547,7 +12048,7 @@ export type $OpenApiTs = {
11547
12048
  /**
11548
12049
  * User retrieved successfully
11549
12050
  */
11550
- 200: unknown;
12051
+ 200: UserResponseDto;
11551
12052
  };
11552
12053
  };
11553
12054
  post: {
@@ -11921,6 +12422,17 @@ export type $OpenApiTs = {
11921
12422
  };
11922
12423
  };
11923
12424
  };
12425
+ '/api/v1/{region}/bean/categories': {
12426
+ get: {
12427
+ req: CategoryCatalogControllerListData;
12428
+ res: {
12429
+ /**
12430
+ * Category catalog retrieved successfully
12431
+ */
12432
+ 200: CategoryCatalogListResponseDto;
12433
+ };
12434
+ };
12435
+ };
11924
12436
  '/api/v1/{region}/bean/events': {
11925
12437
  post: {
11926
12438
  req: EventControllerCreateData;
@@ -12460,6 +12972,7 @@ export type $OpenApiTs = {
12460
12972
  };
12461
12973
  '/api/v1/bean/platforms/list': {
12462
12974
  get: {
12975
+ req: PlatformControllerGetPlatformListData;
12463
12976
  res: {
12464
12977
  /**
12465
12978
  * List of platforms with user binding status
@@ -12626,6 +13139,37 @@ export type $OpenApiTs = {
12626
13139
  };
12627
13140
  };
12628
13141
  };
13142
+ '/api/v1/{region}/community/parser-contributions': {
13143
+ post: {
13144
+ req: ParserContributionControllerCreateData;
13145
+ res: {
13146
+ /**
13147
+ * Issue created by the bot
13148
+ */
13149
+ 201: ParserContributionRelayResponseDto;
13150
+ /**
13151
+ * Unauthorized
13152
+ */
13153
+ 401: ApiProblemResponseDto;
13154
+ /**
13155
+ * Validation failed (institution slug, empty samples, row/cell size limits)
13156
+ */
13157
+ 422: ApiProblemResponseDto;
13158
+ /**
13159
+ * Rate limited (5 submissions per user per hour)
13160
+ */
13161
+ 429: ApiProblemResponseDto;
13162
+ /**
13163
+ * Relay not configured on this deployment — clients fall back to the clipboard flow
13164
+ */
13165
+ 501: ApiProblemResponseDto;
13166
+ /**
13167
+ * GitHub bot failure (upstream), safe to retry
13168
+ */
13169
+ 502: ApiProblemResponseDto;
13170
+ };
13171
+ };
13172
+ };
12629
13173
  '/api/v1/cache/flush': {
12630
13174
  post: {
12631
13175
  res: {