@firela/api-types 0.0.0-canary.32edff08 → 0.0.0-canary.52154bb3

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.
@@ -316,6 +316,53 @@ export type RegionsMetadataResponseDto = {
316
316
  regions: Array<RegionInfoDto>;
317
317
  };
318
318
 
319
+ export type CostSpecDto = {
320
+ /**
321
+ * Cost specification mode (mirrors engine CostSpec)
322
+ */
323
+ mode: 'per-unit' | 'total' | 'date' | 'label' | 'auto';
324
+ /**
325
+ * Per-unit cost (required when mode is "per-unit")
326
+ */
327
+ numberPerUnit?: string;
328
+ /**
329
+ * Total cost for all units (required when mode is "total")
330
+ */
331
+ totalNumber?: string;
332
+ /**
333
+ * Cost currency (required in all modes)
334
+ */
335
+ currency: string;
336
+ /**
337
+ * Lot acquisition date, ISO 8601 (required when mode is "date")
338
+ */
339
+ date?: string;
340
+ /**
341
+ * Lot label (required when mode is "label"; optional tag in buy modes)
342
+ */
343
+ label?: string;
344
+ /**
345
+ * Merge lots for AVERAGE booking (mode: auto)
346
+ */
347
+ merge?: boolean;
348
+ };
349
+
350
+ /**
351
+ * Cost specification mode (mirrors engine CostSpec)
352
+ */
353
+ export type mode = 'per-unit' | 'total' | 'date' | 'label' | 'auto';
354
+
355
+ export type AmountDto = {
356
+ /**
357
+ * Amount as decimal string (max 15 integer + 15 decimal digits)
358
+ */
359
+ number: string;
360
+ /**
361
+ * Currency/commodity code
362
+ */
363
+ currency: string;
364
+ };
365
+
319
366
  export type CreatePostingDto = {
320
367
  /**
321
368
  * Account name in Beancount format (must start with uppercase, colon-separated)
@@ -335,6 +382,14 @@ export type CreatePostingDto = {
335
382
  meta?: {
336
383
  [key: string]: unknown;
337
384
  };
385
+ /**
386
+ * Cost basis (Beancount `{...}`). Maps to engine costSpec. Required for commodity holdings so they carry a monetary weight that can balance.
387
+ */
388
+ cost?: CostSpecDto;
389
+ /**
390
+ * Price annotation (Beancount `@...`). Maps to engine price. Used for valuation; cost takes priority for balance weight.
391
+ */
392
+ price?: AmountDto;
338
393
  };
339
394
 
