@firela/api-types 0.0.0-canary.a90ce0e4 → 0.0.0-canary.a9f0aa08
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 +1163 -858
- package/dist/index.d.ts +1163 -858
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/src/generated/schemas.gen.ts +977 -596
- package/src/generated/services.gen.ts +499 -445
- package/src/generated/types.gen.ts +1344 -942
|
@@ -88,6 +88,47 @@ export const $AccountResponseDto = {
|
|
|
88
88
|
enum: ['Assets', 'Liabilities', 'Income', 'Expenses', 'Equity'],
|
|
89
89
|
example: 'Assets'
|
|
90
90
|
},
|
|
91
|
+
assetSubClass: {
|
|
92
|
+
type: 'string',
|
|
93
|
+
description:
|
|
94
|
+
'Account-level asset sub-class (product type, e.g. STOCK/DEPOSIT/CREDIT_CARD/PERSONAL_LOAN). Computed from the account path via the asset-classifier (ADR-0077). Null for non-asset accounts (Income/Expenses/Equity) or unmatched paths.',
|
|
95
|
+
enum: [
|
|
96
|
+
'DEPOSIT',
|
|
97
|
+
'CASH',
|
|
98
|
+
'MONEY_MARKET_FUND',
|
|
99
|
+
'STOCK',
|
|
100
|
+
'ETF',
|
|
101
|
+
'MUTUAL_FUND',
|
|
102
|
+
'EQUITY_COMPENSATION',
|
|
103
|
+
'GOVERNMENT_BOND',
|
|
104
|
+
'CORPORATE_BOND',
|
|
105
|
+
'BOND_FUND',
|
|
106
|
+
'PRIMARY_RESIDENCE',
|
|
107
|
+
'INVESTMENT_PROPERTY',
|
|
108
|
+
'REIT',
|
|
109
|
+
'GOLD',
|
|
110
|
+
'SILVER',
|
|
111
|
+
'PRECIOUS_METAL',
|
|
112
|
+
'PRECIOUS_METAL_FUND',
|
|
113
|
+
'COMMODITY',
|
|
114
|
+
'COMMODITY_FUND',
|
|
115
|
+
'CRYPTOCURRENCY',
|
|
116
|
+
'RETIREMENT_ACCOUNT',
|
|
117
|
+
'HEALTH_ACCOUNT',
|
|
118
|
+
'EDUCATION_ACCOUNT',
|
|
119
|
+
'INSURANCE',
|
|
120
|
+
'PRIVATE_EQUITY',
|
|
121
|
+
'HEDGE_FUND',
|
|
122
|
+
'COLLECTIBLES',
|
|
123
|
+
'MORTGAGE',
|
|
124
|
+
'STUDENT_LOAN',
|
|
125
|
+
'CREDIT_CARD',
|
|
126
|
+
'PERSONAL_LOAN',
|
|
127
|
+
'OTHER'
|
|
128
|
+
],
|
|
129
|
+
nullable: true,
|
|
130
|
+
example: 'STOCK'
|
|
131
|
+
},
|
|
91
132
|
status: {
|
|
92
133
|
type: 'string',
|
|
93
134
|
description: 'Account status',
|
|
@@ -3751,202 +3792,649 @@ export const $ForecastResponseDto = {
|
|
|
3751
3792
|
]
|
|
3752
3793
|
} as const;
|
|
3753
3794
|
|
|
3754
|
-
export const $
|
|
3795
|
+
export const $CurrencyBalanceDto = {
|
|
3755
3796
|
type: 'object',
|
|
3756
3797
|
properties: {
|
|
3757
|
-
|
|
3798
|
+
currency: {
|
|
3758
3799
|
type: 'string',
|
|
3759
|
-
|
|
3760
|
-
|
|
3800
|
+
description: 'ISO 4217 currency code',
|
|
3801
|
+
example: 'CNY'
|
|
3761
3802
|
},
|
|
3762
|
-
|
|
3803
|
+
balance: {
|
|
3763
3804
|
type: 'string',
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
|
|
3775
|
-
type: 'array'
|
|
3776
|
-
},
|
|
3777
|
-
maxItems: 50,
|
|
3778
|
-
type: 'array'
|
|
3779
|
-
},
|
|
3780
|
-
categoryKeywords: {
|
|
3781
|
-
items: {
|
|
3782
|
-
type: 'array'
|
|
3783
|
-
},
|
|
3784
|
-
maxItems: 50,
|
|
3785
|
-
type: 'array'
|
|
3786
|
-
},
|
|
3787
|
-
methodKeywords: {
|
|
3788
|
-
items: {
|
|
3789
|
-
type: 'array'
|
|
3790
|
-
},
|
|
3791
|
-
maxItems: 50,
|
|
3792
|
-
description: 'Payment method keywords (e.g., HuaBei, YuEBao)',
|
|
3793
|
-
type: 'array'
|
|
3794
|
-
},
|
|
3795
|
-
categoryAccount: {
|
|
3805
|
+
description: 'Balance amount',
|
|
3806
|
+
example: '500000.00'
|
|
3807
|
+
}
|
|
3808
|
+
},
|
|
3809
|
+
required: ['currency', 'balance']
|
|
3810
|
+
} as const;
|
|
3811
|
+
|
|
3812
|
+
export const $TimeSeriesPointDto = {
|
|
3813
|
+
type: 'object',
|
|
3814
|
+
properties: {
|
|
3815
|
+
date: {
|
|
3796
3816
|
type: 'string',
|
|
3797
|
-
|
|
3798
|
-
|
|
3799
|
-
'Destination account for expenses/income (e.g., Expenses:Food:Coffee)'
|
|
3817
|
+
description: 'Date in YYYY-MM-DD format',
|
|
3818
|
+
example: '2024-06-15'
|
|
3800
3819
|
},
|
|
3801
|
-
|
|
3820
|
+
value: {
|
|
3802
3821
|
type: 'string',
|
|
3803
|
-
|
|
3804
|
-
|
|
3822
|
+
description: 'Value at this date (in base currency)',
|
|
3823
|
+
example: '500000.00'
|
|
3805
3824
|
},
|
|
3806
|
-
|
|
3807
|
-
type: '
|
|
3808
|
-
|
|
3809
|
-
|
|
3825
|
+
change: {
|
|
3826
|
+
type: 'object',
|
|
3827
|
+
description: 'Change from previous point',
|
|
3828
|
+
example: '5000.00'
|
|
3810
3829
|
},
|
|
3811
|
-
|
|
3812
|
-
type: '
|
|
3813
|
-
|
|
3814
|
-
|
|
3830
|
+
assets: {
|
|
3831
|
+
type: 'string',
|
|
3832
|
+
description: 'Total assets at this date (in base currency)',
|
|
3833
|
+
example: '494338.00'
|
|
3815
3834
|
},
|
|
3816
|
-
|
|
3817
|
-
type: '
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
maximum: 1000
|
|
3835
|
+
liabilities: {
|
|
3836
|
+
type: 'string',
|
|
3837
|
+
description: 'Total liabilities at this date (in base currency)',
|
|
3838
|
+
example: '310098.00'
|
|
3821
3839
|
},
|
|
3822
|
-
|
|
3840
|
+
byCurrency: {
|
|
3841
|
+
description: 'Multi-currency breakdown for this point',
|
|
3842
|
+
type: 'array',
|
|
3823
3843
|
items: {
|
|
3824
|
-
|
|
3825
|
-
}
|
|
3826
|
-
maxItems: 20,
|
|
3827
|
-
type: 'array'
|
|
3828
|
-
},
|
|
3829
|
-
additionalMetadata: {
|
|
3830
|
-
type: 'object'
|
|
3831
|
-
},
|
|
3832
|
-
upsertByPayee: {
|
|
3833
|
-
type: 'boolean',
|
|
3834
|
-
description:
|
|
3835
|
-
'If true, update existing rule with matching payeeKeywords[0] instead of creating new rule'
|
|
3844
|
+
$ref: '#/components/schemas/CurrencyBalanceDto'
|
|
3845
|
+
}
|
|
3836
3846
|
}
|
|
3837
3847
|
},
|
|
3838
|
-
required: ['
|
|
3848
|
+
required: ['date', 'value']
|
|
3839
3849
|
} as const;
|
|
3840
3850
|
|
|
3841
|
-
export const $
|
|
3851
|
+
export const $TrendSummaryDto = {
|
|
3842
3852
|
type: 'object',
|
|
3843
3853
|
properties: {
|
|
3844
|
-
|
|
3845
|
-
type: '
|
|
3846
|
-
description: '
|
|
3854
|
+
startValue: {
|
|
3855
|
+
type: 'string',
|
|
3856
|
+
description: 'Value at start of period',
|
|
3857
|
+
example: '450000.00'
|
|
3847
3858
|
},
|
|
3848
|
-
|
|
3849
|
-
type: '
|
|
3850
|
-
description: '
|
|
3859
|
+
endValue: {
|
|
3860
|
+
type: 'string',
|
|
3861
|
+
description: 'Value at end of period',
|
|
3862
|
+
example: '500000.00'
|
|
3863
|
+
},
|
|
3864
|
+
totalChange: {
|
|
3865
|
+
type: 'string',
|
|
3866
|
+
description: 'Total change over period',
|
|
3867
|
+
example: '50000.00'
|
|
3868
|
+
},
|
|
3869
|
+
totalChangePercentage: {
|
|
3870
|
+
type: 'string',
|
|
3871
|
+
description: 'Total change percentage',
|
|
3872
|
+
example: '+11.11%'
|
|
3851
3873
|
}
|
|
3852
|
-
}
|
|
3874
|
+
},
|
|
3875
|
+
required: ['startValue', 'endValue', 'totalChange', 'totalChangePercentage']
|
|
3853
3876
|
} as const;
|
|
3854
3877
|
|
|
3855
|
-
export const $
|
|
3878
|
+
export const $MultiCurrencyPointDto = {
|
|
3856
3879
|
type: 'object',
|
|
3857
3880
|
properties: {
|
|
3858
|
-
|
|
3859
|
-
type: 'string',
|
|
3860
|
-
description: 'Rule ID'
|
|
3861
|
-
},
|
|
3862
|
-
name: {
|
|
3863
|
-
type: 'string',
|
|
3864
|
-
description: 'Rule name'
|
|
3865
|
-
},
|
|
3866
|
-
description: {
|
|
3881
|
+
date: {
|
|
3867
3882
|
type: 'string',
|
|
3868
|
-
description: '
|
|
3869
|
-
|
|
3870
|
-
narrationKeywords: {
|
|
3871
|
-
description: 'Keywords to match in transaction narration',
|
|
3872
|
-
type: 'array',
|
|
3873
|
-
items: {
|
|
3874
|
-
type: 'string'
|
|
3875
|
-
}
|
|
3876
|
-
},
|
|
3877
|
-
payeeKeywords: {
|
|
3878
|
-
description: 'Keywords to match in payee name',
|
|
3879
|
-
type: 'array',
|
|
3880
|
-
items: {
|
|
3881
|
-
type: 'string'
|
|
3882
|
-
}
|
|
3883
|
+
description: 'Date in YYYY-MM-DD format',
|
|
3884
|
+
example: '2024-06-15'
|
|
3883
3885
|
},
|
|
3884
|
-
|
|
3885
|
-
description: '
|
|
3886
|
+
byCurrency: {
|
|
3887
|
+
description: 'Balances by currency',
|
|
3886
3888
|
type: 'array',
|
|
3887
3889
|
items: {
|
|
3888
|
-
|
|
3890
|
+
$ref: '#/components/schemas/CurrencyBalanceDto'
|
|
3889
3891
|
}
|
|
3890
|
-
}
|
|
3891
|
-
|
|
3892
|
-
|
|
3892
|
+
}
|
|
3893
|
+
},
|
|
3894
|
+
required: ['date', 'byCurrency']
|
|
3895
|
+
} as const;
|
|
3896
|
+
|
|
3897
|
+
export const $PortfolioTrendsResponseDto = {
|
|
3898
|
+
type: 'object',
|
|
3899
|
+
properties: {
|
|
3900
|
+
series: {
|
|
3901
|
+
description: 'Time series data points',
|
|
3893
3902
|
type: 'array',
|
|
3894
3903
|
items: {
|
|
3895
|
-
|
|
3904
|
+
$ref: '#/components/schemas/TimeSeriesPointDto'
|
|
3896
3905
|
}
|
|
3897
3906
|
},
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
description: 'Destination account for categorization'
|
|
3901
|
-
},
|
|
3902
|
-
matchLogic: {
|
|
3903
|
-
type: 'string',
|
|
3904
|
-
description: 'Keyword matching logic',
|
|
3905
|
-
enum: ['OR', 'AND'],
|
|
3906
|
-
example: 'OR'
|
|
3907
|
-
},
|
|
3908
|
-
amountRange: {
|
|
3909
|
-
description: 'Amount range for matching',
|
|
3907
|
+
summary: {
|
|
3908
|
+
description: 'Period summary',
|
|
3910
3909
|
allOf: [
|
|
3911
3910
|
{
|
|
3912
|
-
$ref: '#/components/schemas/
|
|
3911
|
+
$ref: '#/components/schemas/TrendSummaryDto'
|
|
3913
3912
|
}
|
|
3914
3913
|
]
|
|
3915
3914
|
},
|
|
3916
|
-
|
|
3917
|
-
type: 'number',
|
|
3918
|
-
description: 'Rule priority (0-1000, higher = first match)',
|
|
3919
|
-
example: 50
|
|
3920
|
-
},
|
|
3921
|
-
enabled: {
|
|
3922
|
-
type: 'boolean',
|
|
3923
|
-
description: 'Whether the rule is enabled'
|
|
3924
|
-
},
|
|
3925
|
-
learningSource: {
|
|
3915
|
+
period: {
|
|
3926
3916
|
type: 'string',
|
|
3927
|
-
description: '
|
|
3928
|
-
|
|
3929
|
-
nullable: true,
|
|
3930
|
-
example: 'REVIEW_CENTER'
|
|
3917
|
+
description: 'Period requested',
|
|
3918
|
+
example: '6m'
|
|
3931
3919
|
},
|
|
3932
|
-
|
|
3933
|
-
type: '
|
|
3934
|
-
description: '
|
|
3920
|
+
granularity: {
|
|
3921
|
+
type: 'string',
|
|
3922
|
+
description: 'Data granularity',
|
|
3923
|
+
example: 'month'
|
|
3935
3924
|
},
|
|
3936
|
-
|
|
3937
|
-
type: '
|
|
3938
|
-
description: '
|
|
3939
|
-
example:
|
|
3925
|
+
currency: {
|
|
3926
|
+
type: 'string',
|
|
3927
|
+
description: 'Base currency for converted values',
|
|
3928
|
+
example: 'CNY'
|
|
3940
3929
|
},
|
|
3941
|
-
|
|
3942
|
-
description:
|
|
3930
|
+
byCurrency: {
|
|
3931
|
+
description:
|
|
3932
|
+
'Multi-currency time series (each point has currency breakdown)',
|
|
3943
3933
|
type: 'array',
|
|
3944
3934
|
items: {
|
|
3945
|
-
|
|
3935
|
+
$ref: '#/components/schemas/MultiCurrencyPointDto'
|
|
3946
3936
|
}
|
|
3947
3937
|
},
|
|
3948
|
-
|
|
3949
|
-
|
|
3938
|
+
warnings: {
|
|
3939
|
+
description: 'Exchange rate warnings',
|
|
3940
|
+
type: 'array',
|
|
3941
|
+
items: {
|
|
3942
|
+
$ref: '#/components/schemas/ExchangeRateWarningDto'
|
|
3943
|
+
}
|
|
3944
|
+
}
|
|
3945
|
+
},
|
|
3946
|
+
required: ['series', 'summary', 'period', 'granularity', 'currency']
|
|
3947
|
+
} as const;
|
|
3948
|
+
|
|
3949
|
+
export const $CashFlowPointDto = {
|
|
3950
|
+
type: 'object',
|
|
3951
|
+
properties: {
|
|
3952
|
+
month: {
|
|
3953
|
+
type: 'string',
|
|
3954
|
+
description: 'Month key (YYYY-MM)',
|
|
3955
|
+
example: '2024-03'
|
|
3956
|
+
},
|
|
3957
|
+
income: {
|
|
3958
|
+
type: 'string',
|
|
3959
|
+
description: 'Income in base currency (absolute, converted)',
|
|
3960
|
+
example: '10000.00'
|
|
3961
|
+
},
|
|
3962
|
+
expense: {
|
|
3963
|
+
type: 'string',
|
|
3964
|
+
description: 'Expense in base currency (absolute, converted)',
|
|
3965
|
+
example: '5000.00'
|
|
3966
|
+
},
|
|
3967
|
+
netSavings: {
|
|
3968
|
+
type: 'string',
|
|
3969
|
+
description: 'netSavings = income − expense (savings positive)',
|
|
3970
|
+
example: '5000.00'
|
|
3971
|
+
}
|
|
3972
|
+
},
|
|
3973
|
+
required: ['month', 'income', 'expense', 'netSavings']
|
|
3974
|
+
} as const;
|
|
3975
|
+
|
|
3976
|
+
export const $CashFlowTrendSummaryDto = {
|
|
3977
|
+
type: 'object',
|
|
3978
|
+
properties: {
|
|
3979
|
+
totalIncome: {
|
|
3980
|
+
type: 'string',
|
|
3981
|
+
description: 'Total income across the period',
|
|
3982
|
+
example: '60000.00'
|
|
3983
|
+
},
|
|
3984
|
+
totalExpense: {
|
|
3985
|
+
type: 'string',
|
|
3986
|
+
description: 'Total expense across the period',
|
|
3987
|
+
example: '30000.00'
|
|
3988
|
+
},
|
|
3989
|
+
totalNetSavings: {
|
|
3990
|
+
type: 'string',
|
|
3991
|
+
description: 'income − expense across the period',
|
|
3992
|
+
example: '30000.00'
|
|
3993
|
+
},
|
|
3994
|
+
averageMonthlyNetSavings: {
|
|
3995
|
+
type: 'string',
|
|
3996
|
+
description:
|
|
3997
|
+
'totalNetSavings divided by the window length (N months, incl. zero-filled)',
|
|
3998
|
+
example: '5000.00'
|
|
3999
|
+
}
|
|
4000
|
+
},
|
|
4001
|
+
required: [
|
|
4002
|
+
'totalIncome',
|
|
4003
|
+
'totalExpense',
|
|
4004
|
+
'totalNetSavings',
|
|
4005
|
+
'averageMonthlyNetSavings'
|
|
4006
|
+
]
|
|
4007
|
+
} as const;
|
|
4008
|
+
|
|
4009
|
+
export const $CashFlowTrendsResponseDto = {
|
|
4010
|
+
type: 'object',
|
|
4011
|
+
properties: {
|
|
4012
|
+
series: {
|
|
4013
|
+
description:
|
|
4014
|
+
'Monthly cash-flow series (fixed N-month window, zero-filled)',
|
|
4015
|
+
type: 'array',
|
|
4016
|
+
items: {
|
|
4017
|
+
$ref: '#/components/schemas/CashFlowPointDto'
|
|
4018
|
+
}
|
|
4019
|
+
},
|
|
4020
|
+
summary: {
|
|
4021
|
+
description: 'Period totals',
|
|
4022
|
+
allOf: [
|
|
4023
|
+
{
|
|
4024
|
+
$ref: '#/components/schemas/CashFlowTrendSummaryDto'
|
|
4025
|
+
}
|
|
4026
|
+
]
|
|
4027
|
+
},
|
|
4028
|
+
period: {
|
|
4029
|
+
type: 'string',
|
|
4030
|
+
description: 'Period requested',
|
|
4031
|
+
example: '6m'
|
|
4032
|
+
},
|
|
4033
|
+
granularity: {
|
|
4034
|
+
type: 'string',
|
|
4035
|
+
description: 'Data granularity (v1 returns month buckets)',
|
|
4036
|
+
example: 'month'
|
|
4037
|
+
},
|
|
4038
|
+
currency: {
|
|
4039
|
+
type: 'string',
|
|
4040
|
+
description: 'Base currency for converted values',
|
|
4041
|
+
example: 'CNY'
|
|
4042
|
+
},
|
|
4043
|
+
warnings: {
|
|
4044
|
+
description: 'Exchange rate warnings (e.g. missing rate for a currency)',
|
|
4045
|
+
type: 'array',
|
|
4046
|
+
items: {
|
|
4047
|
+
$ref: '#/components/schemas/ExchangeRateWarningDto'
|
|
4048
|
+
}
|
|
4049
|
+
}
|
|
4050
|
+
},
|
|
4051
|
+
required: ['series', 'summary', 'period', 'granularity', 'currency']
|
|
4052
|
+
} as const;
|
|
4053
|
+
|
|
4054
|
+
export const $GenerateSnapshotBody = {
|
|
4055
|
+
type: 'object',
|
|
4056
|
+
properties: {}
|
|
4057
|
+
} as const;
|
|
4058
|
+
|
|
4059
|
+
export const $GenerateSnapshotResponse = {
|
|
4060
|
+
type: 'object',
|
|
4061
|
+
properties: {}
|
|
4062
|
+
} as const;
|
|
4063
|
+
|
|
4064
|
+
export const $BackfillSnapshotsBody = {
|
|
4065
|
+
type: 'object',
|
|
4066
|
+
properties: {}
|
|
4067
|
+
} as const;
|
|
4068
|
+
|
|
4069
|
+
export const $BackfillSnapshotsResponse = {
|
|
4070
|
+
type: 'object',
|
|
4071
|
+
properties: {}
|
|
4072
|
+
} as const;
|
|
4073
|
+
|
|
4074
|
+
export const $DeleteOwnUserDto = {
|
|
4075
|
+
type: 'object',
|
|
4076
|
+
properties: {
|
|
4077
|
+
accessToken: {
|
|
4078
|
+
type: 'string',
|
|
4079
|
+
description: 'Access token for user verification',
|
|
4080
|
+
example: 'abc123xyz'
|
|
4081
|
+
}
|
|
4082
|
+
},
|
|
4083
|
+
required: ['accessToken']
|
|
4084
|
+
} as const;
|
|
4085
|
+
|
|
4086
|
+
export const $SignupDto = {
|
|
4087
|
+
type: 'object',
|
|
4088
|
+
properties: {
|
|
4089
|
+
turnstileToken: {
|
|
4090
|
+
type: 'string',
|
|
4091
|
+
description:
|
|
4092
|
+
'Cloudflare Turnstile verification token (optional when Turnstile disabled)',
|
|
4093
|
+
example: '0.abc123def456...'
|
|
4094
|
+
}
|
|
4095
|
+
}
|
|
4096
|
+
} as const;
|
|
4097
|
+
|
|
4098
|
+
export const $SignupResponseDto = {
|
|
4099
|
+
type: 'object',
|
|
4100
|
+
properties: {
|
|
4101
|
+
authToken: {
|
|
4102
|
+
type: 'string',
|
|
4103
|
+
description: 'JWT auth token',
|
|
4104
|
+
example: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
|
|
4105
|
+
},
|
|
4106
|
+
accessToken: {
|
|
4107
|
+
type: 'string',
|
|
4108
|
+
description: 'Auto-generated access token'
|
|
4109
|
+
},
|
|
4110
|
+
role: {
|
|
4111
|
+
type: 'string',
|
|
4112
|
+
description: 'Assigned user role',
|
|
4113
|
+
enum: ['USER', 'ADMIN', 'DEMO', 'INACTIVE', 'PAID', 'OPS']
|
|
4114
|
+
}
|
|
4115
|
+
},
|
|
4116
|
+
required: ['authToken', 'accessToken', 'role']
|
|
4117
|
+
} as const;
|
|
4118
|
+
|
|
4119
|
+
export const $UpdateUserSettingDto = {
|
|
4120
|
+
type: 'object',
|
|
4121
|
+
properties: {
|
|
4122
|
+
secId: {
|
|
4123
|
+
type: 'number',
|
|
4124
|
+
description: 'Security ID'
|
|
4125
|
+
},
|
|
4126
|
+
annualInterestRate: {
|
|
4127
|
+
type: 'number',
|
|
4128
|
+
description: 'Annual interest rate',
|
|
4129
|
+
example: 0.05
|
|
4130
|
+
},
|
|
4131
|
+
currency: {
|
|
4132
|
+
type: 'string',
|
|
4133
|
+
description: 'Currency code',
|
|
4134
|
+
example: 'USD'
|
|
4135
|
+
},
|
|
4136
|
+
baseCurrency: {
|
|
4137
|
+
type: 'string',
|
|
4138
|
+
description: 'Base currency code',
|
|
4139
|
+
example: 'USD'
|
|
4140
|
+
},
|
|
4141
|
+
benchmark: {
|
|
4142
|
+
type: 'string',
|
|
4143
|
+
description: 'Benchmark symbol',
|
|
4144
|
+
example: 'SPY'
|
|
4145
|
+
},
|
|
4146
|
+
colorScheme: {
|
|
4147
|
+
type: 'string',
|
|
4148
|
+
description: 'Color scheme',
|
|
4149
|
+
enum: ['DARK', 'LIGHT']
|
|
4150
|
+
},
|
|
4151
|
+
dateRange: {
|
|
4152
|
+
type: 'string',
|
|
4153
|
+
description: 'Date range filter',
|
|
4154
|
+
example: '1y'
|
|
4155
|
+
},
|
|
4156
|
+
emergencyFund: {
|
|
4157
|
+
type: 'number',
|
|
4158
|
+
description: 'Emergency fund amount',
|
|
4159
|
+
example: 10000
|
|
4160
|
+
},
|
|
4161
|
+
'filters.accounts': {
|
|
4162
|
+
description: 'Account filter IDs',
|
|
4163
|
+
type: 'array',
|
|
4164
|
+
items: {
|
|
4165
|
+
type: 'string'
|
|
4166
|
+
}
|
|
4167
|
+
},
|
|
4168
|
+
'filters.assetClasses': {
|
|
4169
|
+
description: 'Asset class filters',
|
|
4170
|
+
type: 'array',
|
|
4171
|
+
items: {
|
|
4172
|
+
type: 'string'
|
|
4173
|
+
}
|
|
4174
|
+
},
|
|
4175
|
+
'filters.dataSource': {
|
|
4176
|
+
type: 'string',
|
|
4177
|
+
description: 'Data source filter'
|
|
4178
|
+
},
|
|
4179
|
+
'filters.symbol': {
|
|
4180
|
+
type: 'string',
|
|
4181
|
+
description: 'Symbol filter'
|
|
4182
|
+
},
|
|
4183
|
+
'filters.tags': {
|
|
4184
|
+
description: 'Tag filters',
|
|
4185
|
+
type: 'array',
|
|
4186
|
+
items: {
|
|
4187
|
+
type: 'string'
|
|
4188
|
+
}
|
|
4189
|
+
},
|
|
4190
|
+
isExperimentalFeatures: {
|
|
4191
|
+
type: 'boolean',
|
|
4192
|
+
description: 'Enable experimental features'
|
|
4193
|
+
},
|
|
4194
|
+
isRestrictedView: {
|
|
4195
|
+
type: 'boolean',
|
|
4196
|
+
description: 'Enable restricted view mode'
|
|
4197
|
+
},
|
|
4198
|
+
language: {
|
|
4199
|
+
type: 'string',
|
|
4200
|
+
description: 'Language code',
|
|
4201
|
+
example: 'en'
|
|
4202
|
+
},
|
|
4203
|
+
locale: {
|
|
4204
|
+
type: 'string',
|
|
4205
|
+
description: 'Locale code',
|
|
4206
|
+
example: 'en-US'
|
|
4207
|
+
},
|
|
4208
|
+
projectedTotalAmount: {
|
|
4209
|
+
type: 'number',
|
|
4210
|
+
description: 'Projected total amount',
|
|
4211
|
+
example: 1000000
|
|
4212
|
+
},
|
|
4213
|
+
retirementDate: {
|
|
4214
|
+
type: 'string',
|
|
4215
|
+
description: 'Retirement date in ISO 8601 format',
|
|
4216
|
+
example: '2050-01-01'
|
|
4217
|
+
},
|
|
4218
|
+
savingsRate: {
|
|
4219
|
+
type: 'number',
|
|
4220
|
+
description: 'Savings rate percentage',
|
|
4221
|
+
example: 0.2
|
|
4222
|
+
},
|
|
4223
|
+
viewMode: {
|
|
4224
|
+
type: 'string',
|
|
4225
|
+
description: 'View mode',
|
|
4226
|
+
enum: ['DEFAULT', 'ZEN']
|
|
4227
|
+
}
|
|
4228
|
+
}
|
|
4229
|
+
} as const;
|
|
4230
|
+
|
|
4231
|
+
export const $UpdatePropertyDto = {
|
|
4232
|
+
type: 'object',
|
|
4233
|
+
properties: {
|
|
4234
|
+
value: {
|
|
4235
|
+
type: 'string',
|
|
4236
|
+
description: 'Property value'
|
|
4237
|
+
}
|
|
4238
|
+
},
|
|
4239
|
+
required: ['value']
|
|
4240
|
+
} as const;
|
|
4241
|
+
|
|
4242
|
+
export const $CreateTransactionRuleDto = {
|
|
4243
|
+
type: 'object',
|
|
4244
|
+
properties: {
|
|
4245
|
+
name: {
|
|
4246
|
+
type: 'string',
|
|
4247
|
+
minLength: 1,
|
|
4248
|
+
maxLength: 100
|
|
4249
|
+
},
|
|
4250
|
+
description: {
|
|
4251
|
+
type: 'string',
|
|
4252
|
+
maxLength: 500
|
|
4253
|
+
},
|
|
4254
|
+
narrationKeywords: {
|
|
4255
|
+
items: {
|
|
4256
|
+
type: 'array'
|
|
4257
|
+
},
|
|
4258
|
+
maxItems: 50,
|
|
4259
|
+
type: 'array'
|
|
4260
|
+
},
|
|
4261
|
+
payeeKeywords: {
|
|
4262
|
+
items: {
|
|
4263
|
+
type: 'array'
|
|
4264
|
+
},
|
|
4265
|
+
maxItems: 50,
|
|
4266
|
+
type: 'array'
|
|
4267
|
+
},
|
|
4268
|
+
categoryKeywords: {
|
|
4269
|
+
items: {
|
|
4270
|
+
type: 'array'
|
|
4271
|
+
},
|
|
4272
|
+
maxItems: 50,
|
|
4273
|
+
type: 'array'
|
|
4274
|
+
},
|
|
4275
|
+
methodKeywords: {
|
|
4276
|
+
items: {
|
|
4277
|
+
type: 'array'
|
|
4278
|
+
},
|
|
4279
|
+
maxItems: 50,
|
|
4280
|
+
description: 'Payment method keywords (e.g., HuaBei, YuEBao)',
|
|
4281
|
+
type: 'array'
|
|
4282
|
+
},
|
|
4283
|
+
categoryAccount: {
|
|
4284
|
+
type: 'string',
|
|
4285
|
+
maxLength: 200,
|
|
4286
|
+
description:
|
|
4287
|
+
'Destination account for expenses/income (e.g., Expenses:Food:Coffee)'
|
|
4288
|
+
},
|
|
4289
|
+
matchLogic: {
|
|
4290
|
+
type: 'string',
|
|
4291
|
+
enum: ['OR', 'AND'],
|
|
4292
|
+
default: 'OR'
|
|
4293
|
+
},
|
|
4294
|
+
amountMin: {
|
|
4295
|
+
type: 'number',
|
|
4296
|
+
minimum: 0,
|
|
4297
|
+
description: 'Minimum transaction amount (inclusive)'
|
|
4298
|
+
},
|
|
4299
|
+
amountMax: {
|
|
4300
|
+
type: 'number',
|
|
4301
|
+
minimum: 0,
|
|
4302
|
+
description: 'Maximum transaction amount (inclusive)'
|
|
4303
|
+
},
|
|
4304
|
+
priority: {
|
|
4305
|
+
type: 'number',
|
|
4306
|
+
default: 50,
|
|
4307
|
+
minimum: 0,
|
|
4308
|
+
maximum: 1000
|
|
4309
|
+
},
|
|
4310
|
+
additionalTags: {
|
|
4311
|
+
items: {
|
|
4312
|
+
type: 'array'
|
|
4313
|
+
},
|
|
4314
|
+
maxItems: 20,
|
|
4315
|
+
type: 'array'
|
|
4316
|
+
},
|
|
4317
|
+
additionalMetadata: {
|
|
4318
|
+
type: 'object'
|
|
4319
|
+
},
|
|
4320
|
+
upsertByPayee: {
|
|
4321
|
+
type: 'boolean',
|
|
4322
|
+
description:
|
|
4323
|
+
'If true, update existing rule with matching payeeKeywords[0] instead of creating new rule'
|
|
4324
|
+
}
|
|
4325
|
+
},
|
|
4326
|
+
required: ['name', 'matchLogic', 'priority']
|
|
4327
|
+
} as const;
|
|
4328
|
+
|
|
4329
|
+
export const $AmountRangeDto = {
|
|
4330
|
+
type: 'object',
|
|
4331
|
+
properties: {
|
|
4332
|
+
min: {
|
|
4333
|
+
type: 'number',
|
|
4334
|
+
description: 'Minimum amount'
|
|
4335
|
+
},
|
|
4336
|
+
max: {
|
|
4337
|
+
type: 'number',
|
|
4338
|
+
description: 'Maximum amount'
|
|
4339
|
+
}
|
|
4340
|
+
}
|
|
4341
|
+
} as const;
|
|
4342
|
+
|
|
4343
|
+
export const $TransactionRuleResponseDto = {
|
|
4344
|
+
type: 'object',
|
|
4345
|
+
properties: {
|
|
4346
|
+
id: {
|
|
4347
|
+
type: 'string',
|
|
4348
|
+
description: 'Rule ID'
|
|
4349
|
+
},
|
|
4350
|
+
name: {
|
|
4351
|
+
type: 'string',
|
|
4352
|
+
description: 'Rule name'
|
|
4353
|
+
},
|
|
4354
|
+
description: {
|
|
4355
|
+
type: 'string',
|
|
4356
|
+
description: 'Rule description'
|
|
4357
|
+
},
|
|
4358
|
+
narrationKeywords: {
|
|
4359
|
+
description: 'Keywords to match in transaction narration',
|
|
4360
|
+
type: 'array',
|
|
4361
|
+
items: {
|
|
4362
|
+
type: 'string'
|
|
4363
|
+
}
|
|
4364
|
+
},
|
|
4365
|
+
payeeKeywords: {
|
|
4366
|
+
description: 'Keywords to match in payee name',
|
|
4367
|
+
type: 'array',
|
|
4368
|
+
items: {
|
|
4369
|
+
type: 'string'
|
|
4370
|
+
}
|
|
4371
|
+
},
|
|
4372
|
+
categoryKeywords: {
|
|
4373
|
+
description: 'Keywords to match in category',
|
|
4374
|
+
type: 'array',
|
|
4375
|
+
items: {
|
|
4376
|
+
type: 'string'
|
|
4377
|
+
}
|
|
4378
|
+
},
|
|
4379
|
+
methodKeywords: {
|
|
4380
|
+
description: 'Keywords to match in payment method',
|
|
4381
|
+
type: 'array',
|
|
4382
|
+
items: {
|
|
4383
|
+
type: 'string'
|
|
4384
|
+
}
|
|
4385
|
+
},
|
|
4386
|
+
categoryAccount: {
|
|
4387
|
+
type: 'string',
|
|
4388
|
+
description: 'Destination account for categorization'
|
|
4389
|
+
},
|
|
4390
|
+
matchLogic: {
|
|
4391
|
+
type: 'string',
|
|
4392
|
+
description: 'Keyword matching logic',
|
|
4393
|
+
enum: ['OR', 'AND'],
|
|
4394
|
+
example: 'OR'
|
|
4395
|
+
},
|
|
4396
|
+
amountRange: {
|
|
4397
|
+
description: 'Amount range for matching',
|
|
4398
|
+
allOf: [
|
|
4399
|
+
{
|
|
4400
|
+
$ref: '#/components/schemas/AmountRangeDto'
|
|
4401
|
+
}
|
|
4402
|
+
]
|
|
4403
|
+
},
|
|
4404
|
+
priority: {
|
|
4405
|
+
type: 'number',
|
|
4406
|
+
description: 'Rule priority (0-1000, higher = first match)',
|
|
4407
|
+
example: 50
|
|
4408
|
+
},
|
|
4409
|
+
enabled: {
|
|
4410
|
+
type: 'boolean',
|
|
4411
|
+
description: 'Whether the rule is enabled'
|
|
4412
|
+
},
|
|
4413
|
+
learningSource: {
|
|
4414
|
+
type: 'string',
|
|
4415
|
+
description: 'Learning source: NLP, REVIEW_CENTER, or null for manual',
|
|
4416
|
+
enum: ['NLP', 'REVIEW_CENTER'],
|
|
4417
|
+
nullable: true,
|
|
4418
|
+
example: 'REVIEW_CENTER'
|
|
4419
|
+
},
|
|
4420
|
+
autoApplyEnabled: {
|
|
4421
|
+
type: 'boolean',
|
|
4422
|
+
description: 'Whether auto-apply is enabled for this rule'
|
|
4423
|
+
},
|
|
4424
|
+
confirmationCount: {
|
|
4425
|
+
type: 'number',
|
|
4426
|
+
description: 'Number of confirmations for NLP-learned rules',
|
|
4427
|
+
example: 3
|
|
4428
|
+
},
|
|
4429
|
+
additionalTags: {
|
|
4430
|
+
description: 'Additional tags',
|
|
4431
|
+
type: 'array',
|
|
4432
|
+
items: {
|
|
4433
|
+
type: 'string'
|
|
4434
|
+
}
|
|
4435
|
+
},
|
|
4436
|
+
additionalMetadata: {
|
|
4437
|
+
type: 'object',
|
|
3950
4438
|
description: 'Additional metadata',
|
|
3951
4439
|
additionalProperties: {
|
|
3952
4440
|
type: 'string'
|
|
@@ -4400,153 +4888,6 @@ export const $TestRuleResponseDto = {
|
|
|
4400
4888
|
required: ['ruleId', 'matches', 'confidence', 'matchDetails']
|
|
4401
4889
|
} as const;
|
|
4402
4890
|
|
|
4403
|
-
export const $DeleteOwnUserDto = {
|
|
4404
|
-
type: 'object',
|
|
4405
|
-
properties: {
|
|
4406
|
-
accessToken: {
|
|
4407
|
-
type: 'string',
|
|
4408
|
-
description: 'Access token for user verification',
|
|
4409
|
-
example: 'abc123xyz'
|
|
4410
|
-
}
|
|
4411
|
-
},
|
|
4412
|
-
required: ['accessToken']
|
|
4413
|
-
} as const;
|
|
4414
|
-
|
|
4415
|
-
export const $SignupDto = {
|
|
4416
|
-
type: 'object',
|
|
4417
|
-
properties: {
|
|
4418
|
-
turnstileToken: {
|
|
4419
|
-
type: 'string',
|
|
4420
|
-
description:
|
|
4421
|
-
'Cloudflare Turnstile verification token (optional when Turnstile disabled)',
|
|
4422
|
-
example: '0.abc123def456...'
|
|
4423
|
-
}
|
|
4424
|
-
}
|
|
4425
|
-
} as const;
|
|
4426
|
-
|
|
4427
|
-
export const $UpdateUserSettingDto = {
|
|
4428
|
-
type: 'object',
|
|
4429
|
-
properties: {
|
|
4430
|
-
secId: {
|
|
4431
|
-
type: 'number',
|
|
4432
|
-
description: 'Security ID'
|
|
4433
|
-
},
|
|
4434
|
-
annualInterestRate: {
|
|
4435
|
-
type: 'number',
|
|
4436
|
-
description: 'Annual interest rate',
|
|
4437
|
-
example: 0.05
|
|
4438
|
-
},
|
|
4439
|
-
currency: {
|
|
4440
|
-
type: 'string',
|
|
4441
|
-
description: 'Currency code',
|
|
4442
|
-
example: 'USD'
|
|
4443
|
-
},
|
|
4444
|
-
baseCurrency: {
|
|
4445
|
-
type: 'string',
|
|
4446
|
-
description: 'Base currency code',
|
|
4447
|
-
example: 'USD'
|
|
4448
|
-
},
|
|
4449
|
-
benchmark: {
|
|
4450
|
-
type: 'string',
|
|
4451
|
-
description: 'Benchmark symbol',
|
|
4452
|
-
example: 'SPY'
|
|
4453
|
-
},
|
|
4454
|
-
colorScheme: {
|
|
4455
|
-
type: 'string',
|
|
4456
|
-
description: 'Color scheme',
|
|
4457
|
-
enum: ['DARK', 'LIGHT']
|
|
4458
|
-
},
|
|
4459
|
-
dateRange: {
|
|
4460
|
-
type: 'string',
|
|
4461
|
-
description: 'Date range filter',
|
|
4462
|
-
example: '1y'
|
|
4463
|
-
},
|
|
4464
|
-
emergencyFund: {
|
|
4465
|
-
type: 'number',
|
|
4466
|
-
description: 'Emergency fund amount',
|
|
4467
|
-
example: 10000
|
|
4468
|
-
},
|
|
4469
|
-
'filters.accounts': {
|
|
4470
|
-
description: 'Account filter IDs',
|
|
4471
|
-
type: 'array',
|
|
4472
|
-
items: {
|
|
4473
|
-
type: 'string'
|
|
4474
|
-
}
|
|
4475
|
-
},
|
|
4476
|
-
'filters.assetClasses': {
|
|
4477
|
-
description: 'Asset class filters',
|
|
4478
|
-
type: 'array',
|
|
4479
|
-
items: {
|
|
4480
|
-
type: 'string'
|
|
4481
|
-
}
|
|
4482
|
-
},
|
|
4483
|
-
'filters.dataSource': {
|
|
4484
|
-
type: 'string',
|
|
4485
|
-
description: 'Data source filter'
|
|
4486
|
-
},
|
|
4487
|
-
'filters.symbol': {
|
|
4488
|
-
type: 'string',
|
|
4489
|
-
description: 'Symbol filter'
|
|
4490
|
-
},
|
|
4491
|
-
'filters.tags': {
|
|
4492
|
-
description: 'Tag filters',
|
|
4493
|
-
type: 'array',
|
|
4494
|
-
items: {
|
|
4495
|
-
type: 'string'
|
|
4496
|
-
}
|
|
4497
|
-
},
|
|
4498
|
-
isExperimentalFeatures: {
|
|
4499
|
-
type: 'boolean',
|
|
4500
|
-
description: 'Enable experimental features'
|
|
4501
|
-
},
|
|
4502
|
-
isRestrictedView: {
|
|
4503
|
-
type: 'boolean',
|
|
4504
|
-
description: 'Enable restricted view mode'
|
|
4505
|
-
},
|
|
4506
|
-
language: {
|
|
4507
|
-
type: 'string',
|
|
4508
|
-
description: 'Language code',
|
|
4509
|
-
example: 'en'
|
|
4510
|
-
},
|
|
4511
|
-
locale: {
|
|
4512
|
-
type: 'string',
|
|
4513
|
-
description: 'Locale code',
|
|
4514
|
-
example: 'en-US'
|
|
4515
|
-
},
|
|
4516
|
-
projectedTotalAmount: {
|
|
4517
|
-
type: 'number',
|
|
4518
|
-
description: 'Projected total amount',
|
|
4519
|
-
example: 1000000
|
|
4520
|
-
},
|
|
4521
|
-
retirementDate: {
|
|
4522
|
-
type: 'string',
|
|
4523
|
-
description: 'Retirement date in ISO 8601 format',
|
|
4524
|
-
example: '2050-01-01'
|
|
4525
|
-
},
|
|
4526
|
-
savingsRate: {
|
|
4527
|
-
type: 'number',
|
|
4528
|
-
description: 'Savings rate percentage',
|
|
4529
|
-
example: 0.2
|
|
4530
|
-
},
|
|
4531
|
-
viewMode: {
|
|
4532
|
-
type: 'string',
|
|
4533
|
-
description: 'View mode',
|
|
4534
|
-
enum: ['DEFAULT', 'ZEN']
|
|
4535
|
-
}
|
|
4536
|
-
}
|
|
4537
|
-
} as const;
|
|
4538
|
-
|
|
4539
|
-
export const $UpdatePropertyDto = {
|
|
4540
|
-
type: 'object',
|
|
4541
|
-
properties: {
|
|
4542
|
-
value: {
|
|
4543
|
-
type: 'string',
|
|
4544
|
-
description: 'Property value'
|
|
4545
|
-
}
|
|
4546
|
-
},
|
|
4547
|
-
required: ['value']
|
|
4548
|
-
} as const;
|
|
4549
|
-
|
|
4550
4891
|
export const $CreateBeanEventDto = {
|
|
4551
4892
|
type: 'object',
|
|
4552
4893
|
properties: {
|
|
@@ -5625,6 +5966,18 @@ export const $ProcessNlpDto = {
|
|
|
5625
5966
|
currency: 'CNY',
|
|
5626
5967
|
payee: 'Starbucks'
|
|
5627
5968
|
}
|
|
5969
|
+
},
|
|
5970
|
+
selectedRuleId: {
|
|
5971
|
+
type: 'string',
|
|
5972
|
+
description:
|
|
5973
|
+
'confirm_rule echo-back: rule id selected from the prior confirm_rule response (matchedRule.id or alternatives[i].ruleId). Applied directly when the session is confirming_rule — no NL re-parse.',
|
|
5974
|
+
example: 'rule_abc123'
|
|
5975
|
+
},
|
|
5976
|
+
selectedAccount: {
|
|
5977
|
+
type: 'string',
|
|
5978
|
+
description:
|
|
5979
|
+
'confirm_account echo-back: account path selected from the prior confirm_account response (suggestedAccount, similarAccounts[i], or a typed path). Applied directly when the session is confirming_account — no NL re-parse.',
|
|
5980
|
+
example: 'Expenses:Food:Coffee'
|
|
5628
5981
|
}
|
|
5629
5982
|
},
|
|
5630
5983
|
required: ['message']
|
|
@@ -5949,7 +6302,8 @@ export const $NlpAccountConfirmationDataDto = {
|
|
|
5949
6302
|
},
|
|
5950
6303
|
suggestedAccount: {
|
|
5951
6304
|
type: 'string',
|
|
5952
|
-
description:
|
|
6305
|
+
description:
|
|
6306
|
+
'Suggested replacement account (omitted when no clear candidate)',
|
|
5953
6307
|
example: 'Expenses:Food:Drinks'
|
|
5954
6308
|
},
|
|
5955
6309
|
similarAccounts: {
|
|
@@ -5971,7 +6325,6 @@ export const $NlpAccountConfirmationDataDto = {
|
|
|
5971
6325
|
},
|
|
5972
6326
|
required: [
|
|
5973
6327
|
'invalidAccount',
|
|
5974
|
-
'suggestedAccount',
|
|
5975
6328
|
'similarAccounts',
|
|
5976
6329
|
'errorMessage',
|
|
5977
6330
|
'transactionContext'
|
|
@@ -6144,7 +6497,8 @@ export const $NlpSuggestedAccountDto = {
|
|
|
6144
6497
|
},
|
|
6145
6498
|
confidence: {
|
|
6146
6499
|
type: 'number',
|
|
6147
|
-
description:
|
|
6500
|
+
description:
|
|
6501
|
+
'Confidence score for this suggestion (0-1). Present = predicted (confirm/confirm_rule/confirm_account); omitted = actual persisted account (created). (#586)',
|
|
6148
6502
|
example: 0.9
|
|
6149
6503
|
}
|
|
6150
6504
|
},
|
|
@@ -6180,23 +6534,31 @@ export const $NlpDefaultAccountsDto = {
|
|
|
6180
6534
|
properties: {
|
|
6181
6535
|
asset: {
|
|
6182
6536
|
type: 'string',
|
|
6183
|
-
description:
|
|
6184
|
-
|
|
6537
|
+
description:
|
|
6538
|
+
'Default OPEN asset account (MRU when multiple), or null when none/ambiguous',
|
|
6539
|
+
example: 'Assets:Checking',
|
|
6540
|
+
nullable: true
|
|
6185
6541
|
},
|
|
6186
6542
|
expense: {
|
|
6187
6543
|
type: 'string',
|
|
6188
|
-
description:
|
|
6189
|
-
|
|
6544
|
+
description:
|
|
6545
|
+
'Default OPEN expense account (MRU when multiple), or null when none/ambiguous',
|
|
6546
|
+
example: 'Expenses:Food:Coffee',
|
|
6547
|
+
nullable: true
|
|
6190
6548
|
},
|
|
6191
6549
|
income: {
|
|
6192
6550
|
type: 'string',
|
|
6193
|
-
description:
|
|
6194
|
-
|
|
6551
|
+
description:
|
|
6552
|
+
'Default OPEN income account (MRU when multiple), or null when none/ambiguous',
|
|
6553
|
+
example: 'Income:Salary',
|
|
6554
|
+
nullable: true
|
|
6195
6555
|
},
|
|
6196
6556
|
liability: {
|
|
6197
6557
|
type: 'string',
|
|
6198
|
-
description:
|
|
6199
|
-
|
|
6558
|
+
description:
|
|
6559
|
+
'Default OPEN liability account (MRU when multiple), or null when none/ambiguous',
|
|
6560
|
+
example: 'Liabilities:CreditCard',
|
|
6561
|
+
nullable: true
|
|
6200
6562
|
}
|
|
6201
6563
|
},
|
|
6202
6564
|
required: ['asset', 'expense', 'income', 'liability']
|
|
@@ -6221,7 +6583,8 @@ export const $NlpResponseDto = {
|
|
|
6221
6583
|
'confirm_rule',
|
|
6222
6584
|
'confirm_account',
|
|
6223
6585
|
'confirm_payee',
|
|
6224
|
-
'cancel'
|
|
6586
|
+
'cancel',
|
|
6587
|
+
'aborted'
|
|
6225
6588
|
]
|
|
6226
6589
|
},
|
|
6227
6590
|
intent: {
|
|
@@ -6383,7 +6746,7 @@ export const $NlpResponseDto = {
|
|
|
6383
6746
|
},
|
|
6384
6747
|
suggestedAccounts: {
|
|
6385
6748
|
description:
|
|
6386
|
-
'Suggested accounts for this transaction.
|
|
6749
|
+
'Suggested accounts for this transaction (#586). confirm/confirm_rule/confirm_account: predicted (source/destination carry confidence); created: actual persisted accounts (confidence omitted). confirm_account destination is the suggested replacement, never the invalid account.',
|
|
6387
6750
|
allOf: [
|
|
6388
6751
|
{
|
|
6389
6752
|
$ref: '#/components/schemas/NlpSuggestedAccountsDto'
|
|
@@ -6392,7 +6755,7 @@ export const $NlpResponseDto = {
|
|
|
6392
6755
|
},
|
|
6393
6756
|
defaultAccounts: {
|
|
6394
6757
|
description:
|
|
6395
|
-
'Default accounts for the user/region.
|
|
6758
|
+
'Default fallback accounts for the user/region (#586). v1 returns universal constants; per-user personalization is planned.',
|
|
6396
6759
|
allOf: [
|
|
6397
6760
|
{
|
|
6398
6761
|
$ref: '#/components/schemas/NlpDefaultAccountsDto'
|
|
@@ -6403,6 +6766,148 @@ export const $NlpResponseDto = {
|
|
|
6403
6766
|
required: ['status', 'action']
|
|
6404
6767
|
} as const;
|
|
6405
6768
|
|
|
6769
|
+
export const $PlatformListItemDto = {
|
|
6770
|
+
type: 'object',
|
|
6771
|
+
properties: {
|
|
6772
|
+
id: {
|
|
6773
|
+
type: 'string',
|
|
6774
|
+
description: 'Global platform ID'
|
|
6775
|
+
},
|
|
6776
|
+
name: {
|
|
6777
|
+
type: 'string',
|
|
6778
|
+
description: 'Platform name'
|
|
6779
|
+
},
|
|
6780
|
+
url: {
|
|
6781
|
+
type: 'string',
|
|
6782
|
+
description: 'Platform URL'
|
|
6783
|
+
},
|
|
6784
|
+
type: {
|
|
6785
|
+
type: 'string',
|
|
6786
|
+
description: 'Platform type',
|
|
6787
|
+
enum: [
|
|
6788
|
+
'BANK',
|
|
6789
|
+
'BROKERAGE',
|
|
6790
|
+
'CRYPTO_EXCHANGE',
|
|
6791
|
+
'PAYMENT',
|
|
6792
|
+
'INVESTMENT',
|
|
6793
|
+
'INSURANCE',
|
|
6794
|
+
'OTHER'
|
|
6795
|
+
]
|
|
6796
|
+
},
|
|
6797
|
+
canonical: {
|
|
6798
|
+
type: 'string',
|
|
6799
|
+
description: 'Canonical identifier in ACCOUNT_RE format (e.g., "icbc")'
|
|
6800
|
+
},
|
|
6801
|
+
suggestedSegment: {
|
|
6802
|
+
type: 'string',
|
|
6803
|
+
description:
|
|
6804
|
+
'Suggested path segment — canonical with first char uppercased (ACC_COMP_NAME_RE)'
|
|
6805
|
+
},
|
|
6806
|
+
logoUrl: {
|
|
6807
|
+
type: 'string',
|
|
6808
|
+
description: 'Logo URL',
|
|
6809
|
+
nullable: true
|
|
6810
|
+
},
|
|
6811
|
+
isBound: {
|
|
6812
|
+
type: 'boolean',
|
|
6813
|
+
description: 'Whether user has accounts using this platform'
|
|
6814
|
+
}
|
|
6815
|
+
},
|
|
6816
|
+
required: [
|
|
6817
|
+
'id',
|
|
6818
|
+
'name',
|
|
6819
|
+
'url',
|
|
6820
|
+
'type',
|
|
6821
|
+
'canonical',
|
|
6822
|
+
'suggestedSegment',
|
|
6823
|
+
'logoUrl',
|
|
6824
|
+
'isBound'
|
|
6825
|
+
]
|
|
6826
|
+
} as const;
|
|
6827
|
+
|
|
6828
|
+
export const $PlatformMatchResultDto = {
|
|
6829
|
+
type: 'object',
|
|
6830
|
+
properties: {
|
|
6831
|
+
id: {
|
|
6832
|
+
type: 'string',
|
|
6833
|
+
description: 'Global platform ID'
|
|
6834
|
+
},
|
|
6835
|
+
name: {
|
|
6836
|
+
type: 'string',
|
|
6837
|
+
description: 'Platform name (e.g., "ICBC")'
|
|
6838
|
+
},
|
|
6839
|
+
canonical: {
|
|
6840
|
+
type: 'string',
|
|
6841
|
+
description: 'Canonical identifier in ACCOUNT_RE format (e.g., "icbc")'
|
|
6842
|
+
},
|
|
6843
|
+
type: {
|
|
6844
|
+
type: 'string',
|
|
6845
|
+
description: 'Platform type',
|
|
6846
|
+
enum: [
|
|
6847
|
+
'BANK',
|
|
6848
|
+
'BROKERAGE',
|
|
6849
|
+
'CRYPTO_EXCHANGE',
|
|
6850
|
+
'PAYMENT',
|
|
6851
|
+
'INVESTMENT',
|
|
6852
|
+
'INSURANCE',
|
|
6853
|
+
'OTHER'
|
|
6854
|
+
]
|
|
6855
|
+
},
|
|
6856
|
+
suggestedSegment: {
|
|
6857
|
+
type: 'string',
|
|
6858
|
+
description:
|
|
6859
|
+
'Suggested path segment — canonical, already in ACCOUNT_RE format'
|
|
6860
|
+
},
|
|
6861
|
+
logoUrl: {
|
|
6862
|
+
type: 'string',
|
|
6863
|
+
description: 'Logo URL',
|
|
6864
|
+
nullable: true
|
|
6865
|
+
},
|
|
6866
|
+
matchType: {
|
|
6867
|
+
type: 'string',
|
|
6868
|
+
description: "How this row matched: 'exact' > 'prefix' > 'substring'",
|
|
6869
|
+
enum: ['exact', 'prefix', 'substring']
|
|
6870
|
+
}
|
|
6871
|
+
},
|
|
6872
|
+
required: [
|
|
6873
|
+
'id',
|
|
6874
|
+
'name',
|
|
6875
|
+
'canonical',
|
|
6876
|
+
'type',
|
|
6877
|
+
'suggestedSegment',
|
|
6878
|
+
'logoUrl',
|
|
6879
|
+
'matchType'
|
|
6880
|
+
]
|
|
6881
|
+
} as const;
|
|
6882
|
+
|
|
6883
|
+
export const $PlatformMatchResponseDto = {
|
|
6884
|
+
type: 'object',
|
|
6885
|
+
properties: {
|
|
6886
|
+
platforms: {
|
|
6887
|
+
description: 'Ranked matches, best tier first (at most 10 rows)',
|
|
6888
|
+
type: 'array',
|
|
6889
|
+
items: {
|
|
6890
|
+
$ref: '#/components/schemas/PlatformMatchResultDto'
|
|
6891
|
+
}
|
|
6892
|
+
},
|
|
6893
|
+
matchType: {
|
|
6894
|
+
type: 'string',
|
|
6895
|
+
description:
|
|
6896
|
+
"Overall match quality — top row's tier, or 'none' when no hits",
|
|
6897
|
+
enum: ['none', 'exact', 'prefix', 'substring']
|
|
6898
|
+
},
|
|
6899
|
+
total: {
|
|
6900
|
+
type: 'number',
|
|
6901
|
+
description: 'Total matches before LIMIT (truncation transparency)'
|
|
6902
|
+
},
|
|
6903
|
+
hasMore: {
|
|
6904
|
+
type: 'boolean',
|
|
6905
|
+
description: 'true when total > platforms.length (more matches exist)'
|
|
6906
|
+
}
|
|
6907
|
+
},
|
|
6908
|
+
required: ['platforms', 'matchType', 'total', 'hasMore']
|
|
6909
|
+
} as const;
|
|
6910
|
+
|
|
6406
6911
|
export const $CreatePlatformDto = {
|
|
6407
6912
|
type: 'object',
|
|
6408
6913
|
properties: {
|
|
@@ -7545,344 +8050,220 @@ export const $HoldingPnlWarningDto = {
|
|
|
7545
8050
|
'OVERSOLD_LOTS',
|
|
7546
8051
|
'NO_PRICE',
|
|
7547
8052
|
'MIXED_COST_CURRENCY'
|
|
7548
|
-
]
|
|
7549
|
-
},
|
|
7550
|
-
symbol: {
|
|
7551
|
-
type: 'object',
|
|
7552
|
-
nullable: true
|
|
7553
|
-
},
|
|
7554
|
-
accountId: {
|
|
7555
|
-
type: 'object',
|
|
7556
|
-
nullable: true
|
|
7557
|
-
},
|
|
7558
|
-
currency: {
|
|
7559
|
-
type: 'object',
|
|
7560
|
-
nullable: true
|
|
7561
|
-
}
|
|
7562
|
-
},
|
|
7563
|
-
required: ['type']
|
|
7564
|
-
} as const;
|
|
7565
|
-
|
|
7566
|
-
export const $HoldingPnlResponseDto = {
|
|
7567
|
-
type: 'object',
|
|
7568
|
-
properties: {
|
|
7569
|
-
asOfDate: {
|
|
7570
|
-
type: 'string',
|
|
7571
|
-
example: '2026-07-08'
|
|
7572
|
-
},
|
|
7573
|
-
baseCurrency: {
|
|
7574
|
-
type: 'string',
|
|
7575
|
-
example: 'CNY'
|
|
7576
|
-
},
|
|
7577
|
-
method: {
|
|
7578
|
-
type: 'string',
|
|
7579
|
-
description:
|
|
7580
|
-
'Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).',
|
|
7581
|
-
enum: ['average', 'FIFO'],
|
|
7582
|
-
example: 'average'
|
|
7583
|
-
},
|
|
7584
|
-
rows: {
|
|
7585
|
-
type: 'array',
|
|
7586
|
-
items: {
|
|
7587
|
-
$ref: '#/components/schemas/HoldingPnlRowDto'
|
|
7588
|
-
}
|
|
7589
|
-
},
|
|
7590
|
-
warnings: {
|
|
7591
|
-
type: 'array',
|
|
7592
|
-
items: {
|
|
7593
|
-
$ref: '#/components/schemas/HoldingPnlWarningDto'
|
|
7594
|
-
}
|
|
7595
|
-
}
|
|
7596
|
-
},
|
|
7597
|
-
required: ['asOfDate', 'baseCurrency', 'method', 'rows', 'warnings']
|
|
7598
|
-
} as const;
|
|
7599
|
-
|
|
7600
|
-
export const $CurrencyBalanceDto = {
|
|
7601
|
-
type: 'object',
|
|
7602
|
-
properties: {
|
|
7603
|
-
currency: {
|
|
7604
|
-
type: 'string',
|
|
7605
|
-
description: 'ISO 4217 currency code',
|
|
7606
|
-
example: 'CNY'
|
|
7607
|
-
},
|
|
7608
|
-
balance: {
|
|
7609
|
-
type: 'string',
|
|
7610
|
-
description: 'Balance amount',
|
|
7611
|
-
example: '500000.00'
|
|
7612
|
-
}
|
|
7613
|
-
},
|
|
7614
|
-
required: ['currency', 'balance']
|
|
7615
|
-
} as const;
|
|
7616
|
-
|
|
7617
|
-
export const $TimeSeriesPointDto = {
|
|
7618
|
-
type: 'object',
|
|
7619
|
-
properties: {
|
|
7620
|
-
date: {
|
|
7621
|
-
type: 'string',
|
|
7622
|
-
description: 'Date in YYYY-MM-DD format',
|
|
7623
|
-
example: '2024-06-15'
|
|
7624
|
-
},
|
|
7625
|
-
value: {
|
|
7626
|
-
type: 'string',
|
|
7627
|
-
description: 'Value at this date (in base currency)',
|
|
7628
|
-
example: '500000.00'
|
|
7629
|
-
},
|
|
7630
|
-
change: {
|
|
7631
|
-
type: 'object',
|
|
7632
|
-
description: 'Change from previous point',
|
|
7633
|
-
example: '5000.00'
|
|
7634
|
-
},
|
|
7635
|
-
assets: {
|
|
7636
|
-
type: 'string',
|
|
7637
|
-
description: 'Total assets at this date (in base currency)',
|
|
7638
|
-
example: '494338.00'
|
|
7639
|
-
},
|
|
7640
|
-
liabilities: {
|
|
7641
|
-
type: 'string',
|
|
7642
|
-
description: 'Total liabilities at this date (in base currency)',
|
|
7643
|
-
example: '310098.00'
|
|
7644
|
-
},
|
|
7645
|
-
byCurrency: {
|
|
7646
|
-
description: 'Multi-currency breakdown for this point',
|
|
7647
|
-
type: 'array',
|
|
7648
|
-
items: {
|
|
7649
|
-
$ref: '#/components/schemas/CurrencyBalanceDto'
|
|
7650
|
-
}
|
|
7651
|
-
}
|
|
7652
|
-
},
|
|
7653
|
-
required: ['date', 'value']
|
|
7654
|
-
} as const;
|
|
7655
|
-
|
|
7656
|
-
export const $TrendSummaryDto = {
|
|
7657
|
-
type: 'object',
|
|
7658
|
-
properties: {
|
|
7659
|
-
startValue: {
|
|
7660
|
-
type: 'string',
|
|
7661
|
-
description: 'Value at start of period',
|
|
7662
|
-
example: '450000.00'
|
|
7663
|
-
},
|
|
7664
|
-
endValue: {
|
|
7665
|
-
type: 'string',
|
|
7666
|
-
description: 'Value at end of period',
|
|
7667
|
-
example: '500000.00'
|
|
7668
|
-
},
|
|
7669
|
-
totalChange: {
|
|
7670
|
-
type: 'string',
|
|
7671
|
-
description: 'Total change over period',
|
|
7672
|
-
example: '50000.00'
|
|
7673
|
-
},
|
|
7674
|
-
totalChangePercentage: {
|
|
7675
|
-
type: 'string',
|
|
7676
|
-
description: 'Total change percentage',
|
|
7677
|
-
example: '+11.11%'
|
|
7678
|
-
}
|
|
7679
|
-
},
|
|
7680
|
-
required: ['startValue', 'endValue', 'totalChange', 'totalChangePercentage']
|
|
7681
|
-
} as const;
|
|
7682
|
-
|
|
7683
|
-
export const $MultiCurrencyPointDto = {
|
|
7684
|
-
type: 'object',
|
|
7685
|
-
properties: {
|
|
7686
|
-
date: {
|
|
7687
|
-
type: 'string',
|
|
7688
|
-
description: 'Date in YYYY-MM-DD format',
|
|
7689
|
-
example: '2024-06-15'
|
|
8053
|
+
]
|
|
7690
8054
|
},
|
|
7691
|
-
|
|
7692
|
-
|
|
7693
|
-
|
|
7694
|
-
|
|
7695
|
-
|
|
7696
|
-
|
|
8055
|
+
symbol: {
|
|
8056
|
+
type: 'object',
|
|
8057
|
+
nullable: true
|
|
8058
|
+
},
|
|
8059
|
+
accountId: {
|
|
8060
|
+
type: 'object',
|
|
8061
|
+
nullable: true
|
|
8062
|
+
},
|
|
8063
|
+
currency: {
|
|
8064
|
+
type: 'object',
|
|
8065
|
+
nullable: true
|
|
7697
8066
|
}
|
|
7698
8067
|
},
|
|
7699
|
-
required: ['
|
|
8068
|
+
required: ['type']
|
|
7700
8069
|
} as const;
|
|
7701
8070
|
|
|
7702
|
-
export const $
|
|
8071
|
+
export const $HoldingPnlResponseDto = {
|
|
7703
8072
|
type: 'object',
|
|
7704
8073
|
properties: {
|
|
7705
|
-
|
|
7706
|
-
description: 'Time series data points',
|
|
7707
|
-
type: 'array',
|
|
7708
|
-
items: {
|
|
7709
|
-
$ref: '#/components/schemas/TimeSeriesPointDto'
|
|
7710
|
-
}
|
|
7711
|
-
},
|
|
7712
|
-
summary: {
|
|
7713
|
-
description: 'Period summary',
|
|
7714
|
-
allOf: [
|
|
7715
|
-
{
|
|
7716
|
-
$ref: '#/components/schemas/TrendSummaryDto'
|
|
7717
|
-
}
|
|
7718
|
-
]
|
|
7719
|
-
},
|
|
7720
|
-
period: {
|
|
7721
|
-
type: 'string',
|
|
7722
|
-
description: 'Period requested',
|
|
7723
|
-
example: '6m'
|
|
7724
|
-
},
|
|
7725
|
-
granularity: {
|
|
8074
|
+
asOfDate: {
|
|
7726
8075
|
type: 'string',
|
|
7727
|
-
|
|
7728
|
-
example: 'month'
|
|
8076
|
+
example: '2026-07-08'
|
|
7729
8077
|
},
|
|
7730
|
-
|
|
8078
|
+
baseCurrency: {
|
|
7731
8079
|
type: 'string',
|
|
7732
|
-
description: 'Base currency for converted values',
|
|
7733
8080
|
example: 'CNY'
|
|
7734
8081
|
},
|
|
7735
|
-
|
|
8082
|
+
method: {
|
|
8083
|
+
type: 'string',
|
|
7736
8084
|
description:
|
|
7737
|
-
'
|
|
8085
|
+
'Realized-P&L lot-matching method (FIFO or average). Unrealized cost basis remains average regardless of this value (#473).',
|
|
8086
|
+
enum: ['average', 'FIFO'],
|
|
8087
|
+
example: 'average'
|
|
8088
|
+
},
|
|
8089
|
+
rows: {
|
|
7738
8090
|
type: 'array',
|
|
7739
8091
|
items: {
|
|
7740
|
-
$ref: '#/components/schemas/
|
|
8092
|
+
$ref: '#/components/schemas/HoldingPnlRowDto'
|
|
7741
8093
|
}
|
|
7742
8094
|
},
|
|
7743
8095
|
warnings: {
|
|
7744
|
-
description: 'Exchange rate warnings',
|
|
7745
8096
|
type: 'array',
|
|
7746
8097
|
items: {
|
|
7747
|
-
$ref: '#/components/schemas/
|
|
8098
|
+
$ref: '#/components/schemas/HoldingPnlWarningDto'
|
|
7748
8099
|
}
|
|
7749
8100
|
}
|
|
7750
8101
|
},
|
|
7751
|
-
required: ['
|
|
8102
|
+
required: ['asOfDate', 'baseCurrency', 'method', 'rows', 'warnings']
|
|
7752
8103
|
} as const;
|
|
7753
8104
|
|
|
7754
|
-
export const $
|
|
8105
|
+
export const $AnonymousLoginDto = {
|
|
7755
8106
|
type: 'object',
|
|
7756
8107
|
properties: {
|
|
7757
|
-
|
|
7758
|
-
type: 'string',
|
|
7759
|
-
description: 'Month key (YYYY-MM)',
|
|
7760
|
-
example: '2024-03'
|
|
7761
|
-
},
|
|
7762
|
-
income: {
|
|
7763
|
-
type: 'string',
|
|
7764
|
-
description: 'Income in base currency (absolute, converted)',
|
|
7765
|
-
example: '10000.00'
|
|
7766
|
-
},
|
|
7767
|
-
expense: {
|
|
7768
|
-
type: 'string',
|
|
7769
|
-
description: 'Expense in base currency (absolute, converted)',
|
|
7770
|
-
example: '5000.00'
|
|
7771
|
-
},
|
|
7772
|
-
netSavings: {
|
|
8108
|
+
accessToken: {
|
|
7773
8109
|
type: 'string',
|
|
7774
|
-
description: '
|
|
7775
|
-
example: '5000.00'
|
|
8110
|
+
description: 'Access token for anonymous login'
|
|
7776
8111
|
}
|
|
7777
8112
|
},
|
|
7778
|
-
required: ['
|
|
8113
|
+
required: ['accessToken']
|
|
7779
8114
|
} as const;
|
|
7780
8115
|
|
|
7781
|
-
export const $
|
|
8116
|
+
export const $AnonymousLoginResponseDto = {
|
|
7782
8117
|
type: 'object',
|
|
7783
8118
|
properties: {
|
|
7784
|
-
|
|
7785
|
-
type: 'string',
|
|
7786
|
-
description: 'Total income across the period',
|
|
7787
|
-
example: '60000.00'
|
|
7788
|
-
},
|
|
7789
|
-
totalExpense: {
|
|
7790
|
-
type: 'string',
|
|
7791
|
-
description: 'Total expense across the period',
|
|
7792
|
-
example: '30000.00'
|
|
7793
|
-
},
|
|
7794
|
-
totalNetSavings: {
|
|
7795
|
-
type: 'string',
|
|
7796
|
-
description: 'income − expense across the period',
|
|
7797
|
-
example: '30000.00'
|
|
7798
|
-
},
|
|
7799
|
-
averageMonthlyNetSavings: {
|
|
8119
|
+
authToken: {
|
|
7800
8120
|
type: 'string',
|
|
7801
|
-
description:
|
|
7802
|
-
|
|
7803
|
-
example: '5000.00'
|
|
8121
|
+
description: 'JWT auth token',
|
|
8122
|
+
example: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'
|
|
7804
8123
|
}
|
|
7805
8124
|
},
|
|
7806
|
-
required: [
|
|
7807
|
-
'totalIncome',
|
|
7808
|
-
'totalExpense',
|
|
7809
|
-
'totalNetSavings',
|
|
7810
|
-
'averageMonthlyNetSavings'
|
|
7811
|
-
]
|
|
8125
|
+
required: ['authToken']
|
|
7812
8126
|
} as const;
|
|
7813
8127
|
|
|
7814
|
-
export const $
|
|
8128
|
+
export const $SymbolSearchResultDto = {
|
|
7815
8129
|
type: 'object',
|
|
7816
8130
|
properties: {
|
|
7817
|
-
|
|
7818
|
-
|
|
7819
|
-
|
|
7820
|
-
type: 'array',
|
|
7821
|
-
items: {
|
|
7822
|
-
$ref: '#/components/schemas/CashFlowPointDto'
|
|
7823
|
-
}
|
|
8131
|
+
symbol: {
|
|
8132
|
+
type: 'string',
|
|
8133
|
+
example: 'AAPL'
|
|
7824
8134
|
},
|
|
7825
|
-
|
|
7826
|
-
|
|
7827
|
-
|
|
7828
|
-
|
|
7829
|
-
$ref: '#/components/schemas/CashFlowTrendSummaryDto'
|
|
7830
|
-
}
|
|
7831
|
-
]
|
|
8135
|
+
name: {
|
|
8136
|
+
type: 'object',
|
|
8137
|
+
example: 'Apple Inc.',
|
|
8138
|
+
nullable: true
|
|
7832
8139
|
},
|
|
7833
|
-
|
|
7834
|
-
type: '
|
|
7835
|
-
|
|
7836
|
-
|
|
8140
|
+
exchange: {
|
|
8141
|
+
type: 'object',
|
|
8142
|
+
example: 'US',
|
|
8143
|
+
nullable: true
|
|
7837
8144
|
},
|
|
7838
|
-
|
|
7839
|
-
type: '
|
|
7840
|
-
description: '
|
|
7841
|
-
example: '
|
|
8145
|
+
assetType: {
|
|
8146
|
+
type: 'object',
|
|
8147
|
+
description: 'OpenBB asset_type (e.g. stock, etf)',
|
|
8148
|
+
example: 'stock',
|
|
8149
|
+
nullable: true
|
|
7842
8150
|
},
|
|
7843
|
-
|
|
7844
|
-
type: '
|
|
7845
|
-
description: '
|
|
7846
|
-
example: '
|
|
8151
|
+
assetClass: {
|
|
8152
|
+
type: 'object',
|
|
8153
|
+
description: 'IGN asset class (region.types.ts ASSET_CLASSES)',
|
|
8154
|
+
example: 'EQUITY',
|
|
8155
|
+
nullable: true
|
|
7847
8156
|
},
|
|
7848
|
-
|
|
7849
|
-
|
|
7850
|
-
|
|
7851
|
-
|
|
7852
|
-
|
|
7853
|
-
|
|
8157
|
+
assetSubClass: {
|
|
8158
|
+
type: 'object',
|
|
8159
|
+
description: 'IGN asset sub-class (region.types.ts ASSET_SUB_CLASSES)',
|
|
8160
|
+
example: 'STOCK',
|
|
8161
|
+
nullable: true
|
|
8162
|
+
},
|
|
8163
|
+
currency: {
|
|
8164
|
+
type: 'object',
|
|
8165
|
+
description: 'Trading currency (extra_data or inferred from exchange)',
|
|
8166
|
+
example: 'USD',
|
|
8167
|
+
nullable: true
|
|
7854
8168
|
}
|
|
7855
8169
|
},
|
|
7856
|
-
required: ['
|
|
7857
|
-
} as const;
|
|
7858
|
-
|
|
7859
|
-
export const $GenerateSnapshotBody = {
|
|
7860
|
-
type: 'object',
|
|
7861
|
-
properties: {}
|
|
7862
|
-
} as const;
|
|
7863
|
-
|
|
7864
|
-
export const $GenerateSnapshotResponse = {
|
|
7865
|
-
type: 'object',
|
|
7866
|
-
properties: {}
|
|
7867
|
-
} as const;
|
|
7868
|
-
|
|
7869
|
-
export const $BackfillSnapshotsBody = {
|
|
7870
|
-
type: 'object',
|
|
7871
|
-
properties: {}
|
|
7872
|
-
} as const;
|
|
7873
|
-
|
|
7874
|
-
export const $BackfillSnapshotsResponse = {
|
|
7875
|
-
type: 'object',
|
|
7876
|
-
properties: {}
|
|
8170
|
+
required: ['symbol']
|
|
7877
8171
|
} as const;
|
|
7878
8172
|
|
|
7879
|
-
export const $
|
|
8173
|
+
export const $SymbolQuoteDto = {
|
|
7880
8174
|
type: 'object',
|
|
7881
8175
|
properties: {
|
|
7882
|
-
|
|
8176
|
+
symbol: {
|
|
7883
8177
|
type: 'string',
|
|
7884
|
-
|
|
8178
|
+
example: 'AAPL'
|
|
8179
|
+
},
|
|
8180
|
+
name: {
|
|
8181
|
+
type: 'object',
|
|
8182
|
+
example: 'Apple Inc.',
|
|
8183
|
+
nullable: true
|
|
8184
|
+
},
|
|
8185
|
+
exchange: {
|
|
8186
|
+
type: 'object',
|
|
8187
|
+
example: 'US',
|
|
8188
|
+
nullable: true
|
|
8189
|
+
},
|
|
8190
|
+
assetType: {
|
|
8191
|
+
type: 'object',
|
|
8192
|
+
description: 'OpenBB asset_type',
|
|
8193
|
+
example: 'stock',
|
|
8194
|
+
nullable: true
|
|
8195
|
+
},
|
|
8196
|
+
assetClass: {
|
|
8197
|
+
type: 'object',
|
|
8198
|
+
description: 'IGN asset class',
|
|
8199
|
+
example: 'EQUITY',
|
|
8200
|
+
nullable: true
|
|
8201
|
+
},
|
|
8202
|
+
assetSubClass: {
|
|
8203
|
+
type: 'object',
|
|
8204
|
+
description: 'IGN asset sub-class',
|
|
8205
|
+
example: 'STOCK',
|
|
8206
|
+
nullable: true
|
|
8207
|
+
},
|
|
8208
|
+
currency: {
|
|
8209
|
+
type: 'object',
|
|
8210
|
+
description: 'Trading currency (extra_data or inferred from exchange)',
|
|
8211
|
+
example: 'USD',
|
|
8212
|
+
nullable: true
|
|
8213
|
+
},
|
|
8214
|
+
price: {
|
|
8215
|
+
type: 'object',
|
|
8216
|
+
description: 'Latest price (Decimal string)',
|
|
8217
|
+
example: '189.84',
|
|
8218
|
+
nullable: true
|
|
8219
|
+
},
|
|
8220
|
+
priceDate: {
|
|
8221
|
+
type: 'object',
|
|
8222
|
+
description: 'Date the price was observed (ISO yyyy-MM-dd)',
|
|
8223
|
+
example: '2026-08-05',
|
|
8224
|
+
nullable: true
|
|
8225
|
+
},
|
|
8226
|
+
changePercent: {
|
|
8227
|
+
type: 'object',
|
|
8228
|
+
description:
|
|
8229
|
+
'Change vs previous close, in percentage points (1.7 == 1.7%). openbb stores change_percent as a normalized decimal; this exposes percentage points for frontend convenience.',
|
|
8230
|
+
example: 1.7,
|
|
8231
|
+
nullable: true
|
|
8232
|
+
},
|
|
8233
|
+
prevClose: {
|
|
8234
|
+
type: 'object',
|
|
8235
|
+
description: 'Previous close (Decimal string)',
|
|
8236
|
+
nullable: true
|
|
8237
|
+
},
|
|
8238
|
+
open: {
|
|
8239
|
+
type: 'object',
|
|
8240
|
+
description: 'Day open (Decimal string)',
|
|
8241
|
+
nullable: true
|
|
8242
|
+
},
|
|
8243
|
+
high: {
|
|
8244
|
+
type: 'object',
|
|
8245
|
+
description: 'Day high (Decimal string)',
|
|
8246
|
+
nullable: true
|
|
8247
|
+
},
|
|
8248
|
+
low: {
|
|
8249
|
+
type: 'object',
|
|
8250
|
+
description: 'Day low (Decimal string)',
|
|
8251
|
+
nullable: true
|
|
8252
|
+
},
|
|
8253
|
+
volume: {
|
|
8254
|
+
type: 'object',
|
|
8255
|
+
description: 'Day volume (Decimal string)',
|
|
8256
|
+
nullable: true
|
|
8257
|
+
},
|
|
8258
|
+
yearHigh: {
|
|
8259
|
+
type: 'object',
|
|
8260
|
+
description: '52-week high (Decimal string)',
|
|
8261
|
+
nullable: true
|
|
8262
|
+
},
|
|
8263
|
+
yearLow: {
|
|
8264
|
+
type: 'object',
|
|
8265
|
+
description: '52-week low (Decimal string)',
|
|
8266
|
+
nullable: true
|
|
7885
8267
|
}
|
|
7886
|
-
}
|
|
7887
|
-
required: ['accessToken']
|
|
8268
|
+
}
|
|
7888
8269
|
} as const;
|