@firela/api-types 0.0.0-canary.9256c41b → 0.0.0-canary.97006feb

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -2375,6 +2375,298 @@ type ForecastResponseDto = {
2375
2375
  */
2376
2376
  periodEnd: string;
2377
2377
  };
2378
+ type CurrencyBalanceDto = {
2379
+ /**
2380
+ * ISO 4217 currency code
2381
+ */
2382
+ currency: string;
2383
+ /**
2384
+ * Balance amount
2385
+ */
2386
+ balance: string;
2387
+ };
2388
+ type TimeSeriesPointDto = {
2389
+ /**
2390
+ * Date in YYYY-MM-DD format
2391
+ */
2392
+ date: string;
2393
+ /**
2394
+ * Value at this date (in base currency)
2395
+ */
2396
+ value: string;
2397
+ /**
2398
+ * Change from previous point
2399
+ */
2400
+ change?: {
2401
+ [key: string]: unknown;
2402
+ };
2403
+ /**
2404
+ * Total assets at this date (in base currency)
2405
+ */
2406
+ assets?: string;
2407
+ /**
2408
+ * Total liabilities at this date (in base currency)
2409
+ */
2410
+ liabilities?: string;
2411
+ /**
2412
+ * Multi-currency breakdown for this point
2413
+ */
2414
+ byCurrency?: Array<CurrencyBalanceDto>;
2415
+ };
2416
+ type TrendSummaryDto = {
2417
+ /**
2418
+ * Value at start of period
2419
+ */
2420
+ startValue: string;
2421
+ /**
2422
+ * Value at end of period
2423
+ */
2424
+ endValue: string;
2425
+ /**
2426
+ * Total change over period
2427
+ */
2428
+ totalChange: string;
2429
+ /**
2430
+ * Total change percentage
2431
+ */
2432
+ totalChangePercentage: string;
2433
+ };
2434
+ type MultiCurrencyPointDto = {
2435
+ /**
2436
+ * Date in YYYY-MM-DD format
2437
+ */
2438
+ date: string;
2439
+ /**
2440
+ * Balances by currency
2441
+ */
2442
+ byCurrency: Array<CurrencyBalanceDto>;
2443
+ };
2444
+ type PortfolioTrendsResponseDto = {
2445
+ /**
2446
+ * Time series data points
2447
+ */
2448
+ series: Array<TimeSeriesPointDto>;
2449
+ /**
2450
+ * Period summary
2451
+ */
2452
+ summary: TrendSummaryDto;
2453
+ /**
2454
+ * Period requested
2455
+ */
2456
+ period: string;
2457
+ /**
2458
+ * Data granularity
2459
+ */
2460
+ granularity: string;
2461
+ /**
2462
+ * Base currency for converted values
2463
+ */
2464
+ currency: string;
2465
+ /**
2466
+ * Multi-currency time series (each point has currency breakdown)
2467
+ */
2468
+ byCurrency?: Array<MultiCurrencyPointDto>;
2469
+ /**
2470
+ * Exchange rate warnings
2471
+ */
2472
+ warnings?: Array<ExchangeRateWarningDto>;
2473
+ };
2474
+ type CashFlowPointDto = {
2475
+ /**
2476
+ * Month key (YYYY-MM)
2477
+ */
2478
+ month: string;
2479
+ /**
2480
+ * Income in base currency (absolute, converted)
2481
+ */
2482
+ income: string;
2483
+ /**
2484
+ * Expense in base currency (absolute, converted)
2485
+ */
2486
+ expense: string;
2487
+ /**
2488
+ * netSavings = income − expense (savings positive)
2489
+ */
2490
+ netSavings: string;
2491
+ };
2492
+ type CashFlowTrendSummaryDto = {
2493
+ /**
2494
+ * Total income across the period
2495
+ */
2496
+ totalIncome: string;
2497
+ /**
2498
+ * Total expense across the period
2499
+ */
2500
+ totalExpense: string;
2501
+ /**
2502
+ * income − expense across the period
2503
+ */
2504
+ totalNetSavings: string;
2505
+ /**
2506
+ * totalNetSavings divided by the window length (N months, incl. zero-filled)
2507
+ */
2508
+ averageMonthlyNetSavings: string;
2509
+ };
2510
+ type CashFlowTrendsResponseDto = {
2511
+ /**
2512
+ * Monthly cash-flow series (fixed N-month window, zero-filled)
2513
+ */
2514
+ series: Array<CashFlowPointDto>;
2515
+ /**
2516
+ * Period totals
2517
+ */
2518
+ summary: CashFlowTrendSummaryDto;
2519
+ /**
2520
+ * Period requested
2521
+ */
2522
+ period: string;
2523
+ /**
2524
+ * Data granularity (v1 returns month buckets)
2525
+ */
2526
+ granularity: string;
2527
+ /**
2528
+ * Base currency for converted values
2529
+ */
2530
+ currency: string;
2531
+ /**
2532
+ * Exchange rate warnings (e.g. missing rate for a currency)
2533
+ */
2534
+ warnings?: Array<ExchangeRateWarningDto>;
2535
+ };
2536
+ type GenerateSnapshotBody = unknown;
2537
+ type GenerateSnapshotResponse = unknown;
2538
+ type BackfillSnapshotsBody = unknown;
2539
+ type BackfillSnapshotsResponse = unknown;
2540
+ type DeleteOwnUserDto = {
2541
+ /**
2542
+ * Access token for user verification
2543
+ */
2544
+ accessToken: string;
2545
+ };
2546
+ type SignupDto = {
2547
+ /**
2548
+ * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2549
+ */
2550
+ turnstileToken?: string;
2551
+ };
2552
+ type SignupResponseDto = {
2553
+ /**
2554
+ * JWT auth token
2555
+ */
2556
+ authToken: string;
2557
+ /**
2558
+ * Auto-generated access token
2559
+ */
2560
+ accessToken: string;
2561
+ /**
2562
+ * Assigned user role
2563
+ */
2564
+ role: 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2565
+ };
2566
+ /**
2567
+ * Assigned user role
2568
+ */
2569
+ type role = 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2570
+ type UpdateUserSettingDto = {
2571
+ /**
2572
+ * Security ID
2573
+ */
2574
+ secId?: number;
2575
+ /**
2576
+ * Annual interest rate
2577
+ */
2578
+ annualInterestRate?: number;
2579
+ /**
2580
+ * Currency code
2581
+ */
2582
+ currency?: string;
2583
+ /**
2584
+ * Base currency code
2585
+ */
2586
+ baseCurrency?: string;
2587
+ /**
2588
+ * Benchmark symbol
2589
+ */
2590
+ benchmark?: string;
2591
+ /**
2592
+ * Color scheme
2593
+ */
2594
+ colorScheme?: 'DARK' | 'LIGHT';
2595
+ /**
2596
+ * Date range filter
2597
+ */
2598
+ dateRange?: string;
2599
+ /**
2600
+ * Emergency fund amount
2601
+ */
2602
+ emergencyFund?: number;
2603
+ /**
2604
+ * Account filter IDs
2605
+ */
2606
+ 'filters.accounts'?: Array<string>;
2607
+ /**
2608
+ * Asset class filters
2609
+ */
2610
+ 'filters.assetClasses'?: Array<string>;
2611
+ /**
2612
+ * Data source filter
2613
+ */
2614
+ 'filters.dataSource'?: string;
2615
+ /**
2616
+ * Symbol filter
2617
+ */
2618
+ 'filters.symbol'?: string;
2619
+ /**
2620
+ * Tag filters
2621
+ */
2622
+ 'filters.tags'?: Array<string>;
2623
+ /**
2624
+ * Enable experimental features
2625
+ */
2626
+ isExperimentalFeatures?: boolean;
2627
+ /**
2628
+ * Enable restricted view mode
2629
+ */
2630
+ isRestrictedView?: boolean;
2631
+ /**
2632
+ * Language code
2633
+ */
2634
+ language?: string;
2635
+ /**
2636
+ * Locale code
2637
+ */
2638
+ locale?: string;
2639
+ /**
2640
+ * Projected total amount
2641
+ */
2642
+ projectedTotalAmount?: number;
2643
+ /**
2644
+ * Retirement date in ISO 8601 format
2645
+ */
2646
+ retirementDate?: string;
2647
+ /**
2648
+ * Savings rate percentage
2649
+ */
2650
+ savingsRate?: number;
2651
+ /**
2652
+ * View mode
2653
+ */
2654
+ viewMode?: 'DEFAULT' | 'ZEN';
2655
+ };
2656
+ /**
2657
+ * Color scheme
2658
+ */
2659
+ type colorScheme = 'DARK' | 'LIGHT';
2660
+ /**
2661
+ * View mode
2662
+ */
2663
+ type viewMode = 'DEFAULT' | 'ZEN';
2664
+ type UpdatePropertyDto = {
2665
+ /**
2666
+ * Property value
2667
+ */
2668
+ value: string;
2669
+ };
2378
2670
  type CreateTransactionRuleDto = {
2379
2671
  name: string;
2380
2672
  description?: string;
@@ -2671,177 +2963,47 @@ type UpdateTransactionRuleDto = {
2671
2963
  /**
2672
2964
  * Minimum transaction amount (inclusive)
2673
2965
  */
2674
- amountMin?: number;
2675
- /**
2676
- * Maximum transaction amount (inclusive)
2677
- */
2678
- amountMax?: number;
2679
- priority?: number;
2680
- /**
2681
- * Enable or disable the rule
2682
- */
2683
- enabled?: boolean;
2684
- additionalTags?: Array<unknown[]>;
2685
- additionalMetadata?: {
2686
- [key: string]: unknown;
2687
- };
2688
- };
2689
- type TestRuleDto = {
2690
- narration: string;
2691
- payee?: string;
2692
- categoryAccount?: string;
2693
- amount?: number;
2694
- currency?: string;
2695
- };
2696
- type TestRuleResponseDto = {
2697
- /**
2698
- * Rule ID that was tested
2699
- */
2700
- ruleId: string;
2701
- /**
2702
- * Whether the rule matched the test data
2703
- */
2704
- matches: boolean;
2705
- /**
2706
- * Match confidence score (0-1)
2707
- */
2708
- confidence: number;
2709
- /**
2710
- * Details of which fields matched
2711
- */
2712
- matchDetails: {
2713
- [key: string]: unknown;
2714
- };
2715
- };
2716
- type DeleteOwnUserDto = {
2717
- /**
2718
- * Access token for user verification
2719
- */
2720
- accessToken: string;
2721
- };
2722
- type SignupDto = {
2723
- /**
2724
- * Cloudflare Turnstile verification token (optional when Turnstile disabled)
2725
- */
2726
- turnstileToken?: string;
2727
- };
2728
- type SignupResponseDto = {
2729
- /**
2730
- * JWT auth token
2731
- */
2732
- authToken: string;
2733
- /**
2734
- * Auto-generated access token
2735
- */
2736
- accessToken: string;
2737
- /**
2738
- * Assigned user role
2739
- */
2740
- role: 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2741
- };
2742
- /**
2743
- * Assigned user role
2744
- */
2745
- type role = 'USER' | 'ADMIN' | 'DEMO' | 'INACTIVE' | 'PAID' | 'OPS';
2746
- type UpdateUserSettingDto = {
2747
- /**
2748
- * Security ID
2749
- */
2750
- secId?: number;
2751
- /**
2752
- * Annual interest rate
2753
- */
2754
- annualInterestRate?: number;
2755
- /**
2756
- * Currency code
2757
- */
2758
- currency?: string;
2759
- /**
2760
- * Base currency code
2761
- */
2762
- baseCurrency?: string;
2763
- /**
2764
- * Benchmark symbol
2765
- */
2766
- benchmark?: string;
2767
- /**
2768
- * Color scheme
2769
- */
2770
- colorScheme?: 'DARK' | 'LIGHT';
2771
- /**
2772
- * Date range filter
2773
- */
2774
- dateRange?: string;
2775
- /**
2776
- * Emergency fund amount
2777
- */
2778
- emergencyFund?: number;
2779
- /**
2780
- * Account filter IDs
2781
- */
2782
- 'filters.accounts'?: Array<string>;
2783
- /**
2784
- * Asset class filters
2785
- */
2786
- 'filters.assetClasses'?: Array<string>;
2787
- /**
2788
- * Data source filter
2789
- */
2790
- 'filters.dataSource'?: string;
2791
- /**
2792
- * Symbol filter
2793
- */
2794
- 'filters.symbol'?: string;
2795
- /**
2796
- * Tag filters
2797
- */
2798
- 'filters.tags'?: Array<string>;
2799
- /**
2800
- * Enable experimental features
2801
- */
2802
- isExperimentalFeatures?: boolean;
2803
- /**
2804
- * Enable restricted view mode
2805
- */
2806
- isRestrictedView?: boolean;
2807
- /**
2808
- * Language code
2809
- */
2810
- language?: string;
2966
+ amountMin?: number;
2811
2967
  /**
2812
- * Locale code
2968
+ * Maximum transaction amount (inclusive)
2813
2969
  */
2814
- locale?: string;
2970
+ amountMax?: number;
2971
+ priority?: number;
2815
2972
  /**
2816
- * Projected total amount
2973
+ * Enable or disable the rule
2817
2974
  */
2818
- projectedTotalAmount?: number;
2975
+ enabled?: boolean;
2976
+ additionalTags?: Array<unknown[]>;
2977
+ additionalMetadata?: {
2978
+ [key: string]: unknown;
2979
+ };
2980
+ };
2981
+ type TestRuleDto = {
2982
+ narration: string;
2983
+ payee?: string;
2984
+ categoryAccount?: string;
2985
+ amount?: number;
2986
+ currency?: string;
2987
+ };
2988
+ type TestRuleResponseDto = {
2819
2989
  /**
2820
- * Retirement date in ISO 8601 format
2990
+ * Rule ID that was tested
2821
2991
  */
2822
- retirementDate?: string;
2992
+ ruleId: string;
2823
2993
  /**
2824
- * Savings rate percentage
2994
+ * Whether the rule matched the test data
2825
2995
  */
2826
- savingsRate?: number;
2996
+ matches: boolean;
2827
2997
  /**
2828
- * View mode
2998
+ * Match confidence score (0-1)
2829
2999
  */
2830
- viewMode?: 'DEFAULT' | 'ZEN';
2831
- };
2832
- /**
2833
- * Color scheme
2834
- */
2835
- type colorScheme = 'DARK' | 'LIGHT';
2836
- /**
2837
- * View mode
2838
- */
2839
- type viewMode = 'DEFAULT' | 'ZEN';
2840
- type UpdatePropertyDto = {
3000
+ confidence: number;
2841
3001
  /**
2842
- * Property value
3002
+ * Details of which fields matched
2843
3003
  */
2844
- value: string;
3004
+ matchDetails: {
3005
+ [key: string]: unknown;
3006
+ };
2845
3007
  };
2846
3008
  type CreateBeanEventDto = {
2847
3009
  /**
@@ -3842,7 +4004,7 @@ type NlpResponseDto = {
3842
4004
  /**
3843
4005
  * Action taken or requested
3844
4006
  */
3845
- action: 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel';
4007
+ action: 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel' | 'aborted';
3846
4008
  /**
3847
4009
  * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
3848
4010
  */
@@ -3946,7 +4108,7 @@ type status4 = 'success' | 'pending' | 'error';
3946
4108
  /**
3947
4109
  * Action taken or requested
3948
4110
  */
3949
- type action2 = 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel';
4111
+ type action2 = 'created' | 'ask' | 'confirm' | 'confirm_duplicate' | 'confirm_rule' | 'confirm_account' | 'confirm_payee' | 'cancel' | 'aborted';
3950
4112
  /**
3951
4113
  * Transaction intent detected by EntityRouter (v6.0: 5 core intents). Frontend uses this to render scenario-specific form fields.
3952
4114
  */
@@ -4621,305 +4783,143 @@ type CurrentPriceDto = {
4621
4783
  */
4622
4784
  source: 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4623
4785
  };
4624
- /**
4625
- * Price source
4626
- */
4627
- type source3 = 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4628
- type FxRateDto = {
4629
- from: string;
4630
- to: string;
4631
- /**
4632
- * FX rate (Decimal string)
4633
- */
4634
- rate: string;
4635
- /**
4636
- * Rate date (ISO 8601)
4637
- */
4638
- date: string;
4639
- };
4640
- type HoldingPnlRowDto = {
4641
- /**
4642
- * Account UUID
4643
- */
4644
- accountId: string;
4645
- /**
4646
- * Full account path
4647
- */
4648
- accountPath: string;
4649
- /**
4650
- * Account settlement currency (ISO 4217), from cost currency
4651
- */
4652
- accountCcy?: {
4653
- [key: string]: unknown;
4654
- } | null;
4655
- /**
4656
- * Broker type derived from Platform.type
4657
- */
4658
- brokerType?: {
4659
- [key: string]: unknown;
4660
- } | null;
4661
- /**
4662
- * Commodity symbol
4663
- */
4664
- symbol: string;
4665
- /**
4666
- * Chart segment token (libs/common resolver)
4667
- */
4668
- chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4669
- assetClass: string;
4670
- assetSubClass?: {
4671
- [key: string]: unknown;
4672
- } | null;
4673
- /**
4674
- * Net held units (Decimal string)
4675
- */
4676
- units: string;
4677
- /**
4678
- * Average cost per unit; null when cost currency conflicts or no cost
4679
- */
4680
- averageCostPerUnit?: MonetaryDto | null;
4681
- /**
4682
- * Cost basis of held units
4683
- */
4684
- costBasis?: MonetaryDto | null;
4685
- /**
4686
- * Market value at asOf price
4687
- */
4688
- marketValue?: MonetaryDto | null;
4689
- /**
4690
- * Price used for market value
4691
- */
4692
- currentPrice?: CurrentPriceDto | null;
4693
- /**
4694
- * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
4695
- */
4696
- unrealizedPnlBase?: {
4697
- [key: string]: unknown;
4698
- } | null;
4699
- /**
4700
- * Unrealized P&L % (Decimal string)
4701
- */
4702
- unrealizedPnlPct?: {
4703
- [key: string]: unknown;
4704
- } | null;
4705
- /**
4706
- * Historical FX rate applied to cost basis
4707
- */
4708
- costFxRate?: FxRateDto | null;
4709
- /**
4710
- * FX rate applied to market value
4711
- */
4712
- marketFxRate?: FxRateDto | null;
4713
- /**
4714
- * Share of invested assets % (Decimal string); only for invested chartTokens
4715
- */
4716
- pctOfInvestedAssets?: {
4717
- [key: string]: unknown;
4718
- } | null;
4719
- /**
4720
- * Cumulative realized P&L on sold lots (asOf-date cutoff); null when the method has no applicable sells, a sell lacks a price, or any required FX rate is missing (never-mix). When a sell spans multiple currencies (cross-currency sale), amount and currency reflect the base currency; baseCcyEquivalent is always the authoritative dual-FX figure
4721
- */
4722
- realizedPnl?: MonetaryDto | null;
4723
- };
4724
- /**
4725
- * Chart segment token (libs/common resolver)
4726
- */
4727
- type chartToken = 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4728
- type HoldingPnlWarningDto = {
4729
- /**
4730
- * Warning type
4731
- */
4732
- type: 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4733
- symbol?: {
4734
- [key: string]: unknown;
4735
- } | null;
4736
- accountId?: {
4737
- [key: string]: unknown;
4738
- } | null;
4739
- currency?: {
4740
- [key: string]: unknown;
4741
- } | null;
4742
- };
4743
- /**
4744
- * Warning type
4745
- */
4746
- type type4 = 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4747
- type HoldingPnlResponseDto = {
4748
- asOfDate: string;
4749
- baseCurrency: string;
4750
- /**
4751
- * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4752
- */
4753
- method: 'average' | 'FIFO';
4754
- rows: Array<HoldingPnlRowDto>;
4755
- warnings: Array<HoldingPnlWarningDto>;
4756
- };
4757
- /**
4758
- * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4759
- */
4760
- type method = 'average' | 'FIFO';
4761
- type CurrencyBalanceDto = {
4762
- /**
4763
- * ISO 4217 currency code
4764
- */
4765
- currency: string;
4766
- /**
4767
- * Balance amount
4768
- */
4769
- balance: string;
4770
- };
4771
- type TimeSeriesPointDto = {
4772
- /**
4773
- * Date in YYYY-MM-DD format
4774
- */
4775
- date: string;
4776
- /**
4777
- * Value at this date (in base currency)
4778
- */
4779
- value: string;
4780
- /**
4781
- * Change from previous point
4782
- */
4783
- change?: {
4784
- [key: string]: unknown;
4785
- };
4786
- /**
4787
- * Total assets at this date (in base currency)
4788
- */
4789
- assets?: string;
4790
- /**
4791
- * Total liabilities at this date (in base currency)
4792
- */
4793
- liabilities?: string;
4794
- /**
4795
- * Multi-currency breakdown for this point
4796
- */
4797
- byCurrency?: Array<CurrencyBalanceDto>;
4798
- };
4799
- type TrendSummaryDto = {
4800
- /**
4801
- * Value at start of period
4802
- */
4803
- startValue: string;
4804
- /**
4805
- * Value at end of period
4806
- */
4807
- endValue: string;
4808
- /**
4809
- * Total change over period
4810
- */
4811
- totalChange: string;
4812
- /**
4813
- * Total change percentage
4814
- */
4815
- totalChangePercentage: string;
4816
- };
4817
- type MultiCurrencyPointDto = {
4818
- /**
4819
- * Date in YYYY-MM-DD format
4820
- */
4821
- date: string;
4822
- /**
4823
- * Balances by currency
4824
- */
4825
- byCurrency: Array<CurrencyBalanceDto>;
4826
- };
4827
- type PortfolioTrendsResponseDto = {
4786
+ /**
4787
+ * Price source
4788
+ */
4789
+ type source3 = 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4790
+ type FxRateDto = {
4791
+ from: string;
4792
+ to: string;
4828
4793
  /**
4829
- * Time series data points
4794
+ * FX rate (Decimal string)
4830
4795
  */
4831
- series: Array<TimeSeriesPointDto>;
4796
+ rate: string;
4832
4797
  /**
4833
- * Period summary
4798
+ * Rate date (ISO 8601)
4834
4799
  */
4835
- summary: TrendSummaryDto;
4800
+ date: string;
4801
+ };
4802
+ type HoldingPnlRowDto = {
4836
4803
  /**
4837
- * Period requested
4804
+ * Account UUID
4838
4805
  */
4839
- period: string;
4806
+ accountId: string;
4840
4807
  /**
4841
- * Data granularity
4808
+ * Full account path
4842
4809
  */
4843
- granularity: string;
4810
+ accountPath: string;
4844
4811
  /**
4845
- * Base currency for converted values
4812
+ * Account settlement currency (ISO 4217), from cost currency
4846
4813
  */
4847
- currency: string;
4814
+ accountCcy?: {
4815
+ [key: string]: unknown;
4816
+ } | null;
4848
4817
  /**
4849
- * Multi-currency time series (each point has currency breakdown)
4818
+ * Broker type derived from Platform.type
4850
4819
  */
4851
- byCurrency?: Array<MultiCurrencyPointDto>;
4820
+ brokerType?: {
4821
+ [key: string]: unknown;
4822
+ } | null;
4852
4823
  /**
4853
- * Exchange rate warnings
4824
+ * Commodity symbol
4854
4825
  */
4855
- warnings?: Array<ExchangeRateWarningDto>;
4856
- };
4857
- type CashFlowPointDto = {
4826
+ symbol: string;
4858
4827
  /**
4859
- * Month key (YYYY-MM)
4828
+ * Chart segment token (libs/common resolver)
4860
4829
  */
4861
- month: string;
4830
+ chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4831
+ assetClass: string;
4832
+ assetSubClass?: {
4833
+ [key: string]: unknown;
4834
+ } | null;
4862
4835
  /**
4863
- * Income in base currency (absolute, converted)
4836
+ * Net held units (Decimal string)
4864
4837
  */
4865
- income: string;
4838
+ units: string;
4866
4839
  /**
4867
- * Expense in base currency (absolute, converted)
4840
+ * Average cost per unit; null when cost currency conflicts or no cost
4868
4841
  */
4869
- expense: string;
4842
+ averageCostPerUnit?: MonetaryDto | null;
4870
4843
  /**
4871
- * netSavings = income expense (savings positive)
4844
+ * Cost basis of held units
4872
4845
  */
4873
- netSavings: string;
4874
- };
4875
- type CashFlowTrendSummaryDto = {
4846
+ costBasis?: MonetaryDto | null;
4876
4847
  /**
4877
- * Total income across the period
4848
+ * Market value at asOf price
4878
4849
  */
4879
- totalIncome: string;
4850
+ marketValue?: MonetaryDto | null;
4880
4851
  /**
4881
- * Total expense across the period
4852
+ * Price used for market value
4882
4853
  */
4883
- totalExpense: string;
4854
+ currentPrice?: CurrentPriceDto | null;
4884
4855
  /**
4885
- * income expense across the period
4856
+ * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
4886
4857
  */
4887
- totalNetSavings: string;
4858
+ unrealizedPnlBase?: {
4859
+ [key: string]: unknown;
4860
+ } | null;
4888
4861
  /**
4889
- * totalNetSavings divided by the window length (N months, incl. zero-filled)
4862
+ * Unrealized P&L % (Decimal string)
4890
4863
  */
4891
- averageMonthlyNetSavings: string;
4892
- };
4893
- type CashFlowTrendsResponseDto = {
4864
+ unrealizedPnlPct?: {
4865
+ [key: string]: unknown;
4866
+ } | null;
4894
4867
  /**
4895
- * Monthly cash-flow series (fixed N-month window, zero-filled)
4868
+ * Historical FX rate applied to cost basis
4896
4869
  */
4897
- series: Array<CashFlowPointDto>;
4870
+ costFxRate?: FxRateDto | null;
4898
4871
  /**
4899
- * Period totals
4872
+ * FX rate applied to market value
4900
4873
  */
4901
- summary: CashFlowTrendSummaryDto;
4874
+ marketFxRate?: FxRateDto | null;
4902
4875
  /**
4903
- * Period requested
4876
+ * Share of invested assets % (Decimal string); only for invested chartTokens
4904
4877
  */
4905
- period: string;
4878
+ pctOfInvestedAssets?: {
4879
+ [key: string]: unknown;
4880
+ } | null;
4906
4881
  /**
4907
- * Data granularity (v1 returns month buckets)
4882
+ * Cumulative realized P&L on sold lots (asOf-date cutoff); null when the method has no applicable sells, a sell lacks a price, or any required FX rate is missing (never-mix). When a sell spans multiple currencies (cross-currency sale), amount and currency reflect the base currency; baseCcyEquivalent is always the authoritative dual-FX figure
4908
4883
  */
4909
- granularity: string;
4884
+ realizedPnl?: MonetaryDto | null;
4885
+ };
4886
+ /**
4887
+ * Chart segment token (libs/common resolver)
4888
+ */
4889
+ type chartToken = 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4890
+ type HoldingPnlWarningDto = {
4910
4891
  /**
4911
- * Base currency for converted values
4892
+ * Warning type
4912
4893
  */
4913
- currency: string;
4894
+ type: 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4895
+ symbol?: {
4896
+ [key: string]: unknown;
4897
+ } | null;
4898
+ accountId?: {
4899
+ [key: string]: unknown;
4900
+ } | null;
4901
+ currency?: {
4902
+ [key: string]: unknown;
4903
+ } | null;
4904
+ };
4905
+ /**
4906
+ * Warning type
4907
+ */
4908
+ type type4 = 'MISSING_COST_FX_RATE' | 'MISSING_MARKET_FX_RATE' | 'MISSING_SALE_PRICE' | 'MISSING_REALIZED_FX_RATE' | 'OVERSOLD_LOTS' | 'NO_PRICE' | 'MIXED_COST_CURRENCY';
4909
+ type HoldingPnlResponseDto = {
4910
+ asOfDate: string;
4911
+ baseCurrency: string;
4914
4912
  /**
4915
- * Exchange rate warnings (e.g. missing rate for a currency)
4913
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4916
4914
  */
4917
- warnings?: Array<ExchangeRateWarningDto>;
4915
+ method: 'average' | 'FIFO';
4916
+ rows: Array<HoldingPnlRowDto>;
4917
+ warnings: Array<HoldingPnlWarningDto>;
4918
4918
  };
4919
- type GenerateSnapshotBody = unknown;
4920
- type GenerateSnapshotResponse = unknown;
4921
- type BackfillSnapshotsBody = unknown;
4922
- type BackfillSnapshotsResponse = unknown;
4919
+ /**
4920
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4921
+ */
4922
+ type method = 'average' | 'FIFO';
4923
4923
  type AnonymousLoginDto = {
4924
4924
  /**
4925
4925
  * Access token for anonymous login
@@ -5775,23 +5775,137 @@ type ExpectedTransactionControllerEnterNowData = {
5775
5775
  */
5776
5776
  id: string;
5777
5777
  /**
5778
- * Region code for tenant context
5778
+ * Region code for tenant context
5779
+ */
5780
+ region: 'cn' | 'us' | 'de' | 'gb';
5781
+ requestBody: EnterNowDto;
5782
+ };
5783
+ type ExpectedTransactionControllerEnterNowResponse = unknown;
5784
+ type ForecastControllerGetForecastData = {
5785
+ /**
5786
+ * Number of months to forecast (1-12, default 3)
5787
+ */
5788
+ months?: number;
5789
+ /**
5790
+ * Region code for tenant context
5791
+ */
5792
+ region: 'cn' | 'us' | 'de' | 'gb';
5793
+ };
5794
+ type ForecastControllerGetForecastResponse = ForecastResponseDto;
5795
+ type ReportingControllerGetPortfolioTrendsData = {
5796
+ /**
5797
+ * Data granularity
5798
+ */
5799
+ granularity?: 'day' | 'week' | 'month';
5800
+ /**
5801
+ * Time period
5802
+ */
5803
+ period?: '1m' | '3m' | '6m' | '1y';
5804
+ /**
5805
+ * Region code for tenant context
5806
+ */
5807
+ region: 'cn' | 'us' | 'de' | 'gb';
5808
+ };
5809
+ type ReportingControllerGetPortfolioTrendsResponse = PortfolioTrendsResponseDto;
5810
+ type ReportingControllerGetCashFlowTrendsData = {
5811
+ /**
5812
+ * Data granularity (accepted for API symmetry; v1 returns month buckets)
5813
+ */
5814
+ granularity?: 'day' | 'week' | 'month';
5815
+ /**
5816
+ * Time period
5817
+ */
5818
+ period?: '1m' | '3m' | '6m' | '1y';
5819
+ /**
5820
+ * Region code for tenant context
5821
+ */
5822
+ region: 'cn' | 'us' | 'de' | 'gb';
5823
+ };
5824
+ type ReportingControllerGetCashFlowTrendsResponse = CashFlowTrendsResponseDto;
5825
+ type ReportingControllerGenerateSnapshotData = {
5826
+ /**
5827
+ * Region code for tenant context
5828
+ */
5829
+ region: 'cn' | 'us' | 'de' | 'gb';
5830
+ /**
5831
+ * Optional date (defaults to today)
5832
+ */
5833
+ requestBody: GenerateSnapshotBody;
5834
+ };
5835
+ type ReportingControllerGenerateSnapshotResponse = GenerateSnapshotResponse;
5836
+ type ReportingControllerBackfillSnapshotsData = {
5837
+ /**
5838
+ * Region code for tenant context
5839
+ */
5840
+ region: 'cn' | 'us' | 'de' | 'gb';
5841
+ requestBody: BackfillSnapshotsBody;
5842
+ };
5843
+ type ReportingControllerBackfillSnapshotsResponse = BackfillSnapshotsResponse;
5844
+ type UserControllerDeleteOwnUserData = {
5845
+ requestBody: DeleteOwnUserDto;
5846
+ };
5847
+ type UserControllerDeleteOwnUserResponse = void;
5848
+ type UserControllerGetUserData = {
5849
+ acceptLanguage: string;
5850
+ };
5851
+ type UserControllerGetUserResponse = unknown;
5852
+ type UserControllerSignupUserData = {
5853
+ requestBody: SignupDto;
5854
+ };
5855
+ type UserControllerSignupUserResponse = SignupResponseDto;
5856
+ type UserControllerDeleteUserData = {
5857
+ /**
5858
+ * User ID to delete
5859
+ */
5860
+ id: string;
5861
+ };
5862
+ type UserControllerDeleteUserResponse = void;
5863
+ type UserControllerGetUserInfoData = {
5864
+ /**
5865
+ * User ID
5866
+ */
5867
+ id: string;
5868
+ };
5869
+ type UserControllerGetUserInfoResponse = unknown;
5870
+ type UserControllerUpdateUserSettingData = {
5871
+ requestBody: UpdateUserSettingDto;
5872
+ };
5873
+ type UserControllerUpdateUserSettingResponse = unknown;
5874
+ type UserControllerGetAllUserSettingsByPageData = {
5875
+ /**
5876
+ * Page number
5877
+ */
5878
+ pageNo: number;
5879
+ /**
5880
+ * Page size
5881
+ */
5882
+ pageSize: number;
5883
+ };
5884
+ type UserControllerGetAllUserSettingsByPageResponse = unknown;
5885
+ type UserControllerGetAssetLiabilitySummaryResponse = unknown;
5886
+ type PropertyControllerGetAllResponse = unknown;
5887
+ type PropertyControllerGetByKeyData = {
5888
+ /**
5889
+ * Property key
5779
5890
  */
5780
- region: 'cn' | 'us' | 'de' | 'gb';
5781
- requestBody: EnterNowDto;
5891
+ key: string;
5782
5892
  };
5783
- type ExpectedTransactionControllerEnterNowResponse = unknown;
5784
- type ForecastControllerGetForecastData = {
5893
+ type PropertyControllerGetByKeyResponse = unknown;
5894
+ type PropertyControllerUpdateData = {
5785
5895
  /**
5786
- * Number of months to forecast (1-12, default 3)
5896
+ * Property key
5787
5897
  */
5788
- months?: number;
5898
+ key: string;
5899
+ requestBody: UpdatePropertyDto;
5900
+ };
5901
+ type PropertyControllerUpdateResponse = unknown;
5902
+ type PropertyControllerDeleteData = {
5789
5903
  /**
5790
- * Region code for tenant context
5904
+ * Property key
5791
5905
  */
5792
- region: 'cn' | 'us' | 'de' | 'gb';
5906
+ key: string;
5793
5907
  };
5794
- type ForecastControllerGetForecastResponse = ForecastResponseDto;
5908
+ type PropertyControllerDeleteResponse = void;
5795
5909
  type TransactionRuleControllerCreateData = {
5796
5910
  /**
5797
5911
  * Region code for tenant context
@@ -5911,71 +6025,6 @@ type TransactionRuleControllerTestData = {
5911
6025
  ruleId: string;
5912
6026
  };
5913
6027
  type TransactionRuleControllerTestResponse = TestRuleResponseDto;
5914
- type UserControllerDeleteOwnUserData = {
5915
- requestBody: DeleteOwnUserDto;
5916
- };
5917
- type UserControllerDeleteOwnUserResponse = void;
5918
- type UserControllerGetUserData = {
5919
- acceptLanguage: string;
5920
- };
5921
- type UserControllerGetUserResponse = unknown;
5922
- type UserControllerSignupUserData = {
5923
- requestBody: SignupDto;
5924
- };
5925
- type UserControllerSignupUserResponse = SignupResponseDto;
5926
- type UserControllerDeleteUserData = {
5927
- /**
5928
- * User ID to delete
5929
- */
5930
- id: string;
5931
- };
5932
- type UserControllerDeleteUserResponse = void;
5933
- type UserControllerGetUserInfoData = {
5934
- /**
5935
- * User ID
5936
- */
5937
- id: string;
5938
- };
5939
- type UserControllerGetUserInfoResponse = unknown;
5940
- type UserControllerUpdateUserSettingData = {
5941
- requestBody: UpdateUserSettingDto;
5942
- };
5943
- type UserControllerUpdateUserSettingResponse = unknown;
5944
- type UserControllerGetAllUserSettingsByPageData = {
5945
- /**
5946
- * Page number
5947
- */
5948
- pageNo: number;
5949
- /**
5950
- * Page size
5951
- */
5952
- pageSize: number;
5953
- };
5954
- type UserControllerGetAllUserSettingsByPageResponse = unknown;
5955
- type UserControllerGetAssetLiabilitySummaryResponse = unknown;
5956
- type PropertyControllerGetAllResponse = unknown;
5957
- type PropertyControllerGetByKeyData = {
5958
- /**
5959
- * Property key
5960
- */
5961
- key: string;
5962
- };
5963
- type PropertyControllerGetByKeyResponse = unknown;
5964
- type PropertyControllerUpdateData = {
5965
- /**
5966
- * Property key
5967
- */
5968
- key: string;
5969
- requestBody: UpdatePropertyDto;
5970
- };
5971
- type PropertyControllerUpdateResponse = unknown;
5972
- type PropertyControllerDeleteData = {
5973
- /**
5974
- * Property key
5975
- */
5976
- key: string;
5977
- };
5978
- type PropertyControllerDeleteResponse = void;
5979
6028
  type EventControllerCreateData = {
5980
6029
  /**
5981
6030
  * Region code for tenant context (decorative for life events)
@@ -6417,55 +6466,6 @@ type HoldingPnlControllerGetHoldingPnlData = {
6417
6466
  region: 'cn' | 'us' | 'de' | 'gb';
6418
6467
  };
6419
6468
  type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6420
- type ReportingControllerGetPortfolioTrendsData = {
6421
- /**
6422
- * Data granularity
6423
- */
6424
- granularity?: 'day' | 'week' | 'month';
6425
- /**
6426
- * Time period
6427
- */
6428
- period?: '1m' | '3m' | '6m' | '1y';
6429
- /**
6430
- * Region code for tenant context
6431
- */
6432
- region: 'cn' | 'us' | 'de' | 'gb';
6433
- };
6434
- type ReportingControllerGetPortfolioTrendsResponse = PortfolioTrendsResponseDto;
6435
- type ReportingControllerGetCashFlowTrendsData = {
6436
- /**
6437
- * Data granularity (accepted for API symmetry; v1 returns month buckets)
6438
- */
6439
- granularity?: 'day' | 'week' | 'month';
6440
- /**
6441
- * Time period
6442
- */
6443
- period?: '1m' | '3m' | '6m' | '1y';
6444
- /**
6445
- * Region code for tenant context
6446
- */
6447
- region: 'cn' | 'us' | 'de' | 'gb';
6448
- };
6449
- type ReportingControllerGetCashFlowTrendsResponse = CashFlowTrendsResponseDto;
6450
- type ReportingControllerGenerateSnapshotData = {
6451
- /**
6452
- * Region code for tenant context
6453
- */
6454
- region: 'cn' | 'us' | 'de' | 'gb';
6455
- /**
6456
- * Optional date (defaults to today)
6457
- */
6458
- requestBody: GenerateSnapshotBody;
6459
- };
6460
- type ReportingControllerGenerateSnapshotResponse = GenerateSnapshotResponse;
6461
- type ReportingControllerBackfillSnapshotsData = {
6462
- /**
6463
- * Region code for tenant context
6464
- */
6465
- region: 'cn' | 'us' | 'de' | 'gb';
6466
- requestBody: BackfillSnapshotsBody;
6467
- };
6468
- type ReportingControllerBackfillSnapshotsResponse = BackfillSnapshotsResponse;
6469
6469
  type ApiKeysControllerCreateApiKeyResponse = unknown;
6470
6470
  type AuthControllerAccessTokenLoginData = {
6471
6471
  requestBody: AnonymousLoginDto;
@@ -7484,479 +7484,551 @@ type $OpenApiTs = {
7484
7484
  /**
7485
7485
  * Skip undone successfully
7486
7486
  */
7487
- 200: ExpectedTransactionResponseDto;
7487
+ 200: ExpectedTransactionResponseDto;
7488
+ /**
7489
+ * Cannot undo - not in SKIPPED status
7490
+ */
7491
+ 400: unknown;
7492
+ /**
7493
+ * Expected transaction not found
7494
+ */
7495
+ 404: unknown;
7496
+ };
7497
+ };
7498
+ };
7499
+ '/api/v1/{region}/bean/expected-transactions/{id}/match': {
7500
+ post: {
7501
+ req: ExpectedTransactionControllerConfirmMatchData;
7502
+ res: {
7503
+ /**
7504
+ * Match confirmed successfully
7505
+ */
7506
+ 200: unknown;
7507
+ /**
7508
+ * Cannot match - not in PENDING status
7509
+ */
7510
+ 400: unknown;
7511
+ /**
7512
+ * Expected or actual transaction not found
7513
+ */
7514
+ 404: unknown;
7515
+ /**
7516
+ * Actual transaction already matched to another rule
7517
+ */
7518
+ 409: unknown;
7519
+ };
7520
+ };
7521
+ delete: {
7522
+ req: ExpectedTransactionControllerUnmatchData;
7523
+ res: {
7524
+ /**
7525
+ * Match removed successfully
7526
+ */
7527
+ 200: unknown;
7528
+ /**
7529
+ * Cannot unmatch - not in COMPLETED status
7530
+ */
7531
+ 400: unknown;
7532
+ /**
7533
+ * Expected transaction not found
7534
+ */
7535
+ 404: unknown;
7536
+ };
7537
+ };
7538
+ };
7539
+ '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
7540
+ post: {
7541
+ req: ExpectedTransactionControllerEnterNowData;
7542
+ res: {
7543
+ /**
7544
+ * Transaction created successfully
7545
+ */
7546
+ 201: unknown;
7547
+ /**
7548
+ * Cannot enter - not in PENDING status or missing accounts
7549
+ */
7550
+ 400: unknown;
7551
+ /**
7552
+ * Expected transaction or accounts not found
7553
+ */
7554
+ 404: unknown;
7555
+ };
7556
+ };
7557
+ };
7558
+ '/api/v1/{region}/bean/recurring/forecast': {
7559
+ get: {
7560
+ req: ForecastControllerGetForecastData;
7561
+ res: {
7562
+ /**
7563
+ * Forecast retrieved successfully
7564
+ */
7565
+ 200: ForecastResponseDto;
7566
+ };
7567
+ };
7568
+ };
7569
+ '/api/v1/{region}/reporting/portfolio/trends': {
7570
+ get: {
7571
+ req: ReportingControllerGetPortfolioTrendsData;
7572
+ res: {
7573
+ /**
7574
+ * Trends retrieved successfully
7575
+ */
7576
+ 200: PortfolioTrendsResponseDto;
7577
+ /**
7578
+ * User not authenticated
7579
+ */
7580
+ 401: unknown;
7581
+ };
7582
+ };
7583
+ };
7584
+ '/api/v1/{region}/reporting/cash-flow/trends': {
7585
+ get: {
7586
+ req: ReportingControllerGetCashFlowTrendsData;
7587
+ res: {
7588
+ /**
7589
+ * Cash-flow trends retrieved successfully
7590
+ */
7591
+ 200: CashFlowTrendsResponseDto;
7592
+ /**
7593
+ * User not authenticated
7594
+ */
7595
+ 401: unknown;
7596
+ };
7597
+ };
7598
+ };
7599
+ '/api/v1/{region}/reporting/snapshots/generate': {
7600
+ post: {
7601
+ req: ReportingControllerGenerateSnapshotData;
7602
+ res: {
7603
+ /**
7604
+ * Snapshot generated successfully
7605
+ */
7606
+ 200: GenerateSnapshotResponse;
7488
7607
  /**
7489
- * Cannot undo - not in SKIPPED status
7608
+ * Invalid date format
7490
7609
  */
7491
7610
  400: unknown;
7492
7611
  /**
7493
- * Expected transaction not found
7612
+ * User not authenticated
7494
7613
  */
7495
- 404: unknown;
7614
+ 401: unknown;
7496
7615
  };
7497
7616
  };
7498
7617
  };
7499
- '/api/v1/{region}/bean/expected-transactions/{id}/match': {
7618
+ '/api/v1/{region}/reporting/snapshots/backfill': {
7500
7619
  post: {
7501
- req: ExpectedTransactionControllerConfirmMatchData;
7620
+ req: ReportingControllerBackfillSnapshotsData;
7502
7621
  res: {
7503
7622
  /**
7504
- * Match confirmed successfully
7623
+ * Backfill completed successfully
7505
7624
  */
7506
- 200: unknown;
7625
+ 200: BackfillSnapshotsResponse;
7507
7626
  /**
7508
- * Cannot match - not in PENDING status
7627
+ * Invalid date format or range
7509
7628
  */
7510
7629
  400: unknown;
7511
7630
  /**
7512
- * Expected or actual transaction not found
7631
+ * User not authenticated
7513
7632
  */
7514
- 404: unknown;
7633
+ 401: unknown;
7515
7634
  /**
7516
- * Actual transaction already matched to another rule
7635
+ * Backfill already in progress for this user
7517
7636
  */
7518
7637
  409: unknown;
7519
7638
  };
7520
7639
  };
7640
+ };
7641
+ '/api/v1/users': {
7521
7642
  delete: {
7522
- req: ExpectedTransactionControllerUnmatchData;
7643
+ req: UserControllerDeleteOwnUserData;
7523
7644
  res: {
7524
7645
  /**
7525
- * Match removed successfully
7646
+ * User deleted successfully
7526
7647
  */
7527
- 200: unknown;
7648
+ 204: void;
7528
7649
  /**
7529
- * Cannot unmatch - not in COMPLETED status
7650
+ * Invalid access token
7530
7651
  */
7531
- 400: unknown;
7652
+ 403: unknown;
7653
+ };
7654
+ };
7655
+ get: {
7656
+ req: UserControllerGetUserData;
7657
+ res: {
7532
7658
  /**
7533
- * Expected transaction not found
7659
+ * User retrieved successfully
7534
7660
  */
7535
- 404: unknown;
7661
+ 200: unknown;
7536
7662
  };
7537
7663
  };
7538
- };
7539
- '/api/v1/{region}/bean/expected-transactions/{id}/enter': {
7540
7664
  post: {
7541
- req: ExpectedTransactionControllerEnterNowData;
7665
+ req: UserControllerSignupUserData;
7542
7666
  res: {
7543
7667
  /**
7544
- * Transaction created successfully
7668
+ * User created successfully
7545
7669
  */
7546
- 201: unknown;
7670
+ 201: SignupResponseDto;
7547
7671
  /**
7548
- * Cannot enter - not in PENDING status or missing accounts
7672
+ * Invalid Turnstile token (when Turnstile is enabled)
7549
7673
  */
7550
7674
  400: unknown;
7551
7675
  /**
7552
- * Expected transaction or accounts not found
7553
- */
7554
- 404: unknown;
7555
- };
7556
- };
7557
- };
7558
- '/api/v1/{region}/bean/recurring/forecast': {
7559
- get: {
7560
- req: ForecastControllerGetForecastData;
7561
- res: {
7562
- /**
7563
- * Forecast retrieved successfully
7676
+ * User signup is disabled
7564
7677
  */
7565
- 200: ForecastResponseDto;
7678
+ 403: unknown;
7566
7679
  };
7567
7680
  };
7568
7681
  };
7569
- '/api/v1/{region}/bean/transaction-rules': {
7570
- post: {
7571
- req: TransactionRuleControllerCreateData;
7682
+ '/api/v1/users/{id}': {
7683
+ delete: {
7684
+ req: UserControllerDeleteUserData;
7572
7685
  res: {
7573
7686
  /**
7574
- * Rule updated successfully (upsert mode)
7575
- */
7576
- 200: TransactionRuleResponseDto;
7577
- /**
7578
- * Validation failed
7579
- */
7580
- 400: ApiProblemResponseDto;
7581
- /**
7582
- * Unauthorized
7687
+ * User deleted successfully
7583
7688
  */
7584
- 401: ApiProblemResponseDto;
7689
+ 204: void;
7585
7690
  /**
7586
- * Resource conflict - another process is updating this rule
7691
+ * Cannot delete own account or insufficient permissions
7587
7692
  */
7588
- 409: ApiProblemResponseDto;
7693
+ 403: unknown;
7589
7694
  };
7590
7695
  };
7696
+ };
7697
+ '/api/v1/users/{id}/info': {
7591
7698
  get: {
7592
- req: TransactionRuleControllerListData;
7699
+ req: UserControllerGetUserInfoData;
7593
7700
  res: {
7594
7701
  /**
7595
- * List of rules
7702
+ * User info retrieved successfully
7596
7703
  */
7597
- 200: TransactionRuleListResponseDto;
7704
+ 200: unknown;
7598
7705
  /**
7599
- * Unauthorized
7706
+ * Cannot access other user info without admin permission
7600
7707
  */
7601
- 401: ApiProblemResponseDto;
7708
+ 403: unknown;
7602
7709
  };
7603
7710
  };
7604
7711
  };
7605
- '/api/v1/{region}/bean/transaction-rules/validate': {
7606
- post: {
7607
- req: TransactionRuleControllerValidateData;
7712
+ '/api/v1/users/setting': {
7713
+ put: {
7714
+ req: UserControllerUpdateUserSettingData;
7608
7715
  res: {
7609
7716
  /**
7610
- * Validation result
7611
- */
7612
- 200: ValidateRuleResponseDto;
7613
- /**
7614
- * Validation failed
7717
+ * Settings updated successfully
7615
7718
  */
7616
- 400: ApiProblemResponseDto;
7719
+ 200: unknown;
7617
7720
  /**
7618
- * Unauthorized
7721
+ * Insufficient permissions
7619
7722
  */
7620
- 401: ApiProblemResponseDto;
7723
+ 403: unknown;
7621
7724
  };
7622
7725
  };
7623
7726
  };
7624
- '/api/v1/{region}/bean/transaction-rules/bulk': {
7625
- post: {
7626
- req: TransactionRuleControllerBulkCreateData;
7727
+ '/api/v1/users/settings-by-page': {
7728
+ get: {
7729
+ req: UserControllerGetAllUserSettingsByPageData;
7627
7730
  res: {
7628
7731
  /**
7629
- * Bulk create completed
7630
- */
7631
- 201: BulkCreateRulesResponseDto;
7632
- /**
7633
- * Invalid bulk create data
7634
- */
7635
- 400: ApiProblemResponseDto;
7636
- /**
7637
- * Unauthorized
7732
+ * Settings list retrieved successfully
7638
7733
  */
7639
- 401: ApiProblemResponseDto;
7734
+ 200: unknown;
7640
7735
  };
7641
7736
  };
7642
7737
  };
7643
- '/api/v1/{region}/bean/transaction-rules/export/{format}': {
7738
+ '/api/v1/users/asset-liability-summary': {
7644
7739
  get: {
7645
- req: TransactionRuleControllerExportData;
7646
7740
  res: {
7647
7741
  /**
7648
- * Exported rules
7649
- */
7650
- 200: ExportRulesResponseDto;
7651
- /**
7652
- * Unsupported format
7653
- */
7654
- 400: ApiProblemResponseDto;
7655
- /**
7656
- * Unauthorized
7742
+ * Summary retrieved successfully
7657
7743
  */
7658
- 401: ApiProblemResponseDto;
7744
+ 200: unknown;
7659
7745
  };
7660
7746
  };
7661
7747
  };
7662
- '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
7748
+ '/api/v1/admin/properties': {
7663
7749
  get: {
7664
- req: TransactionRuleControllerGetStatisticsData;
7665
7750
  res: {
7666
7751
  /**
7667
- * Rule statistics
7752
+ * Properties retrieved successfully
7668
7753
  */
7669
- 200: RuleStatisticsResponseDto;
7754
+ 200: unknown;
7670
7755
  /**
7671
7756
  * Unauthorized
7672
7757
  */
7673
- 401: ApiProblemResponseDto;
7758
+ 401: unknown;
7759
+ /**
7760
+ * Forbidden - insufficient permissions
7761
+ */
7762
+ 403: unknown;
7674
7763
  };
7675
7764
  };
7676
7765
  };
7677
- '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
7766
+ '/api/v1/admin/properties/{key}': {
7678
7767
  get: {
7679
- req: TransactionRuleControllerGetDetailData;
7768
+ req: PropertyControllerGetByKeyData;
7680
7769
  res: {
7681
7770
  /**
7682
- * Rule details
7771
+ * Property retrieved successfully
7683
7772
  */
7684
- 200: TransactionRuleResponseDto;
7773
+ 200: unknown;
7685
7774
  /**
7686
7775
  * Unauthorized
7687
7776
  */
7688
- 401: ApiProblemResponseDto;
7777
+ 401: unknown;
7689
7778
  /**
7690
- * Forbidden - not owner of rule
7779
+ * Forbidden - insufficient permissions
7691
7780
  */
7692
- 403: ApiProblemResponseDto;
7781
+ 403: unknown;
7693
7782
  /**
7694
- * Rule not found
7783
+ * Property not found
7695
7784
  */
7696
- 404: ApiProblemResponseDto;
7785
+ 404: unknown;
7697
7786
  };
7698
7787
  };
7699
7788
  put: {
7700
- req: TransactionRuleControllerUpdateData;
7789
+ req: PropertyControllerUpdateData;
7701
7790
  res: {
7702
7791
  /**
7703
- * Rule updated successfully
7704
- */
7705
- 200: TransactionRuleResponseDto;
7706
- /**
7707
- * Validation failed
7792
+ * Property updated successfully
7708
7793
  */
7709
- 400: ApiProblemResponseDto;
7794
+ 200: unknown;
7710
7795
  /**
7711
7796
  * Unauthorized
7712
7797
  */
7713
- 401: ApiProblemResponseDto;
7714
- /**
7715
- * Forbidden - not owner of rule
7716
- */
7717
- 403: ApiProblemResponseDto;
7718
- /**
7719
- * Rule not found
7720
- */
7721
- 404: ApiProblemResponseDto;
7798
+ 401: unknown;
7722
7799
  /**
7723
- * Resource conflict - rule is being modified by another process
7800
+ * Forbidden - insufficient permissions
7724
7801
  */
7725
- 409: ApiProblemResponseDto;
7802
+ 403: unknown;
7726
7803
  };
7727
7804
  };
7728
7805
  delete: {
7729
- req: TransactionRuleControllerDeleteData;
7806
+ req: PropertyControllerDeleteData;
7730
7807
  res: {
7731
7808
  /**
7732
- * Rule deleted successfully
7809
+ * Property deleted successfully
7733
7810
  */
7734
7811
  204: void;
7735
7812
  /**
7736
7813
  * Unauthorized
7737
7814
  */
7738
- 401: ApiProblemResponseDto;
7739
- /**
7740
- * Forbidden - not owner of rule
7741
- */
7742
- 403: ApiProblemResponseDto;
7815
+ 401: unknown;
7743
7816
  /**
7744
- * Rule not found
7817
+ * Forbidden - insufficient permissions
7745
7818
  */
7746
- 404: ApiProblemResponseDto;
7819
+ 403: unknown;
7747
7820
  /**
7748
- * Resource conflict - rule is being modified by another process
7821
+ * Property not found
7749
7822
  */
7750
- 409: ApiProblemResponseDto;
7823
+ 404: unknown;
7751
7824
  };
7752
7825
  };
7753
7826
  };
7754
- '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
7827
+ '/api/v1/{region}/bean/transaction-rules': {
7755
7828
  post: {
7756
- req: TransactionRuleControllerTestData;
7829
+ req: TransactionRuleControllerCreateData;
7757
7830
  res: {
7758
7831
  /**
7759
- * Test result
7760
- */
7761
- 200: TestRuleResponseDto;
7762
- /**
7763
- * Unauthorized
7764
- */
7765
- 401: ApiProblemResponseDto;
7766
- /**
7767
- * Forbidden - not owner of rule
7832
+ * Rule updated successfully (upsert mode)
7768
7833
  */
7769
- 403: ApiProblemResponseDto;
7834
+ 200: TransactionRuleResponseDto;
7770
7835
  /**
7771
- * Rule not found
7836
+ * Validation failed
7772
7837
  */
7773
- 404: ApiProblemResponseDto;
7774
- };
7775
- };
7776
- };
7777
- '/api/v1/users': {
7778
- delete: {
7779
- req: UserControllerDeleteOwnUserData;
7780
- res: {
7838
+ 400: ApiProblemResponseDto;
7781
7839
  /**
7782
- * User deleted successfully
7840
+ * Unauthorized
7783
7841
  */
7784
- 204: void;
7842
+ 401: ApiProblemResponseDto;
7785
7843
  /**
7786
- * Invalid access token
7844
+ * Resource conflict - another process is updating this rule
7787
7845
  */
7788
- 403: unknown;
7846
+ 409: ApiProblemResponseDto;
7789
7847
  };
7790
7848
  };
7791
7849
  get: {
7792
- req: UserControllerGetUserData;
7850
+ req: TransactionRuleControllerListData;
7793
7851
  res: {
7794
7852
  /**
7795
- * User retrieved successfully
7853
+ * List of rules
7796
7854
  */
7797
- 200: unknown;
7855
+ 200: TransactionRuleListResponseDto;
7856
+ /**
7857
+ * Unauthorized
7858
+ */
7859
+ 401: ApiProblemResponseDto;
7798
7860
  };
7799
7861
  };
7862
+ };
7863
+ '/api/v1/{region}/bean/transaction-rules/validate': {
7800
7864
  post: {
7801
- req: UserControllerSignupUserData;
7865
+ req: TransactionRuleControllerValidateData;
7802
7866
  res: {
7803
7867
  /**
7804
- * User created successfully
7868
+ * Validation result
7805
7869
  */
7806
- 201: SignupResponseDto;
7870
+ 200: ValidateRuleResponseDto;
7807
7871
  /**
7808
- * Invalid Turnstile token (when Turnstile is enabled)
7872
+ * Validation failed
7809
7873
  */
7810
- 400: unknown;
7874
+ 400: ApiProblemResponseDto;
7811
7875
  /**
7812
- * User signup is disabled
7876
+ * Unauthorized
7813
7877
  */
7814
- 403: unknown;
7878
+ 401: ApiProblemResponseDto;
7815
7879
  };
7816
7880
  };
7817
7881
  };
7818
- '/api/v1/users/{id}': {
7819
- delete: {
7820
- req: UserControllerDeleteUserData;
7882
+ '/api/v1/{region}/bean/transaction-rules/bulk': {
7883
+ post: {
7884
+ req: TransactionRuleControllerBulkCreateData;
7821
7885
  res: {
7822
7886
  /**
7823
- * User deleted successfully
7887
+ * Bulk create completed
7824
7888
  */
7825
- 204: void;
7889
+ 201: BulkCreateRulesResponseDto;
7826
7890
  /**
7827
- * Cannot delete own account or insufficient permissions
7891
+ * Invalid bulk create data
7828
7892
  */
7829
- 403: unknown;
7893
+ 400: ApiProblemResponseDto;
7894
+ /**
7895
+ * Unauthorized
7896
+ */
7897
+ 401: ApiProblemResponseDto;
7830
7898
  };
7831
7899
  };
7832
7900
  };
7833
- '/api/v1/users/{id}/info': {
7901
+ '/api/v1/{region}/bean/transaction-rules/export/{format}': {
7834
7902
  get: {
7835
- req: UserControllerGetUserInfoData;
7903
+ req: TransactionRuleControllerExportData;
7836
7904
  res: {
7837
7905
  /**
7838
- * User info retrieved successfully
7839
- */
7840
- 200: unknown;
7841
- /**
7842
- * Cannot access other user info without admin permission
7906
+ * Exported rules
7843
7907
  */
7844
- 403: unknown;
7845
- };
7846
- };
7847
- };
7848
- '/api/v1/users/setting': {
7849
- put: {
7850
- req: UserControllerUpdateUserSettingData;
7851
- res: {
7908
+ 200: ExportRulesResponseDto;
7852
7909
  /**
7853
- * Settings updated successfully
7910
+ * Unsupported format
7854
7911
  */
7855
- 200: unknown;
7912
+ 400: ApiProblemResponseDto;
7856
7913
  /**
7857
- * Insufficient permissions
7914
+ * Unauthorized
7858
7915
  */
7859
- 403: unknown;
7916
+ 401: ApiProblemResponseDto;
7860
7917
  };
7861
7918
  };
7862
7919
  };
7863
- '/api/v1/users/settings-by-page': {
7920
+ '/api/v1/{region}/bean/transaction-rules/statistics/{period}': {
7864
7921
  get: {
7865
- req: UserControllerGetAllUserSettingsByPageData;
7922
+ req: TransactionRuleControllerGetStatisticsData;
7866
7923
  res: {
7867
7924
  /**
7868
- * Settings list retrieved successfully
7925
+ * Rule statistics
7869
7926
  */
7870
- 200: unknown;
7871
- };
7872
- };
7873
- };
7874
- '/api/v1/users/asset-liability-summary': {
7875
- get: {
7876
- res: {
7927
+ 200: RuleStatisticsResponseDto;
7877
7928
  /**
7878
- * Summary retrieved successfully
7929
+ * Unauthorized
7879
7930
  */
7880
- 200: unknown;
7931
+ 401: ApiProblemResponseDto;
7881
7932
  };
7882
7933
  };
7883
7934
  };
7884
- '/api/v1/admin/properties': {
7935
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}': {
7885
7936
  get: {
7937
+ req: TransactionRuleControllerGetDetailData;
7886
7938
  res: {
7887
7939
  /**
7888
- * Properties retrieved successfully
7940
+ * Rule details
7889
7941
  */
7890
- 200: unknown;
7942
+ 200: TransactionRuleResponseDto;
7891
7943
  /**
7892
7944
  * Unauthorized
7893
7945
  */
7894
- 401: unknown;
7946
+ 401: ApiProblemResponseDto;
7895
7947
  /**
7896
- * Forbidden - insufficient permissions
7948
+ * Forbidden - not owner of rule
7897
7949
  */
7898
- 403: unknown;
7950
+ 403: ApiProblemResponseDto;
7951
+ /**
7952
+ * Rule not found
7953
+ */
7954
+ 404: ApiProblemResponseDto;
7899
7955
  };
7900
7956
  };
7901
- };
7902
- '/api/v1/admin/properties/{key}': {
7903
- get: {
7904
- req: PropertyControllerGetByKeyData;
7957
+ put: {
7958
+ req: TransactionRuleControllerUpdateData;
7905
7959
  res: {
7906
7960
  /**
7907
- * Property retrieved successfully
7961
+ * Rule updated successfully
7908
7962
  */
7909
- 200: unknown;
7963
+ 200: TransactionRuleResponseDto;
7964
+ /**
7965
+ * Validation failed
7966
+ */
7967
+ 400: ApiProblemResponseDto;
7910
7968
  /**
7911
7969
  * Unauthorized
7912
7970
  */
7913
- 401: unknown;
7971
+ 401: ApiProblemResponseDto;
7914
7972
  /**
7915
- * Forbidden - insufficient permissions
7973
+ * Forbidden - not owner of rule
7916
7974
  */
7917
- 403: unknown;
7975
+ 403: ApiProblemResponseDto;
7918
7976
  /**
7919
- * Property not found
7977
+ * Rule not found
7920
7978
  */
7921
- 404: unknown;
7979
+ 404: ApiProblemResponseDto;
7980
+ /**
7981
+ * Resource conflict - rule is being modified by another process
7982
+ */
7983
+ 409: ApiProblemResponseDto;
7922
7984
  };
7923
7985
  };
7924
- put: {
7925
- req: PropertyControllerUpdateData;
7986
+ delete: {
7987
+ req: TransactionRuleControllerDeleteData;
7926
7988
  res: {
7927
7989
  /**
7928
- * Property updated successfully
7990
+ * Rule deleted successfully
7929
7991
  */
7930
- 200: unknown;
7992
+ 204: void;
7931
7993
  /**
7932
7994
  * Unauthorized
7933
7995
  */
7934
- 401: unknown;
7996
+ 401: ApiProblemResponseDto;
7935
7997
  /**
7936
- * Forbidden - insufficient permissions
7998
+ * Forbidden - not owner of rule
7937
7999
  */
7938
- 403: unknown;
8000
+ 403: ApiProblemResponseDto;
8001
+ /**
8002
+ * Rule not found
8003
+ */
8004
+ 404: ApiProblemResponseDto;
8005
+ /**
8006
+ * Resource conflict - rule is being modified by another process
8007
+ */
8008
+ 409: ApiProblemResponseDto;
7939
8009
  };
7940
8010
  };
7941
- delete: {
7942
- req: PropertyControllerDeleteData;
8011
+ };
8012
+ '/api/v1/{region}/bean/transaction-rules/{ruleId}/test': {
8013
+ post: {
8014
+ req: TransactionRuleControllerTestData;
7943
8015
  res: {
7944
8016
  /**
7945
- * Property deleted successfully
8017
+ * Test result
7946
8018
  */
7947
- 204: void;
8019
+ 200: TestRuleResponseDto;
7948
8020
  /**
7949
8021
  * Unauthorized
7950
8022
  */
7951
- 401: unknown;
8023
+ 401: ApiProblemResponseDto;
7952
8024
  /**
7953
- * Forbidden - insufficient permissions
8025
+ * Forbidden - not owner of rule
7954
8026
  */
7955
- 403: unknown;
8027
+ 403: ApiProblemResponseDto;
7956
8028
  /**
7957
- * Property not found
8029
+ * Rule not found
7958
8030
  */
7959
- 404: unknown;
8031
+ 404: ApiProblemResponseDto;
7960
8032
  };
7961
8033
  };
7962
8034
  };
@@ -8633,78 +8705,6 @@ type $OpenApiTs = {
8633
8705
  };
8634
8706
  };
8635
8707
  };
8636
- '/api/v1/{region}/reporting/portfolio/trends': {
8637
- get: {
8638
- req: ReportingControllerGetPortfolioTrendsData;
8639
- res: {
8640
- /**
8641
- * Trends retrieved successfully
8642
- */
8643
- 200: PortfolioTrendsResponseDto;
8644
- /**
8645
- * User not authenticated
8646
- */
8647
- 401: unknown;
8648
- };
8649
- };
8650
- };
8651
- '/api/v1/{region}/reporting/cash-flow/trends': {
8652
- get: {
8653
- req: ReportingControllerGetCashFlowTrendsData;
8654
- res: {
8655
- /**
8656
- * Cash-flow trends retrieved successfully
8657
- */
8658
- 200: CashFlowTrendsResponseDto;
8659
- /**
8660
- * User not authenticated
8661
- */
8662
- 401: unknown;
8663
- };
8664
- };
8665
- };
8666
- '/api/v1/{region}/reporting/snapshots/generate': {
8667
- post: {
8668
- req: ReportingControllerGenerateSnapshotData;
8669
- res: {
8670
- /**
8671
- * Snapshot generated successfully
8672
- */
8673
- 200: GenerateSnapshotResponse;
8674
- /**
8675
- * Invalid date format
8676
- */
8677
- 400: unknown;
8678
- /**
8679
- * User not authenticated
8680
- */
8681
- 401: unknown;
8682
- };
8683
- };
8684
- };
8685
- '/api/v1/{region}/reporting/snapshots/backfill': {
8686
- post: {
8687
- req: ReportingControllerBackfillSnapshotsData;
8688
- res: {
8689
- /**
8690
- * Backfill completed successfully
8691
- */
8692
- 200: BackfillSnapshotsResponse;
8693
- /**
8694
- * Invalid date format or range
8695
- */
8696
- 400: unknown;
8697
- /**
8698
- * User not authenticated
8699
- */
8700
- 401: unknown;
8701
- /**
8702
- * Backfill already in progress for this user
8703
- */
8704
- 409: unknown;
8705
- };
8706
- };
8707
- };
8708
8708
  '/api/v1/auth/api-keys': {
8709
8709
  post: {
8710
8710
  res: {