340
395
  export type CreateTransactionDto = {
@@ -561,6 +616,55 @@ export type BatchTransactionResponseDto = {
561
616
  failed: Array<BatchTransactionErrorDto>;
562
617
  };
563
618
 
619
+ export type CorrectTransactionDto = {
620
+ /**
621
+ * Transaction date (ISO 8601 format)
622
+ */
623
+ date: string;
624
+ /**
625
+ * Transaction flag: * (cleared), ! (pending)
626
+ */
627
+ flag?: '*' | '!';
628
+ /**
629
+ * Payee name
630
+ */
631
+ payee?: string;
632
+ /**
633
+ * Transaction narration/description
634
+ */
635
+ narration: string;
636
+ /**
637
+ * Transaction tags (without # prefix)
638
+ */
639
+ tags?: Array<string>;
640
+ /**
641
+ * Transaction links (without ^ prefix)
642
+ */
643
+ links?: Array<string>;
644
+ /**
645
+ * Transaction postings (minimum 1, typically 2 for double-entry)
646
+ */
647
+ postings: Array<CreatePostingDto>;
648
+ /**
649
+ * Transaction-level metadata
650
+ */
651
+ meta?: {
652
+ [key: string]: unknown;
653
+ };
654
+ /**
655
+ * Unique key for idempotent transaction creation. If provided, duplicate requests with the same key will return the existing transaction.
656
+ */
657
+ idempotencyKey?: string;
658
+ /**
659
+ * Auto-create accounts if not found. When true, missing accounts will be automatically created. When false (default for API), missing accounts will cause a validation error. Set to true for quick entry scenarios where you want to create accounts on-the-fly.
660
+ */
661
+ autoCreateAccounts?: boolean;
662
+ /**
663
+ * Reason for correcting/superseding the original transaction
664
+ */
665
+ correctionReason?: string;
666
+ };
667
+
564
668
  export type PostingDetailDto = {
565
669
  /**
566
670
  * Posting ID
@@ -571,9 +675,9 @@ export type PostingDetailDto = {
571
675
  */
572
676
  accountId: string;
573
677
  /**
574
- * Account name
678
+ * Fully-qualified Beancount account path
575
679
  */
576
- accountName: string;
680
+ account: string;
577
681
  /**
578
682
  * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned.
579
683
  */
@@ -691,6 +795,14 @@ export type TransactionDetailDto = {
691
795
  * Correction reason (if voided or superseded)
692
796
  */
693
797
  correctionReason?: string;
798
+ /**
799
+ * ID of the transaction that supersedes this one (set when status=SUPERSEDED)
800
+ */
801
+ supersededBy?: string;
802
+ /**
803
+ * ID of the transaction this one corrected/replaced (back-link on the replacement)
804
+ */
805
+ originalTxn?: string;
694
806
  };
695
807
 
696
808
  /**
@@ -3354,6 +3466,8 @@ export type SupportedProvidersResponseDto = {
3354
3466
 
3355
3467
  export type ParserTelemetryReportDto = unknown;
3356
3468
 
3469
+ export type UncoveredFormatMissDto = unknown;
3470
+
3357
3471
  export type ProcessNlpDto = {
3358
3472
  /**
3359
3473
  * Natural language text describing a transaction (Chinese)
@@ -4139,8 +4253,21 @@ export type AccountItemWithAssetClassDto = {
4139
4253
  * Risk level
4140
4254
  */
4141
4255
  riskLevel?: string;
4256
+ /**
4257
+ * ADR-0105 classification provenance (holding level always; account level only on FALLBACK)
4258
+ */
4259
+ source?: 'USER_META' | 'FIAT_CURRENCY' | 'OPENBB_MAPPING' | 'FALLBACK';
4142
4260
  };
4143
4261
 
4262
+ /**
4263
+ * ADR-0105 classification provenance (holding level always; account level only on FALLBACK)
4264
+ */
4265
+ export type source2 =
4266
+ | 'USER_META'
4267
+ | 'FIAT_CURRENCY'
4268
+ | 'OPENBB_MAPPING'
4269
+ | 'FALLBACK';
4270
+
4144
4271
  export type AssetClassGroupDto = {
4145
4272
  /**
4146
4273
  * Asset class name
@@ -4227,6 +4354,12 @@ export type AssetClassSummaryDto = {
4227
4354
  * Exchange rate warnings
4228
4355
  */
4229
4356
  warnings?: Array<AccountExchangeRateWarningDto>;
4357
+ /**
4358
+ * ADR-0105 §4 fallback provenance stats (holding level only). valueRatio is the grey-area share of total converted value; count is the number of source=FALLBACK holdings.
4359
+ */
4360
+ fallback?: {
4361
+ [key: string]: unknown;
4362
+ };
4230
4363
  };
4231
4364
 
4232
4365
  export type AssetClassAccountsResponseDto = {
@@ -4238,6 +4371,56 @@ export type AssetClassAccountsResponseDto = {
4238
4371
  * Summary statistics
4239
4372
  */
4240
4373
  summary: AssetClassSummaryDto;
4374
+ /**
4375
+ * ADR-0105 §6 holding-level grey-area bucket (source=FALLBACK holdings peeled out of groups). Present only for groupBy=holdingAssetClass when FALLBACK holdings exist.
4376
+ */
4377
+ uncategorized?: AssetClassGroupDto;
4378
+ };
4379
+
4380
+ export type HoldingAssetClassAccountSliceDto = {
4381
+ /**
4382
+ * Account ID
4383
+ */
4384
+ accountId: string;
4385
+ /**
4386
+ * Full account path
4387
+ */
4388
+ accountPath: string;
4389
+ /**
4390
+ * Currency of the holding with the largest converted base value; undefined when no holding is convertible
4391
+ */
4392
+ accountCurrency?: string;
4393
+ /**
4394
+ * Account's market value in base currency (Σ converted holdings; grey bucket included)
4395
+ */
4396
+ marketValueBase: string;
4397
+ /**
4398
+ * Share of the global total (0-100). 0 when globalTotal is zero (no NaN/Infinity).
4399
+ */
4400
+ shareOfTotalPct: number;
4401
+ /**
4402
+ * Per-account asset-class breakdown
4403
+ */
4404
+ groups: Array<AssetClassGroupDto>;
4405
+ /**
4406
+ * Per-account grey bucket (source=FALLBACK holdings, incl. broker cash)
4407
+ */
4408
+ uncategorized?: AssetClassGroupDto;
4409
+ /**
4410
+ * Every holding row for this account (account ID in each row’s `id` field)
4411
+ */
4412
+ holdings: Array<AccountItemWithAssetClassDto>;
4413
+ };
4414
+
4415
+ export type HoldingAssetClassCrossAccountResponseDto = {
4416
+ /**
4417
+ * Merged cross-account holding aggregation
4418
+ */
4419
+ global: AssetClassAccountsResponseDto;
4420
+ /**
4421
+ * Per-account slices
4422
+ */
4423
+ byAccount: Array<HoldingAssetClassAccountSliceDto>;
4241
4424
  };
4242
4425
 
4243
4426
  export type CashFlowByCurrencyDto = {
@@ -4319,149 +4502,446 @@ export type CashFlowResponseDto = {
4319
4502
  warnings?: Array<ExchangeRateWarningDto>;
4320
4503
  };
4321
4504
 
4322
- export type CurrencyBalanceDto = {
4505
+ export type MonetaryDto = {
4323
4506
  /**
4324
- * ISO 4217 currency code
4507
+ * Amount (Decimal string)
4508
+ */
4509
+ amount: string;
4510
+ /**
4511
+ * ISO 4217 currency
4325
4512
  */
4326
4513
  currency: string;
4327
4514
  /**
4328
- * Balance amount
4515
+ * Converted to user base currency (Decimal string)
4329
4516
  */
4330
- balance: string;
4517
+ baseCcyEquivalent?: {
4518
+ [key: string]: unknown;
4519
+ } | null;
4331
4520
  };
4332
4521
 
4333
- export type TimeSeriesPointDto = {
4522
+ export type CurrentPriceDto = {
4334
4523
  /**
4335
- * Date in YYYY-MM-DD format
4524
+ * Price amount (Decimal string)
4525
+ */
4526
+ amount: string;
4527
+ /**
4528
+ * Price currency (ISO 4217)
4529
+ */
4530
+ currency: string;
4531
+ /**
4532
+ * Price date (ISO 8601)
4336
4533
  */
4337
4534
  date: string;
4338
4535
  /**
4339
- * Value at this date (in base currency)
4536
+ * Price source
4340
4537
  */
4341
- value: string;
4538
+ source: 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4539
+ };
4540
+
4541
+ /**
4542
+ * Price source
4543
+ */
4544
+ export type source3 = 'USER_OVERRIDE' | 'OPENBB_EQUITY' | 'OPENBB_CURRENCY';
4545
+
4546
+ export type FxRateDto = {
4547
+ from: string;
4548
+ to: string;
4342
4549
  /**
4343
- * Change from previous point
4550
+ * FX rate (Decimal string)
4344
4551
  */
4345
- change?: {
4346
- [key: string]: unknown;
4347
- };
4552
+ rate: string;
4348
4553
  /**
4349
- * Multi-currency breakdown for this point
4554
+ * Rate date (ISO 8601)
4350
4555
  */
4351
- byCurrency?: Array<CurrencyBalanceDto>;
4556
+ date: string;
4352
4557
  };
4353
4558
 
4354
- export type TrendSummaryDto = {
4559
+ export type HoldingPnlRowDto = {
4355
4560
  /**
4356
- * Value at start of period
4561
+ * Account UUID
4357
4562
  */
4358
- startValue: string;
4563
+ accountId: string;
4359
4564
  /**
4360
- * Value at end of period
4565
+ * Full account path
4361
4566
  */
4362
- endValue: string;
4567
+ accountPath: string;
4363
4568
  /**
4364
- * Total change over period
4569
+ * Account settlement currency (ISO 4217), from cost currency
4365
4570
  */
4366
- totalChange: string;
4571
+ accountCcy?: {
4572
+ [key: string]: unknown;
4573
+ } | null;
4367
4574
  /**
4368
- * Total change percentage
4575
+ * Broker type derived from Platform.type
4369
4576
  */
4370
- totalChangePercentage: string;
4371
- };
4372
-
4373
- export type MultiCurrencyPointDto = {
4577
+ brokerType?: {
4578
+ [key: string]: unknown;
4579
+ } | null;
4374
4580
  /**
4375
- * Date in YYYY-MM-DD format
4581
+ * Commodity symbol
4376
4582
  */
4377
- date: string;
4583
+ symbol: string;
4378
4584
  /**
4379
- * Balances by currency
4585
+ * Chart segment token (libs/common resolver)
4380
4586
  */
4381
- byCurrency: Array<CurrencyBalanceDto>;
4382
- };
4383
-
4384
- export type PortfolioTrendsResponseDto = {
4587
+ chartToken: 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4588
+ assetClass: string;
4589
+ assetSubClass?: {
4590
+ [key: string]: unknown;
4591
+ } | null;
4385
4592
  /**
4386
- * Time series data points
4593
+ * Net held units (Decimal string)
4387
4594
  */
4388
- series: Array<TimeSeriesPointDto>;
4595
+ units: string;
4389
4596
  /**
4390
- * Period summary
4597
+ * Average cost per unit; null when cost currency conflicts or no cost
4391
4598
  */
4392
- summary: TrendSummaryDto;
4599
+ averageCostPerUnit?: MonetaryDto | null;
4393
4600
  /**
4394
- * Period requested
4601
+ * Cost basis of held units
4395
4602
  */
4396
- period: string;
4603
+ costBasis?: MonetaryDto | null;
4397
4604
  /**
4398
- * Data granularity
4605
+ * Market value at asOf price
4399
4606
  */
4400
- granularity: string;
4607
+ marketValue?: MonetaryDto | null;
4401
4608
  /**
4402
- * Base currency for converted values
4609
+ * Price used for market value
4403
4610
  */
4404
- currency: string;
4611
+ currentPrice?: CurrentPriceDto | null;
4405
4612
  /**
4406
- * Multi-currency time series (each point has currency breakdown)
4613
+ * Unrealized P&L in base currency (Decimal string); null when any FX/price missing
4407
4614
  */
4408
- byCurrency?: Array<MultiCurrencyPointDto>;
4615
+ unrealizedPnlBase?: {
4616
+ [key: string]: unknown;
4617
+ } | null;
4409
4618
  /**
4410
- * Exchange rate warnings
4619
+ * Unrealized P&L % (Decimal string)
4411
4620
  */
4412
- warnings?: Array<ExchangeRateWarningDto>;
4621
+ unrealizedPnlPct?: {
4622
+ [key: string]: unknown;
4623
+ } | null;
4624
+ /**
4625
+ * Historical FX rate applied to cost basis
4626
+ */
4627
+ costFxRate?: FxRateDto | null;
4628
+ /**
4629
+ * FX rate applied to market value
4630
+ */
4631
+ marketFxRate?: FxRateDto | null;
4632
+ /**
4633
+ * Share of invested assets % (Decimal string); only for invested chartTokens
4634
+ */
4635
+ pctOfInvestedAssets?: {
4636
+ [key: string]: unknown;
4637
+ } | null;
4638
+ /**
4639
+ * 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
4640
+ */
4641
+ realizedPnl?: MonetaryDto | null;
4413
4642
  };
4414
4643
 
4415
- export type GenerateSnapshotBody = unknown;
4416
-
4417
- export type GenerateSnapshotResponse = unknown;
4418
-
4419
- export type BackfillSnapshotsBody = unknown;
4420
-
4421
- export type BackfillSnapshotsResponse = unknown;
4644
+ /**
4645
+ * Chart segment token (libs/common resolver)
4646
+ */
4647
+ export type chartToken = 'equity' | 'fund' | 'bond' | 'cash' | 'other';
4422
4648
 
4423
- export type AnonymousLoginDto = {
4649
+ export type HoldingPnlWarningDto = {
4424
4650
  /**
4425
- * Access token for anonymous login
4651
+ * Warning type
4426
4652
  */
4427
- accessToken: string;
4653
+ type:
4654
+ | 'MISSING_COST_FX_RATE'
4655
+ | 'MISSING_MARKET_FX_RATE'
4656
+ | 'MISSING_SALE_PRICE'
4657
+ | 'MISSING_REALIZED_FX_RATE'
4658
+ | 'OVERSOLD_LOTS'
4659
+ | 'NO_PRICE'
4660
+ | 'MIXED_COST_CURRENCY';
4661
+ symbol?: {
4662
+ [key: string]: unknown;
4663
+ } | null;
4664
+ accountId?: {
4665
+ [key: string]: unknown;
4666
+ } | null;
4667
+ currency?: {
4668
+ [key: string]: unknown;
4669
+ } | null;
4428
4670
  };
4429
4671
 
4430
- export type AccountControllerCreateData = {
4672
+ /**
4673
+ * Warning type
4674
+ */
4675
+ export type type4 =
4676
+ | 'MISSING_COST_FX_RATE'
4677
+ | 'MISSING_MARKET_FX_RATE'
4678
+ | 'MISSING_SALE_PRICE'
4679
+ | 'MISSING_REALIZED_FX_RATE'
4680
+ | 'OVERSOLD_LOTS'
4681
+ | 'NO_PRICE'
4682
+ | 'MIXED_COST_CURRENCY';
4683
+
4684
+ export type HoldingPnlResponseDto = {
4685
+ asOfDate: string;
4686
+ baseCurrency: string;
4431
4687
  /**
4432
- * Region code for tenant context
4688
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4433
4689
  */
4434
- region: 'cn' | 'us' | 'de' | 'gb';
4435
- requestBody: CreateAccountDto;
4690
+ method: 'average' | 'FIFO';
4691
+ rows: Array<HoldingPnlRowDto>;
4692
+ warnings: Array<HoldingPnlWarningDto>;
4436
4693
  };
4437
4694
 
4438
- export type AccountControllerCreateResponse = AccountResponseDto;
4695
+ /**
4696
+ * Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).
4697
+ */
4698
+ export type method = 'average' | 'FIFO';
4439
4699
 
4440
- export type AccountControllerFindAllData = {
4700
+ export type CreateBeanPriceDto = {
4441
4701
  /**
4442
- * Filter by custom (user-created) accounts only
4702
+ * Currency being priced (e.g., USD, AAPL, BTC)
4443
4703
  */
4444
- isCustom?: boolean;
4704
+ currency: string;
4445
4705
  /**
4446
- * Maximum number of results
4706
+ * Quote currency (pricing currency, e.g., CNY, EUR)
4447
4707
  */
4448
- limit?: number;
4708
+ quoteCurrency: string;
4449
4709
  /**
4450
- * Number of results to skip
4710
+ * Price amount (MUST be >= 0 per Beancount spec, supports up to 15 decimal places). Zero allowed for conversion entries, negative strictly prohibited.
4451
4711
  */
4452
- offset?: number;
4712
+ amount: number;
4453
4713
  /**
4454
- * Region code for tenant context
4714
+ * Price date (ISO 8601 format)
4455
4715
  */
4456
- region: 'cn' | 'us' | 'de' | 'gb';
4716
+ date: string;
4457
4717
  /**
4458
- * Search term for path or i18nKey
4718
+ * Metadata (validated by Zod schema, max field lengths enforced)
4459
4719
  */
4460
- search?: string;
4720
+ metadata?: {
4721
+ [key: string]: unknown;
4722
+ };
4723
+ };
4724
+
4725
+ export type PriceResponseDto = {
4461
4726
  /**
4462
- * Filter by status
4727
+ * Unique identifier
4463
4728
  */
4464
- status?: 'OPEN' | 'CLOSED' | 'SUSPENDED';
4729
+ id: string;
4730
+ /**
4731
+ * User ID (owner of the price)
4732
+ */
4733
+ userId: string;
4734
+ /**
4735
+ * Currency being priced (e.g., USD, AAPL, BTC)
4736
+ */
4737
+ currency: string;
4738
+ /**
4739
+ * Quote currency (pricing currency, e.g., USD, CNY)
4740
+ */
4741
+ quoteCurrency: string;
4742
+ /**
4743
+ * Price amount (corresponds to Beancount Amount.number). Supports up to 15 decimal places.
4744
+ */
4745
+ amount: number;
4746
+ /**
4747
+ * Price date (ISO 8601 format). Represents the date this price was valid.
4748
+ */
4749
+ date: string;
4750
+ /**
4751
+ * Metadata (corresponds to Beancount meta field). Contains source, confidence, note, etc.
4752
+ */
4753
+ meta: {
4754
+ [key: string]: unknown;
4755
+ };
4756
+ /**
4757
+ * Creation timestamp
4758
+ */
4759
+ createdAt: string;
4760
+ /**
4761
+ * Last update timestamp
4762
+ */
4763
+ updatedAt: string;
4764
+ };
4765
+
4766
+ export type PriceListResponseDto = {
4767
+ /**
4768
+ * List of prices
4769
+ */
4770
+ items: Array<PriceResponseDto>;
4771
+ /**
4772
+ * Total number of prices
4773
+ */
4774
+ total: number;
4775
+ };
4776
+
4777
+ export type UpdateBeanPriceDto = {
4778
+ /**
4779
+ * Currency being priced
4780
+ */
4781
+ currency?: string;
4782
+ /**
4783
+ * Quote currency (pricing currency)
4784
+ */
4785
+ quoteCurrency?: string;
4786
+ /**
4787
+ * Price amount (MUST be >= 0 per Beancount spec)
4788
+ */
4789
+ amount?: number;
4790
+ /**
4791
+ * Price date (ISO 8601 format)
4792
+ */
4793
+ date?: string;
4794
+ /**
4795
+ * Metadata
4796
+ */
4797
+ metadata?: {
4798
+ [key: string]: unknown;
4799
+ };
4800
+ };
4801
+
4802
+ export type CurrencyBalanceDto = {
4803
+ /**
4804
+ * ISO 4217 currency code
4805
+ */
4806
+ currency: string;
4807
+ /**
4808
+ * Balance amount
4809
+ */
4810
+ balance: string;
4811
+ };
4812
+
4813
+ export type TimeSeriesPointDto = {
4814
+ /**
4815
+ * Date in YYYY-MM-DD format
4816
+ */
4817
+ date: string;
4818
+ /**
4819
+ * Value at this date (in base currency)
4820
+ */
4821
+ value: string;
4822
+ /**
4823
+ * Change from previous point
4824
+ */
4825
+ change?: {
4826
+ [key: string]: unknown;
4827
+ };
4828
+ /**
4829
+ * Multi-currency breakdown for this point
4830
+ */
4831
+ byCurrency?: Array<CurrencyBalanceDto>;
4832
+ };
4833
+
4834
+ export type TrendSummaryDto = {
4835
+ /**
4836
+ * Value at start of period
4837
+ */
4838
+ startValue: string;
4839
+ /**
4840
+ * Value at end of period
4841
+ */
4842
+ endValue: string;
4843
+ /**
4844
+ * Total change over period
4845
+ */
4846
+ totalChange: string;
4847
+ /**
4848
+ * Total change percentage
4849
+ */
4850
+ totalChangePercentage: string;
4851
+ };
4852
+
4853
+ export type MultiCurrencyPointDto = {
4854
+ /**
4855
+ * Date in YYYY-MM-DD format
4856
+ */
4857
+ date: string;
4858
+ /**
4859
+ * Balances by currency
4860
+ */
4861
+ byCurrency: Array<CurrencyBalanceDto>;
4862
+ };
4863
+
4864
+ export type PortfolioTrendsResponseDto = {
4865
+ /**
4866
+ * Time series data points
4867
+ */
4868
+ series: Array<TimeSeriesPointDto>;
4869
+ /**
4870
+ * Period summary
4871
+ */
4872
+ summary: TrendSummaryDto;
4873
+ /**
4874
+ * Period requested
4875
+ */
4876
+ period: string;
4877
+ /**
4878
+ * Data granularity
4879
+ */
4880
+ granularity: string;
4881
+ /**
4882
+ * Base currency for converted values
4883
+ */
4884
+ currency: string;
4885
+ /**
4886
+ * Multi-currency time series (each point has currency breakdown)
4887
+ */
4888
+ byCurrency?: Array<MultiCurrencyPointDto>;
4889
+ /**
4890
+ * Exchange rate warnings
4891
+ */
4892
+ warnings?: Array<ExchangeRateWarningDto>;
4893
+ };
4894
+
4895
+ export type GenerateSnapshotBody = unknown;
4896
+
4897
+ export type GenerateSnapshotResponse = unknown;
4898
+
4899
+ export type BackfillSnapshotsBody = unknown;
4900
+
4901
+ export type BackfillSnapshotsResponse = unknown;
4902
+
4903
+ export type AnonymousLoginDto = {
4904
+ /**
4905
+ * Access token for anonymous login
4906
+ */
4907
+ accessToken: string;
4908
+ };
4909
+
4910
+ export type AccountControllerCreateData = {
4911
+ /**
4912
+ * Region code for tenant context
4913
+ */
4914
+ region: 'cn' | 'us' | 'de' | 'gb';
4915
+ requestBody: CreateAccountDto;
4916
+ };
4917
+
4918
+ export type AccountControllerCreateResponse = AccountResponseDto;
4919
+
4920
+ export type AccountControllerFindAllData = {
4921
+ /**
4922
+ * Filter by custom (user-created) accounts only
4923
+ */
4924
+ isCustom?: boolean;
4925
+ /**
4926
+ * Maximum number of results
4927
+ */
4928
+ limit?: number;
4929
+ /**
4930
+ * Number of results to skip
4931
+ */
4932
+ offset?: number;
4933
+ /**
4934
+ * Region code for tenant context
4935
+ */
4936
+ region: 'cn' | 'us' | 'de' | 'gb';
4937
+ /**
4938
+ * Search term for path or i18nKey
4939
+ */
4940
+ search?: string;
4941
+ /**
4942
+ * Filter by status
4943
+ */
4944
+ status?: 'OPEN' | 'CLOSED' | 'SUSPENDED';
4465
4945
  /**
4466
4946
  * Filter by account type
4467
4947
  */
@@ -4641,6 +5121,20 @@ export type TransactionControllerCreateBatchData = {
4641
5121
  export type TransactionControllerCreateBatchResponse =
4642
5122
  BatchTransactionResponseDto;
4643
5123
 
5124
+ export type TransactionControllerCorrectData = {
5125
+ /**
5126
+ * Original transaction ID to correct
5127
+ */
5128
+ id: string;
5129
+ /**
5130
+ * Region code for tenant context
5131
+ */
5132
+ region: 'cn' | 'us' | 'de' | 'gb';
5133
+ requestBody: CorrectTransactionDto;
5134
+ };
5135
+
5136
+ export type TransactionControllerCorrectResponse = TransactionDetailDto;
5137
+
4644
5138
  export type TransactionControllerSuggestTagsData = {
4645
5139
  /**
4646
5140
  * Max suggestions (1-100, default 10)
@@ -5723,9 +6217,9 @@ export type ProviderSyncControllerSyncData = {
5723
6217
  | 'beancount-direct'
5724
6218
  | 'parsed-bill';
5725
6219
  /**
5726
- * Region code
6220
+ * Region code for tenant context
5727
6221
  */
5728
- region: unknown;
6222
+ region: 'cn' | 'us' | 'de' | 'gb';
5729
6223
  requestBody: ProviderSyncDto;
5730
6224
  };
5731
6225
 
@@ -5764,6 +6258,29 @@ export type TelemetryControllerReportTelemetryData = {
5764
6258
 
5765
6259
  export type TelemetryControllerReportTelemetryResponse = unknown;
5766
6260
 
6261
+ export type TelemetryControllerReportCoverageMissData = {
6262
+ /**
6263
+ * Region code for tenant context
6264
+ */
6265
+ region: 'cn' | 'us' | 'de' | 'gb';
6266
+ requestBody: UncoveredFormatMissDto;
6267
+ };
6268
+
6269
+ export type TelemetryControllerReportCoverageMissResponse = unknown;
6270
+
6271
+ export type TelemetryControllerGetCoverageMetricsData = {
6272
+ /**
6273
+ * Region code for tenant context
6274
+ */
6275
+ region: 'cn' | 'us' | 'de' | 'gb';
6276
+ /**
6277
+ * Top-N uncovered formats (default 10)
6278
+ */
6279
+ topN?: unknown;
6280
+ };
6281
+
6282
+ export type TelemetryControllerGetCoverageMetricsResponse = unknown;
6283
+
5767
6284
  export type NlpControllerProcessNaturalLanguageData = {
5768
6285
  /**
5769
6286
  * Region code for tenant context
@@ -5817,6 +6334,10 @@ export type DashboardControllerGetNetWorthData = {
5817
6334
  export type DashboardControllerGetNetWorthResponse = NetWorthResponseDto;
5818
6335
 
5819
6336
  export type DashboardControllerGetAccountsData = {
6337
+ /**
6338
+ * Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
6339
+ */
6340
+ accountId?: string;
5820
6341
  /**
5821
6342
  * Date for balance calculation (ISO 8601 format)
5822
6343
  */
@@ -5824,7 +6345,11 @@ export type DashboardControllerGetAccountsData = {
5824
6345
  /**
5825
6346
  * Grouping strategy
5826
6347
  */
5827
- groupBy?: 'platform' | 'assetClass';
6348
+ groupBy?:
6349
+ | 'platform'
6350
+ | 'assetClass'
6351
+ | 'holdingAssetClass'
6352
+ | 'holdingAssetClassByAccount';
5828
6353
  /**
5829
6354
  * Region code for tenant context
5830
6355
  */
@@ -5833,7 +6358,8 @@ export type DashboardControllerGetAccountsData = {
5833
6358
 
5834
6359
  export type DashboardControllerGetAccountsResponse =
5835
6360
  | AccountsResponseDto
5836
- | AssetClassAccountsResponseDto;
6361
+ | AssetClassAccountsResponseDto
6362
+ | HoldingAssetClassCrossAccountResponseDto;
5837
6363
 
5838
6364
  export type DashboardControllerGetCashFlowData = {
5839
6365
  /**
@@ -5848,6 +6374,124 @@ export type DashboardControllerGetCashFlowData = {
5848
6374
 
5849
6375
  export type DashboardControllerGetCashFlowResponse = CashFlowResponseDto;
5850
6376
 
6377
+ export type HoldingPnlControllerGetHoldingPnlData = {
6378
+ /**
6379
+ * Scope to a single account
6380
+ */
6381
+ accountId?: string;
6382
+ /**
6383
+ * As-of date (ISO 8601), defaults to today
6384
+ */
6385
+ asOf?: string;
6386
+ /**
6387
+ * Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
6388
+ */
6389
+ method?: 'FIFO' | 'average';
6390
+ /**
6391
+ * Region code for tenant context
6392
+ */
6393
+ region: 'cn' | 'us' | 'de' | 'gb';
6394
+ };
6395
+
6396
+ export type HoldingPnlControllerGetHoldingPnlResponse = HoldingPnlResponseDto;
6397
+
6398
+ export type PriceControllerCreateData = {
6399
+ /**
6400
+ * Region code for tenant context
6401
+ */
6402
+ region: 'cn' | 'us' | 'de' | 'gb';
6403
+ requestBody: CreateBeanPriceDto;
6404
+ };
6405
+
6406
+ export type PriceControllerCreateResponse = PriceResponseDto;
6407
+
6408
+ export type PriceControllerFindAllData = {
6409
+ /**
6410
+ * Filter by currency (e.g., BTC, AAPL, USD)
6411
+ */
6412
+ currency?: string;
6413
+ /**
6414
+ * Filter prices from this date (ISO 8601 format)
6415
+ */
6416
+ dateFrom?: string;
6417
+ /**
6418
+ * Filter prices to this date (ISO 8601 format)
6419
+ */
6420
+ dateTo?: string;
6421
+ /**
6422
+ * Number of items per page (default: 20, max: 100)
6423
+ */
6424
+ limit?: number;
6425
+ /**
6426
+ * Page number for pagination (default: 1)
6427
+ */
6428
+ page?: number;
6429
+ /**
6430
+ * Filter by quote currency (pricing currency, e.g., USD, CNY)
6431
+ */
6432
+ quoteCurrency?: string;
6433
+ /**
6434
+ * Region code for tenant context
6435
+ */
6436
+ region: 'cn' | 'us' | 'de' | 'gb';
6437
+ /**
6438
+ * Search term for currency or quoteCurrency (case-insensitive partial match)
6439
+ */
6440
+ search?: string;
6441
+ };
6442
+
6443
+ export type PriceControllerFindAllResponse = PriceListResponseDto;
6444
+
6445
+ export type PriceControllerFindOneData = {
6446
+ /**
6447
+ * Price ID
6448
+ */
6449
+ id: string;
6450
+ /**
6451
+ * Region code for tenant context
6452
+ */
6453
+ region: 'cn' | 'us' | 'de' | 'gb';
6454
+ };
6455
+
6456
+ export type PriceControllerFindOneResponse = PriceResponseDto;
6457
+
6458
+ export type PriceControllerUpdateData = {
6459
+ /**
6460
+ * Price ID
6461
+ */
6462
+ id: string;
6463
+ /**
6464
+ * Region code for tenant context
6465
+ */
6466
+ region: 'cn' | 'us' | 'de' | 'gb';
6467
+ requestBody: UpdateBeanPriceDto;
6468
+ };
6469
+
6470
+ export type PriceControllerUpdateResponse = PriceResponseDto;
6471
+
6472
+ export type PriceControllerDeleteData = {
6473
+ /**
6474
+ * Price ID
6475
+ */
6476
+ id: string;
6477
+ /**
6478
+ * Region code for tenant context
6479
+ */
6480
+ region: 'cn' | 'us' | 'de' | 'gb';
6481
+ };
6482
+
6483
+ export type PriceControllerDeleteResponse = void;
6484
+
6485
+ export type PriceControllerBulkCreateData = {
6486
+ /**
6487
+ * Region code for tenant context
6488
+ */
6489
+ region: 'cn' | 'us' | 'de' | 'gb';
6490
+ requestBody: Array<string>;
6491
+ };
6492
+
6493
+ export type PriceControllerBulkCreateResponse = Array<PriceResponseDto>;
6494
+
5851
6495
  export type ReportingControllerGetPortfolioTrendsData = {
5852
6496
  /**
5853
6497
  * Data granularity
@@ -6141,6 +6785,29 @@ export type $OpenApiTs = {
6141
6785
  };
6142
6786
  };
6143
6787
  };
6788
+ '/api/v1/{region}/bean/transactions/{id}/correct': {
6789
+ post: {
6790
+ req: TransactionControllerCorrectData;
6791
+ res: {
6792
+ /**
6793
+ * Corrected transaction created
6794
+ */
6795
+ 201: TransactionDetailDto;
6796
+ /**
6797
+ * Original transaction not found
6798
+ */
6799
+ 404: ApiProblemResponseDto;
6800
+ /**
6801
+ * Original no longer ACTIVE (concurrent modification)
6802
+ */
6803
+ 409: ApiProblemResponseDto;
6804
+ /**
6805
+ * Pipeline validation failed (does not balance, invalid accounts)
6806
+ */
6807
+ 422: ApiProblemResponseDto;
6808
+ };
6809
+ };
6810
+ };
6144
6811
  '/api/v1/{region}/bean/transactions/tags': {
6145
6812
  get: {
6146
6813
  req: TransactionControllerSuggestTagsData;
@@ -7564,6 +8231,32 @@ export type $OpenApiTs = {
7564
8231
  };
7565
8232
  };
7566
8233
  };
8234
+ '/api/v1/{region}/bean/import/parser-coverage-miss': {
8235
+ post: {
8236
+ req: TelemetryControllerReportCoverageMissData;
8237
+ res: {
8238
+ /**
8239
+ * Coverage miss report received
8240
+ */
8241
+ 200: unknown;
8242
+ /**
8243
+ * Unauthorized
8244
+ */
8245
+ 401: unknown;
8246
+ };
8247
+ };
8248
+ };
8249
+ '/api/v1/{region}/bean/import/parser-coverage-metrics': {
8250
+ get: {
8251
+ req: TelemetryControllerGetCoverageMetricsData;
8252
+ res: {
8253
+ /**
8254
+ * Coverage metrics
8255
+ */
8256
+ 200: unknown;
8257
+ };
8258
+ };
8259
+ };
7567
8260
  '/api/v1/{region}/bean/nlp/process': {
7568
8261
  post: {
7569
8262
  req: NlpControllerProcessNaturalLanguageData;
@@ -7633,7 +8326,10 @@ export type $OpenApiTs = {
7633
8326
  /**
7634
8327
  * Accounts retrieved successfully. Response type depends on groupBy parameter.
7635
8328
  */
7636
- 200: AccountsResponseDto | AssetClassAccountsResponseDto;
8329
+ 200:
8330
+ | AccountsResponseDto
8331
+ | AssetClassAccountsResponseDto
8332
+ | HoldingAssetClassCrossAccountResponseDto;
7637
8333
  /**
7638
8334
  * User not authenticated
7639
8335
  */
@@ -7660,6 +8356,109 @@ export type $OpenApiTs = {
7660
8356
  };
7661
8357
  };
7662
8358
  };
8359
+ '/api/v1/{region}/investment/holdings/pnl': {
8360
+ get: {
8361
+ req: HoldingPnlControllerGetHoldingPnlData;
8362
+ res: {
8363
+ /**
8364
+ * Holding P&L retrieved successfully
8365
+ */
8366
+ 200: HoldingPnlResponseDto;
8367
+ /**
8368
+ * Invalid asOf format/value/future date, invalid accountId format, or unsupported method
8369
+ */
8370
+ 400: unknown;
8371
+ /**
8372
+ * User not authenticated
8373
+ */
8374
+ 401: unknown;
8375
+ };
8376
+ };
8377
+ };
8378
+ '/api/v1/{region}/bean/prices': {
8379
+ post: {
8380
+ req: PriceControllerCreateData;
8381
+ res: {
8382
+ /**
8383
+ * Price created successfully
8384
+ */
8385
+ 201: PriceResponseDto;
8386
+ /**
8387
+ * Currency or quoteCurrency commodity not found
8388
+ */
8389
+ 404: unknown;
8390
+ /**
8391
+ * Price already exists for this currency pair and date
8392
+ */
8393
+ 409: unknown;
8394
+ };
8395
+ };
8396
+ get: {
8397
+ req: PriceControllerFindAllData;
8398
+ res: {
8399
+ /**
8400
+ * Prices retrieved successfully
8401
+ */
8402
+ 200: PriceListResponseDto;
8403
+ };
8404
+ };
8405
+ };
8406
+ '/api/v1/{region}/bean/prices/{id}': {
8407
+ get: {
8408
+ req: PriceControllerFindOneData;
8409
+ res: {
8410
+ /**
8411
+ * Price retrieved successfully
8412
+ */
8413
+ 200: PriceResponseDto;
8414
+ /**
8415
+ * Price not found
8416
+ */
8417
+ 404: unknown;
8418
+ };
8419
+ };
8420
+ put: {
8421
+ req: PriceControllerUpdateData;
8422
+ res: {
8423
+ /**
8424
+ * Price updated successfully
8425
+ */
8426
+ 200: PriceResponseDto;
8427
+ /**
8428
+ * Price not found
8429
+ */
8430
+ 404: unknown;
8431
+ /**
8432
+ * Updated price conflicts with existing price
8433
+ */
8434
+ 409: unknown;
8435
+ };
8436
+ };
8437
+ delete: {
8438
+ req: PriceControllerDeleteData;
8439
+ res: {
8440
+ /**
8441
+ * Price deleted successfully
8442
+ */
8443
+ 204: void;
8444
+ /**
8445
+ * Price not found
8446
+ */
8447
+ 404: unknown;
8448
+ };
8449
+ };
8450
+ };
8451
+ '/api/v1/{region}/bean/prices/bulk': {
8452
+ post: {
8453
+ req: PriceControllerBulkCreateData;
8454
+ res: {
8455
+ /**
8456
+ * Prices created successfully
8457
+ */
8458
+ 201: Array<PriceResponseDto>;
8459
+ };
8460
+ };
8461
+ };
7663
8462
  '/api/v1/{region}/reporting/portfolio/trends': {
7664
8463
  get: {
7665
8464
  req: ReportingControllerGetPortfolioTrendsData;