iso_20022_colr/
colr_019_001_01.rs

1// Copyright 2023 Emergent Financial, LLC - All Rights Reserved
2//
3//
4// This software is licensed under the Emergent Financial Limited Public License Version 1.0
5// (EF-LPLv1). You may use, copy, modify, and distribute this software under the terms and
6// conditions of the EF-LPL. For more information, please refer to the full text of the license
7// at https://github.com/emergentfinancial/ef-lpl.
8//
9//
10// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
11// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
13// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16//
17// See ISO-20022 Intellectual Property Rights Policy at
18// <https://www.iso20022.org/intellectual-property-rights>
19// for more information.
20
21use validator::Validate;
22
23::lazy_static::lazy_static! {
24    static ref ISIN_OCT_2015_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}[A-Z0-9]{9,9}[0-9]{1,1}"#).unwrap();
25}
26
27::lazy_static::lazy_static! {
28    static ref MAX_5_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[0-9]{1,5}"#).unwrap();
29}
30
31::lazy_static::lazy_static! {
32    static ref MIC_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z0-9]{4,4}"#).unwrap();
33}
34
35::lazy_static::lazy_static! {
36    static ref EXACT_4_ALPHA_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[a-zA-Z0-9]{4}"#).unwrap();
37}
38
39::lazy_static::lazy_static! {
40    static ref COUNTRY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}"#).unwrap();
41}
42
43::lazy_static::lazy_static! {
44    static ref ACTIVE_CURRENCY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{3,3}"#).unwrap();
45}
46
47::lazy_static::lazy_static! {
48    static ref IBAN_2007_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"#).unwrap();
49}
50
51::lazy_static::lazy_static! {
52    static ref MAX_3_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[0-9]{1,3}"#).unwrap();
53}
54
55::lazy_static::lazy_static! {
56    static ref LEI_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z0-9]{18,18}[0-9]{2,2}"#).unwrap();
57}
58
59::lazy_static::lazy_static! {
60    static ref ISO_20022_MESSAGE_IDENTIFICATION_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[a-z]{4}\.[0-9]{3}\.[0-9]{3}\.[0-9]{2}"#).unwrap();
61}
62
63::lazy_static::lazy_static! {
64    static ref ANY_BIC_DEC_2014_IDENTIFIER_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1}"#).unwrap();
65}
66
67::lazy_static::lazy_static! {
68    static ref EXACT_3_NUMERIC_TEXT_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[0-9]{3}"#).unwrap();
69}
70
71::lazy_static::lazy_static! {
72    static ref ACTIVE_OR_HISTORIC_CURRENCY_CODE_REGEX: ::regex::Regex = ::regex::Regex::new(r#"[A-Z]{3,3}"#).unwrap();
73}
74
75/// Returns the namespace of the schema
76pub fn namespace() -> String {
77    "urn:iso:std:iso:20022:tech:xsd:colr.019.001.01".to_string()
78}
79
80#[derive(
81    Debug,
82    Default,
83    Clone,
84    PartialEq,
85    ::serde::Serialize,
86    ::serde::Deserialize,
87    ::derive_builder::Builder,
88    ::validator::Validate,
89)]
90pub struct InterestComputationMethodFormat4ChoiceEnum {
91    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
92    pub cd: Option<InterestComputationMethod2Code>,
93    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
94    pub prtry: Option<GenericIdentification30>,
95}
96#[derive(
97    Debug,
98    Default,
99    Clone,
100    PartialEq,
101    ::serde::Serialize,
102    ::serde::Deserialize,
103    ::derive_builder::Builder,
104    ::validator::Validate,
105)]
106pub struct InterestComputationMethodFormat4Choice {
107    #[serde(flatten)]
108    pub value: InterestComputationMethodFormat4ChoiceEnum,
109}
110#[derive(
111    Debug,
112    Default,
113    Clone,
114    PartialEq,
115    ::serde::Serialize,
116    ::serde::Deserialize,
117    ::derive_builder::Builder,
118    ::validator::Validate,
119)]
120pub struct CollateralParameters10 {
121    #[serde(rename = "CollInstrTp")]
122    pub coll_instr_tp: CollateralTransactionType1Choice,
123    #[serde(rename = "XpsrTp")]
124    pub xpsr_tp: ExposureType23Choice,
125    #[serde(rename = "CollSd")]
126    pub coll_sd: CollateralRole1Code,
127    #[serde(rename = "ValSghtMrgnRate", skip_serializing_if = "Option::is_none")]
128    pub val_sght_mrgn_rate: Option<RateOrType1Choice>,
129    #[serde(rename = "TrfTitl", skip_serializing_if = "Option::is_none")]
130    pub trf_titl: Option<YesNoIndicator>,
131    #[serde(rename = "SttlmPrc", skip_serializing_if = "Option::is_none")]
132    pub sttlm_prc: Option<GenericIdentification30>,
133    #[serde(rename = "Prty", skip_serializing_if = "Option::is_none")]
134    pub prty: Option<GenericIdentification30>,
135    #[serde(rename = "AutomtcAllcn", skip_serializing_if = "Option::is_none")]
136    pub automtc_allcn: Option<YesNoIndicator>,
137    #[serde(rename = "FaildSttlmSlvtn", skip_serializing_if = "Option::is_none")]
138    pub faild_sttlm_slvtn: Option<YesNoIndicator>,
139    #[serde(
140        rename = "MainTradgAcctCollstn",
141        skip_serializing_if = "Option::is_none"
142    )]
143    pub main_tradg_acct_collstn: Option<YesNoIndicator>,
144    #[serde(
145        rename = "BsktIdAndElgbltySetPrfl",
146        skip_serializing_if = "Option::is_none"
147    )]
148    pub bskt_id_and_elgblty_set_prfl: Option<BasketIdentificationAndEligibilitySetProfile1>,
149    #[serde(rename = "RspnSts", skip_serializing_if = "Option::is_none")]
150    pub rspn_sts: Option<ResponseStatus9Choice>,
151    #[serde(rename = "AddtlInf", skip_serializing_if = "Option::is_none")]
152    pub addtl_inf: Option<AdditionalInformation24>,
153}
154#[derive(
155    Debug,
156    Default,
157    Clone,
158    PartialEq,
159    ::serde::Serialize,
160    ::serde::Deserialize,
161    ::derive_builder::Builder,
162    ::validator::Validate,
163)]
164pub struct ForeignExchangeTerms23 {
165    #[serde(rename = "UnitCcy")]
166    pub unit_ccy: ActiveCurrencyCode,
167    #[serde(rename = "QtdCcy")]
168    pub qtd_ccy: ActiveCurrencyCode,
169    #[validate]
170    #[serde(rename = "XchgRate")]
171    pub xchg_rate: BaseOneRate,
172    #[validate]
173    #[serde(rename = "RsltgAmt")]
174    pub rsltg_amt: ActiveCurrencyAndAmount,
175}
176#[derive(
177    Debug,
178    Default,
179    Clone,
180    PartialEq,
181    ::serde::Serialize,
182    ::serde::Deserialize,
183    ::derive_builder::Builder,
184    ::validator::Validate,
185)]
186pub struct TransactionIdentifications45 {
187    #[validate]
188    #[serde(rename = "ClntCollInstrId")]
189    pub clnt_coll_instr_id: Max35Text,
190    #[serde(rename = "ClntCollTxId", skip_serializing_if = "Option::is_none")]
191    pub clnt_coll_tx_id: Option<Max35Text>,
192    #[serde(
193        rename = "TrptyAgtSvcPrvdrCollInstrId",
194        skip_serializing_if = "Option::is_none"
195    )]
196    pub trpty_agt_svc_prvdr_coll_instr_id: Option<Max35Text>,
197    #[serde(
198        rename = "TrptyAgtSvcPrvdrCollTxId",
199        skip_serializing_if = "Option::is_none"
200    )]
201    pub trpty_agt_svc_prvdr_coll_tx_id: Option<Max35Text>,
202    #[serde(rename = "CmonTxId", skip_serializing_if = "Option::is_none")]
203    pub cmon_tx_id: Option<Max52Text>,
204}
205#[derive(
206    Debug,
207    Default,
208    Clone,
209    PartialEq,
210    ::serde::Serialize,
211    ::serde::Deserialize,
212    ::derive_builder::Builder,
213    ::validator::Validate,
214)]
215pub struct MarketIdentification1ChoiceEnum {
216    #[serde(rename = "Desc", skip_serializing_if = "Option::is_none")]
217    pub desc: Option<Max35Text>,
218    #[serde(rename = "MktIdrCd", skip_serializing_if = "Option::is_none")]
219    pub mkt_idr_cd: Option<MicIdentifier>,
220}
221#[derive(
222    Debug,
223    Default,
224    Clone,
225    PartialEq,
226    ::serde::Serialize,
227    ::serde::Deserialize,
228    ::derive_builder::Builder,
229    ::validator::Validate,
230)]
231pub struct MarketIdentification1Choice {
232    #[serde(flatten)]
233    pub value: MarketIdentification1ChoiceEnum,
234}
235#[derive(
236    Debug,
237    Default,
238    Clone,
239    PartialEq,
240    ::serde::Serialize,
241    ::serde::Deserialize,
242    ::derive_builder::Builder,
243    ::validator::Validate,
244)]
245pub struct ActiveCurrencyAndAmount {
246    #[serde(rename = "ActiveCurrencyAndAmount")]
247    pub value: ActiveCurrencyAndAmountSimpleType,
248    #[serde(rename = "@Ccy")]
249    pub ccy: ActiveCurrencyCode,
250}
251#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
252pub enum InterestComputationMethod2Code {
253    #[serde(rename = "A001")]
254    A001,
255    #[serde(rename = "A002")]
256    A002,
257    #[serde(rename = "A003")]
258    A003,
259    #[serde(rename = "A004")]
260    A004,
261    #[serde(rename = "A005")]
262    A005,
263    #[serde(rename = "A006")]
264    A006,
265    #[serde(rename = "A007")]
266    A007,
267    #[serde(rename = "A008")]
268    A008,
269    #[serde(rename = "A009")]
270    A009,
271    #[serde(rename = "A010")]
272    A010,
273    #[serde(rename = "A011")]
274    A011,
275    #[serde(rename = "A012")]
276    A012,
277    #[serde(rename = "A013")]
278    A013,
279    #[serde(rename = "A014")]
280    A014,
281    #[serde(rename = "NARR")]
282    Narr,
283    #[default]
284    Unknown,
285}
286#[derive(
287    Debug,
288    Default,
289    Clone,
290    PartialEq,
291    ::serde::Serialize,
292    ::serde::Deserialize,
293    ::derive_builder::Builder,
294    ::validator::Validate,
295)]
296pub struct AmountAndDirection49 {
297    #[validate]
298    #[serde(rename = "Amt")]
299    pub amt: ActiveCurrencyAndAmount,
300    #[serde(rename = "CdtDbtInd", skip_serializing_if = "Option::is_none")]
301    pub cdt_dbt_ind: Option<CreditDebitCode>,
302    #[serde(
303        rename = "OrgnlCcyAndOrdrdAmt",
304        skip_serializing_if = "Option::is_none"
305    )]
306    pub orgnl_ccy_and_ordrd_amt: Option<ActiveOrHistoricCurrencyAndAmount>,
307    #[serde(rename = "FXDtls", skip_serializing_if = "Option::is_none")]
308    pub fx_dtls: Option<ForeignExchangeTerms23>,
309}
310#[derive(
311    Debug,
312    Default,
313    Clone,
314    PartialEq,
315    ::serde::Serialize,
316    ::serde::Deserialize,
317    ::derive_builder::Builder,
318    ::validator::Validate,
319)]
320pub struct AdditionalInformation24 {
321    #[serde(rename = "CollInstr", skip_serializing_if = "Option::is_none")]
322    pub coll_instr: Option<Max350Text>,
323    #[serde(rename = "Note", skip_serializing_if = "Option::is_none")]
324    pub note: Option<Max350Text>,
325}
326#[derive(
327    Debug,
328    Default,
329    Clone,
330    PartialEq,
331    ::serde::Serialize,
332    ::serde::Deserialize,
333    ::derive_builder::Builder,
334    ::validator::Validate,
335)]
336pub struct ActiveCurrencyAndAmountSimpleType {
337    #[validate(range(min = 0,))]
338    #[serde(rename = "$text")]
339    pub value: f64,
340}
341#[derive(
342    Debug,
343    Default,
344    Clone,
345    PartialEq,
346    ::serde::Serialize,
347    ::serde::Deserialize,
348    ::derive_builder::Builder,
349    ::validator::Validate,
350)]
351pub struct IsinOct2015Identifier {
352    #[validate(regex = "ISIN_OCT_2015_IDENTIFIER_REGEX")]
353    #[serde(rename = "$text")]
354    pub value: String,
355}
356#[derive(
357    Debug,
358    Default,
359    Clone,
360    PartialEq,
361    ::serde::Serialize,
362    ::serde::Deserialize,
363    ::derive_builder::Builder,
364    ::validator::Validate,
365)]
366pub struct ResponseStatus9ChoiceEnum {
367    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
368    pub cd: Option<ResponseStatus2Code>,
369    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
370    pub prtry: Option<GenericIdentification30>,
371}
372#[derive(
373    Debug,
374    Default,
375    Clone,
376    PartialEq,
377    ::serde::Serialize,
378    ::serde::Deserialize,
379    ::derive_builder::Builder,
380    ::validator::Validate,
381)]
382pub struct ResponseStatus9Choice {
383    #[serde(flatten)]
384    pub value: ResponseStatus9ChoiceEnum,
385}
386#[derive(
387    Debug,
388    Default,
389    Clone,
390    PartialEq,
391    ::serde::Serialize,
392    ::serde::Deserialize,
393    ::derive_builder::Builder,
394    ::validator::Validate,
395)]
396pub struct DealTransactionDetails5 {
397    #[serde(rename = "PlcOfTrad", skip_serializing_if = "Option::is_none")]
398    pub plc_of_trad: Option<PlaceOfTradeIdentification1>,
399    #[serde(rename = "CncntrtnLmt", skip_serializing_if = "Option::is_none")]
400    pub cncntrtn_lmt: Option<YesNoIndicator>,
401    #[serde(rename = "MinNtcePrd", skip_serializing_if = "Option::is_none")]
402    pub min_ntce_prd: Option<Exact3NumericText>,
403    #[serde(rename = "ClsgDt")]
404    pub clsg_dt: ClosingDate4Choice,
405    #[serde(rename = "DealDtlsAmt", skip_serializing_if = "Option::is_none")]
406    pub deal_dtls_amt: Option<CollateralAmount18>,
407    #[serde(rename = "PricgRateAndIndx", skip_serializing_if = "Option::is_none")]
408    pub pricg_rate_and_indx: Option<RateOrName4Choice>,
409    #[serde(
410        rename = "OvrnghtFrqcyRateFxg",
411        skip_serializing_if = "Option::is_none"
412    )]
413    pub ovrnght_frqcy_rate_fxg: Option<FrequencyRateFixing1Choice>,
414    #[serde(rename = "Sprd", skip_serializing_if = "Option::is_none")]
415    pub sprd: Option<PercentageRate>,
416    #[serde(rename = "DayCntBsis", skip_serializing_if = "Option::is_none")]
417    pub day_cnt_bsis: Option<InterestComputationMethodFormat4Choice>,
418    #[serde(rename = "Pmt", skip_serializing_if = "Option::is_none")]
419    pub pmt: Option<DeliveryReceiptType2Code>,
420    #[serde(rename = "OptnTp", skip_serializing_if = "Option::is_none")]
421    pub optn_tp: Option<OptionType6Choice>,
422    #[serde(rename = "TermntnOptn", skip_serializing_if = "Option::is_none")]
423    pub termntn_optn: Option<RepoTerminationOption1Code>,
424}
425#[derive(
426    Debug,
427    Default,
428    Clone,
429    PartialEq,
430    ::serde::Serialize,
431    ::serde::Deserialize,
432    ::derive_builder::Builder,
433    ::validator::Validate,
434)]
435pub struct OtherParties38 {
436    #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
437    pub issr: Option<PartyIdentification136>,
438    #[validate(length(min = 0,))]
439    #[serde(rename = "Invstr", default)]
440    pub invstr: Vec<PartyIdentification149>,
441}
442#[derive(
443    Debug,
444    Default,
445    Clone,
446    PartialEq,
447    ::serde::Serialize,
448    ::serde::Deserialize,
449    ::derive_builder::Builder,
450    ::validator::Validate,
451)]
452pub struct SupplementaryDataEnvelope1<
453    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
454> {
455    #[validate]
456    #[serde(flatten)]
457    pub value: A,
458}
459#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
460pub enum FrequencyRateFixing1Code {
461    #[serde(rename = "NONE")]
462    None,
463    #[serde(rename = "OVNG")]
464    Ovng,
465    #[serde(rename = "PRDC")]
466    Prdc,
467    #[default]
468    Unknown,
469}
470#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
471pub enum CalculationMethod1Code {
472    #[serde(rename = "SIMP")]
473    Simp,
474    #[serde(rename = "COMP")]
475    Comp,
476    #[default]
477    Unknown,
478}
479#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
480pub enum ExposureType14Code {
481    #[serde(rename = "BFWD")]
482    Bfwd,
483    #[serde(rename = "PAYM")]
484    Paym,
485    #[serde(rename = "CBCO")]
486    Cbco,
487    #[serde(rename = "COMM")]
488    Comm,
489    #[serde(rename = "CRDS")]
490    Crds,
491    #[serde(rename = "CRTL")]
492    Crtl,
493    #[serde(rename = "CRSP")]
494    Crsp,
495    #[serde(rename = "CCIR")]
496    Ccir,
497    #[serde(rename = "CRPR")]
498    Crpr,
499    #[serde(rename = "EQPT")]
500    Eqpt,
501    #[serde(rename = "EQUS")]
502    Equs,
503    #[serde(rename = "EXTD")]
504    Extd,
505    #[serde(rename = "EXPT")]
506    Expt,
507    #[serde(rename = "FIXI")]
508    Fixi,
509    #[serde(rename = "FORX")]
510    Forx,
511    #[serde(rename = "FORW")]
512    Forw,
513    #[serde(rename = "FUTR")]
514    Futr,
515    #[serde(rename = "OPTN")]
516    Optn,
517    #[serde(rename = "LIQU")]
518    Liqu,
519    #[serde(rename = "OTCD")]
520    Otcd,
521    #[serde(rename = "RVPO")]
522    Rvpo,
523    #[serde(rename = "SLOA")]
524    Sloa,
525    #[serde(rename = "SBSC")]
526    Sbsc,
527    #[serde(rename = "SCRP")]
528    Scrp,
529    #[serde(rename = "SLEB")]
530    Sleb,
531    #[serde(rename = "SCIR")]
532    Scir,
533    #[serde(rename = "SCIE")]
534    Scie,
535    #[serde(rename = "SWPT")]
536    Swpt,
537    #[serde(rename = "TBAS")]
538    Tbas,
539    #[serde(rename = "TRCP")]
540    Trcp,
541    #[serde(rename = "UDMS")]
542    Udms,
543    #[serde(rename = "CCPC")]
544    Ccpc,
545    #[serde(rename = "EQUI")]
546    Equi,
547    #[serde(rename = "TRBD")]
548    Trbd,
549    #[serde(rename = "REPO")]
550    Repo,
551    #[serde(rename = "SHSL")]
552    Shsl,
553    #[serde(rename = "MGLD")]
554    Mgld,
555    #[default]
556    Unknown,
557}
558#[derive(
559    Debug,
560    Default,
561    Clone,
562    PartialEq,
563    ::serde::Serialize,
564    ::serde::Deserialize,
565    ::derive_builder::Builder,
566    ::validator::Validate,
567)]
568pub struct Max30DecimalNumber {
569    #[serde(rename = "$text")]
570    pub value: f64,
571}
572#[derive(
573    Debug,
574    Default,
575    Clone,
576    PartialEq,
577    ::serde::Serialize,
578    ::serde::Deserialize,
579    ::derive_builder::Builder,
580    ::validator::Validate,
581)]
582pub struct IsoDate {
583    #[serde(rename = "$text")]
584    pub value: ::chrono::NaiveDate,
585}
586#[derive(
587    Debug,
588    Default,
589    Clone,
590    PartialEq,
591    ::serde::Serialize,
592    ::serde::Deserialize,
593    ::derive_builder::Builder,
594    ::validator::Validate,
595)]
596pub struct MarketIdentification84 {
597    #[serde(rename = "Id", skip_serializing_if = "Option::is_none")]
598    pub id: Option<MarketIdentification1Choice>,
599    #[serde(rename = "Tp")]
600    pub tp: MarketType8Choice,
601}
602#[derive(
603    Debug,
604    Default,
605    Clone,
606    PartialEq,
607    ::serde::Serialize,
608    ::serde::Deserialize,
609    ::derive_builder::Builder,
610    ::validator::Validate,
611)]
612pub struct Max5NumericText {
613    #[validate(regex = "MAX_5_NUMERIC_TEXT_REGEX")]
614    #[serde(rename = "$text")]
615    pub value: String,
616}
617#[derive(
618    Debug,
619    Default,
620    Clone,
621    PartialEq,
622    ::serde::Serialize,
623    ::serde::Deserialize,
624    ::derive_builder::Builder,
625    ::validator::Validate,
626)]
627pub struct CollateralAmount18 {
628    #[serde(rename = "Tx", skip_serializing_if = "Option::is_none")]
629    pub tx: Option<AmountAndDirection49>,
630    #[serde(rename = "Termntn", skip_serializing_if = "Option::is_none")]
631    pub termntn: Option<AmountAndDirection49>,
632    #[serde(rename = "Acrd", skip_serializing_if = "Option::is_none")]
633    pub acrd: Option<AmountAndDirection49>,
634    #[serde(rename = "CmpndSmplAcrlClctn", skip_serializing_if = "Option::is_none")]
635    pub cmpnd_smpl_acrl_clctn: Option<CalculationMethod1Code>,
636    #[serde(rename = "PmtFrqcy", skip_serializing_if = "Option::is_none")]
637    pub pmt_frqcy: Option<Frequency38Choice>,
638    #[serde(rename = "IntrstPmtDely", skip_serializing_if = "Option::is_none")]
639    pub intrst_pmt_dely: Option<Max3NumericText>,
640    #[validate(length(min = 0,))]
641    #[serde(rename = "TxAmtBrkdwn", default)]
642    pub tx_amt_brkdwn: Vec<CollateralTransactionAmountBreakdown2>,
643    #[serde(rename = "ValSght", skip_serializing_if = "Option::is_none")]
644    pub val_sght: Option<AmountAndDirection49>,
645}
646#[derive(
647    Debug,
648    Default,
649    Clone,
650    PartialEq,
651    ::serde::Serialize,
652    ::serde::Deserialize,
653    ::derive_builder::Builder,
654    ::validator::Validate,
655)]
656pub struct ActiveOrHistoricCurrencyAndAmount {
657    #[serde(rename = "ActiveOrHistoricCurrencyAndAmount")]
658    pub value: ActiveOrHistoricCurrencyAndAmountSimpleType,
659    #[serde(rename = "@Ccy")]
660    pub ccy: ActiveOrHistoricCurrencyCode,
661}
662#[derive(
663    Debug,
664    Default,
665    Clone,
666    PartialEq,
667    ::serde::Serialize,
668    ::serde::Deserialize,
669    ::derive_builder::Builder,
670    ::validator::Validate,
671)]
672pub struct PartyIdentification134ChoiceEnum {
673    #[serde(rename = "PrtryId", skip_serializing_if = "Option::is_none")]
674    pub prtry_id: Option<GenericIdentification36>,
675    #[serde(rename = "Ctry", skip_serializing_if = "Option::is_none")]
676    pub ctry: Option<CountryCode>,
677    #[serde(rename = "NmAndAdr", skip_serializing_if = "Option::is_none")]
678    pub nm_and_adr: Option<NameAndAddress5>,
679    #[serde(rename = "AnyBIC", skip_serializing_if = "Option::is_none")]
680    pub any_bic: Option<AnyBicDec2014Identifier>,
681}
682#[derive(
683    Debug,
684    Default,
685    Clone,
686    PartialEq,
687    ::serde::Serialize,
688    ::serde::Deserialize,
689    ::derive_builder::Builder,
690    ::validator::Validate,
691)]
692pub struct PartyIdentification134Choice {
693    #[serde(flatten)]
694    pub value: PartyIdentification134ChoiceEnum,
695}
696#[derive(
697    Debug,
698    Default,
699    Clone,
700    PartialEq,
701    ::serde::Serialize,
702    ::serde::Deserialize,
703    ::derive_builder::Builder,
704    ::validator::Validate,
705)]
706pub struct DecimalNumber {
707    #[serde(rename = "$text")]
708    pub value: f64,
709}
710#[derive(
711    Debug,
712    Default,
713    Clone,
714    PartialEq,
715    ::serde::Serialize,
716    ::serde::Deserialize,
717    ::derive_builder::Builder,
718    ::validator::Validate,
719)]
720pub struct Pagination1 {
721    #[validate]
722    #[serde(rename = "PgNb")]
723    pub pg_nb: Max5NumericText,
724    #[validate]
725    #[serde(rename = "LastPgInd")]
726    pub last_pg_ind: YesNoIndicator,
727}
728#[derive(
729    Debug,
730    Default,
731    Clone,
732    PartialEq,
733    ::serde::Serialize,
734    ::serde::Deserialize,
735    ::derive_builder::Builder,
736    ::validator::Validate,
737)]
738pub struct Frequency38ChoiceEnum {
739    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
740    pub cd: Option<EventFrequency12Code>,
741    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
742    pub prtry: Option<GenericIdentification30>,
743}
744#[derive(
745    Debug,
746    Default,
747    Clone,
748    PartialEq,
749    ::serde::Serialize,
750    ::serde::Deserialize,
751    ::derive_builder::Builder,
752    ::validator::Validate,
753)]
754pub struct Frequency38Choice {
755    #[serde(flatten)]
756    pub value: Frequency38ChoiceEnum,
757}
758#[derive(
759    Debug,
760    Default,
761    Clone,
762    PartialEq,
763    ::serde::Serialize,
764    ::serde::Deserialize,
765    ::derive_builder::Builder,
766    ::validator::Validate,
767)]
768pub struct GenericIdentification30 {
769    #[validate]
770    #[serde(rename = "Id")]
771    pub id: Exact4AlphaNumericText,
772    #[validate]
773    #[serde(rename = "Issr")]
774    pub issr: Max35Text,
775    #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
776    pub schme_nm: Option<Max35Text>,
777}
778#[derive(
779    Debug,
780    Default,
781    Clone,
782    PartialEq,
783    ::serde::Serialize,
784    ::serde::Deserialize,
785    ::derive_builder::Builder,
786    ::validator::Validate,
787)]
788pub struct TripartyCollateralTransactionInstructionV01<
789    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
790> {
791    #[validate]
792    #[serde(rename = "TxInstrId")]
793    pub tx_instr_id: TransactionIdentifications45,
794    #[validate(length(min = 0,))]
795    #[serde(rename = "Lnkgs", default)]
796    pub lnkgs: Vec<Linkages58>,
797    #[validate]
798    #[serde(rename = "Pgntn")]
799    pub pgntn: Pagination1,
800    #[validate]
801    #[serde(rename = "GnlParams")]
802    pub gnl_params: CollateralParameters10,
803    #[validate]
804    #[serde(rename = "CollPties")]
805    pub coll_pties: CollateralParties10,
806    #[validate]
807    #[serde(rename = "DealTxDtls")]
808    pub deal_tx_dtls: DealTransactionDetails5,
809    #[validate]
810    #[serde(rename = "DealTxDt")]
811    pub deal_tx_dt: CollateralDate2,
812    #[validate(length(min = 0,))]
813    #[serde(rename = "SctiesMvmnt", default)]
814    pub scties_mvmnt: Vec<SecuritiesMovement9>,
815    #[validate(length(min = 0,))]
816    #[serde(rename = "CshMvmnt", default)]
817    pub csh_mvmnt: Vec<CashMovement8>,
818    #[serde(rename = "OthrPties", skip_serializing_if = "Option::is_none")]
819    pub othr_pties: Option<OtherParties38>,
820    #[validate(length(min = 0,))]
821    #[serde(rename = "SplmtryData", default)]
822    pub splmtry_data: Vec<SupplementaryData1<A>>,
823}
824#[derive(
825    Debug,
826    Default,
827    Clone,
828    PartialEq,
829    ::serde::Serialize,
830    ::serde::Deserialize,
831    ::derive_builder::Builder,
832    ::validator::Validate,
833)]
834pub struct NameAndAddress5 {
835    #[validate]
836    #[serde(rename = "Nm")]
837    pub nm: Max350Text,
838    #[serde(rename = "Adr", skip_serializing_if = "Option::is_none")]
839    pub adr: Option<PostalAddress1>,
840}
841#[derive(
842    Debug,
843    Default,
844    Clone,
845    PartialEq,
846    ::serde::Serialize,
847    ::serde::Deserialize,
848    ::derive_builder::Builder,
849    ::validator::Validate,
850)]
851pub struct BlockChainAddressWallet3 {
852    #[validate]
853    #[serde(rename = "Id")]
854    pub id: Max140Text,
855    #[serde(rename = "Tp", skip_serializing_if = "Option::is_none")]
856    pub tp: Option<GenericIdentification30>,
857    #[serde(rename = "Nm", skip_serializing_if = "Option::is_none")]
858    pub nm: Option<Max70Text>,
859}
860#[derive(
861    Debug,
862    Default,
863    Clone,
864    PartialEq,
865    ::serde::Serialize,
866    ::serde::Deserialize,
867    ::derive_builder::Builder,
868    ::validator::Validate,
869)]
870pub struct RateOrType1ChoiceEnum {
871    #[serde(rename = "Tp", skip_serializing_if = "Option::is_none")]
872    pub tp: Option<GenericIdentification1>,
873    #[serde(rename = "Rate", skip_serializing_if = "Option::is_none")]
874    pub rate: Option<PercentageRate>,
875}
876#[derive(
877    Debug,
878    Default,
879    Clone,
880    PartialEq,
881    ::serde::Serialize,
882    ::serde::Deserialize,
883    ::derive_builder::Builder,
884    ::validator::Validate,
885)]
886pub struct RateOrType1Choice {
887    #[serde(flatten)]
888    pub value: RateOrType1ChoiceEnum,
889}
890#[derive(
891    Debug,
892    Default,
893    Clone,
894    PartialEq,
895    ::serde::Serialize,
896    ::serde::Deserialize,
897    ::derive_builder::Builder,
898    ::validator::Validate,
899)]
900pub struct RateOrName4ChoiceEnum {
901    #[serde(rename = "Rate", skip_serializing_if = "Option::is_none")]
902    pub rate: Option<PercentageRate>,
903    #[serde(rename = "RateIndxDtls", skip_serializing_if = "Option::is_none")]
904    pub rate_indx_dtls: Option<RateTypeAndLookback2>,
905}
906#[derive(
907    Debug,
908    Default,
909    Clone,
910    PartialEq,
911    ::serde::Serialize,
912    ::serde::Deserialize,
913    ::derive_builder::Builder,
914    ::validator::Validate,
915)]
916pub struct RateOrName4Choice {
917    #[serde(flatten)]
918    pub value: RateOrName4ChoiceEnum,
919}
920#[derive(
921    Debug,
922    Default,
923    Clone,
924    PartialEq,
925    ::serde::Serialize,
926    ::serde::Deserialize,
927    ::derive_builder::Builder,
928    ::validator::Validate,
929)]
930pub struct PartyIdentification149 {
931    #[serde(rename = "Id")]
932    pub id: PartyIdentification134Choice,
933    #[serde(rename = "LEI", skip_serializing_if = "Option::is_none")]
934    pub lei: Option<LeiIdentifier>,
935}
936#[derive(
937    Debug,
938    Default,
939    Clone,
940    PartialEq,
941    ::serde::Serialize,
942    ::serde::Deserialize,
943    ::derive_builder::Builder,
944    ::validator::Validate,
945)]
946pub struct BenchmarkCurveName13ChoiceEnum {
947    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
948    pub cd: Option<BenchmarkCurveName7Code>,
949    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
950    pub prtry: Option<GenericIdentification1>,
951}
952#[derive(
953    Debug,
954    Default,
955    Clone,
956    PartialEq,
957    ::serde::Serialize,
958    ::serde::Deserialize,
959    ::derive_builder::Builder,
960    ::validator::Validate,
961)]
962pub struct BenchmarkCurveName13Choice {
963    #[serde(flatten)]
964    pub value: BenchmarkCurveName13ChoiceEnum,
965}
966#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
967pub enum ResponseStatus2Code {
968    #[serde(rename = "CONF")]
969    Conf,
970    #[serde(rename = "DKNY")]
971    Dkny,
972    #[default]
973    Unknown,
974}
975#[derive(
976    Debug,
977    Default,
978    Clone,
979    PartialEq,
980    ::serde::Serialize,
981    ::serde::Deserialize,
982    ::derive_builder::Builder,
983    ::validator::Validate,
984)]
985pub struct MarketType8ChoiceEnum {
986    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
987    pub prtry: Option<GenericIdentification30>,
988    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
989    pub cd: Option<MarketType2Code>,
990}
991#[derive(
992    Debug,
993    Default,
994    Clone,
995    PartialEq,
996    ::serde::Serialize,
997    ::serde::Deserialize,
998    ::derive_builder::Builder,
999    ::validator::Validate,
1000)]
1001pub struct MarketType8Choice {
1002    #[serde(flatten)]
1003    pub value: MarketType8ChoiceEnum,
1004}
1005#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1006pub enum InterestRateIndexTenor2Code {
1007    #[serde(rename = "INDA")]
1008    Inda,
1009    #[serde(rename = "MNTH")]
1010    Mnth,
1011    #[serde(rename = "YEAR")]
1012    Year,
1013    #[serde(rename = "TOMN")]
1014    Tomn,
1015    #[serde(rename = "QUTR")]
1016    Qutr,
1017    #[serde(rename = "FOMN")]
1018    Fomn,
1019    #[serde(rename = "SEMI")]
1020    Semi,
1021    #[serde(rename = "OVNG")]
1022    Ovng,
1023    #[serde(rename = "WEEK")]
1024    Week,
1025    #[serde(rename = "TOWK")]
1026    Towk,
1027    #[default]
1028    Unknown,
1029}
1030#[derive(
1031    Debug,
1032    Default,
1033    Clone,
1034    PartialEq,
1035    ::serde::Serialize,
1036    ::serde::Deserialize,
1037    ::derive_builder::Builder,
1038    ::validator::Validate,
1039)]
1040pub struct FrequencyRateFixing1ChoiceEnum {
1041    #[serde(rename = "NbOfDays", skip_serializing_if = "Option::is_none")]
1042    pub nb_of_days: Option<Max3NumericText>,
1043    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1044    pub cd: Option<FrequencyRateFixing1Code>,
1045}
1046#[derive(
1047    Debug,
1048    Default,
1049    Clone,
1050    PartialEq,
1051    ::serde::Serialize,
1052    ::serde::Deserialize,
1053    ::derive_builder::Builder,
1054    ::validator::Validate,
1055)]
1056pub struct FrequencyRateFixing1Choice {
1057    #[serde(flatten)]
1058    pub value: FrequencyRateFixing1ChoiceEnum,
1059}
1060#[derive(
1061    Debug,
1062    Default,
1063    Clone,
1064    PartialEq,
1065    ::serde::Serialize,
1066    ::serde::Deserialize,
1067    ::derive_builder::Builder,
1068    ::validator::Validate,
1069)]
1070pub struct MicIdentifier {
1071    #[validate(regex = "MIC_IDENTIFIER_REGEX")]
1072    #[serde(rename = "$text")]
1073    pub value: String,
1074}
1075#[derive(
1076    Debug,
1077    Default,
1078    Clone,
1079    PartialEq,
1080    ::serde::Serialize,
1081    ::serde::Deserialize,
1082    ::derive_builder::Builder,
1083    ::validator::Validate,
1084)]
1085pub struct GenericIdentification178 {
1086    #[validate]
1087    #[serde(rename = "Id")]
1088    pub id: Max35Text,
1089    #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
1090    pub issr: Option<Max35Text>,
1091}
1092#[derive(
1093    Debug,
1094    Default,
1095    Clone,
1096    PartialEq,
1097    ::serde::Serialize,
1098    ::serde::Deserialize,
1099    ::derive_builder::Builder,
1100    ::validator::Validate,
1101)]
1102pub struct Exact4AlphaNumericText {
1103    #[validate(regex = "EXACT_4_ALPHA_NUMERIC_TEXT_REGEX")]
1104    #[serde(rename = "$text")]
1105    pub value: String,
1106}
1107#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1108pub enum BenchmarkCurveName7Code {
1109    #[serde(rename = "BBSW")]
1110    Bbsw,
1111    #[serde(rename = "BUBO")]
1112    Bubo,
1113    #[serde(rename = "BCOL")]
1114    Bcol,
1115    #[serde(rename = "CDOR")]
1116    Cdor,
1117    #[serde(rename = "CIBO")]
1118    Cibo,
1119    #[serde(rename = "CORA")]
1120    Cora,
1121    #[serde(rename = "CZNA")]
1122    Czna,
1123    #[serde(rename = "EONA")]
1124    Eona,
1125    #[serde(rename = "EONS")]
1126    Eons,
1127    #[serde(rename = "ESTR")]
1128    Estr,
1129    #[serde(rename = "EURI")]
1130    Euri,
1131    #[serde(rename = "EUUS")]
1132    Euus,
1133    #[serde(rename = "EUCH")]
1134    Euch,
1135    #[serde(rename = "EFFR")]
1136    Effr,
1137    #[serde(rename = "FUSW")]
1138    Fusw,
1139    #[serde(rename = "GCFR")]
1140    Gcfr,
1141    #[serde(rename = "HKIO")]
1142    Hkio,
1143    #[serde(rename = "ISDA")]
1144    Isda,
1145    #[serde(rename = "ETIO")]
1146    Etio,
1147    #[serde(rename = "JIBA")]
1148    Jiba,
1149    #[serde(rename = "LIBI")]
1150    Libi,
1151    #[serde(rename = "LIBO")]
1152    Libo,
1153    #[serde(rename = "MOSP")]
1154    Mosp,
1155    #[serde(rename = "MAAA")]
1156    Maaa,
1157    #[serde(rename = "BJUO")]
1158    Bjuo,
1159    #[serde(rename = "NIBO")]
1160    Nibo,
1161    #[serde(rename = "OBFR")]
1162    Obfr,
1163    #[serde(rename = "PFAN")]
1164    Pfan,
1165    #[serde(rename = "PRBO")]
1166    Prbo,
1167    #[serde(rename = "RCTR")]
1168    Rctr,
1169    #[serde(rename = "SOFR")]
1170    Sofr,
1171    #[serde(rename = "SONA")]
1172    Sona,
1173    #[serde(rename = "STBO")]
1174    Stbo,
1175    #[serde(rename = "SWAP")]
1176    Swap,
1177    #[serde(rename = "TLBO")]
1178    Tlbo,
1179    #[serde(rename = "TIBO")]
1180    Tibo,
1181    #[serde(rename = "TOAR")]
1182    Toar,
1183    #[serde(rename = "TREA")]
1184    Trea,
1185    #[serde(rename = "WIBO")]
1186    Wibo,
1187    #[default]
1188    Unknown,
1189}
1190#[derive(
1191    Debug,
1192    Default,
1193    Clone,
1194    PartialEq,
1195    ::serde::Serialize,
1196    ::serde::Deserialize,
1197    ::derive_builder::Builder,
1198    ::validator::Validate,
1199)]
1200pub struct IsoDateTime {
1201    #[serde(rename = "$text")]
1202    pub value: ::chrono::DateTime<::chrono::Utc>,
1203}
1204#[derive(
1205    Debug,
1206    Default,
1207    Clone,
1208    PartialEq,
1209    ::serde::Serialize,
1210    ::serde::Deserialize,
1211    ::derive_builder::Builder,
1212    ::validator::Validate,
1213)]
1214pub struct Max350Text {
1215    #[validate(length(min = 1, max = 350,))]
1216    #[serde(rename = "$text")]
1217    pub value: String,
1218}
1219#[derive(
1220    Debug,
1221    Default,
1222    Clone,
1223    PartialEq,
1224    ::serde::Serialize,
1225    ::serde::Deserialize,
1226    ::derive_builder::Builder,
1227    ::validator::Validate,
1228)]
1229pub struct ExternalFinancialInstrumentIdentificationType1Code {
1230    #[validate(length(min = 1, max = 4,))]
1231    #[serde(rename = "$text")]
1232    pub value: String,
1233}
1234#[derive(
1235    Debug,
1236    Default,
1237    Clone,
1238    PartialEq,
1239    ::serde::Serialize,
1240    ::serde::Deserialize,
1241    ::derive_builder::Builder,
1242    ::validator::Validate,
1243)]
1244pub struct Max35Text {
1245    #[validate(length(min = 1, max = 35,))]
1246    #[serde(rename = "$text")]
1247    pub value: String,
1248}
1249#[derive(
1250    Debug,
1251    Default,
1252    Clone,
1253    PartialEq,
1254    ::serde::Serialize,
1255    ::serde::Deserialize,
1256    ::derive_builder::Builder,
1257    ::validator::Validate,
1258)]
1259pub struct PercentageRate {
1260    #[serde(rename = "$text")]
1261    pub value: f64,
1262}
1263#[derive(
1264    Debug,
1265    Default,
1266    Clone,
1267    PartialEq,
1268    ::serde::Serialize,
1269    ::serde::Deserialize,
1270    ::derive_builder::Builder,
1271    ::validator::Validate,
1272)]
1273pub struct Max52Text {
1274    #[validate(length(min = 1, max = 52,))]
1275    #[serde(rename = "$text")]
1276    pub value: String,
1277}
1278#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1279pub enum MarketType2Code {
1280    #[serde(rename = "PRIM")]
1281    Prim,
1282    #[serde(rename = "SECM")]
1283    Secm,
1284    #[serde(rename = "OTCO")]
1285    Otco,
1286    #[serde(rename = "VARI")]
1287    Vari,
1288    #[serde(rename = "EXCH")]
1289    Exch,
1290    #[default]
1291    Unknown,
1292}
1293#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1294pub enum OptionType1Code {
1295    #[serde(rename = "CALL")]
1296    Call,
1297    #[serde(rename = "PUTO")]
1298    Puto,
1299    #[default]
1300    Unknown,
1301}
1302#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1303pub enum CollateralTransactionType1Code {
1304    #[serde(rename = "AADJ")]
1305    Aadj,
1306    #[serde(rename = "CDTA")]
1307    Cdta,
1308    #[serde(rename = "CADJ")]
1309    Cadj,
1310    #[serde(rename = "DADJ")]
1311    Dadj,
1312    #[serde(rename = "DBVT")]
1313    Dbvt,
1314    #[serde(rename = "INIT")]
1315    Init,
1316    #[serde(rename = "MADJ")]
1317    Madj,
1318    #[serde(rename = "PADJ")]
1319    Padj,
1320    #[serde(rename = "RATA")]
1321    Rata,
1322    #[serde(rename = "TERM")]
1323    Term,
1324    #[default]
1325    Unknown,
1326}
1327#[derive(
1328    Debug,
1329    Default,
1330    Clone,
1331    PartialEq,
1332    ::serde::Serialize,
1333    ::serde::Deserialize,
1334    ::derive_builder::Builder,
1335    ::validator::Validate,
1336)]
1337pub struct ImpliedCurrencyAndAmount {
1338    #[validate(range(min = 0,))]
1339    #[serde(rename = "$text")]
1340    pub value: f64,
1341}
1342#[derive(
1343    Debug,
1344    Default,
1345    Clone,
1346    PartialEq,
1347    ::serde::Serialize,
1348    ::serde::Deserialize,
1349    ::derive_builder::Builder,
1350    ::validator::Validate,
1351)]
1352pub struct Period2 {
1353    #[validate]
1354    #[serde(rename = "FrDt")]
1355    pub fr_dt: IsoDate,
1356    #[validate]
1357    #[serde(rename = "ToDt")]
1358    pub to_dt: IsoDate,
1359}
1360#[derive(
1361    Debug,
1362    Default,
1363    Clone,
1364    PartialEq,
1365    ::serde::Serialize,
1366    ::serde::Deserialize,
1367    ::derive_builder::Builder,
1368    ::validator::Validate,
1369)]
1370pub struct Max70Text {
1371    #[validate(length(min = 1, max = 70,))]
1372    #[serde(rename = "$text")]
1373    pub value: String,
1374}
1375#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1376pub enum CollateralEntryType1Code {
1377    #[serde(rename = "DELI")]
1378    Deli,
1379    #[serde(rename = "RECE")]
1380    Rece,
1381    #[default]
1382    Unknown,
1383}
1384#[derive(
1385    Debug,
1386    Default,
1387    Clone,
1388    PartialEq,
1389    ::serde::Serialize,
1390    ::serde::Deserialize,
1391    ::derive_builder::Builder,
1392    ::validator::Validate,
1393)]
1394pub struct AlternatePartyIdentification7 {
1395    #[serde(rename = "IdTp")]
1396    pub id_tp: IdentificationType42Choice,
1397    #[serde(rename = "Ctry")]
1398    pub ctry: CountryCode,
1399    #[validate]
1400    #[serde(rename = "AltrnId")]
1401    pub altrn_id: Max35Text,
1402}
1403#[derive(
1404    Debug,
1405    Default,
1406    Clone,
1407    PartialEq,
1408    ::serde::Serialize,
1409    ::serde::Deserialize,
1410    ::derive_builder::Builder,
1411    ::validator::Validate,
1412)]
1413pub struct CollateralParties10 {
1414    #[validate]
1415    #[serde(rename = "PtyA")]
1416    pub pty_a: PartyIdentificationAndAccount202,
1417    #[serde(rename = "ClntPtyA", skip_serializing_if = "Option::is_none")]
1418    pub clnt_pty_a: Option<PartyIdentificationAndAccount202>,
1419    #[validate]
1420    #[serde(rename = "PtyB")]
1421    pub pty_b: PartyIdentificationAndAccount203,
1422    #[serde(rename = "ClntPtyB", skip_serializing_if = "Option::is_none")]
1423    pub clnt_pty_b: Option<PartyIdentificationAndAccount203>,
1424    #[serde(rename = "TrptyAgt", skip_serializing_if = "Option::is_none")]
1425    pub trpty_agt: Option<PartyIdentification136>,
1426    #[serde(rename = "CollAcct", skip_serializing_if = "Option::is_none")]
1427    pub coll_acct: Option<SecuritiesAccount19>,
1428}
1429#[derive(
1430    Debug,
1431    Default,
1432    Clone,
1433    PartialEq,
1434    ::serde::Serialize,
1435    ::serde::Deserialize,
1436    ::derive_builder::Builder,
1437    ::validator::Validate,
1438)]
1439pub struct PlaceOfTradeIdentification1 {
1440    #[serde(rename = "MktTpAndId", skip_serializing_if = "Option::is_none")]
1441    pub mkt_tp_and_id: Option<MarketIdentification84>,
1442    #[serde(rename = "LEI", skip_serializing_if = "Option::is_none")]
1443    pub lei: Option<LeiIdentifier>,
1444}
1445#[derive(
1446    Debug,
1447    Default,
1448    Clone,
1449    PartialEq,
1450    ::serde::Serialize,
1451    ::serde::Deserialize,
1452    ::derive_builder::Builder,
1453    ::validator::Validate,
1454)]
1455pub struct FinancialInstrumentQuantity33ChoiceEnum {
1456    #[serde(rename = "DgtlTknUnit", skip_serializing_if = "Option::is_none")]
1457    pub dgtl_tkn_unit: Option<Max30DecimalNumber>,
1458    #[serde(rename = "FaceAmt", skip_serializing_if = "Option::is_none")]
1459    pub face_amt: Option<ImpliedCurrencyAndAmount>,
1460    #[serde(rename = "AmtsdVal", skip_serializing_if = "Option::is_none")]
1461    pub amtsd_val: Option<ImpliedCurrencyAndAmount>,
1462    #[serde(rename = "Unit", skip_serializing_if = "Option::is_none")]
1463    pub unit: Option<DecimalNumber>,
1464}
1465#[derive(
1466    Debug,
1467    Default,
1468    Clone,
1469    PartialEq,
1470    ::serde::Serialize,
1471    ::serde::Deserialize,
1472    ::derive_builder::Builder,
1473    ::validator::Validate,
1474)]
1475pub struct FinancialInstrumentQuantity33Choice {
1476    #[serde(flatten)]
1477    pub value: FinancialInstrumentQuantity33ChoiceEnum,
1478}
1479#[derive(
1480    Debug,
1481    Default,
1482    Clone,
1483    PartialEq,
1484    ::serde::Serialize,
1485    ::serde::Deserialize,
1486    ::derive_builder::Builder,
1487    ::validator::Validate,
1488)]
1489pub struct CountryCode {
1490    #[validate(regex = "COUNTRY_CODE_REGEX")]
1491    #[serde(rename = "$text")]
1492    pub value: String,
1493}
1494#[derive(
1495    Debug,
1496    Default,
1497    Clone,
1498    PartialEq,
1499    ::serde::Serialize,
1500    ::serde::Deserialize,
1501    ::derive_builder::Builder,
1502    ::validator::Validate,
1503)]
1504pub struct ClosingDate4ChoiceEnum {
1505    #[serde(rename = "Dt", skip_serializing_if = "Option::is_none")]
1506    pub dt: Option<DateAndDateTime2Choice>,
1507    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1508    pub cd: Option<Date3Choice>,
1509}
1510#[derive(
1511    Debug,
1512    Default,
1513    Clone,
1514    PartialEq,
1515    ::serde::Serialize,
1516    ::serde::Deserialize,
1517    ::derive_builder::Builder,
1518    ::validator::Validate,
1519)]
1520pub struct ClosingDate4Choice {
1521    #[serde(flatten)]
1522    pub value: ClosingDate4ChoiceEnum,
1523}
1524#[derive(
1525    Debug,
1526    Default,
1527    Clone,
1528    PartialEq,
1529    ::serde::Serialize,
1530    ::serde::Deserialize,
1531    ::derive_builder::Builder,
1532    ::validator::Validate,
1533)]
1534pub struct CollateralTransactionAmountBreakdown2 {
1535    #[validate]
1536    #[serde(rename = "LotNb")]
1537    pub lot_nb: GenericIdentification178,
1538    #[serde(rename = "TxAmt", skip_serializing_if = "Option::is_none")]
1539    pub tx_amt: Option<ActiveOrHistoricCurrencyAndAmount>,
1540    #[serde(rename = "Prd", skip_serializing_if = "Option::is_none")]
1541    pub prd: Option<Period4Choice>,
1542}
1543#[derive(
1544    Debug,
1545    Default,
1546    Clone,
1547    PartialEq,
1548    ::serde::Serialize,
1549    ::serde::Deserialize,
1550    ::derive_builder::Builder,
1551    ::validator::Validate,
1552)]
1553pub struct Period4ChoiceEnum {
1554    #[serde(rename = "FrDt", skip_serializing_if = "Option::is_none")]
1555    pub fr_dt: Option<IsoDate>,
1556    #[serde(rename = "ToDt", skip_serializing_if = "Option::is_none")]
1557    pub to_dt: Option<IsoDate>,
1558    #[serde(rename = "FrDtToDt", skip_serializing_if = "Option::is_none")]
1559    pub fr_dt_to_dt: Option<Period2>,
1560    #[serde(rename = "Dt", skip_serializing_if = "Option::is_none")]
1561    pub dt: Option<IsoDate>,
1562}
1563#[derive(
1564    Debug,
1565    Default,
1566    Clone,
1567    PartialEq,
1568    ::serde::Serialize,
1569    ::serde::Deserialize,
1570    ::derive_builder::Builder,
1571    ::validator::Validate,
1572)]
1573pub struct Period4Choice {
1574    #[serde(flatten)]
1575    pub value: Period4ChoiceEnum,
1576}
1577#[derive(
1578    Debug,
1579    Default,
1580    Clone,
1581    PartialEq,
1582    ::serde::Serialize,
1583    ::serde::Deserialize,
1584    ::derive_builder::Builder,
1585    ::validator::Validate,
1586)]
1587pub struct CollateralDate2 {
1588    #[serde(rename = "TradDt", skip_serializing_if = "Option::is_none")]
1589    pub trad_dt: Option<IsoDate>,
1590    #[serde(rename = "ReqdExctnDt", skip_serializing_if = "Option::is_none")]
1591    pub reqd_exctn_dt: Option<DateAndDateTime2Choice>,
1592    #[serde(rename = "SttlmDt", skip_serializing_if = "Option::is_none")]
1593    pub sttlm_dt: Option<IsoDate>,
1594}
1595#[derive(
1596    Debug,
1597    Default,
1598    Clone,
1599    PartialEq,
1600    ::serde::Serialize,
1601    ::serde::Deserialize,
1602    ::derive_builder::Builder,
1603    ::validator::Validate,
1604)]
1605pub struct Max34Text {
1606    #[validate(length(min = 1, max = 34,))]
1607    #[serde(rename = "$text")]
1608    pub value: String,
1609}
1610#[derive(
1611    Debug,
1612    Default,
1613    Clone,
1614    PartialEq,
1615    ::serde::Serialize,
1616    ::serde::Deserialize,
1617    ::derive_builder::Builder,
1618    ::validator::Validate,
1619)]
1620pub struct ActiveCurrencyCode {
1621    #[validate(regex = "ACTIVE_CURRENCY_CODE_REGEX")]
1622    #[serde(rename = "$text")]
1623    pub value: String,
1624}
1625#[derive(
1626    Debug,
1627    Default,
1628    Clone,
1629    PartialEq,
1630    ::serde::Serialize,
1631    ::serde::Deserialize,
1632    ::derive_builder::Builder,
1633    ::validator::Validate,
1634)]
1635pub struct SecuritiesAccount19 {
1636    #[validate]
1637    #[serde(rename = "Id")]
1638    pub id: Max35Text,
1639    #[serde(rename = "Tp", skip_serializing_if = "Option::is_none")]
1640    pub tp: Option<GenericIdentification30>,
1641    #[serde(rename = "Nm", skip_serializing_if = "Option::is_none")]
1642    pub nm: Option<Max70Text>,
1643}
1644#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1645pub enum CreditDebitCode {
1646    #[serde(rename = "CRDT")]
1647    Crdt,
1648    #[serde(rename = "DBIT")]
1649    Dbit,
1650    #[default]
1651    Unknown,
1652}
1653#[derive(
1654    Debug,
1655    Default,
1656    Clone,
1657    PartialEq,
1658    ::serde::Serialize,
1659    ::serde::Deserialize,
1660    ::derive_builder::Builder,
1661    ::validator::Validate,
1662)]
1663pub struct Max16Text {
1664    #[validate(length(min = 1, max = 16,))]
1665    #[serde(rename = "$text")]
1666    pub value: String,
1667}
1668#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1669pub enum DateType2Code {
1670    #[serde(rename = "OPEN")]
1671    Open,
1672    #[default]
1673    Unknown,
1674}
1675#[derive(
1676    Debug,
1677    Default,
1678    Clone,
1679    PartialEq,
1680    ::serde::Serialize,
1681    ::serde::Deserialize,
1682    ::derive_builder::Builder,
1683    ::validator::Validate,
1684)]
1685pub struct Iban2007Identifier {
1686    #[validate(regex = "IBAN_2007_IDENTIFIER_REGEX")]
1687    #[serde(rename = "$text")]
1688    pub value: String,
1689}
1690#[derive(
1691    Debug,
1692    Default,
1693    Clone,
1694    PartialEq,
1695    ::serde::Serialize,
1696    ::serde::Deserialize,
1697    ::derive_builder::Builder,
1698    ::validator::Validate,
1699)]
1700pub struct IdentificationType42ChoiceEnum {
1701    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
1702    pub cd: Option<TypeOfIdentification1Code>,
1703    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
1704    pub prtry: Option<GenericIdentification30>,
1705}
1706#[derive(
1707    Debug,
1708    Default,
1709    Clone,
1710    PartialEq,
1711    ::serde::Serialize,
1712    ::serde::Deserialize,
1713    ::derive_builder::Builder,
1714    ::validator::Validate,
1715)]
1716pub struct IdentificationType42Choice {
1717    #[serde(flatten)]
1718    pub value: IdentificationType42ChoiceEnum,
1719}
1720#[derive(
1721    Debug,
1722    Default,
1723    Clone,
1724    PartialEq,
1725    ::serde::Serialize,
1726    ::serde::Deserialize,
1727    ::derive_builder::Builder,
1728    ::validator::Validate,
1729)]
1730pub struct Max3NumericText {
1731    #[validate(regex = "MAX_3_NUMERIC_TEXT_REGEX")]
1732    #[serde(rename = "$text")]
1733    pub value: String,
1734}
1735#[derive(
1736    Debug,
1737    Default,
1738    Clone,
1739    PartialEq,
1740    ::serde::Serialize,
1741    ::serde::Deserialize,
1742    ::derive_builder::Builder,
1743    ::validator::Validate,
1744)]
1745pub struct OtherIdentification1 {
1746    #[validate]
1747    #[serde(rename = "Id")]
1748    pub id: Max35Text,
1749    #[serde(rename = "Sfx", skip_serializing_if = "Option::is_none")]
1750    pub sfx: Option<Max16Text>,
1751    #[serde(rename = "Tp")]
1752    pub tp: IdentificationSource3Choice,
1753}
1754#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1755pub enum RepoTerminationOption1Code {
1756    #[serde(rename = "EGRN")]
1757    Egrn,
1758    #[serde(rename = "ETSB")]
1759    Etsb,
1760    #[default]
1761    Unknown,
1762}
1763#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1764pub enum TradingCapacity7Code {
1765    #[serde(rename = "AGEN")]
1766    Agen,
1767    #[serde(rename = "PRIN")]
1768    Prin,
1769    #[default]
1770    Unknown,
1771}
1772#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1773pub enum CollateralRole1Code {
1774    #[serde(rename = "GIVE")]
1775    Give,
1776    #[serde(rename = "TAKE")]
1777    Take,
1778    #[default]
1779    Unknown,
1780}
1781#[derive(
1782    Debug,
1783    Default,
1784    Clone,
1785    PartialEq,
1786    ::serde::Serialize,
1787    ::serde::Deserialize,
1788    ::derive_builder::Builder,
1789    ::validator::Validate,
1790)]
1791pub struct CashAccountIdentification5ChoiceEnum {
1792    #[serde(rename = "IBAN", skip_serializing_if = "Option::is_none")]
1793    pub iban: Option<Iban2007Identifier>,
1794    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
1795    pub prtry: Option<Max34Text>,
1796}
1797#[derive(
1798    Debug,
1799    Default,
1800    Clone,
1801    PartialEq,
1802    ::serde::Serialize,
1803    ::serde::Deserialize,
1804    ::derive_builder::Builder,
1805    ::validator::Validate,
1806)]
1807pub struct CashAccountIdentification5Choice {
1808    #[serde(flatten)]
1809    pub value: CashAccountIdentification5ChoiceEnum,
1810}
1811#[derive(
1812    Debug,
1813    Default,
1814    Clone,
1815    PartialEq,
1816    ::serde::Serialize,
1817    ::serde::Deserialize,
1818    ::derive_builder::Builder,
1819    ::validator::Validate,
1820)]
1821pub struct Linkages58 {
1822    #[serde(rename = "MsgNb", skip_serializing_if = "Option::is_none")]
1823    pub msg_nb: Option<DocumentNumber5Choice>,
1824    #[serde(rename = "Refs")]
1825    pub refs: References70Choice,
1826}
1827#[derive(
1828    Debug,
1829    Default,
1830    Clone,
1831    PartialEq,
1832    ::serde::Serialize,
1833    ::serde::Deserialize,
1834    ::derive_builder::Builder,
1835    ::validator::Validate,
1836)]
1837pub struct Max140Text {
1838    #[validate(length(min = 1, max = 140,))]
1839    #[serde(rename = "$text")]
1840    pub value: String,
1841}
1842#[derive(
1843    Debug,
1844    Default,
1845    Clone,
1846    PartialEq,
1847    ::serde::Serialize,
1848    ::serde::Deserialize,
1849    ::derive_builder::Builder,
1850    ::validator::Validate,
1851)]
1852pub struct CrystallisationDay1 {
1853    #[validate]
1854    #[serde(rename = "Day")]
1855    pub day: YesNoIndicator,
1856    #[serde(rename = "Prd", skip_serializing_if = "Option::is_none")]
1857    pub prd: Option<Max3NumericText>,
1858}
1859#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1860pub enum AddressType2Code {
1861    #[serde(rename = "ADDR")]
1862    Addr,
1863    #[serde(rename = "PBOX")]
1864    Pbox,
1865    #[serde(rename = "HOME")]
1866    Home,
1867    #[serde(rename = "BIZZ")]
1868    Bizz,
1869    #[serde(rename = "MLTO")]
1870    Mlto,
1871    #[serde(rename = "DLVY")]
1872    Dlvy,
1873    #[default]
1874    Unknown,
1875}
1876#[derive(
1877    Debug,
1878    Default,
1879    Clone,
1880    PartialEq,
1881    ::serde::Serialize,
1882    ::serde::Deserialize,
1883    ::derive_builder::Builder,
1884    ::validator::Validate,
1885)]
1886pub struct GenericIdentification36 {
1887    #[validate]
1888    #[serde(rename = "Id")]
1889    pub id: Max35Text,
1890    #[validate]
1891    #[serde(rename = "Issr")]
1892    pub issr: Max35Text,
1893    #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
1894    pub schme_nm: Option<Max35Text>,
1895}
1896#[derive(
1897    Debug,
1898    Default,
1899    Clone,
1900    PartialEq,
1901    ::serde::Serialize,
1902    ::serde::Deserialize,
1903    ::derive_builder::Builder,
1904    ::validator::Validate,
1905)]
1906pub struct LeiIdentifier {
1907    #[validate(regex = "LEI_IDENTIFIER_REGEX")]
1908    #[serde(rename = "$text")]
1909    pub value: String,
1910}
1911#[derive(
1912    Debug,
1913    Default,
1914    Clone,
1915    PartialEq,
1916    ::serde::Serialize,
1917    ::serde::Deserialize,
1918    ::derive_builder::Builder,
1919    ::validator::Validate,
1920)]
1921pub struct GenericIdentification1 {
1922    #[validate]
1923    #[serde(rename = "Id")]
1924    pub id: Max35Text,
1925    #[serde(rename = "SchmeNm", skip_serializing_if = "Option::is_none")]
1926    pub schme_nm: Option<Max35Text>,
1927    #[serde(rename = "Issr", skip_serializing_if = "Option::is_none")]
1928    pub issr: Option<Max35Text>,
1929}
1930#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
1931pub enum DeliveryReceiptType2Code {
1932    #[serde(rename = "FREE")]
1933    Free,
1934    #[serde(rename = "APMT")]
1935    Apmt,
1936    #[default]
1937    Unknown,
1938}
1939#[derive(
1940    Debug,
1941    Default,
1942    Clone,
1943    PartialEq,
1944    ::serde::Serialize,
1945    ::serde::Deserialize,
1946    ::derive_builder::Builder,
1947    ::validator::Validate,
1948)]
1949pub struct SupplementaryData1<
1950    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
1951> {
1952    #[serde(rename = "PlcAndNm", skip_serializing_if = "Option::is_none")]
1953    pub plc_and_nm: Option<Max350Text>,
1954    #[validate]
1955    #[serde(rename = "Envlp")]
1956    pub envlp: SupplementaryDataEnvelope1<A>,
1957}
1958#[derive(
1959    Debug,
1960    Default,
1961    Clone,
1962    PartialEq,
1963    ::serde::Serialize,
1964    ::serde::Deserialize,
1965    ::derive_builder::Builder,
1966    ::validator::Validate,
1967)]
1968pub struct ActiveOrHistoricCurrencyAndAmountSimpleType {
1969    #[validate(range(min = 0,))]
1970    #[serde(rename = "$text")]
1971    pub value: f64,
1972}
1973#[derive(
1974    Debug,
1975    Default,
1976    Clone,
1977    PartialEq,
1978    ::serde::Serialize,
1979    ::serde::Deserialize,
1980    ::derive_builder::Builder,
1981    ::validator::Validate,
1982)]
1983pub struct SecurityIdentification19 {
1984    #[serde(rename = "ISIN", skip_serializing_if = "Option::is_none")]
1985    pub isin: Option<IsinOct2015Identifier>,
1986    #[validate(length(min = 0,))]
1987    #[serde(rename = "OthrId", default)]
1988    pub othr_id: Vec<OtherIdentification1>,
1989    #[serde(rename = "Desc", skip_serializing_if = "Option::is_none")]
1990    pub desc: Option<Max140Text>,
1991}
1992#[derive(
1993    Debug,
1994    Default,
1995    Clone,
1996    PartialEq,
1997    ::serde::Serialize,
1998    ::serde::Deserialize,
1999    ::derive_builder::Builder,
2000    ::validator::Validate,
2001)]
2002pub struct ExposureType23ChoiceEnum {
2003    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
2004    pub prtry: Option<GenericIdentification30>,
2005    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
2006    pub cd: Option<ExposureType14Code>,
2007}
2008#[derive(
2009    Debug,
2010    Default,
2011    Clone,
2012    PartialEq,
2013    ::serde::Serialize,
2014    ::serde::Deserialize,
2015    ::derive_builder::Builder,
2016    ::validator::Validate,
2017)]
2018pub struct ExposureType23Choice {
2019    #[serde(flatten)]
2020    pub value: ExposureType23ChoiceEnum,
2021}
2022#[derive(
2023    Debug,
2024    Default,
2025    Clone,
2026    PartialEq,
2027    ::serde::Serialize,
2028    ::serde::Deserialize,
2029    ::derive_builder::Builder,
2030    ::validator::Validate,
2031)]
2032pub struct YesNoIndicator {
2033    #[serde(rename = "$text")]
2034    pub value: bool,
2035}
2036#[derive(
2037    Debug,
2038    Default,
2039    Clone,
2040    PartialEq,
2041    ::serde::Serialize,
2042    ::serde::Deserialize,
2043    ::derive_builder::Builder,
2044    ::validator::Validate,
2045)]
2046pub struct DateAndDateTime2ChoiceEnum {
2047    #[serde(rename = "Dt", skip_serializing_if = "Option::is_none")]
2048    pub dt: Option<IsoDate>,
2049    #[serde(rename = "DtTm", skip_serializing_if = "Option::is_none")]
2050    pub dt_tm: Option<IsoDateTime>,
2051}
2052#[derive(
2053    Debug,
2054    Default,
2055    Clone,
2056    PartialEq,
2057    ::serde::Serialize,
2058    ::serde::Deserialize,
2059    ::derive_builder::Builder,
2060    ::validator::Validate,
2061)]
2062pub struct DateAndDateTime2Choice {
2063    #[serde(flatten)]
2064    pub value: DateAndDateTime2ChoiceEnum,
2065}
2066#[derive(
2067    Debug,
2068    Default,
2069    Clone,
2070    PartialEq,
2071    ::serde::Serialize,
2072    ::serde::Deserialize,
2073    ::derive_builder::Builder,
2074    ::validator::Validate,
2075)]
2076pub struct Iso20022MessageIdentificationText {
2077    #[validate(regex = "ISO_20022_MESSAGE_IDENTIFICATION_TEXT_REGEX")]
2078    #[serde(rename = "$text")]
2079    pub value: String,
2080}
2081#[derive(
2082    Debug,
2083    Default,
2084    Clone,
2085    PartialEq,
2086    ::serde::Serialize,
2087    ::serde::Deserialize,
2088    ::derive_builder::Builder,
2089    ::validator::Validate,
2090)]
2091pub struct TradingPartyCapacity5ChoiceEnum {
2092    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
2093    pub prtry: Option<GenericIdentification30>,
2094    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
2095    pub cd: Option<TradingCapacity7Code>,
2096}
2097#[derive(
2098    Debug,
2099    Default,
2100    Clone,
2101    PartialEq,
2102    ::serde::Serialize,
2103    ::serde::Deserialize,
2104    ::derive_builder::Builder,
2105    ::validator::Validate,
2106)]
2107pub struct TradingPartyCapacity5Choice {
2108    #[serde(flatten)]
2109    pub value: TradingPartyCapacity5ChoiceEnum,
2110}
2111#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
2112pub enum TypeOfIdentification1Code {
2113    #[serde(rename = "ARNU")]
2114    Arnu,
2115    #[serde(rename = "CCPT")]
2116    Ccpt,
2117    #[serde(rename = "CHTY")]
2118    Chty,
2119    #[serde(rename = "CORP")]
2120    Corp,
2121    #[serde(rename = "DRLC")]
2122    Drlc,
2123    #[serde(rename = "FIIN")]
2124    Fiin,
2125    #[serde(rename = "TXID")]
2126    Txid,
2127    #[default]
2128    Unknown,
2129}
2130#[derive(
2131    Debug,
2132    Default,
2133    Clone,
2134    PartialEq,
2135    ::serde::Serialize,
2136    ::serde::Deserialize,
2137    ::derive_builder::Builder,
2138    ::validator::Validate,
2139)]
2140pub struct PartyIdentificationAndAccount202 {
2141    #[serde(rename = "Id")]
2142    pub id: PartyIdentification120Choice,
2143    #[serde(rename = "LEI", skip_serializing_if = "Option::is_none")]
2144    pub lei: Option<LeiIdentifier>,
2145    #[serde(rename = "AltrnId", skip_serializing_if = "Option::is_none")]
2146    pub altrn_id: Option<AlternatePartyIdentification7>,
2147    #[serde(rename = "SfkpgAcct", skip_serializing_if = "Option::is_none")]
2148    pub sfkpg_acct: Option<SecuritiesAccount19>,
2149    #[serde(rename = "BlckChainAdrOrWllt", skip_serializing_if = "Option::is_none")]
2150    pub blck_chain_adr_or_wllt: Option<BlockChainAddressWallet3>,
2151    #[serde(rename = "AcctOwnr", skip_serializing_if = "Option::is_none")]
2152    pub acct_ownr: Option<PartyIdentification136>,
2153    #[serde(rename = "PtyCpcty", skip_serializing_if = "Option::is_none")]
2154    pub pty_cpcty: Option<TradingPartyCapacity5Choice>,
2155}
2156#[derive(
2157    Debug,
2158    Default,
2159    Clone,
2160    PartialEq,
2161    ::serde::Serialize,
2162    ::serde::Deserialize,
2163    ::derive_builder::Builder,
2164    ::validator::Validate,
2165)]
2166pub struct DocumentNumber5ChoiceEnum {
2167    #[serde(rename = "LngNb", skip_serializing_if = "Option::is_none")]
2168    pub lng_nb: Option<Iso20022MessageIdentificationText>,
2169    #[serde(rename = "ShrtNb", skip_serializing_if = "Option::is_none")]
2170    pub shrt_nb: Option<Exact3NumericText>,
2171    #[serde(rename = "PrtryNb", skip_serializing_if = "Option::is_none")]
2172    pub prtry_nb: Option<GenericIdentification36>,
2173}
2174#[derive(
2175    Debug,
2176    Default,
2177    Clone,
2178    PartialEq,
2179    ::serde::Serialize,
2180    ::serde::Deserialize,
2181    ::derive_builder::Builder,
2182    ::validator::Validate,
2183)]
2184pub struct DocumentNumber5Choice {
2185    #[serde(flatten)]
2186    pub value: DocumentNumber5ChoiceEnum,
2187}
2188#[derive(
2189    Debug,
2190    Default,
2191    Clone,
2192    PartialEq,
2193    ::serde::Serialize,
2194    ::serde::Deserialize,
2195    ::derive_builder::Builder,
2196    ::validator::Validate,
2197)]
2198pub struct Date3ChoiceEnum {
2199    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
2200    pub prtry: Option<GenericIdentification30>,
2201    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
2202    pub cd: Option<DateType2Code>,
2203}
2204#[derive(
2205    Debug,
2206    Default,
2207    Clone,
2208    PartialEq,
2209    ::serde::Serialize,
2210    ::serde::Deserialize,
2211    ::derive_builder::Builder,
2212    ::validator::Validate,
2213)]
2214pub struct Date3Choice {
2215    #[serde(flatten)]
2216    pub value: Date3ChoiceEnum,
2217}
2218#[derive(
2219    Debug,
2220    Default,
2221    Clone,
2222    PartialEq,
2223    ::serde::Serialize,
2224    ::serde::Deserialize,
2225    ::derive_builder::Builder,
2226    ::validator::Validate,
2227)]
2228pub struct BaseOneRate {
2229    #[serde(rename = "$text")]
2230    pub value: f64,
2231}
2232#[derive(
2233    Debug,
2234    Default,
2235    Clone,
2236    PartialEq,
2237    ::serde::Serialize,
2238    ::serde::Deserialize,
2239    ::derive_builder::Builder,
2240    ::validator::Validate,
2241)]
2242pub struct CollateralTransactionType1ChoiceEnum {
2243    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
2244    pub prtry: Option<GenericIdentification30>,
2245    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
2246    pub cd: Option<CollateralTransactionType1Code>,
2247}
2248#[derive(
2249    Debug,
2250    Default,
2251    Clone,
2252    PartialEq,
2253    ::serde::Serialize,
2254    ::serde::Deserialize,
2255    ::derive_builder::Builder,
2256    ::validator::Validate,
2257)]
2258pub struct CollateralTransactionType1Choice {
2259    #[serde(flatten)]
2260    pub value: CollateralTransactionType1ChoiceEnum,
2261}
2262#[derive(
2263    Debug,
2264    Default,
2265    Clone,
2266    PartialEq,
2267    ::serde::Serialize,
2268    ::serde::Deserialize,
2269    ::derive_builder::Builder,
2270    ::validator::Validate,
2271)]
2272pub struct RateTypeAndLookback2 {
2273    #[serde(rename = "Tp")]
2274    pub tp: BenchmarkCurveName13Choice,
2275    #[serde(rename = "LookBckDays", skip_serializing_if = "Option::is_none")]
2276    pub look_bck_days: Option<Max3NumericText>,
2277    #[serde(rename = "CrstllstnDt", skip_serializing_if = "Option::is_none")]
2278    pub crstllstn_dt: Option<CrystallisationDay1>,
2279    #[serde(rename = "Tnr", skip_serializing_if = "Option::is_none")]
2280    pub tnr: Option<InterestRateIndexTenor2Code>,
2281    #[serde(rename = "Ccy", skip_serializing_if = "Option::is_none")]
2282    pub ccy: Option<ActiveOrHistoricCurrencyCode>,
2283}
2284#[derive(
2285    Debug,
2286    Default,
2287    Clone,
2288    PartialEq,
2289    ::serde::Serialize,
2290    ::serde::Deserialize,
2291    ::derive_builder::Builder,
2292    ::validator::Validate,
2293)]
2294pub struct SecuritiesMovement9 {
2295    #[serde(rename = "SctiesMvmntTp")]
2296    pub scties_mvmnt_tp: CollateralEntryType1Code,
2297    #[validate]
2298    #[serde(rename = "FinInstrmId")]
2299    pub fin_instrm_id: SecurityIdentification19,
2300    #[serde(rename = "Qty")]
2301    pub qty: FinancialInstrumentQuantity33Choice,
2302    #[serde(rename = "SfkpgAcct", skip_serializing_if = "Option::is_none")]
2303    pub sfkpg_acct: Option<SecuritiesAccount19>,
2304    #[serde(rename = "BlckChainAdrOrWllt", skip_serializing_if = "Option::is_none")]
2305    pub blck_chain_adr_or_wllt: Option<BlockChainAddressWallet3>,
2306    #[validate]
2307    #[serde(rename = "CollMvmnt")]
2308    pub coll_mvmnt: YesNoIndicator,
2309    #[serde(rename = "ClntSctiesMvmntId", skip_serializing_if = "Option::is_none")]
2310    pub clnt_scties_mvmnt_id: Option<Max35Text>,
2311    #[serde(
2312        rename = "TrptyAgtSvcPrvdrSctiesMvmntId",
2313        skip_serializing_if = "Option::is_none"
2314    )]
2315    pub trpty_agt_svc_prvdr_scties_mvmnt_id: Option<Max35Text>,
2316}
2317#[derive(
2318    Debug,
2319    Default,
2320    Clone,
2321    PartialEq,
2322    ::serde::Serialize,
2323    ::serde::Deserialize,
2324    ::derive_builder::Builder,
2325    ::validator::Validate,
2326)]
2327pub struct AnyBicDec2014Identifier {
2328    #[validate(regex = "ANY_BIC_DEC_2014_IDENTIFIER_REGEX")]
2329    #[serde(rename = "$text")]
2330    pub value: String,
2331}
2332#[derive(
2333    Debug,
2334    Default,
2335    Clone,
2336    PartialEq,
2337    ::serde::Serialize,
2338    ::serde::Deserialize,
2339    ::derive_builder::Builder,
2340    ::validator::Validate,
2341)]
2342pub struct Exact3NumericText {
2343    #[validate(regex = "EXACT_3_NUMERIC_TEXT_REGEX")]
2344    #[serde(rename = "$text")]
2345    pub value: String,
2346}
2347#[derive(
2348    Debug,
2349    Default,
2350    Clone,
2351    PartialEq,
2352    ::serde::Serialize,
2353    ::serde::Deserialize,
2354    ::derive_builder::Builder,
2355    ::validator::Validate,
2356)]
2357pub struct OptionType6ChoiceEnum {
2358    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
2359    pub prtry: Option<GenericIdentification30>,
2360    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
2361    pub cd: Option<OptionType1Code>,
2362}
2363#[derive(
2364    Debug,
2365    Default,
2366    Clone,
2367    PartialEq,
2368    ::serde::Serialize,
2369    ::serde::Deserialize,
2370    ::derive_builder::Builder,
2371    ::validator::Validate,
2372)]
2373pub struct OptionType6Choice {
2374    #[serde(flatten)]
2375    pub value: OptionType6ChoiceEnum,
2376}
2377#[derive(
2378    Debug,
2379    Default,
2380    Clone,
2381    PartialEq,
2382    ::serde::Serialize,
2383    ::serde::Deserialize,
2384    ::derive_builder::Builder,
2385    ::validator::Validate,
2386)]
2387#[serde(rename = "Document")]
2388pub struct Document<
2389    A: std::fmt::Debug + Default + Clone + PartialEq + ::serde::Serialize + ::validator::Validate,
2390> {
2391    #[validate]
2392    #[serde(rename = "TrptyCollTxInstr")]
2393    pub trpty_coll_tx_instr: TripartyCollateralTransactionInstructionV01<A>,
2394    #[serde(rename = "@xmlns", default = "namespace")]
2395    pub xmlns: String,
2396}
2397#[derive(
2398    Debug,
2399    Default,
2400    Clone,
2401    PartialEq,
2402    ::serde::Serialize,
2403    ::serde::Deserialize,
2404    ::derive_builder::Builder,
2405    ::validator::Validate,
2406)]
2407pub struct PartyIdentification120ChoiceEnum {
2408    #[serde(rename = "PrtryId", skip_serializing_if = "Option::is_none")]
2409    pub prtry_id: Option<GenericIdentification36>,
2410    #[serde(rename = "NmAndAdr", skip_serializing_if = "Option::is_none")]
2411    pub nm_and_adr: Option<NameAndAddress5>,
2412    #[serde(rename = "AnyBIC", skip_serializing_if = "Option::is_none")]
2413    pub any_bic: Option<AnyBicDec2014Identifier>,
2414}
2415#[derive(
2416    Debug,
2417    Default,
2418    Clone,
2419    PartialEq,
2420    ::serde::Serialize,
2421    ::serde::Deserialize,
2422    ::derive_builder::Builder,
2423    ::validator::Validate,
2424)]
2425pub struct PartyIdentification120Choice {
2426    #[serde(flatten)]
2427    pub value: PartyIdentification120ChoiceEnum,
2428}
2429#[derive(Debug, Default, Clone, PartialEq, ::serde::Serialize, ::serde::Deserialize)]
2430pub enum EventFrequency12Code {
2431    #[serde(rename = "ADHO")]
2432    Adho,
2433    #[serde(rename = "YEAR")]
2434    Year,
2435    #[serde(rename = "DAIL")]
2436    Dail,
2437    #[serde(rename = "TOMN")]
2438    Tomn,
2439    #[serde(rename = "TOWK")]
2440    Towk,
2441    #[serde(rename = "INDA")]
2442    Inda,
2443    #[serde(rename = "MNTH")]
2444    Mnth,
2445    #[serde(rename = "QUTR")]
2446    Qutr,
2447    #[serde(rename = "SEMI")]
2448    Semi,
2449    #[serde(rename = "TWMN")]
2450    Twmn,
2451    #[serde(rename = "WEEK")]
2452    Week,
2453    #[serde(rename = "ONDE")]
2454    Onde,
2455    #[default]
2456    Unknown,
2457}
2458#[derive(
2459    Debug,
2460    Default,
2461    Clone,
2462    PartialEq,
2463    ::serde::Serialize,
2464    ::serde::Deserialize,
2465    ::derive_builder::Builder,
2466    ::validator::Validate,
2467)]
2468pub struct PartyIdentification136 {
2469    #[serde(rename = "Id")]
2470    pub id: PartyIdentification120Choice,
2471    #[serde(rename = "LEI", skip_serializing_if = "Option::is_none")]
2472    pub lei: Option<LeiIdentifier>,
2473}
2474#[derive(
2475    Debug,
2476    Default,
2477    Clone,
2478    PartialEq,
2479    ::serde::Serialize,
2480    ::serde::Deserialize,
2481    ::derive_builder::Builder,
2482    ::validator::Validate,
2483)]
2484pub struct CashMovement8 {
2485    #[serde(rename = "CshMvmnt")]
2486    pub csh_mvmnt: CollateralEntryType1Code,
2487    #[validate]
2488    #[serde(rename = "CshAmt")]
2489    pub csh_amt: ActiveCurrencyAndAmount,
2490    #[serde(rename = "CshAcct", skip_serializing_if = "Option::is_none")]
2491    pub csh_acct: Option<CashAccountIdentification5Choice>,
2492    #[validate]
2493    #[serde(rename = "CollMvmnt")]
2494    pub coll_mvmnt: YesNoIndicator,
2495    #[serde(rename = "ClntCshMvmntId", skip_serializing_if = "Option::is_none")]
2496    pub clnt_csh_mvmnt_id: Option<Max35Text>,
2497    #[serde(
2498        rename = "TrptyAgtSvcPrvdrCshMvmntId",
2499        skip_serializing_if = "Option::is_none"
2500    )]
2501    pub trpty_agt_svc_prvdr_csh_mvmnt_id: Option<Max35Text>,
2502}
2503#[derive(
2504    Debug,
2505    Default,
2506    Clone,
2507    PartialEq,
2508    ::serde::Serialize,
2509    ::serde::Deserialize,
2510    ::derive_builder::Builder,
2511    ::validator::Validate,
2512)]
2513pub struct IdentificationSource3ChoiceEnum {
2514    #[serde(rename = "Cd", skip_serializing_if = "Option::is_none")]
2515    pub cd: Option<ExternalFinancialInstrumentIdentificationType1Code>,
2516    #[serde(rename = "Prtry", skip_serializing_if = "Option::is_none")]
2517    pub prtry: Option<Max35Text>,
2518}
2519#[derive(
2520    Debug,
2521    Default,
2522    Clone,
2523    PartialEq,
2524    ::serde::Serialize,
2525    ::serde::Deserialize,
2526    ::derive_builder::Builder,
2527    ::validator::Validate,
2528)]
2529pub struct IdentificationSource3Choice {
2530    #[serde(flatten)]
2531    pub value: IdentificationSource3ChoiceEnum,
2532}
2533#[derive(
2534    Debug,
2535    Default,
2536    Clone,
2537    PartialEq,
2538    ::serde::Serialize,
2539    ::serde::Deserialize,
2540    ::derive_builder::Builder,
2541    ::validator::Validate,
2542)]
2543pub struct BasketIdentificationAndEligibilitySetProfile1 {
2544    #[serde(rename = "PrfrntlBsktIdNb", skip_serializing_if = "Option::is_none")]
2545    pub prfrntl_bskt_id_nb: Option<GenericIdentification1>,
2546    #[serde(rename = "FllbckStartgBsktId", skip_serializing_if = "Option::is_none")]
2547    pub fllbck_startg_bskt_id: Option<GenericIdentification1>,
2548    #[serde(rename = "ExclsnBsktId", skip_serializing_if = "Option::is_none")]
2549    pub exclsn_bskt_id: Option<GenericIdentification1>,
2550    #[serde(rename = "ElgbltySetPrfl", skip_serializing_if = "Option::is_none")]
2551    pub elgblty_set_prfl: Option<GenericIdentification1>,
2552}
2553#[derive(
2554    Debug,
2555    Default,
2556    Clone,
2557    PartialEq,
2558    ::serde::Serialize,
2559    ::serde::Deserialize,
2560    ::derive_builder::Builder,
2561    ::validator::Validate,
2562)]
2563pub struct References70ChoiceEnum {
2564    #[serde(rename = "ClntCollInstrId", skip_serializing_if = "Option::is_none")]
2565    pub clnt_coll_instr_id: Option<Max35Text>,
2566    #[serde(
2567        rename = "TrptyAgtSvcPrvdrCollInstrId",
2568        skip_serializing_if = "Option::is_none"
2569    )]
2570    pub trpty_agt_svc_prvdr_coll_instr_id: Option<Max35Text>,
2571}
2572#[derive(
2573    Debug,
2574    Default,
2575    Clone,
2576    PartialEq,
2577    ::serde::Serialize,
2578    ::serde::Deserialize,
2579    ::derive_builder::Builder,
2580    ::validator::Validate,
2581)]
2582pub struct References70Choice {
2583    #[serde(flatten)]
2584    pub value: References70ChoiceEnum,
2585}
2586#[derive(
2587    Debug,
2588    Default,
2589    Clone,
2590    PartialEq,
2591    ::serde::Serialize,
2592    ::serde::Deserialize,
2593    ::derive_builder::Builder,
2594    ::validator::Validate,
2595)]
2596pub struct PartyIdentificationAndAccount203 {
2597    #[serde(rename = "Id")]
2598    pub id: PartyIdentification120Choice,
2599    #[serde(rename = "LEI", skip_serializing_if = "Option::is_none")]
2600    pub lei: Option<LeiIdentifier>,
2601    #[serde(rename = "AltrnId", skip_serializing_if = "Option::is_none")]
2602    pub altrn_id: Option<AlternatePartyIdentification7>,
2603    #[serde(rename = "SfkpgAcct", skip_serializing_if = "Option::is_none")]
2604    pub sfkpg_acct: Option<SecuritiesAccount19>,
2605    #[serde(rename = "BlckChainAdrOrWllt", skip_serializing_if = "Option::is_none")]
2606    pub blck_chain_adr_or_wllt: Option<BlockChainAddressWallet3>,
2607    #[serde(rename = "PtyCpcty", skip_serializing_if = "Option::is_none")]
2608    pub pty_cpcty: Option<TradingPartyCapacity5Choice>,
2609}
2610#[derive(
2611    Debug,
2612    Default,
2613    Clone,
2614    PartialEq,
2615    ::serde::Serialize,
2616    ::serde::Deserialize,
2617    ::derive_builder::Builder,
2618    ::validator::Validate,
2619)]
2620pub struct PostalAddress1 {
2621    #[serde(rename = "AdrTp", skip_serializing_if = "Option::is_none")]
2622    pub adr_tp: Option<AddressType2Code>,
2623    #[validate(length(min = 0, max = 5,))]
2624    #[serde(rename = "AdrLine", default)]
2625    pub adr_line: Vec<Max70Text>,
2626    #[serde(rename = "StrtNm", skip_serializing_if = "Option::is_none")]
2627    pub strt_nm: Option<Max70Text>,
2628    #[serde(rename = "BldgNb", skip_serializing_if = "Option::is_none")]
2629    pub bldg_nb: Option<Max16Text>,
2630    #[serde(rename = "PstCd", skip_serializing_if = "Option::is_none")]
2631    pub pst_cd: Option<Max16Text>,
2632    #[serde(rename = "TwnNm", skip_serializing_if = "Option::is_none")]
2633    pub twn_nm: Option<Max35Text>,
2634    #[serde(rename = "CtrySubDvsn", skip_serializing_if = "Option::is_none")]
2635    pub ctry_sub_dvsn: Option<Max35Text>,
2636    #[serde(rename = "Ctry")]
2637    pub ctry: CountryCode,
2638}
2639#[derive(
2640    Debug,
2641    Default,
2642    Clone,
2643    PartialEq,
2644    ::serde::Serialize,
2645    ::serde::Deserialize,
2646    ::derive_builder::Builder,
2647    ::validator::Validate,
2648)]
2649pub struct ActiveOrHistoricCurrencyCode {
2650    #[validate(regex = "ACTIVE_OR_HISTORIC_CURRENCY_CODE_REGEX")]
2651    #[serde(rename = "$text")]
2652    pub value: String,
2653}