@firela/api-types 0.0.0-canary.693e8bdf → 0.0.0-canary.69a6df79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -595,7 +595,7 @@ export type PostingResponseDto = {
595
595
  */
596
596
  account: string;
597
597
  /**
598
- * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned.
598
+ * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned. Carries the raw Beancount sign (credit-normal accounts such as Income post negative — the accounting truth, ADR-0126); renderers must not infer economic semantics from this sign.
599
599
  */
600
600
  units?: string;
601
601
  /**
@@ -830,7 +830,7 @@ export type PostingDetailDto = {
830
830
  */
831
831
  account: string;
832
832
  /**
833
- * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned.
833
+ * Amount as decimal string. Typed optional but always present in responses: interpolation fills any MISSING posting before it is persisted or returned. Carries the raw Beancount sign (credit-normal accounts such as Income post negative — the accounting truth, ADR-0126); renderers must not infer economic semantics from this sign.
834
834
  */
835
835
  units?: string;
836
836
  /**
@@ -976,6 +976,101 @@ export type flag2 =
976
976
  */
977
977
  export type status2 = 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
978
978
 
979
+ export type TransactionListItemDto = {
980
+ /**
981
+ * Transaction ID
982
+ */
983
+ id: string;
984
+ /**
985
+ * Transaction date
986
+ */
987
+ date: string;
988
+ /**
989
+ * Transaction flag
990
+ */
991
+ flag?:
992
+ | 'CLEARED'
993
+ | 'PENDING'
994
+ | 'PADDING'
995
+ | 'SUMMARIZE'
996
+ | 'TRANSFER'
997
+ | 'CONVERSIONS';
998
+ /**
999
+ * Custom flag (if not using standard flags)
1000
+ */
1001
+ customFlag?: string;
1002
+ /**
1003
+ * Payee name
1004
+ */
1005
+ payee?: string;
1006
+ /**
1007
+ * Transaction narration
1008
+ */
1009
+ narration: string;
1010
+ /**
1011
+ * Transaction tags
1012
+ */
1013
+ tags: Array<string>;
1014
+ /**
1015
+ * Transaction links
1016
+ */
1017
+ links: Array<string>;
1018
+ /**
1019
+ * Transaction metadata
1020
+ */
1021
+ meta?: {
1022
+ [key: string]: unknown;
1023
+ };
1024
+ /**
1025
+ * Transaction status
1026
+ */
1027
+ status: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
1028
+ /**
1029
+ * Source type (free-form string from transaction metadata, e.g. import, api)
1030
+ */
1031
+ sourceType?: string;
1032
+ /**
1033
+ * Source platform (e.g., alipay, wechat)
1034
+ */
1035
+ sourcePlatform?: string;
1036
+ /**
1037
+ * Transaction postings
1038
+ */
1039
+ postings: Array<PostingDetailDto>;
1040
+ /**
1041
+ * Created at timestamp
1042
+ */
1043
+ createdAt: string;
1044
+ /**
1045
+ * Voided at timestamp (if voided)
1046
+ */
1047
+ voidedAt?: string;
1048
+ /**
1049
+ * User ID who voided this transaction
1050
+ */
1051
+ voidedBy?: string;
1052
+ /**
1053
+ * Correction reason (if voided or superseded)
1054
+ */
1055
+ correctionReason?: string;
1056
+ /**
1057
+ * ID of the transaction that supersedes this one (set when status=SUPERSEDED)
1058
+ */
1059
+ supersededBy?: string;
1060
+ /**
1061
+ * ID of the transaction this one corrected/replaced (back-link on the replacement)
1062
+ */
1063
+ originalTxn?: string;
1064
+ /**
1065
+ * Row amount under the request viewpoint (ADR-0126). Category viewpoint (category + flow): per-leg sign-normalized sum over the category account set (Income-root legs negated, Expenses-root identity) — positive under normal booking but NOT clamped (explicit negative expense legs and net-flip refund months stay negative). No viewpoint (plain list / search, no accountId): wallet money-flow net = raw-sign sum over cost-less Assets/Liabilities legs (income positive, expenses negative, transfers net ~0); color cue is the wallet sign (net < 0 = wealth-decreasing). Status-orthogonal: audit views match too (ADR-0128 amount-as-matching-key). Omitted under the account viewpoint (incl. dual) and for rows with no wallet leg.
1066
+ */
1067
+ viewpointAmount?: string;
1068
+ /**
1069
+ * Currency of viewpointAmount. A row spanning multiple currencies takes the largest-magnitude currency group (known simplification, ADR-0126).
1070
+ */
1071
+ viewpointCurrency?: string;
1072
+ };
1073
+
979
1074
  export type BalanceByCurrencyDto = {
980
1075
  /**
981
1076
  * ISO 4217 currency code
@@ -1004,7 +1099,7 @@ export type ExchangeRateWarningDto = {
1004
1099
 
1005
1100
  export type TransactionListSummaryDto = {
1006
1101
  /**
1007
- * Partial converted total in base currency (rated currencies only, raw Beancount sign). When warnings is non-empty this excludes currencies missing an FX rate; may be "0.00" if ALL non-base currencies lack a rate. Converted at the dateTo (or current) available rate.
1102
+ * Partial converted total in base currency (rated currencies only). Sign by viewpoint (ADR-0126): account viewpoint keeps the raw Beancount sign (income negative); category viewpoint is per-leg sign-normalized (Income legs negated, Expenses legs identity — positive under normal booking, not clamped). When warnings is non-empty this excludes currencies missing an FX rate; may be "0.00" if ALL non-base currencies lack a rate. Converted at the dateTo (or current) available rate.
1008
1103
  */
1009
1104
  totalAmount: string;
1010
1105
  /**
@@ -1021,11 +1116,32 @@ export type TransactionListSummaryDto = {
1021
1116
  warnings?: Array<ExchangeRateWarningDto>;
1022
1117
  };
1023
1118
 
1119
+ export type TransactionListViewpointDto = {
1120
+ /**
1121
+ * Viewpoint type (only category drill-down carries a viewpoint today)
1122
+ */
1123
+ type: 'category';
1124
+ /**
1125
+ * Flow root the category account set is restricted to
1126
+ */
1127
+ flow: 'income' | 'expense';
1128
+ };
1129
+
1130
+ /**
1131
+ * Viewpoint type (only category drill-down carries a viewpoint today)
1132
+ */
1133
+ export type type2 = 'category';
1134
+
1135
+ /**
1136
+ * Flow root the category account set is restricted to
1137
+ */
1138
+ export type flow = 'income' | 'expense';
1139
+
1024
1140
  export type TransactionListResponseDto = {
1025
1141
  /**
1026
1142
  * List of transactions
1027
1143
  */
1028
- data: Array<TransactionDetailDto>;
1144
+ data: Array<TransactionListItemDto>;
1029
1145
  /**
1030
1146
  * Total count of matching transactions
1031
1147
  */
@@ -1042,6 +1158,10 @@ export type TransactionListResponseDto = {
1042
1158
  * Amount summary for the full filtered set (#514). Present only when the request has a single account OR category viewpoint; omitted for search-only / plain-list / dual-perspective requests.
1043
1159
  */
1044
1160
  summary?: TransactionListSummaryDto;
1161
+ /**
1162
+ * Viewpoint metadata (ADR-0126). Present only for a single category filter (category + flow, no accountId); dual-perspective requests are viewpoint-less (raw signs, no viewpointAmount).
1163
+ */
1164
+ viewpoint?: TransactionListViewpointDto;
1045
1165
  };
1046
1166
 
1047
1167
  export type TagSuggestionDto = {
@@ -1253,7 +1373,7 @@ export type ReviewSummaryDto = {
1253
1373
  /**
1254
1374
  * Review type
1255
1375
  */
1256
- export type type2 =
1376
+ export type type3 =
1257
1377
  | 'DUPLICATE'
1258
1378
  | 'RULE_MATCH'
1259
1379
  | 'PAYEE_MATCH'
@@ -4355,7 +4475,7 @@ export type ProcessNlpDto = {
4355
4475
  */
4356
4476
  selectedRuleId?: string;
4357
4477
  /**
4358
- * 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.
4478
+ * confirm_account echo-back: account path selected from the prior confirm_account response (suggestedAccount, similarAccounts[i].path, or a typed path). Applied directly when the session is confirming_account — no NL re-parse.
4359
4479
  */
4360
4480
  selectedAccount?: string;
4361
4481
  };
@@ -4585,6 +4705,17 @@ export type NlpRuleConfirmationDataDto = {
4585
4705
  reasons: Array<string>;
4586
4706
  };
4587
4707
 
4708
+ export type NlpAccountCandidateDto = {
4709
+ /**
4710
+ * Canonical beancount account path (echo back on selection)
4711
+ */
4712
+ path: string;
4713
+ /**
4714
+ * Localized display name (ADR-0114 read-time projection, user locale)
4715
+ */
4716
+ name: string;
4717
+ };
4718
+
4588
4719
  export type NlpAccountConfirmationDataDto = {
4589
4720
  /**
4590
4721
  * The invalid account name
@@ -4595,9 +4726,9 @@ export type NlpAccountConfirmationDataDto = {
4595
4726
  */
4596
4727
  suggestedAccount?: string;
4597
4728
  /**
4598
- * Similar accounts for user selection
4729
+ * Similar accounts for user selection (path + localized name, #680)
4599
4730
  */
4600
- similarAccounts: Array<string>;
4731
+ similarAccounts: Array<NlpAccountCandidateDto>;
4601
4732
  /**
4602
4733
  * Error message explaining the issue
4603
4734
  */
@@ -4973,7 +5104,7 @@ export type PlatformListItemDto = {
4973
5104
  /**
4974
5105
  * Platform type
4975
5106
  */
4976
- export type type3 =
5107
+ export type type4 =
4977
5108
  | 'BANK'
4978
5109
  | 'BROKERAGE'
4979
5110
  | 'CRYPTO_EXCHANGE'
@@ -5805,7 +5936,7 @@ export type HoldingPnlWarningDto = {
5805
5936
  /**
5806
5937
  * Warning type
5807
5938
  */
5808
- export type type4 =
5939
+ export type type5 =
5809
5940
  | 'MISSING_COST_FX_RATE'
5810
5941
  | 'MISSING_MARKET_FX_RATE'
5811
5942
  | 'MISSING_SALE_PRICE'
@@ -5844,6 +5975,123 @@ export type AnonymousLoginResponseDto = {
5844
5975
  authToken: string;
5845
5976
  };
5846
5977
 
5978
+ export type ParserContributionMetaDto = {
5979
+ /**
5980
+ * Institution slug (lowercase kebab-case)
5981
+ */
5982
+ institution: string;
5983
+ region:
5984
+ | 'cn'
5985
+ | 'us'
5986
+ | 'de'
5987
+ | 'fr'
5988
+ | 'gb'
5989
+ | 'hk'
5990
+ | 'jp'
5991
+ | 'sg'
5992
+ | 'au'
5993
+ | 'ca'
5994
+ | 'other';
5995
+ accountType: 'checking' | 'savings' | 'credit' | 'debit' | 'investment';
5996
+ format: 'csv' | 'xlsx' | 'pdf' | 'ofx' | 'qif';
5997
+ institutionDisplayName?: string;
5998
+ encoding?: string;
5999
+ /**
6000
+ * CSV delimiter character: ",", ";", "\t" or "|"
6001
+ */
6002
+ delimiter?: string;
6003
+ /**
6004
+ * Header row count; the client omits the field when it is 1
6005
+ */
6006
+ headerRows?: number;
6007
+ notes?: string;
6008
+ };
6009
+
6010
+ export type region =
6011
+ | 'cn'
6012
+ | 'us'
6013
+ | 'de'
6014
+ | 'fr'
6015
+ | 'gb'
6016
+ | 'hk'
6017
+ | 'jp'
6018
+ | 'sg'
6019
+ | 'au'
6020
+ | 'ca'
6021
+ | 'other';
6022
+
6023
+ export type accountType =
6024
+ | 'checking'
6025
+ | 'savings'
6026
+ | 'credit'
6027
+ | 'debit'
6028
+ | 'investment';
6029
+
6030
+ export type format = 'csv' | 'xlsx' | 'pdf' | 'ofx' | 'qif';
6031
+
6032
+ export type ParserContributionSamplesDto = {
6033
+ /**
6034
+ * Client-sanitized sample rows (key = column name, value = cell)
6035
+ */
6036
+ rows: Array<{
6037
+ [key: string]: unknown;
6038
+ }>;
6039
+ rawHeaders?: Array<string>;
6040
+ };
6041
+
6042
+ export type FieldHintDto = {
6043
+ columnName: string;
6044
+ /**
6045
+ * Date format, e.g. yyyy-MM-dd HH:mm
6046
+ */
6047
+ format?: string;
6048
+ signConvention?: 'negative-expense' | 'positive-expense' | 'separate-columns';
6049
+ creditColumn?: string;
6050
+ debitColumn?: string;
6051
+ };
6052
+
6053
+ export type signConvention =
6054
+ | 'negative-expense'
6055
+ | 'positive-expense'
6056
+ | 'separate-columns';
6057
+
6058
+ export type ParserContributionFieldHintsDto = {
6059
+ date: FieldHintDto;
6060
+ amount: FieldHintDto;
6061
+ description?: FieldHintDto;
6062
+ balance?: FieldHintDto;
6063
+ payee?: FieldHintDto;
6064
+ reference?: FieldHintDto;
6065
+ category?: FieldHintDto;
6066
+ };
6067
+
6068
+ export type ExpectedTransactionDto = {
6069
+ date: string;
6070
+ amount: number;
6071
+ description: string;
6072
+ payee?: string;
6073
+ category?: string;
6074
+ };
6075
+
6076
+ export type ParserContributionExamplesDto = {
6077
+ expectedTransactions: Array<ExpectedTransactionDto>;
6078
+ };
6079
+
6080
+ export type ParserContributionRequestDto = {
6081
+ meta: ParserContributionMetaDto;
6082
+ samples: ParserContributionSamplesDto;
6083
+ fieldHints: ParserContributionFieldHintsDto;
6084
+ /**
6085
+ * Omitted entirely by the client when empty
6086
+ */
6087
+ examples?: ParserContributionExamplesDto;
6088
+ };
6089
+
6090
+ export type ParserContributionRelayResponseDto = {
6091
+ issueUrl: string;
6092
+ issueNumber: number;
6093
+ };
6094
+
5847
6095
  export type SymbolSearchResultDto = {
5848
6096
  symbol: string;
5849
6097
  name?: {
@@ -6459,7 +6707,7 @@ export type TransactionControllerListData = {
6459
6707
  */
6460
6708
  accountId?: string;
6461
6709
  /**
6462
- * Filter by ADR-0075 functional category (Group segment); matches any posting to an Expenses/Income account whose derived Group segment equals this value
6710
+ * Filter by ADR-0075 functional category (Group segment); matches any posting to an account whose derived Group segment equals this value. Must be accompanied by flow (ADR-0126).
6463
6711
  */
6464
6712
  category?: string;
6465
6713
  /**
@@ -6470,6 +6718,10 @@ export type TransactionControllerListData = {
6470
6718
  * Filter by end date (inclusive), format: YYYY-MM-DD
6471
6719
  */
6472
6720
  dateTo?: string;
6721
+ /**
6722
+ * Required when category is present (400 otherwise) and vice versa (ADR-0126). Restricts the category account set to the flow root (income → Income:, expense → Expenses:) and drives the per-leg sign normalization of row viewpointAmount and the summary. OpenAPI cannot express conditional requiredness — the pairing is enforced at runtime.
6723
+ */
6724
+ flow?: 'income' | 'expense';
6473
6725
  /**
6474
6726
  * Number of items per page (1-100, default: 20)
6475
6727
  */
@@ -6512,9 +6764,9 @@ export type TransactionControllerListData = {
6512
6764
  */
6513
6765
  search?: string;
6514
6766
  /**
6515
- * Filter by transaction status
6767
+ * Filter by transaction status: single value, comma-separated multi-value (e.g. VOIDED,SUPERSEDED), or ALL to include audit rows. Defaults to ACTIVE-only (ADR-0128; previously unfiltered — breaking change).
6516
6768
  */
6517
- status?: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED';
6769
+ status?: 'ACTIVE' | 'VOIDED' | 'SUPERSEDED' | 'ALL';
6518
6770
  };
6519
6771
 
6520
6772
  export type TransactionControllerListResponse = TransactionListResponseDto;
@@ -10545,6 +10797,42 @@ export type AuthControllerAccessTokenLoginData = {
10545
10797
 
10546
10798
  export type AuthControllerAccessTokenLoginResponse = AnonymousLoginResponseDto;
10547
10799
 
10800
+ export type ParserContributionControllerCreateData = {
10801
+ /**
10802
+ * Region code for tenant context (routing only; the institution region rides in the payload meta)
10803
+ */
10804
+ region:
10805
+ | 'ad'
10806
+ | 'ae'
10807
+ | 'af'
10808
+ | 'ag'
10809
+ | 'al'
10810
+ | 'am'
10811
+ | 'ao'
10812
+ | 'au'
10813
+ | 'br'
10814
+ | 'ca'
10815
+ | 'cn'
10816
+ | 'de'
10817
+ | 'dz'
10818
+ | 'es'
10819
+ | 'fr'
10820
+ | 'gb'
10821
+ | 'hk'
10822
+ | 'in'
10823
+ | 'it'
10824
+ | 'jp'
10825
+ | 'kr'
10826
+ | 'nl'
10827
+ | 'sg'
10828
+ | 'tw'
10829
+ | 'us';
10830
+ requestBody: ParserContributionRequestDto;
10831
+ };
10832
+
10833
+ export type ParserContributionControllerCreateResponse =
10834
+ ParserContributionRelayResponseDto;
10835
+
10548
10836
  export type CacheControllerFlushCacheResponse = unknown;
10549
10837
 
10550
10838
  export type ExchangeRateControllerGetExchangeRateData = {
@@ -12862,6 +13150,37 @@ export type $OpenApiTs = {
12862
13150
  };
12863
13151
  };
12864
13152
  };
13153
+ '/api/v1/{region}/community/parser-contributions': {
13154
+ post: {
13155
+ req: ParserContributionControllerCreateData;
13156
+ res: {
13157
+ /**
13158
+ * Issue created by the bot
13159
+ */
13160
+ 201: ParserContributionRelayResponseDto;
13161
+ /**
13162
+ * Unauthorized
13163
+ */
13164
+ 401: ApiProblemResponseDto;
13165
+ /**
13166
+ * Validation failed (institution slug, empty samples, row/cell size limits)
13167
+ */
13168
+ 422: ApiProblemResponseDto;
13169
+ /**
13170
+ * Rate limited (5 submissions per user per hour)
13171
+ */
13172
+ 429: ApiProblemResponseDto;
13173
+ /**
13174
+ * Relay not configured on this deployment — clients fall back to the clipboard flow
13175
+ */
13176
+ 501: ApiProblemResponseDto;
13177
+ /**
13178
+ * GitHub bot failure (upstream), safe to retry
13179
+ */
13180
+ 502: ApiProblemResponseDto;
13181
+ };
13182
+ };
13183
+ };
12865
13184
  '/api/v1/cache/flush': {
12866
13185
  post: {
12867
13186
  res: {