beancount-gocardless 0.1.8__py3-none-any.whl → 0.1.9__py3-none-any.whl

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.
@@ -0,0 +1,538 @@
1
+ """
2
+ Comprehensive Pydantic models for GoCardless API responses
3
+ Complete coverage of all schemas from swagger.json
4
+ """
5
+
6
+ from typing import Optional, List, Dict, Any, TypedDict
7
+ from pydantic import BaseModel, Field, ConfigDict
8
+ from pydantic.alias_generators import to_camel
9
+ from enum import Enum
10
+
11
+
12
+ class AccountInfo(TypedDict, total=False):
13
+ id: str
14
+ created: str
15
+ last_accessed: Optional[str]
16
+ iban: Optional[str]
17
+ bban: Optional[str]
18
+ status: str
19
+ institution_id: Optional[str]
20
+ owner_name: Optional[str]
21
+ name: Optional[str]
22
+ requisition_id: str
23
+ requisition_reference: str
24
+
25
+
26
+ class StatusEnum(str, Enum):
27
+ """Status enumeration for various API responses."""
28
+
29
+ LN = "LN"
30
+ RJ = "RJ"
31
+ ER = "ER"
32
+ UR = "UR"
33
+ GA = "GA"
34
+ SA = "SA"
35
+
36
+
37
+ class BalanceAmountSchema(BaseModel):
38
+ """Balance amount schema."""
39
+
40
+ amount: str
41
+ currency: str
42
+
43
+
44
+ class BalanceSchema(BaseModel):
45
+ """Balance schema."""
46
+
47
+ model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)
48
+
49
+ balance_amount: BalanceAmountSchema
50
+ balance_type: str
51
+ credit_limit_included: Optional[bool] = None
52
+ last_change_date_time: Optional[str] = None
53
+ last_committed_transaction: Optional[str] = None
54
+ reference_date: Optional[str] = None
55
+
56
+
57
+ class AccountBalance(BaseModel):
58
+ """Account balance response."""
59
+
60
+ balances: List[BalanceSchema]
61
+
62
+
63
+ class Account(BaseModel):
64
+ """Account model - complete from swagger."""
65
+
66
+ id: str = Field(
67
+ description="The ID of this Account, used to refer to this account in other API calls."
68
+ )
69
+ created: str = Field(
70
+ description="The date & time at which the account object was created."
71
+ )
72
+ last_accessed: Optional[str] = Field(
73
+ None,
74
+ description="The date & time at which the account object was last accessed.",
75
+ )
76
+ iban: Optional[str] = Field(None, description="The Account IBAN")
77
+ bban: Optional[str] = Field(None, description="The Account BBAN")
78
+ status: str = Field(description="The processing status of this account.")
79
+ institution_id: Optional[str] = Field(
80
+ None, description="The ASPSP associated with this account."
81
+ )
82
+ owner_name: Optional[str] = Field(
83
+ None, description="The name of the account owner."
84
+ )
85
+ name: Optional[str] = Field(None, description="The name of account.")
86
+
87
+
88
+ class AccountSchema(BaseModel):
89
+ """Account schema for requests."""
90
+
91
+ iban: Optional[str] = Field(None, description="iban")
92
+ bban: Optional[str] = Field(None, description="bban")
93
+ pan: Optional[str] = Field(None, description="pan")
94
+ masked_pan: Optional[str] = Field(None, description="maskedPan")
95
+ msisdn: Optional[str] = Field(None, description="msisdn")
96
+ currency: Optional[str] = Field(None, description="currency")
97
+
98
+
99
+ class AdditionalAccountDataSchema(BaseModel):
100
+ """Additional account data schema."""
101
+
102
+ owner_name: Optional[List[str]] = Field(
103
+ None, description="Name(s) of the account owner. Multiple names are possible."
104
+ )
105
+ display_name: Optional[str] = Field(
106
+ None, description="Display name of the account."
107
+ )
108
+ product: Optional[str] = Field(None, description="Product name of the account.")
109
+ cash_account_type: Optional[str] = Field(None, description="Cash account type.")
110
+ status: Optional[str] = Field(None, description="Account status.")
111
+ bic: Optional[str] = Field(None, description="BIC associated with the account.")
112
+ linked_accounts: Optional[List[str]] = Field(
113
+ None, description="List of linked account IDs."
114
+ )
115
+ usage: Optional[str] = Field(None, description="Usage type of the account.")
116
+ details: Optional[str] = Field(
117
+ None, description="Additional details about the account."
118
+ )
119
+
120
+
121
+ class OwnerAddressStructuredSchema(BaseModel):
122
+ """Owner address structured schema."""
123
+
124
+ street_name: Optional[str] = Field(None, description="Street name.")
125
+ building_number: Optional[str] = Field(None, description="Building number.")
126
+ town_name: Optional[str] = Field(None, description="Town name.")
127
+ post_code: Optional[str] = Field(None, description="Post code.")
128
+ country: Optional[str] = Field(None, description="Country.")
129
+
130
+
131
+ class DetailSchema(BaseModel):
132
+ """Detail schema for account details."""
133
+
134
+ resource_id: Optional[str] = Field(None, description="Resource ID.")
135
+ iban: Optional[str] = Field(None, description="IBAN.")
136
+ bban: Optional[str] = Field(None, description="BBAN.")
137
+ pan: Optional[str] = Field(None, description="PAN.")
138
+ masked_pan: Optional[str] = Field(None, description="Masked PAN.")
139
+ msisdn: Optional[str] = Field(None, description="MSISDN.")
140
+ currency: Optional[str] = Field(None, description="Currency.")
141
+ owner_name: Optional[List[str]] = Field(None, description="Owner name(s).")
142
+ name: Optional[str] = Field(None, description="Account name.")
143
+ display_name: Optional[str] = Field(None, description="Display name.")
144
+ product: Optional[str] = Field(None, description="Product.")
145
+ cash_account_type: Optional[str] = Field(None, description="Cash account type.")
146
+ status: Optional[str] = Field(None, description="Status.")
147
+ bic: Optional[str] = Field(None, description="BIC.")
148
+ linked_accounts: Optional[List[str]] = Field(None, description="Linked accounts.")
149
+ usage: Optional[str] = Field(None, description="Usage.")
150
+ details: Optional[str] = Field(None, description="Details.")
151
+ balances: Optional[List[BalanceSchema]] = Field(None, description="Balances.")
152
+ owner_address_structured: Optional[OwnerAddressStructuredSchema] = Field(
153
+ None, description="Owner address."
154
+ )
155
+ owner_address_unstructured: Optional[List[str]] = Field(
156
+ None, description="Owner address unstructured."
157
+ )
158
+
159
+
160
+ class AccountDetail(BaseModel):
161
+ """Account detail response."""
162
+
163
+ account: DetailSchema
164
+
165
+
166
+ class TransactionAmountSchema(BaseModel):
167
+ """Transaction amount schema."""
168
+
169
+ amount: str
170
+ currency: str
171
+
172
+
173
+ class InstructedAmount(BaseModel):
174
+ """Instructed amount schema."""
175
+
176
+ amount: str
177
+ currency: str
178
+
179
+
180
+ class CurrencyExchangeSchema(BaseModel):
181
+ """Currency exchange schema."""
182
+
183
+ source_currency: str
184
+ exchange_rate: Optional[str] = None
185
+ unit_currency: Optional[str] = None
186
+ target_currency: Optional[str] = None
187
+ quotation_date: Optional[str] = None
188
+ contract_identification: Optional[str] = None
189
+ instructed_amount: Optional[InstructedAmount] = None
190
+
191
+
192
+ class BalanceAfterTransactionSchema(BaseModel):
193
+ """Balance after transaction schema."""
194
+
195
+ balance_after_transaction: Optional[BalanceAmountSchema] = None
196
+ balance_type: Optional[str] = None
197
+
198
+
199
+ class TransactionSchema(BaseModel):
200
+ """Transaction schema."""
201
+
202
+ transaction_id: Optional[str] = Field(None, description="Transaction ID.")
203
+ booking_date: Optional[str] = Field(None, description="Booking date.")
204
+ booking_date_time: Optional[str] = Field(None, description="Booking date and time.")
205
+ value_date: Optional[str] = Field(None, description="Value date.")
206
+ value_date_time: Optional[str] = Field(None, description="Value date and time.")
207
+ transaction_amount: TransactionAmountSchema
208
+ currency_exchange: Optional[List[CurrencyExchangeSchema]] = None
209
+ creditor_name: Optional[str] = Field(None, description="Creditor name.")
210
+ creditor_account: Optional[AccountSchema] = None
211
+ creditor_agent: Optional[str] = Field(None, description="Creditor agent.")
212
+ ultimate_creditor: Optional[str] = Field(None, description="Ultimate creditor.")
213
+ debtor_name: Optional[str] = Field(None, description="Debtor name.")
214
+ debtor_account: Optional[AccountSchema] = None
215
+ debtor_agent: Optional[str] = Field(None, description="Debtor agent.")
216
+ ultimate_debtor: Optional[str] = Field(None, description="Ultimate debtor.")
217
+ remittance_information_unstructured: Optional[str] = Field(
218
+ None, description="Unstructured remittance information."
219
+ )
220
+ remittance_information_structured: Optional[str] = Field(
221
+ None, description="Structured remittance information."
222
+ )
223
+ additional_information: Optional[str] = Field(
224
+ None, description="Additional information."
225
+ )
226
+ balance_after_transaction: Optional[BalanceAfterTransactionSchema] = None
227
+ bank_transaction_code: Optional[str] = Field(
228
+ None, description="Bank transaction code."
229
+ )
230
+ proprietary_bank_transaction_code: Optional[str] = Field(
231
+ None, description="Proprietary bank transaction code."
232
+ )
233
+ internal_transaction_id: Optional[str] = Field(
234
+ None, description="Internal transaction ID."
235
+ )
236
+
237
+
238
+ class BankTransaction(BaseModel):
239
+ """Bank transaction - complete transaction model."""
240
+
241
+ model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True)
242
+
243
+ transaction_id: Optional[str] = Field(
244
+ None, description="Unique transaction identifier."
245
+ )
246
+ debtor_name: Optional[str] = Field(None, description="Debtor name.")
247
+ debtor_account: Optional[AccountSchema] = None
248
+ transaction_amount: Optional[TransactionAmountSchema] = None
249
+ booking_date: Optional[str] = Field(None, description="Booking date.")
250
+ value_date: Optional[str] = Field(None, description="Value date.")
251
+ remittance_information_unstructured: Optional[str] = Field(
252
+ None, description="Unstructured remittance information."
253
+ )
254
+ remittance_information_structured: Optional[str] = Field(
255
+ None, description="Structured remittance information."
256
+ )
257
+ additional_information: Optional[str] = Field(
258
+ None, description="Additional information."
259
+ )
260
+ creditor_name: Optional[str] = Field(None, description="Creditor name.")
261
+ creditor_account: Optional[AccountSchema] = None
262
+ currency_exchange: Optional[List[CurrencyExchangeSchema]] = None
263
+ balance_after_transaction: Optional[BalanceAfterTransactionSchema] = None
264
+ bank_transaction_code: Optional[str] = Field(
265
+ None, description="Bank transaction code."
266
+ )
267
+ proprietary_bank_transaction_code: Optional[str] = Field(
268
+ None, description="Proprietary bank transaction code."
269
+ )
270
+ internal_transaction_id: Optional[str] = Field(
271
+ None, description="Internal transaction ID."
272
+ )
273
+ remittance_information_unstructured_array: Optional[List[str]] = Field(
274
+ None, description="Unstructured remittance information array."
275
+ )
276
+ booking_date_time: Optional[str] = Field(None, description="Booking date and time.")
277
+ value_date_time: Optional[str] = Field(None, description="Value date and time.")
278
+ entry_reference: Optional[str] = Field(None, description="Entry reference.")
279
+ additional_information_structured: Optional[str] = Field(
280
+ None, description="Additional structured information."
281
+ )
282
+ card_transaction: Optional[Dict[str, Any]] = Field(
283
+ None, description="Card transaction details."
284
+ )
285
+ merchant_category_code: Optional[str] = Field(
286
+ None, description="Merchant category code."
287
+ )
288
+ creditor_id: Optional[str] = Field(None, description="Creditor ID.")
289
+ mandate_id: Optional[str] = Field(None, description="Mandate ID.")
290
+ transaction_status: Optional[str] = Field(None, description="Transaction status.")
291
+ funds_code: Optional[str] = Field(None, description="Funds code.")
292
+ batch_booking_indicator: Optional[bool] = Field(
293
+ None, description="Batch booking indicator."
294
+ )
295
+ number_of_transactions: Optional[int] = Field(
296
+ None, description="Number of transactions."
297
+ )
298
+ account_servicer_reference: Optional[str] = Field(
299
+ None, description="Account servicer reference."
300
+ )
301
+
302
+
303
+ class AccountTransactions(BaseModel):
304
+ """Account transactions response - complete with all fields."""
305
+
306
+ transactions: Dict[str, List[BankTransaction]] # booked and pending
307
+ last_updated: Optional[str] = Field(
308
+ None, description="The last time the account transactions were updated"
309
+ )
310
+
311
+
312
+ class Institution(BaseModel):
313
+ """Institution model - complete from swagger."""
314
+
315
+ id: str
316
+ name: str
317
+ bic: Optional[str] = None
318
+ transaction_total_days: str
319
+ countries: List[str]
320
+ logo: Optional[str] = None
321
+ total_countries: Optional[int] = None
322
+ supported_payments: Optional[Dict[str, Any]] = None
323
+ supported_features: Optional[List[str]] = None
324
+
325
+
326
+ class RequisitionRequest(BaseModel):
327
+ """Requisition request - complete model."""
328
+
329
+ redirect: str
330
+ institution_id: str
331
+ reference: str
332
+ agreement: Optional[str] = None
333
+ user_language: Optional[str] = None
334
+ ssn: Optional[str] = None
335
+ redirect_immediate: Optional[bool] = None
336
+ account_selection: Optional[bool] = None
337
+ redirect_uri: Optional[str] = None
338
+ access_valid_for_days: Optional[int] = None
339
+ max_historical_days: Optional[int] = None
340
+ access_scope: Optional[List[str]] = None
341
+ additional_id: Optional[str] = None
342
+ accounts: Optional[List[str]] = None
343
+
344
+ def to_dict(self) -> Dict[str, Any]:
345
+ return self.model_dump(exclude_none=True)
346
+
347
+
348
+ class Requisition(BaseModel):
349
+ """Requisition model - complete from swagger."""
350
+
351
+ id: str
352
+ created: str
353
+ redirect: str
354
+ status: StatusEnum
355
+ institution_id: str
356
+ agreement: Optional[str] = None
357
+ reference: str
358
+ accounts: List[str] = []
359
+ user_language: Optional[str] = None
360
+ link: Optional[str] = None
361
+ ssn: Optional[str] = None
362
+ account_selection: Optional[bool] = None
363
+ redirect_immediate: Optional[bool] = None
364
+ enduser_agreement_id: Optional[str] = None
365
+ authentication_user_id: Optional[str] = None
366
+ redirect_uri: Optional[str] = None
367
+ access_valid_for_days: Optional[int] = None
368
+ max_historical_days: Optional[int] = None
369
+ access_scope: Optional[List[str]] = None
370
+ additional_id: Optional[str] = None
371
+
372
+
373
+ class SpectacularRequisition(BaseModel):
374
+ """Spectacular requisition - API documentation model."""
375
+
376
+ id: str
377
+ created: str
378
+ redirect: str
379
+ status: StatusEnum
380
+ institution_id: str
381
+ agreement: Optional[str] = None
382
+ reference: str
383
+ accounts: List[str]
384
+ user_language: Optional[str] = None
385
+ link: Optional[str] = None
386
+ ssn: Optional[str] = None
387
+ account_selection: Optional[bool] = None
388
+ redirect_immediate: Optional[bool] = None
389
+ enduser_agreement_id: Optional[str] = None
390
+
391
+
392
+ class PaginatedRequisitionList(BaseModel):
393
+ """Paginated requisition list."""
394
+
395
+ count: int
396
+ next: Optional[str] = None
397
+ previous: Optional[str] = None
398
+ results: List[Requisition]
399
+
400
+
401
+ class EndUserAgreementRequest(BaseModel):
402
+ """End user agreement request."""
403
+
404
+ institution_id: str
405
+ max_historical_days: int
406
+ access_valid_for_days: int
407
+ access_scope: List[str]
408
+ accepted_usage: Optional[str] = None
409
+
410
+ def to_dict(self) -> Dict[str, Any]:
411
+ return self.model_dump(exclude_none=True)
412
+
413
+
414
+ class EndUserAgreement(BaseModel):
415
+ """End user agreement - complete model."""
416
+
417
+ id: str
418
+ created: str
419
+ accepted: Optional[str] = None
420
+ institution_id: str
421
+ max_historical_days: int
422
+ access_valid_for_days: int
423
+ access_scope: List[str]
424
+ accepted_usage: Optional[str] = None
425
+ locale: Optional[str] = None
426
+ access_valid_until: Optional[str] = None
427
+ accepted_at: Optional[str] = None
428
+
429
+
430
+ class PaginatedEndUserAgreementList(BaseModel):
431
+ """Paginated end user agreement list."""
432
+
433
+ count: int
434
+ next: Optional[str] = None
435
+ previous: Optional[str] = None
436
+ results: List[EndUserAgreement]
437
+
438
+
439
+ class EnduserAcceptanceDetailsRequest(BaseModel):
440
+ """End user acceptance details request."""
441
+
442
+ user_agent: str
443
+ ip: str
444
+ accepted: Optional[bool] = None
445
+
446
+
447
+ class ReconfirmationRetrieveRequest(BaseModel):
448
+ """Reconfirmation retrieve request."""
449
+
450
+ user_agent: str
451
+ ip: str
452
+ redirect: Optional[str] = None
453
+
454
+
455
+ class ReconfirmationRetrieve(BaseModel):
456
+ """Reconfirmation retrieve response."""
457
+
458
+ reconfirmation_id: str
459
+ created: str
460
+ accounts: List[str]
461
+ redirect: Optional[str] = None
462
+
463
+
464
+ class SuccessfulDeleteResponse(BaseModel):
465
+ """Successful delete response."""
466
+
467
+ summary: str
468
+ detail: str
469
+ status_code: int
470
+
471
+
472
+ class ErrorResponse(BaseModel):
473
+ """Error response model."""
474
+
475
+ summary: str
476
+ detail: str
477
+ status_code: int
478
+
479
+
480
+ class JWTObtainPairRequest(BaseModel):
481
+ """JWT obtain pair request."""
482
+
483
+ secret_id: str
484
+ secret_key: str
485
+
486
+
487
+ class JWTRefreshRequest(BaseModel):
488
+ """JWT refresh request."""
489
+
490
+ refresh: str
491
+
492
+
493
+ class SpectacularJWTRefresh(BaseModel):
494
+ """Spectacular JWT refresh response."""
495
+
496
+ access: str
497
+ access_expires: int
498
+ refresh: str
499
+ refresh_expires: int
500
+
501
+
502
+ class SpectacularJWTObtain(BaseModel):
503
+ """Spectacular JWT obtain response."""
504
+
505
+ refresh: str
506
+ access: str
507
+ access_expires: int
508
+ refresh_expires: int
509
+
510
+
511
+ class Integration(BaseModel):
512
+ """Integration model."""
513
+
514
+ id: str
515
+ name: str
516
+ bic: Optional[str] = None
517
+ transaction_total_days: str
518
+ max_access_valid_for_days: Optional[int] = None
519
+ countries: List[str]
520
+ logo: Optional[str] = None
521
+ supported_payments: Optional[Dict[str, Any]] = None
522
+ supported_features: Optional[List[str]] = None
523
+ identification_codes: Optional[List[str]] = None
524
+
525
+
526
+ class IntegrationRetrieve(BaseModel):
527
+ """Integration retrieve response."""
528
+
529
+ id: str
530
+ name: str
531
+ bic: Optional[str] = None
532
+ transaction_total_days: str
533
+ max_access_valid_for_days: Optional[int] = None
534
+ countries: List[str]
535
+ logo: Optional[str] = None
536
+ supported_payments: Optional[Dict[str, Any]] = None
537
+ supported_features: Optional[List[str]] = None
538
+ identification_codes: Optional[List[str]] = None