@firela/api-types 0.0.0-canary.3d558482 → 0.0.0-canary.3d7ae187

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.
@@ -99,6 +99,14 @@ import type {
99
99
  CommodityControllerGetOrCreateResponse,
100
100
  CommodityControllerBulkCreateData,
101
101
  CommodityControllerBulkCreateResponse,
102
+ ReportingControllerGetPortfolioTrendsData,
103
+ ReportingControllerGetPortfolioTrendsResponse,
104
+ ReportingControllerGetCashFlowTrendsData,
105
+ ReportingControllerGetCashFlowTrendsResponse,
106
+ ReportingControllerGenerateSnapshotData,
107
+ ReportingControllerGenerateSnapshotResponse,
108
+ ReportingControllerBackfillSnapshotsData,
109
+ ReportingControllerBackfillSnapshotsResponse,
102
110
  PriceControllerCreateData,
103
111
  PriceControllerCreateResponse,
104
112
  PriceControllerFindAllData,
@@ -111,6 +119,28 @@ import type {
111
119
  PriceControllerDeleteResponse,
112
120
  PriceControllerBulkCreateData,
113
121
  PriceControllerBulkCreateResponse,
122
+ UserControllerDeleteOwnUserData,
123
+ UserControllerDeleteOwnUserResponse,
124
+ UserControllerGetUserData,
125
+ UserControllerGetUserResponse,
126
+ UserControllerSignupUserData,
127
+ UserControllerSignupUserResponse,
128
+ UserControllerDeleteUserData,
129
+ UserControllerDeleteUserResponse,
130
+ UserControllerGetUserInfoData,
131
+ UserControllerGetUserInfoResponse,
132
+ UserControllerUpdateUserSettingData,
133
+ UserControllerUpdateUserSettingResponse,
134
+ UserControllerGetAllUserSettingsByPageData,
135
+ UserControllerGetAllUserSettingsByPageResponse,
136
+ UserControllerGetAssetLiabilitySummaryResponse,
137
+ PropertyControllerGetAllResponse,
138
+ PropertyControllerGetByKeyData,
139
+ PropertyControllerGetByKeyResponse,
140
+ PropertyControllerUpdateData,
141
+ PropertyControllerUpdateResponse,
142
+ PropertyControllerDeleteData,
143
+ PropertyControllerDeleteResponse,
114
144
  RecurringRuleControllerCreateData,
115
145
  RecurringRuleControllerCreateResponse,
116
146
  RecurringRuleControllerFindAllData,
@@ -163,36 +193,8 @@ import type {
163
193
  TransactionRuleControllerDeleteResponse,
164
194
  TransactionRuleControllerTestData,
165
195
  TransactionRuleControllerTestResponse,
166
- UserControllerDeleteOwnUserData,
167
- UserControllerDeleteOwnUserResponse,
168
- UserControllerGetUserData,
169
- UserControllerGetUserResponse,
170
- UserControllerSignupUserData,
171
- UserControllerSignupUserResponse,
172
- UserControllerDeleteUserData,
173
- UserControllerDeleteUserResponse,
174
- UserControllerGetUserInfoData,
175
- UserControllerGetUserInfoResponse,
176
- UserControllerUpdateUserSettingData,
177
- UserControllerUpdateUserSettingResponse,
178
- UserControllerGetAllUserSettingsByPageData,
179
- UserControllerGetAllUserSettingsByPageResponse,
180
- UserControllerGetAssetLiabilitySummaryResponse,
181
- PropertyControllerGetAllResponse,
182
- PropertyControllerGetByKeyData,
183
- PropertyControllerGetByKeyResponse,
184
- PropertyControllerUpdateData,
185
- PropertyControllerUpdateResponse,
186
- PropertyControllerDeleteData,
187
- PropertyControllerDeleteResponse,
188
- ReportingControllerGetPortfolioTrendsData,
189
- ReportingControllerGetPortfolioTrendsResponse,
190
- ReportingControllerGetCashFlowTrendsData,
191
- ReportingControllerGetCashFlowTrendsResponse,
192
- ReportingControllerGenerateSnapshotData,
193
- ReportingControllerGenerateSnapshotResponse,
194
- ReportingControllerBackfillSnapshotsData,
195
- ReportingControllerBackfillSnapshotsResponse,
196
+ CategoryCatalogControllerListData,
197
+ CategoryCatalogControllerListResponse,
196
198
  EventControllerCreateData,
197
199
  EventControllerCreateResponse,
198
200
  EventControllerFindAllData,
@@ -257,9 +259,12 @@ import type {
257
259
  PlatformControllerFindAllResponse,
258
260
  PlatformControllerCreateData,
259
261
  PlatformControllerCreateResponse,
262
+ PlatformControllerGetPlatformListData,
260
263
  PlatformControllerGetPlatformListResponse,
261
264
  PlatformControllerMatchPlatformsData,
262
265
  PlatformControllerMatchPlatformsResponse,
266
+ PlatformControllerGetPlatformStandardsData,
267
+ PlatformControllerGetPlatformStandardsResponse,
263
268
  PlatformControllerUpdateData,
264
269
  PlatformControllerUpdateResponse,
265
270
  PlatformControllerDeleteData,
@@ -277,6 +282,8 @@ import type {
277
282
  ApiKeysControllerCreateApiKeyResponse,
278
283
  AuthControllerAccessTokenLoginData,
279
284
  AuthControllerAccessTokenLoginResponse,
285
+ ParserContributionControllerCreateData,
286
+ ParserContributionControllerCreateResponse,
280
287
  CacheControllerFlushCacheResponse,
281
288
  ExchangeRateControllerGetExchangeRateData,
282
289
  ExchangeRateControllerGetExchangeRateResponse,
@@ -288,7 +295,11 @@ import type {
288
295
  HealthControllerResetCircuitBreakerData,
289
296
  HealthControllerResetCircuitBreakerResponse,
290
297
  HealthControllerGetMetricsResponse,
291
- InfoControllerGetInfoResponse
298
+ InfoControllerGetInfoResponse,
299
+ SymbolControllerSearchData,
300
+ SymbolControllerSearchResponse,
301
+ SymbolControllerGetQuoteData,
302
+ SymbolControllerGetQuoteResponse
292
303
  } from './types.gen';
293
304
 
294
305
  export class BeanAccountsService {
@@ -326,7 +337,7 @@ export class BeanAccountsService {
326
337
  * @param data.type Filter by account type
327
338
  * @param data.status Filter by status
328
339
  * @param data.isCustom Filter by custom (user-created) accounts only
329
- * @param data.search Search term for account path
340
+ * @param data.search Search term matched against account path and user-set display name (case-insensitive)
330
341
  * @param data.limit Maximum number of results
331
342
  * @param data.offset Number of results to skip
332
343
  * @returns AccountListResponseDto Accounts retrieved successfully
@@ -407,7 +418,7 @@ export class BeanAccountsService {
407
418
 
408
419
  /**
409
420
  * Delete account
410
- * Deletes an account (only if no transactions)
421
+ * Deletes an account (only if no active transactions; voided/superseded residual postings are cleaned up)
411
422
  * @param data The data for the request.
412
423
  * @param data.id Account UUID
413
424
  * @param data.region Region code for tenant context
@@ -426,7 +437,7 @@ export class BeanAccountsService {
426
437
  },
427
438
  errors: {
428
439
  404: 'Account not found',
429
- 409: 'Account has transactions and cannot be deleted'
440
+ 409: 'Account has active transactions and cannot be deleted'
430
441
  }
431
442
  });
432
443
  }
@@ -522,11 +533,11 @@ export class BeanAccountsService {
522
533
  export class BeanAccountStandardsService {
523
534
  /**
524
535
  * Get account templates
525
- * Returns predefined account templates for a region. Supports filtering by account type and search term.
536
+ * Returns predefined account templates for a region. Supports filtering by account type and search term. Not-yet-open region codes return the universal-only catalog (#759).
526
537
  * @param data The data for the request.
527
- * @param data.region Region code (cn, us, de)
538
+ * @param data.region Region code (any ISO alpha-2; not-yet-open codes return the universal-only catalog)
528
539
  * @param data.type Filter by account type
529
- * @param data.search Search term for path or description
540
+ * @param data.search Search term for path, description, aliases, or localized display name
530
541
  * @returns AccountStandardListResponseDto Account templates retrieved successfully
531
542
  * @throws ApiError
532
543
  */
@@ -550,7 +561,7 @@ export class BeanAccountStandardsService {
550
561
  * Get template metadata for an account path
551
562
  * Returns root type for a template path.
552
563
  * @param data The data for the request.
553
- * @param data.region Region code for tenant context
564
+ * @param data.region Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
554
565
  * @param data.path Account path to check
555
566
  * @returns TemplateMetadataResponseDto Template metadata retrieved successfully
556
567
  * @throws ApiError
@@ -572,9 +583,9 @@ export class BeanAccountStandardsService {
572
583
 
573
584
  /**
574
585
  * Get available regions with hierarchy
575
- * Returns supported regions with inheritance metadata
586
+ * Returns the full region catalog (every ISO 3166-1 entry) with an 'open' flag and inheritance metadata (#759)
576
587
  * @param data The data for the request.
577
- * @param data.region Region code for tenant context
588
+ * @param data.region Region code for tenant context. Not-yet-open codes degrade to the universal-only catalog (#759)
578
589
  * @returns RegionsMetadataResponseDto Regions metadata retrieved successfully
579
590
  * @throws ApiError
580
591
  */
@@ -631,10 +642,11 @@ export class BeanTransactionsService {
631
642
  * @param data.offset Number of items to skip (default: 0)
632
643
  * @param data.dateFrom Filter by start date (inclusive), format: YYYY-MM-DD
633
644
  * @param data.dateTo Filter by end date (inclusive), format: YYYY-MM-DD
634
- * @param data.status Filter by transaction status
645
+ * @param data.status Filter by transaction status: single value, comma-separated multi-value (e.g. VOIDED,SUPERSEDED), or ALL to include audit rows. Defaults to ACTIVE-only (ADR-0128; previously unfiltered — breaking change).
635
646
  * @param data.search Search in narration and payee fields (max 200 chars)
636
647
  * @param data.accountId Filter by account ID (transactions with postings to this account)
637
- * @param data.category Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
648
+ * @param data.category 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).
649
+ * @param data.flow 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.
638
650
  * @returns TransactionListResponseDto Transaction list
639
651
  * @throws ApiError
640
652
  */
@@ -655,7 +667,8 @@ export class BeanTransactionsService {
655
667
  status: data.status,
656
668
  search: data.search,
657
669
  accountId: data.accountId,
658
- category: data.category
670
+ category: data.category,
671
+ flow: data.flow
659
672
  },
660
673
  errors: {
661
674
  400: 'Validation failed',
@@ -1368,7 +1381,7 @@ export class AdminPayeeProfilesService {
1368
1381
  * Removes verification status by setting verifiedAt to null.
1369
1382
  * @param data The data for the request.
1370
1383
  * @param data.id Payee profile ID (UUID)
1371
- * @returns PayeeProfileResponseDto Payee profile unverified successfully
1384
+ * @returns void Payee profile unverified successfully
1372
1385
  * @throws ApiError
1373
1386
  */
1374
1387
  public static payeeProfileAdminControllerUnverify(
@@ -1564,6 +1577,163 @@ export class BeanCommoditiesService {
1564
1577
  }
1565
1578
  }
1566
1579
 
1580
+ export class ReportingService {
1581
+ /**
1582
+ * Get portfolio value trends
1583
+ *
1584
+ * Returns time series data of portfolio net worth.
1585
+ *
1586
+ * **Multi-currency Support:**
1587
+ * - `series[].byCurrency` - Currency breakdown for each data point
1588
+ * - `byCurrency` - Separate time series grouped by currency
1589
+ * - `warnings` - Exchange rate warnings if conversion failed
1590
+ *
1591
+ * **Parameters:**
1592
+ * - `period`: Time period (1m, 3m, 6m, 1y)
1593
+ * - `granularity`: Data granularity (day, week, month)
1594
+ *
1595
+ * @param data The data for the request.
1596
+ * @param data.region Region code for tenant context
1597
+ * @param data.period Time period
1598
+ * @param data.granularity Data granularity
1599
+ * @returns PortfolioTrendsResponseDto Trends retrieved successfully
1600
+ * @throws ApiError
1601
+ */
1602
+ public static reportingControllerGetPortfolioTrends(
1603
+ data: ReportingControllerGetPortfolioTrendsData
1604
+ ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
1605
+ return __request(OpenAPI, {
1606
+ method: 'GET',
1607
+ url: '/api/v1/{region}/reporting/portfolio/trends',
1608
+ path: {
1609
+ region: data.region
1610
+ },
1611
+ query: {
1612
+ period: data.period,
1613
+ granularity: data.granularity
1614
+ },
1615
+ errors: {
1616
+ 401: 'User not authenticated'
1617
+ }
1618
+ });
1619
+ }
1620
+
1621
+ /**
1622
+ * Get cash-flow trends
1623
+ *
1624
+ * Monthly income / expense / netSavings over a fixed N-month window
1625
+ * (current month + N−1 prior). Missing months are zero-filled (flow metric).
1626
+ *
1627
+ * **Parameters:**
1628
+ * - `period`: 1m | 3m | 6m | 1y (default 6m)
1629
+ * - `granularity`: accepted for API symmetry; v1 returns month buckets
1630
+ *
1631
+ * @param data The data for the request.
1632
+ * @param data.region Region code for tenant context
1633
+ * @param data.period Time period
1634
+ * @param data.granularity Data granularity (accepted for API symmetry; v1 returns month buckets)
1635
+ * @returns CashFlowTrendsResponseDto Cash-flow trends retrieved successfully
1636
+ * @throws ApiError
1637
+ */
1638
+ public static reportingControllerGetCashFlowTrends(
1639
+ data: ReportingControllerGetCashFlowTrendsData
1640
+ ): CancelablePromise<ReportingControllerGetCashFlowTrendsResponse> {
1641
+ return __request(OpenAPI, {
1642
+ method: 'GET',
1643
+ url: '/api/v1/{region}/reporting/cash-flow/trends',
1644
+ path: {
1645
+ region: data.region
1646
+ },
1647
+ query: {
1648
+ period: data.period,
1649
+ granularity: data.granularity
1650
+ },
1651
+ errors: {
1652
+ 401: 'User not authenticated'
1653
+ }
1654
+ });
1655
+ }
1656
+
1657
+ /**
1658
+ * Generate portfolio snapshot
1659
+ *
1660
+ * Manually generate a portfolio snapshot for a specific date.
1661
+ *
1662
+ * **Multi-currency Support:**
1663
+ * - Fetches balances grouped by currency
1664
+ * - Uses user's baseCurrency setting for conversion
1665
+ * - Stores exchange rates and warnings
1666
+ *
1667
+ * **Use Cases:**
1668
+ * - Testing snapshot generation
1669
+ * - Force regeneration after data correction
1670
+ * - Initial setup for new users
1671
+ *
1672
+ * @param data The data for the request.
1673
+ * @param data.region Region code for tenant context
1674
+ * @param data.requestBody Optional date (defaults to today)
1675
+ * @returns GenerateSnapshotResponse Snapshot generated successfully
1676
+ * @throws ApiError
1677
+ */
1678
+ public static reportingControllerGenerateSnapshot(
1679
+ data: ReportingControllerGenerateSnapshotData
1680
+ ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
1681
+ return __request(OpenAPI, {
1682
+ method: 'POST',
1683
+ url: '/api/v1/{region}/reporting/snapshots/generate',
1684
+ path: {
1685
+ region: data.region
1686
+ },
1687
+ body: data.requestBody,
1688
+ mediaType: 'application/json',
1689
+ errors: {
1690
+ 400: 'Invalid date format',
1691
+ 401: 'User not authenticated'
1692
+ }
1693
+ });
1694
+ }
1695
+
1696
+ /**
1697
+ * Backfill portfolio snapshots
1698
+ *
1699
+ * Generate snapshots for a date range (historical data backfill).
1700
+ *
1701
+ * **Multi-currency Support:**
1702
+ * - Each snapshot includes multi-currency data
1703
+ * - Uses exchange rates available at generation time
1704
+ * - Warnings stored for missing exchange rates
1705
+ *
1706
+ * **Best Practices:**
1707
+ * - Use for initial setup after account configuration
1708
+ * - Run during low-traffic periods for large date ranges
1709
+ * - Existing snapshots are skipped (not regenerated)
1710
+ *
1711
+ * @param data The data for the request.
1712
+ * @param data.region Region code for tenant context
1713
+ * @param data.requestBody
1714
+ * @returns BackfillSnapshotsResponse Backfill completed successfully
1715
+ * @throws ApiError
1716
+ */
1717
+ public static reportingControllerBackfillSnapshots(
1718
+ data: ReportingControllerBackfillSnapshotsData
1719
+ ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
1720
+ return __request(OpenAPI, {
1721
+ method: 'POST',
1722
+ url: '/api/v1/{region}/reporting/snapshots/backfill',
1723
+ path: {
1724
+ region: data.region
1725
+ },
1726
+ body: data.requestBody,
1727
+ mediaType: 'application/json',
1728
+ errors: {
1729
+ 400: 'Invalid date format or range',
1730
+ 401: 'User not authenticated',
1731
+ 409: 'Backfill already in progress for this user'
1732
+ }
1733
+ });
1734
+ }
1735
+ }
1736
+
1567
1737
  export class BeanPricesService {
1568
1738
  /**
1569
1739
  * Create a new price
@@ -1731,1121 +1901,992 @@ export class BeanPricesService {
1731
1901
  }
1732
1902
  }
1733
1903
 
1734
- export class RecurringRulesService {
1904
+ export class UsersService {
1735
1905
  /**
1736
- * Create a new recurring rule
1737
- * Creates a new recurring transaction rule for the authenticated user
1906
+ * Delete own user account
1738
1907
  * @param data The data for the request.
1739
- * @param data.region Region code for tenant context
1740
1908
  * @param data.requestBody
1741
- * @returns RecurringRuleResponseDto Rule created successfully
1909
+ * @returns void User deleted successfully
1742
1910
  * @throws ApiError
1743
1911
  */
1744
- public static recurringRuleControllerCreate(
1745
- data: RecurringRuleControllerCreateData
1746
- ): CancelablePromise<RecurringRuleControllerCreateResponse> {
1912
+ public static userControllerDeleteOwnUser(
1913
+ data: UserControllerDeleteOwnUserData
1914
+ ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
1747
1915
  return __request(OpenAPI, {
1748
- method: 'POST',
1749
- url: '/api/v1/{region}/bean/recurring-rules',
1750
- path: {
1751
- region: data.region
1752
- },
1916
+ method: 'DELETE',
1917
+ url: '/api/v1/users',
1753
1918
  body: data.requestBody,
1754
1919
  mediaType: 'application/json',
1755
1920
  errors: {
1756
- 400: 'Invalid input data (e.g., autoCreate without accounts)',
1757
- 409: 'Rule with same name already exists'
1921
+ 403: 'Invalid access token'
1758
1922
  }
1759
1923
  });
1760
1924
  }
1761
1925
 
1762
1926
  /**
1763
- * List recurring rules
1764
- * Returns all recurring rules for the authenticated user with optional filtering
1927
+ * Get current authenticated user
1765
1928
  * @param data The data for the request.
1766
- * @param data.region Region code for tenant context
1767
- * @param data.isActive Filter by active status
1768
- * @param data.frequency Filter by frequency (WEEKLY, MONTHLY, etc.)
1769
- * @param data.hasAutoCreate Filter by autoCreate enabled
1770
- * @returns RecurringRuleResponseDto Rules retrieved successfully
1929
+ * @param data.acceptLanguage
1930
+ * @returns UserResponseDto User retrieved successfully
1771
1931
  * @throws ApiError
1772
1932
  */
1773
- public static recurringRuleControllerFindAll(
1774
- data: RecurringRuleControllerFindAllData
1775
- ): CancelablePromise<RecurringRuleControllerFindAllResponse> {
1933
+ public static userControllerGetUser(
1934
+ data: UserControllerGetUserData
1935
+ ): CancelablePromise<UserControllerGetUserResponse> {
1776
1936
  return __request(OpenAPI, {
1777
1937
  method: 'GET',
1778
- url: '/api/v1/{region}/bean/recurring-rules',
1779
- path: {
1780
- region: data.region
1781
- },
1782
- query: {
1783
- isActive: data.isActive,
1784
- frequency: data.frequency,
1785
- hasAutoCreate: data.hasAutoCreate
1938
+ url: '/api/v1/users',
1939
+ headers: {
1940
+ 'accept-language': data.acceptLanguage
1786
1941
  }
1787
1942
  });
1788
1943
  }
1789
1944
 
1790
1945
  /**
1791
- * Create recurring rule from transaction
1792
- * Auto-creates a recurring rule using transaction data. User only confirms frequency.
1946
+ * Sign up new user
1947
+ * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
1793
1948
  * @param data The data for the request.
1794
- * @param data.transactionId Source transaction ID
1795
- * @param data.region Region code for tenant context
1796
1949
  * @param data.requestBody
1797
- * @returns RecurringRuleResponseDto Rule created successfully
1950
+ * @returns SignupResponseDto User created successfully
1798
1951
  * @throws ApiError
1799
1952
  */
1800
- public static recurringRuleControllerCreateFromTransaction(
1801
- data: RecurringRuleControllerCreateFromTransactionData
1802
- ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
1953
+ public static userControllerSignupUser(
1954
+ data: UserControllerSignupUserData
1955
+ ): CancelablePromise<UserControllerSignupUserResponse> {
1803
1956
  return __request(OpenAPI, {
1804
1957
  method: 'POST',
1805
- url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
1806
- path: {
1807
- transactionId: data.transactionId,
1808
- region: data.region
1809
- },
1958
+ url: '/api/v1/users',
1810
1959
  body: data.requestBody,
1811
1960
  mediaType: 'application/json',
1812
1961
  errors: {
1813
- 404: 'Transaction not found',
1814
- 409: 'Rule with same name already exists or transaction already linked'
1962
+ 400: 'Invalid Turnstile token (when Turnstile is enabled)',
1963
+ 403: 'User signup is disabled'
1815
1964
  }
1816
1965
  });
1817
1966
  }
1818
1967
 
1819
1968
  /**
1820
- * Get recurring rule by ID
1821
- * Returns a specific recurring rule with its details
1969
+ * Delete user by ID (admin only)
1822
1970
  * @param data The data for the request.
1823
- * @param data.id Rule ID
1824
- * @param data.region Region code for tenant context
1825
- * @returns RecurringRuleResponseDto Rule retrieved successfully
1971
+ * @param data.id User ID to delete
1972
+ * @returns void User deleted successfully
1826
1973
  * @throws ApiError
1827
1974
  */
1828
- public static recurringRuleControllerFindOne(
1829
- data: RecurringRuleControllerFindOneData
1830
- ): CancelablePromise<RecurringRuleControllerFindOneResponse> {
1975
+ public static userControllerDeleteUser(
1976
+ data: UserControllerDeleteUserData
1977
+ ): CancelablePromise<UserControllerDeleteUserResponse> {
1831
1978
  return __request(OpenAPI, {
1832
- method: 'GET',
1833
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1979
+ method: 'DELETE',
1980
+ url: '/api/v1/users/{id}',
1834
1981
  path: {
1835
- id: data.id,
1836
- region: data.region
1982
+ id: data.id
1837
1983
  },
1838
1984
  errors: {
1839
- 404: 'Rule not found'
1985
+ 403: 'Cannot delete own account or insufficient permissions'
1840
1986
  }
1841
1987
  });
1842
1988
  }
1843
1989
 
1844
1990
  /**
1845
- * Update recurring rule
1846
- * Updates an existing recurring rule
1991
+ * Get user info by user ID
1847
1992
  * @param data The data for the request.
1848
- * @param data.id Rule ID
1849
- * @param data.region Region code for tenant context
1850
- * @param data.requestBody
1851
- * @returns RecurringRuleResponseDto Rule updated successfully
1993
+ * @param data.id User ID
1994
+ * @returns unknown User info retrieved successfully
1852
1995
  * @throws ApiError
1853
1996
  */
1854
- public static recurringRuleControllerUpdate(
1855
- data: RecurringRuleControllerUpdateData
1856
- ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
1997
+ public static userControllerGetUserInfo(
1998
+ data: UserControllerGetUserInfoData
1999
+ ): CancelablePromise<UserControllerGetUserInfoResponse> {
1857
2000
  return __request(OpenAPI, {
1858
- method: 'PATCH',
1859
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
2001
+ method: 'GET',
2002
+ url: '/api/v1/users/{id}/info',
1860
2003
  path: {
1861
- id: data.id,
1862
- region: data.region
2004
+ id: data.id
1863
2005
  },
1864
- body: data.requestBody,
1865
- mediaType: 'application/json',
1866
2006
  errors: {
1867
- 400: 'Invalid input data',
1868
- 404: 'Rule not found'
2007
+ 403: 'Cannot access other user info without admin permission'
1869
2008
  }
1870
2009
  });
1871
2010
  }
1872
2011
 
1873
2012
  /**
1874
- * Delete recurring rule
1875
- * Soft deletes a recurring rule (sets isActive to false)
2013
+ * Update user settings
1876
2014
  * @param data The data for the request.
1877
- * @param data.id Rule ID
1878
- * @param data.region Region code for tenant context
1879
- * @returns void Rule deleted successfully
2015
+ * @param data.requestBody
2016
+ * @returns unknown Settings updated successfully
1880
2017
  * @throws ApiError
1881
2018
  */
1882
- public static recurringRuleControllerDelete(
1883
- data: RecurringRuleControllerDeleteData
1884
- ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
2019
+ public static userControllerUpdateUserSetting(
2020
+ data: UserControllerUpdateUserSettingData
2021
+ ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
1885
2022
  return __request(OpenAPI, {
1886
- method: 'DELETE',
1887
- url: '/api/v1/{region}/bean/recurring-rules/{id}',
1888
- path: {
1889
- id: data.id,
1890
- region: data.region
1891
- },
2023
+ method: 'PUT',
2024
+ url: '/api/v1/users/setting',
2025
+ body: data.requestBody,
2026
+ mediaType: 'application/json',
1892
2027
  errors: {
1893
- 404: 'Rule not found'
2028
+ 403: 'Insufficient permissions'
1894
2029
  }
1895
2030
  });
1896
2031
  }
1897
2032
 
1898
2033
  /**
1899
- * Get rule with statistics
1900
- * Returns a rule with pending/overdue counts and next expected date
2034
+ * Get all user settings paginated (admin only)
1901
2035
  * @param data The data for the request.
1902
- * @param data.id Rule ID
1903
- * @param data.region Region code for tenant context
1904
- * @returns RecurringRuleWithStatsResponseDto Rule with stats retrieved successfully
2036
+ * @param data.pageNo Page number
2037
+ * @param data.pageSize Page size
2038
+ * @returns unknown Settings list retrieved successfully
1905
2039
  * @throws ApiError
1906
2040
  */
1907
- public static recurringRuleControllerGetWithStats(
1908
- data: RecurringRuleControllerGetWithStatsData
1909
- ): CancelablePromise<RecurringRuleControllerGetWithStatsResponse> {
2041
+ public static userControllerGetAllUserSettingsByPage(
2042
+ data: UserControllerGetAllUserSettingsByPageData
2043
+ ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
1910
2044
  return __request(OpenAPI, {
1911
2045
  method: 'GET',
1912
- url: '/api/v1/{region}/bean/recurring-rules/{id}/stats',
1913
- path: {
1914
- id: data.id,
1915
- region: data.region
1916
- },
1917
- errors: {
1918
- 404: 'Rule not found'
2046
+ url: '/api/v1/users/settings-by-page',
2047
+ query: {
2048
+ pageNo: data.pageNo,
2049
+ pageSize: data.pageSize
1919
2050
  }
1920
2051
  });
1921
2052
  }
1922
- }
1923
2053
 
1924
- export class ExpectedTransactionsService {
1925
2054
  /**
1926
- * List expected transactions
1927
- * Returns expected transactions for the authenticated user with optional filtering
1928
- * @param data The data for the request.
1929
- * @param data.region Region code for tenant context
1930
- * @param data.ruleId Filter by recurring rule ID
1931
- * @param data.status Filter by status (PENDING, COMPLETED, SKIPPED)
1932
- * @param data.fromDate Filter by date range start (YYYY-MM-DD)
1933
- * @param data.toDate Filter by date range end (YYYY-MM-DD)
1934
- * @returns ExpectedTransactionListResponseDto Expected transactions retrieved successfully
2055
+ * Get asset and liability summary for current user
2056
+ * @returns unknown Summary retrieved successfully
1935
2057
  * @throws ApiError
1936
2058
  */
1937
- public static expectedTransactionControllerFindAll(
1938
- data: ExpectedTransactionControllerFindAllData
1939
- ): CancelablePromise<ExpectedTransactionControllerFindAllResponse> {
2059
+ public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
1940
2060
  return __request(OpenAPI, {
1941
2061
  method: 'GET',
1942
- url: '/api/v1/{region}/bean/expected-transactions',
1943
- path: {
1944
- region: data.region
1945
- },
1946
- query: {
1947
- ruleId: data.ruleId,
1948
- status: data.status,
1949
- fromDate: data.fromDate,
1950
- toDate: data.toDate
1951
- }
2062
+ url: '/api/v1/users/asset-liability-summary'
1952
2063
  });
1953
2064
  }
2065
+ }
1954
2066
 
2067
+ export class PropertiesService {
1955
2068
  /**
1956
- * List overdue expected transactions
1957
- * Returns all overdue expected transactions (PENDING past tolerance)
1958
- * @param data The data for the request.
1959
- * @param data.region Region code for tenant context
1960
- * @returns ExpectedTransactionListResponseDto Overdue transactions retrieved successfully
2069
+ * Get all system properties
2070
+ * @returns unknown Properties retrieved successfully
1961
2071
  * @throws ApiError
1962
2072
  */
1963
- public static expectedTransactionControllerFindOverdue(
1964
- data: ExpectedTransactionControllerFindOverdueData
1965
- ): CancelablePromise<ExpectedTransactionControllerFindOverdueResponse> {
2073
+ public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
1966
2074
  return __request(OpenAPI, {
1967
2075
  method: 'GET',
1968
- url: '/api/v1/{region}/bean/expected-transactions/overdue',
1969
- path: {
1970
- region: data.region
2076
+ url: '/api/v1/admin/properties',
2077
+ errors: {
2078
+ 401: 'Unauthorized',
2079
+ 403: 'Forbidden - insufficient permissions'
1971
2080
  }
1972
2081
  });
1973
2082
  }
1974
2083
 
1975
2084
  /**
1976
- * Get expected transaction by ID
1977
- * Returns a specific expected transaction with rule details
2085
+ * Get property by key
1978
2086
  * @param data The data for the request.
1979
- * @param data.id Expected transaction ID
1980
- * @param data.region Region code for tenant context
1981
- * @returns ExpectedTransactionResponseDto Expected transaction retrieved successfully
2087
+ * @param data.key Property key
2088
+ * @returns unknown Property retrieved successfully
1982
2089
  * @throws ApiError
1983
2090
  */
1984
- public static expectedTransactionControllerFindOne(
1985
- data: ExpectedTransactionControllerFindOneData
1986
- ): CancelablePromise<ExpectedTransactionControllerFindOneResponse> {
2091
+ public static propertyControllerGetByKey(
2092
+ data: PropertyControllerGetByKeyData
2093
+ ): CancelablePromise<PropertyControllerGetByKeyResponse> {
1987
2094
  return __request(OpenAPI, {
1988
2095
  method: 'GET',
1989
- url: '/api/v1/{region}/bean/expected-transactions/{id}',
2096
+ url: '/api/v1/admin/properties/{key}',
1990
2097
  path: {
1991
- id: data.id,
1992
- region: data.region
2098
+ key: data.key
1993
2099
  },
1994
2100
  errors: {
1995
- 404: 'Expected transaction not found'
2101
+ 401: 'Unauthorized',
2102
+ 403: 'Forbidden - insufficient permissions',
2103
+ 404: 'Property not found'
1996
2104
  }
1997
2105
  });
1998
2106
  }
1999
2107
 
2000
2108
  /**
2001
- * Skip expected transaction
2002
- * Marks an expected transaction as skipped (PENDING -> SKIPPED)
2109
+ * Update a system property
2003
2110
  * @param data The data for the request.
2004
- * @param data.id Expected transaction ID
2005
- * @param data.region Region code for tenant context
2006
- * @returns ExpectedTransactionResponseDto Expected transaction skipped successfully
2111
+ * @param data.key Property key
2112
+ * @param data.requestBody
2113
+ * @returns unknown Property updated successfully
2007
2114
  * @throws ApiError
2008
2115
  */
2009
- public static expectedTransactionControllerSkip(
2010
- data: ExpectedTransactionControllerSkipData
2011
- ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
2116
+ public static propertyControllerUpdate(
2117
+ data: PropertyControllerUpdateData
2118
+ ): CancelablePromise<PropertyControllerUpdateResponse> {
2012
2119
  return __request(OpenAPI, {
2013
- method: 'POST',
2014
- url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2120
+ method: 'PUT',
2121
+ url: '/api/v1/admin/properties/{key}',
2015
2122
  path: {
2016
- id: data.id,
2017
- region: data.region
2123
+ key: data.key
2018
2124
  },
2125
+ body: data.requestBody,
2126
+ mediaType: 'application/json',
2019
2127
  errors: {
2020
- 400: 'Cannot skip - not in PENDING status',
2021
- 404: 'Expected transaction not found'
2128
+ 401: 'Unauthorized',
2129
+ 403: 'Forbidden - insufficient permissions'
2022
2130
  }
2023
2131
  });
2024
2132
  }
2025
2133
 
2026
2134
  /**
2027
- * Undo skip
2028
- * Reverses a skip operation (SKIPPED -> PENDING)
2135
+ * Delete a system property
2029
2136
  * @param data The data for the request.
2030
- * @param data.id Expected transaction ID
2031
- * @param data.region Region code for tenant context
2032
- * @returns ExpectedTransactionResponseDto Skip undone successfully
2137
+ * @param data.key Property key
2138
+ * @returns void Property deleted successfully
2033
2139
  * @throws ApiError
2034
2140
  */
2035
- public static expectedTransactionControllerUndoSkip(
2036
- data: ExpectedTransactionControllerUndoSkipData
2037
- ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
2141
+ public static propertyControllerDelete(
2142
+ data: PropertyControllerDeleteData
2143
+ ): CancelablePromise<PropertyControllerDeleteResponse> {
2038
2144
  return __request(OpenAPI, {
2039
2145
  method: 'DELETE',
2040
- url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2146
+ url: '/api/v1/admin/properties/{key}',
2041
2147
  path: {
2042
- id: data.id,
2043
- region: data.region
2148
+ key: data.key
2044
2149
  },
2045
2150
  errors: {
2046
- 400: 'Cannot undo - not in SKIPPED status',
2047
- 404: 'Expected transaction not found'
2151
+ 401: 'Unauthorized',
2152
+ 403: 'Forbidden - insufficient permissions',
2153
+ 404: 'Property not found'
2048
2154
  }
2049
2155
  });
2050
2156
  }
2157
+ }
2051
2158
 
2159
+ export class RecurringRulesService {
2052
2160
  /**
2053
- * Confirm transaction match
2054
- * Manually matches an expected transaction with an actual transaction
2161
+ * Create a new recurring rule
2162
+ * Creates a new recurring transaction rule for the authenticated user
2055
2163
  * @param data The data for the request.
2056
- * @param data.id Expected transaction ID
2057
2164
  * @param data.region Region code for tenant context
2058
2165
  * @param data.requestBody
2059
- * @returns unknown Match confirmed successfully
2166
+ * @returns RecurringRuleResponseDto Rule created successfully
2060
2167
  * @throws ApiError
2061
2168
  */
2062
- public static expectedTransactionControllerConfirmMatch(
2063
- data: ExpectedTransactionControllerConfirmMatchData
2064
- ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
2169
+ public static recurringRuleControllerCreate(
2170
+ data: RecurringRuleControllerCreateData
2171
+ ): CancelablePromise<RecurringRuleControllerCreateResponse> {
2065
2172
  return __request(OpenAPI, {
2066
2173
  method: 'POST',
2067
- url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2174
+ url: '/api/v1/{region}/bean/recurring-rules',
2068
2175
  path: {
2069
- id: data.id,
2070
2176
  region: data.region
2071
2177
  },
2072
2178
  body: data.requestBody,
2073
2179
  mediaType: 'application/json',
2074
2180
  errors: {
2075
- 400: 'Cannot match - not in PENDING status',
2076
- 404: 'Expected or actual transaction not found',
2077
- 409: 'Actual transaction already matched to another rule'
2181
+ 400: 'Invalid input data (e.g., autoCreate without accounts)',
2182
+ 409: 'Rule with same name already exists'
2078
2183
  }
2079
2184
  });
2080
2185
  }
2081
2186
 
2082
2187
  /**
2083
- * Unmatch transaction
2084
- * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
2188
+ * List recurring rules
2189
+ * Returns all recurring rules for the authenticated user with optional filtering
2085
2190
  * @param data The data for the request.
2086
- * @param data.id Expected transaction ID
2087
2191
  * @param data.region Region code for tenant context
2088
- * @returns unknown Match removed successfully
2192
+ * @param data.isActive Filter by active status
2193
+ * @param data.frequency Filter by frequency (WEEKLY, MONTHLY, etc.)
2194
+ * @param data.hasAutoCreate Filter by autoCreate enabled
2195
+ * @returns RecurringRuleResponseDto Rules retrieved successfully
2089
2196
  * @throws ApiError
2090
2197
  */
2091
- public static expectedTransactionControllerUnmatch(
2092
- data: ExpectedTransactionControllerUnmatchData
2093
- ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
2198
+ public static recurringRuleControllerFindAll(
2199
+ data: RecurringRuleControllerFindAllData
2200
+ ): CancelablePromise<RecurringRuleControllerFindAllResponse> {
2094
2201
  return __request(OpenAPI, {
2095
- method: 'DELETE',
2096
- url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2202
+ method: 'GET',
2203
+ url: '/api/v1/{region}/bean/recurring-rules',
2097
2204
  path: {
2098
- id: data.id,
2099
2205
  region: data.region
2100
2206
  },
2101
- errors: {
2102
- 400: 'Cannot unmatch - not in COMPLETED status',
2103
- 404: 'Expected transaction not found'
2207
+ query: {
2208
+ isActive: data.isActive,
2209
+ frequency: data.frequency,
2210
+ hasAutoCreate: data.hasAutoCreate
2104
2211
  }
2105
2212
  });
2106
2213
  }
2107
2214
 
2108
2215
  /**
2109
- * Enter Now
2110
- * Creates an actual transaction for an expected transaction (YNAB-style Enter Now)
2216
+ * Create recurring rule from transaction
2217
+ * Auto-creates a recurring rule using transaction data. User only confirms frequency.
2111
2218
  * @param data The data for the request.
2112
- * @param data.id Expected transaction ID
2219
+ * @param data.transactionId Source transaction ID
2113
2220
  * @param data.region Region code for tenant context
2114
2221
  * @param data.requestBody
2115
- * @returns unknown Transaction created successfully
2222
+ * @returns RecurringRuleResponseDto Rule created successfully
2116
2223
  * @throws ApiError
2117
2224
  */
2118
- public static expectedTransactionControllerEnterNow(
2119
- data: ExpectedTransactionControllerEnterNowData
2120
- ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
2225
+ public static recurringRuleControllerCreateFromTransaction(
2226
+ data: RecurringRuleControllerCreateFromTransactionData
2227
+ ): CancelablePromise<RecurringRuleControllerCreateFromTransactionResponse> {
2121
2228
  return __request(OpenAPI, {
2122
2229
  method: 'POST',
2123
- url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
2230
+ url: '/api/v1/{region}/bean/recurring-rules/from-transaction/{transactionId}',
2124
2231
  path: {
2125
- id: data.id,
2232
+ transactionId: data.transactionId,
2126
2233
  region: data.region
2127
2234
  },
2128
2235
  body: data.requestBody,
2129
2236
  mediaType: 'application/json',
2130
2237
  errors: {
2131
- 400: 'Cannot enter - not in PENDING status or missing accounts',
2132
- 404: 'Expected transaction or accounts not found'
2238
+ 404: 'Transaction not found',
2239
+ 409: 'Rule with same name already exists or transaction already linked'
2133
2240
  }
2134
2241
  });
2135
2242
  }
2136
- }
2137
2243
 
2138
- export class RecurringForecastService {
2139
2244
  /**
2140
- * Get cash flow forecast
2141
- * Returns predicted outflows for the next N months based on active recurring rules
2245
+ * Get recurring rule by ID
2246
+ * Returns a specific recurring rule with its details
2142
2247
  * @param data The data for the request.
2248
+ * @param data.id Rule ID
2143
2249
  * @param data.region Region code for tenant context
2144
- * @param data.months Number of months to forecast (1-12, default 3)
2145
- * @returns ForecastResponseDto Forecast retrieved successfully
2250
+ * @returns RecurringRuleResponseDto Rule retrieved successfully
2146
2251
  * @throws ApiError
2147
2252
  */
2148
- public static forecastControllerGetForecast(
2149
- data: ForecastControllerGetForecastData
2150
- ): CancelablePromise<ForecastControllerGetForecastResponse> {
2253
+ public static recurringRuleControllerFindOne(
2254
+ data: RecurringRuleControllerFindOneData
2255
+ ): CancelablePromise<RecurringRuleControllerFindOneResponse> {
2151
2256
  return __request(OpenAPI, {
2152
2257
  method: 'GET',
2153
- url: '/api/v1/{region}/bean/recurring/forecast',
2258
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2154
2259
  path: {
2260
+ id: data.id,
2155
2261
  region: data.region
2156
2262
  },
2157
- query: {
2158
- months: data.months
2263
+ errors: {
2264
+ 404: 'Rule not found'
2159
2265
  }
2160
2266
  });
2161
2267
  }
2162
- }
2163
2268
 
2164
- export class BeanTransactionRulesService {
2165
2269
  /**
2166
- * Create a new transaction rule (or upsert if upsertByPayee=true)
2167
- * Creates a new rule. If upsertByPayee=true, updates existing rule matching payeeKeywords[0] instead of creating duplicate.
2270
+ * Update recurring rule
2271
+ * Updates an existing recurring rule
2168
2272
  * @param data The data for the request.
2273
+ * @param data.id Rule ID
2169
2274
  * @param data.region Region code for tenant context
2170
2275
  * @param data.requestBody
2171
- * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
2276
+ * @returns RecurringRuleResponseDto Rule updated successfully
2172
2277
  * @throws ApiError
2173
2278
  */
2174
- public static transactionRuleControllerCreate(
2175
- data: TransactionRuleControllerCreateData
2176
- ): CancelablePromise<TransactionRuleControllerCreateResponse> {
2279
+ public static recurringRuleControllerUpdate(
2280
+ data: RecurringRuleControllerUpdateData
2281
+ ): CancelablePromise<RecurringRuleControllerUpdateResponse> {
2177
2282
  return __request(OpenAPI, {
2178
- method: 'POST',
2179
- url: '/api/v1/{region}/bean/transaction-rules',
2283
+ method: 'PATCH',
2284
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2180
2285
  path: {
2286
+ id: data.id,
2181
2287
  region: data.region
2182
2288
  },
2183
2289
  body: data.requestBody,
2184
2290
  mediaType: 'application/json',
2185
2291
  errors: {
2186
- 400: 'Validation failed',
2187
- 401: 'Unauthorized',
2188
- 409: 'Resource conflict - another process is updating this rule'
2292
+ 400: 'Invalid input data',
2293
+ 404: 'Rule not found'
2189
2294
  }
2190
2295
  });
2191
2296
  }
2192
2297
 
2193
2298
  /**
2194
- * Get all transaction rules for user
2299
+ * Delete recurring rule
2300
+ * Soft deletes a recurring rule (sets isActive to false)
2195
2301
  * @param data The data for the request.
2302
+ * @param data.id Rule ID
2196
2303
  * @param data.region Region code for tenant context
2197
- * @param data.limit Max results per page (default: 20, max: 100)
2198
- * @param data.offset Pagination offset (default: 0)
2199
- * @param data.enabled Filter by enabled status
2200
- * @param data.learningSource Filter by learning source. Omit this parameter or pass empty string to get manually created rules (learningSource is null in database).
2201
- * @param data.autoApplyEnabled Filter by auto-apply status
2202
- * @returns TransactionRuleListResponseDto List of rules
2304
+ * @returns void Rule deleted successfully
2203
2305
  * @throws ApiError
2204
2306
  */
2205
- public static transactionRuleControllerList(
2206
- data: TransactionRuleControllerListData
2207
- ): CancelablePromise<TransactionRuleControllerListResponse> {
2307
+ public static recurringRuleControllerDelete(
2308
+ data: RecurringRuleControllerDeleteData
2309
+ ): CancelablePromise<RecurringRuleControllerDeleteResponse> {
2208
2310
  return __request(OpenAPI, {
2209
- method: 'GET',
2210
- url: '/api/v1/{region}/bean/transaction-rules',
2311
+ method: 'DELETE',
2312
+ url: '/api/v1/{region}/bean/recurring-rules/{id}',
2211
2313
  path: {
2314
+ id: data.id,
2212
2315
  region: data.region
2213
2316
  },
2214
- query: {
2215
- limit: data.limit,
2216
- offset: data.offset,
2217
- enabled: data.enabled,
2218
- learningSource: data.learningSource,
2219
- autoApplyEnabled: data.autoApplyEnabled
2220
- },
2221
2317
  errors: {
2222
- 401: 'Unauthorized'
2318
+ 404: 'Rule not found'
2223
2319
  }
2224
2320
  });
2225
2321
  }
2226
2322
 
2227
2323
  /**
2228
- * Validate transaction rule configuration
2324
+ * Get rule with statistics
2325
+ * Returns a rule with pending/overdue counts and next expected date
2229
2326
  * @param data The data for the request.
2327
+ * @param data.id Rule ID
2230
2328
  * @param data.region Region code for tenant context
2231
- * @param data.requestBody
2232
- * @returns ValidateRuleResponseDto Validation result
2329
+ * @returns RecurringRuleWithStatsResponseDto Rule with stats retrieved successfully
2233
2330
  * @throws ApiError
2234
2331
  */
2235
- public static transactionRuleControllerValidate(
2236
- data: TransactionRuleControllerValidateData
2237
- ): CancelablePromise<TransactionRuleControllerValidateResponse> {
2332
+ public static recurringRuleControllerGetWithStats(
2333
+ data: RecurringRuleControllerGetWithStatsData
2334
+ ): CancelablePromise<RecurringRuleControllerGetWithStatsResponse> {
2238
2335
  return __request(OpenAPI, {
2239
- method: 'POST',
2240
- url: '/api/v1/{region}/bean/transaction-rules/validate',
2336
+ method: 'GET',
2337
+ url: '/api/v1/{region}/bean/recurring-rules/{id}/stats',
2241
2338
  path: {
2339
+ id: data.id,
2242
2340
  region: data.region
2243
2341
  },
2244
- body: data.requestBody,
2245
- mediaType: 'application/json',
2246
2342
  errors: {
2247
- 400: 'Validation failed',
2248
- 401: 'Unauthorized'
2343
+ 404: 'Rule not found'
2249
2344
  }
2250
2345
  });
2251
2346
  }
2347
+ }
2252
2348
 
2349
+ export class ExpectedTransactionsService {
2253
2350
  /**
2254
- * Bulk create transaction rules
2351
+ * List expected transactions
2352
+ * Returns expected transactions for the authenticated user with optional filtering
2255
2353
  * @param data The data for the request.
2256
2354
  * @param data.region Region code for tenant context
2257
- * @param data.requestBody
2258
- * @returns BulkCreateRulesResponseDto Bulk create completed
2355
+ * @param data.ruleId Filter by recurring rule ID
2356
+ * @param data.status Filter by status (PENDING, COMPLETED, SKIPPED)
2357
+ * @param data.fromDate Filter by date range start (YYYY-MM-DD)
2358
+ * @param data.toDate Filter by date range end (YYYY-MM-DD)
2359
+ * @returns ExpectedTransactionListResponseDto Expected transactions retrieved successfully
2259
2360
  * @throws ApiError
2260
2361
  */
2261
- public static transactionRuleControllerBulkCreate(
2262
- data: TransactionRuleControllerBulkCreateData
2263
- ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
2362
+ public static expectedTransactionControllerFindAll(
2363
+ data: ExpectedTransactionControllerFindAllData
2364
+ ): CancelablePromise<ExpectedTransactionControllerFindAllResponse> {
2264
2365
  return __request(OpenAPI, {
2265
- method: 'POST',
2266
- url: '/api/v1/{region}/bean/transaction-rules/bulk',
2366
+ method: 'GET',
2367
+ url: '/api/v1/{region}/bean/expected-transactions',
2267
2368
  path: {
2268
2369
  region: data.region
2269
2370
  },
2270
- body: data.requestBody,
2271
- mediaType: 'application/json',
2272
- errors: {
2273
- 400: 'Invalid bulk create data',
2274
- 401: 'Unauthorized'
2371
+ query: {
2372
+ ruleId: data.ruleId,
2373
+ status: data.status,
2374
+ fromDate: data.fromDate,
2375
+ toDate: data.toDate
2275
2376
  }
2276
2377
  });
2277
2378
  }
2278
2379
 
2279
2380
  /**
2280
- * Export transaction rules
2381
+ * List overdue expected transactions
2382
+ * Returns all overdue expected transactions (PENDING past tolerance)
2281
2383
  * @param data The data for the request.
2282
- * @param data.format Export format (currently only JSON supported)
2283
2384
  * @param data.region Region code for tenant context
2284
- * @returns ExportRulesResponseDto Exported rules
2385
+ * @returns ExpectedTransactionListResponseDto Overdue transactions retrieved successfully
2285
2386
  * @throws ApiError
2286
2387
  */
2287
- public static transactionRuleControllerExport(
2288
- data: TransactionRuleControllerExportData
2289
- ): CancelablePromise<TransactionRuleControllerExportResponse> {
2388
+ public static expectedTransactionControllerFindOverdue(
2389
+ data: ExpectedTransactionControllerFindOverdueData
2390
+ ): CancelablePromise<ExpectedTransactionControllerFindOverdueResponse> {
2290
2391
  return __request(OpenAPI, {
2291
2392
  method: 'GET',
2292
- url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
2393
+ url: '/api/v1/{region}/bean/expected-transactions/overdue',
2293
2394
  path: {
2294
- format: data.format,
2295
2395
  region: data.region
2296
- },
2297
- errors: {
2298
- 400: 'Unsupported format',
2299
- 401: 'Unauthorized'
2300
2396
  }
2301
2397
  });
2302
2398
  }
2303
2399
 
2304
2400
  /**
2305
- * Get transaction rule statistics
2401
+ * Get expected transaction by ID
2402
+ * Returns a specific expected transaction with rule details
2306
2403
  * @param data The data for the request.
2307
- * @param data.period Statistics time period
2404
+ * @param data.id Expected transaction ID
2308
2405
  * @param data.region Region code for tenant context
2309
- * @returns RuleStatisticsResponseDto Rule statistics
2406
+ * @returns ExpectedTransactionResponseDto Expected transaction retrieved successfully
2310
2407
  * @throws ApiError
2311
2408
  */
2312
- public static transactionRuleControllerGetStatistics(
2313
- data: TransactionRuleControllerGetStatisticsData
2314
- ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
2409
+ public static expectedTransactionControllerFindOne(
2410
+ data: ExpectedTransactionControllerFindOneData
2411
+ ): CancelablePromise<ExpectedTransactionControllerFindOneResponse> {
2315
2412
  return __request(OpenAPI, {
2316
2413
  method: 'GET',
2317
- url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
2414
+ url: '/api/v1/{region}/bean/expected-transactions/{id}',
2318
2415
  path: {
2319
- period: data.period,
2416
+ id: data.id,
2320
2417
  region: data.region
2321
2418
  },
2322
2419
  errors: {
2323
- 401: 'Unauthorized'
2420
+ 404: 'Expected transaction not found'
2324
2421
  }
2325
2422
  });
2326
2423
  }
2327
2424
 
2328
2425
  /**
2329
- * Get transaction rule detail
2426
+ * Skip expected transaction
2427
+ * Marks an expected transaction as skipped (PENDING -> SKIPPED)
2330
2428
  * @param data The data for the request.
2331
- * @param data.ruleId Rule ID
2429
+ * @param data.id Expected transaction ID
2332
2430
  * @param data.region Region code for tenant context
2333
- * @returns TransactionRuleResponseDto Rule details
2431
+ * @returns ExpectedTransactionResponseDto Expected transaction skipped successfully
2334
2432
  * @throws ApiError
2335
2433
  */
2336
- public static transactionRuleControllerGetDetail(
2337
- data: TransactionRuleControllerGetDetailData
2338
- ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
2434
+ public static expectedTransactionControllerSkip(
2435
+ data: ExpectedTransactionControllerSkipData
2436
+ ): CancelablePromise<ExpectedTransactionControllerSkipResponse> {
2339
2437
  return __request(OpenAPI, {
2340
- method: 'GET',
2341
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2438
+ method: 'POST',
2439
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2342
2440
  path: {
2343
- ruleId: data.ruleId,
2441
+ id: data.id,
2344
2442
  region: data.region
2345
2443
  },
2346
2444
  errors: {
2347
- 401: 'Unauthorized',
2348
- 403: 'Forbidden - not owner of rule',
2349
- 404: 'Rule not found'
2445
+ 400: 'Cannot skip - not in PENDING status',
2446
+ 404: 'Expected transaction not found'
2350
2447
  }
2351
2448
  });
2352
2449
  }
2353
2450
 
2354
2451
  /**
2355
- * Update a transaction rule
2452
+ * Undo skip
2453
+ * Reverses a skip operation (SKIPPED -> PENDING)
2356
2454
  * @param data The data for the request.
2357
- * @param data.ruleId Rule ID to update
2455
+ * @param data.id Expected transaction ID
2358
2456
  * @param data.region Region code for tenant context
2359
- * @param data.requestBody
2360
- * @returns TransactionRuleResponseDto Rule updated successfully
2457
+ * @returns void Skip undone successfully
2361
2458
  * @throws ApiError
2362
2459
  */
2363
- public static transactionRuleControllerUpdate(
2364
- data: TransactionRuleControllerUpdateData
2365
- ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
2460
+ public static expectedTransactionControllerUndoSkip(
2461
+ data: ExpectedTransactionControllerUndoSkipData
2462
+ ): CancelablePromise<ExpectedTransactionControllerUndoSkipResponse> {
2366
2463
  return __request(OpenAPI, {
2367
- method: 'PUT',
2368
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2464
+ method: 'DELETE',
2465
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/skip',
2369
2466
  path: {
2370
- ruleId: data.ruleId,
2467
+ id: data.id,
2371
2468
  region: data.region
2372
2469
  },
2373
- body: data.requestBody,
2374
- mediaType: 'application/json',
2375
2470
  errors: {
2376
- 400: 'Validation failed',
2377
- 401: 'Unauthorized',
2378
- 403: 'Forbidden - not owner of rule',
2379
- 404: 'Rule not found',
2380
- 409: 'Resource conflict - rule is being modified by another process'
2471
+ 400: 'Cannot undo - not in SKIPPED status',
2472
+ 404: 'Expected transaction not found'
2381
2473
  }
2382
2474
  });
2383
2475
  }
2384
2476
 
2385
2477
  /**
2386
- * Delete a transaction rule
2478
+ * Confirm transaction match
2479
+ * Manually matches an expected transaction with an actual transaction
2387
2480
  * @param data The data for the request.
2388
- * @param data.ruleId Rule ID to delete
2481
+ * @param data.id Expected transaction ID
2389
2482
  * @param data.region Region code for tenant context
2390
- * @returns void Rule deleted successfully
2483
+ * @param data.requestBody
2484
+ * @returns unknown Match confirmed successfully
2391
2485
  * @throws ApiError
2392
2486
  */
2393
- public static transactionRuleControllerDelete(
2394
- data: TransactionRuleControllerDeleteData
2395
- ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
2487
+ public static expectedTransactionControllerConfirmMatch(
2488
+ data: ExpectedTransactionControllerConfirmMatchData
2489
+ ): CancelablePromise<ExpectedTransactionControllerConfirmMatchResponse> {
2396
2490
  return __request(OpenAPI, {
2397
- method: 'DELETE',
2398
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2491
+ method: 'POST',
2492
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2399
2493
  path: {
2400
- ruleId: data.ruleId,
2494
+ id: data.id,
2401
2495
  region: data.region
2402
2496
  },
2497
+ body: data.requestBody,
2498
+ mediaType: 'application/json',
2403
2499
  errors: {
2404
- 401: 'Unauthorized',
2405
- 403: 'Forbidden - not owner of rule',
2406
- 404: 'Rule not found',
2407
- 409: 'Resource conflict - rule is being modified by another process'
2500
+ 400: 'Cannot match - not in PENDING status',
2501
+ 404: 'Expected or actual transaction not found',
2502
+ 409: 'Actual transaction already matched to another rule'
2408
2503
  }
2409
2504
  });
2410
2505
  }
2411
2506
 
2412
2507
  /**
2413
- * Test rule matching
2508
+ * Unmatch transaction
2509
+ * Removes the match between expected and actual transaction (COMPLETED -> PENDING)
2414
2510
  * @param data The data for the request.
2415
- * @param data.ruleId Rule ID to test
2511
+ * @param data.id Expected transaction ID
2416
2512
  * @param data.region Region code for tenant context
2417
- * @param data.requestBody
2418
- * @returns TestRuleResponseDto Test result
2513
+ * @returns void Match removed successfully
2419
2514
  * @throws ApiError
2420
2515
  */
2421
- public static transactionRuleControllerTest(
2422
- data: TransactionRuleControllerTestData
2423
- ): CancelablePromise<TransactionRuleControllerTestResponse> {
2516
+ public static expectedTransactionControllerUnmatch(
2517
+ data: ExpectedTransactionControllerUnmatchData
2518
+ ): CancelablePromise<ExpectedTransactionControllerUnmatchResponse> {
2424
2519
  return __request(OpenAPI, {
2425
- method: 'POST',
2426
- url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2520
+ method: 'DELETE',
2521
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/match',
2427
2522
  path: {
2428
- ruleId: data.ruleId,
2523
+ id: data.id,
2429
2524
  region: data.region
2430
2525
  },
2431
- body: data.requestBody,
2432
- mediaType: 'application/json',
2433
2526
  errors: {
2434
- 401: 'Unauthorized',
2435
- 403: 'Forbidden - not owner of rule',
2436
- 404: 'Rule not found'
2527
+ 400: 'Cannot unmatch - not in COMPLETED status',
2528
+ 404: 'Expected transaction not found'
2437
2529
  }
2438
2530
  });
2439
2531
  }
2440
- }
2441
2532
 
2442
- export class UsersService {
2443
2533
  /**
2444
- * Delete own user account
2534
+ * Enter Now
2535
+ * Creates an actual transaction for an expected transaction (YNAB-style Enter Now)
2445
2536
  * @param data The data for the request.
2537
+ * @param data.id Expected transaction ID
2538
+ * @param data.region Region code for tenant context
2446
2539
  * @param data.requestBody
2447
- * @returns void User deleted successfully
2540
+ * @returns unknown Transaction created successfully
2448
2541
  * @throws ApiError
2449
2542
  */
2450
- public static userControllerDeleteOwnUser(
2451
- data: UserControllerDeleteOwnUserData
2452
- ): CancelablePromise<UserControllerDeleteOwnUserResponse> {
2543
+ public static expectedTransactionControllerEnterNow(
2544
+ data: ExpectedTransactionControllerEnterNowData
2545
+ ): CancelablePromise<ExpectedTransactionControllerEnterNowResponse> {
2453
2546
  return __request(OpenAPI, {
2454
- method: 'DELETE',
2455
- url: '/api/v1/users',
2547
+ method: 'POST',
2548
+ url: '/api/v1/{region}/bean/expected-transactions/{id}/enter',
2549
+ path: {
2550
+ id: data.id,
2551
+ region: data.region
2552
+ },
2456
2553
  body: data.requestBody,
2457
2554
  mediaType: 'application/json',
2458
2555
  errors: {
2459
- 403: 'Invalid access token'
2556
+ 400: 'Cannot enter - not in PENDING status or missing accounts',
2557
+ 404: 'Expected transaction or accounts not found'
2460
2558
  }
2461
2559
  });
2462
2560
  }
2561
+ }
2463
2562
 
2563
+ export class RecurringForecastService {
2464
2564
  /**
2465
- * Get current authenticated user
2565
+ * Get cash flow forecast
2566
+ * Returns predicted outflows for the next N months based on active recurring rules
2466
2567
  * @param data The data for the request.
2467
- * @param data.acceptLanguage
2468
- * @returns unknown User retrieved successfully
2568
+ * @param data.region Region code for tenant context
2569
+ * @param data.months Number of months to forecast (1-12, default 3)
2570
+ * @returns ForecastResponseDto Forecast retrieved successfully
2469
2571
  * @throws ApiError
2470
2572
  */
2471
- public static userControllerGetUser(
2472
- data: UserControllerGetUserData
2473
- ): CancelablePromise<UserControllerGetUserResponse> {
2573
+ public static forecastControllerGetForecast(
2574
+ data: ForecastControllerGetForecastData
2575
+ ): CancelablePromise<ForecastControllerGetForecastResponse> {
2474
2576
  return __request(OpenAPI, {
2475
2577
  method: 'GET',
2476
- url: '/api/v1/users',
2477
- headers: {
2478
- 'accept-language': data.acceptLanguage
2578
+ url: '/api/v1/{region}/bean/recurring/forecast',
2579
+ path: {
2580
+ region: data.region
2581
+ },
2582
+ query: {
2583
+ months: data.months
2479
2584
  }
2480
2585
  });
2481
2586
  }
2587
+ }
2482
2588
 
2589
+ export class BeanTransactionRulesService {
2483
2590
  /**
2484
- * Sign up new user
2485
- * Create a new account with auto-generated access token. Protected by Cloudflare Turnstile to prevent automated signup (when enabled).
2591
+ * Create a new transaction rule (or upsert if upsertByPayee=true)
2592
+ * Creates a new rule. If upsertByPayee=true, updates existing rule matching payeeKeywords[0] instead of creating duplicate.
2486
2593
  * @param data The data for the request.
2594
+ * @param data.region Region code for tenant context
2487
2595
  * @param data.requestBody
2488
- * @returns SignupResponseDto User created successfully
2596
+ * @returns TransactionRuleResponseDto Rule updated successfully (upsert mode)
2489
2597
  * @throws ApiError
2490
2598
  */
2491
- public static userControllerSignupUser(
2492
- data: UserControllerSignupUserData
2493
- ): CancelablePromise<UserControllerSignupUserResponse> {
2599
+ public static transactionRuleControllerCreate(
2600
+ data: TransactionRuleControllerCreateData
2601
+ ): CancelablePromise<TransactionRuleControllerCreateResponse> {
2494
2602
  return __request(OpenAPI, {
2495
2603
  method: 'POST',
2496
- url: '/api/v1/users',
2604
+ url: '/api/v1/{region}/bean/transaction-rules',
2605
+ path: {
2606
+ region: data.region
2607
+ },
2497
2608
  body: data.requestBody,
2498
2609
  mediaType: 'application/json',
2499
2610
  errors: {
2500
- 400: 'Invalid Turnstile token (when Turnstile is enabled)',
2501
- 403: 'User signup is disabled'
2611
+ 400: 'Validation failed',
2612
+ 401: 'Unauthorized',
2613
+ 409: 'Resource conflict - another process is updating this rule'
2502
2614
  }
2503
2615
  });
2504
2616
  }
2505
2617
 
2506
2618
  /**
2507
- * Delete user by ID (admin only)
2619
+ * Get all transaction rules for user
2508
2620
  * @param data The data for the request.
2509
- * @param data.id User ID to delete
2510
- * @returns void User deleted successfully
2621
+ * @param data.region Region code for tenant context
2622
+ * @param data.limit Max results per page (default: 20, max: 100)
2623
+ * @param data.offset Pagination offset (default: 0)
2624
+ * @param data.enabled Filter by enabled status
2625
+ * @param data.learningSource Filter by learning source. Omit this parameter or pass empty string to get manually created rules (learningSource is null in database).
2626
+ * @param data.autoApplyEnabled Filter by auto-apply status
2627
+ * @returns TransactionRuleListResponseDto List of rules
2511
2628
  * @throws ApiError
2512
2629
  */
2513
- public static userControllerDeleteUser(
2514
- data: UserControllerDeleteUserData
2515
- ): CancelablePromise<UserControllerDeleteUserResponse> {
2630
+ public static transactionRuleControllerList(
2631
+ data: TransactionRuleControllerListData
2632
+ ): CancelablePromise<TransactionRuleControllerListResponse> {
2516
2633
  return __request(OpenAPI, {
2517
- method: 'DELETE',
2518
- url: '/api/v1/users/{id}',
2634
+ method: 'GET',
2635
+ url: '/api/v1/{region}/bean/transaction-rules',
2519
2636
  path: {
2520
- id: data.id
2637
+ region: data.region
2638
+ },
2639
+ query: {
2640
+ limit: data.limit,
2641
+ offset: data.offset,
2642
+ enabled: data.enabled,
2643
+ learningSource: data.learningSource,
2644
+ autoApplyEnabled: data.autoApplyEnabled
2521
2645
  },
2522
2646
  errors: {
2523
- 403: 'Cannot delete own account or insufficient permissions'
2647
+ 401: 'Unauthorized'
2524
2648
  }
2525
2649
  });
2526
2650
  }
2527
2651
 
2528
2652
  /**
2529
- * Get user info by user ID
2653
+ * Validate transaction rule configuration
2530
2654
  * @param data The data for the request.
2531
- * @param data.id User ID
2532
- * @returns unknown User info retrieved successfully
2655
+ * @param data.region Region code for tenant context
2656
+ * @param data.requestBody
2657
+ * @returns ValidateRuleResponseDto Validation result
2533
2658
  * @throws ApiError
2534
2659
  */
2535
- public static userControllerGetUserInfo(
2536
- data: UserControllerGetUserInfoData
2537
- ): CancelablePromise<UserControllerGetUserInfoResponse> {
2660
+ public static transactionRuleControllerValidate(
2661
+ data: TransactionRuleControllerValidateData
2662
+ ): CancelablePromise<TransactionRuleControllerValidateResponse> {
2538
2663
  return __request(OpenAPI, {
2539
- method: 'GET',
2540
- url: '/api/v1/users/{id}/info',
2664
+ method: 'POST',
2665
+ url: '/api/v1/{region}/bean/transaction-rules/validate',
2541
2666
  path: {
2542
- id: data.id
2667
+ region: data.region
2543
2668
  },
2669
+ body: data.requestBody,
2670
+ mediaType: 'application/json',
2544
2671
  errors: {
2545
- 403: 'Cannot access other user info without admin permission'
2672
+ 400: 'Validation failed',
2673
+ 401: 'Unauthorized'
2546
2674
  }
2547
2675
  });
2548
2676
  }
2549
2677
 
2550
2678
  /**
2551
- * Update user settings
2679
+ * Bulk create transaction rules
2552
2680
  * @param data The data for the request.
2681
+ * @param data.region Region code for tenant context
2553
2682
  * @param data.requestBody
2554
- * @returns unknown Settings updated successfully
2683
+ * @returns BulkCreateRulesResponseDto Bulk create completed
2555
2684
  * @throws ApiError
2556
2685
  */
2557
- public static userControllerUpdateUserSetting(
2558
- data: UserControllerUpdateUserSettingData
2559
- ): CancelablePromise<UserControllerUpdateUserSettingResponse> {
2686
+ public static transactionRuleControllerBulkCreate(
2687
+ data: TransactionRuleControllerBulkCreateData
2688
+ ): CancelablePromise<TransactionRuleControllerBulkCreateResponse> {
2560
2689
  return __request(OpenAPI, {
2561
- method: 'PUT',
2562
- url: '/api/v1/users/setting',
2690
+ method: 'POST',
2691
+ url: '/api/v1/{region}/bean/transaction-rules/bulk',
2692
+ path: {
2693
+ region: data.region
2694
+ },
2563
2695
  body: data.requestBody,
2564
2696
  mediaType: 'application/json',
2565
2697
  errors: {
2566
- 403: 'Insufficient permissions'
2567
- }
2568
- });
2569
- }
2570
-
2571
- /**
2572
- * Get all user settings paginated (admin only)
2573
- * @param data The data for the request.
2574
- * @param data.pageNo Page number
2575
- * @param data.pageSize Page size
2576
- * @returns unknown Settings list retrieved successfully
2577
- * @throws ApiError
2578
- */
2579
- public static userControllerGetAllUserSettingsByPage(
2580
- data: UserControllerGetAllUserSettingsByPageData
2581
- ): CancelablePromise<UserControllerGetAllUserSettingsByPageResponse> {
2582
- return __request(OpenAPI, {
2583
- method: 'GET',
2584
- url: '/api/v1/users/settings-by-page',
2585
- query: {
2586
- pageNo: data.pageNo,
2587
- pageSize: data.pageSize
2588
- }
2589
- });
2590
- }
2591
-
2592
- /**
2593
- * Get asset and liability summary for current user
2594
- * @returns unknown Summary retrieved successfully
2595
- * @throws ApiError
2596
- */
2597
- public static userControllerGetAssetLiabilitySummary(): CancelablePromise<UserControllerGetAssetLiabilitySummaryResponse> {
2598
- return __request(OpenAPI, {
2599
- method: 'GET',
2600
- url: '/api/v1/users/asset-liability-summary'
2601
- });
2602
- }
2603
- }
2604
-
2605
- export class PropertiesService {
2606
- /**
2607
- * Get all system properties
2608
- * @returns unknown Properties retrieved successfully
2609
- * @throws ApiError
2610
- */
2611
- public static propertyControllerGetAll(): CancelablePromise<PropertyControllerGetAllResponse> {
2612
- return __request(OpenAPI, {
2613
- method: 'GET',
2614
- url: '/api/v1/admin/properties',
2615
- errors: {
2616
- 401: 'Unauthorized',
2617
- 403: 'Forbidden - insufficient permissions'
2698
+ 400: 'Invalid bulk create data',
2699
+ 401: 'Unauthorized'
2618
2700
  }
2619
2701
  });
2620
2702
  }
2621
2703
 
2622
2704
  /**
2623
- * Get property by key
2705
+ * Export transaction rules
2624
2706
  * @param data The data for the request.
2625
- * @param data.key Property key
2626
- * @returns unknown Property retrieved successfully
2707
+ * @param data.format Export format (currently only JSON supported)
2708
+ * @param data.region Region code for tenant context
2709
+ * @returns ExportRulesResponseDto Exported rules
2627
2710
  * @throws ApiError
2628
2711
  */
2629
- public static propertyControllerGetByKey(
2630
- data: PropertyControllerGetByKeyData
2631
- ): CancelablePromise<PropertyControllerGetByKeyResponse> {
2712
+ public static transactionRuleControllerExport(
2713
+ data: TransactionRuleControllerExportData
2714
+ ): CancelablePromise<TransactionRuleControllerExportResponse> {
2632
2715
  return __request(OpenAPI, {
2633
2716
  method: 'GET',
2634
- url: '/api/v1/admin/properties/{key}',
2717
+ url: '/api/v1/{region}/bean/transaction-rules/export/{format}',
2635
2718
  path: {
2636
- key: data.key
2719
+ format: data.format,
2720
+ region: data.region
2637
2721
  },
2638
2722
  errors: {
2639
- 401: 'Unauthorized',
2640
- 403: 'Forbidden - insufficient permissions',
2641
- 404: 'Property not found'
2723
+ 400: 'Unsupported format',
2724
+ 401: 'Unauthorized'
2642
2725
  }
2643
2726
  });
2644
2727
  }
2645
2728
 
2646
2729
  /**
2647
- * Update a system property
2730
+ * Get transaction rule statistics
2648
2731
  * @param data The data for the request.
2649
- * @param data.key Property key
2650
- * @param data.requestBody
2651
- * @returns unknown Property updated successfully
2732
+ * @param data.period Statistics time period
2733
+ * @param data.region Region code for tenant context
2734
+ * @returns RuleStatisticsResponseDto Rule statistics
2652
2735
  * @throws ApiError
2653
2736
  */
2654
- public static propertyControllerUpdate(
2655
- data: PropertyControllerUpdateData
2656
- ): CancelablePromise<PropertyControllerUpdateResponse> {
2737
+ public static transactionRuleControllerGetStatistics(
2738
+ data: TransactionRuleControllerGetStatisticsData
2739
+ ): CancelablePromise<TransactionRuleControllerGetStatisticsResponse> {
2657
2740
  return __request(OpenAPI, {
2658
- method: 'PUT',
2659
- url: '/api/v1/admin/properties/{key}',
2741
+ method: 'GET',
2742
+ url: '/api/v1/{region}/bean/transaction-rules/statistics/{period}',
2660
2743
  path: {
2661
- key: data.key
2744
+ period: data.period,
2745
+ region: data.region
2662
2746
  },
2663
- body: data.requestBody,
2664
- mediaType: 'application/json',
2665
2747
  errors: {
2666
- 401: 'Unauthorized',
2667
- 403: 'Forbidden - insufficient permissions'
2748
+ 401: 'Unauthorized'
2668
2749
  }
2669
2750
  });
2670
2751
  }
2671
2752
 
2672
2753
  /**
2673
- * Delete a system property
2754
+ * Get transaction rule detail
2674
2755
  * @param data The data for the request.
2675
- * @param data.key Property key
2676
- * @returns void Property deleted successfully
2756
+ * @param data.ruleId Rule ID
2757
+ * @param data.region Region code for tenant context
2758
+ * @returns TransactionRuleResponseDto Rule details
2677
2759
  * @throws ApiError
2678
2760
  */
2679
- public static propertyControllerDelete(
2680
- data: PropertyControllerDeleteData
2681
- ): CancelablePromise<PropertyControllerDeleteResponse> {
2761
+ public static transactionRuleControllerGetDetail(
2762
+ data: TransactionRuleControllerGetDetailData
2763
+ ): CancelablePromise<TransactionRuleControllerGetDetailResponse> {
2682
2764
  return __request(OpenAPI, {
2683
- method: 'DELETE',
2684
- url: '/api/v1/admin/properties/{key}',
2765
+ method: 'GET',
2766
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2685
2767
  path: {
2686
- key: data.key
2768
+ ruleId: data.ruleId,
2769
+ region: data.region
2687
2770
  },
2688
2771
  errors: {
2689
2772
  401: 'Unauthorized',
2690
- 403: 'Forbidden - insufficient permissions',
2691
- 404: 'Property not found'
2773
+ 403: 'Forbidden - not owner of rule',
2774
+ 404: 'Rule not found'
2692
2775
  }
2693
2776
  });
2694
2777
  }
2695
- }
2696
2778
 
2697
- export class ReportingService {
2698
2779
  /**
2699
- * Get portfolio value trends
2700
- *
2701
- * Returns time series data of portfolio net worth.
2702
- *
2703
- * **Multi-currency Support:**
2704
- * - `series[].byCurrency` - Currency breakdown for each data point
2705
- * - `byCurrency` - Separate time series grouped by currency
2706
- * - `warnings` - Exchange rate warnings if conversion failed
2707
- *
2708
- * **Parameters:**
2709
- * - `period`: Time period (1m, 3m, 6m, 1y)
2710
- * - `granularity`: Data granularity (day, week, month)
2711
- *
2780
+ * Update a transaction rule
2712
2781
  * @param data The data for the request.
2782
+ * @param data.ruleId Rule ID to update
2713
2783
  * @param data.region Region code for tenant context
2714
- * @param data.period Time period
2715
- * @param data.granularity Data granularity
2716
- * @returns PortfolioTrendsResponseDto Trends retrieved successfully
2784
+ * @param data.requestBody
2785
+ * @returns TransactionRuleResponseDto Rule updated successfully
2717
2786
  * @throws ApiError
2718
2787
  */
2719
- public static reportingControllerGetPortfolioTrends(
2720
- data: ReportingControllerGetPortfolioTrendsData
2721
- ): CancelablePromise<ReportingControllerGetPortfolioTrendsResponse> {
2788
+ public static transactionRuleControllerUpdate(
2789
+ data: TransactionRuleControllerUpdateData
2790
+ ): CancelablePromise<TransactionRuleControllerUpdateResponse> {
2722
2791
  return __request(OpenAPI, {
2723
- method: 'GET',
2724
- url: '/api/v1/{region}/reporting/portfolio/trends',
2792
+ method: 'PUT',
2793
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2725
2794
  path: {
2795
+ ruleId: data.ruleId,
2726
2796
  region: data.region
2727
2797
  },
2728
- query: {
2729
- period: data.period,
2730
- granularity: data.granularity
2731
- },
2798
+ body: data.requestBody,
2799
+ mediaType: 'application/json',
2732
2800
  errors: {
2733
- 401: 'User not authenticated'
2801
+ 400: 'Validation failed',
2802
+ 401: 'Unauthorized',
2803
+ 403: 'Forbidden - not owner of rule',
2804
+ 404: 'Rule not found',
2805
+ 409: 'Resource conflict - rule is being modified by another process'
2734
2806
  }
2735
2807
  });
2736
2808
  }
2737
2809
 
2738
2810
  /**
2739
- * Get cash-flow trends
2740
- *
2741
- * Monthly income / expense / netSavings over a fixed N-month window
2742
- * (current month + N−1 prior). Missing months are zero-filled (flow metric).
2743
- *
2744
- * **Parameters:**
2745
- * - `period`: 1m | 3m | 6m | 1y (default 6m)
2746
- * - `granularity`: accepted for API symmetry; v1 returns month buckets
2747
- *
2811
+ * Delete a transaction rule
2748
2812
  * @param data The data for the request.
2813
+ * @param data.ruleId Rule ID to delete
2749
2814
  * @param data.region Region code for tenant context
2750
- * @param data.period Time period
2751
- * @param data.granularity Data granularity (accepted for API symmetry; v1 returns month buckets)
2752
- * @returns CashFlowTrendsResponseDto Cash-flow trends retrieved successfully
2815
+ * @returns void Rule deleted successfully
2753
2816
  * @throws ApiError
2754
2817
  */
2755
- public static reportingControllerGetCashFlowTrends(
2756
- data: ReportingControllerGetCashFlowTrendsData
2757
- ): CancelablePromise<ReportingControllerGetCashFlowTrendsResponse> {
2818
+ public static transactionRuleControllerDelete(
2819
+ data: TransactionRuleControllerDeleteData
2820
+ ): CancelablePromise<TransactionRuleControllerDeleteResponse> {
2758
2821
  return __request(OpenAPI, {
2759
- method: 'GET',
2760
- url: '/api/v1/{region}/reporting/cash-flow/trends',
2822
+ method: 'DELETE',
2823
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}',
2761
2824
  path: {
2825
+ ruleId: data.ruleId,
2762
2826
  region: data.region
2763
2827
  },
2764
- query: {
2765
- period: data.period,
2766
- granularity: data.granularity
2767
- },
2768
2828
  errors: {
2769
- 401: 'User not authenticated'
2829
+ 401: 'Unauthorized',
2830
+ 403: 'Forbidden - not owner of rule',
2831
+ 404: 'Rule not found',
2832
+ 409: 'Resource conflict - rule is being modified by another process'
2770
2833
  }
2771
2834
  });
2772
2835
  }
2773
2836
 
2774
2837
  /**
2775
- * Generate portfolio snapshot
2776
- *
2777
- * Manually generate a portfolio snapshot for a specific date.
2778
- *
2779
- * **Multi-currency Support:**
2780
- * - Fetches balances grouped by currency
2781
- * - Uses user's baseCurrency setting for conversion
2782
- * - Stores exchange rates and warnings
2783
- *
2784
- * **Use Cases:**
2785
- * - Testing snapshot generation
2786
- * - Force regeneration after data correction
2787
- * - Initial setup for new users
2788
- *
2838
+ * Test rule matching
2789
2839
  * @param data The data for the request.
2840
+ * @param data.ruleId Rule ID to test
2790
2841
  * @param data.region Region code for tenant context
2791
- * @param data.requestBody Optional date (defaults to today)
2792
- * @returns GenerateSnapshotResponse Snapshot generated successfully
2842
+ * @param data.requestBody
2843
+ * @returns TestRuleResponseDto Test result
2793
2844
  * @throws ApiError
2794
2845
  */
2795
- public static reportingControllerGenerateSnapshot(
2796
- data: ReportingControllerGenerateSnapshotData
2797
- ): CancelablePromise<ReportingControllerGenerateSnapshotResponse> {
2846
+ public static transactionRuleControllerTest(
2847
+ data: TransactionRuleControllerTestData
2848
+ ): CancelablePromise<TransactionRuleControllerTestResponse> {
2798
2849
  return __request(OpenAPI, {
2799
2850
  method: 'POST',
2800
- url: '/api/v1/{region}/reporting/snapshots/generate',
2851
+ url: '/api/v1/{region}/bean/transaction-rules/{ruleId}/test',
2801
2852
  path: {
2853
+ ruleId: data.ruleId,
2802
2854
  region: data.region
2803
2855
  },
2804
2856
  body: data.requestBody,
2805
2857
  mediaType: 'application/json',
2806
2858
  errors: {
2807
- 400: 'Invalid date format',
2808
- 401: 'User not authenticated'
2859
+ 401: 'Unauthorized',
2860
+ 403: 'Forbidden - not owner of rule',
2861
+ 404: 'Rule not found'
2809
2862
  }
2810
2863
  });
2811
2864
  }
2865
+ }
2812
2866
 
2867
+ export class BeanCategoryCatalogService {
2813
2868
  /**
2814
- * Backfill portfolio snapshots
2815
- *
2816
- * Generate snapshots for a date range (historical data backfill).
2817
- *
2818
- * **Multi-currency Support:**
2819
- * - Each snapshot includes multi-currency data
2820
- * - Uses exchange rates available at generation time
2821
- * - Warnings stored for missing exchange rates
2822
- *
2823
- * **Best Practices:**
2824
- * - Use for initial setup after account configuration
2825
- * - Run during low-traffic periods for large date ranges
2826
- * - Existing snapshots are skipped (not regenerated)
2827
- *
2869
+ * List category catalog for a region
2870
+ * Returns the region-scoped category slugs (expense/income/investment/banking/transfer/payment) for the NLP result picker, each with the categoryAccount paths the region-enabled system rules map it to (#816). CN-exclusive payment instruments (huabei/baitiao) appear only under /cn.
2828
2871
  * @param data The data for the request.
2829
2872
  * @param data.region Region code for tenant context
2830
- * @param data.requestBody
2831
- * @returns BackfillSnapshotsResponse Backfill completed successfully
2873
+ * @param data.scenario Filter by scenario
2874
+ * @param data.routeBearing Filter by routeBearing (entity-router route() consumes it)
2875
+ * @returns CategoryCatalogListResponseDto Category catalog retrieved successfully
2832
2876
  * @throws ApiError
2833
2877
  */
2834
- public static reportingControllerBackfillSnapshots(
2835
- data: ReportingControllerBackfillSnapshotsData
2836
- ): CancelablePromise<ReportingControllerBackfillSnapshotsResponse> {
2878
+ public static categoryCatalogControllerList(
2879
+ data: CategoryCatalogControllerListData
2880
+ ): CancelablePromise<CategoryCatalogControllerListResponse> {
2837
2881
  return __request(OpenAPI, {
2838
- method: 'POST',
2839
- url: '/api/v1/{region}/reporting/snapshots/backfill',
2882
+ method: 'GET',
2883
+ url: '/api/v1/{region}/bean/categories',
2840
2884
  path: {
2841
2885
  region: data.region
2842
2886
  },
2843
- body: data.requestBody,
2844
- mediaType: 'application/json',
2845
- errors: {
2846
- 400: 'Invalid date format or range',
2847
- 401: 'User not authenticated',
2848
- 409: 'Backfill already in progress for this user'
2887
+ query: {
2888
+ scenario: data.scenario,
2889
+ routeBearing: data.routeBearing
2849
2890
  }
2850
2891
  });
2851
2892
  }
@@ -3030,7 +3071,7 @@ export class OnboardingService {
3030
3071
  /**
3031
3072
  * Bootstrap core accounts + register asset accounts with opening balances (ADR-0113)
3032
3073
  * @param data The data for the request.
3033
- * @param data.region Region code for tenant context
3074
+ * @param data.region Region code for tenant context. Not-yet-open codes are accepted: the universal catalog backs onboarding regardless of region (#759)
3034
3075
  * @param data.requestBody
3035
3076
  * @returns unknown Onboarding bootstrap result.
3036
3077
  * @throws ApiError
@@ -3163,7 +3204,7 @@ export class BeanExportService {
3163
3204
  /**
3164
3205
  * Export Beancount ledger as ZIP
3165
3206
  * Export all user Beancount data as a ZIP file containing ledger.beancount and yearly files in community format.
3166
- * @returns unknown
3207
+ * @returns binary ZIP archive (application/zip) streamed as an attachment
3167
3208
  * @throws ApiError
3168
3209
  */
3169
3210
  public static exportControllerExportBeancount(): CancelablePromise<ExportControllerExportBeancountResponse> {
@@ -3726,13 +3767,20 @@ export class BeanPlatformsService {
3726
3767
 
3727
3768
  /**
3728
3769
  * Get platform list for current user
3770
+ * @param data The data for the request.
3771
+ * @param data.region Region code (ISO 3166-1 alpha-2) that biases within-type-bucket ordering (local-region platforms first). Case-insensitive — stored/compared UPPERCASE ("cn" == "CN").
3729
3772
  * @returns PlatformListItemDto List of platforms with user binding status
3730
3773
  * @throws ApiError
3731
3774
  */
3732
- public static platformControllerGetPlatformList(): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3775
+ public static platformControllerGetPlatformList(
3776
+ data: PlatformControllerGetPlatformListData = {}
3777
+ ): CancelablePromise<PlatformControllerGetPlatformListResponse> {
3733
3778
  return __request(OpenAPI, {
3734
3779
  method: 'GET',
3735
- url: '/api/v1/bean/platforms/list'
3780
+ url: '/api/v1/bean/platforms/list',
3781
+ query: {
3782
+ region: data.region
3783
+ }
3736
3784
  });
3737
3785
  }
3738
3786
 
@@ -3740,7 +3788,7 @@ export class BeanPlatformsService {
3740
3788
  * Match platforms by name or alias
3741
3789
  * @param data The data for the request.
3742
3790
  * @param data.q Search query — Chinese name, English name, or abbreviation
3743
- * @param data.region Region code for category override lookup
3791
+ * @param data.region 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").
3744
3792
  * @returns PlatformMatchResponseDto Matching platforms with overall match type and truncation flag
3745
3793
  * @throws ApiError
3746
3794
  */
@@ -3757,6 +3805,31 @@ export class BeanPlatformsService {
3757
3805
  });
3758
3806
  }
3759
3807
 
3808
+ /**
3809
+ * Get the region and candidate account standards for a platform
3810
+ * @param data The data for the request.
3811
+ * @param data.id Platform ID (from a match result)
3812
+ * @param data.region Region code (ISO 3166-1 alpha-2, case-insensitive). Required for global platforms (countryCode null) — resolved as their template region; ignored when the platform has its own countryCode.
3813
+ * @param data.type Filter templates by account type (path first segment)
3814
+ * @returns PlatformStandardsResponseDto Resolved region plus the merged account-standard catalog of that region (groupable by productCategory client-side)
3815
+ * @throws ApiError
3816
+ */
3817
+ public static platformControllerGetPlatformStandards(
3818
+ data: PlatformControllerGetPlatformStandardsData
3819
+ ): CancelablePromise<PlatformControllerGetPlatformStandardsResponse> {
3820
+ return __request(OpenAPI, {
3821
+ method: 'GET',
3822
+ url: '/api/v1/bean/platforms/{id}/standards',
3823
+ path: {
3824
+ id: data.id
3825
+ },
3826
+ query: {
3827
+ region: data.region,
3828
+ type: data.type
3829
+ }
3830
+ });
3831
+ }
3832
+
3760
3833
  /**
3761
3834
  * Update a platform
3762
3835
  * @param data The data for the request.
@@ -4000,15 +4073,52 @@ export class AuthService {
4000
4073
  }
4001
4074
  }
4002
4075
 
4003
- export class DefaultService {
4076
+ export class CommunityService {
4077
+ /**
4078
+ * Relay a sanitized parser-contribution payload
4079
+ * A server-side bot re-sanitizes the payload and opens an issue on the target repository; the issue URL is returned. The payload is never persisted or logged (forward-and-drop).
4080
+ * @param data The data for the request.
4081
+ * @param data.region Region code for tenant context (routing only; the institution region rides in the payload meta)
4082
+ * @param data.requestBody
4083
+ * @returns ParserContributionRelayResponseDto Issue created by the bot
4084
+ * @throws ApiError
4085
+ */
4086
+ public static parserContributionControllerCreate(
4087
+ data: ParserContributionControllerCreateData
4088
+ ): CancelablePromise<ParserContributionControllerCreateResponse> {
4089
+ return __request(OpenAPI, {
4090
+ method: 'POST',
4091
+ url: '/api/v1/{region}/community/parser-contributions',
4092
+ path: {
4093
+ region: data.region
4094
+ },
4095
+ body: data.requestBody,
4096
+ mediaType: 'application/json',
4097
+ errors: {
4098
+ 401: 'Unauthorized',
4099
+ 422: 'Validation failed (institution slug, empty samples, row/cell size limits)',
4100
+ 429: 'Rate limited (5 submissions per user per hour)',
4101
+ 501: 'Relay not configured on this deployment — clients fall back to the clipboard flow',
4102
+ 502: 'GitHub bot failure (upstream), safe to retry'
4103
+ }
4104
+ });
4105
+ }
4106
+ }
4107
+
4108
+ export class AdminCacheService {
4004
4109
  /**
4005
- * @returns unknown
4110
+ * Flush entire cache (L1 + L2)
4111
+ * Clears ALL cache entries across ALL namespaces and users. Use only for emergency cache corruption recovery, maintenance-window refresh, or development resets.
4112
+ * @returns unknown Cache flushed successfully
4006
4113
  * @throws ApiError
4007
4114
  */
4008
4115
  public static cacheControllerFlushCache(): CancelablePromise<CacheControllerFlushCacheResponse> {
4009
4116
  return __request(OpenAPI, {
4010
4117
  method: 'POST',
4011
- url: '/api/v1/cache/flush'
4118
+ url: '/api/v1/cache/flush',
4119
+ errors: {
4120
+ 403: 'Admin access required'
4121
+ }
4012
4122
  });
4013
4123
  }
4014
4124
  }
@@ -4169,3 +4279,53 @@ export class InfoService {
4169
4279
  });
4170
4280
  }
4171
4281
  }
4282
+
4283
+ export class MarketDataService {
4284
+ /**
4285
+ * Search market symbols by name or code
4286
+ * Ranked search over the openbb catalog. Empty `q` returns [].
4287
+ * @param data The data for the request.
4288
+ * @param data.q Search term — matched against symbol and instrument name. Empty string returns [].
4289
+ * @param data.limit Maximum number of results (clamped 1..50)
4290
+ * @param data.exchange Filter by exchange code (e.g. US, HK, SS, SZ)
4291
+ * @param data.assetType Filter by OpenBB asset_type (e.g. stock, etf)
4292
+ * @returns SymbolSearchResultDto Ranked search results
4293
+ * @throws ApiError
4294
+ */
4295
+ public static symbolControllerSearch(
4296
+ data: SymbolControllerSearchData
4297
+ ): CancelablePromise<SymbolControllerSearchResponse> {
4298
+ return __request(OpenAPI, {
4299
+ method: 'GET',
4300
+ url: '/api/v1/market/symbols/search',
4301
+ query: {
4302
+ q: data.q,
4303
+ limit: data.limit,
4304
+ exchange: data.exchange,
4305
+ assetType: data.assetType
4306
+ }
4307
+ });
4308
+ }
4309
+
4310
+ /**
4311
+ * Get a market symbol quote
4312
+ * @param data The data for the request.
4313
+ * @param data.symbol
4314
+ * @returns SymbolQuoteDto Symbol quote
4315
+ * @throws ApiError
4316
+ */
4317
+ public static symbolControllerGetQuote(
4318
+ data: SymbolControllerGetQuoteData
4319
+ ): CancelablePromise<SymbolControllerGetQuoteResponse> {
4320
+ return __request(OpenAPI, {
4321
+ method: 'GET',
4322
+ url: '/api/v1/market/symbols/{symbol}/quote',
4323
+ path: {
4324
+ symbol: data.symbol
4325
+ },
4326
+ errors: {
4327
+ 404: 'Symbol not found in the openbb catalog'
4328
+ }
4329
+ });
4330
+ }
4331
+ }